From 621262a752de7e44c9fd0247550f00bd64987bc3 Mon Sep 17 00:00:00 2001
From: bshuttle
Date: Thu, 16 Feb 2006 12:34:58 +0000
Subject: [PATCH] - Improvements to move and delete
---
browse.php | 14 ++++++++++++--
lib/groups/GroupUtil.php | 35 +++++++++++++++++++++++++++++++++++
plugins/ktcore/admin/groupManagement.php | 29 ++++++++++++++++++++++++++++-
plugins/ktcore/admin/userManagement.php | 40 +++++++++++++++++++++++++++++++++++-----
templates/ktcore/folder/mass_delete.smarty | 3 ++-
5 files changed, 112 insertions(+), 9 deletions(-)
diff --git a/browse.php b/browse.php
index 83705af..d2f0215 100755
--- a/browse.php
+++ b/browse.php
@@ -563,6 +563,12 @@ class BrowseDispatcher extends KTStandardDispatcher {
$move_code = KTUtil::arrayGet($_REQUEST, 'fMoveCode');
$target_folder = KTUtil::arrayGet($_REQUEST, 'fFolderId');
$reason = KTUtil::arrayGet($_REQUEST, 'sReason');
+ if (empty($reason)) {
+ $_SESSION['KTErrorMessage'][] = _('You must supply a reason.');
+ return $this->do_finaliseMove();
+ }
+
+
// FIXME check perms? or will that happen "lower" in the stack.
@@ -725,10 +731,14 @@ class BrowseDispatcher extends KTStandardDispatcher {
$fFolderId = KTUtil::arrayGet($_REQUEST, 'fFolderId', 1);
- $aErrorOptions = array('message' => _('You must supply a reason'));
+
$res = KTUtil::arrayGet($_REQUEST,'sReason');
- $sReason = $this->oValidator->notEmpty($res, $aErrorOptions);
+ $sReason = $res;
+ if (empty($res)) {
+ $_SESSION['KTErrorMessage'][] = _('You must supply a reason.');
+ return $this->do_startDelete();
+ }
diff --git a/lib/groups/GroupUtil.php b/lib/groups/GroupUtil.php
index 931bea8..ff757d8 100644
--- a/lib/groups/GroupUtil.php
+++ b/lib/groups/GroupUtil.php
@@ -325,6 +325,41 @@ class GroupUtil {
return $aExpandedGroups;
}
// }}}
+
+ // {{{ getMembershipReason
+ function getMembershipReason($oUser, $oGroup) {
+ $aGroupArray = GroupUtil::buildGroupArray();
+
+ // short circuit
+
+ if ($oGroup->hasMember($oUser)) { return sprintf(_('%s is a direct member.'), $oUser->getName()); }
+
+
+ $aSubgroups = (array) $aGroupArray[$oGroup->getId()];
+ if (empty($aSubgroups)) {
+ return null; // not a member, no subgroups.
+ }
+
+ $sTable = KTUtil::getTableName('users_groups');
+ $sQuery = 'SELECT group_id FROM ' . $sTable . ' WHERE user_id = ? AND group_id IN (' . DBUtil::paramArray($aSubgroups) . ')';
+ $aParams = array($oUser->getId());
+ $aParams = array_merge($aParams, $aSubgroups);
+
+ $res = DBUtil::getOneResult(array($sQuery, $aParams));
+ if (PEAR::isError($res)) {
+ return $res;
+ } else if (is_null($res)) {
+ return null; // not a member
+ } // else {
+
+ $oSubgroup = Group::get($res['group_id']);
+ if (PEAR::isError($oSubgroup)) { return $oSubgroup; }
+
+ return sprintf(_('%s is a member of %s'), $oUser->getName(), $oSubgroup->getName()); // could be error, but errors are caught.
+
+ // }
+ }
+ // }}}
}
// }}}
diff --git a/plugins/ktcore/admin/groupManagement.php b/plugins/ktcore/admin/groupManagement.php
index 3d548e4..cb33c30 100755
--- a/plugins/ktcore/admin/groupManagement.php
+++ b/plugins/ktcore/admin/groupManagement.php
@@ -230,9 +230,17 @@ class KTGroupAdminDispatcher extends KTAdminDispatcher {
$usersAdded = array();
$usersRemoved = array();
+ $addWarnings = array();
+ $removeWarnings = array();
+
foreach ($aUserToAddIDs as $iUserId ) {
if ($iUserId > 0) {
$oUser= User::Get($iUserId);
+ $memberReason = GroupUtil::getMembershipReason($oUser, $oGroup);
+ //var_dump($memberReason);
+ if (!(PEAR::isError($memberReason) || is_null($memberReason))) {
+ $addWarnings[] = $memberReason;
+ }
$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()));
@@ -247,10 +255,29 @@ class KTGroupAdminDispatcher extends KTAdminDispatcher {
$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(); }
+ } else {
+ $usersRemoved[] = $oUser->getName();
+ $memberReason = GroupUtil::getMembershipReason($oUser, $oGroup);
+ //var_dump($memberReason);
+ if (!(PEAR::isError($memberReason) || is_null($memberReason))) {
+ $removeWarnings[] = $memberReason;
+ }
+ }
}
}
+ if (!empty($addWarnings)) {
+ $sWarnStr = _('Warning: some users were already members of some subgroups') . ' — ';
+ $sWarnStr .= implode(', ', $addWarnings);
+ $_SESSION['KTInfoMessage'][] = $sWarnStr;
+ }
+
+ if (!empty($removeWarnings)) {
+ $sWarnStr = _('Warning: some users are still members of some subgroups') . ' — ';
+ $sWarnStr .= implode(', ', $removeWarnings);
+ $_SESSION['KTInfoMessage'][] = $sWarnStr;
+ }
+
$msg = '';
if (!empty($usersAdded)) { $msg .= ' ' . _('Added') . ': ' . join(', ', $usersAdded) . ',
'; }
if (!empty($usersRemoved)) { $msg .= ' ' . _('Removed') . ': ' . join(', ',$usersRemoved) . '.'; }
diff --git a/plugins/ktcore/admin/userManagement.php b/plugins/ktcore/admin/userManagement.php
index b305ef5..1618fc9 100755
--- a/plugins/ktcore/admin/userManagement.php
+++ b/plugins/ktcore/admin/userManagement.php
@@ -463,14 +463,25 @@ class KTUserAdminDispatcher extends KTAdminDispatcher {
$this->startTransaction();
$groupsAdded = array();
$groupsRemoved = array();
+
+ $addWarnings = array();
+ $removeWarnings = array();
foreach ($aGroupToAddIDs as $iGroupID ) {
if ($iGroupID > 0) {
$oGroup = Group::get($iGroupID);
+ $memberReason = GroupUtil::getMembershipReason($oUser, $oGroup);
+ //var_dump($memberReason);
+ if (!(PEAR::isError($memberReason) || is_null($memberReason))) {
+ $addWarnings[] = $memberReason;
+ }
$res = $oGroup->addMember($oUser);
if (PEAR::isError($res) || $res == false) {
$this->errorRedirectToMain(sprintf(_('Unable to add user to group "%s"'), $oGroup->getName()));
- } else { $groupsAdded[] = $oGroup->getName(); }
+ } else {
+ $groupsAdded[] = $oGroup->getName();
+
+ }
}
}
@@ -481,13 +492,32 @@ class KTUserAdminDispatcher extends KTAdminDispatcher {
$res = $oGroup->removeMember($oUser);
if (PEAR::isError($res) || $res == false) {
$this->errorRedirectToMain(sprintf(_('Unable to remove user from group "%s"'), $oGroup->getName()));
- } else { $groupsRemoved[] = $oGroup->getName(); }
+ } else {
+ $groupsRemoved[] = $oGroup->getName();
+ $memberReason = GroupUtil::getMembershipReason($oUser, $oGroup);
+ //var_dump($memberReason);
+ if (!(PEAR::isError($memberReason) || is_null($memberReason))) {
+ $removeWarnings[] = $memberReason;
+ }
+ }
}
- }
+ }
+
+ if (!empty($addWarnings)) {
+ $sWarnStr = _('Warning: the user was already a member of some subgroups') . ' — ';
+ $sWarnStr .= implode(', ', $addWarnings);
+ $_SESSION['KTInfoMessage'][] = $sWarnStr;
+ }
+
+ if (!empty($removeWarnings)) {
+ $sWarnStr = _('Warning: the user is still a member of some subgroups') . ' — ';
+ $sWarnStr .= implode(', ', $removeWarnings);
+ $_SESSION['KTInfoMessage'][] = $sWarnStr;
+ }
$msg = '';
- if (!empty($groupsAdded)) { $msg .= ' ' . _('Added to groups') . ': ' . join(', ', $groupsAdded) . ',
'; }
- if (!empty($groupsRemoved)) { $msg .= ' ' . _('Removed from groups') . ': ' . join(', ',$groupsRemoved) . '.'; }
+ if (!empty($groupsAdded)) { $msg .= ' ' . _('Added to groups') . ': ' . implode(', ', $groupsAdded) . '
'; }
+ if (!empty($groupsRemoved)) { $msg .= ' ' . _('Removed from groups') . ': ' . implode(', ',$groupsRemoved) . '.'; }
$this->commitTransaction();
$this->successRedirectToMain($msg);
diff --git a/templates/ktcore/folder/mass_delete.smarty b/templates/ktcore/folder/mass_delete.smarty
index 5ab6780..e6205fc 100644
--- a/templates/ktcore/folder/mass_delete.smarty
+++ b/templates/ktcore/folder/mass_delete.smarty
@@ -4,7 +4,7 @@
@@ -35,6 +35,7 @@ will be recorded in the documents' "Transaction History"{/i18n}
--
libgit2 0.21.4