From 29b0fd42b92810d62887d935000db0a400c9f51a Mon Sep 17 00:00:00 2001 From: "Michael J. Rubinsky" Date: Thu, 17 Sep 2009 19:04:34 -0400 Subject: [PATCH] Remove max_reservations. It's not intuitive and won't be needed in 99.9% of the use cases. For single resources that may be overbooked, the resource should be created with a RESPONSETYPE_ALWAYS_EXCEPT responseType instead. --- kronolith/lib/Driver/Resource.php | 34 ++++++++++++++++------ kronolith/lib/Forms/CreateResource.php | 4 +-- kronolith/lib/Forms/EditResource.php | 2 -- kronolith/lib/Resource/Single.php | 6 ++-- kronolith/resources/edit.php | 1 - .../scripts/upgrades/2009-08-17_add_resources.sql | 3 +- 6 files changed, 30 insertions(+), 20 deletions(-) diff --git a/kronolith/lib/Driver/Resource.php b/kronolith/lib/Driver/Resource.php index 51b5eb02a..a7b643a52 100644 --- a/kronolith/lib/Driver/Resource.php +++ b/kronolith/lib/Driver/Resource.php @@ -361,17 +361,17 @@ class Kronolith_Driver_Resource extends Kronolith_Driver_Sql public function save($resource) { if ($resource->getId()) { - $query = 'UPDATE kronolith_resources SET resource_name = ?, resource_calendar = ?, resource_category = ? , resource_description = ?, resource_response_type = ?, resource_max_reservations = ? WHERE resource_id = ?'; - $values = array($resource->get('name'), $resource->get('calendar'), $resource->get('category'), $resource->get('description'), $resource->get('response_type'), $resource->get('max_reservations'), $resource->getId()); + $query = 'UPDATE kronolith_resources SET resource_name = ?, resource_calendar = ?, resource_category = ? , resource_description = ?, resource_response_type = ? WHERE resource_id = ?'; + $values = array($resource->get('name'), $resource->get('calendar'), $resource->get('category'), $resource->get('description'), $resource->get('response_type'), $resource->getId()); $result = $this->_write_db->query($query, $values); if ($result instanceof PEAR_Error) { throw new Horde_Exception($result->getMessage()); } } else { - $query = 'INSERT INTO kronolith_resources (resource_id, resource_name, resource_calendar, resource_category, resource_description, resource_response_type, resource_max_reservations)'; - $cols_values = ' VALUES (?, ?, ?, ?, ?, ?, ?)'; + $query = 'INSERT INTO kronolith_resources (resource_id, resource_name, resource_calendar, resource_category, resource_description, resource_response_type)'; + $cols_values = ' VALUES (?, ?, ?, ?, ?, ?)'; $id = $this->_db->nextId('kronolith_resources'); - $values = array($id, $resource->get('name'), $resource->get('calendar'), $resource->get('category'), $resource->get('description'), $resource->get('response_type'), $resource->get('max_reservations')); + $values = array($id, $resource->get('name'), $resource->get('calendar'), $resource->get('category'), $resource->get('description'), $resource->get('response_type')); $result = $this->_write_db->query($query . $cols_values, $values); if (!($result instanceof PEAR_Error)) { return true; @@ -452,7 +452,7 @@ class Kronolith_Driver_Resource extends Kronolith_Driver_Sql */ public function getResource($id) { - $query = 'SELECT resource_id, resource_name, resource_calendar, resource_category, resource_description, resource_response_type, resource_max_reservations FROM kronolith_resources WHERE resource_id = ?'; + $query = 'SELECT resource_id, resource_name, resource_calendar, resource_category, resource_description, resource_response_type FROM kronolith_resources WHERE resource_id = ?'; $results = $this->_db->getRow($query, array($id), DB_FETCHMODE_ASSOC); if ($results instanceof PEAR_Error) { @@ -493,11 +493,22 @@ class Kronolith_Driver_Resource extends Kronolith_Driver_Sql * This method will likely be a moving target as group resources are * fleshed out. * + * @param array $filter A hash of field/values to filter on. */ - public function listResources($params = array()) + public function listResources($filter = array()) { - $query = 'SELECT resource_id, resource_name, resource_calendar, resource_category, resource_description, resource_response_type, resource_max_reservations FROM kronolith_resources'; - $results = $this->_db->getAssoc($query, true, array(), DB_FETCHMODE_ASSOC, false); + $query = 'SELECT resource_id, resource_name, resource_calendar, resource_category, resource_description, resource_response_type FROM kronolith_resources'; + if (count($filter)) { + $clause = ' WHERE '; + $i = 0; + $c = count($filter); + foreach ($filter as $field => $value) { + $clause .= 'resource_' . $field . ' = ?' . (($i++ < ($c - 1)) ? ' AND ' : ''); + } + $query .= $clause; + } + + $results = $this->_db->getAssoc($query, true, $filter, DB_FETCHMODE_ASSOC, false); if ($results instanceof PEAR_Error) { throw new Horde_Exception($results->getMessage()); } @@ -510,6 +521,11 @@ class Kronolith_Driver_Resource extends Kronolith_Driver_Sql return $return; } + /** + * + * @param $params + * @return unknown_type + */ protected function _fromDriver($params) { $return = array(); diff --git a/kronolith/lib/Forms/CreateResource.php b/kronolith/lib/Forms/CreateResource.php index af13c386c..551e0929c 100644 --- a/kronolith/lib/Forms/CreateResource.php +++ b/kronolith/lib/Forms/CreateResource.php @@ -36,7 +36,6 @@ class Kronolith_CreateResourceForm extends Horde_Form { $this->addVariable(_("Name"), 'name', 'text', true); $this->addVariable(_("Description"), 'description', 'longtext', false, false, null, array(4, 60)); $this->addVariable(_("Response type"), 'responsetype', 'enum', true, false, null, array('enum' => $responses)); - $this->addVariable(_("Maximum number of overlapping reservations"), 'maxreservations', 'number', true); $this->addVariable(_("Category"), 'category', 'text', false); $this->setButtons(array(_("Create"))); } @@ -46,8 +45,7 @@ class Kronolith_CreateResourceForm extends Horde_Form { $new = array('name' => $this->_vars->get('name'), 'category' => $this->_vars->get('category'), 'description' => $this->_vars->get('description'), - 'response_type' => $this->_vars->get('response_type'), - 'max_reservations' => $this->_vars->get('max_reservations')); + 'response_type' => $this->_vars->get('response_type')); $resource = new Kronolith_Resource_Single($new); return $results = Kronolith_Resource::addResource($resource); diff --git a/kronolith/lib/Forms/EditResource.php b/kronolith/lib/Forms/EditResource.php index 5e0c4a5c8..840c03fac 100644 --- a/kronolith/lib/Forms/EditResource.php +++ b/kronolith/lib/Forms/EditResource.php @@ -41,7 +41,6 @@ class Kronolith_EditResourceForm extends Horde_Form { $this->addVariable(_("Name"), 'name', 'text', true); $this->addVariable(_("Description"), 'description', 'longtext', false, false, null, array(4, 60)); $this->addVariable(_("Response type"), 'responsetype', 'enum', true, false, null, array('enum' => $responses)); - $this->addVariable(_("Maximum number of overlapping reservations"), 'maxreservations', 'number', true); $this->addVariable(_("Category"), 'category', 'text', false); $this->setButtons(array(_("Save"))); } @@ -54,7 +53,6 @@ class Kronolith_EditResourceForm extends Horde_Form { $this->_resource->set('description', $this->_vars->get('description')); $this->_resource->set('category', $this->_vars->get('category')); $this->_resource->set('response_type', $this->_vars->get('responsetype')); - $this->_resource->set('max_reservations', $this->_vars->get('maxreservations')); if ($original_name != $new_name) { $result = Kronolith::getDriver()->rename($original_name, $new_name); if (is_a($result, 'PEAR_Error')) { diff --git a/kronolith/lib/Resource/Single.php b/kronolith/lib/Resource/Single.php index 241e55ae5..ac8562586 100644 --- a/kronolith/lib/Resource/Single.php +++ b/kronolith/lib/Resource/Single.php @@ -50,7 +50,7 @@ class Kronolith_Resource_Single extends Kronolith_Resource_Base } else { $uid = 0; } - $conflicts = 0; + foreach ($busy as $events) { foreach ($events as $e) { if (!($e->hasStatus(Kronolith::STATUS_CANCELLED) || @@ -60,13 +60,13 @@ class Kronolith_Resource_Single extends Kronolith_Resource_Base if (!($e->start->compareDateTime($end) >= 1 || $e->end->compareDateTime($start) <= -1)) { - $conflicts++; + return false; } } } } - return ($conflicts < $this->get('max_reservations')); + return true; } /** diff --git a/kronolith/resources/edit.php b/kronolith/resources/edit.php index 8db003ba2..b2cf64242 100644 --- a/kronolith/resources/edit.php +++ b/kronolith/resources/edit.php @@ -53,7 +53,6 @@ if ($form->validate($vars)) { $vars->set('name', $resource->get('name')); $vars->set('description', $resource->get('description')); $vars->set('category', $resource->get('category')); -$vars->set('maxreservations', $resource->get('max_reservations')); $vars->set('responsetype', $resource->get('response_type')); $title = $form->getTitle(); diff --git a/kronolith/scripts/upgrades/2009-08-17_add_resources.sql b/kronolith/scripts/upgrades/2009-08-17_add_resources.sql index a66d24aad..c9a70705d 100644 --- a/kronolith/scripts/upgrades/2009-08-17_add_resources.sql +++ b/kronolith/scripts/upgrades/2009-08-17_add_resources.sql @@ -5,9 +5,8 @@ CREATE TABLE kronolith_resources ( resource_name VARCHAR(255), resource_calendar VARCHAR(255), resource_description TEXT, - resource_category VARCHAR(255), + resource_category VARCHAR(255) DEFAULT '', resource_response_type INT DEFAULT 0, - resource_max_reservations INT DEFAULT 1, PRIMARY KEY (resource_id) ); -- 2.11.0