getMember();
foreach ($objArrayMembers as $strMember)
{
$pobjRoleDst->addMember($strMember);
}
return $objArrayMembers->count();
}
/**
* Copie les permissions d'un role vers un autre
*
* @param com_borealis_acl_object_Role &$pobjRoleDst Role de destination
* @param com_borealis_acl_object_Role &$pobjRoleSrc Role source
*
* @return int Nombre de permission copier
*/
function copyPermission(com_borealis_acl_object_Role &$pobjRoleDst, com_borealis_acl_object_Role &$pobjRoleSrc)
{
$objArrayPermissions = $pobjRoleSrc->getPermission();
foreach ($objArrayPermissions as $objArrayPermission)
{
$pobjRoleDst->addPermission($objArrayPermission['ressource'], $objArrayPermission['action']);
}
return $objArrayPermissions->count();
}
/**
* Ajout un role
*
* @return void
*/
function addRole()
{
global $g_strErrorAddRole;
global $g_strInfoMessage;
if (isset($_REQUEST['name']) && trim($_REQUEST['name']) != '')
{
try
{
$objRoleDst = com_borealis_acl_object_Role::create(trim($_REQUEST['name']));
$iNbCopyMember = 0;
$iNbCopyPermission = 0;
switch($_REQUEST['copy'])
{
case '0': // Empty
break;
case '1': // Member
$objRoleSrcMember = com_borealis_acl_object_Role::getByName($_REQUEST['copy_member']);
$iNbCopyMember = copyMember($objRoleDst, $objRoleSrcMember);
break;
case '2': // Permission
$objRoleSrcPermission = com_borealis_acl_object_Role::getByName($_REQUEST['copy_permission']);
$iNbCopyPermission = copyPermission($objRoleDst, $objRoleSrcPermission);
break;
case '3': // Member & Permission
$objRoleSrcMember = com_borealis_acl_object_Role::getByName($_REQUEST['copy_member']);
$objRoleSrcPermission = com_borealis_acl_object_Role::getByName($_REQUEST['copy_permission']);
$iNbCopyMember = copyMember($objRoleDst, $objRoleSrcMember);
$iNbCopyPermission = copyPermission($objRoleDst, $objRoleSrcPermission);
break;
}
$g_strInfoMessage = sprintf(gettext('info_add_role'), $objRoleDst->getName(), $iNbCopyMember, $iNbCopyPermission);
}
catch(com_borealis_acl_exception_SQLException $objError)
{
$g_strErrorAddRole .= sprintf(gettext('error_role_exist'), trim($_REQUEST['name']));
}
}
else
{
$g_strErrorAddRole .= gettext('error_role_empty');
}
}
/**
* Ajout des membres à un role
*
* @return void
*/
function addMember()
{
global $g_strErrorAddMember;
global $g_strInfoMessage;
if (!isset($_REQUEST['role']) || trim($_REQUEST['role']) == '')
{
$g_strErrorAddMember .= gettext('error_no_role');
return;
}
if (isset($_REQUEST['username']) && trim($_REQUEST['username']) != '')
{
$objRole = com_borealis_acl_object_Role::getByName($_REQUEST['role']);
$objArrayUsernames = explode(';', trim($_REQUEST['username']));
foreach ($objArrayUsernames as $strUsername)
{
$strUsername = trim($strUsername);
if ($strUsername != '')
{
try
{
$objRole->addMember($strUsername);
$g_strInfoMessage .= sprintf(gettext('info_add_member').'
', $strUsername, $objRole->getName());
}
catch(com_borealis_acl_exception_SQLException $objError)
{
$g_strErrorAddMember .= sprintf(gettext('error_exist_role_member').'
', $strUsername, $objRole->getName());
}
}
}
}
else
{
$g_strErrorAddMember .= gettext('error_empty_username');
}
}
/**
* Suppression d'un membre à un role
*
* @return void
*/
function deleteMember()
{
global $g_strInfoMessage;
$objRole = com_borealis_acl_object_Role::getByName($_REQUEST['role']);
$objRole->removeMember($_REQUEST['username']);
$g_strInfoMessage = sprintf(gettext('info_delete_member'), $_REQUEST['username'], $objRole->getName());
}
/**
* Suppression d'un ou plusieurs membres à un role
*
* @return void
*/
function deleteMembers()
{
global $g_strInfoMessage;
$objRole = com_borealis_acl_object_Role::getByName($_REQUEST['role']);
foreach ($_REQUEST['members'] as $strMember)
{
$objRole->removeMember($strMember);
$g_strInfoMessage .= sprintf(gettext('info_delete_member').'
', $strMember, $objRole->getName());
}
}
/**
* Suppression d'un role
*
* @return void
*/
function deleteRole()
{
global $g_strInfoMessage;
$objRole = com_borealis_acl_object_Role::getByName($_REQUEST['role']);
try
{
$objRole->remove();
$g_strInfoMessage = sprintf(gettext('info_delete_role'), $objRole->getName());
}
catch(Exception $objError)
{
global $g_strErrorDeleteMember;
$g_strErrorDeleteMember .= sprintf(gettext('error_delete_role'), $objRole->getName());
}
}
/**
* Mise à jour du nom de role
*
* @return void
*/
function updateRole()
{
global $g_strErrorDeleteMember;
global $g_strInfoMessage;
if (isset($_REQUEST['name']) && trim($_REQUEST['name']) != '')
{
$strNewRole = trim($_REQUEST['name']);
$objRole = com_borealis_acl_object_Role::getByName($_REQUEST['role']);
try
{
$objRole->setName($strNewRole);
$g_strInfoMessage = sprintf(gettext('info_update_role'), $_REQUEST['role'], $objRole->getName());
}
catch(Exception $objError)
{
$g_strErrorDeleteMember = sprintf(gettext('error_update_role'), $objRole->getName(), $strNewRole);
}
}
else
{
$g_strErrorDeleteMember .= gettext('error_role_empty');
}
}
/**
* Ajout de permissions à un role
*
* @return void
*/
function addPermission()
{
global $g_strErrorAddPermission;
global $g_strInfoMessage;
$objRole = com_borealis_acl_object_Role::getByName($_REQUEST['role']);
if (isset($_REQUEST['permission']))
{
foreach ($_REQUEST['permission'] as $strPermission)
{
$objArrayInfo = explode('_', $strPermission);
$objRessource = com_borealis_acl_object_Ressource::getByID((int)$objArrayInfo[0]);
$objAction = com_borealis_acl_object_Action::getByID((int)$objArrayInfo[1]);
try
{
$objRole->addPermission($objRessource, $objAction);
$g_strInfoMessage .= sprintf(gettext('info_add_permission').'
', $objRessource->getName(), $objAction->getName(), $objRole->getName());
}
catch(com_borealis_acl_exception_SQLException $objError)
{
$g_strErrorAddPermission .= sprintf(gettext('error_add_permission').'
', $objRessource->getName(), $objAction->getName(), $objRole->getName());
}
}
}
}
/**
* Suppression d'une permission à un role
*
* @return void
*/
function deletePermission()
{
global $g_strInfoMessage;
$objRole = com_borealis_acl_object_Role::getByName($_REQUEST['role']);
$objRessource = com_borealis_acl_object_Ressource::getByID((int)$_REQUEST['ressourceid']);
$objAction = com_borealis_acl_object_Action::getByID((int)$_REQUEST['actionid']);
$objRole->removePermission($objRessource, $objAction);
$g_strInfoMessage = sprintf(gettext('info_delete_permission'), $objRessource->getName(), $objAction->getName(), $objRole->getName());
}
/**
* Suppression d'une ou plusieurs permissions à un role
*
* @return void
*/
function deletePermissions()
{
global $g_strInfoMessage;
$objRole = com_borealis_acl_object_Role::getByName($_REQUEST['role']);
foreach ($_REQUEST['permissions'] as $strPermission)
{
$objArrayPermissions = explode('-', $strPermission, 2);
$strRessource = $objArrayPermissions[0];
$strAction = $objArrayPermissions[1];
$objRessource = com_borealis_acl_object_Ressource::getByID((int)$strRessource);
$objAction = com_borealis_acl_object_Action::getByID((int)$strAction);
$objRole->removePermission($objRessource, $objAction);
$g_strInfoMessage .= sprintf(gettext('info_delete_permission').'
', $objRessource->getName(), $objAction->getName(), $objRole->getName());
}
}
if (isset($_REQUEST['action']))
{
switch($_REQUEST['action'])
{
case 'add_role':
addRole();
break;
case 'add_member':
addMember();
break;
case 'delete_member':
deleteMember();
break;
case 'delete_members':
deleteMembers();
break;
case 'delete_role':
deleteRole();
break;
case 'add_permission':
addPermission();
break;
case 'delete_permission':
deletePermission();
break;
case 'delete_permissions':
deletePermissions();
break;
case 'update_role':
updateRole();
break;
}
}
// -----------------------------------------------
// --- Smarty display
// -----------------------------------------------
$g_objSmarty->assign('ressources', com_borealis_acl_object_Ressource::getAll());
$g_objSmarty->assign('roles', com_borealis_acl_object_Role::getAll());
$g_objSmarty->assign('errorAddRole', $g_strErrorAddRole);
$g_objSmarty->assign('errorAddMember', $g_strErrorAddMember);
$g_objSmarty->assign('errorDeleteMember', $g_strErrorDeleteMember);
$g_objSmarty->assign('errorAddPermission', $g_strErrorAddPermission);
$g_objSmarty->assign('infoMessage', $g_strInfoMessage);
$g_objSmarty->display('roles.tpl');
?>