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

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

coquille

File size: 2.3 KB
Line 
1<?php
2/**
3 * Action : dissocier un ou tous les albums liés à un objet éditorial
4 *
5 * @plugin     Albums
6 * @copyright  2014
7 * @author     Tetue, Charles Razack
8 * @licence    GPL
9 * @package    SPIP\Albums\Action
10 */
11
12// Sécurité
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15/**
16 * Dissocier un ou tous les albums liés à un objet éditorial
17 *
18 * @example
19 *     ```
20 *     #URL_ACTION_AUTEUR{dissocier_album, #ID_ALBUM/#OBJET/#ID_OBJET, #SELF}
21 *     #URL_ACTION_AUTEUR{dissocier_album, tous/#OBJET/#ID_OBJET, #SELF}
22 *     ```
23 *
24 * @param string $arg
25 *     Arguments séparés par un slash «/»
26 *     sous la forme `$album/$objet/$id_objet`
27 *
28 *     - album      : identifiant d'un album pour dissocier un album unique
29 *                    «tous» pour dissocier tous les albums
30 *     - objet      : type d'objet à dissocier
31 *     - id_objet   : identifiant de l'objet à dissocier
32 * @return void
33 */
34function action_dissocier_album_dist($arg=null){
35
36        // Si $arg n'est pas donné directement, le récupérer via _POST ou _GET
37        if (is_null($arg)){
38                $securiser_action = charger_fonction('securiser_action', 'inc');
39                $arg = $securiser_action();
40        }
41        list($album, $objet, $id_objet) = explode('/', $arg);
42
43        // si l'identifiant de l'objet est négatif, vérifier qu'il correspondant à celui du visiteur,
44        // (cas d'un album lié à un objet pas encore enregistré en base).
45        if (
46                $id_objet = intval($id_objet)
47                AND (
48                        ($id_objet<0 AND $id_objet==-$GLOBALS['visiteur_session']['id_auteur'])
49                        OR autoriser('modifier',$objet,$id_objet)
50                )
51        ) {
52                include_spip('action/editer_liens');
53                switch ($album) {
54                        case 'tous' :
55                                // Ne dissocier que les albums non insérés dans le texte.
56                                // = autorisation à dissocier un album d'un objet,
57                                // sauf qu'on économise des requêtes.
58                                if (is_array($liens = objet_trouver_liens(array('album'=>'*'),array($objet=>$id_objet)))){
59                                        foreach($liens as $lien) {
60                                                if ($lien['vu'] == 'non')
61                                                        $ids_albums[] = $lien['id_album'];
62                                        }
63                                        objet_dissocier(array('album'=>$ids_albums),array($objet=>$id_objet));
64                                }
65                                break;
66                        default :
67                                if (
68                                        $id_album = intval($album)
69                                        AND autoriser('dissocier','album',$id_album,'',array('objet'=>$objet,'id_objet'=>$id_objet))
70                                ){
71                                        objet_dissocier(array('album'=>$id_album),array($objet=>$id_objet));
72                                }
73                                break;
74                }
75        }
76}
77
78?>
Note: See TracBrowser for help on using the repository browser.