PHP Classes

File: as_admintool.php

Recommend this page to a friend!
  Classes of Alexander Selifonov   site administrator tool set   as_admintool.php   Download  
File: as_admintool.php
Role: Class source
Content type: text/plain
Description: Main class module
Class: site administrator tool set
Web interface to manage site resources
Author: By
Last change: some functionality added
Date: 16 years ago
Size: 8,038 bytes
 

Contents

Class file image Download
<?php
/**
* @package as_admintool
* @desc as_admintool.php - site Administrator functions class (AJAX based)
* @author Alexander Selifonov <as-works@narod.ru>
* @copyright Alexander Selifonov 2007-2008
* @link http://as-works.narod.ru/en/php/
* @version 1.001.005
* modified 18.04.2008 (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
if(!defined('ASADM_CHARSETCL')) define('ASADM_CHARSETCL','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 :';
if(empty(
$as_iface['title_serverresponse'])) $as_iface['title_serverresponse'] ='Response from server';



// css classnames:
if(!is_array($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_charsetcl = ASADM_CHARSETCL; // charset of data came from client

# $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
$tovar = false;
// var $charset = ASADM_CHARSET;
 
var $js_path = ''; // 'relative' path to as_jsfunclib.js module
 
var $udfpages = array(); // registered 'external user pages' list
 
var $_debug = 0;
  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
   * @paqram $tovar - if true/1, all HTML/JS code redirected to variable and function returns it
   * @return none or the whole HTML/JS code
   */
 
function Draw($startpage=false, $tovar=false) {
    global
$as_admt_plugins, $as_admt_pages, $asdt_curpage;
    static
$as_admt_jsdrawn=false;
   
$this->tovar = $tovar;
    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;
   
$ret = true;
    if(!empty(
$this->tovar)) ob_start();
   
$sheet->Draw($startpage, $this->tovar);
    if(!empty(
$this->tovar)) $ret = ob_get_flush();
    return
$ret;
  }

 
// 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_charsetcl, $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_charsetcl!=='' && $as_admt_charsetcl !== 'UTF-8' && function_exists('mb_convert_variables'))
          
mb_convert_variables($as_admt_charsetcl,'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
/**
* @desc returns file extension (lower case) : "path/image.jpg" -> "jpg"
*/
function asadmtFileExt($fname) {
  if(empty(
$fname)) return '';
 
$path_info = pathinfo($fname);
  return
strtolower($path_info['extension']);
}

?>