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

PHP Demo Application - Source Code

/Framework/Model/Libraries/Grid.php

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

/**
* Library to provide Data Grid support and functionality.  

* @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_Grid {
    
    
    
/**
    * Outputs formatted data for Data Export based on Data Grid.  
    * 
    * Reads parameter values from the standard request object and uses them to
    * select the appropriate Data Object, generate Filters and Sort Items, 
    * and finally gets formatted data in selected format and outputs it.  
    * 
    * @param string $format
    * @param string $title
    * @param integer $page
    * @param integer $recordsPerPage
    * @return mixed
    */
    
public static function getFormattedData(
        
$format 'json'
        
$title ''
        
$page = -1
        
$recordsPerPage = -1
    
) {
        
// Get Data Object
        
$dataObjectHash Apeel_Framework_Controller_Libraries_Input::request('dataObject');
        
$dataObject Apeel_Framework_Model_Libraries_Data::getDataObjectByHash($dataObjectHash'grid');
        
        
// Generate Filters
        
$filters = new Apeel_Framework_Model_DataObjects_Parameters_Collections_Filters();
        if (
$_REQUEST) {
            foreach(
$_REQUEST as $key => $value) {
                if ((
strpos($key'_index')) && (strpos($key'fg_R_') !== false)) {
                    
$key str_replace('_index'''$key);
                    
$editorDefinition $dataObject->getEditors($value);
                    
$fieldname $editorDefinition['fieldname'];
                    if (isset(
$editorDefinition['calculation'])) {
                        
$calculation $editorDefinition['calculation'];
                    } else {
                        
$calculation '';
                    }                    
                    unset(
$editorDefinition);
                    
$_operator Apeel_Framework_Controller_Libraries_Input::request($key '__operator');
                    
$value Apeel_Framework_Controller_Libraries_Input::request($key '_value');
                    
$filters->addFilter($fieldname$_operator$value$calculation);
                }
            }
        }

        
// Sort
        
$sort NULL;
        
$sortRequests explode(','Apeel_Framework_Controller_Libraries_Input::request('sort'NULL));
        
$first true;
        if (
$sortRequests) {
            foreach (
$sortRequests AS $sortRequest) {
                
$sortRequest explode(':'$sortRequest);
                if (
count($sortRequest) == 2) {
                    
$definition $dataObject->getGridColumns($sortRequest[0]);
                    if (isset(
$definition['sortfield'])) {
                        
$fieldname $definition['sortfield'];
                    } else {
                        
$fieldname $definition['fieldname'];
                    }
                    if (isset(
$sortRequest[1])) {
                        
$sortRequestValue $sortRequest[1];
                    } else {
                        
$sortRequestValue '';
                    }
                    if (
$first) {
                        
$sort = NEW Apeel_Framework_Model_DataObjects_Parameters_Collections_Sort($fieldname$sortRequestValue);
                        
$first false;
                    } else {
                        
$sort->addColumn($fieldname$sortRequestValue);
                    }
                }
            }
        }
                
        
// Get Data
        
if ($format == 'json') {
            
$data Apeel_Framework_Model_Libraries_Data::getPagedDataInJsonFormat(
                
$dataObject,
                
$filters,
                
$sort,
                
$page,
                
$recordsPerPage
            
);
            return 
$data;
        } elseif ((
$format == 'pdf') || ($format == 'word')) {
            
$html Apeel_Framework_Model_Libraries_Data::getDataInHtmlTableFormat(
                
$dataObject,
                
$filters,
                
$sort
            
);
            return 
$html;
        }
        elseif (
$format == 'excel') {
            if (
APEEL_HAS_ADVANCED_EXCEL_SUPPORT) {
                
$data Apeel_Framework_Model_Libraries_Data::getDataInFormattedArrayFormat(
                    
$dataObject,
                    
$filters,
                    
$sort,
                    
$title
                
);
                return 
$data;
            } else {
                
$csv Apeel_Framework_Model_Libraries_Data::getDataInCsvFormat(
                    
$dataObject,
                    
$filters,
                    
$sort,
                    
$title
                
);
                return 
$csv;            
            }            
        } else {
            throw new 
Exception('Invalid export format: ' $format);
        }
    }
    
    
    
/**
    * Outputs Data Grid object.  
    * 
    * Reads the template from the location specified by APEEL_GRID_TEMPLATE,
    * replaces relevant tokens and outputs to the browser.  
    * 
    * $dataObjectHash is used to get a Data Object using a unique hash value
    * that can be passed around in public scripts without giving the actual
    * name of the class. 
    * 
    * $buttonType identifies the type of buttons to output:
    * 1:  Add/Edit/Delete
    * 2:  Select
    * 
    * Typically, 1 is passed for a normal data grid which allows editing,
    * 2 is passed when the grid is used as a pop-up window to select 
    * a value.  
    * 
    * $index is a unique id to avoid possible conflicts should more than one 
    * data grid be loaded at a time.  
    * 
    * $displayColumn is a numeric index to the column to take the display 
    * value from when in Select mode ($buttonType == 2).  
    * 
    * $returnId and $returnDisplay are the form fields to pass the 
    * selected values back to when in select mode (otherwise leave
    * blank).  
    * 
    * @param string $dataObjectHash
    * @param integer $buttonType
    * @param integer $index
    * @param integer $displayColumn
    * @param string $returnId
    * @param string $returnDisplay
    * @return void
    */
    
public static function displayGrid($dataObjectHash$buttonType$index$displayColumn ''$returnId ''$returnDisplay '') {
        
        
// Load template.  
        
$template Apeel_Framework_Model_Libraries_File::loadFile(APEEL_GRID_TEMPLATE);
        
        
// Process button mode.  
        
if ($buttonType == '') {
            
$buttons '';
        } else {
            if (
$buttonType == '1') {
                
$buttons Apeel_Framework_Model_Libraries_File::loadFile(APEEL_GRID_EDIT_BUTTON_PANEL_TEMPLATE);    
                
$buttons str_replace('[##LABELEDIT##]'APEEL_BUTTON_LABEL_EDIT$buttons);
                
$buttons str_replace('[##LABELDELETE##]'APEEL_BUTTON_LABEL_DELETE$buttons);
                
$buttons str_replace('[##LABELADD##]'APEEL_BUTTON_LABEL_ADD_RECORD$buttons);
                
$buttons str_replace('[##LABELDESELECT##]'APEEL_BUTTON_LABEL_DESELECT$buttons);                
            } elseif (
$buttonType == '2') {
                
$buttons Apeel_Framework_Model_Libraries_File::loadFile(APEEL_GRID_SELECT_BUTTON_COLUMN_TEMPLATE);
                
$buttons str_replace('[##LABELSELECT##]'APEEL_BUTTON_LABEL_SELECT$buttons);
                
$buttons str_replace('[##LABELADD##]'APEEL_BUTTON_LABEL_ADD$buttons);                
            } else {
                throw new 
Exception('Invalid Button Code: ' $buttonType);
            }            
            
$buttons str_replace('[##INDEX##]'$index$buttons);
            
$buttons str_replace('[##BUTTONCOMMAND##]''fg_buttonCommand'$buttons);
        }
        
       
        
        
// Get Column details.  
        
$columns '';        
        
$dataObject Apeel_Framework_Model_Libraries_Data::getDataObjectByHash($dataObjectHash'grid');

        
$columnDefinitions $dataObject->getGridColumns();
        
$firstColumn true;
        if (
$columnDefinitions) {
            foreach(
$columnDefinitions as $key => $definition) {
                if (!
$firstColumn) {
                    
$columns .= ', ';
                } else {
                    
$firstColumn false;
                }
                
                
$line '{name: "' $key '"';
                if (
$definition) {
                    foreach (
$definition as $definitionKey => $item) {
                        
$line .= ', ' $definitionKey ': "' $item '"';
                    }
                }
                
$line .= '}';
                
$columns .= $line;                
            }
        }
        
        
// Get Filter Details.  
        
$filters '';
        
$filterDefinitions $dataObject->getEditors();
        if (
$filterDefinitions) {
            foreach(
$filterDefinitions as $key => $definition) {
                unset(
$definition['fieldname']);
                
$filters .= "<option value='" json_encode($definition) . "'>" $definition['display'] . '</option> ';
            }
        }
        
        
// Get Sort Details.  
        
$sort '';
        
$sortFieldArray $dataObject->getDefaultSortColumns();
        if (
$sortFieldArray) {
            foreach(
$sortFieldArray as $sortField) {
                if (
$sort != '') {
                    
$sort .= ',';
                }
                
$sort .=  $sortField['column'] . ' : "' $sortField['direction'] . '"';
            }
        }
        
$sort '{' $sort '}';

        
$heading $dataObject->getTitle();
        unset(
$dataObject);
        
        
// Check Plugin Support
        
if (APEEL_HAS_PDF_SUPPORT) {
            
$pdfSupport 'true';
        } else {
            
$pdfSupport 'false';
        }
        
// Replace Tokens in template.  
        
$template str_replace('[##INDEX##]'$index$template);
        
$template str_replace('[##TYPE##]'$buttonType$template);
        
$template str_replace('[##DATA_OBJECT##]'$dataObjectHash$template);
        
$template str_replace('[##BASE_URL##]'APEEL_BASE_URL_PATH_WITH_SCRIPT$template);
        
$template str_replace('[##DISPLAY_COLUMN##]'$displayColumn$template);
        
$template str_replace('[##RETURN_ID##]'$returnId$template);
        
$template str_replace('[##RETURN_DISPLAY##]'$returnDisplay$template);                
        
$template str_replace('[##COLUMNS##]'$columns$template);
        
$template str_replace('[##DEFAULT_IMAGE##]''no_image.jpg'$template);
        
$template str_replace('[##BUTTONS##]'$buttons$template);
        
$template str_replace('[##FILTEROPTIONS##]'$filters$template);        
        
$template str_replace('[##SORT##]'$sort$template);
        
$template str_replace('[##HEADING##]'$heading$template);
        
$template str_replace('[##RECORDS_PER_PAGE##]'RECORDS_PER_PAGE$template);
        
$template str_replace('[##PDF_SUPPORT##]'$pdfSupport$template);
        
$template str_replace('[##ONCLICK##]''fg_processClick'$template);
        
$template str_replace('[##ONDBLCLICK##]''fg_processDblClick'$template);
        
$template str_replace('[##VIEWMATCHINGRECORDS##]'APEEL_BUTTON_VIEW_MATCHING_RECORDS$template);
        
$template str_replace('[##SELECTCOLUMN##]'APEEL_LABEL_SELECT_COLUMN$template);
        
$template str_replace('[##PLEASESELECT##]'APEEL_LANGUAGE_PLEASE_SELECT$template);
        
        
$dateFormat Apeel_Framework_Model_Libraries_Data::getClientDateFormat();
        
$template str_replace('[##DATE_FORMAT##]'$dateFormat['js'], $template);

        
// Add Divs for further pop-up grids if this is the first grid on the page.  
        
if ($index == '1') {
            echo 
'<div id="fg_dialog_grid_2"></div><div id="fg_dialog_grid_3"></div><div id="fg_dialog_grid_4"></div>';
        }

        
// Output Grid
        
echo $template;

    }
}

?>

PHP Demo Source Code Index