'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: jqGridView * - called by function to create an index listing */ function jqGridView($title, $action = null, $element = null) { $this->set('title', $title); // The resulting page will contain a jqGrid, 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: jqGridData * - Fetches the actual data requested by jqGrid as XML */ function jqGridData() { // 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->jqGridDataSetup($params); // Get the top level model for this grid $model = $this->jqGridDataModel($params); // Establish the basic query and conditions $query = array_intersect_key($this->jqGridDataCountTables($params, $model), array('link'=>1, 'contain'=>1)); $query['conditions'] = $this->jqGridDataConditions($params, $model); // DEBUG PURPOSES ONLY! $params['count_query'] = $query; // Get the number of records prior to pagination $count = $this->jqGridDataRecordCount($params, $model, $query); // Start the query over, this time getting the actual set // of tables needed, not just those needed for counting. $query = array_intersect_key($this->jqGridDataTables($params, $model), array('link'=>1, 'contain'=>1)); $query['conditions'] = $this->jqGridDataConditions($params, $model); // Verify a few parameters and determine our starting row $limit = $params['rows']; $total = ($count < 0) ? 0 : ceil($count/$limit); $page = ($params['page'] <= 1) ? 1 : (($params['page'] > $total) ? $total : $params['page']); $start = $limit*$page - $limit; // Grab the actual records taking pagination into account $query['group'] = $this->jqGridDataGroup($params, $model); $query['order'] = $this->jqGridDataOrder($params, $model, isset($params['sidx']) ? $params['sidx'] : null, isset($params['sord']) ? $params['sord'] : null); $query['limit'] = $this->jqGridDataLimit($params, $model, $start, $limit); $query['fields'] = $this->jqGridDataFields($params, $model); $results = $this->jqGridDataRecords($params, $model, $query); // DEBUG PURPOSES ONLY! $params['query'] = $query; // Post process the records $this->jqGridRecordsPostProcess($params, $model, $results); // Add in any needed hyperlinks $this->jqGridRecordLinks($params, $model, $results, array()); // Finally, dump out the data $this->jqGridDataOutputHeader($params, $model); echo "\n"; echo "\n"; $this->jqGridDataOutputSummary($params, $model, $page, $total, $count); $this->jqGridDataOutputRecords($params, $model, $results); echo "\n"; // Call out to finalize everything $this->jqGridDataFinalize($params); } /************************************************************************** ************************************************************************** ************************************************************************** * virtual: jqGridData* functions * - These set up the context for the jqGrid data, and will * need to be overridden in the derived class for anything * other than the most basic of grids. */ function jqGridDataSetup(&$params) { // Assume we're debugging. // The actual jqGrid request will set this to false $debug = true; if (isset($this->passedArgs['debug'])) $debug = $this->passedArgs['debug']; $params['debug'] = $debug; if (!$debug) { $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['fields'])) $params['fields'] = unserialize($params['fields']); else $params['fields'] = array($this->{$this->modelClass}->alias .'.'. $this->{$this->modelClass}->primarKey); // Unserialize the list of ids, if present. if (isset($params['custom'])) $params['custom'] = unserialize($params['custom']); else $params['custom'] = null; // Unserialize the list of ids, if present. if (isset($params['idlist'])) $params['idlist'] = unserialize($params['idlist']); } function jqGridDataModel(&$params) { return $this->{$this->modelClass}; } function jqGridDataCountTables(&$params, &$model) { // If not overridden, we use the same tables to // perform our count as we do to for the actual query return $this->jqGridDataTables($params, $model); } function jqGridDataTables(&$params, &$model) { return array('contain' => false); } function jqGridDataConditions(&$params, &$model) { $searches = array(); if (isset($params['_search']) && $params['_search'] === 'true') { if (isset($params['searchOper'])) { $searches[] = array('op' => $params['searchOper'], 'field' => $params['searchField'], 'value' => $params['searchString']); } else { // DOH! Crappy mechanism puts toolbar search terms // directly into params as name/value pairs. No // way to know which elements of params are search // terms, so skipping this at the moment. } } elseif (isset($params['filt']) && $params['filt']) { $searches[] = array('op' => 'bw', 'field' => $params['filtField'], 'value' => $params['filtValue']); } $ops = array('eq' => array('op' => null, 'pre' => '', 'post' => ''), 'ne' => array('op' => '<>', 'pre' => '', 'post' => ''), 'lt' => array('op' => '<', 'pre' => '', 'post' => ''), 'le' => array('op' => '<=', 'pre' => '', 'post' => ''), 'gt' => array('op' => '>', 'pre' => '', 'post' => ''), 'ge' => array('op' => '>=', 'pre' => '', 'post' => ''), 'bw' => array('op' => 'LIKE', 'pre' => '', 'post' => '%'), 'ew' => array('op' => 'LIKE', 'pre' => '%', 'post' => ''), 'cn' => array('op' => 'LIKE', 'pre' => '%', 'post' => '%'), ); $conditions = array(); foreach ($searches AS $search) { $op = $ops[$search['op']]; $field = $search['field'] . ($op['op'] ? ' '.$op['op'] : ''); $value = $op['pre'] . $search['value']. $op['post']; $conditions[] = array($field => $value); } if (isset($params['action']) && $params['action'] === 'idlist') { if (count($params['idlist'])) $conditions[] = array($model->alias.'.'.$model->primaryKey => $params['idlist']); else $conditions[] = '0=1'; } return $conditions; } function jqGridDataFields(&$params, &$model) { return null; } function jqGridDataGroup(&$params, &$model) { return $model->alias.'.'.$model->primaryKey; } function jqGridDataOrder(&$params, &$model, $index, $direction) { return $index ? array($index .' '. $direction) : null; } function jqGridDataLimit(&$params, &$model, $start, $limit) { return $start . ', ' . $limit; } function jqGridDataRecordCount(&$params, &$model, $query) { return $model->find('count', $query); } function jqGridDataRecords(&$params, &$model, $query) { return $model->find('all', $query); } function jqGridRecordsPostProcess(&$params, &$model, &$records) { $model_alias = $model->alias; $id = $model->primaryKey; foreach ($records AS &$record) { $record['jqGrid_id'] = $record[$model_alias][$id]; // Add the calculated fields (if any), to the model fields if (isset($record[0])) { $record[$model_alias] += $record[0]; unset($record[0]); } } // DEBUG PURPOSES ONLY! //$params['records'] = $records; } function jqGridRecordLinks(&$params, &$model, &$records, $links) { // Don't create any links if ordered not to. if (isset($params['nolinks'])) return; foreach ($links AS $table => $fields) { $special = array('controller', 'id'); $controller = Inflector::pluralize(Inflector::underscore($table)); $id = 'id'; extract(array_intersect_key($fields, array_flip($special))); foreach ($records AS &$record) { if (!isset($record[$table])) continue; foreach (array_diff_key($fields, array_flip($special)) AS $field) { if (!isset($record[$table][$id]) || !isset($record[$table][$field])) continue; // DEBUG PURPOSES ONLY! //$params['linkrecord'][] = compact('table', 'field', 'id', 'controller', 'record'); $record[$table][$field] = '' . $record[$table][$field] . ''; } } } } function jqGridDataOutputHeader(&$params, &$model) { if ($params['debug']) { ob_start(); } else { header("Content-type: text/xml;charset=utf-8"); } } function jqGridDataOutputSummary(&$params, &$model, $page, $total, $records) { echo " \n"; echo " $page\n"; echo " $total\n"; echo " $records\n"; } function jqGridDataOutputRecords(&$params, &$model, &$records) { $id_field = 'jqGrid_id'; foreach ($records AS $record) { $this->jqGridDataOutputRecord($params, $model, $record, $record[$id_field], $params['fields']); } } function jqGridDataOutputRecord(&$params, &$model, &$record, $id, $fields) { echo " \n"; foreach ($fields AS $field) { $this->jqGridDataOutputRecordField($params, $model, $record, $field); } echo " \n"; } function jqGridDataOutputRecordField(&$params, &$model, &$record, $field) { if (preg_match("/\./", $field)) { list($tbl, $col) = explode(".", $field); $data = $record[$tbl][$col]; } else { $data = $record[$model->alias][$field]; } $this->jqGridDataOutputRecordCell($params, $model, $record, $field, $data); } function jqGridDataOutputRecordCell(&$params, &$model, &$record, $field, $data) { // be sure to put text data in CDATA if (preg_match("/^\d*$/", $data)) echo " $data\n"; else echo " \n"; } function jqGridDataFinalize(&$params) { if ($params['debug']) { $xml = ob_get_contents(); ob_end_clean(); $xml = preg_replace("/&/", "&", $xml); $xml = preg_replace("//", ">", $xml); echo ("\n
\n$xml\n
\n"); } } } ?>