CLICK HERE TO BUY IT TODAY! OR GET IT FREE VIA TRIALPAY  

PHP Demo Application - Source Code

/Framework/Model/Libraries/Data.php

<?php
/**
* Script Contents: Apeel_Framework_Model_Libraries_Data Class Library
* @package Apeel_Framework_Model_Libraries
*/

/**
* Library to provide Data retrieval/filtering, adding, editing and deletion
* functionality by working with Data Objects.    

* @package      Apeel_Framework_Model_Libraries 
* @version      1.1.0
* @author       John W. King (email: contact@apeelframework.net)
* @copyright    City Business Logic Limited 2001-2011
* @license      Dual MIT / GNU Lesser General Public License Version 3
*/
class Apeel_Framework_Model_Libraries_Data {
    
    
/**
    * Returns an iterable collection of filtered/sorted records from the chosen
    * Data Object.  
    * 
    * $dataObjectName is the main part of the Data Object class name, whilst
    * $objectVersion contains the specific version, i.e. if the data object 
    * is called "mydata_grid" the $dataObjectName would be "mydata" and the
    * $objectVersion would be "grid".  
    * 
    * $getRecordCount is a true/false value that tells the Data Object if it
    * should count the returned records.  The count uses a second query and
    * therefore wastes resources if you don't need to know how many records
    * are in the collection.  
    * 
    * The &$filters and &$sort parameters can be set to NULL if you do not
    * require filtering/sorting respectively.  
    * 
    * $from/$to can be used to limit the records returned, for example in a 
    * paged grid where only 1 page of the matching results should be returned.
    * 
    * The instance of Apeel_Framework_Model_DataObjects_Structures_Recordset
    * which this method returns can be iterated through using a FOREACH loop.
    * 
    * @param string $dataObjectName - main part of Data Object class name
    * @param string $objectVersion - specific version of Data Object to use
    * @param boolean $getRecordCount - Determines if records should be counted.  
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters &$filters
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort &$sort
    * @param integer $from - start range
    * @param integer $to - end range
    * @return Apeel_Framework_Model_DataObjects_Structures_Recordset object
    */
    
public static function getRecordset(
        
$dataObjectName
        
$objectVersion
        
$getRecordCount
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters &$filters NULL
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort &$sort NULL
        
$from NULL
        
$to NULL
    
) {   
        
$dataObject self::getDataObjectByName($dataObjectName$objectVersion$filters$sort$from$to);
        
$dataObject->applyComponents(true$filters$sort$from$to);
        return 
$dataObject->getRecordset($getRecordCount);
    }
    
    
    
/**
    * Returns an array containing a single record (or NULL if none match) from 
    * the chosen Data Object.  
    * 
    * Use this method instead of getRecordset when only 1 record can ever match
    * e.g. when filtering by the primary key.  This saves the overhead of
    * providing iteration functionality.  
    * 
    * $dataObjectName is the main part of the Data Object class name, whilst
    * $objectVersion contains the specific version, i.e. if the data object 
    * is called "mydata_grid" the $dataObjectName would be "mydata" and the
    * $objectVersion would be "grid".  
    * 
    * @param string $dataObjectName
    * @param string $objectVersion
    * @param boolean $getRecordCount - Determines if records should be counted.  
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters &$filters
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort &$sort
    * @param integer $from
    * @param integer $to
    * @return array | null
    */
    
public static function getRecord(
        
$dataObjectName
        
$objectVersion
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters &$filters
    
) {
        
$dataObject self::getDataObject($dataObjectName$objectVersion$filters);
        return 
$dataObject->getRecord();
    }
    
    
    
/**
    * Returns data in format suitable for HTML Select (dropdown list) complete
    * with <option value="x">y</option> tags.  
    * 
    * $dataObjectName is the main part of the Data Object class name, whilst
    * $objectVersion contains the specific version, i.e. if the data object 
    * is called "mydata_grid" the $dataObjectName would be "mydata" and the
    * $objectVersion would be "grid".  
    * 
    * Where the primary key matches the value of $selected, the 
    * selected="selected" attribute will be added.  
    * 
    * @param string $dataObjectName
    * @param string $objectVersion
    * @param mixed $selected
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters $filters
    * @param boolean $includeCommaSeperatedList
    * @return string
    */
    
public static function getDataInDropdownFormat(
        
$dataObjectName
        
$objectVersion
        
$selected
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters &$filters NULL
        
$includeCommaSeperatedList false
    
) {
        
$dataObject self::getDataObjectByName($dataObjectName$objectVersion);
        return 
$dataObject->getDataInDropdownFormat($selected$filters$includeCommaSeperatedList);
    }
    
    
    
/**
    * Returns filtered/sorted data in JSON format.  
    * 
    * $dataObjectHash is used to indentify the Data Object without giving it's
    * actual Class name in public javascript.
    * 
    * $dataObjectHash resolves to the main part of the Dat Object class name, 
    * whilst $objectVersion contains the specific version, i.e. if the data 
    * object is called "mydata_grid" the $dataObjectName would resolve to 
    * "mydata" and the $objectVersion would be "grid".  
    * 
    * The &$filters and &$sort parameters can be set to NULL if you do not
    * require filtering/sorting respectively.  
    * 
    * $from/$to can be used to limit the records returned, for example in a 
    * paged grid where only 1 page of the matching results should be returned.
    * 
    * @param string $dataObjectHash
    * @param string $objectVersion
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters $filters
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort $sort
    * @param integer $from
    * @param integer $to
    * @return string
    */
    
public static function getDataInJsonFormat(
        
$dataObjectHash
        
$objectVersion
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters &$filters NULL
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort &$sort NULL
        
$from NULL
        
$to NULL
    
) {
        
$dataObject self::getDataObjectByHash($dataObjectHash$objectVersion$filters$sort$from$to);
        return 
$dataObject->getDataInJsonFormat();
    }

    
    
/**
    * Returns paged data in JSON format, primarily for grid object.  
    * 
    * $dataObject contains the full class name of the required Data Object
    * (usually [CLASS]_grid)
    * 
    * The &$filters and &$sort parameters can be set to NULL if you do not
    * require filtering/sorting respectively.  
    * 
    * $requestedPage/$resultsPerPage are used to identify the page that should
    * be returned.  
    * 
    * @param Apeel_Framework_Model_DataObjects_Abstract $dataObject
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters $filters
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort $sort
    * @param integer $requestedPage
    * @param integer $resultsPerPage
    * @return string
    */
    
public static function getPagedDataInJsonFormat(
        
Apeel_Framework_Model_DataObjects_Abstract $dataObject
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters &$filters NULL
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort &$sort NULL
        
$requestedPage 0
        
$resultsPerPage 0
    
) {
        
$dataObject->applyComponents(true$filters$sort);
        
$recordCount $dataObject->setRecordCount();
        
$pagesAvailable ceil($recordCount $resultsPerPage);
        if (
$requestedPage $pagesAvailable) {
            
$requestedPage 1;
        }
        
$firstRecord = (((integer)$requestedPage-1) * (integer)$resultsPerPage);        
        
$dataObject->setRange((integer)$firstRecord, (integer)$resultsPerPage);
        
$records $dataObject->getRecordset(false);

        
$gridData['page'] = (string)$requestedPage;
        
$gridData['total'] = (string)$recordCount;
                
        
$columns $records->dataObject->getGridColumns();

        if (
$records) {
            foreach(
$records as $record) {

                
$row['id'] = $dataObject->getPrimaryKeyValue($record);            
                
                
$row['cell'] = array();
                if (
$columns) {
                    foreach (
$columns as $column => $definition) {
                        
$fieldname $definition['fieldname'];
                        if ((
$record[$fieldname] === NULL) || ($record[$fieldname] == '')) {
                            if (
$definition['type'] == 'integer') {
                                
$record[$fieldname] = '0';
                            } elseif (
$definition['type'] == 'decimal') {
                                
$decPlaces = (integer)$definition['decimal_places'];
                                
$record[$fieldname] = number_format(0$decPlaces);
                            } else {
                                
$record[$fieldname] = '-';
                            }
                        }
                        if ((
$definition['type'] == 'decimal') && (is_numeric($record[$fieldname]))) {
                            
$decPlaces = (integer)$definition['decimal_places'];
                            
$record[$fieldname] = number_format($record[$fieldname], $decPlaces);
                        }
                        
$row['cell'][] = htmlentities($record[$fieldname]);
                    }
                }
                
                
$gridData['rows'][] = $row;
            }
        }
        
        return 
json_encode($gridData);
        
    }
    
    
    
/**
    * Returns data in HTML Table format, intended for TCPDF PDF Generator
    * Library as it includes non-standard HTML attributes such as NOBR which is
    * used to specify no breaks.  
    * 
    * @param Apeel_Framework_Model_DataObjects_Abstract $dataObject
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters $filters
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort $sort
    * @return string
    */
    
public static function getDataInHtmlTableFormat(
        
Apeel_Framework_Model_DataObjects_Abstract $dataObject
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters &$filters NULL
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort &$sort NULL
    
) {

        
$dataObject->applyComponents(true$filters$sort);
        
$records $dataObject->getRecordset(false);
        
$html '<tr nobr="true">';
        
        
// Do Header Row
        
$columns $dataObject->getGridColumns();
        
$columnCount 0;
        if (
$columns) {
            foreach (
$columns as $column => $definition) {
                
$html .= '<td bgcolor="#f0e0e0" align="center">' $definition['display'] . '</td>';
                
$columnCount++;
            }
        }
        
$html .= '</tr>';
        
        if (
$records) {
            foreach(
$records as $record) {
                
                
$html .= '<tr nobr="true">';
                if (
$columns) {
                    foreach (
$columns as $column => $definition) {
                        
$align $definition['align'];
                        if ((
$record[$definition['fieldname']] === NULL) || ($record[$definition['fieldname']] == '')) {
                            if (
$definition['type'] == 'integer') {
                                
$record[$definition['fieldname']] = '0';
                            } elseif (
$definition['type'] == 'decimal') {
                                
$decPlaces = (integer)$definition['decimal_places'];
                                
$record[$definition['fieldname']] = number_format(0$decPlaces);
                            } else {
                                
$record[$definition['fieldname']] = '-';
                            }
                        }
                        if (
$definition['type'] == 'image') {
                            
$value '<img src="' APEEL_FULL_URL 'request/image?file=' $record[$column] . '&no_file=no_image.jpg&mode=4&width=200&height=200" class="formImage" />';
                        } else if (
$definition['type'] == 'file') {
                            if (
$record[$column]) {
                                
$value '<a href="' APEEL_FULL_URL 'request/file?file=' $record[$column] . '"><img src="' APEEL_FULL_URL 'request/icon?file=' $record[$column] . '" /><br />' $record[$column] . '</a>';
                            } else {
                                
$value '';   
                            }
                            
                        } elseif (
$definition['type'] == 'decimal') {
                            
$decPlaces = (integer)$definition['decimal_places'];
                            
$value number_format($record[$definition['fieldname']], $decPlaces);
                        } elseif (
$definition['type'] == 'integer') {
                            
$value $record[$definition['fieldname']];
                        } else {
                            
$value htmlentities($record[$definition['fieldname']]);
                        }
                        
$html .= '<td align="' $align '">' $value  '</td>';
                    }
                }
                
$html .= '</tr>';

            }
        }
        return array(
'data' => $html'extra' => array('columns' => $columnCount));
                                               
    }    

    
    
/**
    * Returns data in CSV format, primarily intended for Excel export.  
    * 
    * @param Apeel_Framework_Model_DataObjects_Abstract $dataObject
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters $filters
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort $sort
    * @param string $title
    * @return string
    */
    
public static function getDataInCsvFormat(
        
Apeel_Framework_Model_DataObjects_Abstract $dataObject
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters &$filters NULL
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort &$sort NULL
        
$title ''
    
) {
        
        
$dataObject->applyComponents(true$filters$sort);
        
$records $dataObject->getRecordset(false);        
        
$csv '';
        
        
// Do Header Row
        
$columns $records->dataObject->getGridColumns();
        
$columnCount 0;
        if (
$columns) {
            foreach (
$columns as $column => $definition) {
                if (
$columnCount != 0) {
                    
$csv .= ',';
                }
                
$csv .= '"' str_replace('"''""'$definition['display']) . '"';
                
$columnCount++;
            }
        }
        
$csv .= "\r\n";
        if (
$columnCount == 0) {
            
$csv '';
        }        
        
        if (
$records) {
            foreach(
$records as $record) {

                
$columnCount 0;
                foreach (
$columns as $column => $definition) {
                    if (
$columnCount != 0) {
                        
$csv .= ',';
                    }
                    if ((
$record[$definition['fieldname']] === NULL) || ($record[$definition['fieldname']] == '')) {
                        if (
$definition['type'] == 'integer') {
                            
$record[$definition['fieldname']] = '0';
                        } elseif (
$definition['type'] == 'decimal') {
                            
$decPlaces = (integer)$definition['decimal_places'];
                            
$record[$definition['fieldname']] = number_format(0$decPlaces);
                        } else {
                            
$record[$definition['fieldname']] = '-';
                        }
                    }                    
                    if (
$definition['type'] == 'decimal') {
                        
$decPlaces = (integer)$definition['decimal_places'];
                        
$csv .= '"' number_format($record[$definition['fieldname']], $decPlaces) . '"';
                    } elseif (
$definition['type'] == 'integer') {
                        
$csv .= '"' $record[$definition['fieldname']] . '"';
                    } else {
                        
$csv .= '"' str_replace('"''""'$record[$definition['fieldname']]) . '"';
                    }
                    
$columnCount++;
                }
                
$csv .= "\r\n";
            }
        }
        
        
$blankLine str_pad(''$columnCount 1',') . "\r\n";
        
$csv $title $blankLine $blankLine $csv;
        return array(
'data' => $csv'extra' => NULL);
       
    }
    
    
    
/**
    * Returns data in Array format for PHPExcel Plugin  
    * 
    * @param Apeel_Framework_Model_DataObjects_Abstract $dataObject
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters $filters
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort $sort
    * @return array
    */
    
public static function getDataInFormattedArrayFormat(
        
Apeel_Framework_Model_DataObjects_Abstract $dataObject
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters &$filters NULL
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort &$sort NULL
    
) {
        
$dataObject->applyComponents(true$filters$sort);
        
$records $dataObject->getRecordset(false);

        
// Get Formatting Information
        
$columns $records->dataObject->getGridColumns();
        
$columnCount 0;
        
$columnFormatting = array();
        if (
$columns) {
            foreach (
$columns as $column => $definition) {
                
                
// Set Alignment
                
if ($definition['align'] == 'Left') {
                    
$columnFormatting[$columnCount]['alignment'] = 'L';
                } elseif (
$definition['align'] == 'Center') {
                    
$columnFormatting[$columnCount]['alignment'] = 'C'
                } elseif (
$definition['align'] == 'Right') {
                    
$columnFormatting[$columnCount]['alignment'] = 'R'
                } else {
                    
$columnFormatting[$columnCount]['alignment'] = '';
                }
                
                
// Set Formatting
                
if ($definition['type'] == 'integer') {
                    
$columnFormatting[$columnCount]['format'] = '#,###,###,##0';
                } elseif (
$definition['type'] == 'decimal') {
                    
$decPlaces = (integer)$definition['decimal_places'];
                    
$columnFormatting[$columnCount]['format'] =  str_pad('#,###,###,##0.', ($decPlaces 14), '0'STR_PAD_RIGHT);
                } else {
                    
$columnFormatting[$columnCount]['format'] = '';
                }
                
                
// Set Totalling
                
if (($definition['type'] == 'integer') || ($definition['type'] == 'decimal')) {
                    
$columnFormatting[$columnCount]['total'] = '1';
                } else {
                    
$columnFormatting[$columnCount]['total'] = '0';
                }
                
$columnCount++;
            }
        }

        
// Get Data
        
$data = array();
        if (
$records) {
            foreach(
$records as $record) {

                
$columnCount 0;
                
$row = array();
                foreach (
$columns as $column => $definition) {
                    
$row[$definition['display']] =$record[$definition['fieldname']];
                    
$columnCount++;
                }
                
$data[] = $row;
            }
        }
        
        return array(
'information' => array('formatting' => $columnFormatting'data' => $data), 'extra' => NULL);
       
    }    
     
    
    
/**
    * Returns JQuery UI Autocomplete matches in JSON format.  
    * 
    * $dataObjectHash is used to indentify the Data Object without giving it's
    * actual Class name in public javascript.  
    * 
    * $displayField is an integer index of which column in the lookup 
    * Data Object should be displayed on the list.  
    * 
    * $term contains the text entered by the user.
    * 
    * $matchingMethod = BEGINS or CONTAINS  
    * 
    * @param string $dataObjectHash
    * @param integer $displayField
    * @param string $term
    * @param string $matchingMethod 
    * @return string
    */
    
public static function outputAutocompleteMatches($dataObjectHash$term$matchingMethod) {        
        
$dataObject self::getDataObjectByHash($dataObjectHash'dropdown');        
        
$editorDefinition $dataObject->getEditors();
        
$filters = new Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters($editorDefinition['fieldname'], $matchingMethod$term$editorDefinition['computation']);
        echo 
$dataObject->getDataInJsonFormat($filters);
    }      


    
/**
    * Returns an instance of a Data Object named:
    * [$dataObjectName]_[$objecVersion]
    * 
    * @param string $dataObjectName
    * @param string $objectVersion
    * @return Apeel_Framework_Model_DataObjects_Abstract
    */
    
public static function getDataObjectByName(
        
$dataObjectName
        
$objectVersion ''
    
) {
        
// Generate name of Class for requested table.
        
if ($objectVersion != '') {
            
$objectVersion '_' $objectVersion;
        }
        
$dataObjectClass 'Apeel_Application_Model_DataObjects_' $dataObjectName $objectVersion;
        
// Check that class exists.  
        
if (class_exists($dataObjectClassfalse)) {
            
// Create new object, passing it parameters
            
$dataObjectItem = new $dataObjectClass();
            
// Return newly created object to client
            
return $dataObjectItem;
        } else {
            throw new 
Exception('[' $dataObjectClass .  '] class does not exist!');
        }
    }
    
    
    
/**
    * Returns a Data Object from it's hash name.  
    * 
    * $dataObjectHash is used to indentify the Data Object without giving it's
    * actual Class name in public javascript.  Ut us looked up in the 
    * Apeel_Application_Model_DataObjects_ObjectDictionary class.  
    * 
    * $objectVersion is the specific version of the Data Object required.  
    * 
    * @param string $dataObjectHash
    * @param string $objectVersion
    * @return Apeel_Framework_Model_DataObjects_Abstract
    */
    
public static function getDataObjectByHash($dataObjectHash$objectVersion '') {
        
$dataObjectName Apeel_Application_Model_DataObjects_ObjectDictionary::getDataObjectNameFromHash($dataObjectHash);
        return 
self::getDataObjectByName($dataObjectName$objectVersion);
        
    }
    
    
    
/**
    * Creates new Record in main table represented by the chosen Data Object,
    * using the array of values where the index is the fieldname, which is
    * set to the value of that array element.  
    * 
    * @param string $dataObject
    * @param array $values
    * @return Apeel_Framework_Model_DataObjects_Abstract
    */
    
public static function addRecord($dataObject, &$values) {
        
// Create relevant Data Object
        
$dataObject self::getDataObjectByName($dataObject);
        
// Generate SQL INSERT Statement
        
$dataObject->generateInsert($values);
        
// Prepare SQL Statement
        
$dataObject->prepareInsert();
        
// Bind Parameters and Execute Query
        
$dataObject->queryExecute(true);
        
// Return object to client.  
        
return $dataObject;
    }  

    
    
/**
    * Edits Record in main table represented by the chosen Data Object, using 
    * the array of values where the index is the fieldname, which is set to 
    * the value of that array element.  
    * 
    * The filter will typically use the Primary Key to restrict the updates to
    * a single record.  
    * 
    * @param string $dataObjectName
    * @param array $values
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters $filters
    * @return Apeel_Framework_Model_DataObjects_Abstract
    */
    
public static function editRecords(
        
$dataObjectName
        &
$values
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters &$filters NULL
    
) {
        
// Create relevant Data Object 
        
$dataObject self::getDataObjectByName($dataObjectName);
        
// Generate SQL UPDATE Statement
        
$dataObject->generateUpdate($values$filters);
        
// Prepare SQL Statement
        
$dataObject->prepareUpdate();
        
// Bind Parameters and Execute Query
        
$dataObject->queryExecute();
        
// Return object to client.  
        
return $dataObject;        
    }
    
    
    
/**
    * Deletes Record in main table represented by the chosen Data Object, using 
    * the passed &%filters to select the records to delete. 
    * 
    * @param string $dataObjectName
    * @param Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters $filters
    * @return Apeel_Framework_Model_DataObjects_Abstract
    */
    
public static function deleteRecordsByObjectName(
        
$dataObjectName
        
Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters &$filters
    
) {
        
// Generate Table Object
        
$dataObject self::getDataObjectByName($dataObjectName);
        
// Generate SQL DELETE Statement
        
$dataObject->generateDelete($filters);
        
// Prepare SQL Statement
        
$dataObject->prepareDelete();
        
// Bind Parameters and Execute Query
        
$dataObject->queryExecute();
        
// Return object to client.  
        
return $dataObject;        
    }
    
    
    
/**
    * Delete's record matched by $primaryKeyValues which may be a string or an
    * array depending on whether the data object has a single value Primary Key
    * or a multi value one.  
    * 
    * $dataObjectHash is used to prevent the name of the Data Object class from
    * being passed around in public Javascript.  
    * 
    * @param string $dataObjectHash
    * @param string | array $primaryKeyValues
    * @return Apeel_Framework_Model_DataObjects_Abstract
    */
    
public static function deleteRecordsByPk($dataObjectHash$primaryKeyValues) {
        
        
$dataObject self::getDataObjectByHash($dataObjectHash);
        
$remote $dataObject->getMultiLinkedObjects();
        if (
$remote) {
            foreach (
$remote as $item) {
                
$filters = new Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters($item['pkLink'], 'IN'$primaryKeyValues);
                
self::deleteRecordsByObjectName($item['object'], $filters);
            }
        }
        
$dataObjectName Apeel_Application_Model_DataObjects_ObjectDictionary::getDataObjectNameFromHash($dataObjectHash);
        
$filters = new Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters('[PRIMARYKEY]''IN'$primaryKeyValues);
        return 
self::deleteRecordsByObjectName($dataObjectName$filters);
    }
    
    
    
/**
    * Returns a comma seperated list of values contained in $firstArray that
    * are not contained in $secondArray.  
    * 
    * This method is primarily used on duallist many-to-many fields for working
    * out which records in the list have been added/removed from the selection
    * since the main record was last saved.  
    * 
    * By calling the method twice and reversing the parameters, it is possible 
    * to get the full list of added and removed item IDs.  
    * 
    * @param array $firstArray
    * @param array $secondArray
    * @return string
    */
    
public static function getArrayDifferences($firstArray$secondArray) {
        
$differences = array();
        if (
$firstArray) {
            foreach (
$firstArray as $item) {
                if (!
in_array($item$secondArray)) {
                    
$differences[] = $item;
                }
            }
        }
        return 
implode(','$differences);
    }
    
    
    
/**
    * Expands a given shorthand value, to a corresponding PDO Parameter.  
    * s: PARAM_STR
    * i: PARAM_INT
    * b: PARAM_BOOL
    * l: PARAM_LOB
    * 
    * 
    * @param string $type
    * @return PDO PARAM
    */
    
public static function getPdoParameterType($type) {
        
$paramTypes = array('s' => PDO::PARAM_STR'i' => PDO::PARAM_INT'b' => PDO::PARAM_BOOL'l' => PDO::PARAM_LOB'DEFAULT' => PDO::PARAM_STR);
        if (isset(
$paramTypes[$type])) {
            return 
$paramTypes[$type];
        } else {
            throw new 
Exception('ERROR: ' $type ' is not a valid PDO Parameter type');
        }
    }
    
    
/**
    * Returns a mysql date format string based on the users browser settings.  
    * 
    * First we read the client browsers HTTP_ACCEPT_LANGUAGE setting.  
    * Typically the users main language/country is at the start of the string in ll-cc format.  
    * We try to retrieve the cc part (the 2 digit ISO country code) and compare it first to a 
    * list of countries that use US Date Format (mm/dd/yyyy).  If it does not match, it is then
    * compared against a list of countries that use Asian Date Format (yyyy/mm/dd).  If it still
    * not found then it is assumed to be European Date Format (dd/mm/yyyy).  
    * 
    * 
    * @return string
    */
     
public static function getClientDateFormat() {      
        
$dateFormat 0// Default to US Format in case unable to determine main country.  
        
$language $_SERVER['HTTP_ACCEPT_LANGUAGE'];
        
$dashPos strpos($language,"-");
        if (
$dashPos != false) {
            if ((
$dashPos+2) <= strlen($language)) {
                
$countryCode strtoupper(substr($language,$dashPos+1,2));
                
$usFormat = array("BZ""CA""FM""PW""PH""PR""US");
                
                if (
in_array($countryCode$usFormat)) {
                    
$dateFormat 0// MM/DD/YYYY
                
} else {
                    
$asianFormat = array("AL""CN""DK""HU""JP""KR""LV""LT""MO""MN""NP""NO""RS""SG""SI""ZA""SE""TW");
                    if (
in_array($countryCode$asianFormat)) {
                        
$dateFormat 2// YYYY/MM/DD
                    
}
                    else {
                        
$dateFormat 1// DD/MM/YYYY
                    
}                 
                }
            }
        }
        if (
$dateFormat == 0) {
            
$date['mysql'] = '%m/%d/%Y';
            
$date['form'] = 'F j Y';
            
$date['js'] = 'MM d yy';
        } elseif (
$dateFormat == 1) {
            
$date['mysql'] = '%d/%m/%Y';
            
$date['form'] = 'j F Y';
            
$date['js'] = 'd MM yy';
        } else {
            
$date['mysql'] = '%Y/%m/%d';
            
$date['form'] = 'Y F j';
            
$date['js'] = 'yy MM d';
        }
        return 
$date;        
    }
}

// PHP < 5.2 Does not support json_encode so 
// we need to emulate it.  
if (!function_exists('json_encode'))
{
  function 
json_encode($a=false)
  {
    if (
is_null($a)) return 'null';
    if (
$a === false) return 'false';
    if (
$a === true) return 'true';
    if (
is_scalar($a))
    {
      if (
is_float($a))
      {
        
// Always use "." for floats.
        
return floatval(str_replace(",""."strval($a)));
      }

      if (
is_string($a))
      {
        static 
$jsonReplaces = array(array("\\""/""\n""\t""\r""\b""\f"'"'), array('\\\\''\\/''\\n''\\t''\\r''\\b''\\f''\"'));
        return 
'"' str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
      }
      else
        return 
$a;
    }
    
$isList true;
    for (
$i 0reset($a); $i count($a); $i++, next($a))
    {
      if (
key($a) !== $i)
      {
        
$isList false;
        break;
      }
    }
    
$result = array();
    if (
$isList)
    {
      foreach (
$a as $v$result[] = json_encode($v);
      return 
'[' join(','$result) . ']';
    }
    else
    {
      foreach (
$a as $k => $v$result[] = json_encode($k).':'.json_encode($v);
      return 
'{' join(','$result) . '}';
    }
  }
}

?>

PHP Demo Source Code Index