Example #1
0
 /**
  * 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());
 }
Example #2
0
 /**
  * Regenerate the free/busy cache data.
  *
  * @return NULL
  */
 function &regenerate($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;
 }