Overview

Packages

  • Kronolith
  • None

Classes

  • Kronolith
  • Kronolith_Ajax_Application
  • Kronolith_Ajax_Imple_ContactAutoCompleter
  • Kronolith_Ajax_Imple_Embed
  • Kronolith_Ajax_Imple_TagActions
  • Kronolith_Ajax_Imple_TagAutoCompleter
  • Kronolith_Api
  • Kronolith_Calendar
  • Kronolith_Calendar_External
  • Kronolith_Calendar_External_Tasks
  • Kronolith_Calendar_Holiday
  • Kronolith_Calendar_Internal
  • Kronolith_Calendar_Remote
  • Kronolith_Calendar_Resource
  • Kronolith_Calendars_Base
  • Kronolith_Calendars_Default
  • Kronolith_Calendars_Kolab
  • Kronolith_Day
  • Kronolith_Driver
  • Kronolith_Driver_Holidays
  • Kronolith_Driver_Horde
  • Kronolith_Driver_Ical
  • Kronolith_Driver_Kolab
  • Kronolith_Driver_Mock
  • Kronolith_Driver_Resource
  • Kronolith_Driver_Sql
  • Kronolith_Event
  • Kronolith_Event_Holidays
  • Kronolith_Event_Horde
  • Kronolith_Event_Ical
  • Kronolith_Event_Kolab
  • Kronolith_Event_Resource
  • Kronolith_Event_Sql
  • Kronolith_Exception
  • Kronolith_Factory_Calendars
  • Kronolith_Factory_Geo
  • Kronolith_Form_CreateCalendar
  • Kronolith_Form_CreateResource
  • Kronolith_Form_CreateResourceGroup
  • Kronolith_Form_DeleteCalendar
  • Kronolith_Form_DeleteResource
  • Kronolith_Form_DeleteResourceGroup
  • Kronolith_Form_EditCalendar
  • Kronolith_Form_EditRemoteCalendar
  • Kronolith_Form_EditResource
  • Kronolith_Form_EditResourceGroup
  • Kronolith_Form_SubscribeRemoteCalendar
  • Kronolith_Form_UnsubscribeRemoteCalendar
  • Kronolith_FreeBusy
  • Kronolith_FreeBusy_View
  • Kronolith_FreeBusy_View_Day
  • Kronolith_FreeBusy_View_Month
  • Kronolith_FreeBusy_View_Week
  • Kronolith_FreeBusy_View_Workweek
  • Kronolith_Geo_Base
  • Kronolith_Geo_Mysql
  • Kronolith_Geo_Sql
  • Kronolith_LoginTasks_SystemTask_Upgrade
  • Kronolith_LoginTasks_Task_PurgeEvents
  • Kronolith_Notification_Listener_AjaxStatus
  • Kronolith_Resource
  • Kronolith_Resource_Base
  • Kronolith_Resource_Group
  • Kronolith_Resource_Single
  • Kronolith_Storage
  • Kronolith_Storage_Kolab
  • Kronolith_Storage_Sql
  • Kronolith_Tagger
  • Kronolith_Test
  • Kronolith_View_Day
  • Kronolith_View_DeleteEvent
  • Kronolith_View_EditEvent
  • Kronolith_View_Event
  • Kronolith_View_ExportEvent
  • Kronolith_View_Month
  • Kronolith_View_Week
  • Kronolith_View_WorkWeek
  • Kronolith_View_Year
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * Horde_Form for editing resources.
  4:  *
  5:  * See the enclosed file COPYING for license information (GPL). If you
  6:  * did not receive this file, see http://www.horde.org/licenses/gpl.
  7:  *
  8:  * @package Kronolith
  9:  */
 10: 
 11: /**
 12:  * The Kronolith_Form_EditResource class provides the form for editing a
 13:  * resource.
 14:  *
 15:  * @author  Chuck Hagenbuch <chuck@horde.org>
 16:  * @author  Michael J. Rubinsky <mrubinsk@horde.org>
 17:  * @package Kronolith
 18:  */
 19: class Kronolith_Form_EditResource extends Horde_Form
 20: {
 21:     /**
 22:      * Resource being edited.
 23:      *
 24:      * @var Kronolith_Resource_Single
 25:      */
 26:     protected $_resource;
 27: 
 28:     /**
 29:      * @throws Kronolith_Exception
 30:      */
 31:     public function __construct($vars, $resource)
 32:     {
 33:         $this->_resource = $resource;
 34:         parent::__construct($vars, sprintf(_("Edit %s"), $resource->get('name')));
 35: 
 36:         $responses =  array(Kronolith_Resource::RESPONSETYPE_ALWAYS_ACCEPT => _("Always Accept"),
 37:                             Kronolith_Resource::RESPONSETYPE_ALWAYS_DECLINE => _("Always Decline"),
 38:                             Kronolith_Resource::RESPONSETYPE_AUTO => _("Automatically"),
 39:                             Kronolith_Resource::RESPONSETYPE_MANUAL => _("Manual"),
 40:                             Kronolith_Resource::RESPONSETYPE_NONE => _("None"));
 41: 
 42:         /* Get a list of available resource groups */
 43:         $groups = Kronolith::getDriver('Resource')
 44:             ->listResources(Horde_Perms::READ,
 45:                             array('type' => Kronolith_Resource::TYPE_GROUP));
 46:         $enum = array();
 47:         foreach ($groups as $id => $group) {
 48:             $enum[$id] = $group->get('name');
 49:         }
 50: 
 51:         $this->addHidden('', 'c', 'text', true);
 52:         $this->addVariable(_("Name"), 'name', 'text', true);
 53:         $this->addVariable(_("Email"), 'email', 'email', false);
 54:         $this->addVariable(_("Description"), 'description', 'longtext', false, false, null, array(4, 60));
 55:         $this->addVariable(_("Response type"), 'responsetype', 'enum', true, false, null, array('enum' => $responses));
 56:         $this->addVariable(_("Groups"), 'category', 'multienum', false, false, null, array('enum' => $enum));
 57:         $this->setButtons(array(_("Save")));
 58:     }
 59: 
 60:     /**
 61:      * @throws Kronolith_Exception
 62:      */
 63:     public function execute()
 64:     {
 65:         $original_name = $this->_resource->get('name');
 66:         $new_name = $this->_vars->get('name');
 67:         $this->_resource->set('name', $new_name);
 68:         $this->_resource->set('description', $this->_vars->get('description'));
 69:         $this->_resource->set('response_type', $this->_vars->get('responsetype'));
 70:         $this->_resource->set('email', $this->_vars->get('email'));
 71: 
 72:         /* Update group memberships */
 73:         $driver = Kronolith::getDriver('Resource');
 74:         $existing_groups = $driver->getGroupMemberships($this->_resource->getId());
 75:         $new_groups = $this->_vars->get('category');
 76:         $new_groups = (is_null($new_groups) ? array() : $new_groups);
 77:         foreach ($existing_groups as $gid) {
 78:              $i = array_search($gid, $new_groups);
 79:              if ($i === false) {
 80:                  // No longer in this group
 81:                  $group = $driver->getResource($gid);
 82:                  $members = $group->get('members');
 83:                  $idx = array_search($this->_resource->getId(), $members);
 84:                  if ($idx !== false) {
 85:                      unset($members[$idx]);
 86:                      reset($members);
 87:                      $group->set('members', $members);
 88:                      $group->save();
 89:                  }
 90:              } else {
 91:                  // We know it's already in the group, remove it so we don't
 92:                  // have to check/add it again later.
 93:                  unset($new_groups[$i]);
 94:              }
 95:         }
 96: 
 97:         reset($new_groups);
 98:         foreach ($new_groups as $gid) {
 99:             $group = $driver->getResource($gid);
100:             $members = $group->get('members');
101:             $members[] = $this->_resource->getId();
102:             $group->set('members', $members);
103:             $group->save();
104:         }
105: 
106:         try {
107:             $result = $this->_resource->save();
108:         } catch (Exception $e) {
109:             throw new Kronolith_Exception(sprintf(_("Unable to save resource \"%s\": %s"), $new_name, $e->getMessage()));
110:         }
111: 
112:         return $this->_resource;
113:     }
114: 
115: }
116: 
API documentation generated by ApiGen