source: spip-zone/_plugins_/prix_objets/branches/v1/action/ordonner_prix_objets.php @ 110381

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

encore le merge, ça devrait être bon maintenant

File size: 2.2 KB
Line 
1<?php
2
3/**
4 * Action ordonnant un lien sur une table de liens, adapté du plugin Media
5 *
6 * @plugin     Prix Objets
7 * @copyright  2012 - 2018
8 * @author     Rainer Müller
9 * @licence    GNU/GPL
10 * @package    SPIP\Prix_objets\Action
11 */
12
13if (!defined('_ECRIRE_INC_VERSION')) {
14        return;
15}
16
17function action_ordonner_prix_objets_dist() {
18
19        include_spip('inc/autoriser');
20        include_spip('base/objets');
21        include_spip('action/editer_liens');
22
23        // source (table spip_xx_liens)
24        $objet = 'prix_objet';
25
26        // objet lié
27        $objet_lie = _request('objet_lie');
28        $id_objet_lie = intval(_request('id_objet_lie'));
29
30        // ordre des éléments
31        $ordre = _request('ordre');
32
33        if (!$objet or !$objet_lie or !$id_objet_lie OR !$ordre) {
34                return envoyer_json_erreur(_T('medias:erreur_objet_absent') . ' ' . _T('medias:erreur_deplacement_impossible'));
35        }
36
37        if (!autoriser('modifier', $objet_lie, $id_objet_lie)) {
38                return envoyer_json_erreur(_T('medias:erreur_autorisation') . ' ' . _T('medias:erreur_deplacement_impossible'));
39        }
40
41        $_id_objet = 'id_prix_objet';
42        $table_liens = 'spip_prix_objets';
43
44        $success = $errors = array();
45
46        $actuels = sql_allfetsel(
47                array($_id_objet . ' AS id', 'rang_lien'),
48                $table_liens,
49                array(
50                        sql_in($_id_objet, $ordre),
51                        'objet = ' . sql_quote($objet_lie),
52                        'id_objet = ' . sql_quote($id_objet_lie)
53                )
54                );
55
56        $futurs = array_flip($ordre);
57        // ordre de 1 à n (pas de 0 à n).
58        array_walk($futurs, function(&$v) { $v++; });
59
60        $updates = array();
61
62        foreach ($actuels as $l) {
63                if ($futurs[$l['id']] !== $l['rang_lien']) {
64                        $updates[$l['id']] = $futurs[$l['id']];
65                }
66        }
67
68        if ($updates) {
69                foreach ($updates as $id => $ordre) {
70                        sql_updateq(
71                                $table_liens,
72                                array('rang_lien' => $ordre),
73                                array(
74                                        $_id_objet . ' = ' . $id,
75                                        'objet = ' . sql_quote($objet_lie),
76                                        'id_objet = ' . sql_quote($id_objet_lie)
77                                )
78                                );
79                }
80        }
81
82        return envoyer_json_envoi(array(
83                'done' => true,
84                'success' => $success,
85                'errors' => $errors,
86        ));
87
88}
89
90
91function envoyer_json_envoi($data) {
92        header('Content-Type: application/json; charset=' . $GLOBALS['meta']['charset']);
93        echo json_encode($data);
94}
95
96function envoyer_json_erreur($msg) {
97        return envoyer_json_envoi(array(
98                'done' => false,
99                'success' => array(),
100                'errors' => array($msg)
101        ));
102}
Note: See TracBrowser for help on using the repository browser.