User:Woozle/mw-base.php

Code
mwDB = $iWikiDB; }   protected function DefaultEngine { $obj = new clsDataEngine_MW; $obj->MW_Object($this->mwDB); return $obj; }   /* ****      SECTION: STATIC (GENERAL) */   public static function Spawn(DatabaseBase $iWikiDB=NULL) { static $objSelf;

if (!isset($objSelf)) { $mwoDB = (is_null($iWikiDB)) ? (wfGetDB( DB_SLAVE )) : $iWikiDB;

$strClass = static::SelfClass;	// this requires PHP 5.3 $objSelf = new $strClass($mwoDB); $objSelf->Open; }	return $objSelf; }   /*      /SECTION: END OTHER STATIC **** */

/* ****     SECTION: abstract overrides */   public function Open { }	// do nothing; MW handles this public function Shut { }	// do nothing; MW handles this public function SafeParam($iVal) { return mysql_escape_string($iVal);	// this is engine-specific }   public function Exec($iSQL) { // to be written }   public function DataSet($iSQL=NULL,$iClass=NULL) { $mwo = $this->mwDB->query($iSQL);	// $mwo is a ResultWrapper http://svn.wikimedia.org/doc/classResultWrapper.html //	$re = $mwo->result; $objRes = new clsDataResult_MW; //	if (is_resource($re)) { $objRes->Result($mwo); $rs = new clsDataSet_bare(NULL); $rs->sqlMake = $iSQL; $rs->ResultHandler($objRes); $this->PrepareItem($rs); return $rs; /*	} else { echo 'RE is '.get_class($re); throw new exception('MediaWiki query failed. SQL: '.$iSQL); }   }    /*      /SECTION: END OTHER STATIC **** */

protected function PrepareItem(clsRecs_abstract $iItem) { $iItem->objDB = $this; } }

class clsDataEngine_MW extends clsDataEngine { private $mwo;

public function MW_Object(DatabaseBase $iDB=NULL) { if (!is_null($iDB)) { $this->mwo = $iDB; }	return $iDB; }

/* ****     SECTION: abstract overrides */   public function db_open {}	// do nothing -- handled by MW    public function db_shut {}	// do nothing -- handled by MW

/* ****     SECTION: non-abstract overrides */   public function db_do_query($iSQL) { $obj = $this->Spawn_ResultObject; $obj->do_query($this->mwo,$iSQL); return $obj; }   public function db_get_new_id { die(__METHOD__.' not yet implemented.'); }   public function db_safe_param($iVal) { die(__METHOD__.' not yet implemented.'); }   public function db_get_error { die(__METHOD__.' not yet implemented.'); }   public function db_get_qty_rows_chgd { die(__METHOD__.' not yet implemented.'); }   /*      /SECTION: end abstract overrides **** */   protected function Spawn_ResultObject { return new clsDataResult_MW; } }

class clsDataResult_MW extends clsDataResult { /*     NOTE: Must be public so new objects can be initialized with ResultWrapper */   public function Result(ResultWrapper $iRes=NULL) { if (!is_null($iRes)) { $this->box['res'] = $iRes; }	return $this->box['res']; }   protected function ResultClear { $this->box['res'] = NULL; }

public function do_query(DatabaseBase $iDB_MW,$iSQL) { $mwoRes = $iDB_MW->query($iSQL); if (is_object($mwoRes)) { $this->Result($mwoRes); $this->box['ok'] = TRUE; } else { echo 'SQL ['.$iSQL.'] did not create a result object.'; $this->ResultClear; $this->box['ok'] = FALSE; }   }    public function is_okay { return $this->box['ok']; }   /*      ACTION: set the record pointer so the first row in the set will be read next */   public function do_rewind { return $this->Result->rewing;	// not tested }   /*      ACTION: Fetch the first/next row of data from a result set */   public function get_next { $objRow = $this->Result->next; $arRow = (array)$objRow; return $arRow; }   /*      ACTION: Return the number of rows in the result set */   public function get_count { return $this->Result->numRows; }   /*      ACTION: Return whether row currently has data. */   public function is_filled { return $this->Result->valid;	// not sure if this is exactly equivalent } }

/* %%%% PURPOSE: extension/helper for MediaWiki "User" class class MWX_User { private $mwoUser;

/* ****     STATIC */

public static function NewFromID($idUser) { $mwoUser = User::newFromId($idUser); $mwxUser = new MWX_User($mwoUser); return $mwxUser; }   public static function TextFromID_ht($idUser) { if ($idUser == 0) { return unknown; } else { $mwxUser = static::NewFromID($idUser); return $mwxUser->PageLink_ht; }   }

/* ****     DYNAMIC */

public function __construct(User $iUser) { $this->mwoUser = $iUser; }   public function MW_Object { return $this->mwoUser; }   public function PageLink_wt($iText=NULL) { $mwoUser = $this->MW_Object; $strText = (is_null($iText))?($mwoUser->getName):$iText; $mwoTitle = $mwoUser->getUserPage; $wpage = $mwoTitle->getPrefixedText; return "$strText"; }   public function PageLink_ht($iText=NULL,$iPopup=NULL) { $mwoUser = $this->MW_Object; $strText = (is_null($iText))?($mwoUser->getName):$iText; $mwoTitle = $mwoUser->getUserPage; $url = $mwoTitle->getFullURL; $out = '$strText"; return $out; } }