Ferreteria/archive/admin.php
About
- Purpose: classes useful for writing administration SpecialPages, i.e. pages that interact heavily with database tables.
- Edits:
- 2013-01-04 This should be the latest version, but copy on HostGator may have some tweaks to be merged.
Code
<php><?php /*
LIBRARY: admin.php - some classes useful for administration functions in MW extensions GLOBALS: $vgOut is usually set in menu.php It must be a descendant of clsRichText, which is defined in richtext.php HISTORY: 2010-04-06
clsAdminTable, clsAdminData, clsAdminData_Logged written (in menu.php)
2010-10-25 clsAdminTable, clsAdminData extracted from menu.php 2012-12-31 clsAdminTable_helper 2013-01-04 restored _AdminLink() to clsAdminData_helper from old copy of menu.php * It was in clsAdminData_helper. * Was there a reason it went away? Need to document replacement functionality, if so.
- /
/*%%%%
CLASS: clsAdminTable NOTES: * TODO: clsAdmin* should be rewritten to use helpers * TODO: $vgOut should be an object field, not a global
- /
class clsAdminTable_helper {
private $objTbl;
public function Table(clsTable_key_single $iTable=NULL) {
if (!is_null($iTable)) { $this->objTbl = $iTable; } return $this->objTbl;
} public static function AdminLink($iID,$iShow=NULL,$iPopup=NULL) {
global $vgOut;
$id = $iID;
$arLink = array( 'page' => 'item', 'id' => $id); $strShow = is_null($iShow)?($id):$iShow; $strPopup = is_null($iPopup)?('view item ID '.$id):$iPopup; $out = $vgOut->SelfLink($arLink,$strShow,$strPopup); return $out;
}
}
class clsAdminData_helper {
private $objRecs; private $strNewTxt; private $strNewKey;
//===== // STATIC section
public static function _AdminLink(clsDataSet $iThis,$iText=NULL,$iPopup=NULL,array $iarArgs=NULL) {
global $vgOut;
$txtShow = is_null($iText)?($iThis->ID):$iText; if (isset($iThis->Table->ActionKey)) { $strKey = $iThis->Table->ActionKey; } else { $strKey = $iThis->Table->Name(); }
$arLink = $iarArgs; $arLink = array( 'page' => $strKey, 'id' => $iThis->KeyValue()); $out = $vgOut->SelfLink($arLink,$txtShow,$iPopup); return $out;
}
//===== // DYNAMIC section
public function __construct() {
$this->strNewTxt = 'new'; $this->strNewKey = ;
}
protected function ActionID() {
$objRecs = $this->Recs(); return $objRecs->IsNew()?($this->NewKey()):$objRecs->KeyString();
} /*---- PURPOSE: r/w access method for the text to display for new record ID links */ public function NewText($iStr=NULL) {
if (!is_null($iStr)) { $this->strNewTxt = $iStr; } return $this->strNewTxt;
} /*---- PURPOSE: r/w access method for the ID value to use for new record ID links RULES:
* If set to an empty string, no link will be generated
*/ public function NewKey($iStr=NULL) {
if (!is_null($iStr)) { $this->strNewKey = $iStr; } return $this->strNewKey;
}
public function Recs(clsRecs_key_single $iRecs=NULL) {
if (!is_null($iRecs)) { $this->objRecs = $iRecs; } return $this->objRecs;
} protected function AdminLink_array($iarArgs=NULL) {
$txtID = $this->ActionID(); $objRecs = $this->Recs(); if (isset($objRecs->Table->ActionKey)) { $strKey = $objRecs->Table->ActionKey; } else { $strKey = $objRecs->Table->Name(); }
$arLink = array( 'page' => $strKey, 'id' => $txtID );
if (is_array($iarArgs)) { // 2010-06-25 This has not been tested -- maybe it's not useful? $arLink = array_merge($arLink,$iarArgs); } return $arLink;
} /*---- HISTORY:
2012-12-31 After moving code to Helper, making this dynamic
*/ public function AdminURL($iarArgs=NULL) {
global $vgPage;
$arLink = $this->AdminLink_array($iarArgs); $out = $vgPage->SelfURL($arLink,TRUE); return $out;
} /*---- USED BY:
* (static) VbzAdmin::clsAdminTopic::AdminLink() -- may need some rewriting * (dynamic) VbzAdmin::VbzAdminStkItems::Listing_forItem()
HISTORY:
2010-10-06 (both) Wasn't sure who is using this, so commented it out (not WorkFerret or AudioFerret) VbzAdmin didn't *seem* to be using it... (dynamic) Thought I checked VbzAdmin, WorkFerret, and AudioFerret 2010-10-13 (static) Found that VbzAdmin uses it Actually, this is the "boilerplate" function used by most clsDataSet descendants. 2010-10-13 (dynamic) VbzAdmin::VbzAdminStkItems::Listing_forItem() calls it 2010-11-19 (static) Added handling of new records. 2012-03-31 (static) If I added handling of new records in 2010, it must have gotten removed somehow. Adding handling of new records again. 2012-12-31 After moving this code to clsAdminData_helper, modifying new-record handling to use object field values. Also, no longer any need for a static function, so merging with dynamic version.
*/ public function AdminLink($iText=NULL,$iPopup=NULL,array $iarArgs=NULL) {
global $vgOut;
$objRecs = $this->Recs();
if (is_object($vgOut)) { $arLink = $this->AdminLink_array($iarArgs); $txtID = $this->ActionID($objRecs); $txtShow = is_null($iText)?($txtID):$iText; $out = $vgOut->SelfLink($arLink,$txtShow,$iPopup);
return $out; } else { throw new exception('Need to initialize vgOut by calling vgPage->Use*()'); }
} /*---- HISTORY:
2012-12-31 After moving code to Helper, making this dynamic
*/ public function AdminRedirect(array $iarArgs=NULL) {
global $vgOut,$vgPage; global $wgOut;
$url = $this->AdminURL($iarArgs); $wgOut->redirect($url);
}
}
/*%%%%
CLASS: clsAdminTable HISTORY: 2010-10-04 Moved ActionKey() back into data.php, because it's useful for logging. No more need for this class; deprecated now. 2010-10-19 ...except for AdminLink() (when did I add that?)
- /
class clsAdminTable extends clsTable_key_single {
/*---- USED BY: VbzAdmin::VbzAdminItems::AdminLink() HISTORY:
Extricated from VbzAdmin::VbzAdminItems
*/ public static function AdminLink($iID,$iShow=NULL,$iPopup=NULL) {
global $vgOut;
$id = $iID;
$arLink = array( 'page' => 'item', 'id' => $id); $strShow = is_null($iShow)?($id):$iShow; $strPopup = is_null($iPopup)?('view item ID '.$id):$iPopup; $out = $vgOut->SelfLink($arLink,$strShow,$strPopup); return $out;
}
} /*=====
HISTORY: 2010-11-23 Added _AdminRedirect(), _AdminLink_array(), _AdminURL(), _ActionID() BOILERPLATES: public function AdminLink($iText=NULL,$iPopup=NULL,array $iarArgs=NULL) {
return clsAdminData::_AdminLink($this,$iText,$iPopup,$iarArgs);
} public function AdminRedirect(array $iarArgs=NULL) {
return clsAdminData::_AdminRedirect($this,$iarArgs);
}
- /
class clsAdminData extends clsRecs_key_single {
/*==== SECTION: static versions of dynamic functions PURPOSE: for classes which inherit from non-Admin classes (fake multiple inheritance) */ static protected function _ActionID(clsRecs_keyed_abstract $iObj) {
return $iObj->IsNew()?'new':$iObj->KeyString();
} /*---- USED BY: VbzAdmin::VbzAdminStkItems::Listing_forItem() HISTORY:
2010-10-06 Disabled, because it wasn't clear if anyone was using it. Thought I checked VbzAdmin, WorkFerret, and AudioFerret 2010-10-13 VbzAdmin::VbzAdminStkItems::Listing_forItem() calls it
*/ public function AdminLink($iText=NULL,$iPopup=NULL,array $iarArgs=NULL) {
return clsAdminData_helper::_AdminLink($this,$iText,$iPopup,$iarArgs);
}
} </php>