X-Git-Url: http://git.cyclocoop.org/?p=ptitvelo%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Fpublic%2Fquete.php;h=a5a87c1b35a40306655a8be29a7acdfd5e89aae3;hp=fcac34682ef0a28e789de6e387286c52420cef6d;hb=e847eea4a82a7396dd0abf860f9b30d654f38629;hpb=d686c3e22e97dd46ef42bcd0f138c65083f8f232 diff --git a/www/ecrire/public/quete.php b/www/ecrire/public/quete.php index fcac346..a5a87c1 100644 --- a/www/ecrire/public/quete.php +++ b/www/ecrire/public/quete.php @@ -150,6 +150,11 @@ function quete_condition_postdates($champ_date, $serveur='', $ignore_previsu=fal * @return array */ function quete_condition_statut($mstatut,$previsu,$publie, $serveur='', $ignore_previsu=false){ + static $cond = array(); + $key = func_get_args(); + $key = implode("-",$key); + if (isset($cond[$key])) return $cond[$key]; + $liste = $publie; if (defined('_VAR_PREVIEW') AND _VAR_PREVIEW AND !$ignore_previsu) $liste = $previsu; @@ -160,19 +165,52 @@ function quete_condition_statut($mstatut,$previsu,$publie, $serveur='', $ignore_ } // '' => ne rien afficher, '!'=> ne rien filtrer if (!strlen($liste)) - return ($not?"1=1":"'0=1'"); + return $cond[$key]=($not?"1=1":"'0=1'"); $liste = explode(',',$liste); + $where = array(); foreach($liste as $k=>$v) { + // filtrage /auteur pour limiter les objets d'un statut (prepa en general) + // a ceux de l'auteur identifie + if (strpos($v,"/")!==false){ + $v = explode("/",$v); + $filtre = end($v); + $v = reset($v); + $v = preg_replace(",\W,","",$v); + if ($filtre=="auteur" + AND isset($GLOBALS['visiteur_session']['id_auteur']) + AND intval($GLOBALS['visiteur_session']['id_auteur']) + AND (strpos($mstatut,".")!==false) + AND $objet = explode(".",$mstatut) + AND $id_table = reset($objet) + AND $objet = objet_type($id_table)){ + $primary = id_table_objet($objet); + $where[] = "($mstatut<>".sql_quote($v)." OR $id_table.$primary IN (".sql_get_select("ssss.id_objet","spip_auteurs_liens AS ssss","ssss.objet=".sql_quote($objet)." AND ssss.id_auteur=".intval($GLOBALS['visiteur_session']['id_auteur']),'','','','',$serveur)."))"; + } + // ignorer ce statut si on ne sait pas comment le filtrer + else + $v = ""; + } // securite $liste[$k] = preg_replace(",\W,","",$v); } + $liste = array_filter($liste); if (count($liste)==1){ - return array(($not?'<>':'='), $mstatut, sql_quote(reset($liste),$serveur)); + $where[] = array('=', $mstatut, sql_quote(reset($liste),$serveur)); } else { - return sql_in($mstatut,$liste,$not,$serveur); + $where[] = sql_in($mstatut,$liste,$not,$serveur); } + + while (count($where)>1){ + $and = array('AND',array_pop($where),array_pop($where)); + $where[] = $and; + } + $cond[$key] = reset($where); + if ($not) + $cond[$key] = array('NOT',$cond[$key]); + + return $cond[$key]; } /** @@ -249,6 +287,8 @@ function quete_logo($type, $onoff, $id, $id_rubrique, $flag) { (!$taille ? '' : (" ".$taille[3]))); } } + else if (defined('_LOGO_RUBRIQUE_DESACTIVER_HERITAGE')) + return ''; else if ($id_rubrique) { $type = 'id_rubrique'; $id = $id_rubrique; @@ -392,7 +432,7 @@ function calcul_exposer ($id, $prim, $reference, $parent, $type, $connect='') { $exposer[$m][$type][$principal] = true; if ($type == 'id_mot'){ if (!$parent) { - $parent = sql_getfetsel('id_groupe','spip_mots',"id_mot=" . $principal, '','','','',$connect); + $parent = sql_getfetsel('id_groupe','spip_mots',"id_mot=" . intval($principal), '','','','',$connect); } if ($parent) $exposer[$m]['id_groupe'][$parent] = true;