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