CMS Automne

Forum de la communauté du CMS Automne
Nous sommes actuellement le Ven Mai 03, 2024 12:03 am

Le fuseau horaire est UTC [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 6 messages ] 
Auteur Message
MessagePublié: Lun Mai 02, 2011 10:26 pm 
Hors-ligne

Inscrit(e) le : Jeu Oct 07, 2010 10:58 am
Message(s) : 5
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...


Haut
 Profil  
 
MessagePublié: Mar Mai 03, 2011 8:24 am 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Mer Juin 15, 2005 8:28 am
Message(s) : 759
Localisation : Sophia Antipolis
Ta méthode est la bonne. Si tu obtiens l'utilisateur root c'est qu'il s'agit de l'utilisateur actuellement connecté.


Haut
 Profil  
 
MessagePublié: Mar Mai 03, 2011 8:28 am 
Hors-ligne

Inscrit(e) le : Mar Mars 16, 2010 10:57 am
Message(s) : 10
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 ;)


Haut
 Profil  
 
MessagePublié: Mar Mai 03, 2011 2:33 pm 
Hors-ligne

Inscrit(e) le : Jeu Oct 07, 2010 10:58 am
Message(s) : 5
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 !


Haut
 Profil  
 
MessagePublié: Mar Mai 03, 2011 3:21 pm 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Mer Juin 15, 2005 8:28 am
Message(s) : 759
Localisation : Sophia Antipolis
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.


Haut
 Profil  
 
MessagePublié: Lun Mai 09, 2011 10:03 am 
Hors-ligne

Inscrit(e) le : Jeu Oct 07, 2010 10:58 am
Message(s) : 5
Merci pour c'est réponse qui est en fait très claire !


A+


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 6 messages ] 

Le fuseau horaire est UTC [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 9 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Recherche de:
Aller vers :  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduit par Maël Soucaze et Elglobo © phpBB.fr