'Common', 'header' => true), array('name' => 'Site Map', 'url' => array('controller' => 'maps', 'action' => 'view', 1)), array('name' => 'Units', 'url' => array('controller' => 'units', 'action' => 'index')), array('name' => 'Leases', 'url' => array('controller' => 'leases', 'action' => 'index')), array('name' => 'Customers', 'url' => array('controller' => 'customers', 'action' => 'index')), array('name' => 'Accounts', 'url' => array('controller' => 'accounts', 'action' => 'index')), array('name' => 'Debug', 'header' => true), array('name' => 'Contacts', 'url' => array('controller' => 'contacts', 'action' => 'index')), array('name' => 'Ledgers', 'url' => array('controller' => 'ledgers', 'action' => 'index')), array('name' => 'New Ledgers', 'url' => array('controller' => 'accounts', 'action' => 'newledger')), array('name' => 'RESET DATA', 'url' => array('controller' => 'accounts', 'action' => 'reset_data')), ); } function beforeRender() { $this->set('sidemenu', $this->sideMenuLinks()); } function reset_data() { $this->layout = null; $this->autoLayout = false; $this->autoRender = false; Configure::write('debug', '0'); $script = $_SERVER['DOCUMENT_ROOT'] . '/pmgr/build.cmd'; echo "
" . date('r') . "\n"; //echo "
Script: $script" . "\n"; $db = & $this->Account->getDataSource(); $script .= ' "' . $db->config['database'] . '"'; $script .= ' "' . $db->config['login'] . '"'; $script .= ' "' . $db->config['password'] . '"'; $handle = popen($script . ' 2>&1', 'r'); //echo "
Handle: $handle; " . gettype($handle) . "\n"; echo "
\n";
while (($read = fread($handle, 2096))) {
echo $read;
}
echo "\n";
pclose($handle);
}
/**************************************************************************
**************************************************************************
**************************************************************************
* helper: gridView
* - called by derived controllers to create an index listing
*/
function gridView($title, $action = null, $element = null) {
$this->set('title', $title);
// The resulting page will contain a grid, which will
// use ajax to obtain the actual data for this action
$this->set('action', $action ? $action : $this->params['action']);
$this->render('/elements/' . ($element ? $element : $this->params['controller']));
}
/**************************************************************************
**************************************************************************
**************************************************************************
**************************************************************************
**************************************************************************
* action: gridData
* - Fetches the actual data requested by grid as XML
*/
function gridData() {
// Grab a copy of the parameters that control this request
$params = array();
if (isset($this->params['url']) && is_array($this->params['url']))
$params = $this->params['url'];
// Do any preliminary setup necessary
$this->gridDataSetup($params);
// Get the top level model for this grid
$model = $this->gridDataModel($params);
// Get the number of records prior to pagination
$count = $this->gridDataCount($params, $model);
// Determine pagination configuration (and save to $params)
$pagination = $this->gridDataPagination($params, $model, $count);
// Retreive the appropriate subset of data
$records = $this->gridDataRecords($params, $model, $pagination);
// Post process the records
$this->gridDataPostProcess($params, $model, $records);
// Output the resulting record set
$this->gridDataOutput($params, $model, $records, $pagination);
// Call out to finalize everything
$this->gridDataFinalize($params);
}
/**************************************************************************
**************************************************************************
**************************************************************************
**************************************************************************
**************************************************************************
* virtual: gridData* functions
* - These set up the context for the grid data, and will
* need to be overridden in the derived class for anything
* other than the most basic of grids.
*/
/**************************************************************************
**************************************************************************
**************************************************************************
* gridData SETUP / CLEANUP
*/
function gridDataModel(&$params) {
return $this->{$this->modelClass};
}
function gridDataSetup(&$params) {
// Assume we're debugging.
// The actual grid request will set this to false
$debug = true;
if (isset($this->passedArgs['debug']))
$debug = $this->passedArgs['debug'];
$params['debug'] = $debug;
if ($debug) {
ob_start();
}
else {
$this->layout = null;
$this->autoLayout = false;
$this->autoRender = false;
Configure::write('debug', '0');
}
// Establish some defaults (except for serialized items)
$params = array_merge(array('page' => 1,
'rows' => 20),
$params);
// Unserialize our complex structure of fields
// This SHOULD always be set, except when debugging
if (isset($params['post']))
$params['post'] = unserialize($params['post']);
// This SHOULD always be set, except when debugging
if (!isset($params['post']['fields']))
$params['post']['fields'] = array($this->{$this->modelClass}->alias
.'.'.
$this->{$this->modelClass}->primaryKey);
// Make sure the action parameter at least exists, and
// promote it to the top level (since it drives the operation).
if (isset($params['post']['action']))
$params['action'] = $params['post']['action'];
else
$params['action'] = null;
}
function gridDataFinalize(&$params) {
if ($params['debug']) {
$xml = ob_get_contents();
ob_end_clean();
$xml = preg_replace("/&/", "&", $xml);
$xml = preg_replace("/", "<", $xml);
$xml = preg_replace("/>/", ">", $xml);
echo ("\n\n$xml\n\n"); } } /************************************************************************** ************************************************************************** ************************************************************************** * gridData COUNTING */ function gridDataCount(&$params, &$model) { // Establish the tables and conditions for counting $query = array_intersect_key($this->gridDataCountTableSet($params, $model), array('link'=>1, 'contain'=>1)); // Conditions for the count $query['conditions'] = $this->gridDataCountConditionSet($params, $model); // Grouping (which would not be typical) $query['group'] = $this->gridDataCountGroup($params, $model); // DEBUG PURPOSES ONLY! $params['count_query'] = $query; // Get the number of records prior to pagination return $this->gridDataCountExecute($params, $model, $query); } function gridDataCountExecute(&$params, &$model, $query) { return $model->find('count', $query); } function gridDataCountTables(&$params, &$model) { // Same tables for counting as for retreiving return $this->gridDataTables($params, $model); } function gridDataCountTableSet(&$params, &$model) { // Preliminary set of tables $query = array_intersect_key($this->gridDataCountTables($params, $model), array('link'=>1, 'contain'=>1)); // Perform filtering based on user request: $params['post']['filter'] return array_intersect_key($this->gridDataFilterTables($params, $model, $query), array('link'=>1, 'contain'=>1)); } function gridDataCountConditions(&$params, &$model) { // Same conditions for counting as for retreiving return $this->gridDataConditions($params, $model); } function gridDataCountConditionSet(&$params, &$model) { // Conditions for the count $conditions = $this->gridDataCountConditions($params, $model); // Perform filtering based on user request: $params['post']['filter'] return $this->gridDataFilterConditions($params, $model, $conditions); } function gridDataCountGroup(&$params, &$model) { // Grouping will screw up the count, since it // causes the results to be split into chunks // based on the GROUP BY clause. We can't have // more than one row of data in the count query, // just a _single_ row with the actual count. return null; } /************************************************************************** ************************************************************************** ************************************************************************** * gridData FILTERING */ function gridDataFilterTables(&$params, &$model, $query) { if (isset($query['contain'])) $link = 'contain'; else $link = 'link'; if (empty($params['post']['filter'])) return $query; foreach ($params['post']['filter'] AS $filter => $value) { if (preg_match("/\./", $filter)) { list($tbl, $id) = explode(".", $filter); } elseif (preg_match('/^(.*)_(id)$/', $filter, $matches)) { list($tbl, $id) = array_slice($matches, 1); } else { $tbl = $filter; $id = null; } $table = $this->gridDataFilterTablesTable($params, $model, $tbl); if (!$table || $table == $model->alias) continue; // If the table is already part of the query, don't replace it if (isset($query[$link][$table]) || in_array($table, $query[$link])) continue; $query[$link][$table] = $this->gridDataFilterTablesConfig($params, $model, $table); } return $query; } function gridDataFilterTablesTable(&$params, &$model, $table) { return $this->gridDataFilterTableName($params, $model, $table); } function gridDataFilterTablesConfig(&$params, &$model, $table) { return array('fields' => array()); } function gridDataFilterConditions(&$params, &$model, $conditions) { if (empty($params['post']['filter'])) return $conditions; foreach ($params['post']['filter'] AS $filter => $value) { if (preg_match("/\./", $filter)) { list($tbl, $id) = explode(".", $filter); } elseif (preg_match('/^(.*)_(id)$/', $filter, $matches)) { list($tbl, $id) = array_slice($matches, 1); } else { $tbl = $filter; $id = null; } $table = $this->gridDataFilterConditionsTable($params, $model, $tbl); if (!$table) continue; $key = $this->gridDataFilterConditionsKey($params, $model, $table, $id); if (!$key) continue; $conditions[] = $this->gridDataFilterConditionsStatement($params, $model, $table, $key, $value); } return $conditions; } function gridDataFilterConditionsTable(&$params, &$model, $table) { return $this->gridDataFilterTableName($params, $model, $table); } function gridDataFilterConditionsKey(&$params, &$model, $table, $id) { // REVISIT