/**
* Removes a resource from storage, along with any events in the resource's
* calendar.
*
* @param Kronolith_Resource_Base $resource The kronolith resource to remove
*
* @throws Kronolith_Exception, Horde_Exception_PermissionDenied
*/
public function delete($resource)
{
// @todo
if (!$GLOBALS['registry']->isAdmin() && !$GLOBALS['injector']->getInstance('Horde_Core_Perms')->hasAppPermission('resource_management')) {
throw new Horde_Exception_PermissionDenied();
}
if (!$resource->getId()) {
throw new Kronolith_Exception(_("Resource not valid."));
}
// Get group memberships and remove from group.
$groups = $this->getGroupMemberships($resource->getId());
foreach ($groups as $id) {
$rg = $this->getResource($id);
$members = $rg->get('members');
unset($members[array_search($resource->getId(), $members)]);
$rg->set('members', $members);
$rg->save();
}
$this->_deleteResourceCalendar($resource->get('calendar'));
try {
$GLOBALS['injector']->getInstance('Kronolith_Shares')->removeShare($resource->share());
} catch (Horde_Share_Exception $e) {
throw new Kronolith_Exception($e);
}
}