Skip to content

Commit

Permalink
First step on assign subgroups to a groups, on member page is possibl…
Browse files Browse the repository at this point in the history
…e to associate users or/and groups to a groups
  • Loading branch information
joubertredrat committed May 29, 2015
1 parent 6b108b2 commit 7933556
Show file tree
Hide file tree
Showing 13 changed files with 243 additions and 92 deletions.
98 changes: 98 additions & 0 deletions actions/assign_togroup.php
@@ -0,0 +1,98 @@
<?php if (!defined('ACTION_HANDLING')) { die("HaHa!"); }
$appEngine->forwardInvalidModule( !$appEngine->isGroupEditActive() );

// Parameters.
$selusers = get_request_var('selusers');
$selgroups = get_request_var('selgroups');
$selsubgroups = get_request_var('selsubgroups');

if ($selusers == NULL)
$selusers = get_request_var("selected_users");

if ($selgroups == NULL)
$selgroups = get_request_var("selected_groups");

if ($selsubgroups == NULL)
$selsubgroups = get_request_var("selected_subgroups");

if ($selusers != NULL && count($selusers) > 0 && empty($selusers[0]))
{
$selusers = NULL;
}

if ($selgroups != NULL && count($selgroups) > 0 && empty($selgroups[0]))
{
$selgroups = NULL;
}

if ($selsubgroups != NULL && count($selsubgroups) > 0 && empty($selsubgroups[0]))
{
$selsubgroups = NULL;
}

// Validate.
if( ($selusers == NULL && $selsubgroups == NULL) || $selgroups == NULL )
{
$appEngine->addException(new ValidationException(tr("You have to select at least one user and one group.")));
}
// Do assignments.
else
{
// Count of: All, Done, Failed
$cntAll = count($selgroups) * count($selusers);
try
{
// Iterate all selected users and groups.
for( $i=0; $i<count($selgroups); $i++ )
{
$oG = new \svnadmin\core\entities\Group;
$oG->id = $selgroups[$i];
$oG->name = $selgroups[$i];

for( $k=0; $k<count($selsubgroups); $k++ )
{
$oS = new \svnadmin\core\entities\Group;
$oS->id = $selsubgroups[$k];
$oS->name = $selsubgroups[$k];
if ($oG->name != $oS->name)
{
if ($appEngine->getGroupEditProvider()->assignSubgroupToGroup($oS, $oG))
{
$appEngine->getGroupEditProvider()->save();
$appEngine->addMessage(tr("The group %0 is now a member of group %1", array($oS->name, $oG->name)));
}
else
{
$appEngine->addException(new Exception(tr("Can not add group %0 as member of group %1.", array($oS->name, $oG->name))));
}
}
else
{
$appEngine->addException(new Exception(tr("Can not add group %0 as member of group %1, is same group.", array($oS->name, $oG->name))));
}
} //for

for( $j=0; $j<count($selusers); $j++ )
{
$oU = new \svnadmin\core\entities\User;
$oU->id = $selusers[$j];
$oU->name = $selusers[$j];

if ($appEngine->getGroupEditProvider()->assignUserToGroup($oU, $oG))
{
$appEngine->getGroupEditProvider()->save();
$appEngine->addMessage(tr("The user %0 is now a member of group %1", array($oU->name, $oG->name)));
}
else
{
$appEngine->addException(new Exception(tr("Can not add user %0 as member of group %1.", array($oU->name, $oG->name))));
}
} //for
} //for
}
catch (Exception $ex)
{
$appEngine->addException($ex);
}
}
?>
66 changes: 0 additions & 66 deletions actions/assign_usertogroup.php

This file was deleted.

17 changes: 12 additions & 5 deletions classes/core/interfaces/IGroupEditProvider.iface.php
Expand Up @@ -34,24 +34,31 @@ public function addGroup( $objGroup );
* @return bool
*/
public function deleteGroup( $objGroup );

/**
* Assigns the user to group.
* @param $objUser
* @param $objGroup
* @return bool
* @return bool
*/
public function assignUserToGroup( $objUser, $objGroup );


/**
* Assigns the subgroup to group.
* @param $objSubgroup
* @param $objGroup
* @return bool
*/
public function assignSubgroupToGroup( $objSubgroup, $objGroup );

/**
* Removes the user from group.
* @param $objUser
* @param $objGroup
* @return bool
*/
*/
public function removeUserFromGroup( $objUser, $objGroup );


/**
* Removes the user from all groups where he is associated.
* @param User $objUser
Expand Down
9 changes: 9 additions & 0 deletions classes/providers/AuthFileGroupAndPathsProvider.class.php
Expand Up @@ -225,6 +225,15 @@ public function assignUserToGroup( $objUser, $objGroup )
return $this->m_authfile->addUserToGroup( $objGroup->name, $objUser->name );
}

/**
* (non-PHPdoc)
* @see svnadmin\core\interfaces.IGroupEditProvider::assignSubgroupToGroup()
*/
public function assignSubgroupToGroup( $objSubgroup, $objGroup )
{
return $this->m_authfile->addSubgroupToGroup( $objGroup->name, $objSubgroup->name );
}

/**
* (non-PHPdoc)
* @see svnadmin\core\interfaces.IGroupEditProvider::removeUserFromGroup()
Expand Down
6 changes: 3 additions & 3 deletions usergroupassign.php → groupassign.php
Expand Up @@ -27,13 +27,13 @@
$appEngine->checkUserAuthentication(true, ACL_MOD_GROUP, ACL_ACTION_ASSIGN);

// Load language.
$appTR->loadModule("usergroupassign");
$appTR->loadModule("groupassign");

// Form request.
$assign = check_request_var('assign');
if($assign)
{
$appEngine->handleAction('assign_usertogroup');
$appEngine->handleAction('assign_togroup');
}

// User list.
Expand All @@ -46,7 +46,7 @@
$o = new \svnadmin\core\entities\User;
$o->id = '*';
$o->name = '*';

$users = remove_item_by_value($users, $o, true);
usort($users, array('\svnadmin\core\entities\User',"compare"));
}
Expand Down
94 changes: 84 additions & 10 deletions include/ifcorelib/IF_SVNAuthFileC.class.php
Expand Up @@ -107,10 +107,10 @@ public function save($path = null)
}
return false;
}

/**
* Gets all existing aliases.
*
*
* @return array <string>
*/
public function aliases()
Expand Down Expand Up @@ -148,13 +148,13 @@ public function repositories()

return $ret;
}

/**
* Resolves the given alias to its real value.
*
*
* @param string $alias
*
* @return string
*
* @return string
*/
public function getAliasValue($alias)
{
Expand Down Expand Up @@ -183,7 +183,10 @@ public function usersOfGroup($group)

for ($i = 0; $i < $arrUsersLen; ++$i)
{
$arrUsers[$i] = trim($arrUsers[$i]);
if (strpos($arrUsers[$i], '@') === false)
$arrUsers[$i] = trim($arrUsers[$i]);
else
unset($arrUsers[$i]);
}

return $arrUsers;
Expand All @@ -192,6 +195,36 @@ public function usersOfGroup($group)
return array();
}

/**
* Gets all subgroups of the given group.
*
* @param string $group
*
* @return array<string>
*/
public function groupsOfGroup($group)
{
$groupString = $this->config->getValue($this->GROUP_SECTION, $group);

if ($groupString != null)
{
$arrGroups = explode(',', $groupString);
$arrGroupsLen = count($arrGroups);

for ($i = 0; $i < $arrGroupsLen; ++$i)
{
if(strpos($arrGroups[$i], '@') !== false)
$arrGroups[$i] = str_replace('@', '', trim($arrGroups[$i]));
else
unset($arrGroups[$i]);
}

return $arrGroups;
}

return array();
}

/**
* Gets all assigned members and groups which are directly assigned
* to the given repository path.
Expand Down Expand Up @@ -469,9 +502,11 @@ public function addUserToGroup($groupname, $username)
return false;
}

// Get current users.
// Get current users and groups.
$users = $this->usersOfGroup($groupname);
if (!is_array($users))
$groups = $this->groupsOfGroup($groupname);

if (!is_array($users) || !is_array($groups))
{
return false;
}
Expand All @@ -487,10 +522,49 @@ public function addUserToGroup($groupname, $username)
$users[] = $username;

// Set changes to config.
$this->config->setValue($this->GROUP_SECTION, $groupname, join(',', $users));
$this->config->setValue($this->GROUP_SECTION, $groupname, ($groups ? '@' . join(',@', $groups) . ',' : '') . join(',', $users));
return true;
}

/**
* Adds the subgroup to group.
*
* @param string $groupname
* @param string $subgroupname
*
* @return bool
*/
public function addSubgroupToGroup($groupname, $subgroupname)
{
if (!self::groupExists($groupname) || !self::groupExists($subgroupname))
{
return false;
}

// Get current users and groups.
$users = $this->usersOfGroup($groupname);
$groups = $this->groupsOfGroup($groupname);

if (!is_array($users) || !is_array($groups))
{
return false;
}

// NOTE: Its no longer an error when the subgroup is already in group!!!
// Check whether the subgroup is already in group.
if (in_array($subgroupname, $groups))
{
return true;
}

// Add subgroup to groups array.
$groups[] = $subgroupname;

// Set changes to config.
$this->config->setValue($this->GROUP_SECTION, $groupname, '@' . join(',@', $groups) . ($users ? ',' . join(',', $users) : ''));
return true;
}

/**
* Checks whether the user is in the given group.
*
Expand Down
2 changes: 1 addition & 1 deletion pages/global-navigation.php
Expand Up @@ -26,7 +26,7 @@
<ul class="ddm-sub">
<?php if (HasAccess(ACL_MOD_GROUP, ACL_ACTION_VIEW)){?><li><a href="grouplist.php"><?php Translate("List"); ?></a></li><?php } ?>
<?php if (IsProviderActive(PROVIDER_GROUP_EDIT) && HasAccess(ACL_MOD_GROUP, ACL_ACTION_ADD)){?><li><a href="groupcreate.php"><?php Translate("Add"); ?></a></li><?php } ?>
<?php if (IsProviderActive(PROVIDER_GROUP_EDIT) && HasAccess(ACL_MOD_GROUP, ACL_ACTION_ASSIGN)){?><li><a href="usergroupassign.php"><?php Translate("Memberships"); ?></a></li><?php } ?>
<?php if (IsProviderActive(PROVIDER_GROUP_EDIT) && HasAccess(ACL_MOD_GROUP, ACL_ACTION_ASSIGN)){?><li><a href="groupassign.php"><?php Translate("Memberships"); ?></a></li><?php } ?>
</ul>
</li>
<?php } ?>
Expand Down

0 comments on commit 7933556

Please sign in to comment.