source: spip-zone/_plugins_/albums/trunk/inc/albums.php @ 86340

Last change on this file since 86340 was 86340, checked in by tetue@…, 4 years ago

coquille

File size: 4.9 KB
Line 
1<?php
2/**
3 * Fonctions du plugin Albums
4 *
5 * @plugin     Albums
6 * @copyright  2014
7 * @author     Tetue, Charles Razack
8 * @licence    GNU/GPL
9 * @package    SPIP\Albums\Fonctions
10 */
11
12// Sécurité
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15
16/**
17 * Supprimer proprement un ou plusieurs albums
18 *
19 * - suppression des liens faisant référence à l'album dans `spip_documents_liens`
20 * - suppression des liens faisant référence à l'album dans `spip_albums_liens`
21 * - suppression de l'album
22 *
23 * @param int|string|array $id_albums
24 *     Identifiant unique ou tableau d'identifiants des albums
25 * @param bool $supprimer_docs_orphelins
26 *     true pour supprimer les documents rendus orphelins
27 */
28function supprimer_albums($ids_albums, $supprimer_docs_orphelins=false) {
29
30        if (!$ids_albums) return false;
31        if (!is_array($ids_albums)) $ids_albums = array(intval($ids_albums));
32
33        // Vider les albums de leurs documents
34        vider_albums($ids_albums,$supprimer_docs_orphelins);
35
36        // Nettoyer la table de liens
37        include_spip('action/editer_liens');
38        objet_dissocier(array('album'=>$ids_albums),'*');
39
40        // Supprimer les albums
41        $in_albums = sql_in('id_album', $ids_albums);
42        sql_delete(table_objet_sql('album'), $in_albums);
43
44        // Invalider les caches
45        include_spip('inc/invalideur');
46        suivre_invalideur("id='album/$id_album'");
47
48        return;
49}
50
51
52/**
53 * Vider un ou plusieurs albums de leurs documents.
54 *
55 * @note
56 * Impossible de retirer en une fois tous les documents d'un album
57 * via le bouton d'action `dissocier_document` du plugin Médias.
58 * Il faut lui passer en paramètre un des 3 modes pour les documents :
59 *
60 * - les images en mode image : `I/image`
61 * - les images en mode document : `I/document`
62 * - les documents en mode document : 'D/document'
63 *
64 * Cf. fonction `dissocier_document` dans `action/dissocier_document.php`.
65 *
66 * @param int|string|array $id_albums
67 *     Identifiant unique ou tableau d'identifiants des albums
68 * @param bool $supprimer_docs_orphelins
69 *     true pour supprimer les documents rendus orphelins
70 * @return array
71 *     tableau des albums vidés et ceux laissés intacts
72 *     [succes => [x,y,z]],[erreurs => [x,y,z]]
73 */
74function vider_albums($ids_albums, $supprimer_docs_orphelins=false) {
75
76        if (!$ids_albums) return false;
77        if (!is_array($ids_albums)) $ids_albums = array($ids_albums);
78        $supprimer_docs_orphelins = ($supprimer_docs_orphelins==true) ? 'suppr' : '';
79
80        include_spip('inc/autoriser');
81        include_spip('action/editer_liens');
82        foreach($ids_albums as $id_album) {
83                if (
84                        $id_album = intval($id_album)
85                        AND autoriser('modifier','album',$id_album)
86                        AND count(objet_trouver_liens(array('document'=>'*'),array('album'=>$id_album)))
87                ){
88                        $dissocier_document = charger_fonction('dissocier_document','action');
89                        $modes_documents = array('I/image','I/document','D/document'); // cf. @note
90                        foreach($modes_documents as $mode) {
91                                $dissocier_document("${id_album}-album-${mode}-${supprimer_docs_orphelins}");
92                                // dès que l'album est vide, on arrête
93                                if (!count(objet_trouver_liens(array('document'=>'*'),array('album'=>$id_album))))
94                                        break;
95                        }
96                        $succes[] = $id_album;
97                } else {
98                        $erreurs[] = $id_album;
99                }
100        }
101
102        return array('succes'=>$succes, 'erreurs'=>$erreurs);
103}
104
105
106/**
107 * Lister les formulaire yaml des modèles «album» disponibles dans les dossiers modeles/
108 *
109 * Les premiers modèles retournés sont les modèles du plugin (album.yaml et album_liste.yaml)
110 *
111 * @staticvar array $liste_modeles_albums
112 * @return array
113 */
114function albums_lister_modeles(){
115
116        static $liste_modeles_albums = false;
117        if ($liste_modeles_albums === false) {
118                $liste_modeles_albums = array();
119
120                // d'abord, on liste les 2 modèles par défaut afin qu'ils soient en tête de liste
121                foreach(array('album.yaml','album_liste.yaml') as $modele)
122                        $pre_liste[$modele] = find_in_path($modele,'modeles/');
123                // ensuite, on liste tous les modèles
124                $liste = find_all_in_path('modeles/', "album(_.*)?\.yaml$");
125                // puis on mélange
126                $liste = array_merge($pre_liste,$liste);
127
128                if (count($liste)){
129                        include_spip('inc/yaml');
130                        foreach($liste as $fichier => $chemin)
131                                $liste_modeles_albums[$fichier] = yaml_charger_inclusions(yaml_decode_file($chemin));
132                }
133        }
134
135        return $liste_modeles_albums;
136}
137
138
139/**
140 * Charger les informations d'un formulaire yaml de modèle «album»
141 *
142 * @staticvar array $infos_modeles_album
143 * @return array
144 */
145function infos_modele_album($fichier){
146
147        static $infos_modeles_album = array();
148        if (!isset($infos_modeles_album[$fichier])) {
149                if (substr($fichier,-5) != '.yaml')
150                        $formulaire .= '.yaml';
151                if ($chemin = find_in_path($fichier,'modeles/')) {
152                        include_spip('inc/yaml');
153                        $infos_modeles_album[$fichier] = yaml_charger_inclusions(yaml_decode_file($chemin));
154                }
155        }
156
157        return $infos_modeles_album[$fichier];
158}
159
160?>
Note: See TracBrowser for help on using the repository browser.