224 lines
6.3 KiB
PHP
224 lines
6.3 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 1999-2017 Horde LLC (http://www.horde.org/)
|
|
*
|
|
* See the enclosed file COPYING for license information (LGPL-2). If you
|
|
* did not receive this file, see http://www.horde.org/licenses/lgpl.
|
|
*
|
|
* @author Chuck Hagenbuch <chuck@horde.org>
|
|
* @category Horde
|
|
* @license http://www.horde.org/licenses/lgpl LGPL-2
|
|
* @package Horde
|
|
*/
|
|
|
|
require_once __DIR__ . '/../lib/Application.php';
|
|
Horde_Registry::appInit('horde', array(
|
|
'permission' => array('horde:administration:groups')
|
|
));
|
|
|
|
$auth = $injector->getInstance('Horde_Core_Factory_Auth')->create();
|
|
$groups = $injector->getInstance('Horde_Group');
|
|
$vars = $injector->getInstance('Horde_Variables');
|
|
|
|
$form = $groups->readOnly() ? null : 'add.inc';
|
|
$gid = $vars->gid;
|
|
|
|
switch ($vars->actionID) {
|
|
case 'addform':
|
|
try {
|
|
$gid = $groups->create($vars->name);
|
|
$group = $groups->getData($gid);
|
|
$form = 'edit.inc';
|
|
$notification->push(sprintf(_("\"%s\" was added to the groups system."), $vars->name), 'horde.success');
|
|
} catch (Horde_Group_Exception $e) {
|
|
Horde::log($e, 'ERR');
|
|
$notification->push(sprintf(_("Group was not created: %s."), $e->getMessage()), 'horde.error');
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case 'delete':
|
|
if ($groups->readOnly()) {
|
|
break;
|
|
}
|
|
try {
|
|
$group = $groups->getName($gid);
|
|
$form = 'delete.inc';
|
|
} catch (Horde_Group_Exception $e) {
|
|
}
|
|
break;
|
|
|
|
case 'deleteform':
|
|
if ($groups->readOnly() || ($vars->confirm != _("Delete"))) {
|
|
break;
|
|
}
|
|
if (!$groups->exists($gid)) {
|
|
$notification->push(_("Attempt to delete a non-existent group."), 'horde.error');
|
|
break;
|
|
}
|
|
|
|
$name = $groups->getName($gid);
|
|
try {
|
|
$groups->remove($gid);
|
|
$notification->push(sprintf(_("Successfully deleted \"%s\"."), $name), 'horde.success');
|
|
$gid = null;
|
|
} catch (Horde_Group_Exception $e) {
|
|
$notification->push(sprintf(_("Unable to delete \"%s\": %s."), $name, $e->getMessage()), 'horde.error');
|
|
}
|
|
break;
|
|
|
|
case 'edit':
|
|
try {
|
|
$group = $groups->getData($gid);
|
|
$form = 'edit.inc';
|
|
} catch (Horde_Group_Exception $e) {}
|
|
break;
|
|
|
|
case 'editform':
|
|
if ($groups->readOnly()) {
|
|
break;
|
|
}
|
|
try {
|
|
// Add any new users.
|
|
$newuser = $vars->new_user;
|
|
if (!empty($newuser)) {
|
|
if (is_array($newuser)) {
|
|
foreach ($newuser as $new) {
|
|
$groups->addUser($gid, $new);
|
|
}
|
|
} else {
|
|
$groups->addUser($gid, $newuser);
|
|
}
|
|
}
|
|
|
|
// Remove any users marked for purging.
|
|
$removes = $vars->remove;
|
|
if (!empty($removes) && is_array($removes)) {
|
|
foreach ($removes as $user => $junk) {
|
|
$groups->removeUser($gid, $user);
|
|
}
|
|
}
|
|
|
|
// Set the email address of the group.
|
|
$groups->setData($gid, 'email', $vars->email);
|
|
|
|
$notification->push(sprintf(_("Updated \"%s\"."), $groups->getName($gid)), 'horde.success');
|
|
} catch (Horde_Group_Exception $e) {
|
|
$notification->push($e, 'horde.error');
|
|
// restore backup copy
|
|
$group = $restore;
|
|
}
|
|
|
|
try {
|
|
$group = $groups->getData($gid);
|
|
$form = 'edit.inc';
|
|
} catch (Horde_Group_Exception $e) {}
|
|
break;
|
|
}
|
|
|
|
switch ($form) {
|
|
case 'addchild.inc':
|
|
$page_output->addInlineScript(array(
|
|
'$("child").focus()'
|
|
), true);
|
|
break;
|
|
|
|
case 'edit.inc':
|
|
/* Set up the lists. */
|
|
try {
|
|
$users = $groups->listUsers($gid);
|
|
} catch (Horde_Group_Exception $e) {
|
|
$notification->push($e, 'horde.error');
|
|
$users = array();
|
|
}
|
|
|
|
/*
|
|
try {
|
|
$all_users = $group->listAllUsers();
|
|
} catch (Horde_Group_Exception $e) {
|
|
$notification->push($e, 'horde.error');
|
|
$all_users = array();
|
|
}
|
|
$inherited_users = array_diff($all_users, $users);
|
|
*/
|
|
$inherited_users = array();
|
|
|
|
if ($auth->hasCapability('list')) {
|
|
try {
|
|
$user_list = $auth->listUsers();
|
|
} catch (Horde_Auth_Exception $e) {
|
|
$notification->push($e, 'horde.error');
|
|
$user_list = array();
|
|
}
|
|
sort($user_list);
|
|
} else {
|
|
$user_list = array();
|
|
}
|
|
break;
|
|
}
|
|
|
|
$page_output->header(array(
|
|
'title' => _("Group Administration")
|
|
));
|
|
require HORDE_TEMPLATES . '/admin/menu.inc';
|
|
if (!empty($form)) {
|
|
require HORDE_TEMPLATES . '/admin/groups/' . $form;
|
|
}
|
|
|
|
/* Get the perms tree. */
|
|
$nodes = $groups->listAll();
|
|
|
|
/* Set up some node params. */
|
|
$spacer = ' ';
|
|
$group_node = array('icon' => strval(Horde_Themes::img('group.png')));
|
|
$group_url = Horde::url('admin/groups.php', true);
|
|
$edit = $group_url->copy()->add('actionID', 'edit');
|
|
if (!$groups->readOnly()) {
|
|
$add = $group_url->copy()->add('actionID', 'addchild');
|
|
$add_img = Horde_Themes_Image::tag('add_group.png');
|
|
$delete = $group_url->copy()->add('actionID', 'delete');
|
|
$delete_img = Horde_Themes_Image::tag('delete.png', array(
|
|
'alt' => _("Delete Group")
|
|
));
|
|
}
|
|
|
|
/* Set up the tree. */
|
|
$tree = $injector->getInstance('Horde_Core_Factory_Tree')->create('admin_groups', 'Javascript', array(
|
|
'alternate' => true,
|
|
'hideHeaders' => true
|
|
));
|
|
$tree->setHeader(array(
|
|
array(
|
|
'class' => 'horde-tree-spacer'
|
|
)
|
|
));
|
|
|
|
$base_node_params = array(
|
|
'icon' => strval(Horde_Themes::img('administration.png'))
|
|
);
|
|
|
|
foreach ($nodes as $id => $node) {
|
|
$node_params = ($gid == $id) ? array('class' => 'selected') : array();
|
|
|
|
$node_params['url'] = $edit->copy()->add('gid', $id);
|
|
if ($groups->readOnly()) {
|
|
$delete_link = null;
|
|
} else {
|
|
//$add_link = Horde::link($add->copy()->add('gid', $id), sprintf(_("Add a child group to \"%s\""), $name)) . $add_img . '</a>';
|
|
$delete_link = Horde::link($delete->copy()->add('gid', $id), sprintf(_("Delete \"%s\""), $node)) . $delete_img . '</a>';
|
|
}
|
|
|
|
$tree->addNode(array(
|
|
'id' => $id,
|
|
'parent' => null,
|
|
'label' => htmlspecialchars($node),
|
|
'expanded' => false,
|
|
'params' => $group_node + $node_params,
|
|
'right' => array($spacer, $delete_link)
|
|
));
|
|
}
|
|
|
|
echo '<h1 class="header">' . Horde::img('group.png') . ' ' . _("Groups") . '</h1>';
|
|
$tree->renderTree();
|
|
$page_output->footer();
|