[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / couteau_suisse / couteau_suisse / outils / type_urls_action_rapide.php
1 <?php
2 /*
3 module mon_outil_action_rapide.php inclu :
4 - dans la description de l'outil en page de configuration
5 - apres l'appel de ?exec=action_rapide&arg=type_urls|argument
6 */
7
8 if(defined('_SPIP20100')) {
9 // declarer le raccourci de boucle URLS
10 global $table_des_tables;
11 $table_des_tables['urls']='urls';
12 }
13
14 function type_urls_action_rapide() {
15 include_spip('inc/actions');
16 //cs_log($_POST, '==== type_urls_action_rapide :'); cs_log($_GET);
17 include_spip('public/assembler'); // pour recuperer_fond()
18 $fd = recuperer_fond(defined('_SPIP19300')?'fonds/type_urls':'fonds/type_urls_191', array(
19 'type_urls' => $GLOBALS['type_urls'],
20 'ar_num_objet' => _request('ar_num_objet'),
21 'ar_type_objet' => _request('ar_type_objet'),
22 ));
23 // au cas ou il y aurait plusieurs actions, on fabrique plusieurs <form>
24 $fd = explode('@@CS_FORM@@', $fd);
25 $res = "";
26 $arg = defined('_SPIP19300')?'edit_urls2_':'edit_urls_';
27 foreach($fd as $i=>$f) {
28 // syntaxe : ajax_action_auteur($action, $id, $script, $args='', $corps=false, $args_ajax='', $fct_ajax='')
29 $res .= ajax_action_auteur('action_rapide', $arg.$i, 'admin_couteau_suisse', "arg=type_urls|description_outil&modif=oui&cmd=descrip#cs_action_rapide", $f, '', 'function() { jQuery(\'#ar_chercher\', this).click();}')."\n";
30 }
31 return $res;
32 }
33
34 // Fonction appelee par exec/action_rapide : ?exec=action_rapide&arg=type_urls|URL_objet (pipe obligatoire)
35 // Renvoie les caracteristiques URLs d'un objet (cas SPIP >= 2.0)
36 function type_urls_URL_objet_exec() {
37 global $type_urls;
38 $type = _request('type_objet');
39 $trouver_table = charger_fonction('trouver_table', 'base');
40 $desc = $trouver_table(table_objet($type));
41 $table = $desc['table'];
42 $champ_titre = $desc['titre']?$desc['titre']:'titre';
43 $col_id = @$desc['key']["PRIMARY KEY"];
44 if (!$col_id) return false; // Quand $type ne reference pas une table
45 $id_objet = intval(_request('id_objet'));
46
47 // chercher dans la table des URLS
48 include_spip('base/abstract_sql');
49 // Recuperer les URLs propre correspondant a l'objet.
50 $rows = sql_allfetsel("U.url, U.date, O.$champ_titre", "$table AS O LEFT JOIN spip_urls AS U ON (U.type='$type' AND U.id_objet=O.$col_id)", "O.$col_id=$id_objet", '', 'U.date DESC');
51 if (!$rows[0]) return false; # Quand $id_objet n'est pas un numero connu
52 // Calcul de l'URL complete
53 $url = str_replace('.././','../',generer_url_entite($id_objet, $type, '', '', true));
54 $row2 = !strlen($url2 = $rows[0]['url'])
55 // si l'URL n'etait pas presente en base, maintenant elle l'est ! (non verrouillee du coup...)
56 ?sql_fetsel("url, date", "spip_urls", "id_objet=$id_objet AND type='$type'", '', 'date DESC', 1)
57 :array('url'=>$url2, 'date'=>$rows[0]['date']);
58 // URL verrouilee par sa date ?
59 $now = date('Y-m-d H:i:s');
60 $verrou = $row2['date']>$now;
61 include_spip('inc/charsets');
62 $titre = charset2unicode($rows[0]['titre']);
63 $info = ' ('._T('couteau:url_verrouillee').')';
64 array_shift($rows); $toutes=$url2.($verrou?$info:'');
65 foreach($rows as $r) $toutes .= '<br/>'.$r['url'].($r['date']>$now?$info:'');
66 // titre || URL complete || type d'URLs || URL recalculee || URL propre en base || verrou || toutes les URLs trouvees en base
67 echo $titre.'||'.$url.'||'.$type_urls.'||'.$row2['url'].'||'.$url2.'||'.($verrou?'oui':'non').'||'.$toutes;
68 }
69
70 // Fonction {$outil}_{$arg}_exec() appelee par exec/action_rapide : ?exec=action_rapide&arg=type_urls|URL_objet_191 (pipe obligatoire)
71 // Renvoie les caracteristiques URLs d'un objet (cas SPIP < 2.0)
72 function type_urls_URL_objet_191_exec() {
73 global $type_urls;
74 $type = _request('type_objet');
75 $table = $type.($type=='syndic'?'':'s');
76 $id_objet = intval(_request('id_objet'));
77 $r0 = "SELECT url_propre, titre FROM spip_$table WHERE id_$type=$id_objet";
78 $r = spip_query($r0);
79 if ($r AND $r = spip_fetch_array($r)) { $url_1 = $r['url_propre']; $titre = $r['titre']; }
80 if(!function_exists($fct = 'generer_url_'.($type=='syndic'?'site':$type))) {
81 if($f = include_spip('urls/'.$type_urls, false))
82 include_once($f);
83 }
84 $url = function_exists($fct)?$fct($id_objet):'??';
85 $r = spip_query($r0);
86 if ($r AND $r = spip_fetch_array($r)) $url_2 = $r['url_propre'];
87 // url propre en base || titre || url complete || type d'URLs || URL recalculee
88 include_spip('inc/charsets');
89 echo _request('format')=='iframe'
90 ?"<span style='font-family:Verdana,Arial,Sans,sans-serif; font-size:10px;'>[<a href='../$url' title='$url' target='_blank'>"._T('couteau:urls_propres_lien').'</a>]</span>'
91
92 :$url_1.'||'.charset2unicode($titre).'||'.$url.'||'.$type_urls.'||'.$url_2;
93 }
94
95 // Fonction appelee par exec/action_rapide : ?exec=action_rapide&arg=type_urls|liste_urls (pipe obligatoire)
96 // Renvoie la liste de toutes les URLs propres de la base (SPIP >= 2.0)
97 function type_urls_liste_urls_exec() {
98 global $type_urls;
99 $res = $id = '';
100 include_spip('base/abstract_sql');
101 if($s=_request('suppr')) {
102 $s = explode(',', base64_decode($s), 3);
103 sql_delete("spip_urls", $a="id_objet=$s[0] AND type=".sql_quote($s[1]).' AND url='.sql_quote($s[2]));
104 include_spip('inc/headers');
105 redirige_par_entete(parametre_url(self(),'suppr','','&'));
106 }
107 include_spip('inc/texte');
108 include_spip('inc/presentation');
109 include_spip('public/assembler');
110 include_spip('inc/pipelines');
111 include_spip('inc/commencer_page');
112 $f = defined('_SPIP30000')?'init_head':'envoi_link';
113 echo '<html><head>'.f_jQuery($f(_T('couteau:urls_propres_titre')))
114 .'<meta http-equiv="Content-Type" content="text/html; charset='.$GLOBALS['meta']['charset'].'" /></head><body style="text-align:center">'
115 .propre(recuperer_fond('fonds/type_urls_liste', array('type'=>_request('type'))))
116 .'</body></html>';
117 ;
118 }
119
120 // fonction {$outil}_{$arg}_action() appelee par action/action_rapide.php
121 function type_urls_edit_urls_0_action() {
122 // forms[0] : tout purger (cas SPIP < 2.0)
123 foreach(array('articles', 'rubriques', 'breves', 'auteurs', 'mots', 'syndic') as $t)
124 if($table=_request("purger_$t")) spip_query("UPDATE spip_$table SET url_propre = ''");
125 spip_log("OK purge");
126 }
127 // fonction {$outil}_{$arg}_action() appelee par action/action_rapide.php
128 function type_urls_edit_urls2_0_action() {
129 // forms[0] : tout purger (cas SPIP >= 2.0)
130 sql_delete ('spip_urls');
131 spip_log("OK purge");
132 }
133 // fonction {$outil}_{$arg}_action() appelee par action/action_rapide.php
134 function type_urls_edit_urls_1_action() {
135 // forms[1] : editer un objet (cas SPIP < 2.0)
136 $type = _request('ar_type_objet');
137 $table = $type.($type=='syndic'?'':'s');
138 $id = intval(_request('ar_num_objet'));
139 $url = trim(_request('ar_url_objet'));
140 $q = "UPDATE spip_$table SET url_propre="._q($url)." WHERE id_$type=$id";
141 spip_query($q);
142 redirige_vers_exec(array('ar_num_objet' => _request('ar_num_objet'), 'ar_type_objet' => _request('ar_type_objet')));
143 }
144 // fonction {$outil}_{$arg}_action() appelee par action/action_rapide.php
145 function type_urls_edit_urls2_1_action() {
146 // forms[1] : editer un objet (cas SPIP >= 2.0)
147 $type = _request('ar_type_objet');
148 $id = intval(_request('ar_num_objet'));
149 $url = trim(_request('ar_url_objet'));
150 $where = 'id_objet='.$id.' AND type='.sql_quote($type);
151 if(!$url) {
152 sql_delete('spip_urls', $where);
153 spip_log("L'URL $type#$id est supprimee");
154 } else {
155 // pour verrouiller une url, on fixe sa date dans le futur, dans 10 ans
156 $verrou = _request('ar_verrouiller')=='oui'?10*365.25*24*3600:0;
157 $row = sql_fetsel("id_objet, url", "spip_urls", $where, '', 'date DESC', 1);
158 if($row) {
159 sql_updateq('spip_urls', array('date'=>date('Y-m-d H:i:s',time()+$verrou), 'url'=>$url), $where . ' AND url=' . sql_quote($row['url']));
160 spip_log("L'URL $type#$id est remplacee par : $url".($verrou?' puis verrouilee':''));
161 } else {
162 sql_insertq('spip_urls', array('date'=>date('Y-m-d H:i:s',time()+$verrou), 'url'=>$url, 'id_objet'=>$id, 'type'=>$type));
163 spip_log("L'URL $type#$id a ete cree : $url".($verrou?' puis verrouilee':''));
164 }
165 }
166 redirige_vers_exec(array('ar_num_objet' => _request('ar_num_objet'), 'ar_type_objet' => _request('ar_type_objet')));
167 }
168
169 function cs_url_publique($id, $type) {
170 return generer_url_entite($id, $type, '', '', true);
171 }
172 ?>