Pour hacker le moins possible j’ai l’impression qu’il faut rajouter des événements un peu partout. Par exemple une fois que la requête sql est crée on peut insérer OnTemplateSqlDocMutate (ou tout autre nom mieux choisi):
$sql.= "WHERE tvtpl.templateid = ".$template." AND (1='".$_SESSION['mgrRole']."' OR ISNULL(tva.documentgroup)".((!$docgrp)? "":" OR tva.documentgroup IN ($docgrp)").") ORDER BY tv.rank;";
$modx->invokeEvent("OnTemplateSqlDocMutate");
, ajouter cet événement dans la table system_eventnames,
puis on crée un plugin réagissant à cet événement :
$sql = "SELECT DISTINCT tv.*, IF(tvc.value!='',tvc.value,tv.default_text) as value ";
$sql.= "FROM $dbase.".$table_prefix."site_tmplvars tv ";
$sql.= "INNER JOIN $dbase.".$table_prefix."site_tmplvar_templates tvtpl ON tvtpl.tmplvarid = tv.id ";
$sql.= "LEFT JOIN $dbase.".$table_prefix."site_tmplvar_contentvalues tvc ON tvc.tmplvarid=tv.id AND tvc.contentid = $id ";
$sql.= "LEFT JOIN $dbase.".$table_prefix."site_tmplvar_access tva ON tva.tmplvarid=tv.id ";
$sql.= "WHERE tvtpl.templateid = ".$template." AND (1='".$_SESSION['mgrRole']."' AND (ISNULL(tva.documentgroup)".((!$docgrp)? "":" OR tva.documentgroup IN ($docgrp)").")) ORDER BY tv.rank;";
Ainsi le hack consiste seulement à ajouter un événement dans mutate_content.dynamic, ajouter son nom dans la table system_eventnames. Ensuite tout est une affaire de plugin, qui ici remplace la requête SQL par une nouvelle.