CMS Automne
http://www.automne-cms.org/forum/

Automne 4.1 : Comment récupérer l'utilisateur en php ?
http://www.automne-cms.org/forum/viewtopic.php?f=2&t=836
Page 1 sur 1

Auteur:  jcarbou [ Lun Mai 02, 2011 10:26 pm ]
Sujet du message:  Automne 4.1 : Comment récupérer l'utilisateur en php ?

Bonjour,

J'utilise à titre personnel automne et j'ai notamment développé un petit pluggin qui fonctionnait à peu près correctement sous automne 4.0. Je me suis largement inspiré du pluggin d'export pdf (ma classe hérite de CMS_moduleValidation).

Dans la méthode treatWantedTag j'utilisais la variable globale $cms_user pour récupérer l'utilisateur courant. Sous automne 4.1 cette variable semble systématiquement positionnée avec l'utilisateur root !!!
Code :
'global $cms_user';

J'ai tenté de récupérer l'utilisateur via
Code :
$user_context = $_SESSION["cms_context"];
$user_context->getUser();

et là je tombe aussi sur root !

Du coup j'ai plus d'idées...

Auteur:  Sébastien [ Mar Mai 03, 2011 8:24 am ]
Sujet du message:  Re: Automne 4.1 : Comment récupérer l'utilisateur en php ?

Ta méthode est la bonne. Si tu obtiens l'utilisateur root c'est qu'il s'agit de l'utilisateur actuellement connecté.

Auteur:  GuillaumeM [ Mar Mai 03, 2011 8:28 am ]
Sujet du message:  Re: Automne 4.1 : Comment récupérer l'utilisateur en php ?

Dans quel contexte te situes tu ? As-tu un espace réservé avec authentification ?

Pour info, la variable globale $cms_user est une instance de la classe CMS_profile_user.
Donc tu peux utiliser toutes les méthodes contenues dans cette classe /automne/classes/user/profileuser.php

Exemple :
si tu veux récupérer le login de l'utilisateur :
Code :
$cms_user->getLogin()


si tu veux récupérer le nom de l'utilisateur :
Code :
$cms_user->getFullName()


etc

Pour plus d'info, il faudrait que tu détailles un peu plus ;)

Auteur:  jcarbou [ Mar Mai 03, 2011 2:33 pm ]
Sujet du message:  Re: Automne 4.1 : Comment récupérer l'utilisateur en php ?

Tout d'abord merci pour votre aide et la rapidité de vos réponses !

En faite voici le code de ma méthode

Code :

function treatWantedTag(&$tag, $tagContent, $treatmentMode, $visualizationMode, &$treatedObject, $treatmentParameters)
   {
      global $cms_user;
      switch ($treatmentMode) {
         case MODULE_TREATMENT_PAGECONTENT_TAGS:
            if (!is_a($treatedObject,"CMS_page")) {
               $this->raiseError('$treatedObject must be a CMS_page object');
               return false;
            }
            switch ($tag->getName()) {
               case 'atm-wzf-wizard':
                  $wzfType = $tag->getAttribute("type");
                  $wzfMode = $tag->getAttribute("mode");
                  
                  //$user_context = $_SESSION["cms_context"];
                  $user = $cms_user;//$cms_user$user_context ? $user_context->getUser() : false;
                  if (!isset($user) || !($user instanceof CMS_profile_user) ||  $user->getLogin()=='anonymous') {
                     return 'Votre session à expirée !';
                  }
                  
                  //get page website
                  $website = $treatedObject->getWebsite();
                  //get website url
                  $url = $website->getURL();
                  //build load url
                  $loadUrl = $url.self::WZF_LOAD_FILE_PATH_WR;
                  $saveUrl = $url.self::WZF_SAVE_FILE_PATH_WR.'?type='.$wzfType;
                  
                  $content = '<link rel="stylesheet" type="text/css" href="/js/extjs/resources/css/ext-all.css"/>'."\n"   
                        .'<link rel="stylesheet" type="text/css" href="/js/frmwizard/resources/css/commons.css"/>'."\n"
                        .'<script type="text/javascript" src="/js/jquery.js"></script>'."\n"
                        .'<script type="text/javascript" src="/js/extjs/adapter/jquery/ext-jquery-adapter.js"></script>'."\n"
                        .'<script type="text/javascript" src="/js/extjs/ext-all-debug.js"></script>'."\n"
                        .'<script type="text/javascript" src="/js/extjs/ext-lang-fr.js"></script>'."\n"
                        .'<script type="text/javascript" src="/js/frmwizard/wzf-all-debug.js"></script>'."\n"
                        .'<script type="text/javascript" src="/js/frmwizard/'.$wzfType.'Wizard.js"></script>'."\n"                        
                        .'<script type="text/javascript">Ext.onReady(function(){'."\n"
                        .'var f = new Ai.AIWizard'.$wzfMode.'({'."\n"
                        .'saveUrl:\''.$saveUrl.'\','."\n"
                        .'wizardType:\''.$wzfType.'\'});'."\n"
                        .'f.startWizard();'."\n"
                        .'f.loadForm({url:\''.$loadUrl.'\'});'."\n"
                        .'});</script>'."\n";
                  if ($wzfMode=='Panel'){
                     $content .= $user->getLogin().'<br/><div id="wizardForm" style="margin:5px"></div>'."\n";
                  }
                  
                  return $content;
               break;
               case 'atm-wzf-export':
                  $exportType =$tag->getAttribute("type");
                  $exportSport = $tag->getAttribute("sport");
                  
                  //get link template
                  $template = $tag->getInnerContent();
                  //get page website
                  $website = $treatedObject->getWebsite();
                  //get website url
                  $url = $website->getURL();
                  //build pdf url
                  $url .= self::WZF_EXPORT_FILE_PATH_WR.'?type='.$exportType.'&sport='.$exportSport;
                  //create link
                  if ($tag->getAttribute("keeprequest") == 'true') {
                     return '<?php echo \''.str_replace("{{href}}", $url.'\'.($_SERVER["QUERY_STRING"] ? \'&amp;\'.$_SERVER["QUERY_STRING"] : \'\').\'', str_replace("\\\\'", "\'", str_replace("'", "\'", $template))).'\' ?>';
                  } else {
                     return str_replace("{{href}}", $url, $template);
                  }
               break;
            }
         break;
      }
      return $tagContent;
   }


J'ai besoin de récupérer l'utilisateur courant pour lui proposer un formulaire de saisie. Je suis sûr que l'utilisateur courant n'est pas root car la première chose que fait ce formulaire est de faire un appel ajax au code suivant pour préremplir le formulaire :

Code :
<?php
require_once($_SERVER["DOCUMENT_ROOT"]."/cms_rc_frontend.php");

// Récupération de l'utilisateur courant
$cms_context = $_SESSION["cms_context"];
$cms_user = $cms_context ? $cms_context->getUser() : false;
if (!$cms_user) {
   echo "{success:false,msg:'Vous n\'êtes pas identifié ou votre session à expirée'}";
   exit;
}

// Vérification des droits
if (!CMS_wzf_formModel::isWriteGrantedFor($cms_user)){
   echo "{success:false,msg:'Vous n\'êtes pas autorisé à éffectuer cette action'}";
   exit;
}

$msg = '{success:true,data:{'."\n"
   .'XXX_nom:\''.addslashes($cms_user->getLastName())."'\n"
   .',XXX_prenom:\''.addslashes($cms_user->getFirstName())."'\n"
   .',XXX_email:\''.addslashes($cms_user->getEmail())."'\n"
   .',XXX_discipline:\''.addslashes($cms_user->getContactData()->getService())."'\n"
   .',XXX_niveau:\''.addslashes($cms_user->getContactData()->getJobTitle())."'\n"
   .',XXX_neLe:\''.addslashes($cms_user->getContactData()->getState())."'\n"
   .'}}';
echo $msg;
?>


Or ce code retourne les données de l'utilisateur loggé (et pas root).

Bilan le code suivant retourne un utilisateur différent que l'on soit dans la méthode treatWantedTag ou que l'on soit dans un php appelé directement (ici un appel ajax) :

[code]
$cms_context = $_SESSION["cms_context"];
$cms_user = $cms_context ? $cms_context->getUser() : false;
[code]

Voilà et merci d'avance !

Auteur:  Sébastien [ Mar Mai 03, 2011 3:21 pm ]
Sujet du message:  Re: Automne 4.1 : Comment récupérer l'utilisateur en php ?

ok, c'est plus clair :)
Alors, pour faire essayer de faire simple, ton 2ème code ci-dessus s'exécute en temps réel. C'est à dire qu'il est exécuté au moment ou il est appelé. Donc il te retourne bien l'utilisateur connecté au moment de son appel.

Par contre, ton premier code (la fonction treatWantedTag), lui ne s'exécute qu'au moment de la régénération de ta page (au moment ou le parseur rencontre un tag atm-wzf-*). Le code qu'il produit est directement écrit "en dur" dans un fichier XXX.php se trouvant dans le répertoire /automne/html (ou /html si tu as migré depuis une version < 4.1.0).

Ce fichier XXX.php porte le numéro de l'identifiant de la page concernée. Je t'invite à l'éditer, comme ça tu verra pourquoi tu obtiens systématiquement le compte root en retour : C'est tout simplement parce que c'est avec le compte root que tu lance la régénération de tes pages ... le code HTML que tu met dans ta variable $content est directement écrit en dur dans ta page et c'est ce fichier qui est ensuite appelé par Automne lorsque les visiteurs consultent ton site.

Bref, ta méthode pour obtenir l'utilisateur est la bonne mais c'est le code que tu créé avec ta fonction treatWantedTag qui n'est pas le bon : tu ne dois pas créer du HTML statique avec mais du PHP qui lui sera ensuite réinterprété dynamique dans tes pages finales.

Bon je sais que tout ça est dur à comprendre mais regarde le contenu du fichier /automne/html/xxx.php, ce sera plus clair.

Auteur:  jcarbou [ Lun Mai 09, 2011 10:03 am ]
Sujet du message:  Re: Automne 4.1 : Comment récupérer l'utilisateur en php ?

Merci pour c'est réponse qui est en fait très claire !


A+

Page 1 sur 1 Le fuseau horaire est UTC [Heure d’été]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/