/** * Test triggering. * * @return NULL */ public function testTrigger() { $_GET['folder'] = 'wrobel@example.org/Calendar'; $_GET['extended'] = '1'; $req_folder = Horde_Util::getFormData('folder', ''); $access = new Horde_Kolab_FreeBusy_Access(); $result = $access->parseFolder($req_folder); $this->assertEquals('*****@*****.**', $access->owner); $result = $this->server->uidForIdOrMailOrAlias($access->owner); $this->assertEquals('cn=Gunnar Wrobel,dc=example,dc=org', $result); $result = $this->server->fetch($result, 'Horde_Kolab_Server_Object_Kolab_User'); $this->assertNoError($result); $fb = new Horde_Kolab_FreeBusy(); $view = $fb->trigger(); $this->assertEquals('Horde_Kolab_FreeBusy_View_vfb', get_class($view)); /** Test triggering an invalid folder */ $_GET['folder'] = ''; $fb = new Horde_Kolab_FreeBusy(); /** Trigger the free/busy cache update */ $view = $fb->trigger(); $this->assertTrue(is_a($view, 'Horde_Kolab_FreeBusy_View_error')); $this->assertEquals('No such folder ', $view->_data['error']->getMessage()); }
/** * Regenerate the free/busy cache data. * * @return NULL */ function ®enerate($reporter) { $access = new Horde_Kolab_FreeBusy_Access(); $result = $access->authenticated(); if (is_a($result, 'PEAR_Error')) { return $result->getMessage(); } /* Load the required Kolab libraries */ require_once "Horde/Kolab/Storage/List.php"; $list =& Kolab_List::singleton(); $calendars = $list->getByType('event'); if (is_a($calendars, 'PEAR_Error')) { return $calendars->getMessage(); } $this->_initCache(); $lines = array(); foreach ($calendars as $calendar) { /** * We are using imap folders for our calendar list but * the library expects us to follow the trigger format * used by pfb.php */ $req_domain = explode('@', $calendar->name); if (isset($req_domain[1])) { $domain = $req_domain[1]; } else { $domain = null; } $req_folder = explode('/', $req_domain[0]); if ($req_folder[0] == 'user') { unset($req_folder[0]); $owner = $req_folder[1]; unset($req_folder[1]); } else { if ($req_folder[0] == 'INBOX') { $owner = $access->user; unset($req_folder[0]); } } $trigger = $owner . ($domain ? '@' . $domain : '') . '/' . join('/', $req_folder); $trigger = Horde_String::convertCharset($trigger, 'UTF7-IMAP', 'UTF-8'); /* Validate folder access */ $result = $access->parseFolder($trigger); if (is_a($result, 'PEAR_Error')) { $reporter->failure($calendar->name, $result->getMessage()); continue; } /* Hack for allowing manager access */ if ($access->user == 'manager') { $imapc =& Horde_Kolab_IMAP::singleton($GLOBALS['conf']['kolab']['imap']['server'], $GLOBALS['conf']['kolab']['imap']['port']); $result = $imapc->connect($access->user, $GLOBALS['registry']->getAuthCredential('password')); if (is_a($result, 'PEAR_Error')) { $reporter->failure($calendar->name, $result->getMessage()); continue; } $acl = $imapc->getACL($calendar->name); if (is_a($acl, 'PEAR_Error')) { $reporter->failure($calendar->name, $result->getMessage()); continue; } $oldacl = ''; if (isset($acl['manager'])) { $oldacl = $acl['manager']; } $result = $imapc->setACL($calendar->name, 'manager', array('rights' => 'lrs')); if (is_a($result, 'PEAR_Error')) { $reporter->failure($calendar->name, $result->getMessage()); continue; } } /* Update the cache */ $result = $this->_cache->store($access); if (is_a($result, 'PEAR_Error')) { $reporter->failure($calendar->name, $result->getMessage()); continue; } /* Revert the acl */ if ($access->user == 'manager' && $oldacl) { $result = $imapc->setACL($calendar->name, 'manager', array('rights' => $oldacl)); if (is_a($result, 'PEAR_Error')) { $reporter->failure($calendar->name, $result->getMessage()); continue; } } $reporter->success($calendar->name); } return $lines; }