ea-Geiercode-base
[ class tree: ea-Geier ] [ index: ea-Geier ] [ all elements ]

Source for file db.class.php

Documentation is available at db.class.php

  1. <?php 
  2. /**
  3.  * database wrapper class
  4.  *
  5.  * LICENSE:
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; either version 2 of the License, or
  9.  * (at your option) any later version.
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the
  13.  * GNU General Public License for more details.
  14.  * You should have received a copy of the GNU General Public License along
  15.  * with this program; if not, write to the Free Software Foundation, Inc.,
  16.  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  17.  *
  18.  * @package       ea-Geier
  19.  * @subpackage code/base
  20.  * @author       m2mtech <tech@m2m.at>
  21.  * @copyright  2007 m2m server software gmbh
  22.  * @license       http://www.gnu.org/licenses/gpl.html GNU General Public License Version 2
  23.  * @version       $Id: db.class.php 141 2007-08-31 20:52:47Z m2mtech $
  24.  * @link       http://www.ea-geier.at/
  25.  */
  26.  
  27. /**
  28.  * path to ADOdb library
  29.  * @ignore
  30.  *  attention: might have been defined already in
  31.  *  config/config.php or code/config.php
  32.  */
  33. if (!defined('eaADODB_DIR'))  define('eaADODB_DIR''3party/adodb/adodb494/');
  34.  
  35. /**
  36.  * load adobdb library
  37.  */
  38. require_once(eaADODB_DIR 'adodb.inc.php');
  39. require_once(eaADODB_DIR 'session/adodb-cryptsession2.php');
  40. require_once(eaADODB_DIR 'session/crypt.inc.php');
  41.  
  42. /**
  43.  * wrapper for ADOdb database library
  44.  *
  45.  * for basic initialization etc.
  46.  *
  47.  * @package       ea-Geier
  48.  */
  49. class eaDB {
  50.  
  51.     /**
  52.      * database resource
  53.      *
  54.      * @var object 
  55.      */
  56.     var $_db = false;
  57.  
  58.     /**
  59.      * table prefix
  60.      *
  61.      * @var string 
  62.      */
  63.     var $_prefix = '';
  64.  
  65.     /**
  66.      * client tables
  67.      *
  68.      * @var string 
  69.      */
  70.     var $_clientTables = array();
  71.  
  72.     /**
  73.      * configuration data
  74.      *
  75.      * @var array 
  76.      */
  77.     var $conf = false;
  78.  
  79.     /**
  80.      * user data
  81.      *
  82.      * @var array 
  83.      */
  84.     var $user = false;
  85.  
  86.     /**
  87.      * constructor of database wrapper
  88.      *
  89.      * defines the environmental db settings
  90.      * and starts session if not already done
  91.      *
  92.      * @param    array    configuration data
  93.      * @param    boolean enable adobdb debug (false)
  94.      */
  95.     function eaDB(&$conf$debug false{
  96.         // prepare configuration
  97.         $this->conf =$conf;
  98.         if (isset($conf['dsn'])) $dsn $conf['dsn'];
  99.         else return false;
  100.         if (isset($conf['tablePrefix'])) $prefix $conf['tablePrefix'];
  101.         else $prefix '';
  102.         if (isset($conf['sessionName'])) $sessionName $conf['sessionName'];
  103.         else $sessionName '';
  104.         
  105.         // connect to db        
  106.         if (!$this->_db = ADONewConnection($dsn)) return false;        
  107.         if (defined('eaDEBUG'&& strpos(eaDEBUG'dbDebug'))
  108.             $this->_db->debug true;
  109.         else $this->_db->debug $debug;
  110.         $this->_db->SetFetchMode(ADODB_FETCH_ASSOC);
  111.         
  112.         // register table prefix
  113.         $this->_prefix = $prefix;
  114.         
  115.         // session handling - only with first database connection
  116.         if ((!isset($GLOBALS['ADODB_SESS_CONN']|| !$GLOBALS['ADODB_SESS_CONN']&& !headers_sent()) {
  117.             $GLOBALS['ADODB_SESS_CONN'=$this->_db;
  118.             if ($this->_db->debugob_start();
  119.             $vars array ('HTTP_ACCEPT_CHARSET''HTTP_ACCEPT_ENCODING''HTTP_ACCEPT_LANGUAGE''HTTP_USER_AGENT''REMOTE_ADDR');
  120.             $sessionKey 'ea'foreach($vars as $var$sessionKey .= $var;
  121.             ADOdb_Session::encryptionKey(md5($sessionKey));
  122.             ADODB_Session::table($prefix 'sessions2');
  123.             ADODB_Session::optimize(true);
  124.             if ($sessionNamesession_name($sessionName);
  125.             session_start();
  126.             if ($this->_db->debugob_end_flush();
  127.         }
  128.         
  129.         // load configuration
  130.         if (!$dummy $this->select('name, value, what'$this->table('config'))) 
  131.             return false;
  132.         foreach ($dummy as $itemswitch ($item['what']{
  133.             case 'select':
  134.                 $split explode(';'$item['value']);
  135.                 if (!isset($split[1])) $split explode(','$split[0]);
  136.                 $conf[$item['name']] trim($split[0]);
  137.                 break;
  138.             case 'encrypt':
  139.                 if (!isset($crypt)) $crypt new MD5Crypt;
  140.                 $conf[$item['name']] $this->decrypt($item['value']);
  141.                 break;
  142.             default:
  143.                 $conf[$item['name']] $item['value'];
  144.         }
  145.         
  146.         // load client tables        
  147.         if (isset($conf['txtClientTables']&& $conf['txtClientTables'])
  148.             $this->_clientTables = $conf['txtClientTables'];
  149.         
  150.         return true;
  151.     }
  152.  
  153.     /**
  154.      * switch to client database - if necessary
  155.      *
  156.      * @param    integer clientID
  157.      * @return    boolean status
  158.      */
  159.     function switchToClientDB($client{
  160.         // write & close session into current database
  161.         if (isset($GLOBALS['ADODB_SESS_CONN'])) session_write_close();
  162.  
  163.         // fetch dsn
  164.         if (!isset($this->clients[$client]['db'])) {
  165.             if (!$dummy $this->selectOne('db'$this->table('clients')array('id' => $client))) return false;
  166.  
  167.             $dsn $this->decrypt($dummy['db']);
  168.         else $dsn $this->clients[$client]['db'];
  169.  
  170.         $this->_prefix .= $client '_';
  171.  
  172.         if (strpos($dsn'dsnTest'!== false$dsn false// simpletest artefact
  173.         
  174.         if (!$dsnreturn false;
  175.  
  176.         // switch db
  177.         $oldDebug $this->_db->debug;
  178.         if (!$this->_db = ADONewConnection($dsn)) return false;
  179.         $this->_db->debug $oldDebug;
  180.         $this->_db->SetFetchMode(ADODB_FETCH_ASSOC);
  181.         
  182.         return true;
  183.     }
  184.             
  185.     /**
  186.      * checks for database error
  187.      *
  188.      * @return boolean    status
  189.      */
  190.     function error({
  191.         if (!$this->_dbreturn true;
  192.         //print_r($this->_db);
  193.         return false;
  194.     }
  195.  
  196.     /**
  197.      * login validation
  198.      *
  199.      * @param    eaInput input values
  200.      * @return    array    user data | false
  201.      */
  202.     function checkLogin(&$in{
  203.         $conf =$this->conf;
  204.         $user =$this->user;
  205.         
  206.         if (($login $in->post('mailLogin')) && ($password $in->post('passLogin'))) {
  207.             $encrypt true;
  208.         else {
  209.             if (!isset($_SESSION['lg'])) return false;
  210.             if (!isset($_SESSION['pw'])) return false;
  211.             $login $_SESSION['lg'];
  212.             $password $_SESSION['pw'];
  213.             $encrypt false;
  214.         }
  215.         $what 'u.*';
  216.         $table $this->table('users'' u';
  217.         $where '(mail = ' $this->escape($login')';
  218.         if ($encrypt
  219.             $where .= ' and (pw = ' $this->escape(md5($password)) ')';
  220.         else $where .= ' and (pw = ' $this->escape($password')';
  221.         if (!$user $this->selectOne($what$table$where)) return false;
  222.         if ($encrypt{
  223.             adodb_session_regenerate_id();
  224.             $_SESSION['lg'$user['mail'];
  225.             $_SESSION['pw'$user['pw'];
  226.         }
  227.         
  228.         // get user configuration
  229.         $table $this->table('userconfig'' u, ' $this->table('config'' c';
  230.         $where "(u.userID = '" $user['id'"') and (u.name = c.name) and (c.context = 'user')";
  231.         if ($dummy $this->select('u.*',  $table$where)) {
  232.             foreach ($dummy as $var$conf[$var['name']] =    $var['value'];
  233.         }
  234.         return $user;
  235.     }
  236.  
  237.     /**
  238.      * logout function
  239.      *
  240.      * deletes session data
  241.      * @return    status 
  242.      */
  243.     function logout({
  244.         if (!isset($_SESSION)) return false;
  245.         foreach ($_SESSION as $key => $val$_SESSION[$key'';
  246.         return true;
  247.     }
  248.     
  249.     /**
  250.      * checks if user exists
  251.      *
  252.      * @param    string            username
  253.      * @return    boolean/string    status/name
  254.      */
  255.     function isUser($name$get 'name'{
  256.         $what 'u.*';
  257.         $table $this->table('users'' u';
  258.         $where 'mail = ' $this->escape($name);
  259.         if (!$dummy $this->selectOne($what$table$where)) return false;
  260.         switch ($get{
  261.             case 'id':
  262.                 return $dummy['id'];
  263.             case 'name'default:
  264.                 if ($dummy['name']return $dummy['name'];
  265.         }
  266.         return true;
  267.     }
  268.  
  269.     /**
  270.      * create user
  271.      *
  272.      * @param    string/array    username/userdata
  273.      * @param    string            password (optional if userdata)
  274.      * @return    boolean            status
  275.      */
  276.     function createUser($user$pw ''{
  277.         $what array();
  278.         if (is_array($user)) {
  279.             $vars array('mail''name''pw');
  280.             foreach ($vars as $varswitch ($var{
  281.                 case 'pw':
  282.                     if ($pw$user['pw'$pw;
  283.                     $what['pw'md5($user['pw']);
  284.                     break;
  285.                 default:
  286.                     $what[$var$user[$var];
  287.             }
  288.         else {
  289.             $what array('name' => 'dummy''mail' => $user'pw' => md5($pw));
  290.         }
  291.         $what['lastModified'$this->now();        
  292.         return $this->insert($what$this->table('users'));
  293.     }
  294.  
  295.     /**
  296.      * update user
  297.      *
  298.      * @param    string            old user
  299.      * @param    array            new userdata
  300.      * @param    boolean            change session
  301.      * @return    boolean            status
  302.      */
  303.     function updateUser($oldUser$userData$session false{
  304.         if (isset($userData['mail']&& ($userData['mail'!= $oldUser&& $this->isUser($userData['mail']))
  305.             return false;
  306.         $what array();
  307.         $vars array('mail''name''pw');
  308.         foreach ($vars as $varif (isset($userData[$var])) switch ($var{
  309.             case 'pw':
  310.                 $what['pw'md5($userData['pw']);
  311.                 break;
  312.             default:
  313.                 $what[$var$userData[$var];
  314.         }
  315.         $where array('mail' => $oldUser);
  316.         if (!$this->update($what$this->table('users')$where)) return false;
  317.         if ($session{
  318.             if (isset($userData['mail'])) $_SESSION['lg'$userData['mail'];
  319.             if (isset($userData['pw'])) $_SESSION['pw'md5($userData['pw']);        
  320.         }
  321.         return true;
  322.     }
  323.  
  324.     /**
  325.      * delete user
  326.      *
  327.      * @param    string            username
  328.      * @return    boolean            status
  329.      */
  330.     function deleteUser($user{
  331.         if (!$this->isUser($user)) return false;
  332.         
  333.         $table $this->table('users');
  334.         $where array('mail' => $user);
  335.         if (!$user $this->selectOne('id'$table$where)) return false;
  336.  
  337.         $cTable $this->table('clients');
  338.         $cWhere array('owner' => $user['id']);
  339.         $clients $this->select('id'$cTable$cWhere);
  340.         
  341.         $this->_db->StartTrans();
  342.         if ($clientsforeach ($clients as $client)
  343.             $this->deleteClient($client['id']);
  344.         $this->delete($this->table('userconfig')array('userId' => $user['id']));
  345.         $this->delete($table$where);        
  346.         $this->_db->CompleteTrans();
  347.  
  348.         return true;
  349.     }
  350.  
  351.     /**
  352.      * set password for user
  353.      *
  354.      * @param    string    username
  355.      * @param    string    password
  356.      * @return    boolean status
  357.      */
  358.     function setPW($user$pw{
  359.         return $this->updateUser($userarray('pw' => $pw));
  360.     }
  361.  
  362.     /**
  363.      * get user configuration variables
  364.      *
  365.      * @return    array    configuration data
  366.      */
  367.     function getUserConf({
  368.         $where "(context = 'user')";
  369.         if ($this->user['mail'!= eaSYSADMIN$where .= " and (rights = 'user')";    
  370.         return $this->select('*',  $this->table('config')$where);
  371.     }
  372.  
  373.     /**
  374.      * update user configuration
  375.      *
  376.      * @param    integer            user ID
  377.      * @param    array            changed configruration
  378.      * @return    boolean            status
  379.      */
  380.     function updateUserConf($userID$changed{
  381.         $result true;
  382.         $table $this->table('userconfig');
  383.         $where array('userID''name');
  384.         foreach ($changed as $key => $val{
  385.             $what array('userID' => $userID'name' => $key'value' => $val'lastModified' => $this->now());        
  386.             if (!$this->_db->Replace($table$what$wheretrue)) $result false;
  387.         }
  388.         return $result;
  389.     }
  390.  
  391.     /**
  392.      * create client
  393.      *
  394.      * @param    array            client data
  395.      * @param    array            optional user data
  396.      * @return    boolean            status
  397.      */
  398.     function createClient(&$data$user false$demo false{
  399.         $conf =$this->conf;
  400.         if (!$user$user =$this->user;
  401.         $what['name'$data['txtNewClientName'];
  402.         $what['owner'$user['id'];
  403.         $what['db'$this->encrypt($conf['dsnNewClientDB']);        
  404.         $what['lastModified'$this->now();        
  405.         if (!$this->insert($what$this->table('clients'))) return false;
  406.         $clientID $this->lastID();
  407.         
  408.         if ($this->_clientTables{
  409.             $oldPrefix $this->_prefix;
  410.             $oldDebug $this->_db->debug;
  411.             $switched $this->switchToClientDB($clientID)
  412.             
  413.             require_once(eaADODB_DIR 'adodb-xmlschema03.inc.php');    
  414.  
  415.             foreach ($this->_clientTables as $table{
  416.                 $schema new adoSchema($this->_db);
  417.                 if ($demo)
  418.                     $schema->ParseSchemaString(str_replace($table$this->_prefix . $table$schema->ConvertSchemaFile('admin/sql/demo_' $table '.sql')))
  419.                 else 
  420.                     $schema->ParseSchemaString(str_replace($table$this->_prefix . $table$schema->ConvertSchemaFile('admin/sql/' $table '.sql')))
  421.                 $schema->ContinueOnError(true);
  422.                 $schema->ExecuteSchema()
  423.             }
  424.  
  425.             $this->_prefix = $oldPrefix;
  426.             if ($switched// switch back
  427.                 $this->_db = ADONewConnection($conf['dsn']);        
  428.                 $this->_db->SetFetchMode(ADODB_FETCH_ASSOC);
  429.             }            
  430.             $this->_db->debug $oldDebug;
  431.         }
  432.         return $clientID;
  433.     }
  434.  
  435.     /**
  436.      * update client
  437.      *
  438.      * @param    integer        clientID
  439.      * @param    array        new client data
  440.      * @return    boolean        status
  441.      */
  442.     function updateClient($id$data{
  443.         $what array();
  444.         $vars array('name');
  445.         foreach ($vars as $varif (isset($data[$var])) switch ($var{
  446.             default:
  447.                 $what[$var$data[$var];
  448.         }
  449.         $where array('id' => $id);
  450.         return $this->update($what$this->table('clients')$where);
  451.     }
  452.  
  453.     /**
  454.      * delete client
  455.      *
  456.      * @param    integer            client id
  457.      * @return    boolean            status
  458.      */
  459.     function deleteClient($id{
  460.         if (!$idreturn false;
  461.  
  462.         if ($this->_clientTables{
  463.             $oldPrefix $this->_prefix;
  464.             $oldDebug $this->_db->debug;
  465.             $switched $this->switchToClientDB($id)
  466.             
  467.             foreach ($this->_clientTables as $table
  468.                 $this->drop($this->table($table));            
  469.             
  470.             $this->_prefix = $oldPrefix;
  471.             if ($switched{
  472.                 $this->_db = ADONewConnection($this->conf['dsn']);        
  473.                 $this->_db->SetFetchMode(ADODB_FETCH_ASSOC);
  474.             }            
  475.             $this->_db->debug $oldDebug;
  476.         }
  477.         
  478.         $cTable $this->table('clients');
  479.         $ccTable $this->table('clientconfig');
  480.         
  481.         $this->_db->StartTrans();
  482.         $this->delete($ccTablearray('clientID' => $id));
  483.         $this->delete($cTablearray('id' => $id));
  484.         $this->_db->CompleteTrans();
  485.  
  486.         return true;
  487.     }
  488.  
  489.     /**
  490.      * get assigned clients
  491.      *
  492.      * @param    eaInput input values
  493.      * @return    boolean            status
  494.      */
  495.     function getClients(&$in{        
  496.         $conf =$this->conf;
  497.         $user =$this->user;
  498.         $opt =$in->options;
  499.  
  500.         $where "(owner = '" $user['id'"') or (users like '-" $user['id'"-')";
  501.         if (isset($user['mail']&& ($user['mail'== eaSYSADMIN)) $where '1';
  502.         if (!$result $this->select('*'$this->table('clients')$where'name asc')) return false;
  503.         foreach ($result as $r{
  504.             $r['db'$this->decrypt($r['db']);
  505.             $this->clients[$r['id']] $r;
  506.             $opt['clients'][$r['id']] $r['name'];
  507.         }
  508.  
  509.         return true;
  510.     }
  511.  
  512.     /**
  513.      * checks if user is owner
  514.      *
  515.      * @param    integer clientID
  516.      * @return    boolean status
  517.      */
  518.     function isOwner($id{        
  519.         $conf =$this->conf;
  520.         $user =$this->user;
  521.  
  522.         if (isset($user['mail']&& ($user['mail'== eaSYSADMIN)) return true;
  523.  
  524.         if (isset($this->clients)) {
  525.             if (!isset($this->clients[$id])) return false;
  526.             if ($this->clients[$id]['owner'!= $this->user['id']return false;
  527.             return true;
  528.         }
  529.  
  530.         if (!$this->select('id'$this->table('clients')array('owner' => $user['id'])))
  531.             return false;
  532.             
  533.         return true;
  534.     }
  535.  
  536.     /**
  537.      * get client configuration variables
  538.      *
  539.      * @param    integer clientID
  540.      * @return    array    configuration data
  541.      */
  542.     function getClientConf($id{
  543.         $where "(context = 'client')";
  544.         if ($this->user['mail'!= eaSYSADMIN$where .= " and (rights = 'owner')"
  545.         return $this->select('*',  $this->table('config')$where);
  546.     }
  547.  
  548.     /**
  549.      * load client configuration into configuration variables
  550.      *
  551.      * @param    integer clientID
  552.      * @return    integer clientID
  553.      */
  554.     function loadClientConf($id{
  555.         if (!$idreturn false;
  556.         
  557.         $conf =$this->conf;
  558.         $table $this->table('clientconfig');
  559.         $where array('clientID' => $id);
  560.         if ($dummy $this->select('*',     $table$where)) {
  561.             foreach ($dummy as $var$conf[$var['name']] =    $var['value'];
  562.         }
  563.         return $id;
  564.     }
  565.  
  566.     /**
  567.      * update client configuration
  568.      *
  569.      * @param    integer            client ID
  570.      * @param    array            changed configruration
  571.      * @return    boolean            status
  572.      */
  573.     function updateClientConf($id$changed{
  574.         $result true;
  575.         $table $this->table('clientconfig');
  576.         $where array('clientID''name');
  577.         foreach ($changed as $key => $val{
  578.             $what array('clientID' => $id'name' => $key'value' => $val'lastModified' => $this->now());
  579.             if (!$this->_db->Replace($table$what$wheretrue)) $result false;
  580.         }
  581.         return $result;
  582.     }
  583.  
  584.     /**
  585.      * add user to client
  586.      *
  587.      * @param    integer client ID
  588.      * @param    string    email address
  589.      * @return    boolean status
  590.      */
  591.     function addUserToClient($client$user{
  592.         // get userID
  593.         if (!$user $this->selectOne('id'$this->table('users')array('mail' => $user)))
  594.             return false;
  595.  
  596.         // get client data
  597.         $table $this->table('clients');
  598.         $where['id'$client;
  599.         if (!$client $this->selectOne('users'$table$where)) return false;
  600.         if (preg_match('/-' $user['id''-/'$client['users'])) return true;
  601.         
  602.         if (strlen($client['users']2$client['users'.= $user['id''-';
  603.         else $client['users''-' $user['id''-';
  604.  
  605.         return $this->update($client$table$where);
  606.     }
  607.  
  608.     /**
  609.      * remove user from client
  610.      *
  611.      * @param    integer clientID
  612.      * @param    integer userID
  613.      * @return    boolean status
  614.      */
  615.     function delUserClient($client$user{
  616.         // get client data
  617.         $table $this->table('clients');
  618.         $where['id'$client;
  619.         if (!$client $this->selectOne('users'$table$where)) return false;
  620.  
  621.         $client['users'preg_replace('/-' $user '-/''-'$client['users']);
  622.         return $this->update($client$table$where);
  623.     }
  624.  
  625.     /**
  626.      * get client users
  627.      *
  628.      * @param    integer client ID
  629.      * @return    array    user data
  630.      */
  631.     function getClientUsers($id{
  632.         $what 'u.id, u.mail';
  633.         $table $this->table('clients'' c, ' $this->table('users'' u';
  634.         $where "(c.id = " $this->escape($id") and (c.users like " $this->_db->Concat("'%-'"'u.id'"'-%'"")";
  635.         if (!$users $this->select($what$table$where'u.mail asc')) return false;
  636.     
  637.         foreach ($users as $user$result[$user['id']] $user['mail'];
  638.         
  639.         return $result;
  640.     }
  641.  
  642.     /**
  643.      * get system configuration variables
  644.      *
  645.      * @param    string    username
  646.      * @return    array    configuration data
  647.      */
  648.     function getSysConf({
  649.         if ($this->user['mail'!= eaSYSADMINreturn false;
  650.         $where "(context = 'system')";
  651.         return $this->select('*',  $this->table('config')$where);
  652.     }
  653.  
  654.     /**
  655.      * update system configuration
  656.      *
  657.      * @param    array            changed configruration
  658.      * @return    boolean            status
  659.      */
  660.     function updateSysConf($changed{
  661.         if ($this->user['mail'!= eaSYSADMINreturn false;
  662.         if (!$changedreturn false;
  663.         if (!is_array($changed)) return false;
  664.         foreach ($changed as $key => $val$what[array($val$key);
  665.         $sql 'update ' $this->table('config'' set value=? where name=?';
  666.         if (!$this->_db->Execute($sql$what)) return false;
  667.         return true;
  668.     }
  669.  
  670.     /**
  671.      * select one single database row
  672.      *
  673.      * @param    string            columns
  674.      * @param    string            table
  675.      * @param    string/array    conditions
  676.      * @param    string            sorting
  677.      * @return    array            result
  678.      */
  679.     function selectOne($what$table ''$where ''$order ''{
  680.         return $this->select($what$table$where$order1);
  681.     }
  682.  
  683.     /**
  684.      * select database rows
  685.      *
  686.      * @param    string            columns
  687.      * @param    string            table
  688.      * @param    string/array    conditions
  689.      * @param    string            sorting
  690.      * @param    integer            number of rows
  691.      * @param    integer            offset
  692.      * @param    string            group by
  693.      * @return    array            result
  694.      */
  695.     function select($what$table ''$where ''$order ''$rows = -1$offset = -1$group ''{
  696.         if ($table$table ' from ' $table;
  697.         if ($where{
  698.             if (is_array($where)) {
  699.                 $dummy '';
  700.                 $next '';
  701.                 $nameQuote $this->_db->nameQuote;
  702.                 foreach ($where as $key => $val{
  703.                     $dummy .= $next '(' $nameQuote $key $nameQuote ' = ' $this->escape($val')';
  704.                     $next ' and ';
  705.                 }    
  706.                 $where ' where ' $dummy;
  707.             else $where ' where ' $where;
  708.         }
  709.         if ($order$order ' order by ' $order;
  710.         if ($group$group ' group by ' $group;
  711.  
  712.         if (!$rs $this->_db->SelectLimit('select ' $what $table $where $group $order$rows$offset))
  713.             return false;
  714.         if (!$rs->EOF{
  715.             if ($rows == 1$arr $rs->fields;
  716.             else $arr $rs->getArray();            
  717.         else $arr array();
  718.         $rs->Close();
  719.         return $arr;
  720.     }
  721.  
  722.     /**
  723.      * escape value string
  724.      *
  725.      * @param    string    string to escape
  726.      * @return    string    escaped string
  727.      */
  728.     function escape($string$noQuote false{
  729.         $return $this->_db->qstr($string);
  730.         if ($noQuote$return substr($return1-1);
  731.         return $return;
  732.     }
  733.  
  734.     /**
  735.      * escape key string
  736.      *
  737.      * @param    string    string to escape
  738.      * @return    string    escaped string
  739.      */
  740.     function escapeKey($string{
  741.         return $this->_db->nameQuote $string $this->_db->nameQuote;
  742.     }
  743.  
  744.     /**
  745.      * encrypt string
  746.      *
  747.      * @param    string    string to encrypt
  748.      * @param    string    key [dsn]
  749.      * @return    string    encrypted string
  750.      */
  751.     function encrypt($string$key false{
  752.         if (!isset($this->_crypt)) $this->_crypt new MD5Crypt;
  753.         if (!$key{
  754.             if (isset($this->conf['dsn'])) $key $this->conf['dsn'];
  755.             else $key 'dsn';
  756.         }
  757.         return $this->_crypt->Encrypt($string$key);
  758.     }
  759.  
  760.     /**
  761.      * decrypt string
  762.      *
  763.      * @param    string    string to decrypt
  764.      * @param    string    key [dsn]
  765.      * @return    string    decrypted string
  766.      */
  767.     function decrypt($string$key false{
  768.         if (!isset($this->_crypt)) $this->_crypt new MD5Crypt;
  769.         if (!$key{
  770.             if (isset($this->conf['dsn'])) $key $this->conf['dsn'];
  771.             else $key 'dsn';
  772.         }
  773.         return $this->_crypt->Decrypt($string$key);
  774.     }
  775.  
  776.     /**
  777.      * return real table name
  778.      *
  779.      * @param    string    preliminary table name
  780.      * @return    string    table name
  781.      */
  782.     function table($string{
  783.         if (!$this->_prefixreturn $string;
  784.         return $this->_prefix . $string;
  785.     }
  786.  
  787.     /**
  788.      * insert array into table
  789.      *
  790.      * @param    array    $what    key => value
  791.      * @param    string    $table    table
  792.      * @return    boolean result
  793.      */
  794.     function insert($what$table{   
  795.         $cols '';
  796.         $vals '';
  797.         $next '';
  798.         $nameQuote $this->_db->nameQuote;
  799.         foreach ($what as $key => $val{
  800.             $cols .= $next $nameQuote $key $nameQuote;
  801.             $vals .= $next $this->escape($val);
  802.             $next ', ';
  803.         }
  804.         $sql 'insert into ' $table '(' $cols ') values (' $vals ')';
  805.         if (!$this->_db->Execute($sql)) return false;
  806.         return true;
  807.     }
  808.     
  809.     /**
  810.      * update table
  811.      *
  812.      * @param    string/array    sql string / key => value
  813.      * @param    string            table
  814.      * @param    string/array    conditions
  815.      * @return    boolean result
  816.      */
  817.     function update($what$table$where ''{
  818.         if (!$whatreturn false;
  819.         if (is_array($what)) {
  820.             $dummy '';
  821.             $next '';
  822.             $nameQuote $this->_db->nameQuote;
  823.             foreach ($what as $key => $val{
  824.                 $dummy .= $next $nameQuote $key $nameQuote ' = ' $this->escape($val);
  825.                 $next ', ';
  826.             }
  827.             $what $dummy;
  828.         }
  829.         if ($where{
  830.             if (is_array($where)) {
  831.                 $dummy ' where ';
  832.                 $next '';
  833.                 $nameQuote $this->_db->nameQuote;
  834.                 foreach ($where as $key => $val{
  835.                     $dummy .= $next '(' $nameQuote $key $nameQuote ' = ' $this->escape($val')';
  836.                     $next ' and ';
  837.                 }
  838.                 $where $dummy;            
  839.             else $where ' where ' $where;
  840.         }
  841.         $sql 'update ' $table ' set ' $what $where;
  842.         if (!$this->_db->Execute($sql)) return false;
  843.         return true;
  844.     }
  845.  
  846.     /**
  847.      * delete datasets
  848.      *
  849.      * @param    string            table
  850.      * @param    string/array    conditions
  851.      * @return    boolean            result
  852.      */
  853.     function delete($table$where ''{
  854.         if ($where{
  855.             if (is_array($where)) {
  856.                 $dummy ' where ';
  857.                 $next '';
  858.                 $nameQuote $this->_db->nameQuote;
  859.                 foreach ($where as $key => $val{
  860.                     $dummy .= $next '(' $nameQuote $key $nameQuote ' = ' $this->escape($val')';
  861.                     $next ' and ';
  862.                 }
  863.                 $where $dummy;            
  864.             else $where ' where ' $where;
  865.         }        
  866.         $sql 'delete from ' $table $where;
  867.         if (!$this->_db->Execute($sql)) return false;
  868.         return true;
  869.     }
  870.  
  871.     /**
  872.      * get last inserted id
  873.      *
  874.      * @return    integer last id
  875.      */
  876.     function lastID({
  877.         return $this->_db->Insert_ID();
  878.     }
  879.  
  880.     /**
  881.      * drop table
  882.      *
  883.      * @param    string            table
  884.      * @return    boolean            result
  885.      */
  886.     function drop($table{
  887.         if (!$tablereturn false;        
  888.         $sql 'drop table ' $table;
  889.         if (!$this->_db->Execute($sql)) return false;
  890.         return true;
  891.     }
  892.  
  893.     /**
  894.      * generate sql time string from unix timestamp
  895.      *
  896.      * @param    integer unix time stamp
  897.      * @return    string    sql time string
  898.      */
  899.     function time($time{
  900.         return str_replace("'"''$this->_db->DBTimeStamp($time));
  901.     }
  902.  
  903.     /**
  904.      * generate sql time string for current time
  905.      *
  906.      * @param    integer unix time stamp
  907.      * @return    string    sql time string
  908.      */
  909.     function now({
  910. //        require_once(eaADODB_DIR . 'adodb-time.inc.php');    
  911.         return $this->time(time());
  912.     }
  913.  
  914.  
  915. }
  916.  
  917. /**
  918.  * output function forwarding to error_log
  919.  *
  920.  * @param    string    $msg        error message
  921.  * @param    boolean $newline    send new line command
  922.  */
  923. function eaADODBerrorLog($msg$newline true{
  924.     error_log(strip_tags($msg));
  925.     return true;
  926. }
  927.         
  928. ?>

Documentation generated on Sun, 09 Sep 2007 17:08:27 +0200 by phpDocumentor 1.3.1