[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_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")) return;
14
15 include_spip('base/abstract_sql');
16
17 function trouver_version_inf($objet,$id_objet,$cond=""){
18 return sql_getfetsel(
19 'id_version',
20 'spip_versions',
21 ($cond?"$cond AND ":"")."objet=".sql_quote($objet)." AND id_objet=".intval($id_objet),
22 '',
23 'id_version DESC',
24 '0,1'
25 );
26 }
27 function check_version_diff($objet, $id_objet, $id_version, $id_diff, $last_version=0){
28 if (!$last_version)
29 $last_version = trouver_version_inf($objet,$id_objet);
30
31 // si pas de diff possible, on renvoi 0,0
32 if (!$last_version)
33 return array(0,0);
34
35 if ($last_version==1)
36 return array(1,0);
37
38 $id_version = max($id_version,2);
39 $id_version = min($id_version,$last_version);
40
41 // verifier id_version
42 $id_version = trouver_version_inf($objet,$id_objet,"id_version<=".intval($id_version));
43
44 // si rien trouve on prend la derniere
45 if (!$id_version)
46 $id_version = $last_version;
47
48 // minorer id_diff en fonction de id_version
49 $id_diff = min($id_diff,$id_version-1);
50 // verifier id_diff
51 $id_diff = trouver_version_inf($objet,$id_objet,"id_version<=".intval($id_diff));
52
53 if (!$id_diff)
54 $id_diff = trouver_version_inf($objet,$id_objet,"id_version<".intval($id_version));
55
56 // echec, on renvoi ce qu'on peut
57 if (!$id_diff)
58 $id_diff = $id_version-1;
59
60 return array($id_version, $id_diff);
61 }
62
63 function formulaires_reviser_charger_dist($objet,$id_objet,$id_version,$id_diff){
64 if (!$objets = unserialize($GLOBALS['meta']['objets_versions']))
65 $objets = array();
66
67 if (!in_array(table_objet_sql($objet),$objets))
68 return false;
69
70 $last_version = trouver_version_inf($objet,$id_objet);
71 list($id_version,$id_diff) = check_version_diff($objet,$id_objet,$id_version,$id_diff,$last_version);
72 if (!$id_version)
73 return false;
74
75 $valeurs = array(
76 '_last_version'=>$last_version,
77 '_objet'=>$objet,
78 '_id_objet'=>$id_objet,
79 'id_version'=>$id_version,
80 'id_diff'=>$id_diff,
81 );
82
83 return $valeurs;
84 }
85
86 function formulaires_reviser_verifier_dist($objet,$id_objet,$id_version,$id_diff){
87 $erreurs = array();
88 list($id_version,$id_diff) = check_version_diff($objet,$id_objet,_request('id_version'),_request('id_diff'));
89 set_request('id_version',$id_version);
90 set_request('id_diff',$id_diff);
91 return $erreurs;
92 }
93
94 function formulaires_reviser_traiter_dist($objet,$id_objet,$id_version,$id_diff){
95 $res = array('message_ok'=>'','editable'=>true);
96
97 $id_version = _request('id_version');
98 $id_diff = _request('id_diff');
99
100 if (_AJAX)
101 $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>";
102 else
103 $res['redirect'] = parametre_url(parametre_url(self(),'id_version',$id_version),'id_diff',$id_diff,'&');
104 return $res;
105 }