aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'], 'name' => _('Group Management')); $this->oPage->setBreadcrumbDetails(_('select a group')); $this->oPage->setTitle(_("Group Management")); $name = KTUtil::arrayGet($_REQUEST, 'name'); $show_all = KTUtil::arrayGet($_REQUEST, 'show_all', false); $group_id = KTUtil::arrayGet($_REQUEST, 'group_id'); $search_fields = array(); $search_fields[] = new KTStringWidget(_('Group Name'),_("Enter part of the group's name. e.g. ad will match administrators."), 'name', $name, $this->oPage, true); if (!empty($name)) { $search_results =& Group::getList('WHERE name LIKE "%' . DBUtil::escapeSimple($name) . '%"'); } else if ($show_all !== false) { $search_results =& Group::getList(); } $oTemplating = new KTTemplating; $oTemplate = $oTemplating->loadTemplate("ktcore/principals/groupadmin"); $aTemplateData = array( "context" => $this, "search_fields" => $search_fields, "search_results" => $search_results, ); return $oTemplate->render($aTemplateData); } function do_editGroup() { $this->aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'], 'name' => _('Group Management')); $this->oPage->setBreadcrumbDetails(_('edit group')); $group_id = KTUtil::arrayGet($_REQUEST, 'group_id'); $oGroup = Group::get($group_id); if (PEAR::isError($oGroup) || $oGroup == false) { $this->errorRedirectToMain(_('Please select a valid group.')); } $this->oPage->setTitle(sprintf(_("Edit Group (%s)"), $oGroup->getName())); $edit_fields = array(); $edit_fields[] = new KTStringWidget(_('Group Name'),_('A short name for the group. e.g. administrators.'), 'group_name', $oGroup->getName(), $this->oPage, true); $edit_fields[] = new KTCheckboxWidget(_('Unit Administrators'),_('Should all the members of this group be given unit administration privilidges?'), 'is_unitadmin', $oGroup->getUnitAdmin(), $this->oPage, false); $edit_fields[] = new KTCheckboxWidget(_('System Administrators'),_('Should all the members of this group be given system administration privilidges?'), 'is_sysadmin', $oGroup->getSysAdmin(), $this->oPage, false); // grab all units. $unit = $oGroup->getUnit(); if ($unit == null) { $unitId = 0; } else { $unitId = $unit->getID(); } $oUnits = Unit::getList(); $vocab = array(); $vocab[0] = _('No Unit'); foreach ($oUnits as $oUnit) { $vocab[$oUnit->getID()] = $oUnit->getName(); } $aOptions = array('vocab' => $vocab); $edit_fields[] = new KTLookupWidget(_('Unit'),_('Which Unit is this group part of?'), 'unit_id', $unitId, $this->oPage, false, null, null, $aOptions); $oTemplating = new KTTemplating; $oTemplate = $oTemplating->loadTemplate("ktcore/principals/editgroup"); $aTemplateData = array( "context" => $this, "edit_fields" => $edit_fields, "edit_group" => $oGroup, ); return $oTemplate->render($aTemplateData); } function do_saveGroup() { $group_id = KTUtil::arrayGet($_REQUEST, 'group_id'); $oGroup = Group::get($group_id); if (PEAR::isError($oGroup) || $oGroup == false) { $this->errorRedirectToMain(_('Please select a valid group.')); } $group_name = KTUtil::arrayGet($_REQUEST, 'group_name'); if (empty($group_name)) { $this->errorRedirectToMain(_('Please specify a name for the group.')); } $is_unitadmin = KTUtil::arrayGet($_REQUEST, 'is_unitadmin', false); if ($is_unitadmin !== false) { $is_unitadmin = true; } $is_sysadmin = KTUtil::arrayGet($_REQUEST, 'is_sysadmin', false); if ($is_sysadmin !== false) { $is_sysadmin = true; } $this->startTransaction(); $oGroup->setName($group_name); $oGroup->setUnitAdmin($is_unitadmin); $oGroup->setSysAdmin($is_sysadmin); $unit_id = KTUtil::arrayGet($_REQUEST, 'unit_id', 0); if ($unit_id == 0) { // not set, or set to 0. $oGroup->clearUnit(); // safe. } else { $oGroup->setUnit($unit_id); } $res = $oGroup->update(); if (($res == false) || (PEAR::isError($res))) { return $this->errorRedirectToMain(_('Failed to set group details.')); } $this->commitTransaction(); $this->successRedirectToMain(_('Group details updated.')); } function do_manageusers() { $group_id = KTUtil::arrayGet($_REQUEST, 'group_id'); $oGroup = Group::get($group_id); if ((PEAR::isError($oGroup)) || ($oGroup === false)) { $this->errorRedirectToMain(_('No such group.')); } $this->aBreadcrumbs[] = array('name' => $oGroup->getName()); $this->oPage->setBreadcrumbDetails(_('manage members')); $this->oPage->setTitle(sprintf(_('Manage members of group %s'), $oGroup->getName())); // FIXME replace OptionTransfer.js. me no-likey. // FIXME this is hideous. refactor the transfer list stuff completely. $initJS = 'var optGroup = new OptionTransfer("userSelect","chosenUsers"); ' . 'function startTrans() { var f = getElement("usergroupform"); ' . ' optGroup.saveAddedRightOptions("userAdded"); ' . ' optGroup.saveRemovedRightOptions("userRemoved"); ' . ' optGroup.init(f); }; ' . ' addLoadEvent(startTrans); '; $this->oPage->requireJSStandalone($initJS); $aInitialUsers = $oGroup->getMembers(); $aAllUsers = User::getList(); // FIXME this is massively non-performant for large userbases.. $aGroupUsers = array(); $aFreeUsers = array(); foreach ($aInitialUsers as $oUser) { $aGroupUsers[$oUser->getId()] = $oUser; } foreach ($aAllUsers as $oUser) { if (!array_key_exists($oUser->getId(), $aGroupUsers)) { $aFreeUsers[$oUser->getId()] = $oUser; } } $oTemplating = new KTTemplating; $oTemplate = $oTemplating->loadTemplate("ktcore/principals/groups_manageusers"); $aTemplateData = array( "context" => $this, "edit_group" => $oGroup, 'unused_users' => $aFreeUsers, 'group_users' => $aGroupUsers, ); return $oTemplate->render($aTemplateData); } function do_updateUserMembers() { $group_id = KTUtil::arrayGet($_REQUEST, 'group_id'); $oGroup = Group::get($group_id); if ((PEAR::isError($oGroup)) || ($oGroup === false)) { $this->errorRedirectToMain(_('No such group.')); } $userAdded = KTUtil::arrayGet($_REQUEST, 'userAdded',''); $userRemoved = KTUtil::arrayGet($_REQUEST, 'userRemoved',''); $aUserToAddIDs = explode(",", $userAdded); $aUserToRemoveIDs = explode(",", $userRemoved); $this->startTransaction(); $usersAdded = array(); $usersRemoved = array(); foreach ($aUserToAddIDs as $iUserId ) { if ($iUserId > 0) { $oUser= User::Get($iUserId); $res = $oGroup->addMember($oUser); if (PEAR::isError($res) || $res == false) { $this->errorRedirectToMain(sprintf(_('Unable to add user "%s" to group "%s"'), $oUser->getName(), $oGroup->getName())); } else { $usersAdded[] = $oUser->getName(); } } } // Remove groups foreach ($aUserToRemoveIDs as $iUserId ) { if ($iUserId > 0) { $oUser = User::get($iUserId); $res = $oGroup->removeMember($oUser); if (PEAR::isError($res) || $res == false) { $this->errorRedirectToMain(sprintf(_('Unable to remove user "%s" from group "%s"'), $oUser->getName(), $oGroup->getName())); } else { $usersRemoved[] = $oUser->getName(); } } } $msg = ''; if (!empty($usersAdded)) { $msg .= ' ' . _('Added') . ': ' . join(', ', $usersAdded) . ',
'; } if (!empty($usersRemoved)) { $msg .= ' ' . _('Removed') . ': ' . join(', ',$usersRemoved) . '.'; } $this->commitTransaction(); $this->successRedirectToMain($msg); } // FIXME copy-paste ... function do_managesubgroups() { $group_id = KTUtil::arrayGet($_REQUEST, 'group_id'); $oGroup = Group::get($group_id); if ((PEAR::isError($oGroup)) || ($oGroup === false)) { $this->errorRedirectToMain(_('No such group.')); } $this->aBreadcrumbs[] = array('name' => $oGroup->getName()); $this->oPage->setBreadcrumbDetails(_('manage members')); $this->oPage->setTitle(sprintf(_('Manage members of %s'), $oGroup->getName())); // FIXME replace OptionTransfer.js. me no-likey. // FIXME this is hideous. refactor the transfer list stuff completely. $initJS = 'var optGroup = new OptionTransfer("groupSelect","chosenGroups"); ' . 'function startTrans() { var f = getElement("usergroupform"); ' . ' optGroup.saveAddedRightOptions("groupAdded"); ' . ' optGroup.saveRemovedRightOptions("groupRemoved"); ' . ' optGroup.init(f); }; ' . ' addLoadEvent(startTrans); '; $this->oPage->requireJSStandalone($initJS); $aMemberGroupsUnkeyed = $oGroup->getMemberGroups(); $aMemberGroups = array(); $aMemberIDs = array(); foreach ($aMemberGroupsUnkeyed as $oMemberGroup) { $aMemberIDs[] = $oMemberGroup->getID(); $aMemberGroups[$oMemberGroup->getID()] = $oMemberGroup; } $aGroupArray = GroupUtil::buildGroupArray(); $aAllowedGroupIDs = GroupUtil::filterCyclicalGroups($oGroup->getID(), $aGroupArray); $aAllowedGroupIDs = array_diff($aAllowedGroupIDs, $aMemberIDs); $aAllowedGroups = array(); foreach ($aAllowedGroupIDs as $iAllowedGroupID) { $aAllowedGroups[$iAllowedGroupID] =& Group::get($iAllowedGroupID); } $oTemplating = new KTTemplating; $oTemplate = $oTemplating->loadTemplate("ktcore/principals/groups_managesubgroups"); $aTemplateData = array( "context" => $this, "edit_group" => $oGroup, 'unused_groups' => $aAllowedGroups, 'group_members' => $aMemberGroups, ); return $oTemplate->render($aTemplateData); } function _getUnitName($oGroup) { $u = $oGroup->getUnit(); return $u->getName(); } // FIXME copy-paste ... function do_updateGroupMembers() { $group_id = KTUtil::arrayGet($_REQUEST, 'group_id'); $oGroup = Group::get($group_id); if ((PEAR::isError($oGroup)) || ($oGroup === false)) { $this->errorRedirectToMain('No such group.'); } $groupAdded = KTUtil::arrayGet($_REQUEST, 'groupAdded',''); $groupRemoved = KTUtil::arrayGet($_REQUEST, 'groupRemoved',''); $aGroupToAddIDs = explode(",", $groupAdded); $aGroupToRemoveIDs = explode(",", $groupRemoved); $this->startTransaction(); $groupsAdded = array(); $groupsRemoved = array(); foreach ($aGroupToAddIDs as $iMemberGroupID ) { if ($iMemberGroupID > 0) { $oMemberGroup = Group::get($iMemberGroupID); $res = $oGroup->addMemberGroup($oMemberGroup); if (PEAR::isError($res)) { $this->errorRedirectToMain(sprintf(_("Failed to add %s to %s"), $oMemberGroup->getName(), $oGroup->getName())); exit(0); } else { $groupsAdded[] = $oMemberGroup->getName(); } } } foreach ($aGroupToRemoveIDs as $iMemberGroupID ) { if ($iMemberGroupID > 0) { $oMemberGroup = Group::get($iMemberGroupID); $res = $oGroup->removeMemberGroup($oMemberGroup); if (PEAR::isError($res)) { $this->errorRedirectToMain(sprintf(_("Failed to remove %s from %s"), $oMemberGroup->getName(), $oGroup->getName())); exit(0); } else { $groupsRemoved[] = $oMemberGroup->getName(); } } } $msg = ''; if (!empty($groupsAdded)) { $msg .= ' ' . _('Added') . ': ' . join(', ', $groupsAdded) . ',
'; } if (!empty($groupsRemoved)) { $msg .= ' '. _('Removed'). ': ' . join(', ',$groupsRemoved) . '.'; } $this->commitTransaction(); $this->successRedirectToMain($msg); } function do_addGroup() { $this->aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'], 'name' => _('Group Management')); $this->oPage->setBreadcrumbDetails(_('Add a new group')); $this->oPage->setTitle(_("Add a new group")); $edit_fields = array(); $add_fields[] = new KTStringWidget(_('Group Name'),_('A short name for the group. e.g. administrators.'), 'group_name', null, $this->oPage, true); $add_fields[] = new KTCheckboxWidget(_('Unit Administrators'),_('Should all the members of this group be given unit administration privilidges?'), 'is_unitadmin', false, $this->oPage, false); $add_fields[] = new KTCheckboxWidget(_('System Administrators'),_('Should all the members of this group be given system administration privilidges?'), 'is_sysadmin', false, $this->oPage, false); $oTemplating = new KTTemplating; $oTemplate = $oTemplating->loadTemplate("ktcore/principals/addgroup"); $aTemplateData = array( "context" => $this, "add_fields" => $add_fields, ); return $oTemplate->render($aTemplateData); } function do_createGroup() { $group_name = KTUtil::arrayGet($_REQUEST, 'group_name'); if (empty($group_name)) { $this->errorRedirectToMain(_('Please specify a name for the group.')); } $is_unitadmin = KTUtil::arrayGet($_REQUEST, 'is_unitadmin', false); if ($is_unitadmin !== false) { $is_unitadmin = true; } $is_sysadmin = KTUtil::arrayGet($_REQUEST, 'is_sysadmin', false); if ($is_sysadmin !== false) { $is_sysadmin = true; } $this->startTransaction(); $oGroup =& Group::createFromArray(array( 'sName' => $group_name, 'bIsUnitAdmin' => $is_unitadmin, 'bIsSysAdmin' => $is_sysadmin, )); //$res = $oGroup->create(); //if (($res == false) || (PEAR::isError($res))) { return $this->errorRedirectToMain('Failed to create group "' . $group_name . '"'); } // do i need to "create" $this->commitTransaction(); $this->successRedirectToMain(sprintf(_('Group "%s" created.'), $group_name)); } function do_deleteGroup() { $aErrorOptions = array( 'redirect_to' => array('main'), ); $oGroup = $this->oValidator->validateGroup($_REQUEST['group_id'], $aErrorOptions); $sGroupName = $oGroup->getName(); $res = $oGroup->delete(); $this->oValidator->notError($res, $aErrorOptions); $this->successRedirectToMain(sprintf(_('Group "%s" deleted.'), $sGroupName)); } } ?>