Ferreteria/archive/mw-base.php

From Woozle Writes Code
Jump to navigation Jump to search

Code

<php> <?php /* PURPOSE: MediaWiki interface functions/classes -- functionality that MW forgot to include HISTORY:

 2013-01-03 created for MWX_User
 2013-01-24 extracted clsMWData and clsDataResult_MW from smw-base.php
  • /

/*%%%%

 PURPOSE: clsDatabase that uses MediaWiki's db
  • /

abstract class clsMWData extends clsDatabase_abstract {

   protected $mwDB;
   public function __construct(DatabaseBase $iWikiDB) {

$this->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 = '<a href="'.$url.'"'; if (!is_null($iPopup)) { $out .= ' title="'.$iPopup.'"'; } $out .= ">$strText</a>"; return $out;

   }

} </php>