[SPIP] ~maj v3.0.14-->v3.0.17
[ptitvelo/web/www.git] / www / ecrire / public / quete.php
index fcac346..a5a87c1 100644 (file)
@@ -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;