Files
server/usr/share/psa-horde/turba/lib/Form/EditAddressBook.php
2026-01-07 20:52:11 +01:00

174 lines
6.2 KiB
PHP

<?php
/**
* Horde_Form for editing address books.
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/apache.
*
* @package Turba
*/
/**
* The Turba_Form_EditAddressBook class provides the form for
* editing an address book.
*
* @author Chuck Hagenbuch <chuck@horde.org>
* @package Turba
*/
class Turba_Form_EditAddressBook extends Horde_Form
{
/**
* Address book being edited
*
* @var Horde_Share_Object
*/
protected $_addressbook;
public function __construct($vars, Horde_Share_Object $addressbook)
{
global $conf, $injector, $registry;
$this->_addressbook = $addressbook;
$owner = $addressbook->get('owner') == $registry->getAuth() ||
(is_null($addressbook->get('owner')) &&
$registry->isAdmin());
parent::__construct(
$vars,
$owner
? sprintf(_("Edit %s"), $addressbook->get('name'))
: $addressbook->get('name')
);
$this->addHidden('', 'a', 'text', true);
$this->addVariable(_("Name"), 'name', 'text', true);
if (!$owner) {
$v = $this->addVariable(_("Owner"), 'owner', 'text', false);
$owner_name = $injector
->getInstance('Horde_Core_Factory_Identity')
->create($addressbook->get('owner'))
->getValue('fullname');
if (trim($owner_name) == '') {
$owner_name = $addressbook->get('owner');
}
$v->setDefault($owner_name ? $owner_name : _("System"));
}
$this->addVariable(_("Description"), 'description', 'longtext', false, false, null, array(4, 60));
/* Subscription URLs. */
$url = $registry->get('webroot', 'horde');
if (isset($conf['urls']['pretty']) &&
$conf['urls']['pretty'] == 'rewrite') {
$webdavUrl = $url . '/rpc/turba/';
$carddavUrl = $url . '/rpc/addressbooks/';
$accountUrl = $url . '/rpc/';
} else {
$webdavUrl = $url . '/rpc.php/turba/';
$carddavUrl = $url . '/rpc.php/addressbooks/';
$accountUrl = $url . '/rpc.php/';
}
try {
$accountUrl = Horde::url($accountUrl, true, -1)
. 'principals/'
. $registry->convertUsername($registry->getAuth(), false) . '/';
if ($addressbook->get('owner')) {
$carddavUrl = Horde::url($carddavUrl, true, -1)
. $registry->convertUsername($registry->getAuth(), false)
. '/'
. $injector->getInstance('Horde_Dav_Storage')
->getExternalCollectionId(
$addressbook->getName(),
'contacts'
)
. '/';
$this->addVariable(
_("CardDAV Subscription URL"), '', 'link', false, false, null,
array(array(
'url' => $carddavUrl,
'text' => $carddavUrl,
'title' => _("Copy this URL to a CardDAV client to subscribe to this address book"),
'target' => '_blank')
)
);
}
$this->addVariable(
_("CardDAV Account URL"), '', 'link', false, false, null,
array(array(
'url' => $accountUrl,
'text' => $accountUrl,
'title' => _("Copy this URL to a CarddAV client to subscribe to all your address books"),
'target' => '_blank')
)
);
} catch (Horde_Exception $e) {
}
$webdavUrl = Horde::url($webdavUrl, true, -1)
. ($addressbook->get('owner')
? $registry->convertUsername($addressbook->get('owner'), false)
: '-system-')
. '/' . $addressbook->getName() . '/';
$this->addVariable(
_("WebDAV URL"), '', 'link', false, false, null,
array(array(
'url' => $webdavUrl,
'text' => $webdavUrl,
'title' => _("Copy this URL to a WebDAV client to browse this address book"),
'target' => '_blank')
)
);
/* Permissions link. */
if (empty($conf['share']['no_sharing']) && $owner) {
$url = Horde::url($registry->get('webroot', 'horde')
. '/services/shares/edit.php')
->add(array('app' => 'turba', 'share' => $addressbook->getName()));
$this->addVariable(
'', '', 'link', false, false, null,
array(array(
'url' => $url,
'text' => _("Change Permissions"),
'onclick' => Horde::popupJs(
$url,
array('params' => array('urlencode' => true)))
. 'return false;',
'class' => 'horde-button',
'target' => '_blank')
)
);
}
$this->setButtons(array(
_("Save"),
array('class' => 'horde-delete', 'value' => _("Delete")),
array('class' => 'horde-cancel', 'value' => _("Cancel"))
));
}
public function execute()
{
switch ($this->_vars->submitbutton) {
case _("Save"):
$this->_addressbook->set('name', $this->_vars->get('name'));
$this->_addressbook->set('desc', $this->_vars->get('description'));
try {
$this->_addressbook->save();
} catch (Horde_Share_Exception $e) {
throw new Turba_Exception(sprintf(_("Unable to save address book \"%s\": %s"), $this->_vars->get('name'), $e->getMessage()));
}
break;
case _("Delete"):
Horde::url('addressbooks/delete.php')
->add('a', $this->_vars->a)
->redirect();
break;
case _("Cancel"):
Horde::url('', true)->redirect();
break;
}
}
}