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

Last change on this file since 99808 was 99808, checked in by kent1@…, 3 years ago

PSR SPIP

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