6814a5007e81456ec1cb02538b79d9c0f815f1aa
[lhc/web/www.git] / www / plugins-dist / revisions / formulaires / reviser.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) {
14 return;
15 }
16
17 include_spip('base/abstract_sql');
18
19 function trouver_version_inf($objet, $id_objet, $cond = '') {
20 return sql_getfetsel(
21 'id_version',
22 'spip_versions',
23 ($cond ? "$cond AND " : '') . 'objet=' . sql_quote($objet) . ' AND id_objet=' . intval($id_objet),
24 '',
25 'id_version DESC',
26 '0,1'
27 );
28 }
29
30 function check_version_diff($objet, $id_objet, $id_version, $id_diff, $last_version = 0) {
31 if (!$last_version) {
32 $last_version = trouver_version_inf($objet, $id_objet);
33 }
34
35 // si pas de diff possible, on renvoi 0,0
36 if (!$last_version) {
37 return array(0, 0);
38 }
39
40 if ($last_version == 1) {
41 return array(1, 0);
42 }
43
44 $id_version = max($id_version, 2);
45 $id_version = min($id_version, $last_version);
46
47 // verifier id_version
48 $id_version = trouver_version_inf($objet, $id_objet, 'id_version <= ' . intval($id_version));
49
50 // si rien trouve on prend la derniere
51 if (!$id_version) {
52 $id_version = $last_version;
53 }
54
55 // minorer id_diff en fonction de id_version
56 $id_diff = min($id_diff, $id_version - 1);
57 // verifier id_diff
58 $id_diff = trouver_version_inf($objet, $id_objet, 'id_version <= ' . intval($id_diff));
59
60 if (!$id_diff) {
61 $id_diff = trouver_version_inf($objet, $id_objet, 'id_version < ' . intval($id_version));
62 }
63
64 // echec, on renvoi ce qu'on peut
65 if (!$id_diff) {
66 $id_diff = $id_version - 1;
67 }
68
69 return array($id_version, $id_diff);
70 }
71
72 function formulaires_reviser_charger_dist($objet, $id_objet, $id_version, $id_diff) {
73 if (!$objets = unserialize($GLOBALS['meta']['objets_versions'])) {
74 $objets = array();
75 }
76
77 if (!in_array(table_objet_sql($objet), $objets)) {
78 return false;
79 }
80
81 $last_version = trouver_version_inf($objet, $id_objet);
82 list($id_version, $id_diff) = check_version_diff($objet, $id_objet, $id_version, $id_diff, $last_version);
83 if (!$id_version) {
84 return false;
85 }
86
87 $valeurs = array(
88 '_last_version' => $last_version,
89 '_objet' => $objet,
90 '_id_objet' => $id_objet,
91 'id_version' => $id_version,
92 'id_diff' => $id_diff,
93 );
94
95 return $valeurs;
96 }
97
98 function formulaires_reviser_verifier_dist($objet, $id_objet, $id_version, $id_diff) {
99 $erreurs = array();
100 list($id_version, $id_diff) = check_version_diff($objet, $id_objet, _request('id_version'), _request('id_diff'));
101 set_request('id_version', $id_version);
102 set_request('id_diff', $id_diff);
103
104 return $erreurs;
105 }
106
107 function formulaires_reviser_traiter_dist($objet, $id_objet, $id_version, $id_diff) {
108 $res = array('message_ok' => '', 'editable' => true);
109
110 $id_version = _request('id_version');
111 $id_diff = _request('id_diff');
112
113 if (_AJAX) {
114 $res['message_ok'] .= "<script type='text/javascript'>if (window.jQuery) jQuery('#wysiwyg.revision').ajaxReload({args:{id_version:$id_version,id_diff:$id_diff},history:true});</script>";
115 } else {
116 $res['redirect'] = parametre_url(parametre_url(self(), 'id_version', $id_version), 'id_diff', $id_diff, '&');
117 }
118
119 return $res;
120 }