Автор: Chuck Hagenbuch (chuck@horde.org)
Автор: Jon Parise (jon@csh.rit.edu)
Наследование: extends Turba_Object
Пример #1
0
 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();
 }
Пример #2
0
 /**
  * Adds a group (and its members) to the source provided.
  *
  * @param string $name    Group name.
  * @param array $members  An array of members to add to the group. Format
  *                        is the same as the 'array' argument to the
  *                        import() API function.
  * @param array $opts     Additional options:
  * <pre>
  *   - attr: (array) Additional attributes to add to group.
  *   - source: (string) Source to import contacts to.
  * </pre>
  *
  * @return array  An array with the following keys:
  * <pre>
  *   - added: (integer) The number of addresses added to the group.
  *   - uid: (string) The uid of the group object.
  * </pre>
  *
  * @throws Turba_Exception
  */
 public function addGroup($name, $members, array $opts = array())
 {
     global $injector;
     $source = $this->_getSource(isset($opts['source']) ? $opts['source'] : null);
     $driver = $injector->getInstance('Turba_Factory_Driver')->create($source);
     if (!$driver->hasPermission(Horde_Perms::EDIT)) {
         throw new Turba_Exception(_("Permission denied"));
     }
     $group_add = array();
     foreach ($members as $val) {
         $ob = null;
         $result = $driver->search($val);
         if (count($result)) {
             $ob = $result->reset();
         } else {
             try {
                 $ob = $driver->getObject($driver->add($this->_encodeContent($val)));
             } catch (Exception $e) {
             }
         }
         if ($ob) {
             $group_add[] = array($source, $ob->getValue('__key'));
         }
     }
     $res = Turba_Object_Group::createGroup($source, $group_add, array('attr' => array_merge(isset($opts['attr']) ? $opts['attr'] : array(), array('name' => $name))));
     return array('added' => $res->success, 'uid' => $res->group->getValue('__uid'));
 }
Пример #3
0
         $row['__owner'] = $driver->getContactOwner();
         try {
             $driver->add($row);
             $imported++;
         } catch (Turba_Exception $e) {
             $notification->push(sprintf(_("There was an error importing the data: %s"), $e->getMessage()), 'horde.error');
             $error = true;
             break;
         }
     }
 }
 // Now attempt to create Turba group objects.
 foreach ($contact_groups as $group) {
     $attributes = $group;
     unset($attributes['__members']);
     $group_obj = new Turba_Object_Group($driver, $attributes);
     foreach (explode(',', $group['__members']) as $uid) {
         $results = $driver->search(array('__uid' => $uid));
         if (count($results->objects)) {
             $object = array_pop($results->objects);
             $group_obj->addMember($object->getValue('__key'), $object->getSource());
         }
     }
     // We don't actually use the group object to save to storage since
     // it's not an existing group. We use it so it's responsible for
     // properly formatting the __members data, which we pull out and
     // place in the attributes array.
     $attributes['__members'] = $group_obj->getValue('__members');
     $attributes['__type'] = 'group';
     $driver->add($attributes);
 }