<?php
/**
 * 
 * Programme de demarrage 
 * 
 */
require_once 'application/class/class_panier.php';

$connecteur = new Connecteur();


$user = new Utilisateur(); // Objet utilisateur
$inscript = new CollabManage(); // Objet utilisé pour les appels aux wsdl d'enregistrement de création de profil
                                // si on est en mode HTML, on charge l'entête.
$isHttp = (GetValue('THROUGH') == 'TRUE');

// Si l'utilisateur clique sur le lien 'Pas encore de compte'
if (getValue('action') == 'initialisation') {
    
    // On ajoute les traitements sur toutes les actions possibles de l'utilisateur
    $user = new Utilisateur();
    $array_data = $user->buildXMLFicheUser('', 'C');
    
    $array = Utilisateur::setActionsOnFormUser(Param::getNameCurrentScript(), 'fiche_user', 'user', 'modify', 'autodeclaration', $array_data);
    
    /*
     * Forcer la possibilité de changer de société : ticket 27825
     */
    $array['zoom_societe']['!modify'] = 1;
    
    // Si le paramétrage global Active Directory est activé, alors on établie la liste des domaines Active Directory disponibles
    if (Param::isActiveDirectoryActivated()) {
        $array['fiche_user']['domainesActiveDirectory']['Liste'] = Param::getAllDomaineActiveDirectory();
        $array['fiche_user']['domainesActiveDirectory']['Default'] = Param::getDefaultDomaineActiveDirectory();
    }
    
    $_SESSION['Mode_Global_SSO'] = Param::ISActiveSSO();
    $_SESSION['Mode_Global_ActiveDirectory'] = Param::isActiveDirectoryActivated();
    
    // $array['pageCenter'] = '1';
    // Affichage de la page
    $obj_xml = new GenXslt(true);
    // echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
    echo $obj_xml->XslHtml('application/xsl/fiche_user.xsl', $array);
    Affichage::effectPageAccueil(false);
}// Si l'utilisateur effectue une action sur le formulaire : se réferrer à la fonction Utilisateur::setActionsOnFormUser pour connaitre toutes les actions possibles lors de l'autodéclaration
elseif (isset($_GET['action'])) {
    
    Utilisateur::controlFormUser(Param::getNameCurrentScript(), 'fiche_user', getValue('action'), $_POST);
}// Si l'utilisateur enregistre son formulaire d'autodéclaration
elseif (getValue('enregistrer') == 'autodeclaration') {
    // Avant l'enregistrement définitif on contrôle que si le module des stock est sélectionné alors un site de stockage valide est bien renseigné
    if (getValue('magasin') == 'on') {
        if (! Utilisateur::controlFormUser(Param::getNameCurrentScript(), 'fiche_user', 'changeSTK', $_POST)) {
            $connecteur->disconnect();
            exit();
        }
    }
    
    // Si le(s) champ(s) mots de passe présent(s) sotnt correctement renseignés
    if (Utilisateur::controlFormUser(Param::getNameCurrentScript(), 'fiche_user', 'password', $_POST)) {
        // Vérification mot de passe
        $rulesUserPassword = SqlUsers::rqGetRulesPassword()->TrouveTous();
        $password_verif = true;
        $msgErreur = '';

        $listeRulesUserPassword = [];
        foreach($rulesUserPassword as $value)
        {
            $value['CODEPARV'] = str_replace(' ', '', $value['CODEPARV']);
            $value['LIB01PARV'] = str_replace(' ', '', $value['LIB01PARV']);
            $listeRulesUserPassword[$value['CODEPARV']] = $value['LIB01PARV'];
        }

        if($listeRulesUserPassword['MDP_A_MAJ'] == 'O' )
        {
            if (!preg_match('/[A-Z]+/', $_POST['new_pass']))
            {
                $password_verif = false;
                $msgErreur .= trad('Un problème est survenu, votre mot de passe doit contenir au moins une majuscule. ');
            }
        }

        if($listeRulesUserPassword['MDP_A_MIN'] == 'O' )
        {
            if (!preg_match('/[a-z]+/', $_POST['new_pass']))
            {
                $password_verif = false;
                $msgErreur .= trad('Un problème est survenu, votre mot de passe doit contenir au moins une minuscule. ');
            }
        }

        if($listeRulesUserPassword['MDP_A_CHI'] == 'O' )
        {
            if (!preg_match('/[0-9]+/', $_POST['new_pass']))
            {
                $password_verif = false;
                $msgErreur .= trad('Un problème est survenu, votre mot de passe doit contenir au moins un chiffre. ');
            }
        }

        if($listeRulesUserPassword['MDP_A_CS'] == 'O' )
        {
            if (!preg_match('/\W+/', $_POST['new_pass']))
            {
                $password_verif = false;
                $msgErreur .= trad('Un problème est survenu, votre mot de passe doit contenir au moins un caractère spécial. ');
            }
        }

        // faire le meme systeme que la 1032AH13
        if($listeRulesUserPassword['LONG_MINI_MDP'] != 0 && !getValue('mode_sso_ask') )
        {
            if(strlen($_POST['new_pass']) < $listeRulesUserPassword['LONG_MINI_MDP'] )
            {
                $password_verif = false;
                
                $message = trad('Un problème est survenu, votre mot de passe doit comporter au moins @1@ caractères.');
                $msgErreur .= strBuild($message, $listeRulesUserPassword['LONG_MINI_MDP']);
            }
        }

        if(!$password_verif){
            Affichage::messageJS($msgErreur);
            $connecteur->disconnect();
                    exit();
        }

        // Test de l'existance du login en mode SSO
        if ($_SESSION['Mode_Global_SSO'] && $_POST['mode_sso_ask'] == 'on') {
            if ($data_user = & SqlUsers::rqGetInfoUser($_SESSION['Authent_window'])->Trouve1() && trim($_SESSION['Authent_window']) != '') {
                Affichage::messageJS(trad("Un utilisateur existe déjà avec le même login, l'enregistrement est impossible, veuillez vérifier"));
                Affichage::setAttribut('mode_sso_ask', 'checked', false);
                $connecteur->disconnect();
                exit();
            }
        }
        unset($_SESSION['SOCIETE_NEW_USER']);
        // Envoie du formulaire de soumission
        echo 'document.forms.fiche_user.submit();';
    }
} elseif (getValue('enregistrer') == 'validation') {    
        // Appel du wsdl pour l'enregistrement de la demande de création de compte
        $result = $inscript->callWSDLForRegisterProfil($_POST, 'C');
        
        if (isset($result['Retour']) && $result['Retour'] == 'Workflow') {
            unset($_SESSION['SOCIETE_NEW_USER']);
            $action = 'alert(\'' . cnv_to_javascript(trad('Votre demande a été prise en compte')) . "'); document.location='index.php';";
            echo '<script type="text/javascript">'. $action. '</script>';
        }
        else{
            echo "<script type='text/javascript'>alert('", cnv_to_javascript($result['MsgErreur']), "');</script>";
        }
}


$connecteur->disconnect();
exit();
