function putMenuAsBookmark($menu)
{
    global $arrConf;
    include_once "libs/paloSantoACL.class.php";
    $arrResult['status'] = FALSE;
    $arrResult['data'] = array("action" => "none", "menu" => "{$menu}");
    $arrResult['msg'] = _tr("Please your session id does not exist. Refresh the browser and try again.");
    if ($menu != "") {
        $user = isset($_SESSION['elastix_user']) ? $_SESSION['elastix_user'] : "";
        $pdbACL = new paloDB($arrConf['elastix_dsn']['elastix']);
        $pACL = new paloACL($pdbACL);
        $uid = $pACL->getIdUser($user);
        if ($uid !== FALSE) {
            //antes de obtener el listado de los modulos debemos determinar
            //si la interfaz desde la cual se esta llamando a los metodos es administrativa o
            //es de usuario final.
            $tmpPath = explode("/", $arrConf['basePath']);
            if ($tmpPath[count($tmpPath) - 1] == 'admin') {
                $administrative = "yes";
            } else {
                $administrative = "no";
            }
            //si el que realiza la accion no es el superadmin incluir en la busqueda la restriccion
            //de que el modulo puede ser accedido por la organizacion
            $org_access = !$pACL->isUserSuperAdmin($_SESSION['elastix_user']) ? 'yes' : NULL;
            //OBTENEMOS EL RECURSO
            $resource = $pACL->getResources($menu, $org_access, $administrative);
            $exist = false;
            $bookmarks = "SELECT aus.id AS id, ar.id AS id_menu,  ar.description AS description FROM user_shortcut aus, acl_resource ar WHERE id_user = ? AND aus.type = 'bookmark' AND ar.id = aus.id_resource ORDER BY aus.id DESC";
            $arr_result1 = $pdbACL->fetchTable($bookmarks, TRUE, array($uid));
            if ($arr_result1 !== FALSE) {
                $i = 0;
                $arrIDS = array();
                foreach ($arr_result1 as $key => $value) {
                    if ($value['id_menu'] == $menu) {
                        $exist = true;
                    }
                }
                //existia anteriormente se procede a eliminarlo del bookmark
                if ($exist) {
                    $pdbACL->beginTransaction();
                    $query = "DELETE FROM user_shortcut WHERE id_user = ? AND id_resource = ? AND type = ?";
                    $r = $pdbACL->genQuery($query, array($uid, $menu, "bookmark"));
                    if (!$r) {
                        $pdbACL->rollBack();
                        $arrResult['status'] = FALSE;
                        $arrResult['data'] = array("action" => "delete", "menu" => _tr($resource[0][1]), "idmenu" => $menu, "menu_session" => $menu);
                        $arrResult['msg'] = _tr("Bookmark cannot be removed. Please try again or contact with your elastix administrator and notify the next error: ") . $pdbACL->errMsg;
                        return $arrResult;
                    } else {
                        $pdbACL->commit();
                        $arrResult['status'] = TRUE;
                        $arrResult['data'] = array("action" => "delete", "menu" => _tr($resource[0][1]), "idmenu" => $menu, "menu_session" => $menu);
                        $arrResult['msg'] = _tr("Bookmark has been removed.");
                        return $arrResult;
                    }
                }
                //no existia anteriormente se lo agrega
                if (count($arr_result1) > 4) {
                    $arrResult['msg'] = _tr("The bookmark maximum is 5. Please uncheck one in order to add this bookmark");
                } else {
                    $pdbACL->beginTransaction();
                    $query = "INSERT INTO user_shortcut(id_user, id_resource, type) VALUES(?, ?, ?)";
                    $r = $pdbACL->genQuery($query, array($uid, $menu, "bookmark"));
                    if (!$r) {
                        $pdbACL->rollBack();
                        $arrResult['status'] = FALSE;
                        $arrResult['data'] = array("action" => "add", "menu" => _tr($resource[0][1]), "idmenu" => $menu, "menu_session" => $menu);
                        $arrResult['msg'] = _tr("Bookmark cannot be added. Please try again or contact with your elastix administrator and notify the next error: ") . $pdbACL->errMsg;
                    } else {
                        $pdbACL->commit();
                        $arrResult['status'] = TRUE;
                        $arrResult['data'] = array("action" => "add", "menu" => _tr($resource[0][1]), "idmenu" => $menu, "menu_session" => $menu);
                        $arrResult['msg'] = _tr("Bookmark has been added.");
                        return $arrResult;
                    }
                }
            }
        }
    }
    return $arrResult;
}
Beispiel #2
0
function putMenuAsBookmark($menu)
{
    include_once "libs/paloSantoACL.class.php";
    $arrResult['status'] = FALSE;
    $arrResult['data'] = array("action" => "none", "menu" => "{$menu}");
    $arrResult['msg'] = _tr("Please your session id does not exist. Refresh the browser and try again.");
    if ($menu != "") {
        $user = isset($_SESSION['elastix_user']) ? $_SESSION['elastix_user'] : "";
        global $arrConf;
        $pdbACL = new paloDB("sqlite3:///{$arrConf['elastix_dbdir']}/acl.db");
        $pACL = new paloACL($pdbACL);
        $uid = $pACL->getIdUser($user);
        if ($uid !== FALSE) {
            $id_resource = $pACL->getResourceId($menu);
            $resource = $pACL->getResources($id_resource);
            $exist = false;
            $bookmarks = "SELECT aus.id AS id, ar.id AS id_menu, ar.name AS name, ar.description AS description FROM acl_user_shortcut aus, acl_resource ar WHERE id_user = ? AND type = 'bookmark' AND ar.id = aus.id_resource ORDER BY aus.id DESC";
            $arr_result1 = $pdbACL->fetchTable($bookmarks, TRUE, array($uid));
            if ($arr_result1 !== FALSE) {
                $i = 0;
                $arrIDS = array();
                foreach ($arr_result1 as $key => $value) {
                    if ($value['id_menu'] == $id_resource) {
                        $exist = true;
                    }
                }
                if ($exist) {
                    $pdbACL->beginTransaction();
                    $query = "DELETE FROM acl_user_shortcut WHERE id_user = ? AND id_resource = ? AND type = ?";
                    $r = $pdbACL->genQuery($query, array($uid, $id_resource, "bookmark"));
                    if (!$r) {
                        $pdbACL->rollBack();
                        $arrResult['status'] = FALSE;
                        $arrResult['data'] = array("action" => "delete", "menu" => _tr($resource[0][2]), "idmenu" => $id_resource, "menu_session" => $menu);
                        $arrResult['msg'] = _tr("Bookmark cannot be removed. Please try again or contact with your elastix administrator and notify the next error: ") . $pdbACL->errMsg;
                        return $arrResult;
                    } else {
                        $pdbACL->commit();
                        $arrResult['status'] = TRUE;
                        $arrResult['data'] = array("action" => "delete", "menu" => _tr($resource[0][2]), "idmenu" => $id_resource, "menu_session" => $menu);
                        $arrResult['msg'] = _tr("Bookmark has been removed.");
                        return $arrResult;
                    }
                }
                if (count($arr_result1) > 4) {
                    $arrResult['msg'] = _tr("The bookmark maximum is 5. Please uncheck one in order to add this bookmark");
                } else {
                    $pdbACL->beginTransaction();
                    $query = "INSERT INTO acl_user_shortcut(id_user, id_resource, type) VALUES(?, ?, ?)";
                    $r = $pdbACL->genQuery($query, array($uid, $id_resource, "bookmark"));
                    if (!$r) {
                        $pdbACL->rollBack();
                        $arrResult['status'] = FALSE;
                        $arrResult['data'] = array("action" => "add", "menu" => _tr($resource[0][2]), "idmenu" => $id_resource, "menu_session" => $menu);
                        $arrResult['msg'] = _tr("Bookmark cannot be added. Please try again or contact with your elastix administrator and notify the next error: ") . $pdbACL->errMsg;
                    } else {
                        $pdbACL->commit();
                        $arrResult['status'] = TRUE;
                        $arrResult['data'] = array("action" => "add", "menu" => _tr($resource[0][2]), "idmenu" => $id_resource, "menu_session" => $menu);
                        $arrResult['msg'] = _tr("Bookmark has been added.");
                        return $arrResult;
                    }
                }
            }
        }
    }
    return $arrResult;
}
Beispiel #3
0
function actualizarPropiedades(&$pDB, &$smarty, $idUser, $sModulo, $sPerfil, $propiedades)
{
    //    $oDBConn =& $pDB->conn;
    // Verificar que existe realmente un perfil $sPerfil para el usuario $idUser y el módulo $sModulo,
    // y crearlo si es necesario
    $sPeticionID = 'SELECT up.id_profile ' . 'FROM acl_user_profile up, acl_resource r ' . 'WHERE up.id_user = ? AND up.id_resource = r.id AND r.name = ? AND up.profile = ?';
    $tupla = $pDB->getFirstRowQuery($sPeticionID, FALSE, array($idUser, $sModulo, $sPerfil));
    if ($tupla === FALSE) {
        $smarty->assign("mb_message", "ERROR DE DB: " . $pDB->errMsg);
        return FALSE;
    } elseif (count($tupla) == 0) {
        $idPerfil = NULL;
    } else {
        $idPerfil = $tupla[0];
    }
    if (is_null($idPerfil)) {
        // La combinación de usuario/módulo/perfil no existe y hay que crearla
        $pACL = new paloACL($pDB);
        // TODO: agregar función a paloACL para obtener ID de recurso, dado el nombre
        $listaRecursos = $pACL->getResources();
        $idRecurso = NULL;
        foreach ($listaRecursos as $tuplaRecurso) {
            if ($tuplaRecurso[1] == $sModulo) {
                $idRecurso = $tuplaRecurso[0];
                break;
            }
        }
        if (is_null($idRecurso)) {
            $smarty->assign("mb_message", '(internal) No resource found for: ' . $sModulo);
            return FALSE;
        }
        // Crear el nuevo perfil para el usuario indicado...
        $sPeticionNuevoPerfil = 'INSERT INTO acl_user_profile (id_user, id_resource, profile) VALUES (?, ?, ?)';
        $r = $pDB->genQuery($sPeticionNuevoPerfil, array($idUser, $idRecurso, $sPerfil));
        if (!$r) {
            $smarty->assign("mb_message", "ERROR DE DB: " . $pDB->errMsg);
            return FALSE;
        }
        // Una vez creado el perfil, el query de ID de perfil debe de funcionar
        $tupla = $pDB->getFirstRowQuery($sPeticionID, FALSE, array($idUser, $sModulo, $sPerfil));
        if ($tupla === FALSE) {
            $smarty->assign("mb_message", "ERROR DE DB: " . $pDB->errMsg);
            return FALSE;
        } elseif (count($tupla) == 0) {
            $smarty->assign("mb_message", '(internal) Unable to find just-inserted profile ID');
            return FALSE;
        } else {
            $idPerfil = $tupla[0];
        }
    }
    // Aquí ya se tiene el ID del perfil a actualizar. Las propiedades deben de reemplazarse, o
    // crearse si no existen. Por ahora no deben borrarse en ausencia de la lista
    $sPeticionPropiedades = 'SELECT property, value ' . 'FROM acl_profile_properties ' . 'WHERE id_profile = ?';
    $listaPropiedades = array();
    $tabla = $pDB->fetchTable($sPeticionPropiedades, FALSE, array($idPerfil));
    if ($tabla === FALSE) {
        $smarty->assign("mb_message", "ERROR DE DB (1): " . $pDB->errMsg);
    } else {
        foreach ($tabla as $tupla) {
            $listaPropiedades[$tupla[0]] = $tupla[1];
        }
    }
    foreach ($propiedades as $k => $v) {
        $sPeticionSQL = NULL;
        $params = NULL;
        if (array_key_exists($k, $listaPropiedades)) {
            $sPeticionSQL = 'UPDATE acl_profile_properties SET value = ? WHERE id_profile = ? AND property = ?';
            $params = array($v, $idPerfil, $k);
        } else {
            $sPeticionSQL = 'INSERT INTO acl_profile_properties (id_profile, property, value) VALUES (?, ?, ?)';
            $params = array($idPerfil, $k, $v);
        }
        $r = $pDB->genQuery($sPeticionSQL, $params);
        if (!$r) {
            $smarty->assign("mb_message", "ERROR DE DB (2): " . $pDB->errMsg);
            return FALSE;
        }
    }
    return TRUE;
}