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

Last change on this file since 83590 was 83590, checked in by tcharlss@…, 5 years ago

Ajout de 2 fonctions :

  • supprimer "proprement" un album
  • vider un album

On vire la fonction «editer_liens_albums»
+phpDoc

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