Completed
Push — master ( d7353f...4fa0dc )
by cam
01:55
created
prive/formulaires/editer_liens.php 2 patches
Indentation   +438 added lines, -438 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@  discard block
 block discarded – undo
15 15
  * @package SPIP\Core\Formulaires
16 16
  **/
17 17
 if (!defined('_ECRIRE_INC_VERSION')) {
18
-	return;
18
+    return;
19 19
 }
20 20
 
21 21
 
@@ -35,25 +35,25 @@  discard block
 block discarded – undo
35 35
  *   ($table_source,$objet,$id_objet,$objet_lien)
36 36
  */
37 37
 function determine_source_lien_objet($a, $b, $c) {
38
-	$table_source = $objet_lien = $objet = $id_objet = null;
39
-	// auteurs, article, 23 :
40
-	// associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens
41
-	if (is_numeric($c) and !is_numeric($b)) {
42
-		$table_source = table_objet($a);
43
-		$objet_lien = objet_type($a);
44
-		$objet = objet_type($b);
45
-		$id_objet = $c;
46
-	}
47
-	// article, 23, auteurs
48
-	// associer des auteurs à l'article 23, sur la table pivot spip_articles_liens
49
-	if (is_numeric($b) and !is_numeric($c)) {
50
-		$table_source = table_objet($c);
51
-		$objet_lien = objet_type($a);
52
-		$objet = objet_type($a);
53
-		$id_objet = $b;
54
-	}
55
-
56
-	return [$table_source, $objet, $id_objet, $objet_lien];
38
+    $table_source = $objet_lien = $objet = $id_objet = null;
39
+    // auteurs, article, 23 :
40
+    // associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens
41
+    if (is_numeric($c) and !is_numeric($b)) {
42
+        $table_source = table_objet($a);
43
+        $objet_lien = objet_type($a);
44
+        $objet = objet_type($b);
45
+        $id_objet = $c;
46
+    }
47
+    // article, 23, auteurs
48
+    // associer des auteurs à l'article 23, sur la table pivot spip_articles_liens
49
+    if (is_numeric($b) and !is_numeric($c)) {
50
+        $table_source = table_objet($c);
51
+        $objet_lien = objet_type($a);
52
+        $objet = objet_type($a);
53
+        $id_objet = $b;
54
+    }
55
+
56
+    return [$table_source, $objet, $id_objet, $objet_lien];
57 57
 }
58 58
 
59 59
 /**
@@ -79,86 +79,86 @@  discard block
 block discarded – undo
79 79
  */
80 80
 function formulaires_editer_liens_charger_dist($a, $b, $c, $options = []) {
81 81
 
82
-	// compat avec ancienne signature ou le 4eme argument est $editable
83
-	if (!is_array($options)) {
84
-		$options = ['editable' => $options];
85
-	} elseif (!isset($options['editable'])) {
86
-		$options['editable'] = true;
87
-	}
88
-
89
-	$editable = $options['editable'];
90
-
91
-	[$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c);
92
-	if (!$table_source or !$objet or !$objet_lien or !$id_objet) {
93
-		return false;
94
-	}
95
-
96
-	$objet_source = objet_type($table_source);
97
-	$table_sql_source = table_objet_sql($objet_source);
98
-
99
-	// verifier existence de la table xxx_liens
100
-	include_spip('action/editer_liens');
101
-	if (!objet_associable($objet_lien)) {
102
-		return false;
103
-	}
104
-
105
-	// L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument
106
-	include_spip('inc/autoriser');
107
-	$editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet)
108
-		and autoriser('modifier', $objet, $id_objet));
109
-
110
-	if (
111
-		!$editable and !count(objet_trouver_liens(
112
-			[$objet_lien => '*'],
113
-			[($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet]
114
-		))
115
-	) {
116
-		return false;
117
-	}
118
-
119
-	// squelettes de vue et de d'association
120
-	// ils sont différents si des rôles sont définis.
121
-	$skel_vue = $table_source . '_lies';
122
-	$skel_ajout = $table_source . '_associer';
123
-
124
-	// description des roles
125
-	include_spip('inc/roles');
126
-	if ($roles = roles_presents($objet_source, $objet)) {
127
-		// on demande de nouveaux squelettes en conséquence
128
-		$skel_vue = $table_source . '_roles_lies';
129
-		$skel_ajout = $table_source . '_roles_associer';
130
-	}
131
-
132
-	$oups = '';
133
-	if ($editable) {
134
-		$oups = lien_gerer__oups('editer_liens', 'hash');
135
-	}
136
-	$valeurs = [
137
-		'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form
138
-		'_vue_liee' => $skel_vue,
139
-		'_vue_ajout' => $skel_ajout,
140
-		'_objet_lien' => $objet_lien,
141
-		'id_lien_ajoute' => _request('id_lien_ajoute'),
142
-		'objet' => $objet,
143
-		'id_objet' => $id_objet,
144
-		'objet_source' => $objet_source,
145
-		'table_source' => $table_source,
146
-		'recherche' => '',
147
-		'visible' => 0,
148
-		'ajouter_lien' => '',
149
-		'supprimer_lien' => '',
150
-		'qualifier_lien' => '',
151
-		'ordonner_lien' => '',
152
-		'desordonner_liens' => '',
153
-		'_roles' => $roles, # description des roles
154
-		'_oups' => entites_html($oups),
155
-		'editable' => $editable,
156
-	];
157
-
158
-	// les options non definies dans $valeurs sont passees telles quelles au formulaire html
159
-	$valeurs = array_merge($options, $valeurs);
160
-
161
-	return $valeurs;
82
+    // compat avec ancienne signature ou le 4eme argument est $editable
83
+    if (!is_array($options)) {
84
+        $options = ['editable' => $options];
85
+    } elseif (!isset($options['editable'])) {
86
+        $options['editable'] = true;
87
+    }
88
+
89
+    $editable = $options['editable'];
90
+
91
+    [$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c);
92
+    if (!$table_source or !$objet or !$objet_lien or !$id_objet) {
93
+        return false;
94
+    }
95
+
96
+    $objet_source = objet_type($table_source);
97
+    $table_sql_source = table_objet_sql($objet_source);
98
+
99
+    // verifier existence de la table xxx_liens
100
+    include_spip('action/editer_liens');
101
+    if (!objet_associable($objet_lien)) {
102
+        return false;
103
+    }
104
+
105
+    // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument
106
+    include_spip('inc/autoriser');
107
+    $editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet)
108
+        and autoriser('modifier', $objet, $id_objet));
109
+
110
+    if (
111
+        !$editable and !count(objet_trouver_liens(
112
+            [$objet_lien => '*'],
113
+            [($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet]
114
+        ))
115
+    ) {
116
+        return false;
117
+    }
118
+
119
+    // squelettes de vue et de d'association
120
+    // ils sont différents si des rôles sont définis.
121
+    $skel_vue = $table_source . '_lies';
122
+    $skel_ajout = $table_source . '_associer';
123
+
124
+    // description des roles
125
+    include_spip('inc/roles');
126
+    if ($roles = roles_presents($objet_source, $objet)) {
127
+        // on demande de nouveaux squelettes en conséquence
128
+        $skel_vue = $table_source . '_roles_lies';
129
+        $skel_ajout = $table_source . '_roles_associer';
130
+    }
131
+
132
+    $oups = '';
133
+    if ($editable) {
134
+        $oups = lien_gerer__oups('editer_liens', 'hash');
135
+    }
136
+    $valeurs = [
137
+        'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form
138
+        '_vue_liee' => $skel_vue,
139
+        '_vue_ajout' => $skel_ajout,
140
+        '_objet_lien' => $objet_lien,
141
+        'id_lien_ajoute' => _request('id_lien_ajoute'),
142
+        'objet' => $objet,
143
+        'id_objet' => $id_objet,
144
+        'objet_source' => $objet_source,
145
+        'table_source' => $table_source,
146
+        'recherche' => '',
147
+        'visible' => 0,
148
+        'ajouter_lien' => '',
149
+        'supprimer_lien' => '',
150
+        'qualifier_lien' => '',
151
+        'ordonner_lien' => '',
152
+        'desordonner_liens' => '',
153
+        '_roles' => $roles, # description des roles
154
+        '_oups' => entites_html($oups),
155
+        'editable' => $editable,
156
+    ];
157
+
158
+    // les options non definies dans $valeurs sont passees telles quelles au formulaire html
159
+    $valeurs = array_merge($options, $valeurs);
160
+
161
+    return $valeurs;
162 162
 }
163 163
 
164 164
 /**
@@ -202,170 +202,170 @@  discard block
 block discarded – undo
202 202
  * @return array
203 203
  */
204 204
 function formulaires_editer_liens_traiter_dist($a, $b, $c, $options = []) {
205
-	// compat avec ancienne signature ou le 4eme argument est $editable
206
-	if (!is_array($options)) {
207
-		$options = ['editable' => $options];
208
-	} elseif (!isset($options['editable'])) {
209
-		$options['editable'] = true;
210
-	}
211
-
212
-	$editable = $options['editable'];
213
-
214
-	$res = ['editable' => $editable ? true : false];
215
-	[$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c);
216
-	if (!$table_source or !$objet or !$objet_lien) {
217
-		return $res;
218
-	}
219
-
220
-
221
-	if (_request('tout_voir')) {
222
-		set_request('recherche', '');
223
-	}
224
-
225
-	include_spip('inc/autoriser');
226
-	if (autoriser('modifier', $objet, $id_objet)) {
227
-		// recuperer le oups du coup d'avant pour le propager à charger() si on ne fait rien par exemple
228
-		lien_gerer__oups('editer_liens','request');
229
-
230
-		// annuler les suppressions du coup d'avant ?
231
-		if (
232
-			_request('annuler_oups')
233
-			and $oups = lien_gerer__oups('editer_liens','get')
234
-		) {
235
-			if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) {
236
-				$oups_objets($oups);
237
-			} else {
238
-				$objet_source = objet_type($table_source);
239
-				include_spip('action/editer_liens');
240
-				foreach ($oups as $oup) {
241
-					if ($objet_lien == $objet_source) {
242
-						objet_associer([$objet_source => $oup[$objet_source]], [$objet => $oup[$objet]], $oup);
243
-					} else {
244
-						objet_associer([$objet => $oup[$objet]], [$objet_source => $oup[$objet_source]], $oup);
245
-					}
246
-				}
247
-			}
248
-			# oups ne persiste que pour la derniere action, si suppression
249
-			lien_gerer__oups('editer_liens','reset');
250
-		}
251
-
252
-		$supprimer = _request('supprimer_lien');
253
-		$ajouter = _request('ajouter_lien');
254
-		$ordonner = _request('ordonner_lien');
255
-
256
-		if (_request('desordonner_liens')) {
257
-			include_spip('action/editer_liens');
258
-			objet_qualifier_liens([$objet_lien => '*'], [$objet => $id_objet], ['rang_lien' => 0]);
259
-		}
260
-
261
-		// il est possible de preciser dans une seule variable un remplacement :
262
-		// remplacer_lien[old][new]
263
-		if ($remplacer = _request('remplacer_lien')) {
264
-			foreach ($remplacer as $k => $v) {
265
-				if ($old = lien_verifier_action($k, '')) {
266
-					foreach (is_array($v) ? $v : [$v] as $kn => $vn) {
267
-						if ($new = lien_verifier_action($kn, $vn)) {
268
-							$supprimer[$old] = 'x';
269
-							$ajouter[$new] = '+';
270
-						}
271
-					}
272
-				}
273
-			}
274
-		}
275
-
276
-		if ($supprimer) {
277
-			if (
278
-				$supprimer_objets = charger_fonction(
279
-					"editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}",
280
-					'action',
281
-					true
282
-				)
283
-			) {
284
-				$oups = $supprimer_objets($supprimer);
285
-			} else {
286
-				include_spip('action/editer_liens');
287
-				$oups = [];
288
-
289
-				foreach ($supprimer as $k => $v) {
290
-					if ($lien = lien_verifier_action($k, $v)) {
291
-						$lien = explode('-', $lien);
292
-						[$objet_source, $ids, $objet_lie, $idl, $role] = array_pad($lien, 5, null);
293
-						// appliquer une condition sur le rôle si défini ('*' pour tous les roles)
294
-						$cond = (!is_null($role) ? ['role' => $role] : []);
295
-						if ($objet_lien == $objet_source) {
296
-							$oups = array_merge(
297
-								$oups,
298
-								objet_trouver_liens([$objet_source => $ids], [$objet_lie => $idl], $cond)
299
-							);
300
-							objet_dissocier([$objet_source => $ids], [$objet_lie => $idl], $cond);
301
-						} else {
302
-							$oups = array_merge(
303
-								$oups,
304
-								objet_trouver_liens([$objet_lie => $idl], [$objet_source => $ids], $cond)
305
-							);
306
-							objet_dissocier([$objet_lie => $idl], [$objet_source => $ids], $cond);
307
-						}
308
-					}
309
-				}
310
-			}
311
-			if (!empty($oups)) {
312
-				lien_gerer__oups('editer_liens','set', $oups);
313
-			} else {
314
-				lien_gerer__oups('editer_liens','reset');
315
-			}
316
-		}
317
-
318
-		if ($ajouter) {
319
-			if (
320
-				$ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true)
321
-			) {
322
-				$ajout_ok = $ajouter_objets($ajouter);
323
-			} else {
324
-				$ajout_ok = false;
325
-				include_spip('action/editer_liens');
326
-				foreach ($ajouter as $k => $v) {
327
-					if ($lien = lien_verifier_action($k, $v)) {
328
-						$ajout_ok = true;
329
-						[$objet1, $ids, $objet2, $idl] = explode('-', $lien);
330
-						$qualifs = lien_retrouver_qualif($objet_lien, $lien);
331
-						if ($objet_lien == $objet1) {
332
-							lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs);
333
-						} else {
334
-							lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs);
335
-						}
336
-						set_request('id_lien_ajoute', $ids);
337
-					}
338
-				}
339
-			}
340
-			# oups ne persiste que pour la derniere action, si suppression
341
-			# une suppression suivie d'un ajout dans le meme hit est un remplacement
342
-			# non annulable !
343
-			if ($ajout_ok) {
344
-				lien_gerer__oups('editer_liens','reset');
345
-			}
346
-		}
347
-
348
-		if ($ordonner) {
349
-			include_spip('action/editer_liens');
350
-			foreach ($ordonner as $k => $rang_lien) {
351
-				if ($lien = lien_verifier_action($k, '')) {
352
-					[$objet1, $ids, $objet2, $idl] = explode('-', $lien);
353
-					$qualif = ['rang_lien' => $rang_lien];
354
-
355
-					if ($objet_lien == $objet1) {
356
-						objet_qualifier_liens([$objet1 => $ids], [$objet2 => $idl], $qualif);
357
-					} else {
358
-						objet_qualifier_liens([$objet2 => $idl], [$objet1 => $ids], $qualif);
359
-					}
360
-					set_request('id_lien_ajoute', $ids);
361
-					lien_gerer__oups('editer_liens','reset');
362
-				}
363
-			}
364
-		}
365
-	}
366
-
367
-
368
-	return $res;
205
+    // compat avec ancienne signature ou le 4eme argument est $editable
206
+    if (!is_array($options)) {
207
+        $options = ['editable' => $options];
208
+    } elseif (!isset($options['editable'])) {
209
+        $options['editable'] = true;
210
+    }
211
+
212
+    $editable = $options['editable'];
213
+
214
+    $res = ['editable' => $editable ? true : false];
215
+    [$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c);
216
+    if (!$table_source or !$objet or !$objet_lien) {
217
+        return $res;
218
+    }
219
+
220
+
221
+    if (_request('tout_voir')) {
222
+        set_request('recherche', '');
223
+    }
224
+
225
+    include_spip('inc/autoriser');
226
+    if (autoriser('modifier', $objet, $id_objet)) {
227
+        // recuperer le oups du coup d'avant pour le propager à charger() si on ne fait rien par exemple
228
+        lien_gerer__oups('editer_liens','request');
229
+
230
+        // annuler les suppressions du coup d'avant ?
231
+        if (
232
+            _request('annuler_oups')
233
+            and $oups = lien_gerer__oups('editer_liens','get')
234
+        ) {
235
+            if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) {
236
+                $oups_objets($oups);
237
+            } else {
238
+                $objet_source = objet_type($table_source);
239
+                include_spip('action/editer_liens');
240
+                foreach ($oups as $oup) {
241
+                    if ($objet_lien == $objet_source) {
242
+                        objet_associer([$objet_source => $oup[$objet_source]], [$objet => $oup[$objet]], $oup);
243
+                    } else {
244
+                        objet_associer([$objet => $oup[$objet]], [$objet_source => $oup[$objet_source]], $oup);
245
+                    }
246
+                }
247
+            }
248
+            # oups ne persiste que pour la derniere action, si suppression
249
+            lien_gerer__oups('editer_liens','reset');
250
+        }
251
+
252
+        $supprimer = _request('supprimer_lien');
253
+        $ajouter = _request('ajouter_lien');
254
+        $ordonner = _request('ordonner_lien');
255
+
256
+        if (_request('desordonner_liens')) {
257
+            include_spip('action/editer_liens');
258
+            objet_qualifier_liens([$objet_lien => '*'], [$objet => $id_objet], ['rang_lien' => 0]);
259
+        }
260
+
261
+        // il est possible de preciser dans une seule variable un remplacement :
262
+        // remplacer_lien[old][new]
263
+        if ($remplacer = _request('remplacer_lien')) {
264
+            foreach ($remplacer as $k => $v) {
265
+                if ($old = lien_verifier_action($k, '')) {
266
+                    foreach (is_array($v) ? $v : [$v] as $kn => $vn) {
267
+                        if ($new = lien_verifier_action($kn, $vn)) {
268
+                            $supprimer[$old] = 'x';
269
+                            $ajouter[$new] = '+';
270
+                        }
271
+                    }
272
+                }
273
+            }
274
+        }
275
+
276
+        if ($supprimer) {
277
+            if (
278
+                $supprimer_objets = charger_fonction(
279
+                    "editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}",
280
+                    'action',
281
+                    true
282
+                )
283
+            ) {
284
+                $oups = $supprimer_objets($supprimer);
285
+            } else {
286
+                include_spip('action/editer_liens');
287
+                $oups = [];
288
+
289
+                foreach ($supprimer as $k => $v) {
290
+                    if ($lien = lien_verifier_action($k, $v)) {
291
+                        $lien = explode('-', $lien);
292
+                        [$objet_source, $ids, $objet_lie, $idl, $role] = array_pad($lien, 5, null);
293
+                        // appliquer une condition sur le rôle si défini ('*' pour tous les roles)
294
+                        $cond = (!is_null($role) ? ['role' => $role] : []);
295
+                        if ($objet_lien == $objet_source) {
296
+                            $oups = array_merge(
297
+                                $oups,
298
+                                objet_trouver_liens([$objet_source => $ids], [$objet_lie => $idl], $cond)
299
+                            );
300
+                            objet_dissocier([$objet_source => $ids], [$objet_lie => $idl], $cond);
301
+                        } else {
302
+                            $oups = array_merge(
303
+                                $oups,
304
+                                objet_trouver_liens([$objet_lie => $idl], [$objet_source => $ids], $cond)
305
+                            );
306
+                            objet_dissocier([$objet_lie => $idl], [$objet_source => $ids], $cond);
307
+                        }
308
+                    }
309
+                }
310
+            }
311
+            if (!empty($oups)) {
312
+                lien_gerer__oups('editer_liens','set', $oups);
313
+            } else {
314
+                lien_gerer__oups('editer_liens','reset');
315
+            }
316
+        }
317
+
318
+        if ($ajouter) {
319
+            if (
320
+                $ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true)
321
+            ) {
322
+                $ajout_ok = $ajouter_objets($ajouter);
323
+            } else {
324
+                $ajout_ok = false;
325
+                include_spip('action/editer_liens');
326
+                foreach ($ajouter as $k => $v) {
327
+                    if ($lien = lien_verifier_action($k, $v)) {
328
+                        $ajout_ok = true;
329
+                        [$objet1, $ids, $objet2, $idl] = explode('-', $lien);
330
+                        $qualifs = lien_retrouver_qualif($objet_lien, $lien);
331
+                        if ($objet_lien == $objet1) {
332
+                            lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs);
333
+                        } else {
334
+                            lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs);
335
+                        }
336
+                        set_request('id_lien_ajoute', $ids);
337
+                    }
338
+                }
339
+            }
340
+            # oups ne persiste que pour la derniere action, si suppression
341
+            # une suppression suivie d'un ajout dans le meme hit est un remplacement
342
+            # non annulable !
343
+            if ($ajout_ok) {
344
+                lien_gerer__oups('editer_liens','reset');
345
+            }
346
+        }
347
+
348
+        if ($ordonner) {
349
+            include_spip('action/editer_liens');
350
+            foreach ($ordonner as $k => $rang_lien) {
351
+                if ($lien = lien_verifier_action($k, '')) {
352
+                    [$objet1, $ids, $objet2, $idl] = explode('-', $lien);
353
+                    $qualif = ['rang_lien' => $rang_lien];
354
+
355
+                    if ($objet_lien == $objet1) {
356
+                        objet_qualifier_liens([$objet1 => $ids], [$objet2 => $idl], $qualif);
357
+                    } else {
358
+                        objet_qualifier_liens([$objet2 => $idl], [$objet1 => $ids], $qualif);
359
+                    }
360
+                    set_request('id_lien_ajoute', $ids);
361
+                    lien_gerer__oups('editer_liens','reset');
362
+                }
363
+            }
364
+        }
365
+    }
366
+
367
+
368
+    return $res;
369 369
 }
370 370
 
371 371
 
@@ -388,24 +388,24 @@  discard block
 block discarded – undo
388 388
  * @return string Action demandée si trouvée, sinon ''
389 389
  */
390 390
 function lien_verifier_action($k, $v) {
391
-	$action = '';
392
-	if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) {
393
-		$action = $k;
394
-	}
395
-	if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) {
396
-		if (is_numeric($k)) {
397
-			$action = $v;
398
-		}
399
-		if (_request($k)) {
400
-			$action = $v;
401
-		}
402
-	}
403
-	// ajout un role null fictif (plus pratique) si pas défini
404
-	if ($action and count(explode('-', $action)) == 4) {
405
-		$action .= '-';
406
-	}
407
-
408
-	return $action;
391
+    $action = '';
392
+    if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) {
393
+        $action = $k;
394
+    }
395
+    if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) {
396
+        if (is_numeric($k)) {
397
+            $action = $v;
398
+        }
399
+        if (_request($k)) {
400
+            $action = $v;
401
+        }
402
+    }
403
+    // ajout un role null fictif (plus pratique) si pas défini
404
+    if ($action and count(explode('-', $action)) == 4) {
405
+        $action .= '-';
406
+    }
407
+
408
+    return $action;
409 409
 }
410 410
 
411 411
 
@@ -421,66 +421,66 @@  discard block
 block discarded – undo
421 421
  *   Liste des qualifs pour chaque lien. Tableau vide s'il n'y en a pas.
422 422
  **/
423 423
 function lien_retrouver_qualif($objet_lien, $lien) {
424
-	// un role est défini dans la liaison
425
-	$defs = explode('-', $lien);
426
-	[$objet1, , $objet2, , $role] = array_pad($defs, 5, null);
427
-	if ($objet_lien == $objet1) {
428
-		$colonne_role = roles_colonne($objet1, $objet2);
429
-	} else {
430
-		$colonne_role = roles_colonne($objet2, $objet1);
431
-	}
432
-
433
-	// cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut)
434
-	if ($role) {
435
-		return [
436
-			// un seul lien avec ce role
437
-			[$colonne_role => $role]
438
-		];
439
-	}
440
-
441
-	// retrouver les rôles postés pour cette liaison, s'il y en a.
442
-	$qualifier_lien = _request('qualifier_lien');
443
-	if (!$qualifier_lien or !is_array($qualifier_lien)) {
444
-		return [];
445
-	}
446
-
447
-	// pas avec l'action complete (incluant le role)
448
-	$qualif = [];
449
-	if (
450
-		(!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien])
451
-		and count($defs) == 5
452
-	) {
453
-		// on tente avec l'action sans le role
454
-		array_pop($defs);
455
-		$lien = implode('-', $defs);
456
-		if (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) {
457
-			$qualif = [];
458
-		}
459
-	}
460
-
461
-	// $qualif de la forme array(role=>array(...),valeur=>array(...),....)
462
-	// on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...)
463
-	$qualifs = [];
464
-	while (is_countable($qualif) ? count($qualif) : 0) {
465
-		$q = [];
466
-		foreach ($qualif as $att => $values) {
467
-			if (is_array($values)) {
468
-				$q[$att] = array_shift($qualif[$att]);
469
-				if (!(is_countable($qualif[$att]) ? count($qualif[$att]) : 0)) {
470
-					unset($qualif[$att]);
471
-				}
472
-			} else {
473
-				$q[$att] = $values;
474
-				unset($qualif[$att]);
475
-			}
476
-		}
477
-		// pas de rôle vide
478
-		if (!$colonne_role or !isset($q[$colonne_role]) or $q[$colonne_role]) {
479
-			$qualifs[] = $q;
480
-		}
481
-	}
482
-
483
-	return $qualifs;
424
+    // un role est défini dans la liaison
425
+    $defs = explode('-', $lien);
426
+    [$objet1, , $objet2, , $role] = array_pad($defs, 5, null);
427
+    if ($objet_lien == $objet1) {
428
+        $colonne_role = roles_colonne($objet1, $objet2);
429
+    } else {
430
+        $colonne_role = roles_colonne($objet2, $objet1);
431
+    }
432
+
433
+    // cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut)
434
+    if ($role) {
435
+        return [
436
+            // un seul lien avec ce role
437
+            [$colonne_role => $role]
438
+        ];
439
+    }
440
+
441
+    // retrouver les rôles postés pour cette liaison, s'il y en a.
442
+    $qualifier_lien = _request('qualifier_lien');
443
+    if (!$qualifier_lien or !is_array($qualifier_lien)) {
444
+        return [];
445
+    }
446
+
447
+    // pas avec l'action complete (incluant le role)
448
+    $qualif = [];
449
+    if (
450
+        (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien])
451
+        and count($defs) == 5
452
+    ) {
453
+        // on tente avec l'action sans le role
454
+        array_pop($defs);
455
+        $lien = implode('-', $defs);
456
+        if (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) {
457
+            $qualif = [];
458
+        }
459
+    }
460
+
461
+    // $qualif de la forme array(role=>array(...),valeur=>array(...),....)
462
+    // on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...)
463
+    $qualifs = [];
464
+    while (is_countable($qualif) ? count($qualif) : 0) {
465
+        $q = [];
466
+        foreach ($qualif as $att => $values) {
467
+            if (is_array($values)) {
468
+                $q[$att] = array_shift($qualif[$att]);
469
+                if (!(is_countable($qualif[$att]) ? count($qualif[$att]) : 0)) {
470
+                    unset($qualif[$att]);
471
+                }
472
+            } else {
473
+                $q[$att] = $values;
474
+                unset($qualif[$att]);
475
+            }
476
+        }
477
+        // pas de rôle vide
478
+        if (!$colonne_role or !isset($q[$colonne_role]) or $q[$colonne_role]) {
479
+            $qualifs[] = $q;
480
+        }
481
+    }
482
+
483
+    return $qualifs;
484 484
 }
485 485
 
486 486
 /**
@@ -499,14 +499,14 @@  discard block
 block discarded – undo
499 499
  **/
500 500
 function lien_ajouter_liaisons($objet_source, $ids, $objet_lien, $idl, $qualifs) {
501 501
 
502
-	// retrouver la colonne de roles s'il y en a a lier
503
-	if (is_array($qualifs) and count($qualifs)) {
504
-		foreach ($qualifs as $qualif) {
505
-			objet_associer([$objet_source => $ids], [$objet_lien => $idl], $qualif);
506
-		}
507
-	} else {
508
-		objet_associer([$objet_source => $ids], [$objet_lien => $idl]);
509
-	}
502
+    // retrouver la colonne de roles s'il y en a a lier
503
+    if (is_array($qualifs) and count($qualifs)) {
504
+        foreach ($qualifs as $qualif) {
505
+            objet_associer([$objet_source => $ids], [$objet_lien => $idl], $qualif);
506
+        }
507
+    } else {
508
+        objet_associer([$objet_source => $ids], [$objet_lien => $idl]);
509
+    }
510 510
 }
511 511
 
512 512
 
@@ -518,79 +518,79 @@  discard block
 block discarded – undo
518 518
  * @return array|string|null
519 519
  */
520 520
 function lien_gerer__oups(string $form, string $action, ?array $valeur = null) {
521
-	static $_oups_value;
522
-
523
-	switch ($action) {
524
-		case 'reset':
525
-			$res = (empty($_oups_value) ? false : true);
526
-			$_oups_value = null;
527
-			return $res;
528
-
529
-		case 'get':
530
-			return $_oups_value ?: null;
531
-
532
-		case 'set':
533
-			$_oups_value = $valeur;
534
-			return true;
535
-
536
-		case 'request':
537
-			$_oups_value = null;
538
-			if ($oups = _request('_oups')) {
539
-				include_spip('inc/filtres');
540
-				// on accepte uniquement une valeur signée
541
-				if ($oups = decoder_contexte_ajax($oups, $form)) {
542
-					if (!is_array($oups)
543
-						or empty($oups['id_auteur'])
544
-						or $oups['id_auteur'] !== $GLOBALS['visiteur_session']['id_auteur']
545
-						or empty($oups['time'])
546
-						or $oups['time'] < $_SERVER['REQUEST_TIME'] - 86400
547
-						or empty($oups['args'])
548
-						or $oups['args'] !== lien_gerer__oups_collecter_args($form, debug_backtrace(0, 5))
549
-						or empty($oups['oups_value'])) {
550
-						$oups = null;
551
-					}
552
-					else {
553
-						$oups = $oups['oups_value'];
554
-						// controler le contenu
555
-						foreach ($oups as $k => $oup) {
556
-							if (!is_array($oup)) {
557
-								unset($oups[$k]);
558
-							}
559
-							else {
560
-								foreach ($oup as $champ => $valeur) {
561
-									if (!is_scalar($champ)
562
-										or !is_scalar($valeur)
563
-										or preg_match(',\W,', $champ)
564
-									) {
565
-										unset($oups[$k][$champ]);
566
-									}
567
-								}
568
-								if (empty($oups[$k])) {
569
-									unset($oups[$k]);
570
-								}
571
-							}
572
-						}
573
-					}
574
-					$_oups_value = $oups;
575
-					return $_oups_value;
576
-				}
577
-			}
578
-			break;
579
-
580
-		case 'hash':
581
-			if (!$_oups_value) {
582
-				return '';
583
-			}
584
-
585
-			include_spip('inc/filtres');
586
-			$oups = [
587
-				'id_auteur' => $GLOBALS['visiteur_session']['id_auteur'] ?? 0,
588
-				'time' => strtotime(date('Y-m-d H:00:00')),
589
-				'args' => lien_gerer__oups_collecter_args($form, debug_backtrace(0, 5)),
590
-				'oups_value' => $_oups_value,
591
-			];
592
-			return encoder_contexte_ajax($oups, $form);
593
-	}
521
+    static $_oups_value;
522
+
523
+    switch ($action) {
524
+        case 'reset':
525
+            $res = (empty($_oups_value) ? false : true);
526
+            $_oups_value = null;
527
+            return $res;
528
+
529
+        case 'get':
530
+            return $_oups_value ?: null;
531
+
532
+        case 'set':
533
+            $_oups_value = $valeur;
534
+            return true;
535
+
536
+        case 'request':
537
+            $_oups_value = null;
538
+            if ($oups = _request('_oups')) {
539
+                include_spip('inc/filtres');
540
+                // on accepte uniquement une valeur signée
541
+                if ($oups = decoder_contexte_ajax($oups, $form)) {
542
+                    if (!is_array($oups)
543
+                        or empty($oups['id_auteur'])
544
+                        or $oups['id_auteur'] !== $GLOBALS['visiteur_session']['id_auteur']
545
+                        or empty($oups['time'])
546
+                        or $oups['time'] < $_SERVER['REQUEST_TIME'] - 86400
547
+                        or empty($oups['args'])
548
+                        or $oups['args'] !== lien_gerer__oups_collecter_args($form, debug_backtrace(0, 5))
549
+                        or empty($oups['oups_value'])) {
550
+                        $oups = null;
551
+                    }
552
+                    else {
553
+                        $oups = $oups['oups_value'];
554
+                        // controler le contenu
555
+                        foreach ($oups as $k => $oup) {
556
+                            if (!is_array($oup)) {
557
+                                unset($oups[$k]);
558
+                            }
559
+                            else {
560
+                                foreach ($oup as $champ => $valeur) {
561
+                                    if (!is_scalar($champ)
562
+                                        or !is_scalar($valeur)
563
+                                        or preg_match(',\W,', $champ)
564
+                                    ) {
565
+                                        unset($oups[$k][$champ]);
566
+                                    }
567
+                                }
568
+                                if (empty($oups[$k])) {
569
+                                    unset($oups[$k]);
570
+                                }
571
+                            }
572
+                        }
573
+                    }
574
+                    $_oups_value = $oups;
575
+                    return $_oups_value;
576
+                }
577
+            }
578
+            break;
579
+
580
+        case 'hash':
581
+            if (!$_oups_value) {
582
+                return '';
583
+            }
584
+
585
+            include_spip('inc/filtres');
586
+            $oups = [
587
+                'id_auteur' => $GLOBALS['visiteur_session']['id_auteur'] ?? 0,
588
+                'time' => strtotime(date('Y-m-d H:00:00')),
589
+                'args' => lien_gerer__oups_collecter_args($form, debug_backtrace(0, 5)),
590
+                'oups_value' => $_oups_value,
591
+            ];
592
+            return encoder_contexte_ajax($oups, $form);
593
+    }
594 594
 }
595 595
 
596 596
 /**
@@ -600,19 +600,19 @@  discard block
 block discarded – undo
600 600
  * @return string
601 601
  */
602 602
 function lien_gerer__oups_collecter_args($form, $trace) {
603
-	$args = '';
604
-	if (!empty($trace)) {
605
-		do {
606
-			$t = array_shift($trace);
607
-			$function = $t['function'] ?? '';
608
-			if (strpos($function, 'formulaires_'. $form) === 0) {
609
-				if (isset($t['args'])) {
610
-					$args = json_encode($t['args']);
611
-				}
612
-				break;
613
-			}
614
-		}
615
-		while (count($trace));
616
-	}
617
-	return $args;
603
+    $args = '';
604
+    if (!empty($trace)) {
605
+        do {
606
+            $t = array_shift($trace);
607
+            $function = $t['function'] ?? '';
608
+            if (strpos($function, 'formulaires_'. $form) === 0) {
609
+                if (isset($t['args'])) {
610
+                    $args = json_encode($t['args']);
611
+                }
612
+                break;
613
+            }
614
+        }
615
+        while (count($trace));
616
+    }
617
+    return $args;
618 618
 }
Please login to merge, or discard this patch.
Braces   +2 added lines, -4 removed lines patch added patch discarded remove patch
@@ -548,15 +548,13 @@
 block discarded – undo
548 548
 						or $oups['args'] !== lien_gerer__oups_collecter_args($form, debug_backtrace(0, 5))
549 549
 						or empty($oups['oups_value'])) {
550 550
 						$oups = null;
551
-					}
552
-					else {
551
+					} else {
553 552
 						$oups = $oups['oups_value'];
554 553
 						// controler le contenu
555 554
 						foreach ($oups as $k => $oup) {
556 555
 							if (!is_array($oup)) {
557 556
 								unset($oups[$k]);
558
-							}
559
-							else {
557
+							} else {
560 558
 								foreach ($oup as $champ => $valeur) {
561 559
 									if (!is_scalar($champ)
562 560
 										or !is_scalar($valeur)
Please login to merge, or discard this patch.