diff --git a/site/app_model.php b/site/app_model.php index 7d083b0..a4e1079 100644 --- a/site/app_model.php +++ b/site/app_model.php @@ -37,5 +37,42 @@ * @subpackage cake.app */ class AppModel extends Model { + + + /** + * Get Enum Values + * Snippet v0.1.3 + * http://cakeforge.org/snippet/detail.php?type=snippet&id=112 + * + * Gets the enum values for MySQL 4 and 5 to use in selectTag() + */ + function getEnumValues($columnName=null, $respectDefault=false) + { + if ($columnName==null) { return array(); } //no field specified + + //Get the name of the table + $db =& ConnectionManager::getDataSource($this->useDbConfig); + $tableName = $db->fullTableName($this, false); + + //Get the values for the specified column (database and version specific, needs testing) + $result = $this->query("SHOW COLUMNS FROM {$tableName} LIKE '{$columnName}'"); + + //figure out where in the result our Types are (this varies between mysql versions) + $types = null; + if ( isset( $result[0]['COLUMNS']['Type'] ) ) { //MySQL 5 + $types = $result[0]['COLUMNS']['Type']; $default = $result[0]['COLUMNS']['Default']; + } + elseif ( isset( $result[0][0]['Type'] ) ) { //MySQL 4 + $types = $result[0][0]['Type']; $default = $result[0][0]['Default']; + } + else { //types return not accounted for + return array(); + } + + //Get the values + return array_flip(array_merge(array(''), // MySQL sets 0 to be the empty string + explode("','", preg_replace("/(enum)\('(.+?)'\)/","\\2", $types)) + )); + } //end getEnumValues + } -?> \ No newline at end of file diff --git a/site/controllers/units_controller.php b/site/controllers/units_controller.php index fe21434..e6569b3 100644 --- a/site/controllers/units_controller.php +++ b/site/controllers/units_controller.php @@ -12,29 +12,13 @@ class UnitsController extends AppController { function vacant() { $this->Unit->recursive = 0; - $this->Unit->bindModel(array('hasOne' => array('UnitsLease', - 'Lease' => array( - 'foreignKey' => false, - 'conditions' => array('Lease.id = UnitsLease.lease_id') - ))), - false); - - $this->set('units', $this->paginate(array('Lease.close_date IS NULL', - 'UnitsLease.type != "ALTERNATE"'))); + $this->set('units', $this->paginate(array('Unit.status < ' . $this->Unit->occupiedEnumValue()))); $this->render('index'); } function occupied() { $this->Unit->recursive = 0; - $this->Unit->bindModel(array('hasOne' => array('UnitsLease', - 'Lease' => array( - 'foreignKey' => false, - 'conditions' => array('Lease.id = UnitsLease.lease_id') - ))), - false); - - $this->set('units', $this->paginate(array('Lease.close_date IS NULL', - 'UnitsLease.type != "ALTERNATE"'))); + $this->set('units', $this->paginate(array('Unit.status >= ' . $this->Unit->occupiedEnumValue()))); $this->render('index'); } diff --git a/site/models/unit.php b/site/models/unit.php index 643065a..72c1af9 100644 --- a/site/models/unit.php +++ b/site/models/unit.php @@ -45,5 +45,8 @@ class Unit extends AppModel { ) ); + function occupiedEnumValue() { + $enums = $this->getEnumValues('status'); + return $enums['OCCUPIED']; + } } -?> \ No newline at end of file diff --git a/site/views/elements/units.ctp b/site/views/elements/units.ctp index ca3b714..ee19ea9 100644 --- a/site/views/elements/units.ctp +++ b/site/views/elements/units.ctp @@ -18,12 +18,12 @@ 'format' => __('Page %page% of %pages%, showing %current% records (%start% - %end%) of %count% total', true))); $rows = array($paginator->sort('id'), - $paginator->sort('name'), + $paginator->sort('Unit', 'name'), $paginator->sort('unit_size_id'), $paginator->sort('status'), $paginator->sort('comment')); } else { - $rows = array('Id', 'Name', 'Size', 'Status', 'Comment'); + $rows = array('Id', 'Unit', 'Size', 'Status', 'Comment'); } echo $html->tableHeaders($rows);