/** Este procedimiento se encarga de crear un usuario que pertenece a una organizacion, al usuario se le crea una cuenta de correo dentro de la organizacion una extension telefonica dentro de asterisk un fax con hylafax y la extension para el fax dentro de asterisk */ function createUserOrganization($idOrganization, $username, $name, $md5password, $password, $idGroup, $extension, $fax_extension, $countryCode, $areaCode, $clidNumber, $cldiName, $quota, &$lastId, $transaction = true) { 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 = ""; // 1) valido que la organizacion exista // 2) trato de crea el usuario en la base -- aqui se hacen validaciones con respecto al usuario // --Se valida que no exista otro usuario con el mismo username // --Se valida que no exista otro usuario dentro de la misma organizacion con la misma sip_extension // --Se valida que no exista otro usuario dentro de la misma organizacion con la misma fax_extension // --Que no se supere el maximo numeros de usuarios por organizacion de existir esa propiedad // 3) creo la cuenta de fax // 4) creo la cuenta de mail // 5) se crea la extension dentro del plan de marcado para el usuario if ($name == "") { $name = $username; } $arrOrgz = $this->getOrganizationById($idOrganization); if (is_array($arrOrgz) && count($arrOrgz) > 0) { // 1) $emailUser = $username; $username = $emailUser . "@" . $arrOrgz["domain"]; $peer_name = $emailUser . "_" . $arrOrgz["code"]; $peer_fax = $fax_extension . "_" . $arrOrgz["code"]; //validamos que no exista otro usuario con la misma sip_extension //validamos que no exista otro usuario con la misma fax_extension //TODO: en un futuro las extensiones podran ser sip o iax, eso lo define el administrador entre las //opciones generales y habra que preguntar que tipo de extension se va a crear if ($fax_extension == $extension) { $this->errMsg = _tr("Extension number and Fax number can not be equal"); return false; } $pDevice = new paloDevice($arrOrgz["domain"], "sip", $this->_DB); if ($pDevice->existDevice($extension, $peer_name, "sip") == true) { $this->errMsg = "Error Extension Number. " . $pDevice->errMsg; return false; } //las extensiones usadas para el fax siempre son de tipo iax if ($pDevice->existDevice($fax_extension, $peer_fax, "iax2") == true) { $this->errMsg = "Error Extension Number. " . $pDevice->errMsg; return false; } $max_num_user = $this->getOrganizationProp($idOrganization, "max_num_user"); if (ctype_digit($max_num_user)) { if ($max_num_user != 0) { $numUser = $this->getNumUserByOrganization($idOrganization); if ($numUser >= $max_num_user) { $this->errMsg = _tr("Err: You can't create new users because you have reached the max numbers of users permitted") . " ({$max_num_user}). " . _tr("Contact with the server's admin"); return false; } } } if ($transaction) { $this->_DB->beginTransaction(); } if ($pACL->createUser($username, $name, $md5password, $idGroup, $extension, $fax_extension, $idOrganization)) { //creamos usuario //seteamos los registros en la tabla user_properties if ($countryCode == "" || $countryCode == null) { $countryCode = $this->getOrganizationProp($idOrganization, "country_code"); } if ($areaCode == "" || $areaCode == null) { $areaCode = $this->getOrganizationProp($idOrganization, "area_code"); } if ($clidNumber == "" || $clidNumber == null) { $clidNumber = $fax_extension; } if ($cldiName == "" || $cldiName == null) { $cldiName = $name; } $fax_subject = $this->getOrganizationProp($idOrganization, "fax_subject"); $fax_content = $this->getOrganizationProp($idOrganization, "fax_content"); $fax_subject = empty($fax_subject) ? "Fax attached (ID: {NAME_PDF})" : $fax_subject; $fax_content = empty($fax_content) ? "Fax sent from '{COMPANY_NAME_FROM}'. The phone number is {COMPANY_NUMBER_FROM}. \n This email has a fax attached with ID {NAME_PDF}." : $fax_content; //obtenemos el id del usuario que acabmos de crear $idUser = $pACL->getIdUser($username); $lastId = $idUser; if ($quota == "" || $quota == null) { $quota = $this->getOrganizationProp($idOrganization, "email_quota"); } //seteamos la quota if ($quota !== false && $continuar) { if (!$pACL->setUserProp($idUser, "email_quota", $quota, "email")) { $error = _tr("Error setting quota") . $pACL->errMsg; if ($transaction) { $this->_DB->rollBack(); } $continuar = false; } } else { $error = _tr("Property quota is not set") . $this->errMsg; $continuar = false; } $arrSysProp = $this->getOrganizationPropByCategory($idOrganization, "system"); if (is_array($arrSysProp) && $continuar) { foreach ($arrSysProp as $tmp) { if (!$pACL->setUserProp($idUser, $tmp["property"], $tmp["value"], "system")) { $error = _tr("Error setting user properties") . $pACL->errMsg; if ($transaction) { $this->_DB->rollBack(); } $continuar = false; break; } } } if ($continuar) { //creamos la extension del usuario $arrProp = $this->setParameterUserExtension($arrOrgz["domain"], "sip", $extension, $password, $name, $username, $this->_DB); if ($arrProp == false) { $error = $this->errMsg; if ($transaction) { $this->_DB->rollBack(); } $continuar = false; } else { if ($pDevice->createNewDevice($arrProp, "sip") == false) { $error = $pDevice->errMsg; if ($transaction) { $this->_DB->rollBack(); } $pDevice->deleteAstDBExt($extension, "sip"); $continuar = false; } } } //creamos fax y el email del usuario if ($continuar) { //$idUser,$countryCode,$areaCode,$cldiName,$clidNumber if ($pFax->createFaxToUser(array("idUser" => $idUser, "country_code" => $countryCode, "area_code" => $areaCode, "clid_name" => $cldiName, "clid_number" => $clidNumber, "fax_content" => $fax_content, "fax_subject" => $fax_subject))) { //si se crea exitosamente el fax creamos el email if ($pEmail->createAccount($arrOrgz["domain"], $emailUser, $password, $quota * 1024)) { $Exito = true; if ($transaction) { $this->_DB->commit(); } $pFax->restartService(); } else { $error = _tr("Error trying create email_account") . $pEmail->errMsg; $devId = $pACL->getUserProp($idUser, "dev_id"); if ($transaction) { $this->_DB->rollBack(); } $pDevice->deleteAstDBExt($extension, "sip"); $pFax->deleteFaxConfiguration($devId); } } else { $error = _tr("Error trying create new fax") . $pFax->errMsg; $pDevice->deleteAstDBExt($extension, "sip"); if ($transaction) { $this->_DB->rollBack(); } } } } else { $error = _tr("User couldn't be created") . ". " . $pACL->errMsg; if ($transaction) { $this->_DB->rollBack(); } } } else { $error = _tr("Invalid Organization") . $this->errMsg; } $this->errMsg = $error; return $Exito; }
function create_email_account($pDB, $domain_name, &$errMsg) { $pEmail = new paloEmail($pDB); //creo la cuenta // -- valido que el usuario no exista // -- si no existe creo el usuario en el sistema con sasldbpasswd2 // -- inserto el usuario en la base de datos // -- si hay error al insertarlo en la bd lo elimino del sistema // -- creo el mailbox para la cuenta (si hay error deshacer lo realizado) $username = ""; $configPostfix2 = isPostfixToElastix2(); // in misc.lib.php if ($configPostfix2) { $username = $_POST['address'] . '@' . $domain_name; } else { $username = $_POST['address'] . '.' . $domain_name; } $arrAccount = $pEmail->getAccount($username); if (is_array($arrAccount) && count($arrAccount) > 0) { //YA EXISTE ESA CUENTA $errMsg = _tr('The e-mail address already exists') . ": {$_POST['address']}@{$domain_name}"; return FALSE; } $bReturn = $pEmail->createAccount($domain_name, $_POST['address'], $_POST['password1'], $_POST['quota']); if (!$bReturn) { $errMsg = $pEmail->errMsg; } return $bReturn; }