We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 28173
    • 409 Posts
    Je cherche à faire s’afficher un chunk si et seulement si je suis connecté au manager.
    Je pensais y parvenir grace à PHx, mais je ne m’en dépatouille pas :
    [+phx:isinrole=`Administrator`:then=`Je suis connecté!`:else=``+]


    Quelle est la bonne syntaxe pour PHx ?
    Existe-t-il un snippet qui assure cette fonction ?

    Merci pour votre aide smiley
      • 36624
      • 535 Posts
      sinon essaie . http://modxcms.com/extras.html?view=package/view&package=270

      ;)
        CTRL+SHIFT+U - Clear Cache
        CTRL+SHIFT+H - Hiding Heft Panel
        CTRL+SHIFT+N - Fast Create Resource
        CTRL+ALT+P - Preview Recource (in edit resorce window)
        CTRL+ALT+S - Save
        • 28173
        • 409 Posts
        Merci du tuyau smiley
        Je vais devoir attendre car le snippet n’a pas parfaitement suivit lors de la migration du site semble-t-il smiley
          • 6726
          • 7,075 Posts
          OK j’ai une version du snippet sur mon DD, le voici, peut-être pas la dernière attention !

          Quelqu’un a remonté ça à Zi ?
            .: COO - Commerce Guys - Community Driven Innovation :.


            MODx est l'outil id
            • 28173
            • 409 Posts
            Merci David, mais vue l’entête du snippet, il s’agit de MemberCheck smiley
            Je vais qd même essayer au cas où.... smiley

            Sinon je ne sais pas trop comment remonter le bug. Lors du téléchargement, il est dit que les admin ont été informé du pb... donc je sais pas trop....
              • 36624
              • 535 Posts
              c’est le bon, a la ligne 17 :

              # Jan 03, 07 -- converted to check for manager user (sottwell)

              ;)
                CTRL+SHIFT+U - Clear Cache
                CTRL+SHIFT+H - Hiding Heft Panel
                CTRL+SHIFT+N - Fast Create Resource
                CTRL+ALT+P - Preview Recource (in edit resorce window)
                CTRL+ALT+S - Save
                • 6726
                • 7,075 Posts
                Juste quand j’allais poster cette ligne du snippet...
                  .: COO - Commerce Guys - Community Driven Innovation :.


                  MODx est l'outil id
                  • 28173
                  • 409 Posts
                  Après plusieurs tests, je ne parviens pas à arriver à ce que je veux...
                  Avec tout le respect que je peux avoir pour sottwell (que je ne connais toutefois que trop peu!), j’ai l’impression que le snippet ManagerCheck a été transformé un peu à la va-vite.
                  Pas moyen de checker si je suis connecté au manager en tant qu’admin ou pas.
                  MemberCheck se base sur les Utilisateurs Web, et pas sur les Utilisateurs (tout court).
                  Et après examen du code (avec mes faibles compétences en code php), je ne vois pas trop de changement entre MemberCheck et ManagerCheck...
                  Ce dernier devrait en théorie permettre de tester l’appartenance à un groupe Utilisateur en plus de tester l’appartenance à un groupe Utilisateur Web.

                  Je me trompe ?

                  Parce que finalement je pensais mon besoin assez simple : je cherche juste à faire s’afficher un chunk si je suis connecté au manager...

                  davidm : tu y es parvenu toi grâce à ManagerCheck ?
                    • 6726
                    • 7,075 Posts
                    ManagerCheck est une variante de MemberCheck que Susan a gentimment écrit suite à une demande d’adaptation du snippet sur le forum, c’est donc un peu logique que le code ne soit pas aussi léché qu’on a l’habitude de le voir venant de sa part (Susan est sans aucun doute l’un des pilliers du projet même si en ce moment elle ne peut plus contribuer en raison de problèmes de santé importants).

                    Ceci dit effectivement ManagerCheck vérifie si on appartient à un ou plusieurs groupe utilisateur et non si on est connecté au manager, pour ça il faudra tirer partie de l’API :
                    http://wiki.modxcms.com/index.php/API:userLoggedIn

                    Je ne connais pas de snippet qui gère ça, ni même de modifier PHx malheureusement...






                      .: COO - Commerce Guys - Community Driven Innovation :.


                      MODx est l'outil id
                      • 36624
                      • 535 Posts
                      salut,

                      alors, j’ai retrouvé une modification du snippet de sottwell qui affiche un chunk si le manager fait partie du groupe qui peut modifier la page.



                      <?php
                      #::::::::::::::::::::::::::::::::::::::::
                      # Snippet name: DocumentManagerCheck
                      # Based on ManagerCheck by Ryan Thrash (vertexworks.com)
                      #
                      # Params:
                      #	&chunk [string] (REQUIRED)
                      #		name of the chunk to use if passes the check
                      #
                      #	&default [string] (optional)
                      #		name of the chunk to use if no webuser group-names match
                      #
                      #	&ph [string] (optional)
                      #		name of the placeholder to set instead of directly retuning chunk
                      #
                      #	&debug [boolean] (optional | false) 
                      #		turn on debug mode for extra troubleshooting
                      #
                      # Example Usage:
                      #
                      #	[[DocumentManagerCheck? &chunk=`privateSiteNav` &default=`publicSiteNav` &ph=`MemberMenu` &debug=`true`]]
                      #
                      #::::::::::::::::::::::::::::::::::::::::
                      
                      # debug parameter
                      $debug = isset ($debug) ? $debug : false;
                      
                      # check if inside manager
                      if ($m = $modx->insideManager()) {
                      	return ''; # don't go any further when inside manager
                      }
                      
                      $groups = $_SESSION['mgrShortname'];
                      
                      
                      if (!isset ($chunk)) {
                      	return $debug ? '<p>Error: No Chunk Specified</p>' : '';
                      }
                      
                      # check if default is set, if not sets value
                      $default = (isset($default))? $default : '';
                      
                      # turn comma-delimited list of groups into an array
                      $groups = explode(',', $groups);
                      
                      if (!class_exists('MemberCheck')) {
                      	class MemberCheck {
                      		var $allGroups = NULL;
                      		var $debug;
                      
                      		function getInstance($debug) {
                      			static $instance;
                      			if (!isset ($instance)) {
                      				$instance = new MemberCheck($debug);
                      			}
                      			return $instance;
                      		}
                      
                      		function MemberCheck($debug = false) {
                      			global $modx;
                      
                      			$this->debug = $debug;
                      			if ($debug) {
                      				$this->allGroups = array ();
                      				$tableName = $modx->getFullTableName('documentgroup_names');
                      				$sql = "SELECT name FROM $tableName";
                      				if ($rs = $modx->db->query($sql)) {
                      					while ($row = $modx->db->getRow($rs)) {
                      						array_push($this->allGroups, stripslashes($row['name']));
                      					}
                      				}
                      			}
                      		}
                      
                      		function isValidGroup($groupName) {
                      			$isValid = !(array_search($groupName, $this->allGroups) === false);
                      			return $isValid;
                      		}
                      		
                      	function isMemberOfGroup($groups) {       
                                 global $modx;
                                  if (isset ($_SESSION['mgrDocgroups']) && isset ($_SESSION['mgrValidated'])) {
                                      $dg= $_SESSION['mgrDocgroups'];
                                      $dgn= $_SESSION['mgrDocgrpNames'];
                                  } else { return false; }
                                  
                                  if (is_array($dg)) {
                                      // resolve ids to names
                                      $dgn= array ();
                                      $tbl= $modx->getFullTableName("document_groups");
                                      $ds= $modx->dbQuery("SELECT document FROM $tbl WHERE document_group IN (" . implode(",", $dg) . ")");
                                      while ($row= $modx->fetchRow($ds)) {
                                          if( $row['document'] == $modx->documentIdentifier ) return true;
                                      }
                                  }
                      
                                  return false;
                      	}
                      		
                      		function getMemberChunk(& $groups, $chunk, $default) {
                      			global $modx;
                      			$o = '';
                      			if (is_array($groups)) {
                      				for ($i = 0; $i < count($groups); $i++) {
                      					$groups[$i] = trim($groups[$i]);
                      					if ($this->debug) {
                      						if (!$this->isValidGroup($groups[$i])) {
                      							return "<p>The group <strong>" . $groups[$i] . "</strong> could not be found...</p>";
                      						}
                      					}
                      				}
                      				$check = $this->isMemberOfGroup($groups);
                      				
                      				$chunkcheck = $modx->getChunk($chunk);
                      				$defaultcheck = $modx->getChunk($default);
                      				if ( $check ) {
                      					$o .= ($check && $chunkcheck) ? $chunkcheck : '';
                      					if (!$chunkcheck)
                      						$o .= $this->debug ? "<p>The chunk <strong>$chunk</strong> not found...</p>" : '';
                      				}
                      				else
                      				{
                      					if ($defaultcheck && (strlen($default) >= 1)) {
                      						$o .= ($defaultcheck) ? $defaultcheck : '';
                      					}
                      					if (!$defaultcheck && (strlen($default) >= 1)) {
                      						$o .= $this->debug ? "<p>The default chunk <strong>$default</strong> not found...</p>" : '';
                      					}
                      				}
                      			} else {
                      				$o .= "<p>No valid group names were specified!</p>";
                      			}
                      			return $o;
                      		}
                      	}
                      }
                      
                      $memberCheck = MemberCheck :: getInstance($debug);
                      
                      if (!isset ($ph)) {
                      	return $memberCheck->getMemberChunk($groups, $chunk, $default);
                      } else {
                      	$modx->setPlaceholder($ph, $memberCheck->getMemberChunk($groups, $chunk, $default));
                      	return '';
                      }
                      ?>
                        CTRL+SHIFT+U - Clear Cache
                        CTRL+SHIFT+H - Hiding Heft Panel
                        CTRL+SHIFT+N - Fast Create Resource
                        CTRL+ALT+P - Preview Recource (in edit resorce window)
                        CTRL+ALT+S - Save