<?php 
 
/** 
 * MyProjectNameHere <http://www.example.com> 
 * Model Class 
 * 
 * It is recommended to extend Model classes from WWW_Factory in order to  
 * provide various useful functions and API access for the Model. 
 * 
 * @package    Factory 
 * @author     DeveloperNameHere <[email protected]> 
 * @copyright  Copyright (c) 2012, ProjectOwnerNameHere 
 * @license    Unrestricted 
 * @tutorial   /doc/pages/guide_mvc.htm 
 * @since      1.0.0 
 * @version    1.0.0 
 */ 
 
class WWW_model_example extends WWW_Factory { 
 
    /** 
     * It is recommended to define all data variables here. Usually the  
     * data variables have the same names as the column names of database  
     * rows from a table. 
     */ 
    public $id=0; 
    public $name=''; 
 
    /** 
     * Alternative to __construct() 
     * 
     * WWW_Factory does not allow to overwrite __construct() method, so  
     * this __initialize() is used instead and loaded automatically when  
     * object is created. 
     * 
     * @return boolean 
     */ 
    public function __initialize(){ 
     
        // Do something here 
        return true; 
         
    } 
 
    /** 
     * This is intended to load data from database 
     * 
     * @param integer $id identifier of the object loaded 
     * @return boolean 
     */ 
    public function load($id){ 
     
        // Attempting to find the table row 
        // $data=$this->dbSingle('SELECT * FROM table WHERE id=?',array($id)); 
        // if($data){  
            // Assigning data to object parameters 
            // $this->id=$data['id']; 
            // $this->name=$data['name']; 
             
            // This below is just an example without database, used in some tutorials 
            $this->id=$id; 
            $this->name='Lorem Ipsum #'.rand(1,1000); // This is used for simply testing cache 
            return true; 
             
        // } else { 
            // return false;  
        // } 
         
    } 
 
    /** 
     * This returns all of the data of currently open object 
     * 
     * @return array 
     */ 
    public function get(){ 
     
        // Current Data is returned as an array 
        return array( 
            'id'=>$this->id, 
            'name'=>$this->name 
        ); 
 
    } 
     
    /** 
     * This returns multiple objects from database as array entries, similar to regular  
     * get() method call. It also supports filtering. 
     * 
     * @param $config array of configuration data for the call, filters and so on 
     * @return array 
     */ 
    public function all($config){ 
     
        // If specific fields are requested 
        if(isset($config['fields'])){ 
            $this->filter($config['fields'],'alphanumeric','_*'); 
        } else { 
            $fields='*'; 
        } 
     
        // Total row calculation is not necessary, but can be sometimes useful 
        $query='SELECT SQL_CALC_FOUND_ROWS '.$fields.' FROM table '; 
         
        // Filtering data 
        $filters=array(); 
        $filterData=array(); 
         
        // Filtering with a field, if set 
        if(isset($config['filter-name']) && trim($config['filter-name'])!=''){ $filters[]='table.name LIKE ?'; $filterData[]='%'.str_replace(array('%','_'),array('\\%','\\_'),$config['filter-name']).'%'; } 
         
        // Building filtered query, if filters are set 
        if(!empty($filters)){ 
            foreach($filters as $key=>$filter){ 
                if($key==0){ 
                    $query.=' WHERE '.$filter; 
                } else { 
                    $query.=' AND '.$filter; 
                } 
            } 
        } 
 
        // If ordering settings are used 
        if(isset($config['order-by'])){ 
            if(!isset($config['order'])){ $config['order']='DESC'; } 
            $query.=' ORDER BY '.$this->filter($config['order-by'],'alphanumeric','_').' '.$this->filter($config['order'],'alphanumeric','_'); 
        } 
         
        // If only certain amount of rows are requested 
        if(isset($config['limit'])){ 
            // Pre-setting limit from value if it was not sent 
            if(!isset($config['limit-from'])){ $config['limit-from']='0'; } 
            $query.=' LIMIT '.$this->filter($config['limit-from'],'integer').','.$this->filter($config['limit'],'integer'); 
        } 
         
        // Making the request 
        $rows=$this->dbMultiple($query,$filterData); 
        if($rows){ 
            // Finding total rows 
            $totalRows=$this->dbSingle('SELECT FOUND_ROWS() as rows;'); 
            // Returning entries and the total row count 
            return array('entries'=>$rows,'total'=>$totalRows['rows']); 
        } else { 
            // Returning empty data 
            return array('entries'=>array(),'total'=>0); 
        } 
         
    } 
 
    /** 
     * This function is intended to save data to database 
     * 
     * @return integer|boolean 
     */ 
    public function save(){ 
     
        // These variables hold the data for prepared statement 
        $query=array(); 
        $data=array(); 
         
        // Preparing query command and data value for prepared statement 
        $query[]='name=?'; 
        $data[]=$this->name; 
         
        // Update if ID exists, otherwise insert 
        if($this->id){ 
            $data[]=$this->id; 
            $save=$this->dbCommand('UPDATE table SET '.implode(',',$query).' WHERE id=?;',$data); 
        } else { 
            $save=$this->dbCommand('INSERT INTO table SET '.implode(',',$query).';',$data); 
            $this->id=$this->dbLastId(); 
        } 
         
        // Returning the ID if the adding was a success 
        if($save){ 
            // Returning the ID 
            return $this->id; 
        } else { 
            // Database command failed 
            return false; 
        } 
         
    } 
     
    /** 
     * This function is intended to save data to database 
     * 
     * @return boolean 
     */ 
    public function delete($id){ 
     
        // Attempting to delete the row 
        if($this->dbCommand('DELETE FROM table WHERE id=?',array($id))){ 
            // Returning the ID of deleted row 
            return $id; 
        } else { 
            // Database command failed 
            return false; 
        } 
         
    } 
 
} 
     
?>
 
 |