If someone really really wants this, they can write an extension.
Language files need rebuilding, but I took care of En and messages.inc.
* (bug 29747) eAccelerator shared memory caching has been removed since it is
now disabled by default and is buggy. APC, XCache and WinCache are not affected.
* Installer now refuses to install if php was not compiled with Ctype support.
+* (bug 29475) Remove "trackback" feature entirely from core
=== API changes in 1.19 ===
* (bug 19838) siprop=interwikimap can now use the interwiki cache.
* Show the footer section of an ordinary page view
*/
public function showViewFooter() {
- global $wgOut, $wgUseTrackbacks;
+ global $wgOut;
# check if we're displaying a [[User talk:x.x.x.x]] anonymous talk page
if ( $this->getTitle()->getNamespace() == NS_USER_TALK && IP::isValid( $this->getTitle()->getText() ) ) {
# chance to mark this new article as patrolled.
$this->showPatrolFooter();
- # Trackbacks
- if ( $wgUseTrackbacks ) {
- $this->addTrackbacks();
- }
-
wfRunHooks( 'ArticleViewFooter', array( $this ) );
}
'<span class="redirectText">' . $link . '</span></div>';
}
- /**
- * Builds trackback links for article display if $wgUseTrackbacks is set to true
- */
- public function addTrackbacks() {
- global $wgOut;
-
- $dbr = wfGetDB( DB_SLAVE );
- $tbs = $dbr->select( 'trackbacks',
- array( 'tb_id', 'tb_title', 'tb_url', 'tb_ex', 'tb_name' ),
- array( 'tb_page' => $this->mPage->getID() )
- );
-
- if ( !$dbr->numRows( $tbs ) ) {
- return;
- }
-
- $wgOut->preventClickjacking();
-
- $tbtext = "";
- foreach ( $tbs as $o ) {
- $rmvtxt = "";
-
- if ( $this->getContext()->getUser()->isAllowed( 'trackback' ) ) {
- $delurl = $this->getTitle()->getFullURL( "action=deletetrackback&tbid=" .
- $o->tb_id . "&token=" . urlencode( $this->getContext()->getUser()->getEditToken() ) );
- $rmvtxt = wfMsg( 'trackbackremove', htmlspecialchars( $delurl ) );
- }
-
- $tbtext .= "\n";
- $tbtext .= wfMsgNoTrans( strlen( $o->tb_ex ) ? 'trackbackexcerpt' : 'trackback',
- $o->tb_title,
- $o->tb_url,
- $o->tb_ex,
- $o->tb_name,
- $rmvtxt );
- }
-
- $wgOut->wrapWikiMsg( "<div id='mw_trackbacks'>\n$1\n</div>\n", array( 'trackbackbox', $tbtext ) );
- }
-
/**
* Handle action=render
*/
}
}
- /**
- * Removes trackback record for current article from trackbacks table
- * @deprecated since 1.18
- */
- public function deletetrackback() {
- return Action::factory( 'deletetrackback', $this )->show();
- }
-
/**
* Info about this page
* @deprecated since 1.19
# includes/actions
'CreditsAction' => 'includes/actions/CreditsAction.php',
- 'DeletetrackbackAction' => 'includes/actions/DeletetrackbackAction.php',
'HistoryAction' => 'includes/actions/HistoryAction.php',
'HistoryPage' => 'includes/actions/HistoryAction.php',
'HistoryPager' => 'includes/actions/HistoryAction.php',
$wgGroupPermissions['sysop']['unblockself'] = true;
$wgGroupPermissions['sysop']['suppressredirect'] = true;
#$wgGroupPermissions['sysop']['mergehistory'] = true;
-#$wgGroupPermissions['sysop']['trackback'] = true;
// Permission to change users' group assignments
$wgGroupPermissions['bureaucrat']['userrights'] = true;
*/
$wgDisableCounters = false;
-/**
- * Support blog-style "trackbacks" for articles. See
- * http://www.sixapart.com/pronet/docs/trackback_spec for details.
- *
- * If enabling this, you also need to grant the 'trackback' right to a group
- */
-$wgUseTrackbacks = false;
-
/**
* Parser test suite files to be run by parserTests.php when no specific
* filename is passed to it.
*/
$wgActions = array(
'credits' => true,
- 'deletetrackback' => true,
'history' => true,
'info' => true,
'markpatrolled' => true,
function touchLinks() { $this->error(); }
function getTouched( $db = null ) { $this->error(); }
function getNotificationTimestamp( $user = null ) { $this->error(); }
- function trackbackURL() { $this->error(); }
- function trackbackRDF() { $this->error(); }
function getNamespaceKey( $prepend = 'nstab-' ) { $this->error(); }
function isSpecialPage() { $this->error(); }
function isSpecial( $name ) { $this->error(); }
* @return String: The doctype, opening <html>, and head element.
*/
public function headElement( Skin $sk, $includeStyle = true ) {
- global $wgContLang, $wgUseTrackbacks;
+ global $wgContLang;
$userdir = $this->getLanguage()->getDir();
$sitedir = $wgContLang->getDir();
$this->getHeadItems()
) );
- if ( $wgUseTrackbacks && $this->isArticleRelated() ) {
- $ret .= $this->getTitle()->trackbackRDF();
- }
-
$closeHead = Html::closeElement( 'head' );
if ( $closeHead ) {
$ret .= "$closeHead\n";
}
function bottomLinks() {
- global $wgOut, $wgUser, $wgUseTrackbacks;
+ global $wgOut, $wgUser;
$sep = wfMsgExt( 'pipe-separator', 'escapenoentities' ) . "\n";
$s = '';
$element[] = $this->whatLinksHere();
$element[] = $this->watchPageLinksLink();
- if ( $wgUseTrackbacks ) {
- $element[] = $this->trackbackLink();
- }
-
$title = $this->getSkin()->getTitle();
if (
}
}
- function trackbackLink() {
- return '<a href="' . $this->getSkin()->getTitle()->trackbackURL() . '">'
- . wfMsg( 'trackbacklink' ) . '</a>';
- }
-
function talkLink() {
$title = $this->getSkin()->getTitle();
if ( NS_SPECIAL == $title->getNamespace() ) {
global $wgDisableCounters, $wgSitename, $wgLogo, $wgHideInterlanguageLinks;
global $wgMaxCredits, $wgShowCreditsIfMax;
global $wgPageShowWatchingUsers;
- global $wgUseTrackbacks, $wgUseSiteJs, $wgDebugComments;
+ global $wgUseSiteJs, $wgDebugComments;
global $wgArticlePath, $wgScriptPath, $wgServer;
wfProfileIn( __METHOD__ );
$tpl->set( 'html5version', $wgHtml5Version );
$tpl->set( 'headlinks', $out->getHeadLinks() );
$tpl->set( 'csslinks', $out->buildCssLinks() );
-
- if( $wgUseTrackbacks && $out->isArticleRelated() ) {
- $tpl->set( 'trackbackhtml', $out->getTitle()->trackbackRDF() );
- } else {
- $tpl->set( 'trackbackhtml', null );
- }
-
$tpl->set( 'pageclass', $this->getPageClasses( $this->getTitle() ) );
$tpl->set( 'skinnameclass', ( 'skin-' . Sanitizer::escapeClass( $this->getSkinName() ) ) );
}
* @private
*/
protected function buildNavUrls() {
- global $wgUseTrackbacks;
global $wgUploadNavigationUrl;
wfProfileIn( __METHOD__ );
$nav_urls['permalink'] = false;
$nav_urls['whatlinkshere'] = false;
$nav_urls['recentchangeslinked'] = false;
- $nav_urls['trackbacklink'] = false;
$nav_urls['contributions'] = false;
$nav_urls['log'] = false;
$nav_urls['blockip'] = false;
'href' => SpecialPage::getTitleFor( 'Recentchangeslinked', $this->thispage )->getLocalUrl()
);
}
- if ( $wgUseTrackbacks ) {
- $nav_urls['trackbacklink'] = array(
- 'href' => $out->getTitle()->trackbackURL()
- );
- }
}
$user = $this->getRelevantUser();
$toolbox['recentchangeslinked']['msg'] = 'recentchangeslinked-toolbox';
$toolbox['recentchangeslinked']['id'] = 't-recentchangeslinked';
}
- if ( isset( $this->data['nav_urls']['trackbacklink'] ) && $this->data['nav_urls']['trackbacklink'] ) {
- $toolbox['trackbacklink'] = $this->data['nav_urls']['trackbacklink'];
- $toolbox['trackbacklink']['id'] = 't-trackbacklink';
- }
if ( isset( $this->data['feeds'] ) && $this->data['feeds'] ) {
$toolbox['feeds']['id'] = 'feedlinks';
$toolbox['feeds']['links'] = array();
$dbw->delete( 'page', array( 'page_id' => $newid ), __METHOD__ );
if ( !$dbw->cascadingDeletes() ) {
$dbw->delete( 'revision', array( 'rev_page' => $newid ), __METHOD__ );
- global $wgUseTrackbacks;
- if ( $wgUseTrackbacks ) {
- $dbw->delete( 'trackbacks', array( 'tb_page' => $newid ), __METHOD__ );
- }
+
$dbw->delete( 'pagelinks', array( 'pl_from' => $newid ), __METHOD__ );
$dbw->delete( 'imagelinks', array( 'il_from' => $newid ), __METHOD__ );
$dbw->delete( 'categorylinks', array( 'cl_from' => $newid ), __METHOD__ );
return $this->mNotificationTimestamp[$uid];
}
- /**
- * Get the trackback URL for this page
- *
- * @return String Trackback URL
- */
- public function trackbackURL() {
- global $wgScriptPath, $wgServer, $wgScriptExtension;
-
- return "$wgServer$wgScriptPath/trackback$wgScriptExtension?article="
- . htmlspecialchars( urlencode( $this->getPrefixedDBkey() ) );
- }
-
- /**
- * Get the trackback RDF for this page
- *
- * @return String Trackback RDF
- */
- public function trackbackRDF() {
- $url = htmlspecialchars( $this->getFullURL() );
- $title = htmlspecialchars( $this->getText() );
- $tburl = $this->trackbackURL();
-
- // Autodiscovery RDF is placed in comments so HTML validator
- // won't barf. This is a rather icky workaround, but seems
- // frequently used by this kind of RDF thingy.
- //
- // Spec: http://www.sixapart.com/pronet/docs/trackback_spec
- return "<!--
-<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"
- xmlns:dc=\"http://purl.org/dc/elements/1.1/\"
- xmlns:trackback=\"http://madskills.com/public/xml/rss/module/trackback/\">
-<rdf:Description
- rdf:about=\"$url\"
- dc:identifier=\"$url\"
- dc:title=\"$title\"
- trackback:ping=\"$tburl\" />
-</rdf:RDF>
--->";
- }
-
/**
* Generate strings used for xml 'id' names in monobook tabs
*
'suppressionlog',
'suppressredirect',
'suppressrevision',
- 'trackback',
'unblockself',
'undelete',
'unwatchedpages',
public function doDeleteArticle(
$reason, $suppress = false, $id = 0, $commit = true, &$error = '', User $user = null
) {
- global $wgUseTrackbacks, $wgUser;
+ global $wgUser;
$user = is_null( $user ) ? $wgUser : $user;
wfDebug( __METHOD__ . "\n" );
if ( !$dbw->cascadingDeletes() ) {
$dbw->delete( 'revision', array( 'rev_page' => $id ), __METHOD__ );
- if ( $wgUseTrackbacks ) {
- $dbw->delete( 'trackbacks', array( 'tb_page' => $id ), __METHOD__ );
- }
-
# Delete outgoing links
$dbw->delete( 'pagelinks', array( 'pl_from' => $id ), __METHOD__ );
$dbw->delete( 'imagelinks', array( 'il_from' => $id ), __METHOD__ );
+++ /dev/null
-<?php
-/**
- * Delete a trackback on a page
- *
- * Copyright © 2011 Alexandre Emsenhuber
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- *
- * @file
- * @ingroup Actions
- */
-
-class DeletetrackbackAction extends FormlessAction {
-
- public function getName() {
- return 'deletetrackback';
- }
-
- public function getRestriction() {
- return 'delete';
- }
-
- protected function getDescription() {
- return '';
- }
-
- protected function checkCanExecute( User $user ) {
- if ( !$user->matchEditToken( $this->getRequest()->getVal( 'token' ) ) ) {
- throw new ErrorPageError( 'sessionfailure-title', 'sessionfailure' );
- }
-
- return parent::checkCanExecute( $user );
- }
-
- public function onView() {
- $db = wfGetDB( DB_MASTER );
- $db->delete( 'trackbacks', array( 'tb_id' => $this->getRequest()->getInt( 'tbid' ) ) );
-
- $this->getOutput()->addWikiMsg( 'trackbackdeleteok' );
- $this->getTitle()->invalidateCache();
- }
-}
array( 'addTable', 'user_newtalk', 'patch-usernewtalk2.sql' ),
array( 'addTable', 'transcache', 'patch-transcache.sql' ),
array( 'addField', 'interwiki', 'iw_trans', 'patch-interwiki-trans.sql' ),
- array( 'addTable', 'trackbacks', 'patch-trackbacks.sql' ),
// 1.6
array( 'doWatchlistNull' ),
array( 'changeFkeyDeferrable', 'revision', 'rev_page', 'page (page_id) ON DELETE CASCADE' ),
array( 'changeFkeyDeferrable', 'revision', 'rev_user', 'mwuser(user_id) ON DELETE RESTRICT' ),
array( 'changeFkeyDeferrable', 'templatelinks', 'tl_from', 'page(page_id) ON DELETE CASCADE' ),
- array( 'changeFkeyDeferrable', 'trackbacks', 'tb_page', 'page(page_id) ON DELETE CASCADE' ),
array( 'changeFkeyDeferrable', 'user_groups', 'ug_user', 'mwuser(user_id) ON DELETE CASCADE' ),
array( 'changeFkeyDeferrable', 'user_newtalk', 'user_id', 'mwuser(user_id) ON DELETE CASCADE' ),
array( 'changeFkeyDeferrable', 'user_properties', 'up_user', 'mwuser(user_id) ON DELETE CASCADE' ),
'right-autopatrol' => "Have one's own edits automatically marked as patrolled",
'right-patrolmarks' => 'View recent changes patrol marks',
'right-unwatchedpages' => 'View a list of unwatched pages',
-'right-trackback' => 'Submit a trackback',
'right-mergehistory' => 'Merge the history of pages',
'right-userrights' => 'Edit all user rights',
'right-userrights-interwiki' => 'Edit user rights of users on other wikis',
'action-patrol' => "mark others' edit as patrolled",
'action-autopatrol' => 'have your edit marked as patrolled',
'action-unwatchedpages' => 'view the list of unwatched pages',
-'action-trackback' => 'submit a trackback',
'action-mergehistory' => 'merge the history of this page',
'action-userrights' => 'edit all user rights',
'action-userrights-interwiki' => 'edit user rights of users on other wikis',
'scarytranscludefailed' => '[Template fetch failed for $1]',
'scarytranscludetoolong' => '[URL is too long]',
-# Trackbacks
-'trackbackbox' => 'Trackbacks for this page:<br />
-$1',
-'trackback' => '; $4 $5: [$2 $1]', # only translate this message to other languages if you have to change it
-'trackbackexcerpt' => '; $4 $5: [$2 $1]: <nowiki>$3</nowiki>', # only translate this message to other languages if you have to change it
-'trackbackremove' => '([$1 Delete])',
-'trackbacklink' => 'Trackback',
-'trackbackdeleteok' => 'The trackback was successfully deleted.',
-
# Delete conflict
'deletedwhileediting' => "'''Warning''': This page was deleted after you started editing!",
'confirmrecreate' => "User [[User:$1|$1]] ([[User talk:$1|talk]]) deleted this page after you started editing with reason:
+++ /dev/null
-CREATE TABLE /*$wgDBprefix*/trackbacks (
- 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 BLOB NOT NULL,
- tb_ex TEXT,
- tb_name VARCHAR(255),
-
- INDEX (tb_page)
-);
$wgGroupPermissions['*']['reupload-shared'] = true;
$wgGroupPermissions['*']['rollback'] = true;
$wgGroupPermissions['*']['siteadmin'] = true;
- $wgGroupPermissions['*']['trackback'] = true;
$wgGroupPermissions['*']['unwatchedpages'] = true;
$wgGroupPermissions['*']['upload'] = true;
$wgGroupPermissions['*']['userrights'] = true;
error_reporting (E_ALL); // At a later date could be increased to E_ALL | E_STRICT
$wgBlockOpenProxies = true; // Some block pages require this to be true in order to test.
$wgEnableUploads = true; // enable uploads.
- //$wgUseTrackbacks = true; // enable trackbacks; However this breaks the viewPageTest, so currently disabled.
$wgDBerrorLog = "/root/mediawiki-db-error-log.txt"; // log DB errors, replace with suitable path.
$wgShowSQLErrors = true; // Show SQL errors (instead of saying the query was hidden).
$wgShowExceptionDetails = true; // want backtraces.
}
}
-
-/**
- ** a test for trackback.php
- */
-class trackbackTest extends pageTest {
- function __construct() {
- $this->pagePath = "trackback.php";
-
- $this->params = array (
- "url" => wikiFuzz::makeFuzz( 2 ),
- "blog_name" => wikiFuzz::chooseInput( array( "80", wikiFuzz::randnum( 6000, -200 ), wikiFuzz::makeFuzz( 2 ) ) ),
- "article" => wikiFuzz::chooseInput( array( "Main Page", wikiFuzz::makeFuzz( 2 ) ) ),
- "title" => wikiFuzz::chooseInput( array( "Main Page", wikiFuzz::makeFuzz( 2 ) ) ),
- "excerpt" => wikiFuzz::makeFuzz( 2 ),
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["title"] );
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["excerpt"] );
-
- // page does not produce HTML.
- $this->tidyValidate = false;
- }
-}
-
-
/**
** a test for profileinfo.php
*/
/**
** selects a page test to run.
* @param $count
- * @return \api|\confirmEmail|\contributionsTest|\editPageTest|\imagelistTest|\imagepageTest|\ipblocklistTest|\listusersTest|\mimeSearchTest|\newImagesTest|\pageDeletion|\pageHistoryTest|\pageProtectionForm|\prefixindexTest|\profileInfo|\recentchangesTest|\redirectTest|\searchTest|\specialAllmessagesTest|\specialAllpagesTest|\specialBlockip|\specialBlockmeTest|\specialBooksourcesTest|\specialCategoryTree|\specialChemicalsourcesTest|\specialCitePageTest|\specialExportTest|\specialFilepathPageTest|\specialImportPageTest|\specialLinksearch|\specialLockdbPageTest|\specialLogTest|\specialMovePage|\specialNewpagesPageTest|\specialRenameuserPageTest|\specialRevisionDeletePageTest|\specialUndeletePageTest|\specialUnlockdbPageTest|\specialUserrights|\successfulUserLoginTest|\thumbTest|\trackbackTest|\userLoginTest|\viewPageTest|\watchlistTest
+ * @return \api|\confirmEmail|\contributionsTest|\editPageTest|\imagelistTest|\imagepageTest|\ipblocklistTest|\listusersTest|\mimeSearchTest|\newImagesTest|\pageDeletion|\pageHistoryTest|\pageProtectionForm|\prefixindexTest|\profileInfo|\recentchangesTest|\redirectTest|\searchTest|\specialAllmessagesTest|\specialAllpagesTest|\specialBlockip|\specialBlockmeTest|\specialBooksourcesTest|\specialCategoryTree|\specialChemicalsourcesTest|\specialCitePageTest|\specialExportTest|\specialFilepathPageTest|\specialImportPageTest|\specialLinksearch|\specialLockdbPageTest|\specialLogTest|\specialMovePage|\specialNewpagesPageTest|\specialRenameuserPageTest|\specialRevisionDeletePageTest|\specialUndeletePageTest|\specialUnlockdbPageTest|\specialUserrights|\successfulUserLoginTest|\thumbTest|\userLoginTest|\viewPageTest|\watchlistTest
*/
function selectPageTest( $count ) {
case 33: return new specialRevisionDeletePageTest();
case 34: return new specialImportPageTest();
case 35: return new thumbTest();
- case 36: return new trackbackTest();
case 37: return new profileInfo();
case 38: return new specialCitePageTest();
case 39: return new specialFilepathPageTest();
ALTER TABLE watchlist ADD CONSTRAINT WATCHLIST_USER_FK FOREIGN KEY (wl_user) REFERENCES user(user_id) ON DELETE CASCADE
;
--- good
--- already in MySQL schema
-ALTER TABLE trackbacks ADD CONSTRAINT TRACKBACKS_PAGE_FK FOREIGN KEY (tb_page) REFERENCES page(page_id) ON DELETE CASCADE
-;
-
-- cannot contain null values
-- ALTER TABLE protected_titles ADD CONSTRAINT PROTECTED_TITLES_USER_FK FOREIGN KEY (pt_user) REFERENCES user(user_id) ON DELETE SET NULL
--;
CREATE INDEX log_page_id_time ON logging (log_page,log_timestamp);
-
-CREATE TABLE trackbacks (
- tb_id INTEGER NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
- --PRIMARY KEY DEFAULT nextval('trackbacks_tb_id_seq'),
- -- foreign key also in MySQL
- tb_page INTEGER,
- -- REFERENCES page(page_id) ON DELETE CASCADE,
- tb_title VARCHAR(255) NOT NULL,
- tb_url CLOB(64K) INLINE LENGTH 4096 NOT NULL,
- tb_ex CLOB(64K) INLINE LENGTH 4096,
- tb_name VARCHAR(255)
-);
-CREATE INDEX trackback_page ON trackbacks (tb_page);
-
-
-
CREATE TABLE job (
job_id BIGINT NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
--PRIMARY KEY DEFAULT nextval('job_job_id_seq'),
'diff-with-additional',
'pagetitle-view-mainpage',
'backlinksubtitle',
- 'trackback',
- 'trackbackexcerpt',
'prefs-registration-date-time',
'prefs-memberingroups-type',
'shared-repo-name-wikimediacommons',
'right-autopatrol',
'right-patrolmarks',
'right-unwatchedpages',
- 'right-trackback',
'right-mergehistory',
'right-userrights',
'right-userrights-interwiki',
'action-patrol',
'action-autopatrol',
'action-unwatchedpages',
- 'action-trackback',
'action-mergehistory',
'action-userrights',
'action-userrights-interwiki',
'scarytranscludefailed',
'scarytranscludetoolong',
),
- 'trackbacks' => array(
- 'trackbackbox',
- 'trackback',
- 'trackbackexcerpt',
- 'trackbackremove',
- 'trackbacklink',
- 'trackbackdeleteok',
- ),
'deleteconflict' => array(
'deletedwhileediting',
'confirmrecreate',
'all' => "'all' in various places, this might be different for inflected languages",
'confirmemail' => 'E-mail address confirmation',
'scarytransclusion' => 'Scary transclusion',
- 'trackbacks' => 'Trackbacks',
'deleteconflict' => 'Delete conflict',
'unit-pixel' => '',
'purge' => 'action=purge',
CREATE INDEX /*$wgDBprefix*/ls_log_id ON /*$wgDBprefix*/log_search (ls_log_id);
-CREATE TABLE /*$wgDBprefix*/trackbacks (
- tb_id INT PRIMARY KEY,
- tb_page INT REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE,
- tb_title NVARCHAR(255) NOT NULL,
- tb_url NVARCHAR(255) NOT NULL,
- tb_ex NVARCHAR(MAX),
- tb_name NVARCHAR(255),
-);
-CREATE INDEX /*$wgDBprefix*/trackbacks_page ON /*$wgDBprefix*/trackbacks(tb_page);
-
-- Jobs performed by parallel apache threads or a command-line daemon
CREATE TABLE /*$wgDBprefix*/job (
job_id INT NOT NULL PRIMARY KEY,
ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk2 FOREIGN KEY (rc_cur_id) REFERENCES &mw_prefix.page(page_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE &mw_prefix.watchlist ADD CONSTRAINT &mw_prefix.watchlist_fk1 FOREIGN KEY (wl_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE &mw_prefix.logging ADD CONSTRAINT &mw_prefix.logging_fk1 FOREIGN KEY (log_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.trackbacks ADD CONSTRAINT &mw_prefix.trackbacks_fk1 FOREIGN KEY (tb_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE &mw_prefix.redirect ADD CONSTRAINT &mw_prefix.redirect_fk1 FOREIGN KEY (rd_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_fk1 FOREIGN KEY (pr_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE &mw_prefix.log_search ADD CONSTRAINT log_search_pk PRIMARY KEY (ls_field,ls_value,ls_log_id);
CREATE INDEX &mw_prefix.log_search_i01 ON &mw_prefix.log_search (ls_log_id);
-CREATE SEQUENCE trackbacks_tb_id_seq;
-CREATE TABLE &mw_prefix.trackbacks (
- tb_id NUMBER NOT NULL,
- tb_page NUMBER,
- tb_title VARCHAR2(255) NOT NULL,
- tb_url VARCHAR2(255) NOT NULL,
- tb_ex CLOB,
- tb_name VARCHAR2(255)
-);
-ALTER TABLE &mw_prefix.trackbacks ADD CONSTRAINT &mw_prefix.trackbacks_pk PRIMARY KEY (tb_id);
-ALTER TABLE &mw_prefix.trackbacks ADD CONSTRAINT &mw_prefix.trackbacks_fk1 FOREIGN KEY (tb_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE INDEX &mw_prefix.trackbacks_i01 ON &mw_prefix.trackbacks (tb_page);
CREATE SEQUENCE job_job_id_seq;
CREATE TABLE &mw_prefix.job (
SELECT setval('recentchanges_rc_id_seq', 1+coalesce(max(rc_id) ,0),false) FROM recentchanges;
SELECT setval('revision_rev_id_seq', 1+coalesce(max(rev_id) ,0),false) FROM revision;
SELECT setval('text_old_id_seq', 1+coalesce(max(old_id) ,0),false) FROM pagecontent;
-SELECT setval('trackbacks_tb_id_seq', 1+coalesce(max(tb_id) ,0),false) FROM trackbacks;
SELECT setval('user_user_id_seq', 1+coalesce(max(user_id),0),false) FROM mwuser;
};
objectcache
## Which tables to ignore depending on the version
-VERSION 1.5: trackback
VERSION 1.6: externallinks job templatelinks transcache
VERSION 1.7: filearchive langlinks querycache_info
VERSION 1.9: querycachetwo page_restrictions redirect
DROP SEQUENCE IF EXISTS ipblocks_ipb_id_seq CASCADE;
DROP SEQUENCE IF EXISTS recentchanges_rc_id_seq CASCADE;
DROP SEQUENCE IF EXISTS logging_log_id_seq CASCADE;
-DROP SEQUENCE IF EXISTS trackbacks_tb_id_seq CASCADE;
DROP SEQUENCE IF EXISTS job_job_id_seq CASCADE;
DROP SEQUENCE IF EXISTS category_cat_id_seq CASCADE;
DROP FUNCTION IF EXISTS page_deleted() CASCADE;
);
CREATE INDEX ls_log_id ON log_search (ls_log_id);
-CREATE SEQUENCE trackbacks_tb_id_seq;
-CREATE TABLE trackbacks (
- tb_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('trackbacks_tb_id_seq'),
- tb_page INTEGER REFERENCES page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
- tb_title TEXT NOT NULL,
- tb_url TEXT NOT NULL,
- tb_ex TEXT,
- tb_name TEXT
-);
-CREATE INDEX trackback_page ON trackbacks (tb_page);
-
CREATE SEQUENCE job_job_id_seq;
CREATE TABLE job (
CREATE INDEX /*i*/user_time ON /*_*/logging (log_user, log_timestamp);
CREATE INDEX /*i*/page_time ON /*_*/logging (log_namespace, log_title, log_timestamp);
CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp);
-CREATE INDEX /*i*/tb_page ON /*_*/trackbacks (tb_page);
CREATE INDEX /*i*/job_cmd_namespace_title ON /*_*/job (job_cmd, job_namespace, job_title);
CREATE INDEX /*i*/rd_ns_title ON /*_*/redirect (rd_namespace,rd_title,rd_from);
CREATE INDEX /*i*/qcc_type ON /*_*/querycachetwo (qcc_type,qcc_value);
CREATE INDEX /*i*/ls_log_id ON /*_*/log_search (ls_log_id);
-CREATE TABLE /*_*/trackbacks (
- tb_id int PRIMARY KEY AUTO_INCREMENT,
- tb_page int REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
- tb_title varchar(255) NOT NULL,
- tb_url blob NOT NULL,
- tb_ex text,
- tb_name varchar(255)
-) /*$wgDBTableOptions*/;
-CREATE INDEX /*i*/tb_page ON /*_*/trackbacks (tb_page);
-
-
-- Jobs performed by parallel apache threads or a command-line daemon
CREATE TABLE /*_*/job (
job_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+++ /dev/null
-<?php
-/**
- * Provide functions to handle article trackbacks.
- * @file
- * @ingroup SpecialPage
- */
-
-if ( isset( $_SERVER['MW_COMPILED'] ) ) {
- require ( 'phase3/includes/WebStart.php' );
-} else {
- require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
-}
-
-class TrackBack {
-
- private $r, $url, $title = null;
-
- private function XMLsuccess() {
- header( "Content-Type: application/xml; charset=utf-8" );
- echo <<<XML
-<?xml version="1.0" encoding="utf-8"?>
-<response>
- <error>0</error>
-</response>
-XML;
- exit;
- }
-
- /**
- * @param $err string
- */
- private function XMLerror( $err = "Invalid request." ) {
- header( "HTTP/1.0 400 Bad Request" );
- header( "Content-Type: application/xml; charset=utf-8" );
- echo <<<XML
-<?xml version="1.0" encoding="utf-8"?>
-<response>
- <error>1</error>
- <message>Invalid request: $err</message>
-</response>
-XML;
- exit;
- }
-
- public function __construct() {
- global $wgUseTrackbacks, $wgRequest;
-
- if( !$wgUseTrackbacks )
- $this->XMLerror( "Trackbacks are disabled" );
-
- $this->r = $wgRequest;
-
- if( !$this->r->wasPosted() ) {
- $this->XMLerror( "Must be posted" );
- }
-
- $this->url = $wgRequest->getText( 'url' );
- $article = $wgRequest->getText( 'article' );
-
- if( !$this->url || !$article ) {
- $this->XMLerror( "Required field not specified" );
- }
-
- $this->title = Title::newFromText( $article );
- if( !$this->title || !$this->title->exists() ) {
- $this->XMLerror( "Specified article does not exist." );
- }
- }
-
- public function write() {
- $dbw = wfGetDB( DB_MASTER );
-
- $tbtitle = $this->r->getText( 'title' );
- $tbex = $this->r->getText( 'excerpt' );
- $tbname = $this->r->getText( 'blog_name' );
-
- $dbw->insert('trackbacks', array(
- 'tb_page' => $this->title->getArticleID(),
- 'tb_title' => $tbtitle,
- 'tb_url' => $this->url,
- 'tb_ex' => $tbex,
- 'tb_name' => $tbname
- ));
-
- $dbw->commit();
-
- $this->XMLsuccess();
- }
-}
-
-$tb = new TrackBack();
-$tb->write();
+++ /dev/null
-<?php require './trackback.php';
\ No newline at end of file