Remove max_reservations.
authorMichael J. Rubinsky <mrubinsk@horde.org>
Thu, 17 Sep 2009 23:04:34 +0000 (19:04 -0400)
committerMichael J. Rubinsky <mrubinsk@horde.org>
Tue, 29 Sep 2009 20:53:55 +0000 (16:53 -0400)
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
kronolith/lib/Forms/CreateResource.php
kronolith/lib/Forms/EditResource.php
kronolith/lib/Resource/Single.php
kronolith/resources/edit.php
kronolith/scripts/upgrades/2009-08-17_add_resources.sql

index 51b5eb0..a7b643a 100644 (file)
@@ -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();
index af13c38..551e092 100644 (file)
@@ -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);
index 5e0c4a5..840c03f 100644 (file)
@@ -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')) {
index 241e55a..ac85625 100644 (file)
@@ -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;
     }
 
     /**
index 8db003b..b2cf642 100644 (file)
@@ -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();
index a66d24a..c9a7070 100644 (file)
@@ -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)
 );