let sysop delete trackbacks
authorRiver Tarnell <kateturner@users.mediawiki.org>
Sat, 23 Jul 2005 06:30:26 +0000 (06:30 +0000)
committerRiver Tarnell <kateturner@users.mediawiki.org>
Sat, 23 Jul 2005 06:30:26 +0000 (06:30 +0000)
includes/Article.php
index.php
languages/Language.php
maintenance/archives/patch-trackbacks.sql
maintenance/tables.sql
trackback.php

index a92d0af..41b6b60 100644 (file)
@@ -850,13 +850,13 @@ class Article {
        }
 
        function addTrackbacks() {
-               global $wgOut;
+               global $wgOut, $wgUser;
 
                $dbr = wfGetDB(DB_SLAVE);
                $tbs = $dbr->select(
                                /* FROM   */ 'trackbacks',
-                               /* SELECT */ array('tb_title', 'tb_url', 'tb_ex', 'tb_name'),
-                               /* WHERE  */ array('tb_id' => $this->getID())
+                               /* SELECT */ array('tb_id', 'tb_title', 'tb_url', 'tb_ex', 'tb_name'),
+                               /* WHERE  */ array('tb_page' => $this->getID())
                );
 
                if (!$dbr->numrows($tbs))
@@ -864,15 +864,46 @@ class Article {
 
                $tbtext = "";
                while ($o = $dbr->fetchObject($tbs)) {
+                       $rmvtext = "";
+                       if ($wgUser->isSysop()) {
+                               $delurl = $this->mTitle->getFullURL("action=deletetrackback&tbid="
+                                               . $o->tb_id . "&token=" . $wgUser->editToken());
+                               $rmvtxt = wfMsg('trackbackremove', $delurl);
+                       }
                        $tbtext .= wfMsg(strlen($o->tb_ex) ? 'trackbackexcerpt' : 'trackback',
                                        $o->tb_title,
                                        $o->tb_url,
                                        $o->tb_ex,
-                                       $o->tb_name);
+                                       $o->tb_name,
+                                       $rmvtxt);
                }
                $wgOut->addWikitext(wfMsg('trackbackbox', $tbtext));
        }
 
+       function deletetrackback() {
+               global $wgUser, $wgRequest, $wgOut, $wgTitle;
+
+               if (!$wgUser->matchEditToken($wgRequest->getVal('token'))) {
+                       $wgOut->addWikitext(wfMsg('sessionfailure'));
+                       return;
+               }
+
+               if ((!$wgUser->isAllowed('delete'))) {
+                       $wgOut->sysopRequired();
+                       return;
+               }
+
+               if (wfReadOnly()) {
+                       $wgOut->readOnlyPage();
+                       return;
+               }
+
+               $db = wfGetDB(DB_MASTER);
+               $db->delete('trackbacks', array('tb_id' => $wgRequest->getInt('tbid')));
+               $wgTitle->invalidateCache();
+               $wgOut->addWikiText(wfMsg('trackbackdeleteok'));
+       }
+
        function render() {
                global $wgOut;
 
@@ -1868,7 +1899,7 @@ class Article {
                $dbw->delete( 'page', array( 'page_id' => $id ), $fname);
 
                if ($wgUseTrackbacks)
-                       $dbw->delete( 'trackbacks', array( 'tb_id' => $id ), $fname );
+                       $dbw->delete( 'trackbacks', array( 'tb_page' => $id ), $fname );
 
                # Clean up recentchanges entries...
                $dbw->delete( 'recentchanges', array( 'rc_namespace' => $ns, 'rc_title' => $t ), $fname );
index 213b78d..196bf89 100644 (file)
--- a/index.php
+++ b/index.php
@@ -172,6 +172,7 @@ if( !$wgDisableInternalSearch && !is_null( $search ) && $search !== '' ) {
                        case 'markpatrolled':
                        case 'validate':
                        case 'render':
+                       case 'deletetrackback':
                                $wgArticle->$action();
                                break;
                        case 'print':
index 8841083..5e2014b 100644 (file)
@@ -2127,9 +2127,11 @@ Trackbacks for this article:<br/>
 $1
 </div>
 ",
-'trackback' => "; $4 : [$2 $1]</li>\n",
-'trackbackexcerpt' => "; $4 : [$2 $1]: <nowiki>$3</nowiki></li>\n",
+'trackback' => "; $4$5 : [$2 $1]\n",
+'trackbackexcerpt' => "; $4$5 : [$2 $1]: <nowiki>$3</nowiki>\n",
+'trackbackremove' => ' ([$1 Delete])',
 'trackbacklink' => 'Trackback',
+'trackbackdeleteok' => 'The trackback was successfully deleted.',
 );
 
 /* a fake language converter */
index 93e3662..4193d05 100644 (file)
@@ -1,9 +1,10 @@
 CREATE TABLE /*$wgDBprefix*/trackbacks (
-       tb_id           INTEGER REFERENCES page(page_id) ON DELETE CASCADE,
+       tb_id           INTEGER AUTO_INCREMENT PRIMARY KEY,
+       tb_page         INTEGER REFERENCES page(page_id) ON DELETE CASCADE,
        tb_title        VARCHAR(255) NOT NULL,
        tb_url          VARCHAR(255) NOT NULL,
        tb_ex           TEXT,
        tb_name         VARCHAR(255),
 
-       INDEX (tb_id)
+       INDEX (tb_page)
 );
index fc17533..e19f6e1 100644 (file)
@@ -831,12 +831,12 @@ CREATE TABLE /*$wgDBprefix*/logging (
 --) TYPE=InnoDB;
 
 CREATE TABLE /*$wgDBprefix*/trackbacks (
-        tb_id           INTEGER REFERENCES page(page_id) ON DELETE CASCADE,
-        tb_title        VARCHAR(255) NOT NULL,
-        tb_url          VARCHAR(255) NOT NULL,
-        tb_ex           TEXT,
-        tb_name         VARCHAR(255),
-
-        INDEX (tb_id)
+       tb_id           INTEGER AUTO_INCREMENT PRIMARY KEY,
+       tb_page         INTEGER REFERENCES page(page_id) ON DELETE CASCADE,
+       tb_title        VARCHAR(255) NOT NULL,
+       tb_url          VARCHAR(255) NOT NULL,
+       tb_ex           TEXT,
+       tb_name         VARCHAR(255),
+
+       INDEX (tb_page)
 );
-
index 726cacb..a2c9d8d 100644 (file)
@@ -64,11 +64,11 @@ if (!$title->exists())
        XMLerror("Specified article does not exist.");
 
 $dbw->insert('trackbacks', array(
-       'tb_id' => $title->getArticleID(),
-       'tb_title' => $tbtitle,
-       'tb_url' => $tburl,
-       'tb_ex' => $tbex,
-       'tb_name' => $tbname
+       'tb_page'       => $title->getArticleID(),
+       'tb_title'      => $tbtitle,
+       'tb_url'        => $tburl,
+       'tb_ex'         => $tbex,
+       'tb_name'       => $tbname
 ));
 
 XMLsuccess();