function setApplets_User($arrIDs_DAU, $user) { global $arrConf; $dsn = "sqlite3:///{$arrConf['elastix_dbdir']}/dashboard.db"; $pDB = new paloDB($dsn); if (is_array($arrIDs_DAU) & count($arrIDs_DAU) > 0) { $pDB2 = new paloDB($arrConf['elastix_dsn']['elastix']); $pACL = new paloACL($pDB2); if ($pACL->isUserSuperAdmin($user)) { $typeUser = "******"; } else { $typeUser = "******"; } $pDB->beginTransaction(); // Parte 1: Elimino todas las actuales $query1 = " delete from activated_applet_by_user \n where username=? and id_dabu in (select id from default_applet_by_user where username=?)"; $result1 = $pDB->genQuery($query1, array($user, $typeUser)); if ($result1 == FALSE) { $this->errMsg = $pDB->errMsg; $pDB->rollBack(); return false; } // Parte 2: Inserto todas las checked foreach ($arrIDs_DAU as $key => $value) { $query2 = "insert into activated_applet_by_user (id_dabu, order_no, username) values (?,?,?)"; $result2 = $pDB->genQuery($query2, array($value, $key + 1, $user)); if ($result2 == FALSE) { $this->errMsg = $pDB->errMsg; $pDB->rollBack(); return false; } } $pDB->commit(); } return true; }
/** * Procedimiento que actualiza los passwords de un usuario dentro de elastix * La calve ingresada sera configurada para la cuenta de interfaz web, para su cuenta * de email, su secret en el caso de las extensiones sip e iax */ function changeUserPassword($username, $password) { $pEmail = new paloEmail($this->_DB); $pFax = new paloFax($this->_DB); $pACL = new paloACL($this->_DB); //comprobamos que la calve este seteada y sea una clave fuerte //verificamos que la nueva contraseña sea fuerte if (!isStrongPassword($password)) { $this->errMsg = _tr("The new password can not be empty. It must have at least 10 characters and contain digits, uppers and little case letters"); return false; } //obtenemos la conversion md5 de la clave $md5_password = md5($password); //verficamos que el usuario exista $idUser = $pACL->getIdUser($username); if ($idUser == false) { $this->errMsg = $pACL->errMsg == '' ? _tr("User does not exist") : _tr("DATABASE ERROR"); return false; } //obtenemos los datos del usuario //extension de fax y de telefonia $arrUser = $pACL->getUsers($idUser); if ($arrUser == false) { $this->errMsg = $arrUser === false ? _tr("DATABASE ERROR") : _tr("User dosen't exist"); return false; } $this->_DB->beginTransaction(); if ($pACL->isUserSuperAdmin($username)) { //si es superadmin solo se cambia la clave de interfaz administrativa //cambiamos la clave en la insterfax administrativa if (!$pACL->changePassword($idUser, $md5_password)) { $this->_DB->rollBack(); $this->errMsg = $pACL->errMsg; return false; } else { $this->_DB->commit(); return true; } } else { //obtenemos el dominio al cual pertenece el usuario $arrOrgz = $this->getOrganizationById($arrUser[0][4]); if ($arrOrgz == false) { $this->errMsg = _tr("An error has ocurred to retrieve organization data"); return false; } $domain = $arrOrgz['domain']; $extension = $arrUser[0][5]; $fax_extension = $arrUser[0][6]; $pDevice = new paloDevice($domain, "sip", $this->_DB); $arrExtUser = $pDevice->getExtension($extension); $listFaxs = $pFax->getFaxList(array("exten" => $fax_extension, "organization_domain" => $domain)); $faxUser = $listFaxs[0]; //cambiamos la clave en la insterfax administrativa if (!$pACL->changePassword($idUser, $md5_password)) { $this->_DB->rollBack(); $this->errMsg = $pACL->errMsg; return false; } //cambiamos la clave en la extension telefonica if (!$pDevice->changePasswordExtension($password, $extension)) { $this->_DB->rollBack(); $this->errMsg = _tr("Extension password couldn't be updated") . $pDevice->errMsg; return false; } //cambiamos la clave para el fax (peer, archivos de configuracion) if (!$pFax->editFaxToUser(array("idUser" => $idUser, "country_code" => $faxUser['country_code'], "area_code" => $faxUser['area_code'], "clid_name" => $faxUser['clid_name'], "clid_number" => $faxUser['clid_number']))) { $this->_DB->rollBack(); $this->errMsg = _tr("Fax Extension password couldn't be updated") . $pFax->errMsg; return false; } //cambiamos la clave en el correo if (!$pEmail->setAccountPassword($username, $password)) { $this->_DB->rollBack(); $this->errMsg = _tr("Error to update email account password"); //reestauramos la configuracion anterior en los archivos de fax $pFax->editFaxFileConfig($faxUser['dev_id'], $faxUser['country_code'], $faxUser['area_code'], $faxUser['clid_name'], $faxUser['clid_number'], $arrUser[0][3], 0, $arrOrgz['domain']); return false; } else { $this->_DB->commit(); //recargamos la configuracion en realtime de los dispositivos para que tomen efectos los cambios $pDevice->tecnologia->prunePeer($arrExtUser["device"], $arrExtUser["tech"]); $pDevice->tecnologia->loadPeer($arrExtUser["device"], $arrExtUser["tech"]); if (!empty($arrExtUser["elxweb_device"])) { $pDevice->tecnologia->prunePeer($arrExtUser["elxweb_device"], $arrExtUser["tech"]); $pDevice->tecnologia->loadPeer($arrExtUser["elxweb_device"], $arrExtUser["tech"]); } //se recarga la faxextension del usuario por los cambios que pudo haber $pDevice->tecnologia->prunePeer($faxUser["device"], $faxUser["tech"]); $pDevice->tecnologia->loadPeer($faxUser["device"], $faxUser["tech"]); $pFax->restartService(); return true; } } }
function filterAuthorizedMenus($idUser, $administrative = 'no') { global $arrConf; require_once "libs/paloSantoACL.class.php"; $pACL = new paloACL($this->_DB); $org_access = ''; $uelastix = FALSE; if (isset($_SESSION)) { $pDB = new paloDB($arrConf['elastix_dsn']['elastix']); if (empty($pDB->errMsg)) { $uelastix = get_key_settings($pDB, 'uelastix'); $uelastix = (int) $uelastix != 0; } unset($pDB); } if ($uelastix && isset($_SESSION['elastix_user_permission'])) { return $_SESSION['elastix_user_permission']; } $superAdmin = $pACL->isUserSuperAdmin($_SESSION['elastix_user']); //el usuario superadmin solo tiene acceso a los modulos administrativos if ($superAdmin && $administrative == 'no') { return NULL; } if (!$superAdmin) { //comprobamos que el modulo puede ser accesado por la organizacion $org_access = "AND ar.organization_access='yes'"; } //obtenemos el id del grupo al que pertecene el usuario $idGroup = $pACL->getUserGroup($idUser); if ($idGroup == false) { return NULL; } //seleccionamos los recuersos a los cuales la organizacion a la que pertenece el usuario tiene acceso //y de eso hacemos uns interseccion con la //union de las acciones permitidas por el grupo al que pertenece el usuario //y las acciones permitidas a el usuario $query = "SELECT ar.id, ar.IdParent, ar.Link, ar.description, ar.Type, ar.order_no \n FROM acl_resource ar JOIN organization_resource ore ON ar.id=ore.id_resource \n JOIN acl_group g ON g.id_organization=ore.id_organization \n WHERE g.id=? AND ar.administrative=? {$org_access} AND ar.id IN \n (SELECT ract.id_resource FROM resource_action ract \n JOIN group_resource_action as gr ON ract.id=gr.id_resource_action \n WHERE gr.id_group=? AND ract.action='access' \n UNION \n SELECT ract.id_resource FROM user_resource_action as ur \n JOIN resource_action ract ON ract.id=ur.id_resource_action \n WHERE ur.id_user=? AND ract.action='access') ORDER BY ar.order_no"; $arrModulesFiltered = array(); $r = $this->_DB->fetchTable($query, TRUE, array($idGroup, $administrative, $idGroup, $idUser)); if (!is_array($r)) { $this->errMsg = $this->_DB->errMsg; return NULL; } foreach ($r as $tupla) { $tupla['HasChild'] = FALSE; $arrModulesFiltered[$tupla['id']] = $tupla; } //Leer el nombre de todos los menus dentro de acl_resource $r = $this->_DB->fetchTable('SELECT ar.id, ar.IdParent, ar.Link, ar.description, ar.Type, ar.order_no, 1 AS HasChild ' . "FROM acl_resource ar WHERE ar.administrative=? {$org_access} ORDER BY ar.order_no", TRUE, array($administrative)); if (!is_array($r)) { $this->errMsg = $this->_DB->errMsg; return NULL; } $allMenus = array(); foreach ($r as $tupla) { $tupla['HasChild'] = FALSE; $allMenus[$tupla['id']] = $tupla; } //resolveoms referencia a los niveles superiores $menuMenus = array(); foreach (array_keys($arrModulesFiltered) as $k) { if ($arrModulesFiltered[$k]['Type'] == 'module') { $menuMenus[$k] = $k; } $kp = $arrModulesFiltered[$k]['IdParent']; if (isset($allMenus[$kp])) { //menu de segundo o tercer nivel $menuMenus[$kp] = $kp; //se hace esta verificacion para que loe menus de primer nivel sean incluidos if (isset($allMenus[$kp]['IdParent'])) { $menuMenus[$allMenus[$kp]['IdParent']] = $allMenus[$kp]['IdParent']; } } } // Copiar al arreglo filtrado los menús de primer nivel y segundo nivel EN EL ORDEN LEÍDO $arrMenuFiltered = array_intersect_key($allMenus, $menuMenus); if ($uelastix) { $_SESSION['elastix_user_permission'] = $arrMenuFiltered; } return $arrMenuFiltered; }
update_theme(); exit; } else { $user = urlencode(substr($_POST['input_user'], 0, 20)); if (!$pACL->getIdUser($_POST['input_user'])) { // not exists user? writeLOG("audit.log", "LOGIN {$user}: Authentication Failure to Web Interface login. Invalid user {$user} from {$_SERVER['REMOTE_ADDR']}."); } else { writeLOG("audit.log", "LOGIN {$user}: Authentication Failure to Web Interface login. Failed password for {$user} from {$_SERVER['REMOTE_ADDR']}."); } // Debo hacer algo aquí? } } // 2) Autentico usuario if (isset($_SESSION['elastix_user']) && isset($_SESSION['elastix_pass']) && $pACL->authenticateUser($_SESSION['elastix_user'], $_SESSION['elastix_pass'])) { if ($pACL->isUserSuperAdmin($_SESSION['elastix_user'])) { header("Location: admin/index.php"); } $idUser = $pACL->getIdUser($_SESSION['elastix_user']); $pMenu = new paloMenu($arrConf['elastix_dsn']['elastix']); $arrUser = $pACL->getUsers($idUser); foreach ($arrUser as $value) { $arrFill["username"] = $value[1]; $arrFill["name"] = $value[2]; $arrFill["extension"] = $value[5]; } $smarty->assign("ID_ELX_USER", $idUser); $smarty->assign("USER_NAME", $arrFill["name"]); $smarty->assign("USER_ESTENSION", $arrFill["extension"]); //obtenemos los menu a los que el usuario tiene acceso $arrMenuFiltered = $pMenu->filterAuthorizedMenus($idUser);
/** * Procedimiento para leer la lista de los applets activados para el usuario. * Para compatibilidad con la implementación anterior, y como efecto * secundario, si el usuario indicado no tiene applets activados, se crea una * nueva lista de activaciones por omisión y se guarda esta lista durante la * consulta. * * @param string $user Usuario de sistema para el cual se consulta * * @return mixed NULL en caso de error, o lista de applets activados. */ function leerAppletsActivados($user) { global $arrConf; // Leer rol del usuario: admin o no_admin $pDB2 = new paloDB($arrConf['elastix_dsn']['elastix']); $pACL = new paloACL($pDB2); $rol = $pACL->isUserSuperAdmin($user) ? 'admin' : 'no_admin'; // Verificar si hay applets activados para este usuario $tupla = $this->_db->getFirstRowQuery('SELECT COUNT(*) AS n FROM activated_applet_by_user WHERE username = ?', TRUE, array($user)); if (!is_array($tupla)) { $this->errMsg = $this->_db->errMsg; return NULL; } if ($tupla['n'] <= 0) { /* No hay applets activados. Se consulta el mapeo de applets por * omisión. * FIXME: esto es esencialmente un grupo de applets disponibles por * rol, el cual debería estar representado en una tabla separada. No * hay manera de cambiar desde la interfaz web si es que se requiere * un número distinto de applets por omisión, o un orden distinto. * La implementación actual requiere que hayan al menos 5 applets * en el mapeo de la base de datos, empezando desde el mínimo ID * con el rol requerido. Por lo menos ya no está quemado el ID * inicial como en la implementación anterior. */ $num_applets_omision = 5; $recordset = $this->_db->fetchTable('SELECT id FROM default_applet_by_user WHERE username = ? ORDER BY id LIMIT ?', TRUE, array($rol, $num_applets_omision)); if (!is_array($recordset)) { $this->errMsg = $this->_db->errMsg; return NULL; } for ($i = 0; $i < count($recordset); $i++) { $r = $this->_db->genQuery('INSERT INTO activated_applet_by_user (id_dabu, order_no, username) VALUES (?, ?, ?)', array($recordset[$i]['id'], $i + 1, $user)); if (!$r) { $this->errMsg = $this->_db->errMsg; return NULL; } } } // Consultar el mapeo de applets para el usuario actual $sql = <<<SQL_APPLETS_BY_USER SELECT a.code, a.name, aau.id AS aau_id, a.icon FROM activated_applet_by_user aau, default_applet_by_user dau, applet a WHERE aau.id_dabu = dau.id AND dau.id_applet = a.id AND dau.username = ? AND aau.username = ? ORDER BY aau.order_no SQL_APPLETS_BY_USER; $recordset = $this->_db->fetchTable($sql, TRUE, array($rol, $user)); if (!is_array($recordset)) { $this->errMsg = $this->_db->errMsg; return NULL; } $listaApplets = array(); foreach ($recordset as $tupla) { $code = $tupla['code']; if (substr($code, 0, 7) == 'Applet_') { $code = substr($code, 7); } $tupla['applet'] = $code; $listaApplets[] = $tupla; } return $listaApplets; }
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 saveEditUser($smarty, $module_name, $local_templates_dir, $pDB, $arrConf, $arrCredentiasls) { $pACL = new paloACL($pDB); $pORGZ = new paloSantoOrganization($pDB); $exito = false; $idUser = getParameter("id"); $errorImg = ""; $renameFile = ""; $reAsterisk = false; //obtenemos la informacion del usuario por el id dado, sino existe el usuario mostramos un mensaje de error if (!isset($idUser)) { $smarty->assign("mb_title", _tr("ERROR")); $smarty->assign("mb_message", _tr("Invalid User")); return reportUser($smarty, $module_name, $local_templates_dir, $pDB, $arrConf, $arrCredentiasls); } else { if ($arrCredentiasls['userlevel'] == "superadmin") { $arrUsers = $pACL->getUsers($idUser); } else { $arrUsers = $pACL->getUsers($idUser, $arrCredentiasls['id_organization']); } } if ($arrUsers === false) { $smarty->assign("mb_title", _tr("ERROR")); $smarty->assign("mb_message", _tr($pACL->errMsg)); return reportUser($smarty, $module_name, $local_templates_dir, $pDB, $arrConf, $arrCredentiasls); } else { if (count($arrUsers) == 0) { $smarty->assign("mb_title", _tr("ERROR")); $smarty->assign("mb_message", _tr("User doesn't exist")); return reportUser($smarty, $module_name, $local_templates_dir, $pDB, $arrConf, $arrCredentiasls); } else { $idOrgz = $arrUsers[0][4]; //una vez creado un usuario este no se puede cambiar de organizacion $arrOrgz = array(); $temp = $pACL->getGroupsPaging(null, null, $idOrgz); if ($temp === false) { $smarty->assign("mb_title", _tr("ERROR")); $smarty->assign("mb_message", _tr($pACL->errMsg)); return reportUser($smarty, $module_name, $local_templates_dir, $pDB, $arrConf, $arrCredentiasls); } foreach ($temp as $value) { $arrGrupos[$value[0]] = $value[1]; } $arrFormOrgz = createFieldForm($arrGrupos, $arrOrgz); $oForm = new paloForm($smarty, $arrFormOrgz); if (!$oForm->validateForm($_POST)) { // Validation basic, not empty and VALIDATION_TYPE $smarty->assign("mb_title", _tr("Validation Error")); $arrErrores = $oForm->arrErroresValidacion; $strErrorMsg = "<b>" . _tr("The following fields contain errors") . ":</b><br/>"; if (is_array($arrErrores) && count($arrErrores) > 0) { foreach ($arrErrores as $k => $v) { $strErrorMsg .= "{$k} [{$v['mensaje']}], "; } } $smarty->assign("mb_message", $strErrorMsg); return viewFormUser($smarty, $module_name, $local_templates_dir, $pDB, $arrConf, $arrCredentiasls); } else { $password1 = getParameter("password1"); $password2 = getParameter("password2"); $quota = getParameter("email_quota"); $countryCode = getParameter("country_code"); $areaCode = getParameter("area_code"); $idGrupo = getParameter("group"); $extension = getParameter("extension"); $fax_extension = getParameter("fax_extension"); $name = getParameter("name"); $md5password = md5($password1); $clidNumber = getParameter("clid_number"); $cldiName = getParameter("clid_name"); if ($pACL->isUserSuperAdmin($arrUsers[0][1])) { $idGrupo = $arrUsers[0][7]; $email_contact = getParameter("email_contact"); $exito = $pORGZ->updateUserSuperAdmin($idUser, $name, $md5password, $password1, $email_contact, $arrCredentiasls['userlevel']); $error = $pORGZ->errMsg; } else { if ($password1 != $password2) { $error = _tr("Passwords don't match"); } elseif ($password1 != "" && !isStrongPassword($password1)) { $error = _tr("Secret can not be empty, must be at least 10 characters, contain digits, uppers and little case letters"); } elseif (!isset($quota) || $quota == "") { $error = _tr("Qouta must not be empty"); } elseif (!isset($countryCode) || $countryCode == "") { $error = _tr("Country Code must not be empty"); } elseif (!isset($areaCode) || $areaCode == "") { $error = _tr("Area Code must not be empty"); } elseif (!isset($clidNumber) || $clidNumber == "") { $error = _tr("C er Id Number must not be empty"); } elseif (!isset($cldiName) || $cldiName == "") { $error = _tr("Caller Id Name must not be empty"); } else { $exito = $pORGZ->updateUserOrganization($idUser, $name, $md5password, $password1, $extension, $fax_extension, $countryCode, $areaCode, $clidNumber, $cldiName, $idGrupo, $quota, $arrCredentiasls['userlevel'], $reAsterisk); $error = $pORGZ->errMsg; } } } } } if ($exito) { //esta seccion es solo si el usuario quiere subir una imagen a su cuenta if (isset($_FILES['picture']['name']) && $_FILES['picture']['name'] != "") { uploadImage($idUser, $pDB, $errorImg); } $smarty->assign("mb_title", _tr("MESSAGE")); $smarty->assign("mb_message", _tr("User has been edited successfully") . "<br>{$errorImg}"); if ($reAsterisk) { //mostramos el mensaje para crear los archivos de ocnfiguracion $pAstConf = new paloSantoASteriskConfig($pDB); $orgTmp2 = $pORGZ->getOrganization(array("id" => $idOrgz)); $pAstConf->setReloadDialplan($orgTmp2[0]["domain"], true); } $content = reportUser($smarty, $module_name, $local_templates_dir, $pDB, $arrConf, $arrCredentiasls); } else { $smarty->assign("mb_title", _tr("ERROR")); $smarty->assign("mb_message", $error); $content = viewFormUser($smarty, $module_name, $local_templates_dir, $pDB, $arrConf, $arrCredentiasls); } return $content; }
/** funcion que sirve para obtener las credenciales de un usuario @return Array => ( idUser => (idUser or ""), id_organization => (ID_ORG or false), userlevel => (superadmin,organization), domain => (dominio de la ORG or false) ) */ function getUserCredentials($username) { global $arrConf, $elxPath; require_once "{$elxPath}/libs/paloSantoACL.class.php"; $pdbACL = new paloDB($arrConf['elastix_dsn']['elastix']); $pACL = new paloACL($pdbACL); $userLevel1 = "other"; $idOrganization = $domain = false; $idUser = $pACL->getIdUser($username); if ($idUser != false) { $idOrganization = $pACL->getIdOrganizationUser($idUser); if ($idOrganization != false) { if ($pACL->isUserSuperAdmin($username)) { $userLevel1 = "superadmin"; } elseif ($pACL->isUserAdministratorGroup($username)) { $userLevel1 = "admin"; } } } if ($idOrganization != false) { //obtenemos el dominio de las organizacion $query = "SELECT domain from organization where id=?"; $result = $pdbACL->getFirstRowQuery($query, false, array($idOrganization)); if ($result == false) { $domain = false; } else { if (!preg_match("/^(([[:alnum:]-]+)\\.)+([[:alnum:]])+\$/", $result[0])) { $domain = false; } else { $domain = $result[0]; } } } return array("idUser" => $idUser, "id_organization" => $idOrganization, "userlevel" => $userLevel1, "domain" => $domain); }
private function _controlServicio($sAccion) { global $arrConf; $respuesta = array('status' => 'success', 'message' => '(no message)'); $acciones = array('start', 'restart', 'stop', 'on', 'off'); $servicios = array('Asterisk' => 'asterisk', 'OpenFire' => 'openfire', 'Hylafax' => 'hylafax', 'Postfix' => 'postfix', 'MySQL' => 'mysqld', 'Apache' => 'httpd', 'Dialer' => 'elastixdialer'); if (!isset($_REQUEST['process'])) { $respuesta['status'] = 'error'; $respuesta['message'] = _tr('Invalid request'); } elseif (!in_array($_REQUEST['process'], array_keys($servicios))) { $respuesta['status'] = 'error'; $respuesta['message'] = _tr('Invalid service'); } elseif (!in_array($sAccion, $acciones)) { $respuesta['status'] = 'error'; $respuesta['message'] = _tr('Invalid process action'); } else { $pDBACL = new paloDB($arrConf['elastix_dsn']['acl']); if (!empty($pDBACL->errMsg)) { $respuesta['status'] = 'error'; $respuesta['message'] = "ERROR DE DB: {$pDBACL->errMsg}"; } else { $pACL = new paloACL($pDBACL); if (!empty($pACL->errMsg)) { $respuesta['status'] = 'error'; $respuesta['message'] = "ERROR DE ACL: {$pACL->errMsg}"; } elseif (!$pACL->isUserSuperAdmin($_SESSION['elastix_user'])) { $respuesta['status'] = 'error'; $respuesta['message'] = _tr('Process control restricted to administrators'); } else { $flag = 0; $sServicio = $_REQUEST['process']; $output = $retval = NULL; if ($sAccion == 'off' || $sAccion == 'on') { exec('/usr/bin/elastix-helper rchkconfig --level 3 ' . escapeshellarg($servicios[$sServicio]) . ' ' . escapeshellarg($sAccion), $output, $retval); $arrServices = $this->getStatusServices(); if ($arrServices[$sServicio]["status_service"] == "Shutdown" && $sAccion == 'on' || $arrServices[$sServicio]["status_service"] == "OK" && $sAccion == 'off') { $sAccion = $sAccion == 'off' ? 'stop' : 'start'; } else { $flag = 1; } } if ($flag != 1) { exec('sudo -u root service generic-cloexec ' . $servicios[$sServicio] . ' ' . $sAccion . ' 1>/dev/null 2>/dev/null'); } } } } $json = new Services_JSON(); Header('Content-Type: application/json'); return $json->encode($respuesta); }