Deletion of reports should work now.
authorphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Sat, 22 Nov 2008 22:00:14 +0000 (22:00 +0000)
committerphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Sat, 22 Nov 2008 22:00:14 +0000 (22:00 +0000)
git-svn-id: http://www.winterrodeln.org/svn/servermediawiki/trunk/extensions/wrreport@330 7aebc617-e5e2-0310-91dc-80fb5f6d2477

wrreport.body.php

index f818418cb84810929a9c6d1e0bce6d405b159405..721271ae915eb7c813a48c39159e21e85b09ba31 100644 (file)
@@ -104,6 +104,7 @@ function wrReportFormRender($hide_save_button = TRUE, $page_title = NULL, $date_
        $buttons .= '" /> ';
        if (!$hide_save_button) $buttons .= '<input name="store" type="submit" value="Speichern"/>';
 
+       // TODO: Get rid of absolute URL
        $form = <<<EOT
 <form action="/wiki/Spezial:Bahnberichte" method="post">
 <table class="wrreportform" summary="Formular zum Eintragen eines Rodelbahnberichtes">
@@ -142,6 +143,7 @@ function wrDeleteReportFormRender($reportid, $delete_person_name, $delete_reason
        $delete_reason_public_html = htmlspecialchars($delete_reason_public);
        $delete_person_name_html = htmlspecialchars($delete_person_name);
 
+       // TODO: Get rid of absolute URL
        $form = <<<EOT
 <form action="/wiki/Spezial:Bahnberichte" method="post">
 <table class="wrreportform" summary="$summary">
@@ -156,91 +158,6 @@ EOT;
 
 
 
-/// \brief sub-function of wrReportTableRender - renders the table head
-///
-/// The input variables are either NULL (-> the column is not present) or a UTF-8 encoded string (that is ignored ;-) ).
-/// \return UTF-8 encoded titles of HTML table
-/// \todo: Delete
-function wrReportTableTitleRender($page_id, $page_title, $date_report, $date_entry, $date_invalid, $condition, $description, $author_name, $delete = NULL) {
-       $out = '<tr>';
-       if ($page_id) $out .= '<th>ID</th>';
-       if ($page_title) $out .= '<th>Bahn</th>';
-       if ($date_report) $out .= '<th>Datum</th>';
-       if ($date_entry) $out .= '<th>Datum Eintrag</th>';
-       if ($date_invalid) $out .= '<th>Datum Ungültig</th>';
-       if ($condition) $out .= '<th>Zustand</th>';
-       if ($description) $out .= '<th>Beschreibung</th>';
-       if ($author_name) $out .= '<th>Autor</th>';
-       if ($delete) $out .= '<th>Aktion</th>';
-       return utf8_encode($out . "</tr>\n");
-}
-
-
-/// \brief sub-function of wrReportTableRender - renders a table row
-///
-/// * The in- and output parameters are expected to be UTF-8 encoded.
-/// * If one parameter is NULL, the corresponding column is omitted.
-/// \param $page_id
-/// \param $page_title
-/// \param $date_report
-/// \param $date_entry
-/// \param $date_invalid
-/// \param $condition
-/// \param $description
-/// \param $author_name
-/// \param $delete
-/// \todo delete
-function wrReportTableRowRender($page_id, $page_title, $date_report, $date_entry, $date_invalid, $condition, $description, $author_name, $delete = NULL) {
-       $out = "<tr>";
-       if (!is_null($page_id)) $out .= '<td>' . $page_id . '</td>';
-       if (!is_null($page_title)) $out .= '<td>' . wrReportSandboxParse('[[' . $page_title . ']]') . '</td>';
-       $dayOfWeek = array('Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So');
-       $date_report = strtotime($date_report);
-       $date_report = $dayOfWeek[strftime('%u', $date_report)-1] . strftime(', %d.%m.', $date_report);
-       $out .= '<td>' . $date_report . '</td>';
-       if (!is_null($date_entry)) $out .= '<td>' . date('Y-m-d, H:i', strtotime($date_entry)) . '</td>';
-       if (!is_null($date_invalid)) $out .= '<td>' . date('Y-m-d, H:i', strtotime($date_invalid)) . '</td>';
-       global $wrConditions;
-       $condition_text = '---';
-       if (isset($wrConditions[$condition])) $condition_text = $wrConditions[$condition];
-       $out .= '<td>' . htmlspecialchars($condition_text) . '</td>';
-       $out .= '<td class="wrreportdescription">' . wrReportSandboxParse($description) . '</td>';
-       $out .= '<td>' . htmlspecialchars($author_name) . '</td>';
-       if (!is_null($delete)) $out .= '<td>(Löschen)</td>';
-       $out .= "</tr>\n";
-       return $out;
-}
-
-
-/// \brief It returns a table (string containing HTML) showing the results.
-///
-/// Is called when the tag <bahnberichte/> is encounted and renders a table /
-/// \param $page_title If the name is specified (UTF-8 encoded), only reports of this "page" (e.g. 'Birgitzer Alm') is shown. Default: NULL
-/// \return UTF-8 encoded HTML result table
-/// \todo delte
-function wrReportTableRender($page_title = NULL) {
-       $out = '';
-       $dbr = wfGetDB(DB_SLAVE);
-       $conditions = array();
-       if ($page_title) $conditions['page_title'] = $page_title;
-       $res = $dbr->select('wrreport', array('id', 'page_title', 'date_report', 'date_entry', 'date_invalid', 'condition', 'description', 'author_name', 'author_username'), $conditions, $fname = 'Database::select', $options = array('ORDER BY' => 'date_report desc, date_entry desc'));
-       $admin = is_null($page_title);
-       if ($res->numRows() > 0) {
-               $out .= "<table class=\"wrreporttable\">\n";
-               $out .= wrReportTableTitleRender($admin, $admin, TRUE, $admin, $admin, TRUE, TRUE, TRUE);
-               while ($row = $dbr->fetchObject($res)) {
-                       $author = $row->author_name;
-                       $out .= wrReportTableRowRender($admin ? $row->id : NULL, $admin ? $row->page_title : NULL, $row->date_report, $admin ? $row->date_entry : NULL, $admin ? $row->date_invalid : NULL, $row->condition, $row->description, $author);
-               }
-               $out .= "</table>\n";
-       } else {
-               $out .= wrReportSandboxParse("''Es wurden keine Bahnberichte in der Datenbank gefunden.''\n\n");
-       }
-       $dbr->freeResult($res);
-       return $out;
-}
-
-
 // Constants for wrReportTableRender2
 define(WRREPORT_COMPACT_PAGE, 1); ///< includes the page name
 define(WRREPORT_COMPACT, 2);      ///< shown on a single page 
@@ -308,7 +225,10 @@ function wrReportTableRowRender2($row, $format, $showActions) {
        else $out .= htmlspecialchars($author_name);
        $out .= '</td>';
        // actions
-       if ($showActions)  $out .= '<td>' . utf8_encode('(Löschen)') . '</td>';
+       // wiki/Spezial:Bahnberichte?action=deletepreview&reportid=42
+       if ($showActions) {
+               if (!isset($row['delete_date'])) $out .= '<td><a href="/wiki/Spezial:Bahnberichte?action=deletepreview&amp;reportid=' . $row['id'] . '">' . utf8_encode('Löschen...') . '</a></td>'; // TODO: Get rid of absolute URL
+       }
        return $out . "</tr>\n";
 }
 
@@ -385,9 +305,7 @@ function bahnberichtformularParserHook($input, $args, $parser) {
        if ($wgWrReportMode == 'summer') return wrReportSandboxParse(utf8_encode("''An dieser Stelle kann während des Winters die Schneelage von Rodelbahnen eingetragen werden.''\n\n"));
        if ($wgWrReportMode == 'deny') return wrReportSandboxParse(utf8_encode("''Rodelbahnberichte sind derzeit leider nicht erlaubt.''\n\n"));
 
-       // The following was changed because for testing purposes, we have 'loggedin' instead of 'summer' in the $wgWrReportMode. TODO: Change back!
-       // if ($wgWrReportMode == 'loggedin' && !$wgUser->isLoggedIn()) return wrReportSandboxParse(utf8_encode("''Derzeit sind Rodelbahnberichte nur für angemeldete Benutzer erlaubt.''\n\n"));
-       if ($wgWrReportMode == 'loggedin' && !$wgUser->isLoggedIn()) return wrReportSandboxParse(utf8_encode("''An dieser Stelle kann während des Winters die Schneelage von Rodelbahnen eingetragen werden.''\n\n"));
+       if ($wgWrReportMode == 'loggedin' && !$wgUser->isLoggedIn()) return wrReportSandboxParse(utf8_encode("''Derzeit sind Rodelbahnberichte nur für angemeldete Benutzer erlaubt.''\n\n"));
 
        if (in_array($parser->getTitle()->getText(), $wgWrReportBlackListAll)) return wrReportSandboxParse(utf8_encode("''Bei dieser Rodelbahn dürfen derzeit leider keine Rodelbahnberichte abgegeben werden.''\n"));
        if (!$wgUser->isLoggedIn() && in_array($parser->getTitle()->getText(), $wgWrReportBlackListStrangers)) return wrReportSandboxParse(utf8_encode("''Bei der angegebenen Rodelbahn dürfen derzeit nur angemeldete Benutzer Rodelbahnberichte abgebe.''\n\n"));
@@ -399,7 +317,12 @@ function bahnberichtformularParserHook($input, $args, $parser) {
 ///
 /// The current page name is taken.
 function bahnberichteParserHook($input, $args, &$parser) {
-       return wrReportTableRender($parser->getTitle()->getText()); // TODO: Replace
+       $page_title = $parser->getTitle()->getText();
+       $conditions = array('page_title' => $page_title, 'date_invalid > now()');
+       $order = 'date_report desc, date_entry desc';
+       $rows = wrReportGetReports($conditions, $order);
+       if (count($rows) == 0) return wrReportSandboxParse("''Es wurden keine Bahnberichte in der Datenbank gefunden.''\n\n");
+       return wrReportTableRender2($rows, WRREPORT_COMPACT, true);
 }
 
 
@@ -485,19 +408,13 @@ class WrReport extends SpecialPage {
 
                // Action view
                if ($action == 'view') {                
-                       $wgOut->addHTML(wrReportTableRender()); // TODO: Replace
-               }
-
-               elseif ($action == 'test') { // TODO: delete
-                       $conditions = array('page_title' => 'Axamer Lizum', 'date_invalid > now()');
-                       $order = 'date_report desc, date_entry desc';
+                       $conditions = array('date_invalid > now()');
+                       $order = 'date_entry desc, date_report desc';
                        $rows = wrReportGetReports($conditions, $order);
-                       $format = WRREPORT_COMPACT_PAGE; // WRREPORT_COMPACT WRREPORT_DETAIL
-                       $format = WRREPORT_DETAIL;
-                       $wgOut->addHTML(wrReportTableRender2($rows, $format, True)); 
-                       $wgOut->addHTML('OK');
+                       if (count($rows) == 0) $wgOut->addWikiText("''Es wurden keine Bahnberichte in der Datenbank gefunden.''\n\n");
+                       $wgOut->addHTML(wrReportTableRender2($rows, WRREPORT_DETAIL, True)); 
                }
-               
+
                // Action deletepreview or delete
                elseif ($action == 'deletepreview' || $action == 'delete') {
                        $reportid = (int) $wgRequest->getText('reportid');
@@ -515,7 +432,6 @@ class WrReport extends SpecialPage {
                                $this->execute($par, 'showerror', utf8_encode('Der angegebende Bericht ist bereits gelöscht.'));
                                return;
                        }
-                       // $row = array_fill_keys(wrReportGetColumnNames(), NULL); // TODO: Delete
                        $delete_reason_public = $wgRequest->getText('delete_reason_public');
                        $delete_person_name = $wgRequest->getText('delete_person_name');
                        $delete_invisible = $wgRequest->getText('delete_invisible') ? TRUE : FALSE;
@@ -534,9 +450,9 @@ class WrReport extends SpecialPage {
                                global $wgWrReportDeleteMode;
                                if ($wgWrReportDeleteMode == 'deny') $errorMsg = utf8_encode('Das Löschen von Rodelbahnberichten ist derzeit leider nicht erlaubt.');
                                elseif ($wgWrReportDeleteMode == 'loggedin' && !$wgUser->isLoggedIn()) $errorMsg = utf8_encode('Derzeit dürfen nur angemeldete Benutzer Rodelbahnberichte löschen.');
-                               elseif (!$delete_person_name && !$delete_reason_public) $errorMsg = utf8_encode('Es müssen sowohl die Begründung als auch der Name angegeben werden.');
+                               elseif (!$delete_person_name || !$delete_reason_public) $errorMsg = utf8_encode('Es müssen sowohl die Begründung als auch der Name angegeben werden.');
                                if ($errorMsg) {
-                                       $this->execute($par, 'preview', $errorMsg);
+                                       $this->execute($par, 'deletepreview', $errorMsg);
                                        return;
                                }
                                
@@ -563,18 +479,19 @@ class WrReport extends SpecialPage {
                                $wgOut->addWikiText(utf8_encode('<div class="successbox">Der Bahnbericht für [[') . $row['page_title'] . '#' . $wrShowReportsSection . '|' . $row['page_title'] . utf8_encode("]] wurde erfolgreich gelöscht.</div>\n"));
                        }
                        if ($action == 'deletepreview') {
+                               $preview_msg = "Bitte nur dann einen Bericht löschen, wenn Gründe vorliegen wie\n" .
+                               "* Beschimpfungen, Verleumdungen (wir wollen ''Rodelbahnen'' bewerten, nicht Personen)\n" .
+                               "* Werbung oder Spam (wenn jemand allerdings ''werbend'' zu gute Noten vergibt, lieber eigenen Bericht eintragen als löschen).\n\n";
+                               $wgOut->addWikiText(utf8_encode($preview_msg));
                                $wgOut->addWikiText(utf8_encode("== Schneelagebericht, um den es beim Löschen geht ==\n"));
                                $format = WRREPORT_COMPACT_PAGE;
                                $wgOut->addHTML(wrReportTableRender2(array($row), $format, FALSE));
-                               $wgOut->addWikiText(utf8_encode("\n\n== Vorschau (noch nicht gelöscht) ==\n"));
+                               $wgOut->addWikiText(utf8_encode("\n\n== Vorschau (derzeit noch nicht gelöscht) ==\n"));
                                $row['delete_date'] = date('c');
                                $row['delete_reason_public'] = $delete_reason_public;
                                $row['delete_person_name'] = $delete_person_name;
                                $row['delete_invisible'] = $delete_invisible;
-                               $wgOut->addHTML("<table class=\"wrreporttable\">\n");
                                $wgOut->addHTML(wrReportTableRender2(array($row), $format, FALSE));
-                               $wgOut->addHTML("</table>");
-                               $wgOut->addWikiText("\n");
                                $wgOut->addWikiText(utf8_encode("== Löschen ==\n"));
                                $wgOut->addWikiText(utf8_encode("Die Begründung und der Name scheinen nicht in den normalen Listen auf, allerdings dienen sie den Administratoren dazu, sich schnell einen Überblick zu verschaffen, wer was warum gelöscht hat.\n"));
                                $wgOut->addHTML(wrDeleteReportFormRender($reportid, $delete_person_name, $delete_reason_public, $delete_invisible));
@@ -642,6 +559,7 @@ class WrReport extends SpecialPage {
                                                'author_ip' => $_SERVER['REMOTE_ADDR'],
                                                'author_userid' => $author_userid,
                                                'author_username' => $author_username
+                                               // 'delete_*' => // use database defaults (NULL)
                                        )
                                );
 
@@ -655,11 +573,14 @@ class WrReport extends SpecialPage {
                        }
                        if ($action == 'preview') {
                                $wgOut->addWikiText(utf8_encode("== Vorschau (noch nicht gespeichert) ==\n"));
-                               $wgOut->addHTML("<table class=\"wrreporttable\">\n");
-                               $wgOut->addHTML(wrReportTableTitleRender(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE));
-                               $wgOut->addHTML(wrReportTableRowRender(NULL, $page_title, $date_report, NULL, NULL, $condition, $description, $author_name));
-                               $wgOut->addHTML("</table>");
-                               $wgOut->addWikiText("\n");
+                               $format = WRREPORT_COMPACT_PAGE;
+                               $row = array_fill_keys(wrReportGetColumnNames(), NULL);
+                               $row['page_title'] = $page_title;
+                               $row['date_report'] = $date_report;
+                               $row['condition'] = $condition;
+                               $row['description'] = $description;
+                               $row['author_name'] = $author_name;
+                               $wgOut->addHTML(wrReportTableRender2(array($row), $format, FALSE));
                                $wgOut->addWikiText(utf8_encode("== Speichern oder Ändern ==\n"));
                                $wgOut->addHTML(wrReportFormRender(FALSE, $page_title, $date_report, $condition, $description, $author_name));
                        }