Newer
Older

cedric@yterium.com
a validé
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
//
// Ce fichier definit les boucles standard de SPIP
//
if (!defined('_ECRIRE_INC_VERSION')) return;
//
// <BOUCLE(DOCUMENTS)>
//
// http://doc.spip.org/@boucle_DOCUMENTS_dist
function boucle_DOCUMENTS_dist($id_boucle, &$boucles) {
$boucle = &$boucles[$id_boucle];
$id_table = $boucle->id_table;
// on ne veut pas des fichiers de taille nulle,
// sauf s'ils sont distants (taille inconnue)
array_unshift($boucle->where,array("'($id_table.taille > 0 OR $id_table.distant=\\'oui\\')'"));
// Supprimer les vignettes
if (!isset($boucle->modificateur['criteres']['mode'])
AND !isset($boucle->modificateur['criteres']['tout'])) {
array_unshift($boucle->where,array("'!='", "'$id_table.mode'", "'\\'vignette\\''"));
}
// Pour une boucle generique (DOCUMENTS) sans critere de lien, verifier
// qu notre document est lie a un element publie
// (le critere {tout} permet de les afficher tous quand meme)
// S'il y a un critere de lien {id_article} par exemple, on zappe
// ces complications (et tant pis si la boucle n'a pas prevu de
// verification du statut de l'article)
if ((!isset($boucle->modificateur['tout']) OR !$boucle->modificateur['tout'])
AND (!isset($boucle->modificateur['criteres']['id_objet']) OR !$boucle->modificateur['criteres']['id_objet'])
) {
# Espace avant LEFT JOIN indispensable pour insertion de AS
# a refaire plus proprement
## la boucle par defaut ignore les documents de forum
$boucle->from[$id_table] = "spip_documents LEFT JOIN spip_documents_liens AS l
ON $id_table.id_document=l.id_document
LEFT JOIN spip_articles AS aa
ON (l.id_objet=aa.id_article AND l.objet=\'article\')
LEFT JOIN spip_breves AS bb
ON (l.id_objet=bb.id_breve AND l.objet=\'breve\')
LEFT JOIN spip_rubriques AS rr
ON (l.id_objet=rr.id_rubrique AND l.objet=\'rubrique\')"
// test conditionne par la presence du plugin forum, en attendant le champ statut sur la table documents
. (test_plugin_actif('forum')?" LEFT JOIN spip_forum AS ff ON (l.id_objet=ff.id_forum AND l.objet=\'forum\')":"");
$boucle->group[] = "$id_table.id_document";
if (defined('_VAR_PREVIEW') AND _VAR_PREVIEW) {
array_unshift($boucle->where,"'(aa.statut IN (\'publie\',\'prop\') OR bb.statut IN (\'publie\',\'prop\') OR rr.statut IN (\'publie\',\'prive\')"
.(test_plugin_actif('forum')? " OR ff.statut IN (\'publie\',\'prop\')":"")
.")'");
} else {
$postdates = ($GLOBALS['meta']['post_dates'] == 'non')
? ' AND \'.quete_condition_postdates(\'aa.date\').\''
: '';
array_unshift($boucle->where,"'((aa.statut = \'publie\'$postdates) OR bb.statut = \'publie\' OR rr.statut = \'publie\'"
.(test_plugin_actif('forum')? " OR ff.statut=\'publie\'":"")
.")'");
}
}
return calculer_boucle($id_boucle, $boucles);
}
?>