object to encapsulate the handling of get/post variables:
The following grab something out of $_REQUEST. The first parameter is the
variable name and is required. The second is an optional default value:
$wgRequest->getVal() - any type, returns NULL if no default given
$wgRequest->getInt() - forced integer, 0 default
$wgRequest->getText() - runs through $wgLang->recodeInput()
$wgRequest->getBool() - return true/false
$wgRequest->getCheck() - returns true if the var is set, even if to ""
$wgRequest strips slashes at initialization if necessary.
Also in this fine object:
$wgRequest->wasPosted() - returns false if this wasn't a real form post,
so we can protect against faked submissions in get urls.
There's still plenty of work to do, not everything uses the new functions
yet. To test the strict mode, do define('DEBUG_GLOBALS', 1);
93 lines
2.7 KiB
PHP
93 lines
2.7 KiB
PHP
<?php
|
|
|
|
class WatchedItem {
|
|
|
|
/* static */ function &fromUserTitle( &$user, &$title ) {
|
|
$wl = new WatchedItem;
|
|
$wl->mUser =& $user;
|
|
$wl->mTitle =& $title;
|
|
$wl->id = $user->getId();
|
|
$wl->ns = $title->getNamespace() & ~1;
|
|
$wl->ti = $title->getDBkey();
|
|
$wl->eti = wfStrencode( $wl->ti );
|
|
return $wl;
|
|
}
|
|
|
|
function watchKey() {
|
|
global $wgDBname;
|
|
return "$wgDBname:watchlist:user:$this->id:page:$this->ns:$this->ti";
|
|
}
|
|
|
|
function isWatched()
|
|
{
|
|
# Pages and their talk pages are considered equivalent for watching;
|
|
# remember that talk namespaces are numbered as page namespace+1.
|
|
global $wgMemc;
|
|
$key = $this->watchKey();
|
|
$iswatched = $wgMemc->get( $key );
|
|
if( is_integer( $iswatched ) ) return $iswatched;
|
|
|
|
$sql = "SELECT 1 FROM watchlist WHERE wl_user=$this->id AND wl_namespace=$this->ns AND wl_title='$this->eti'";
|
|
$res = wfQuery( $sql, DB_READ );
|
|
$iswatched = (wfNumRows( $res ) > 0) ? 1 : 0;
|
|
$wgMemc->set( $key, $iswatched );
|
|
return $iswatched;
|
|
}
|
|
|
|
function addWatch()
|
|
{
|
|
# REPLACE instead of INSERT because occasionally someone
|
|
# accidentally reloads a watch-add operation.
|
|
$sql = "REPLACE INTO watchlist (wl_user, wl_namespace,wl_title) VALUES ($this->id,$this->ns,'$this->eti')";
|
|
$res = wfQuery( $sql, DB_WRITE );
|
|
if( $res === false ) return false;
|
|
|
|
global $wgMemc;
|
|
$wgMemc->set( $this->watchkey(), 1 );
|
|
return true;
|
|
}
|
|
|
|
function removeWatch()
|
|
{
|
|
$sql = "DELETE FROM watchlist WHERE wl_user=$this->id AND wl_namespace=$this->ns AND wl_title='$this->eti' LIMIT 1";
|
|
$res = wfQuery( $sql, DB_WRITE );
|
|
if( $res === false ) return false;
|
|
|
|
global $wgMemc;
|
|
$wgMemc->set( $this->watchkey(), 0 );
|
|
return true;
|
|
}
|
|
|
|
/* static */ function duplicateEntries( $ot, $nt ) {
|
|
$fname = "WatchedItem::duplicateEntries";
|
|
global $wgMemc, $wgDBname;
|
|
$oldnamespace = $ot->getNamespace() & ~1;
|
|
$newnamespace = $nt->getNamespace() & ~1;
|
|
$oldtitle = $ot->getDBkey();
|
|
$newtitle = $nt->getDBkey();
|
|
$eoldtitle = wfStrencode( $oldtitle );
|
|
$enewtitle = wfStrencode( $newtitle );
|
|
|
|
$sql = "SELECT wl_user FROM watchlist
|
|
WHERE wl_namespace={$oldnamespace} AND wl_title='{$eoldtitle}'";
|
|
$res = wfQuery( $sql, DB_READ, $fname );
|
|
if( $s = wfFetchObject( $res ) ) {
|
|
$sql = "REPLACE INTO watchlist (wl_user,wl_namespace,wl_title)
|
|
VALUES ({$s->wl_user},{$newnamespace},'{$enewtitle}')";
|
|
$key = "$wgDBname:watchlist:user:$s->wl_user:page:$newnamespace:$newtitle";
|
|
$wgMemc->set( $key, 1 );
|
|
while( $s = wfFetchObject( $res ) ) {
|
|
$sql .= ",({$s->wl_user},{$newnamespace},'{$enewtitle}')";
|
|
$key = "$wgDBname:watchlist:user:$s->wl_user:page:$newnamespace:$newtitle";
|
|
$wgMemc->set( $key, 1 );
|
|
}
|
|
$res = wfQuery( $sql, DB_WRITE, $fname );
|
|
if( $res === false ) return false; # db error?
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
?>
|