source: spip-zone/_plugins_/amis/amis_fonctions.php @ 117558

Last change on this file since 117558 was 47024, checked in by brunobergot@…, 9 years ago

éviter une erreur sql : Column 'id_auteur' in field list is ambiguous (merci marcimat)

File size: 2.4 KB
Line 
1<?php
2/*
3 * Plugin amis / gestion des amis
4 * Licence GPL
5 * (c) 2008 C.Morin Yterium
6 *
7 */
8
9/**
10 * critere {amis} pour la boucle AUTEURS
11 * utilise la syntaxe {amis #ENV{id_auteur}}
12 * recherche dans la table spip_amis les id des visiteurs lies
13 * a celui passe en argument
14 * utilise la fonction amis_lister() plutot qu'une jointure sql pour tenir compte
15 * des amis connus par reseau social et non presents en bdd
16 *
17 * @param string $idb
18 * @param array $boucles
19 * @param array $crit
20 */
21function critere_AUTEURS_amis_dist($idb, &$boucles, $crit){
22        $boucle = &$boucles[$idb];
23        $_id_table = $boucle->id_table;
24        $_qui = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
25        $boucle->hash = "
26        \$qui = intval($_qui);
27        include_spip('inc/amis');
28        \$liste = amis_lister(\$qui);
29        \$liste = array_map('intval',array_keys(\$liste));
30        \$liste[] = 0;
31        " . $boucle->hash;
32        $boucle->select[]="auteurs.id_auteur as ami";
33        $boucle->where[]= "'auteurs.id_auteur IN ('.implode(',',\$liste).')'";
34}
35
36/**
37 * permet d'utiliser #AMI pour acceder a l'id du visiteur ami dans une boucle utilisant le critere {ami}
38 * obosolete : seule la boucle AUTEURS est concernee, et dans ce cas
39 * id_auteur et ami sont identiques
40 *
41 * @param array $p
42 * @return array
43 */
44function balise_AMI_dist($p) {
45        return rindex_pile($p, 'ami', 'amis');
46}
47
48/**
49 * test si un visiteur peut en inviter un autre
50 * utilisee pour afficher le picto "demander a etre ami"
51 * la fonction etant appelee plusieurs fois dans un meme calcul de page
52 * elle recherche en une unique requete tous les amis du visiteur concerne
53 * et stocke le resultat
54 * elle renvoie true lorsque les deux visiteurs concernes ne sont pas deja amis
55 *
56 * @param int $id_auteur
57 * @param int $id_ami
58 * @return bool
59 */
60function amis_peut_inviter($id_auteur,$id_ami){
61        include_spip('base/abstract_sql');
62        static $non_invitables = array();
63        if (!$id_auteur = intval($id_auteur)
64        OR !$id_ami = intval($id_ami)) return false; // pas d'ami pour googlebot
65       
66        if (!isset($non_invitables[$id_auteur])){
67                $non_invitables[$id_auteur][$id_auteur] = true; // on ne peut s'inviter soi meme !
68                $res = sql_select("(id_auteur+id_ami-".intval($id_auteur).") as ami",'spip_amis as amis',
69                "(amis.id_auteur=".intval($id_auteur).") OR (amis.id_ami=".intval($id_auteur)." AND amis.statut='publie')"
70                );
71                while ($row = sql_fetch($res)){
72                        $non_invitables[$id_auteur][$row['ami']] = true;
73                }
74        }
75        return (!isset($non_invitables[$id_auteur][$id_ami]));
76}
77
78?>
Note: See TracBrowser for help on using the repository browser.