Beispiel #1
0
function applyOrgPermission($smarty, $module_name, $local_templates_dir, &$pDB, $arrConf, $arrCredentiasls)
{
    $pACL = new paloACL($pDB);
    $pORGZ = new paloSantoOrganization($pDB);
    $arrGroups = array();
    $arrOrgz = array();
    $idOrgFil = getParameter("idOrganization");
    $filter_resource = getParameter("resource_apply");
    $error = false;
    $orgTmp = $pORGZ->getOrganizationById($idOrgFil);
    //valido exista una organizacion con dicho id
    if ($orgTmp === false) {
        $error = true;
        $msg_error = _tr($pORGZ->errMsg);
    } elseif (count($orgTmp) == 0) {
        $error = true;
        $msg_error = _tr("Organization doesn't exist");
    }
    if ($idOrgFil == 1) {
        $error = true;
        $msg_error = _tr("Invalid Organization");
    }
    //obtenemos las traducciones del parametro filtrado
    $filter_resource = htmlentities($filter_resource);
    $lang = get_language();
    //lenguage que esta siendo usado
    $parameter_to_find = null;
    if (isset($filter_resource)) {
        if (trim($filter_resource) != "") {
            if ($lang != "en") {
                global $arrLang;
                $filter_value = strtolower(trim($filter_resource));
                $parameter_to_find[] = $filter_value;
                //parametro de busqueda sin traduccion
                foreach ($arrLang as $key => $value) {
                    $langValue = strtolower(trim($value));
                    if (preg_match("/^[[:alnum:]| ]*\$/", $filter_value)) {
                        if (strpos($langValue, $filter_value) !== FALSE) {
                            $parameter_to_find[] = $key;
                        }
                    }
                }
            } else {
                $parameter_to_find[] = $filter_resource;
            }
        }
    }
    if (isset($filter_resource)) {
        $parameter_to_find[] = $filter_resource;
    } else {
        $parameter_to_find = null;
    }
    $pACL->_DB->beginTransaction();
    if (!$error) {
        $oGrid = new paloSantoGrid($smarty);
        $total = $pACL->getNumResources($parameter_to_find);
        $limit = 25;
        $oGrid->setLimit($limit);
        $oGrid->setTotal($total);
        $offset = $oGrid->calculateOffset();
        $tmpResource = $pACL->getListResources($limit, $offset, $parameter_to_find, 'yes');
        //todos los recursos
        $tmpResourceOrg = $pACL->getResourcesByOrg($idOrgFil, $parameter_to_find);
        //los recuros a los que tiene permiso actualmente la organizacion
        if ($tmpResourceOrg === false || $tmpResource === false) {
            $error = true;
            $msg_error = $msg_error . "" . _tr($pACL->errMsg);
        } else {
            $arrPermissionAct = array();
            //los recursos seleccionados a los que se le va a dar acceso
            $selectedResource = isset($_POST['resource']) ? array_keys($_POST['resource']) : array();
            //validamos que los recursos seleccionados realmente existan
            foreach ($tmpResourceOrg as $value) {
                $arrPermissionAct[] = $value["id"];
            }
            $selectedResource[] = 'usermgr';
            $selectedResource[] = 'grouplist';
            $selectedResource[] = 'userlist';
            $selectedResource[] = 'group_permission';
            $selectedResource[] = 'organization';
            //hacemos una lista de los permisos que debemos eliminar y de los que debemos añadir
            $saveAcc = array_diff($selectedResource, $arrPermissionAct);
            //permisos que debemos añadir
            $delAcc = array_diff($arrPermissionAct, $selectedResource);
            //permisos que debemos eliminar
            $arrSave = array();
            $arrDelete = array();
            $arrSelected = array();
            //nos aseguramos que los recursos existan y cogemos los que se visualizan en el modulo al dar click en save
            foreach ($tmpResource as $resource) {
                if (in_array($resource["id"], $saveAcc)) {
                    $arrSave[] = $resource["id"];
                }
                if (in_array($resource["id"], $delAcc)) {
                    $arrDelete[] = $resource["id"];
                }
                if (in_array($resource["id"], $selectedResource)) {
                    $arrSelected[] = $resource["id"];
                }
            }
            if (!$pACL->saveOrgPermission($idOrgFil, $arrSave) || !$pACL->deleteOrgPermissions($idOrgFil, $arrDelete)) {
                $error = true;
                $msg_error = _tr($pACL->errMsg);
            }
        }
    }
    //verificamos si todo salio bien
    if ($error) {
        $pACL->_DB->rollBAck();
        $smarty->assign("mb_title", _tr("ERROR"));
        $smarty->assign("mb_message", _tr("Error saving changes.") . " " . $msg_error);
    } else {
        $pACL->_DB->commit();
        $smarty->assign("mb_title", _tr("MESSAGE"));
        $smarty->assign("mb_message", _tr("Changes were applied successfully"));
    }
    unset($_SESSION['elastix_user_permission']);
    return reportOrgPermission($smarty, $module_name, $local_templates_dir, $pDB, $arrConf, $arrCredentiasls);
}