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 @@
{i18n}Specify Reason for Delete{/i18n}

{i18n}Please give a reason for deleting these files. This -will be recorded in the documents' "Transaction History"{/i18n}

+will be recorded in the documents' "Transaction History"{/i18n}.

@@ -35,6 +35,7 @@ will be recorded in the documents' "Transaction History"{/i18n}

+ {i18n}Cancel{/i18n}