/** * AJAX action: Get entry data. * * Variables used: * - key: (string) UID of entry. * - source: (string) UID of source addressbook. * * @return object TODO * - entry: (array) * - error: (boolean) * - group: (array) */ public function smartmobileEntry() { global $attributes, $cfgSources, $injector, $notification, $registry; $contact = null; $out = new stdClass(); $source = $this->vars->get('source'); if (isset($cfgSources[$source])) { try { $contact = $injector->getInstance('Turba_Factory_Driver')->create($source)->getObject($this->vars->get('key')); } catch (Horde_Exception $e) { } } if (is_null($contact)) { $notification->push(_("Addressbook entry could not be loaded."), 'horde.error'); $out->error = true; return $out; } $out->entry = array(); if (!count($tabs = $contact->driver->tabs)) { $tabs = array(_("Entries") => array_keys($contact->driver->getCriteria())); } foreach ($tabs as $key => $val) { foreach ($val as $val2) { if (strlen($val3 = $contact->getValue($val2))) { $url = null; switch ($val2) { case 'email': case 'emails': $addrs = $GLOBALS['injector']->getInstance('Horde_Mail_Rfc822')->parseAddressList($val3, array('limit' => $val2 == 'emails' ? 0 : 1)); foreach ($addrs as $addr) { $addr = $addr->writeAddress(true); try { $url = strval($registry->call('mail/compose', array(array('to' => $addr)))); } catch (Horde_Exception $e) { } $out->entry[$key][] = array_filter(array('l' => $attributes[$val2]['label'], 'u' => $url, 'v' => $addr)); } continue 2; } $out->entry[$key][] = array_filter(array('l' => $attributes[$val2]['label'], 'u' => $url, 'v' => $val3)); } } } if ($contact->isGroup()) { $members = $contact->listMembers(); $members->reset(); $url = new Horde_Core_Smartmobile_Url(); $url->setAnchor('entry'); $out->group = array('l' => _("Contact List Members"), 'm' => array()); while ($ob = $members->next()) { $out->group['m'][] = array('n' => strlen($name = Turba::formatName($ob)) ? $name : '[' . _("No Name") . ']', 'u' => strval($url->copy()->setRaw(true)->add(array('key' => $ob->getValue('__key'), 'source' => $ob->getSource())))); } } return $out; }