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;
 }
Beispiel #4
0
        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;
}
Beispiel #7
0
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;
}
Beispiel #8
0
/**
    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);
}
Beispiel #9
0
 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);
 }