Ferreteria/archive/admin.php

From Woozle Writes Code
< Ferreteria‎ | archive
Revision as of 16:42, 22 May 2022 by Woozle (talk | contribs) (3 revisions imported: moving this project here)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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>