From 7b810c22efaa1d46d70b43a45ef5ed01d2e49778 Mon Sep 17 00:00:00 2001 From: River Tarnell Date: Sat, 23 Jul 2005 06:30:26 +0000 Subject: [PATCH] let sysop delete trackbacks --- includes/Article.php | 41 ++++++++++++++++++++--- index.php | 1 + languages/Language.php | 6 ++-- maintenance/archives/patch-trackbacks.sql | 5 +-- maintenance/tables.sql | 16 ++++----- trackback.php | 10 +++--- 6 files changed, 57 insertions(+), 22 deletions(-) diff --git a/includes/Article.php b/includes/Article.php index a92d0afa86..41b6b60479 100644 --- a/includes/Article.php +++ b/includes/Article.php @@ -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 ); diff --git a/index.php b/index.php index 213b78d47b..196bf89fe6 100644 --- 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': diff --git a/languages/Language.php b/languages/Language.php index 884108335f..5e2014b88f 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -2127,9 +2127,11 @@ Trackbacks for this article:
$1 ", -'trackback' => "; $4 : [$2 $1]\n", -'trackbackexcerpt' => "; $4 : [$2 $1]: $3\n", +'trackback' => "; $4$5 : [$2 $1]\n", +'trackbackexcerpt' => "; $4$5 : [$2 $1]: $3\n", +'trackbackremove' => ' ([$1 Delete])', 'trackbacklink' => 'Trackback', +'trackbackdeleteok' => 'The trackback was successfully deleted.', ); /* a fake language converter */ diff --git a/maintenance/archives/patch-trackbacks.sql b/maintenance/archives/patch-trackbacks.sql index 93e36628f2..4193d0580d 100644 --- a/maintenance/archives/patch-trackbacks.sql +++ b/maintenance/archives/patch-trackbacks.sql @@ -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) ); diff --git a/maintenance/tables.sql b/maintenance/tables.sql index fc1753313a..e19f6e1171 100644 --- a/maintenance/tables.sql +++ b/maintenance/tables.sql @@ -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) ); - diff --git a/trackback.php b/trackback.php index 726cacba41..a2c9d8dc45 100644 --- a/trackback.php +++ b/trackback.php @@ -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(); -- 2.20.1