Exemplo n.º 1
0
 /**
  * Shows the details for a given Athena ID
  * TODO add back buttons
  *
  * @param $id integer the id of the page they want to see
  */
 public function showAthenaPage($id)
 {
     global $wgAthenaTraining;
     $output = $this->getOutput();
     $this->setHeaders();
     $output->setPageTitle(wfMessage('athena-title') . ' - ' . wfMessage('athena-viewing', $id));
     $dbr = wfGetDB(DB_SLAVE);
     $res = $dbr->selectRow(array('athena_log', 'athena_page_details'), array('athena_log.al_id', 'al_value', 'apd_namespace', 'apd_title', 'apd_user', 'apd_timestamp', 'al_success', 'apd_comment', 'apd_content', 'al_user_age', 'al_links', 'al_link_percentage', 'al_syntax', 'apd_language', 'al_language', 'al_wanted', 'al_deleted', 'al_overridden', 'page_id'), array('athena_log.al_id' => $id, 'athena_page_details.al_id' => $id), __METHOD__, array());
     if ($res) {
         // Start info box at the top
         $tableStr = '<table class="wikitable"><tbody>';
         $tableStr .= '<tr><td>' . wfMessage('athena-view-title') . '</td>';
         // Make a pretty title
         $title = Title::newFromText(stripslashes($res->apd_title), $res->apd_namespace);
         $tableStr .= '<td>' . $output->parse('[[:' . $title->getFullText() . ']]') . '</td></tr>';
         // Get the user
         $tableStr .= '<tr><td>' . wfMessage('athena-view-user') . '</td>';
         if ($res->apd_user != 0) {
             $user = User::newFromId($res->apd_user);
             $link = $output->parse('[[' . $user->getUserPage() . '|' . $user->getName() . ']]');
             $tableStr .= '<td>' . $link . '</td>';
         } else {
             $tableStr .= '<td>' . wfMessage('athena-anon') . '</td>';
         }
         $tableStr .= '</tr><tr><td>' . wfMessage('athena-view-timestamp') . '</td>';
         $tableStr .= '<td>' . $res->apd_timestamp . '</td></tr>';
         $tableStr .= '</tr><tr><td>' . wfMessage('athena-view-language') . '</td>';
         $lang = $res->apd_language;
         $tableStr .= '<td>' . $lang . '</td></tr>';
         if ($res->apd_comment) {
             $tableStr .= '<tr><td>' . wfMessage('athena-view-comment') . '</td>';
             $tableStr .= '<td>' . stripslashes($res->apd_comment) . '</td></tr>';
         }
         if ($res->al_success < 2) {
             $tableStr .= '<tr><td>' . wfMessage('athena-view-athena-value') . '</td><td>' . $res->al_value . '</td></tr>';
         }
         $tableStr .= '<tr><td colspan="2"><b>';
         if ($res->al_success == 1) {
             $tableStr .= wfMessage('athena-view-not-blocked');
         } else {
             if ($res->al_success == 0) {
                 $tableStr .= wfMessage('athena-view-blocked');
             } else {
                 if ($res->al_success == 3) {
                     $tableStr .= wfMessage('athena-view-training-spam');
                 } else {
                     if ($res->al_success == 4) {
                         $tableStr .= wfMessage('athena-view-training-not-spam');
                     } else {
                         $tableStr .= wfMessage('athena-view-training');
                     }
                 }
             }
         }
         $tableStr .= '</b></td></tr>';
         $tableStr .= '</tbody></table>';
         $output->addHTML($tableStr);
         // Reinforcement button
         if ($res->al_success == 1) {
             if ($res->al_overridden) {
                 $output->addWikiText(wfMessage('athena-view-not-blocked-reinforce-done'));
             } else {
                 // Page has been deleted, but not within Athena's remit
                 //if ( $title->getArticleID() != $res->page_id ) {
                 $output->addWikiText('[[{{NAMESPACE}}:' . wfMessage('athena-title') . '/' . wfMessage('athena-delete-url') . '/' . $res->al_id . '|' . wfMessage('athena-view-not-blocked-reinforce') . ']]');
                 /*} else {
                 			$output->addHTML( '<a href=' . $title->getFullURL( array( 'action' => 'delete' ) ) . '>' . wfMessage( 'athena-view-not-blocked-reinforce' ) . '</a>' );
                 		}*/
             }
         } else {
             if ($res->al_success == 0) {
                 if ($res->al_overridden) {
                     $output->addWikiText(wfMessage('athena-view-blocked-reinforce-done'));
                 } else {
                     $output->addWikiText('[[{{NAMESPACE}}:' . wfMessage('athena-title') . '/' . wfMessage('athena-create-url') . '/' . $res->al_id . '|' . wfMessage('athena-view-blocked-reinforce') . ']]');
                 }
             } else {
                 if ($wgAthenaTraining) {
                     if ($res->al_overridden) {
                         if ($res->al_success == 3) {
                             $output->addWikiText(wfMessage('athena-view-training-reinforce-done-spam'));
                         } else {
                             $output->addWikiText(wfMessage('athena-view-training-reinforce-done-not-spam'));
                         }
                     } else {
                         $output->addWikiText('[[{{NAMESPACE}}:' . wfMessage('athena-title') . '/' . wfMessage('athena-reinforce-url') . '/' . wfMessage('athena-reinforce-spam-url') . '/' . $res->al_id . '|<span style="color:red;">' . wfMessage('athena-view-training-reinforce-spam') . '</span>]] [[{{NAMESPACE}}:' . wfMessage('athena-title') . '/' . wfMessage('athena-reinforce-url') . '/' . wfMessage('athena-reinforce-not-spam-url') . '/' . $res->al_id . '|<span style="color:green;">' . wfMessage('athena-view-training-reinforce-not-spam') . '</span>]]');
                     }
                 } else {
                     $output->addWikiMsg('athena-training-off');
                 }
             }
         }
         // Replace \n with new line, remove slashes
         $content = stripslashes(str_replace('\\n', PHP_EOL, $res->apd_content));
         $output->addWikiText('== ' . wfMessage('athena-view-content') . ' ==');
         $output->addWikiText('<h3>' . wfMessage('athena-view-wikitext') . '</h3>');
         $output->addHTML('<div class="toccolours mw-collapsible">');
         $output->addHTML('<pre>' . $content . '</pre>');
         $output->addHTML('</div>');
         // For the preview, display it replacing {{PAGENAME}} with the correct title
         // TODO magic words are language dependant
         $content = str_replace('{{PAGENAME}}', $title, $content);
         $output->addWikiText('<h3>' . wfMessage('athena-view-preview') . '</h3>');
         $output->addHTML('<div class="toccolours mw-collapsible mw-collapsed">');
         $output->addWikiText($content);
         $output->addHTML('</div>');
         if ($res->al_success < 2) {
             $calc = $dbr->selectRow(array('athena_calculations'), array('*'), array('al_id' => $id), __METHOD__, array());
             // Display Athena scores
             $output->addWikiText('== ' . wfMessage('athena-view-results') . ' ==');
             $tableStr = '<table class="wikitable"><thead><th>' . wfMessage('athena-view-metric') . '</th>';
             $tableStr .= '<th>' . wfMessage('athena-view-result') . '</th>';
             $tableStr .= '<th>' . wfMessage('athena-view-probability') . '</th>';
             $tableStr .= '<th>' . wfMessage('athena-view-probability-and') . '</th>';
             $tableStr .= '<th>' . wfMessage('athena-view-probability-given') . '</th>';
             $tableStr .= '<th>' . wfMessage('athena-view-probability-given-result') . '</th>';
             $tableStr .= '</thead><tbody>';
             $probSpam = $calc->ac_p_spam;
             $tableStr .= '<tr><td>' . wfMessage('athena-view-prob-spam') . '</td><td colspan="5">' . $probSpam . '</td></tr>';
             $numerator = '';
             $denominator = '';
             $ageStr = AthenaHelper::secondsToString($res->al_user_age);
             if ($ageStr === '') {
                 if ($res->al_user_age == -1) {
                     $ageStr = wfMessage('athena-anon');
                 } else {
                     if ($res->al_user_age == -2) {
                         $ageStr = wfMessage('athena-view-not-available');
                     } else {
                         $ageStr = wfMessage('athena-view-imported');
                     }
                 }
             }
             $tableStr .= '<tr><td>' . wfMessage('athena-view-user-age') . '</td><td>' . $ageStr . '</td>';
             $p = $calc->ac_p_user;
             $a = $calc->ac_p_userandspam;
             $g = $calc->ac_p_usergivenspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             $numerator .= "{$g} * ";
             $denominator .= "{$p} * ";
             $linkPercentage = $res->al_link_percentage * 100;
             $tableStr .= '<tr><td>' . wfMessage('athena-view-link-percentage') . '</td><td>' . $linkPercentage . '% ( ' . $res->al_links . ' ' . wfMessage('athena-view-links') . ' )</td>';
             $p = $calc->ac_p_links;
             $a = $calc->ac_p_linksandspam;
             $g = $calc->ac_p_linksgivenspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             $numerator .= "{$g} * ";
             $denominator .= "{$p} * ";
             $tableStr .= '<tr><td>' . wfMessage('athena-view-syntax') . '</td><td>' . AthenaHelper::syntaxTypeToString($res->al_syntax) . '</td>';
             $p = $calc->ac_p_syntax;
             $a = $calc->ac_p_syntaxandspam;
             $g = $calc->ac_p_syntaxgivenspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             $numerator .= "{$g} * ";
             $denominator .= "{$p} * ";
             $tableStr .= '<tr><td>' . wfMessage('athena-view-lang') . '</td><td>' . AthenaHelper::boolToString($res->al_language) . '</td>';
             $p = $calc->ac_p_lang;
             $a = $calc->ac_p_langandspam;
             $g = $calc->ac_p_langgivenspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             $numerator .= "{$g} * ";
             $denominator .= "{$p} * ";
             $tableStr .= '<tr><td>' . wfMessage('athena-view-wanted') . '</td><td>' . AthenaHelper::boolToString($res->al_wanted) . '</td>';
             $p = $calc->ac_p_wanted;
             $a = $calc->ac_p_wantedandspam;
             $g = $calc->ac_p_wantedgivenspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             $numerator .= "{$g} * ";
             $denominator .= "{$p} * ";
             $tableStr .= '<tr><td>' . wfMessage('athena-view-deleted') . '</td><td>' . AthenaHelper::boolToString($res->al_deleted) . '</td>';
             $p = $calc->ac_p_deleted;
             $a = $calc->ac_p_deletedandspam;
             $g = $calc->ac_p_deletedgivenspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             $numerator .= "{$g} * ";
             $denominator .= "{$p} * ";
             $titleLength = strlen($title->getText());
             $tableStr .= '<tr><td>' . wfMessage('athena-view-title-length') . '</td><td>' . $titleLength . '</td>';
             $p = $calc->ac_p_titlelength;
             $a = $calc->ac_p_titlelengthandspam;
             $g = $calc->ac_p_titlelengthgivenspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             $namespace = MWNamespace::getCanonicalName($title->getNamespace());
             // Main will return an empty string
             if ($namespace === '') {
                 $namespace = wfMessage('athena-view-namespace-0');
             }
             $tableStr .= '<tr><td>' . wfMessage('athena-view-namespace') . '</td><td>' . $namespace . '</td>';
             $p = $calc->ac_p_namespace;
             $a = $calc->ac_p_namespaceandspam;
             $g = $calc->ac_p_namespacegivenspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr></tbody></table>";
             $tableStr .= '<table class="wikitable"><thead><th>' . wfMessage('athena-view-metric') . '</th>';
             $tableStr .= '<th>' . wfMessage('athena-view-result') . '</th>';
             $tableStr .= '<th>' . wfMessage('athena-view-probability') . '</th>';
             $tableStr .= '<th>' . wfMessage('athena-view-probability-and') . '</th>';
             $tableStr .= '<th>' . wfMessage('athena-view-probability-given') . '</th>';
             $tableStr .= '<th>' . wfMessage('athena-view-probability-given-result') . '</th>';
             $tableStr .= '</thead><tbody>';
             $probSpam = $calc->ac_p_not_spam;
             $tableStr .= '<tr><td>' . wfMessage('athena-view-prob-not-spam') . '</td><td colspan="5">' . $probSpam . '</td></tr>';
             $numerator = '';
             $denominator = '';
             $ageStr = AthenaHelper::secondsToString($res->al_user_age);
             if ($ageStr === '') {
                 if ($res->al_user_age == -1) {
                     $ageStr = wfMessage('athena-anon');
                 } else {
                     if ($res->al_user_age == -2) {
                         $ageStr = wfMessage('athena-view-not-available');
                     } else {
                         $ageStr = wfMessage('athena-view-imported');
                     }
                 }
             }
             $tableStr .= '<tr><td>' . wfMessage('athena-view-user-age') . '</td><td>' . $ageStr . '</td>';
             $p = $calc->ac_p_user;
             $a = $calc->ac_p_userandnotspam;
             $g = $calc->ac_p_usergivennotspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             // TODO remove these
             $numerator .= "{$g} * ";
             $denominator .= "{$p} * ";
             $linkPercentage = $res->al_link_percentage * 100;
             $tableStr .= '<tr><td>' . wfMessage('athena-view-link-percentage') . '</td><td>' . $linkPercentage . '% ( ' . $res->al_links . ' ' . wfMessage('athena-view-links') . ' )</td>';
             $p = $calc->ac_p_links;
             $a = $calc->ac_p_linksandnotspam;
             $g = $calc->ac_p_linksgivennotspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             $numerator .= "{$g} * ";
             $denominator .= "{$p} * ";
             $tableStr .= '<tr><td>' . wfMessage('athena-view-syntax') . '</td><td>' . AthenaHelper::syntaxTypeToString($res->al_syntax) . '</td>';
             $p = $calc->ac_p_syntax;
             $a = $calc->ac_p_syntaxandnotspam;
             $g = $calc->ac_p_syntaxgivennotspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             $numerator .= "{$g} * ";
             $denominator .= "{$p} * ";
             $tableStr .= '<tr><td>' . wfMessage('athena-view-lang') . '</td><td>' . AthenaHelper::boolToString($res->al_language) . '</td>';
             $p = $calc->ac_p_lang;
             $a = $calc->ac_p_langandnotspam;
             $g = $calc->ac_p_langgivennotspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             $numerator .= "{$g} * ";
             $denominator .= "{$p} * ";
             $tableStr .= '<tr><td>' . wfMessage('athena-view-wanted') . '</td><td>' . AthenaHelper::boolToString($res->al_wanted) . '</td>';
             $p = $calc->ac_p_wanted;
             $a = $calc->ac_p_wantedandnotspam;
             $g = $calc->ac_p_wantedgivennotspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             $tableStr .= '<tr><td>' . wfMessage('athena-view-deleted') . '</td><td>' . AthenaHelper::boolToString($res->al_deleted) . '</td>';
             $p = $calc->ac_p_deleted;
             $a = $calc->ac_p_deletedandnotspam;
             $g = $calc->ac_p_deletedgivennotspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             $titleLength = strlen($title->getText());
             $tableStr .= '<tr><td>' . wfMessage('athena-view-title-length') . '</td><td>' . $titleLength . '</td>';
             $p = $calc->ac_p_titlelength;
             $a = $calc->ac_p_titlelengthandnotspam;
             $g = $calc->ac_p_titlelengthgivennotspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr>";
             $namespace = MWNamespace::getCanonicalName($title->getNamespace());
             // Main will return an empty string
             if ($namespace === '') {
                 $namespace = wfMessage('athena-view-namespace-0');
             }
             $tableStr .= '<tr><td>' . wfMessage('athena-view-namespace') . '</td><td>' . $namespace . '</td>';
             $p = $calc->ac_p_namespace;
             $a = $calc->ac_p_namespaceandnotspam;
             $g = $calc->ac_p_namespacegivennotspam;
             $gr = $g * $probSpam / $p;
             $tableStr .= "<td>{$p}</td><td>{$a}</td><td>{$g}</td><td>{$gr}</td></tr></tbody></table>";
             $tableStr .= '<table class="wikitable"><tbody>';
             $tableStr .= '<tr><td>' . wfMessage('athena-view-athena-value') . "</td><td>{$res->al_value}</td></tr>";
             $tableStr .= '</tbody></table>';
             $output->addHTML($tableStr);
         } else {
             // Display filter values
             $output->addWikiText('== ' . wfMessage('athena-view-results') . ' ==');
             $tableStr = '<table class="wikitable"><thead><th>' . wfMessage('athena-view-metric') . '</th>';
             $tableStr .= '<th>' . wfMessage('athena-view-result') . '</th>';
             $tableStr .= '</thead><tbody>';
             $ageStr = AthenaHelper::secondsToString($res->al_user_age);
             if ($ageStr === '') {
                 if ($res->al_user_age == -1) {
                     $ageStr = wfMessage('athena-anon');
                 } else {
                     if ($res->al_user_age == -2) {
                         $ageStr = wfMessage('athena-view-not-available');
                     } else {
                         $ageStr = wfMessage('athena-view-imported');
                     }
                 }
             }
             $tableStr .= '<tr><td>' . wfMessage('athena-view-user-age') . '</td><td>' . $ageStr . '</td></tr>';
             $linkPercentage = $res->al_link_percentage * 100;
             $tableStr .= '<tr><td>' . wfMessage('athena-view-link-percentage') . '</td><td>' . $linkPercentage . '% ( ' . $res->al_links . ' ' . wfMessage('athena-view-links') . ' )</td></tr>';
             $tableStr .= '<tr><td>' . wfMessage('athena-view-syntax') . '</td><td>' . AthenaHelper::syntaxTypeToString($res->al_syntax) . '</td></tr>';
             $tableStr .= '<tr><td>' . wfMessage('athena-view-lang') . '</td><td>' . AthenaHelper::boolToString($res->al_language) . '</td></tr>';
             $tableStr .= '<tr><td>' . wfMessage('athena-view-wanted') . '</td><td>' . AthenaHelper::boolToString($res->al_wanted) . '</td></tr>';
             $tableStr .= '<tr><td>' . wfMessage('athena-view-deleted') . '</td><td>' . AthenaHelper::boolToString($res->al_deleted) . '</td></tr>';
             $titleLength = strlen($title->getText());
             $tableStr .= '<tr><td>' . wfMessage('athena-view-title-length') . '</td><td>' . $titleLength . '</td></tr>';
             $namespace = MWNamespace::getCanonicalName($title->getNamespace());
             // Main will return an empty string
             if ($namespace === '') {
                 $namespace = wfMessage('athena-view-namespace-0');
             }
             $tableStr .= '<tr><td>' . wfMessage('athena-view-namespace') . '</td><td>' . $namespace . '</td></tr></tbody></table>';
             $output->addHTML($tableStr);
         }
     } else {
         $output->addWikiMsgArray('athena-viewing-error', $id);
     }
 }