Location: PHPKode > projects > as_admintool > asadmintool/as_admintool.php
<?php
/**
* @package as_admintool
* @desc as_admintool.php - site Administrator functions class (AJAX based)
* @author Alexander Selifonov <as-hide@address.com>
* @copyright Alexander Selifonov 2007
* @link http://as-works.narod.ru/en/php/
* @version 1.000.003
* modified 06.03.2007 (dd.mm.yyyy)
* Please read "as_admintool.htm" for detailed instructions
*/
require_once('as_dbutils.php');
require_once('as_propsheet.php');

if(!defined('ASADM_CHARSET')) define('ASADM_CHARSET','WINDOWS-1251'); // default charset on HTML pages

// localization is done by setting $as_iface vars
if(empty($as_iface['msg_waiting'])) $as_iface['msg_waiting'] ='waiting for server reply...';
if(empty($as_iface['msg_wrongreply'])) $as_iface['msg_wrongreply'] ='Wrong reply from server :';


// css classnames:
if(!isset($as_cssclass)) $as_cssclass = array();
if(empty($as_cssclass['textfield'])) $as_cssclass['textfield'] = 'ibox';
if(empty($as_cssclass['button'])) $as_cssclass['button'] = 'button';
if(empty($as_cssclass['resultarea'])) $as_cssclass['resultarea'] = 'resultarea';
if(empty($as_cssclass['trowhead'])) $as_cssclass['trowhead'] = 'head';
if(empty($as_cssclass['tdhead'])) $as_cssclass['tdhead'] = 'head';
if(empty($as_cssclass['troweven'])) $as_cssclass['troweven'] = 'even';
if(empty($as_cssclass['trowodd'])) $as_cssclass['trowodd'] = 'odd';

$as_admt_charset = ASADM_CHARSET; // main charset

# $as_admt_pages - all added 'admin pages' list  :
#  [*][0]-plugin typeID, 
#  [*][1]-page title, 
#  [*][2]- user parameter-1 for drawing/handling page
#  [*][3]- user parameter-2 for drawing/handling page
#  [*][4]- user parameter-3 for drawing/handling page
if(!isset($as_admt_pages)) $as_admt_pages=array();

# $as_admt_plugins - array holding all "registered" admin plugins: 
#  [0]-Drawing page PHP function name
#  [1]-executing query PHP function name
if(!isset($as_admt_plugins)) $as_admt_plugins=array();

# var for internal needs - remember active page for re-drawing screen after POST
if(!isset($asdt_curpage)) $asdt_curpage = false;
# var for internal needs - will hold 'result' message to show after POST
if(!isset($asdt_result)) $asdt_result = array();

/**
* @desc This class is a container for 'admininstaror task' plugins
*/
class CAsAdminTool {
  var $wnd_w = 0;
  var $wnd_h = 0;
  var $sheet = '';
  var $b_sqlqry = true;
  var $b_export = false;
  var $b_import = false;
//  var $charset = ASADM_CHARSET;
  var $js_path = ''; // 'relative' path to as_jsfunclib.js module
  var $udfpages = array(); // registered 'external user pages' list
  function SetJsPath($strk) { $this->js_path = $strk; }
  function ReadStdSqlFromFile($filename='') {
    global $as_adm_stdsqls;
    if($filename==='' || !is_file($filename)) $as_adm_stdsqls = array();
    else {
      $tlst = file($filename);
      foreach($tlst as $strk) { 
        $tval = explode('|',trim($strk));
        if(count($tval)>1) $as_adm_stdsqls[$tval[0]] = $tval[1];
      }
    }
  }

/**
* @desc class constructor, sets up width and height for a wrapper window
*/
  function CAsAdminTool($w_width=920, $w_height=600) { // constructor
    $this->wnd_w = $w_width;
    $this->wnd_h = $w_height;
  }

  /**
  * @desc registering new plugin
  * @param string $plgtype - unique plugin string ID
  * @param string $funchtml - user PHP function name, that draws HTML code
  * @param string $funcexec - name of 'request executing' function
  */
  function RegisterPlugin($plgtype,$funchtml,$funcexec='', $func_stdpost='') {
    global $as_admt_plugins;
    $as_admt_plugins[$plgtype] = array($funchtml,$funcexec,$func_stdpost);
  }
  function AddPage($pagetype, $pagetitle, $usrparam1=false,$usrparam2=false,$usrparam3=false) {
    global $as_admt_pages;
    $as_admt_pages[] = array($pagetype, $pagetitle, $usrparam1,$usrparam2,$usrparam3);
#    return count($as_admt_pages);
  }

   /**
   * @desc draws "Property sheet" with all registered pages
   * @param $startpage - initially active page number
   * @return none
   */
  function Draw($startpage=false) {
    global $as_admt_plugins, $as_admt_pages, $asdt_curpage;
    static $as_admt_jsdrawn=false;
    if(empty($as_admt_jsdrawn)) {
       $as_admt_jsdrawn = true; // draw JS functions once !
       $this->DrawJsFunctions();
    }
    $sheet = new CPropertySheet('admintool',$this->wnd_w,$this->wnd_h, TABSTYLE);
    
    for($pgno=0; $pgno<count($as_admt_pages); $pgno++) {
       $pagetype = $as_admt_pages[$pgno][0];
       $funcname = $as_admt_plugins[$pagetype][0];
       if(!empty($funcname) && function_exists($funcname))
         $sheet->AddPage($as_admt_pages[$pgno][1],$funcname,  '', array($pgno,$this->wnd_w,$this->wnd_h),
           $as_admt_pages[$pgno][2],$as_admt_pages[$pgno][3],$as_admt_pages[$pgno][4]);
    }
    if($startpage===false) $startpage=$asdt_curpage;
    $sheet->Draw($startpage);
  }

  // draw all plugin-specific javascript code
  function DrawJsFunctions() {
    global $as_admt_plugins;
    echo "<script language='javascript' src='{$this->js_path}as_jsfunclib.js'></script>\n<script language='javascript'>\n";
    foreach($as_admt_plugins as $as_type=>$asdata) {
      if(!empty($asdata[2]) && function_exists($asdata[1])) call_user_func($asdata[1]);
    }
    echo "\n</script>\n";
  }

  /**
  * You call this func from Your code if POST or GET var 'adm_action_type' has come
  * @return none, exits (PHP execution stops) when done
  * PHP5 : keyword "static" may be nessesary before 'function'
  */
  function PerformAction() {
    global $as_admt_charset, $as_admt_plugins, $asdt_curpage;
    $parms = array_merge($_POST,$_GET);
    if(!isset($parms['adm_action_type'])) return; // no need to do anything, just go on...
    $typeid = $parms['adm_action_type'];
    $pageid = isset($parms['pageid'])?$parms['pageid']:'1';
    $ret = "$pageid{|}Wrong call / $typeid";
    if(!isset($as_admt_plugins[$typeid])) { echo "$pageid{|}undefined type: $typeid"; exit; }
    if(!empty($parms['as_stdpost'])) {
      # non-ajax mode, so call 'std-post' user function
      $asdt_curpage = $pageid; // to make the same page initially active, we came from
      if(function_exists($as_admt_plugins[$typeid][2]))
        $ret = call_user_func($as_admt_plugins[$typeid][2]);
      return;
    }
    else { // ajax mode - echo result and EXIT
#      $parms = $_POST;
      if(function_exists($as_admt_plugins[$typeid][1])) {
        if($as_admt_charset!=='' && $as_admt_charset !== 'UTF-8' && function_exists('mb_convert_variables')) 
           mb_convert_variables($as_admt_charset,'UTF-8',$parms);
        $ret = call_user_func($as_admt_plugins[$typeid][1],$parms);
        if($as_admt_charset !== 'UTF-8' && $as_admt_charset!=='' && function_exists('mb_convert_encoding')) 
          $ret = mb_convert_encoding($ret,'UTF-8',$as_admt_charset);
      }
      else $ret = "as_admintool: Wrong function for $typeid: {$as_admt_plugins[$typeid][1]}"; 
      echo $ret;
      exit;
    }
  }
} # class CAsAdminTool end
?>
Return current item: as_admintool