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; }
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; }
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; }