function updateUserOrganization($idUser, $name, $md5password, $password1, $extension, $fax_extension, $countryCode, $areaCode, $clidNumber, $cldiName, $idGrupo, $quota, $userLevel1, &$reAsterisk) { require_once "apps/general_settings/libs/paloSantoGlobalsPBX.class.php"; $pACL = new paloACL($this->_DB); $pEmail = new paloEmail($this->_DB); $pFax = new paloFax($this->_DB); $continuar = true; $Exito = false; $error = ""; $cExten = false; $cFExten = false; $arrBackup = array(); $editFax = false; $faxProperties = array(); $arrUser = $pACL->getUsers2($idUser); if ($arrUser === false || count($arrUser) == 0 || !isset($idUser)) { $this->errMsg = _tr("User dosen't exist"); return false; } if ($pACL->isUserSuperAdmin($arrUser[0]['username'])) { $this->errMsg = _tr("Invalid Action"); return false; } $arrOrgz = $this->getOrganizationById($arrUser[0]['id_organization']); $username = $arrUser[0]['username']; $oldExten = $arrUser[0]['extension']; $oldFaxExten = $arrUser[0]['fax_extension']; $pDevice = new paloDevice($arrOrgz["domain"], "sip", $this->_DB); $arrExtUser = $pDevice->getExtension($oldExten); $listFaxs = $pFax->getFaxList(array("exten" => $oldFaxExten, "organization_domain" => $arrOrgz['domain'])); $faxUser = $listFaxs[0]; if ($name == "") { $name = $username; } if ($userLevel1 == "other") { $extension = $arrUser[0]['extension']; $fax_extension = $arrUser[0]['fax_extension']; $quota = $pACL->getUserProp($idUser, "email_quota"); $idGrupo = $arrUser[0]['id_group']; $modificarExts = false; } else { //verificar si el usuario cambio de extension y si es asi que no este siendo usado por otro usuario if ($extension != $oldExten) { if ($pDevice->existDevice($extension, "{$arrOrgz["code"]}_{$extension}", $arrExtUser["tech"]) == true) { $this->errMsg = $pDevice->errMsg; return false; } else { $cExten = true; } } if ($fax_extension != $oldFaxExten) { //si el usairo quiere cambiar el patron de marcado asociado al fax verificar que el nuevo //patron de marcado no este siendo usado dentro de la organizacion if ($pDevice->tecnologia->existExtension($fax_extension, $pDevice->getDomain())) { $this->errMsg = $pDevice->errMsg; return false; } else { $cFExten = true; } } //para cambiar al usuario de extension o faxextension es necesario que se haya llenado el campo password para //poder crear las extensiones con la clave correcta if ($cExten || $cFExten) { if (is_null($md5password) || $md5password == "" || is_null($password1) || $password1 == "") { $this->errMsg = _tr("Please set a password"); return false; } } } if (empty($clidNumber) && $clidNumber != 0) { $clidNumber = $faxUser['clid_number']; } if (empty($cldiName) && $cldiName != 0) { $cldiName = $faxUser['clid_name']; } if (empty($country_code)) { $country_code = $faxUser['country_code']; } if (empty($area_code)) { $area_code = $faxUser['area_code']; } $this->_DB->beginTransaction(); //actualizamos la informacion de usuario que esta en la tabla acl_user if ($pACL->updateUser($idUser, $name, $extension, $fax_extension)) { //actualizamos el grupo al que pertennece el usuario if ($pACL->addToGroup($idUser, $idGrupo)) { $old_quota = $pACL->getUserProp($idUser, "email_quota"); if ($old_quota === false) { $old_quota = 1; } //actualizamos la quota de correo if (isset($quota) && $quota != "" && $continuar) { if ($pEmail->updateQuota($old_quota * 1024, $quota * 1024, $username)) { if (!$pACL->setUserProp($idUser, "email_quota", $quota, "email")) { $error = _tr("Error setting email quota") . $pACL->errMsg; $pEmail->updateQuota($quota, $old_quota); $this->_DB->rollBack(); $continuar = false; } } else { $error = _tr("Error setting email quota") . $pEmail->errMsg; $continuar = false; } } if ($continuar) { if ($cExten && $userLevel1 != "other") { if (!$this->modificarExtensionUsuario($arrOrgz["domain"], $oldExten, $extension, $password1, $name, $username, $arrBackup)) { $error = "Couldn't updated user extension. " . $this->errMsg; $continuar = false; } } } //actualizamos el password del usuario if ($password1 !== "" && $continuar) { if ($pACL->changePassword($idUser, $md5password)) { //en caso que no se hayan modificado la extensiones del usuario //entonces es necesario actualizar el passoword para la extension y el fax if (!$cExten) { if (!$pDevice->changePasswordExtension($password1, $extension)) { $this->errMsg = _tr("Extension password couldn't be updated") . $pDevice->errMsg; $continuar = false; } } //editamos la configuracion del fax if ($continuar) { if ($cFExten && $userLevel1 != "other") { //cuando se cambia el patron de marcado asociado al fax del usuario //es necesario incluir el parametro oldFaxExten entre los parametros para //la actualizacion correcta de los datos if (!$pFax->editFaxToUser(array("idUser" => $idUser, "oldFaxExten" => $oldFaxExten, "country_code" => $countryCode, "area_code" => $areaCode, "clid_name" => $cldiName, "clid_number" => $clidNumber))) { $error = "Couldn't updated user fax. " . $pFax->errMsg; $continuar = false; } } else { if (!$pFax->editFaxToUser(array("idUser" => $idUser, "country_code" => $countryCode, "area_code" => $areaCode, "clid_name" => $cldiName, "clid_number" => $clidNumber))) { $error = "Couldn't updated user fax. " . $pFax->errMsg; $continuar = false; } } } if ($continuar) { if (!$pEmail->setAccountPassword($username, $password1)) { $continuar = false; $error = _tr("Password couldn't be updated") . " " . $pEmail->errMsg; $editFax = true; } } //debemos actualizar el password en las variable de session if ($continuar && $_SESSION['elastix_user'] == $username) { $_SESSION['elastix_pass'] = $md5password; $_SESSION['elastix_pass2'] = $password1; } } else { $error = _tr("Password couldn't be updated") . " " . $pACL->errMsg; $continuar = false; } } else { //editamos la configuracion del fax if ($continuar) { if ($cFExten && $userLevel1 != "other") { //cuando se cambia el patron de marcado asociado al fax del usuario //es necesario incluir el parametro oldFaxExten entre los parametros para //la actualizacion correcta de los datos if (!$pFax->editFaxToUser(array("idUser" => $idUser, "oldFaxExten" => $oldFaxExten, "country_code" => $countryCode, "area_code" => $areaCode, "clid_name" => $cldiName, "clid_number" => $clidNumber))) { $error = "Couldn't updated user fax. " . $pFax->errMsg; $continuar = false; } } else { if (!$pFax->editFaxToUser(array("idUser" => $idUser, "country_code" => $countryCode, "area_code" => $areaCode, "clid_name" => $cldiName, "clid_number" => $clidNumber))) { $error = "Couldn't updated user fax. " . $pFax->errMsg; $continuar = false; } } } } if ($continuar) { $Exito = true; $this->_DB->commit(); //recargamos la configuracion en realtime de los dispositivos para que tomen efectos los cambios if ($cExten) { //se cambio la extension del usuario hay que eliminar de cache la anterior $pDevice->tecnologia->prunePeer($arrExtUser["device"], $arrExtUser["tech"]); } else { $pDevice->tecnologia->prunePeer($arrExtUser["device"], $arrExtUser["tech"]); $pDevice->tecnologia->loadPeer($arrExtUser["device"], $arrExtUser["tech"]); } if ($cFExten) { //se cambio la faxextension del usuario hay que eliminar de cache la anterior $pDevice->tecnologia->prunePeer($faxUser["device"], $faxUser["tech"]); } else { //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(); } else { $this->_DB->rollBack(); if ($editFax == true) { $pFax->editFaxFileConfig($faxUser['dev_id'], $faxUser['country_code'], $faxUser['area_code'], $faxUser['clid_name'], $faxUser['clid_number'], $arrUser[0]['md5_password'], 0, $arrOrgz['domain']); } if ($cExten == true) { $pDevice->deleteAstDBExt($extension, "sip"); $pDevice->restoreBackupAstDBEXT($arrBackup); } } } else { $error = _tr("Failed Updated Group") . " " . $pACL->errMsg; $this->_DB->rollBack(); } } else { $error = _tr("User couldn't be update") . " " . $pACL->errMsg; $this->_DB->rollBack(); } if ($cExten || $cFExten) { $reAsterisk = true; } $this->errMsg = $error . " " . $this->errMsg; return $Exito; }
function createFaxToUser($arrProp) { require_once 'libs/paloSantoPBX.class.php'; $tech = 'iax2'; $pACL = new paloACL($this->_DB); // 1) Averiguar el numero de dispositivo que se puede usar if (!isset($arrProp['devId'])) { $devId = $this->getNewDevID(); if ($devId == false) { $this->errMsg = _tr("Error to get Fax Device Identifier"); return false; } } else { $devId = $arrProp['devId']; } if (!isset($arrProp['port'])) { $port = $this->getNextAvailablePort(); if ($port == false) { $this->errMsg = _tr("Error to get Port for Fax"); return false; } } else { $port = $arrProp['port']; } // 2) obtenemos los datos dle usuario para el cual se esta creando el fax // comprobando de que este realmente exista if (isset($arrProp['idUser'])) { if (empty($arrProp['idUser'])) { $this->errMsg = _tr("Invalid User"); return false; } } else { $this->errMsg = _tr("Invalid User"); return false; } $arrUser = $pACL->getUsers2($arrProp['idUser']); if ($arrUser === false) { $this->errMsg = _tr("An error has occured when retrieved user data."); return false; } elseif (count($arrUser) == 0) { $this->errMsg = _tr("User does not exist."); return false; } $user = $arrUser[0]; //cuando de crea un fax para un usario el nombre del peer usado para el fax //es igual code_username. Donde username es el useraname sin la parte del @dominio $username = strstr($user['username'], '@', true); $domain = $this->getDomainOrganization($user["id_organization"]); // 3) debemos crear el peer para el fax y ademas comprabar que la extension pasada como parametrono se este usando // para los faxes siempre se usa tecnologia iax $pDevice = new paloDevice($domain, $tech, $this->_DB); if (!$pDevice->validatePaloDevice()) { $this->errMsg = $pDevice->errMsg; return false; } $orgCode = $pDevice->getCode(); $extension = $user["fax_extension"]; $device = "{$username}FX_{$orgCode}"; if ($pDevice->existDevice($extension, $device, $tech) == true) { $this->errMsg = "Error Fax Number. " . $pDevice->errMsg; return false; } $clid_name = isset($arrProp['clid_name']) ? $arrProp['clid_name'] : $extension; if (!preg_match("/^[[:alnum:]_[:space:]-]+\$/", $clid_name)) { $clid_name = $extension; } $clid_number = isset($arrProp['clid_number']) ? $arrProp['clid_number'] : $extension; if (!preg_match("/^[[:alnum:]_[:space:]-]+\$/", $clid_number)) { $clid_number = $extension; } //creamos el peer $arrPeer = $arrProp; $arrPeer["name"] = "{$username}FX"; $arrPeer["defaultip"] = "127.0.0.1"; $arrPeer['secret'] = $user["md5_password"]; $arrPeer["fullname"] = $clid_name; $arrPeer["cid_number"] = $clid_number; $arrPeer["port"] = $port; $arrPeer['dial'] = strtoupper($tech) . "/" . $device; $arrPeer['organization_domain'] = $domain; $pDevice->tecnologia->setGroupProp($arrPeer, $domain); if (empty($pDevice->tecnologia->context)) { $pDevice->tecnologia->context = 'from-internal'; } $arrPeer['context'] = $pDevice->tecnologia->context; if ($pDevice->tecnologia->insertDB() == false) { $this->errMsg = "Error setting parameter {$type} device " . $pDevice->tecnologia->errMsg; return false; } $RT = 15; if (isset($ringTime)) { if (preg_match("/^[[:digit:]]+\$/", $arrProp['ringTime']) && ($arrProp['ringTime'] > 0 && $arrProp['ringTime'] < 60)) { $RT = $arrProp['ringTime']; } } // 3) creamos el registro en la tabla fax if (!$this->insertFaxDB($domain, $arrPeer['context'], $extension, $tech, $arrPeer['dial'], $device, $RT, $clid_name, $clid_number, $arrProp['area_code'], $arrProp['country_code'], $port, $devId, $arrProp['fax_content'], $arrProp['fax_subject'], $user['username'])) { return false; } // 4) AƱadir el fax a los archivos de configuraciĆ³n if ($this->addFaxConfiguration($port, $devId, $arrProp['country_code'], $arrProp['area_code'], $clid_name, $clid_number, $device, $user['md5_password'], $user['username'])) { return true; } else { $this->errMsg = _tr("Error to create fax") . " " . $this->errMsg; return false; } }