source: spip-zone/_plugins_/mesfavoris/mesfavoris_fonctions.php @ 74912

Last change on this file since 74912 was 74888, checked in by gilles.vincent@…, 8 years ago

Le critere {mesfavoris} est identique a {mesfavoris oui}
idem pour {!mesfavoris} et {mesfavoris non}

Les tests permettent de voir les differentes jointures qui sont calculees.
Il est facile de savoir quels sont les articles d'un certain auteur qu'on a mis dans ses favoris.

File size: 2.8 KB
Line 
1<?php
2/**
3 * Plugin mesfavoris
4 * (c) 2009-2012 Olivier Sallou, Cedric Morin
5 * Distribue sous licence GPL
6 *
7 */
8
9// Sécurité
10if (!defined("_ECRIRE_INC_VERSION")) return;
11
12/**
13 * Compile le critère {mesfavoris}
14 *
15 * Permet de sélectionner les éléments favoris de l'id_auteur en cours
16 *
17 * Si l'utilisateur est connecté {mesfavoris} retourne les éléments favoris
18 * Si l'utilisateur est connecté {!mesfavoris} retourne les éléments non favoris
19 * Si l'utilisateur n'est pas connecté, on retourne tout, pas de modification de la boucle
20 *
21 * On accepte également les paramètres suivants :
22 * {mesfavoris oui} : agit comme {mesfavoris}
23 * {mesfavoris non} : agit comme {!mesfavoris}
24 * {mesfavoris ignore} : n'agit pas du tout
25 *
26 * On peu également utiliser l'écriture {mesfavoris #ENV{favs,oui}}
27 *
28 * Attention :ce critère est sessionné, il retournera donc un résultat différent pour chaque auteur
29 *
30 * @param string $idb     Identifiant de la boucle
31 * @param array $boucles  AST du squelette
32 * @param Critere $crit   Paramètres du critère dans cette boucle
33 * @return void
34 */
35function critere_mesfavoris_dist($idb,&$boucles,$crit){
36        $boucle = &$boucles[$idb];
37    $id_table = $boucle->id_table;
38        $primary = $boucles[$idb]->primary;
39       
40        $objet = objet_type($primary,$boucle->serveur);
41        $id_table_objet = $primary;
42        $table_objet = table_objet_sql($primary);
43        $not = ($crit->not == '!') ? 'non':'oui';
44       
45        /**
46         * On récupère un paramètre potentiel
47         */
48        $type = !isset($crit->param[0][0]) ? "'$not'"
49                : calculer_liste(array($crit->param[0][0]), array(), $boucles, $boucle->id_parent);
50
51        $boucle->where[] = mesfavoris_critere_where($primary,$id_table,$table_objet,$objet,$type);
52        $boucles[$idb]->descr['session'] = true;
53       
54}
55
56function mesfavoris_critere_where($primary,$id_table,$table_objet,$objet,$type){
57        $in = "sql_in('$primary', prepare_mesfavoris($objet,$type), '')";
58        $type1 = "mesfavoris_definir_type($type)";
59        return "$type1 ? array($type1,'$primary','('.sql_get_select('zzza.$primary','$table_objet as zzza',$in,'','','','',\$connect).')'):''";
60}
61
62function mesfavoris_definir_type($type){
63        if($type == 'oui'){
64                return 'IN';
65        }else if($type == 'non'){
66                return 'NOT IN';
67        }else{
68                return false;
69        }
70}
71/**
72 * Fonction de préparation du critère {!mesfavoris}
73 *
74 * Retourne les objets favoris pour les éviter dans la boucle
75 *
76 * @param string $objet Le type d'objet de la boucle
77 * @param string $server Le serveur
78 * @return array $objets Les id des objets à éviter
79 */
80function prepare_mesfavoris($objet,$type,$server=''){
81        $objets_favoris = sql_select('id_objet','spip_favoris','objet='.sql_quote($objet).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']));
82        $objet= array();
83        while($objet = sql_fetch($objets_favoris)){
84                $objets[] = $objet['id_objet'];
85        }
86        return $objets;
87}
88?>
Note: See TracBrowser for help on using the repository browser.