/**
     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;
 }
Exemple #2
0
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;
}