[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / ecrire / inc / cvt_autosave.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 /**
16 * Nettoyer les echappements
17 * @param $val
18 * @return string
19 */
20 function autosave_clean_value($val){
21 return stripslashes(urldecode($val));
22 }
23
24 /**
25 * Reperer une demande de formulaire autosave
26 * et la conditionner
27 *
28 * @param array $flux
29 * @return array
30 */
31 function cvtautosave_formulaire_charger($flux){
32 if (is_array($flux['data'])
33 AND isset($flux['data']['_autosave_id'])
34 AND $cle_autosave = $flux['data']['_autosave_id']){
35
36 $form = $flux['args']['form'];
37 $je_suis_poste = $flux['args']['je_suis_poste'];
38
39 $cle_autosave = serialize($cle_autosave);
40 $cle_autosave = $form."_".md5($cle_autosave);
41
42 // si on a un backup en session et qu'on est au premier chargement, non poste
43 // on restitue les donnees
44 if (isset($GLOBALS['visiteur_session']['session_autosave_'.$cle_autosave])
45 AND !$je_suis_poste) {
46 parse_str($GLOBALS['visiteur_session']['session_autosave_'.$cle_autosave], $vars);
47 foreach ($vars as $key=>$val) {
48 if (isset($flux['data'][$key]))
49 $flux['data'][$key] = (is_string($val)?autosave_clean_value($val):array_map('autosave_clean_value',$val));
50 }
51 }
52
53 /**
54 * Envoyer le input hidden et le bout de js qui l'utilisera
55 */
56 $flux['data']['_hidden'] .= "<input type='hidden' name='autosave' class='autosaveactive' value='$cle_autosave' />"
57 .'<script type="text/javascript">/*<![CDATA[*/if (window.jQuery) jQuery(function(){
58 $("input.autosaveactive").closest("form:not(.autosaveon)").autosave({url:"'.$GLOBALS['meta']['adresse_site'].'/"}).addClass("autosaveon");
59 });/*]]>*/</script>';
60
61 }
62 return $flux;
63 }
64
65 /**
66 * Quand on poste definitivement un formulaire autosave,
67 * on peut vider la session autosave
68 * et on vide aussi toutes les autosave de plus de 72H (delai par defaut) ou sans __timestamp (vieilles sessions)
69 * @param $flux
70 * @return
71 */
72 function cvtautosave_formulaire_traiter($flux){
73 // si on poste 'autosave' c'est qu'on n'a plus besoin de sauvegarder :
74 // on elimine les donnees de la session
75 if ($cle_autosave = _request('autosave')){
76 include_spip('inc/session');
77 session_set('session_autosave_'.$cle_autosave, null);
78 }
79
80 if (isset($GLOBALS['visiteur_session']) AND $GLOBALS['visiteur_session']){
81 // delai par defaut avant purge d'un backup de form : 72H
82 if (!defined('_AUTOSAVE_GB_DELAY')) define('_AUTOSAVE_GB_DELAY',72*3600);
83 $time_too_old = time() - _AUTOSAVE_GB_DELAY;
84 // purger aussi toutes les vieilles autosave
85 $session = $GLOBALS['visiteur_session'];
86 foreach($session as $k=>$v){
87 if (strncmp($k,'session_autosave_',17)==0){
88 $timestamp = 0;
89 if (preg_match(",&__timestamp=(\d+)$,",$v,$m)){
90 $timestamp = intval($m[1]);
91 }
92 if ($timestamp<$time_too_old)
93 session_set($k, null);
94 }
95 }
96 }
97
98 return $flux;
99 }
100
101