Re: tests avancés de XOOPS 2.0.14rc1 | Titre du sujet : Re: tests avancés de XOOPS 2.0.14rc1 par gabybob sur 18/06/2006 23:57:16
OK Skalpa, j'ai fait une modif /class/criteria.php
dans la zone class Criteria extends CriteriaElement VOICI LA FONCTION d'ORIGINE :
function render() { $value = $this->value; if ( !in_array( strtoupper($this->operator), array('IN', 'NOT IN') ) ) { if ( ( substr( $value, 0, 1 ) != '`' ) && ( substr( $value, -1 ) != '`' ) ) { $value = "'$value'"; } elseif ( !preg_match( '/^[a-zA-Z0-9_\.\-`]*$/', $value ) ) { $value = '``'; } } $clause = (!empty($this->prefix) ? "{$this->prefix}." : "") . $this->column; if ( !empty($this->function) ) { $clause = sprintf($this->function, $clause); } $clause .= " {$this->operator} $value"; return $clause; }
j'ai tenté une modif function render() { $value = $this->value; if(empty($value)){ ...............; ...............; } return $clause; }
le Bmol est que les autres propriétés de la class criteria ne sont pas renseigné et comme je n'ai pas la doc du développeur je patine un peu... Après la modif j'ai un PB d'affichage des pages secondaires de l'admin (pages vides!)
dans la version 2013 cela fonctionne
/** * Make a sql condition string * * @return string **/ function render() { if ( strtoupper($this->operator) == 'IN' || strtoupper($this->operator) == "NOT IN") { $value = $this->value; } else { if ( '' === ($value = trim($this->value)) ) { return ''; } if ( (substr($value, 0, 1) != '`') && (substr($value, -1) != '`') ) { if (!class_exists('MyTextSanitizer')) { include_once XOOPS_ROOT_PATH."/class/module.textsanitizer.php"; } $value = "'".addslashes(stripslashes($value))."'"; } } $clause = (!empty($this->prefix) ? "{$this->prefix}." : "") . $this->column; if ( !empty($this->function) ) { $clause = sprintf($this->function, $clause); } $clause .= " {$this->operator} $value"; return $clause; }
j'étudie les propriétés de la classe crteria et à suivre
je regarde de plus près et c'est plutôt la fonction renderWhere() qu'il faut modifier.
si le where est vide retourner une variable vide, et non un where =''
/** * Make a SQL "WHERE" clause * * @return string */ function renderWhere() { $cond = $this->render(); return empty($cond) ? '' : "WHERE $cond"; }
c'est hyper succint comme fonction et pourtant elle décide d'ajouter un WHERE si le retour de render est non vide et voilà le coeur du PB, comme render() renvoi la chaine ='' donc $cond est non vide ...
pour xoops2013 la fonction render() retourne bien $cond vide
je regarde comment traiter cela et ne pas polluer ailleurs à demain
gabriel
|
|