Copyright 2000-2016 Horde LLC (http://www.horde.org/) See the enclosed file LICENSE for license information (ASL). If you did did not receive this file, see http://www.horde.org/licenses/apache.
저자: Chuck Hagenbuch (chuck@horde.org)
저자: Jon Parise (jon@csh.rit.edu)
상속: implements Countable
예제 #1
0
 public function renderActive($renderer, $vars, $action, $method)
 {
     parent::renderActive($renderer, $vars, $action, $method);
     $results = new Turba_List($vars->get('objectkeys'));
     /* Don't show listview if only 1 entry. */
     if (count($results) > 1) {
         /* Read the columns to display from the preferences. */
         $source = $vars->get('source');
         $sources = Turba::getColumns();
         $listView = new Turba_View_List($results, array('Group' => true), isset($sources[$source]) ? $sources[$source] : array());
         $numDisplayed = 0;
         echo '<br />' . $listView->getPage($numDisplayed);
     }
 }
예제 #2
0
 function test_getAddSources_returns_sources_sorted_by_name()
 {
     $result = Turba_View_List::getAddSources();
     if (!$this->assertOk($result)) {
         return;
     }
     list($addToList, $addToListSources) = $result;
     $groups = $this->_groups;
     sort($groups);
     foreach ($addToList as $item) {
         if (!empty($groups) && !empty($item['name']) && $groups[0] == $item['name']) {
             array_shift($groups);
         }
     }
     $this->assertTrue(empty($groups), "Some group not found or not found in right order.");
 }
예제 #3
0
파일: search.php 프로젝트: jubinpatel/horde
        if ($search_mode == 'duplicate') {
            try {
                $duplicates = $driver->searchDuplicates();
                $view = new Turba_View_Duplicates($duplicates, $driver, $vars->type, $vars->dupe);
                $page_output->addScriptFile('tables.js', 'horde');
            } catch (Exception $e) {
                $notification->push($e);
            }
        } else {
            try {
                if ($search_mode == 'basic' && ($results = $driver->search($criteria, null, 'OR')) || $search_mode == 'advanced' && ($results = $driver->search($criteria))) {
                    /* Read the columns to display from the preferences. */
                    $sources = Turba::getColumns();
                    $columns = isset($sources[$source]) ? $sources[$source] : array();
                    $results->sort(Turba::getPreferredSortOrder());
                    $view = new Turba_View_List($results, null, $columns);
                    $view->setType('search');
                } else {
                    $notification->push(_("Failed to search the address book"), 'horde.error');
                }
            } catch (Turba_Exception $e) {
                $notification->push($e, 'horde.error');
            }
        }
    }
}
/* Build search mode tabs. */
$sUrl = Horde::url('search.php');
$tabs = new Horde_Core_Ui_Tabs('search_mode', $vars);
$tabs->addTab(_("Basic Search"), $sUrl, 'basic');
$tabs->addTab(_("Advanced Search"), $sUrl, 'advanced');
예제 #4
0
파일: Browse.php 프로젝트: horde/horde
 public function run()
 {
     extract($this->_params, EXTR_REFS);
     $this->updateSortOrderFromVars();
     $title = _("Address Book Listing");
     if (!$browse_source_count && $vars->get('key') != '**search') {
         $notification->push(_("There are no browseable address books."), 'horde.warning');
     } else {
         try {
             $driver = $factory->create($source);
         } catch (Turba_Exception $e) {
             $notification->push($e, 'horde.error');
             unset($driver);
         }
     }
     if (isset($driver)) {
         $actionID = $vars->get('actionID');
         switch ($actionID) {
             case 'delete':
                 $keys = $vars->get('objectkeys');
                 if (!is_array($keys)) {
                     break;
                 }
                 $key = false;
                 if ($vars->exists('key')) {
                     $key = $vars->get('key');
                 }
                 if ($key && $key != '**search') {
                     // We are removing a contact from a list.
                     $errorCount = 0;
                     $list = $driver->getObject($key);
                     foreach ($keys as $sourceKey) {
                         list($objectSource, $objectKey) = explode(':', $sourceKey, 2);
                         if (!$list->removeMember($objectKey, $objectSource)) {
                             $errorCount++;
                         }
                     }
                     if (!$errorCount) {
                         $notification->push(sprintf(_("Successfully removed %d contact(s) from list."), count($keys)), 'horde.success');
                     } elseif (count($keys) == $errorCount) {
                         $notification->push(sprintf(_("Error removing %d contact(s) from list."), count($keys)), 'horde.error');
                     } else {
                         $notification->push(sprintf(_("Error removing %d of %d requested contact(s) from list."), $errorCount, count($keys)), 'horde.error');
                     }
                     $list->store();
                 } else {
                     // We are deleting an object.
                     $errorCount = 0;
                     foreach ($keys as $sourceKey) {
                         list($objectSource, $objectKey) = explode(':', $sourceKey, 2);
                         try {
                             $driver->delete($objectKey);
                         } catch (Turba_Exception $e) {
                             ++$errorCount;
                         }
                     }
                     if (!$errorCount) {
                         $notification->push(sprintf(ngettext("Successfully deleted %d contact.", "Successfully deleted %d contacts.", count($keys)), count($keys)), 'horde.success');
                     } elseif (count($keys) == $errorCount) {
                         $notification->push(sprintf(ngettext("Error deleting %d contact.", "Error deleting %d contacts.", count($keys)), count($keys)), 'horde.error');
                     } else {
                         $notification->push(sprintf(ngettext("Error deleting %d of %d requested contact.", "Error deleting %d of %d requested contacts.", count($keys)), $errorCount, count($keys)), 'horde.error');
                     }
                 }
                 break;
             case 'move':
             case 'copy':
                 $keys = $vars->get('objectkeys');
                 if (!(is_array($keys) && $keys)) {
                     break;
                 }
                 // If we have data, try loading the target address book driver.
                 $targetSource = $vars->get('targetAddressbook');
                 try {
                     $targetDriver = $factory->create($targetSource);
                 } catch (Turba_Exception $e) {
                     $notification->push($e, 'horde.error');
                     break;
                 }
                 if (Turba::hasMaxContacts($targetDriver)) {
                     break;
                 }
                 foreach ($keys as $sourceKey) {
                     // Split up the key into source and object ids.
                     list($objectSource, $objectKey) = explode(':', $sourceKey, 2);
                     // Ignore this entry if the target is the same as the
                     // source.
                     if ($objectSource == $targetDriver->getName()) {
                         continue;
                     }
                     // Try and load the driver for the source.
                     try {
                         $sourceDriver = $factory->create($objectSource);
                     } catch (Turba_Exception $e) {
                         $notification->push($e, 'horde.error');
                         continue;
                     }
                     try {
                         $object = $sourceDriver->getObject($objectKey);
                     } catch (Horde_Exception_NotFound $e) {
                         $notification->push(_("Failed to find object to be added"), 'horde.error');
                         continue;
                     }
                     if ($object->isGroup()) {
                         if ($actionID == 'move') {
                             $notification->push(sprintf(_("\"%s\" was not moved because it is a list."), $object->getValue('name')), 'horde.warning');
                         } else {
                             $notification->push(sprintf(_("\"%s\" was not copied because it is a list."), $object->getValue('name')), 'horde.warning');
                         }
                         continue;
                     }
                     // Try adding to the target.
                     $objAttributes = array();
                     // Get the values through the Turba_Object class.
                     foreach (array_keys($targetDriver->getCriteria()) as $info_key) {
                         if (!is_array($targetDriver->map[$info_key]) || isset($targetDriver->map[$info_key]['attribute'])) {
                             $objectValue = $object->getValue($info_key);
                             // Get 'data' value if object type is image, the
                             // direct value in other case.
                             $objAttributes[$info_key] = isset($attributes[$info_key]) && $attributes[$info_key]['type'] == 'image' ? $objectValue['load']['data'] : $objectValue;
                         }
                     }
                     unset($objAttributes['__owner']);
                     if ($actionID == 'copy') {
                         unset($objAttributes['__uid']);
                     }
                     // Try adding tags.
                     $objAttributes['__tags'] = $object->getValue('__tags');
                     try {
                         $targetDriver->add($objAttributes);
                     } catch (Turba_Exception $e) {
                         $notification->push(sprintf(_("Failed to add %s to %s: %s"), $object->getValue('name'), $targetDriver->title, $e), 'horde.error');
                         break;
                     }
                     $notification->push(sprintf(_("Successfully added %s to %s"), $object->getValue('name'), $targetDriver->title), 'horde.success');
                     // If we're moving objects, and we succeeded,
                     // delete them from the original source now.
                     if ($actionID == 'move') {
                         try {
                             $sourceDriver->delete($objectKey, false);
                         } catch (Turba_Exception $e) {
                             $notification->push(sprintf(_("There was an error deleting \"%s\" from the source address book."), $object->getValue('name')), 'horde.error');
                         }
                         /* Log the adding of this item in the history again,
                          * because otherwise the delete log would be after the
                          * add log. */
                         try {
                             $history->log('turba:' . $targetDriver->getName() . ':' . $objAttributes['__uid'], array('action' => 'add'), true);
                         } catch (Exception $e) {
                             Horde::log($e, 'ERR');
                         }
                     }
                 }
                 break;
             case 'add':
                 // Add a contact to a list.
                 $keys = $vars->get('objectkeys');
                 if (!($targetKey = $vars->get('targetList'))) {
                     break;
                 }
                 $args = array();
                 if (strlen($vars->get('targetNew'))) {
                     $targetSource = $vars->get('targetAddressbook');
                     $args['attr'] = array('name' => $targetKey);
                 } else {
                     list($targetSource, $args['gid']) = explode(':', $targetKey, 2);
                     if (!isset($cfgSources[$targetSource])) {
                         break;
                     }
                 }
                 $members = array();
                 foreach ($keys as $key) {
                     $members[] = explode(':', $key, 2);
                 }
                 try {
                     $res = Turba_Object_Group::createGroup($targetSource, $members, $args);
                 } catch (Turba_Exception $e) {
                     $notification->push($e, 'horde.error');
                     break;
                 }
                 if (isset($args['name'])) {
                     $notification->push(sprintf(_("Successfully created the contact list \"%s\"."), $args['name']), 'horde.success');
                 }
                 if (!empty($res->error)) {
                     if ($res->success) {
                         $notification->push(sprintf(_("Error adding %d of %d requested contact(s) to list."), count($res->error), count($res->error) + $res->success), 'horde.error');
                     } else {
                         $notification->push(sprintf(_("Error adding %d contact(s) to list."), count($res->error)), 'horde.error');
                     }
                 } elseif ($res->success) {
                     $notification->push(sprintf(_("Successfully added %d contact(s) to list."), $res->success), 'horde.success');
                 }
                 break;
         }
         // We might get here from the search page but are not allowed to
         // browse the current address book.
         if ($actionID && empty($cfgSources[$source]['browse'])) {
             Horde::url($prefs->getValue('initial_page'), true)->redirect();
         }
     }
     $templates = array();
     if (isset($driver)) {
         Turba::addBrowseJs();
         // Read the columns to display from the preferences.
         $sources = Turba::getColumns();
         $columns = isset($sources[$source]) ? $sources[$source] : array();
         $sortorder = Turba::getPreferredSortOrder();
         if ($vars->get('key')) {
             // We are displaying a list.
             try {
                 $list = $driver->getObject($vars->get('key'));
             } catch (Horde_Exception $e) {
                 $notification->push(_("There was an error displaying the list"), 'horde.error');
                 $list = null;
             }
             if ($list && $list->isGroup()) {
                 $title = sprintf(_("Contacts in list: %s"), $list->getValue('name'));
                 $templates[] = '/browse/header.inc';
                 // Show List Members.
                 try {
                     $results = $list->listMembers($sortorder);
                     if (count($results) != $list->count()) {
                         $count = $list->count() - count($results);
                         $notification->push(sprintf(ngettext("There is %d contact in this list that is not viewable to you", "There are %d contacts in this list that are not viewable to you", $count), $count), 'horde.message');
                     }
                     $view = new Turba_View_List($results, null, $columns);
                     $view->setType('list');
                 } catch (Turba_Exception $e) {
                     $notification->push(_("Failed to browse list"), 'horde.error');
                 }
             }
         } else {
             // We are displaying an address book.
             $title = $cfgSources[$source]['title'];
             $templates[] = '/browse/header.inc';
             if (empty($cfgSources[$source]['browse'])) {
                 $notification->push(_("Your default address book is not browseable."), 'horde.warning');
             } else {
                 $type_filter = array();
                 switch ($vars->get('show')) {
                     case 'contacts':
                         $type_filter = array('__type' => 'Object');
                         break;
                     case 'lists':
                         $type_filter = array('__type' => 'Group');
                         break;
                 }
                 try {
                     $results = $driver->search($type_filter, $sortorder, 'AND', array_merge(array('__uid'), $columns ? $columns : array('name')));
                     $view = new Turba_View_List($results, null, $columns);
                     $view->setType('directory');
                 } catch (Turba_Exception $e) {
                     $notification->push($e, 'horde.error');
                 }
             }
         }
     } else {
         $templates[] = '/browse/header.inc';
     }
     $page_output->addScriptFile('quickfinder.js', 'horde');
     $page_output->addScriptFile('scriptaculous/effects.js', 'horde');
     $page_output->addScriptFile('redbox.js', 'horde');
     $page_output->header(array('title' => $title));
     $notification->notify(array('listeners' => 'status'));
     foreach ($templates as $template) {
         require TURBA_TEMPLATES . $template;
     }
     if (isset($view) && is_object($view)) {
         $view->display();
     }
     $page_output->footer();
 }