hasMaxContacts() public static method

Checks the max_contacts permission.
public static hasMaxContacts ( Turba_Driver $driver, boolean $notify = true ) : string
$driver Turba_Driver The address book to check.
$notify boolean If true, outputs error to notification.
return string Error message if maximum contacts have been reached. False otherwise.
Ejemplo n.º 1
0
Archivo: add.php Proyecto: horde/horde
/* Exit with an error message if there are no sources to add to. */
if (!$addSources) {
    $notification->push(_("There are no writeable address books. None of the available address books are configured to allow you to add new entries to them. If you believe this is an error, please contact your system administrator."), 'horde.error');
    $url = $url ? Horde::url($url, true) : Horde::url('index.php', true);
    $url->redirect();
}
/* A source has been selected, connect and set up the fields. */
if ($source) {
    try {
        $driver = $injector->getInstance('Turba_Factory_Driver')->create($source);
    } catch (Turba_Exception $e) {
        $notification->push($e, 'horde.error');
        $driver = null;
    }
    if (!is_null($driver)) {
        if (Turba::hasMaxContacts($driver)) {
            $url = $url ? Horde::url($url, true) : Horde::url('index.php', true);
            $url->redirect();
        }
        $contact = new Turba_Object($driver);
    }
}
/* Set up the form. */
$form = new Turba_Form_AddContact($vars, $contact);
/* Validate the form. */
if ($form->validate()) {
    $form->execute();
}
Horde::startBuffer();
$notification->notify(array('listeners' => 'status'));
$form->renderActive($form->getRenderer(), $vars, Horde::url('add.php'), 'post');
Ejemplo n.º 2
0
Archivo: data.php Proyecto: horde/horde
    } catch (Horde_Exception $e) {
        $notification->push(_("This file format is not supported."), 'horde.error');
        $next_step = Horde_Data::IMPORT_FILE;
    }
}
/* Loop through the action handlers. */
switch ($vars->actionID) {
    case Horde_Data::IMPORT_FILE:
        try {
            $driver = $injector->getInstance('Turba_Factory_Driver')->create($vars->dest);
        } catch (Horde_Exception $e) {
            $notification->push($e, 'horde.error');
            $error = true;
            break;
        }
        if (Turba::hasMaxContacts($driver, true)) {
            $error = true;
        } else {
            $data->storage->set('target', $vars->dest);
            $data->storage->set('purge', $vars->purge);
        }
        break;
    case Horde_Data::IMPORT_MAPPED:
    case Horde_Data::IMPORT_DATETIME:
        foreach ($cfgSources[$data->storage->get('target')]['map'] as $field => $null) {
            if (substr($field, 0, 2) != '__' && !is_array($null)) {
                switch ($attributes[$field]['type']) {
                    case 'monthyear':
                    case 'monthdayyear':
                        $time_fields[$field] = 'date';
                        break;
Ejemplo n.º 3
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();
 }
Ejemplo n.º 4
0
 /**
  * Add members to a group, creating the group if necessary.
  *
  * @param string $source  Destination source.
  * @param array $members  Members of the group. Array of two-element
  *                        arrays: source and key.
  * @param array $opts     Additional options:
  * <pre>
  *  - attr: (array) Array of attributes to use to create a new group.
  *          This should include 'name' at a minimum.
  *  - gid: (string) Existing Group ID.
  *  - name: (string) Group Name.
  * </pre>
  *
  * @return object  Object with the following properties:
  * <pre>
  *   - errors: (array) List of errors when adding members.
  *   - group: (Turba_Object_Group) Group object.
  *   - success: (integer) Number of members sucessfully added.
  * </pre>
  *
  * @throws Turba_Exception
  */
 public static function createGroup($source, $members, array $opts = array())
 {
     global $injector;
     /* Throws Turba_Exception */
     $driver = $injector->getInstance('Turba_Factory_Driver')->create($source);
     if (isset($opts['gid'])) {
         /* Throws Turba_Exception */
         $group = $driver->getObject($opts['gid']);
     } elseif (isset($opts['attr']) && is_array($opts['attr'])) {
         if ($error = Turba::hasMaxContacts($driver)) {
             throw new Turba_Exception($error);
         }
         $newGroup = array_merge($opts['attr'], array('__owner' => $driver->getContactOwner(), '__type' => 'Group'));
         try {
             $group = $driver->getObject($driver->add($newGroup));
         } catch (Turba_Exception $e) {
         }
     } else {
         $group = null;
     }
     if (empty($group) || !$group->isGroup()) {
         throw new Turba_Exception(_("Could not create or add to group."));
     }
     $out = new stdClass();
     $out->errors = array();
     $out->success = 0;
     $out->group = $group;
     // Adding contact to an existing list.
     foreach ($members as $key) {
         try {
             $group->addMember($key[1], $key[0]);
             ++$out->success;
         } catch (Turba_Exception $e) {
             $out->errors[] = $e;
         }
         $group->store();
     }
     return $out;
 }