Completed
Push — master ( fccc2c...dcb219 )
by cam
01:48
created
ecrire/action/editer_liens.php 2 patches
Indentation   +561 added lines, -561 removed lines patch added patch discarded remove patch
@@ -28,7 +28,7 @@  discard block
 block discarded – undo
28 28
  */
29 29
 
30 30
 if (!defined('_ECRIRE_INC_VERSION')) {
31
-	return;
31
+    return;
32 32
 }
33 33
 
34 34
 // charger la gestion les rôles sur les objets
@@ -46,22 +46,22 @@  discard block
 block discarded – undo
46 46
  *     - array(clé primaire, nom de la table de lien) si associable
47 47
  */
48 48
 function objet_associable($objet) {
49
-	$trouver_table = charger_fonction('trouver_table', 'base');
50
-	$table_sql = table_objet_sql($objet);
51
-
52
-	$l = '';
53
-	if (
54
-		($primary = id_table_objet($objet))
55
-		&& $trouver_table($l = $table_sql . '_liens', '', true, ['log_missing' => false])
56
-		&& !preg_match(',[^\w],', $primary)
57
-		&& !preg_match(',[^\w],', $l)
58
-	) {
59
-		return [$primary, $l];
60
-	}
61
-
62
-	spip_logger()->info("Objet $objet non associable : ne dispose pas d'une cle primaire $primary OU d'une table liens $l");
63
-
64
-	return false;
49
+    $trouver_table = charger_fonction('trouver_table', 'base');
50
+    $table_sql = table_objet_sql($objet);
51
+
52
+    $l = '';
53
+    if (
54
+        ($primary = id_table_objet($objet))
55
+        && $trouver_table($l = $table_sql . '_liens', '', true, ['log_missing' => false])
56
+        && !preg_match(',[^\w],', $primary)
57
+        && !preg_match(',[^\w],', $l)
58
+    ) {
59
+        return [$primary, $l];
60
+    }
61
+
62
+    spip_logger()->info("Objet $objet non associable : ne dispose pas d'une cle primaire $primary OU d'une table liens $l");
63
+
64
+    return false;
65 65
 }
66 66
 
67 67
 /**
@@ -87,13 +87,13 @@  discard block
 block discarded – undo
87 87
  * @return bool|int
88 88
  */
89 89
 function objet_associer($objets_source, $objets_lies, $qualif = null) {
90
-	$modifs = objet_traiter_liaisons('lien_insert', $objets_source, $objets_lies, $qualif);
90
+    $modifs = objet_traiter_liaisons('lien_insert', $objets_source, $objets_lies, $qualif);
91 91
 
92
-	if ($qualif) {
93
-		objet_qualifier_liens($objets_source, $objets_lies, $qualif);
94
-	}
92
+    if ($qualif) {
93
+        objet_qualifier_liens($objets_source, $objets_lies, $qualif);
94
+    }
95 95
 
96
-	return $modifs; // pas d'erreur
96
+    return $modifs; // pas d'erreur
97 97
 }
98 98
 
99 99
 
@@ -127,7 +127,7 @@  discard block
 block discarded – undo
127 127
  * @return bool|int
128 128
  */
129 129
 function objet_dissocier($objets_source, $objets_lies, $cond = null) {
130
-	return objet_traiter_liaisons('lien_delete', $objets_source, $objets_lies, $cond);
130
+    return objet_traiter_liaisons('lien_delete', $objets_source, $objets_lies, $cond);
131 131
 }
132 132
 
133 133
 
@@ -152,7 +152,7 @@  discard block
 block discarded – undo
152 152
  * @return bool|int
153 153
  */
154 154
 function objet_qualifier_liens($objets_source, $objets_lies, $qualif) {
155
-	return objet_traiter_liaisons('lien_set', $objets_source, $objets_lies, $qualif);
155
+    return objet_traiter_liaisons('lien_set', $objets_source, $objets_lies, $qualif);
156 156
 }
157 157
 
158 158
 
@@ -187,7 +187,7 @@  discard block
 block discarded – undo
187 187
  *     Liste des trouvailles
188 188
  */
189 189
 function objet_trouver_liens($objets_source, $objets_lies, $cond = null) {
190
-	return objet_traiter_liaisons('lien_find', $objets_source, $objets_lies, $cond);
190
+    return objet_traiter_liaisons('lien_find', $objets_source, $objets_lies, $cond);
191 191
 }
192 192
 
193 193
 
@@ -211,8 +211,8 @@  discard block
 block discarded – undo
211 211
  * @return int
212 212
  */
213 213
 function objet_optimiser_liens($objets_source, $objets_lies) {
214
-	spip_logger('genie')->debug('objet_optimiser_liens : ' . json_encode($objets_source, JSON_THROW_ON_ERROR) . ', ' . json_encode($objets_lies, JSON_THROW_ON_ERROR));
215
-	return objet_traiter_liaisons('lien_optimise', $objets_source, $objets_lies);
214
+    spip_logger('genie')->debug('objet_optimiser_liens : ' . json_encode($objets_source, JSON_THROW_ON_ERROR) . ', ' . json_encode($objets_lies, JSON_THROW_ON_ERROR));
215
+    return objet_traiter_liaisons('lien_optimise', $objets_source, $objets_lies);
216 216
 }
217 217
 
218 218
 
@@ -232,30 +232,30 @@  discard block
 block discarded – undo
232 232
  *     Nombre de liens copiés
233 233
  */
234 234
 function objet_dupliquer_liens($objet, $id_source, $id_cible, $types = null, $exclure_types = null) {
235
-	include_spip('base/objets');
236
-	$tables = lister_tables_objets_sql();
237
-	$n = 0;
238
-	foreach ($tables as $table_sql => $infos) {
239
-		if ((is_null($types) || in_array($infos['type'], $types)) && (is_null($exclure_types) || !in_array($infos['type'], $exclure_types)) && objet_associable($infos['type'])) {
240
-			$liens = (($infos['type'] == $objet)
241
-				? objet_trouver_liens([$objet => $id_source], '*')
242
-				: objet_trouver_liens([$infos['type'] => '*'], [$objet => $id_source]));
243
-			foreach ($liens as $lien) {
244
-				$n++;
245
-				if ($infos['type'] == $objet) {
246
-					if (
247
-						(is_null($types) || in_array($lien['objet'], $types)) && (is_null($exclure_types) || !in_array($lien['objet'], $exclure_types))
248
-					) {
249
-						objet_associer([$objet => $id_cible], [$lien['objet'] => $lien[$lien['objet']]], $lien);
250
-					}
251
-				} else {
252
-					objet_associer([$infos['type'] => $lien[$infos['type']]], [$objet => $id_cible], $lien);
253
-				}
254
-			}
255
-		}
256
-	}
257
-
258
-	return $n;
235
+    include_spip('base/objets');
236
+    $tables = lister_tables_objets_sql();
237
+    $n = 0;
238
+    foreach ($tables as $table_sql => $infos) {
239
+        if ((is_null($types) || in_array($infos['type'], $types)) && (is_null($exclure_types) || !in_array($infos['type'], $exclure_types)) && objet_associable($infos['type'])) {
240
+            $liens = (($infos['type'] == $objet)
241
+                ? objet_trouver_liens([$objet => $id_source], '*')
242
+                : objet_trouver_liens([$infos['type'] => '*'], [$objet => $id_source]));
243
+            foreach ($liens as $lien) {
244
+                $n++;
245
+                if ($infos['type'] == $objet) {
246
+                    if (
247
+                        (is_null($types) || in_array($lien['objet'], $types)) && (is_null($exclure_types) || !in_array($lien['objet'], $exclure_types))
248
+                    ) {
249
+                        objet_associer([$objet => $id_cible], [$lien['objet'] => $lien[$lien['objet']]], $lien);
250
+                    }
251
+                } else {
252
+                    objet_associer([$infos['type'] => $lien[$infos['type']]], [$objet => $id_cible], $lien);
253
+                }
254
+            }
255
+        }
256
+    }
257
+
258
+    return $n;
259 259
 }
260 260
 
261 261
 /**
@@ -297,38 +297,38 @@  discard block
 block discarded – undo
297 297
  * @return bool|int|array
298 298
  */
299 299
 function objet_traiter_liaisons($operation, $objets_source, $objets_lies, $set = null) {
300
-	// accepter une syntaxe minimale pour supprimer tous les liens
301
-	if ($objets_lies == '*') {
302
-		$objets_lies = ['*' => '*'];
303
-	}
304
-	$modifs = 0; // compter le nombre de modifications
305
-	$echec = null;
306
-	foreach ($objets_source as $objet => $ids) {
307
-		if ($a = objet_associable($objet)) {
308
-			[$primary, $l] = $a;
309
-			if (!is_array($ids)) {
310
-				$ids = [$ids];
311
-			} elseif (reset($ids) == 'NOT') {
312
-				// si on demande un array('NOT',...) => recuperer la liste d'ids correspondants
313
-				$where = lien_where($primary, $ids, '*', '*');
314
-				$ids = sql_allfetsel($primary, $l, $where);
315
-				$ids = array_map('reset', $ids);
316
-			}
317
-			foreach ($ids as $id) {
318
-				$res = $operation($objet, $primary, $l, $id, $objets_lies, $set);
319
-				if ($res === false) {
320
-					spip_logger()->error("objet_traiter_liaisons [Echec] : $operation sur $objet/$primary/$l/$id");
321
-					$echec = true;
322
-				} else {
323
-					$modifs = ($modifs ? (is_array($res) ? array_merge($modifs, $res) : $modifs + $res) : $res);
324
-				}
325
-			}
326
-		} else {
327
-			$echec = true;
328
-		}
329
-	}
330
-
331
-	return ($echec ? false : $modifs); // pas d'erreur
300
+    // accepter une syntaxe minimale pour supprimer tous les liens
301
+    if ($objets_lies == '*') {
302
+        $objets_lies = ['*' => '*'];
303
+    }
304
+    $modifs = 0; // compter le nombre de modifications
305
+    $echec = null;
306
+    foreach ($objets_source as $objet => $ids) {
307
+        if ($a = objet_associable($objet)) {
308
+            [$primary, $l] = $a;
309
+            if (!is_array($ids)) {
310
+                $ids = [$ids];
311
+            } elseif (reset($ids) == 'NOT') {
312
+                // si on demande un array('NOT',...) => recuperer la liste d'ids correspondants
313
+                $where = lien_where($primary, $ids, '*', '*');
314
+                $ids = sql_allfetsel($primary, $l, $where);
315
+                $ids = array_map('reset', $ids);
316
+            }
317
+            foreach ($ids as $id) {
318
+                $res = $operation($objet, $primary, $l, $id, $objets_lies, $set);
319
+                if ($res === false) {
320
+                    spip_logger()->error("objet_traiter_liaisons [Echec] : $operation sur $objet/$primary/$l/$id");
321
+                    $echec = true;
322
+                } else {
323
+                    $modifs = ($modifs ? (is_array($res) ? array_merge($modifs, $res) : $modifs + $res) : $res);
324
+                }
325
+            }
326
+        } else {
327
+            $echec = true;
328
+        }
329
+    }
330
+
331
+    return ($echec ? false : $modifs); // pas d'erreur
332 332
 }
333 333
 
334 334
 
@@ -357,116 +357,116 @@  discard block
 block discarded – undo
357 357
  *     Nombre d'insertions faites, false si échec.
358 358
  */
359 359
 function lien_insert($objet_source, $primary, $table_lien, $id, $objets, $qualif) {
360
-	$ins = 0;
361
-	$echec = null;
362
-	if (is_null($qualif)) {
363
-		$qualif = [];
364
-	}
365
-
366
-	foreach ($objets as $objet => $id_objets) {
367
-		if (!is_array($id_objets)) {
368
-			$id_objets = [$id_objets];
369
-		}
370
-
371
-		// role, colonne, where par défaut
372
-		[$role, $colonne_role, $cond] =
373
-			roles_trouver_dans_qualif($objet_source, $objet, $qualif);
374
-
375
-		foreach ($id_objets as $id_objet) {
376
-			$objet = (($objet == '*') ? $objet : objet_type($objet)); # securite
377
-
378
-			$insertions = [
379
-				'id_objet' => $id_objet,
380
-				'objet' => $objet,
381
-				$primary => $id
382
-			];
383
-			// rôle en plus s'il est défini
384
-			if ($role) {
385
-				$insertions += [
386
-					$colonne_role => $role
387
-				];
388
-			}
389
-
390
-			if (lien_triables($table_lien)) {
391
-				if (isset($qualif['rang_lien'])) {
392
-					$rang = $qualif['rang_lien'];
393
-				}
394
-				else {
395
-					$where = lien_where($primary, $id, $objet, $id_objet);
396
-					// si il y a deja un lien pour ce couple (avec un autre role?) on reprend le meme rang si non nul
397
-					if (!$rang = (int) sql_getfetsel('rang_lien', $table_lien, $where)) {
398
-						$where = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet);
399
-						$rang = (int) sql_getfetsel('max(rang_lien)', $table_lien, $where);
400
-						// si aucun lien n'a de rang, on en introduit pas, on garde zero
401
-						if ($rang > 0) {
402
-							$rang = (int) $rang + 1;
403
-						}
404
-					}
405
-				}
406
-				$insertions['rang_lien'] = $rang;
407
-			}
408
-
409
-			$args = [
410
-				'table_lien' => $table_lien,
411
-				'objet_source' => $objet_source,
412
-				'id_objet_source' => $id,
413
-				'objet' => $objet,
414
-				'id_objet' => $id_objet,
415
-				'role' => $role,
416
-				'colonne_role' => $colonne_role,
417
-				'action' => 'insert',
418
-			];
419
-
420
-			// Envoyer aux plugins
421
-			$insertions = pipeline(
422
-				'pre_edition_lien',
423
-				[
424
-					'args' => $args,
425
-					'data' => $insertions
426
-				]
427
-			);
428
-			$args['id_objet'] = $insertions['id_objet'];
429
-
430
-			$where = lien_where($primary, $id, $objet, $id_objet, $cond);
431
-
432
-			if (
433
-				(($id_objet = (int) $insertions['id_objet']) || in_array($objet, ['site', 'rubrique'])) && !sql_getfetsel($primary, $table_lien, $where)
434
-			) {
435
-				if (lien_triables($table_lien) && isset($insertions['rang_lien']) && (int) $insertions['rang_lien']) {
436
-					$where_meme_lien = lien_where($primary, $id, $objet, $id_objet);
437
-					$where_meme_lien = implode(' AND ', $where_meme_lien);
438
-					// on decale les liens de rang_lien>=la valeur inseree pour faire la place
439
-					// sauf sur le meme lien avec un role eventuellement different
440
-					$w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>=' . (int) $insertions['rang_lien'], "NOT($where_meme_lien)"]);
441
-					sql_update($table_lien, ['rang_lien' => 'rang_lien+1'], $w);
442
-				}
443
-
444
-				$e = sql_insertq($table_lien, $insertions);
445
-				if ($e !== false) {
446
-					$ins++;
447
-					lien_propage_date_modif($objet, $id_objet);
448
-					lien_propage_date_modif($objet_source, $id);
449
-					// Envoyer aux plugins
450
-					pipeline(
451
-						'post_edition_lien',
452
-						[
453
-							'args' => $args,
454
-							'data' => $insertions
455
-						]
456
-					);
457
-				} else {
458
-					$echec = true;
459
-				}
460
-			}
461
-		}
462
-	}
463
-	// si on a fait des insertions, on reordonne les liens concernes
464
-	// pas la peine si $qualif['rang_lien'] etait fournie, on va passer dans lien_set a suivre et donc finir le recomptage
465
-	if ($ins > 0 && empty($qualif['rang_lien'])) {
466
-		lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
467
-	}
468
-
469
-	return ($echec ? false : $ins);
360
+    $ins = 0;
361
+    $echec = null;
362
+    if (is_null($qualif)) {
363
+        $qualif = [];
364
+    }
365
+
366
+    foreach ($objets as $objet => $id_objets) {
367
+        if (!is_array($id_objets)) {
368
+            $id_objets = [$id_objets];
369
+        }
370
+
371
+        // role, colonne, where par défaut
372
+        [$role, $colonne_role, $cond] =
373
+            roles_trouver_dans_qualif($objet_source, $objet, $qualif);
374
+
375
+        foreach ($id_objets as $id_objet) {
376
+            $objet = (($objet == '*') ? $objet : objet_type($objet)); # securite
377
+
378
+            $insertions = [
379
+                'id_objet' => $id_objet,
380
+                'objet' => $objet,
381
+                $primary => $id
382
+            ];
383
+            // rôle en plus s'il est défini
384
+            if ($role) {
385
+                $insertions += [
386
+                    $colonne_role => $role
387
+                ];
388
+            }
389
+
390
+            if (lien_triables($table_lien)) {
391
+                if (isset($qualif['rang_lien'])) {
392
+                    $rang = $qualif['rang_lien'];
393
+                }
394
+                else {
395
+                    $where = lien_where($primary, $id, $objet, $id_objet);
396
+                    // si il y a deja un lien pour ce couple (avec un autre role?) on reprend le meme rang si non nul
397
+                    if (!$rang = (int) sql_getfetsel('rang_lien', $table_lien, $where)) {
398
+                        $where = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet);
399
+                        $rang = (int) sql_getfetsel('max(rang_lien)', $table_lien, $where);
400
+                        // si aucun lien n'a de rang, on en introduit pas, on garde zero
401
+                        if ($rang > 0) {
402
+                            $rang = (int) $rang + 1;
403
+                        }
404
+                    }
405
+                }
406
+                $insertions['rang_lien'] = $rang;
407
+            }
408
+
409
+            $args = [
410
+                'table_lien' => $table_lien,
411
+                'objet_source' => $objet_source,
412
+                'id_objet_source' => $id,
413
+                'objet' => $objet,
414
+                'id_objet' => $id_objet,
415
+                'role' => $role,
416
+                'colonne_role' => $colonne_role,
417
+                'action' => 'insert',
418
+            ];
419
+
420
+            // Envoyer aux plugins
421
+            $insertions = pipeline(
422
+                'pre_edition_lien',
423
+                [
424
+                    'args' => $args,
425
+                    'data' => $insertions
426
+                ]
427
+            );
428
+            $args['id_objet'] = $insertions['id_objet'];
429
+
430
+            $where = lien_where($primary, $id, $objet, $id_objet, $cond);
431
+
432
+            if (
433
+                (($id_objet = (int) $insertions['id_objet']) || in_array($objet, ['site', 'rubrique'])) && !sql_getfetsel($primary, $table_lien, $where)
434
+            ) {
435
+                if (lien_triables($table_lien) && isset($insertions['rang_lien']) && (int) $insertions['rang_lien']) {
436
+                    $where_meme_lien = lien_where($primary, $id, $objet, $id_objet);
437
+                    $where_meme_lien = implode(' AND ', $where_meme_lien);
438
+                    // on decale les liens de rang_lien>=la valeur inseree pour faire la place
439
+                    // sauf sur le meme lien avec un role eventuellement different
440
+                    $w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>=' . (int) $insertions['rang_lien'], "NOT($where_meme_lien)"]);
441
+                    sql_update($table_lien, ['rang_lien' => 'rang_lien+1'], $w);
442
+                }
443
+
444
+                $e = sql_insertq($table_lien, $insertions);
445
+                if ($e !== false) {
446
+                    $ins++;
447
+                    lien_propage_date_modif($objet, $id_objet);
448
+                    lien_propage_date_modif($objet_source, $id);
449
+                    // Envoyer aux plugins
450
+                    pipeline(
451
+                        'post_edition_lien',
452
+                        [
453
+                            'args' => $args,
454
+                            'data' => $insertions
455
+                        ]
456
+                    );
457
+                } else {
458
+                    $echec = true;
459
+                }
460
+            }
461
+        }
462
+    }
463
+    // si on a fait des insertions, on reordonne les liens concernes
464
+    // pas la peine si $qualif['rang_lien'] etait fournie, on va passer dans lien_set a suivre et donc finir le recomptage
465
+    if ($ins > 0 && empty($qualif['rang_lien'])) {
466
+        lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
467
+    }
468
+
469
+    return ($echec ? false : $ins);
470 470
 }
471 471
 
472 472
 
@@ -479,47 +479,47 @@  discard block
 block discarded – undo
479 479
  * @param array|string $objets
480 480
  */
481 481
 function lien_ordonner($objet_source, $primary, $table_lien, $id, $objets) {
482
-	if (!lien_triables($table_lien)) {
483
-		return;
484
-	}
485
-
486
-	$deja_reordonne = [];
487
-
488
-	foreach ($objets as $objet => $id_objets) {
489
-		if (!is_array($id_objets)) {
490
-			$id_objets = [$id_objets];
491
-		}
492
-
493
-		foreach ($id_objets as $id_objet) {
494
-			if (empty($deja_reordonne[$id][$objet][$id_objet])) {
495
-				$objet = (($objet == '*') ? $objet : objet_type($objet)); # securite
496
-
497
-				$where = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet);
498
-				$liens = sql_allfetsel("$primary, id_objet, objet, rang_lien", $table_lien, $where, '', 'rang_lien');
499
-
500
-				$rangs = array_column($liens, 'rang_lien');
501
-				if (count($rangs) && (max($rangs) > 0 || min($rangs) < 0)) {
502
-					$rang = 1;
503
-					foreach ($liens as $lien) {
504
-						if (empty($deja_reordonne[$lien[$primary]][$lien['objet']][$lien['id_objet']])) {
505
-							$where = lien_where($primary, $lien[$primary], $lien['objet'], $lien['id_objet'], ['rang_lien!=' . (int) $rang]);
506
-							sql_updateq($table_lien, ['rang_lien' => $rang], $where);
507
-
508
-							if (empty($deja_reordonne[$lien[$primary]])) {
509
-								$deja_reordonne[$lien[$primary]] = [];
510
-							}
511
-							if (empty($deja_reordonne[$lien[$primary]][$lien['objet']])) {
512
-								$deja_reordonne[$lien[$primary]][$lien['objet']] = [];
513
-							}
514
-							$deja_reordonne[$lien[$primary]][$lien['objet']][$lien['id_objet']] = $rang;
515
-
516
-							$rang++;
517
-						}
518
-					}
519
-				}
520
-			}
521
-		}
522
-	}
482
+    if (!lien_triables($table_lien)) {
483
+        return;
484
+    }
485
+
486
+    $deja_reordonne = [];
487
+
488
+    foreach ($objets as $objet => $id_objets) {
489
+        if (!is_array($id_objets)) {
490
+            $id_objets = [$id_objets];
491
+        }
492
+
493
+        foreach ($id_objets as $id_objet) {
494
+            if (empty($deja_reordonne[$id][$objet][$id_objet])) {
495
+                $objet = (($objet == '*') ? $objet : objet_type($objet)); # securite
496
+
497
+                $where = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet);
498
+                $liens = sql_allfetsel("$primary, id_objet, objet, rang_lien", $table_lien, $where, '', 'rang_lien');
499
+
500
+                $rangs = array_column($liens, 'rang_lien');
501
+                if (count($rangs) && (max($rangs) > 0 || min($rangs) < 0)) {
502
+                    $rang = 1;
503
+                    foreach ($liens as $lien) {
504
+                        if (empty($deja_reordonne[$lien[$primary]][$lien['objet']][$lien['id_objet']])) {
505
+                            $where = lien_where($primary, $lien[$primary], $lien['objet'], $lien['id_objet'], ['rang_lien!=' . (int) $rang]);
506
+                            sql_updateq($table_lien, ['rang_lien' => $rang], $where);
507
+
508
+                            if (empty($deja_reordonne[$lien[$primary]])) {
509
+                                $deja_reordonne[$lien[$primary]] = [];
510
+                            }
511
+                            if (empty($deja_reordonne[$lien[$primary]][$lien['objet']])) {
512
+                                $deja_reordonne[$lien[$primary]][$lien['objet']] = [];
513
+                            }
514
+                            $deja_reordonne[$lien[$primary]][$lien['objet']][$lien['id_objet']] = $rang;
515
+
516
+                            $rang++;
517
+                        }
518
+                    }
519
+                }
520
+            }
521
+        }
522
+    }
523 523
 }
524 524
 
525 525
 
@@ -530,13 +530,13 @@  discard block
 block discarded – undo
530 530
  * @return mixed
531 531
  */
532 532
 function lien_triables($table_lien) {
533
-	static $triables = [];
534
-	if (!isset($triables[$table_lien])) {
535
-		$trouver_table = charger_fonction('trouver_table', 'base');
536
-		$desc = $trouver_table($table_lien);
537
-		$triables[$table_lien] = $desc && isset($desc['field']['rang_lien']);
538
-	}
539
-	return $triables[$table_lien];
533
+    static $triables = [];
534
+    if (!isset($triables[$table_lien])) {
535
+        $trouver_table = charger_fonction('trouver_table', 'base');
536
+        $desc = $trouver_table($table_lien);
537
+        $triables[$table_lien] = $desc && isset($desc['field']['rang_lien']);
538
+    }
539
+    return $triables[$table_lien];
540 540
 }
541 541
 
542 542
 
@@ -552,50 +552,50 @@  discard block
 block discarded – undo
552 552
  * @return array                        Liste des conditions
553 553
  */
554 554
 function lien_where($primary, $id_source, $objet, $id_objet, $cond = []) {
555
-	if (
556
-		!is_array($id_source) && !strlen($id_source) || !strlen($objet) || !is_array($id_objet) && !strlen($id_objet)
557
-	) {
558
-		return ['0=1'];
559
-	} // securite
560
-
561
-	$not = '';
562
-	if (is_array($id_source) && reset($id_source) == 'NOT') {
563
-		$not = array_shift($id_source);
564
-		$id_source = reset($id_source);
565
-	}
566
-
567
-	$where = $cond;
568
-
569
-	if ($id_source !== '*') {
570
-		$where[] = (is_array($id_source) ? sql_in(
571
-			addslashes($primary),
572
-			array_map('intval', $id_source),
573
-			$not
574
-		) : addslashes($primary) . ($not ? '<>' : '=') . (int) $id_source);
575
-	} elseif ($not) {
576
-		$where[] = '0=1';
577
-	} // idiot mais quand meme
578
-
579
-	$not = '';
580
-	if (is_array($id_objet) && reset($id_objet) == 'NOT') {
581
-		$not = array_shift($id_objet);
582
-		$id_objet = reset($id_objet);
583
-	}
584
-
585
-	if ($objet !== '*') {
586
-		$where[] = 'objet=' . sql_quote($objet);
587
-	}
588
-	if ($id_objet !== '*') {
589
-		$where[] = (is_array($id_objet) ? sql_in(
590
-			'id_objet',
591
-			array_map('intval', $id_objet),
592
-			$not
593
-		) : 'id_objet' . ($not ? '<>' : '=') . (int) $id_objet);
594
-	} elseif ($not) {
595
-		$where[] = '0=1';
596
-	} // idiot mais quand meme
597
-
598
-	return $where;
555
+    if (
556
+        !is_array($id_source) && !strlen($id_source) || !strlen($objet) || !is_array($id_objet) && !strlen($id_objet)
557
+    ) {
558
+        return ['0=1'];
559
+    } // securite
560
+
561
+    $not = '';
562
+    if (is_array($id_source) && reset($id_source) == 'NOT') {
563
+        $not = array_shift($id_source);
564
+        $id_source = reset($id_source);
565
+    }
566
+
567
+    $where = $cond;
568
+
569
+    if ($id_source !== '*') {
570
+        $where[] = (is_array($id_source) ? sql_in(
571
+            addslashes($primary),
572
+            array_map('intval', $id_source),
573
+            $not
574
+        ) : addslashes($primary) . ($not ? '<>' : '=') . (int) $id_source);
575
+    } elseif ($not) {
576
+        $where[] = '0=1';
577
+    } // idiot mais quand meme
578
+
579
+    $not = '';
580
+    if (is_array($id_objet) && reset($id_objet) == 'NOT') {
581
+        $not = array_shift($id_objet);
582
+        $id_objet = reset($id_objet);
583
+    }
584
+
585
+    if ($objet !== '*') {
586
+        $where[] = 'objet=' . sql_quote($objet);
587
+    }
588
+    if ($id_objet !== '*') {
589
+        $where[] = (is_array($id_objet) ? sql_in(
590
+            'id_objet',
591
+            array_map('intval', $id_objet),
592
+            $not
593
+        ) : 'id_objet' . ($not ? '<>' : '=') . (int) $id_objet);
594
+    } elseif ($not) {
595
+        $where[] = '0=1';
596
+    } // idiot mais quand meme
597
+
598
+    return $where;
599 599
 }
600 600
 
601 601
 /**
@@ -610,13 +610,13 @@  discard block
 block discarded – undo
610 610
  */
611 611
 function lien_rang_where($table_lien, $primary, $id_source, $objet, $id_objet, $cond = []) {
612 612
 
613
-	// si on veut compter les rangs autrement que le core ne le fait par defaut, fournir le where adhoc
614
-	if (function_exists($f = 'lien_rang_where_' . $table_lien)) {
615
-		return $f($primary, $id_source, $objet, $id_objet, $cond);
616
-	}
613
+    // si on veut compter les rangs autrement que le core ne le fait par defaut, fournir le where adhoc
614
+    if (function_exists($f = 'lien_rang_where_' . $table_lien)) {
615
+        return $f($primary, $id_source, $objet, $id_objet, $cond);
616
+    }
617 617
 
618
-	// par defaut c'est un rang compté pour tous les id_source d'un couple objet-id_objet
619
-	return lien_where($primary, '*', $objet, $id_objet, $cond);
618
+    // par defaut c'est un rang compté pour tous les id_source d'un couple objet-id_objet
619
+    return lien_where($primary, '*', $objet, $id_objet, $cond);
620 620
 }
621 621
 
622 622
 /**
@@ -647,90 +647,90 @@  discard block
 block discarded – undo
647 647
  */
648 648
 function lien_delete($objet_source, $primary, $table_lien, $id, $objets, $cond = null) {
649 649
 
650
-	$retire = [];
651
-	$dels = 0;
652
-	$echec = false;
653
-	if (is_null($cond)) {
654
-		$cond = [];
655
-	}
656
-
657
-	foreach ($objets as $objet => $id_objets) {
658
-		$objet = ($objet == '*') ? $objet : objet_type($objet); # securite
659
-		if (!is_array($id_objets) || reset($id_objets) == 'NOT') {
660
-			$id_objets = [$id_objets];
661
-		}
662
-		foreach ($id_objets as $id_objet) {
663
-			[$cond, $colonne_role, $role] = roles_creer_condition_role($objet_source, $objet, $cond);
664
-			// id_objet peut valoir '*'
665
-			$where = lien_where($primary, $id, $objet, $id_objet, $cond);
666
-
667
-			// lire les liens existants pour propager la date de modif
668
-			$select = "$primary,id_objet,objet";
669
-			if ($colonne_role) {
670
-				$select .= ",$colonne_role";
671
-			}
672
-			$liens = sql_allfetsel($select, $table_lien, $where);
673
-
674
-			// iterer sur les liens pour permettre aux plugins de gerer
675
-			foreach ($liens as $l) {
676
-				$args = [
677
-					'table_lien' => $table_lien,
678
-					'objet_source' => $objet_source,
679
-					'id_objet_source' => $l[$primary],
680
-					'objet' => $l['objet'],
681
-					'id_objet' => $l['id_objet'],
682
-					'colonne_role' => $colonne_role,
683
-					'role' => ($colonne_role ? $l[$colonne_role] : ''),
684
-					'action' => 'delete',
685
-				];
686
-
687
-				// Envoyer aux plugins
688
-				$l = pipeline(
689
-					'pre_edition_lien',
690
-					[
691
-						'args' => $args,
692
-						'data' => $l
693
-					]
694
-				);
695
-				$args['id_objet'] = $id_o = $l['id_objet'];
696
-
697
-				if (($id_o = (int) $l['id_objet']) || in_array($l['objet'], ['site', 'rubrique'])) {
698
-					$where = lien_where($primary, $l[$primary], $l['objet'], $id_o, $cond);
699
-					$e = sql_delete($table_lien, $where);
700
-					if ($e !== false) {
701
-						$dels += $e;
702
-						lien_propage_date_modif($l['objet'], $id_o);
703
-						lien_propage_date_modif($objet_source, $l[$primary]);
704
-					} else {
705
-						$echec = true;
706
-					}
707
-					$retire[] = [
708
-						'source' => [$objet_source => $l[$primary]],
709
-						'lien' => [$l['objet'] => $id_o],
710
-						'type' => $l['objet'],
711
-						'role' => ($colonne_role ? $l[$colonne_role] : ''),
712
-						'id' => $id_o
713
-					];
714
-					// Envoyer aux plugins
715
-					pipeline(
716
-						'post_edition_lien',
717
-						[
718
-							'args' => $args,
719
-							'data' => $l
720
-						]
721
-					);
722
-				}
723
-			}
724
-		}
725
-	}
726
-	// si on a supprime des liens, on reordonne les liens concernes
727
-	if ($dels) {
728
-		lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
729
-	}
730
-
731
-	pipeline('trig_supprimer_objets_lies', $retire);
732
-
733
-	return ($echec ? false : $dels);
650
+    $retire = [];
651
+    $dels = 0;
652
+    $echec = false;
653
+    if (is_null($cond)) {
654
+        $cond = [];
655
+    }
656
+
657
+    foreach ($objets as $objet => $id_objets) {
658
+        $objet = ($objet == '*') ? $objet : objet_type($objet); # securite
659
+        if (!is_array($id_objets) || reset($id_objets) == 'NOT') {
660
+            $id_objets = [$id_objets];
661
+        }
662
+        foreach ($id_objets as $id_objet) {
663
+            [$cond, $colonne_role, $role] = roles_creer_condition_role($objet_source, $objet, $cond);
664
+            // id_objet peut valoir '*'
665
+            $where = lien_where($primary, $id, $objet, $id_objet, $cond);
666
+
667
+            // lire les liens existants pour propager la date de modif
668
+            $select = "$primary,id_objet,objet";
669
+            if ($colonne_role) {
670
+                $select .= ",$colonne_role";
671
+            }
672
+            $liens = sql_allfetsel($select, $table_lien, $where);
673
+
674
+            // iterer sur les liens pour permettre aux plugins de gerer
675
+            foreach ($liens as $l) {
676
+                $args = [
677
+                    'table_lien' => $table_lien,
678
+                    'objet_source' => $objet_source,
679
+                    'id_objet_source' => $l[$primary],
680
+                    'objet' => $l['objet'],
681
+                    'id_objet' => $l['id_objet'],
682
+                    'colonne_role' => $colonne_role,
683
+                    'role' => ($colonne_role ? $l[$colonne_role] : ''),
684
+                    'action' => 'delete',
685
+                ];
686
+
687
+                // Envoyer aux plugins
688
+                $l = pipeline(
689
+                    'pre_edition_lien',
690
+                    [
691
+                        'args' => $args,
692
+                        'data' => $l
693
+                    ]
694
+                );
695
+                $args['id_objet'] = $id_o = $l['id_objet'];
696
+
697
+                if (($id_o = (int) $l['id_objet']) || in_array($l['objet'], ['site', 'rubrique'])) {
698
+                    $where = lien_where($primary, $l[$primary], $l['objet'], $id_o, $cond);
699
+                    $e = sql_delete($table_lien, $where);
700
+                    if ($e !== false) {
701
+                        $dels += $e;
702
+                        lien_propage_date_modif($l['objet'], $id_o);
703
+                        lien_propage_date_modif($objet_source, $l[$primary]);
704
+                    } else {
705
+                        $echec = true;
706
+                    }
707
+                    $retire[] = [
708
+                        'source' => [$objet_source => $l[$primary]],
709
+                        'lien' => [$l['objet'] => $id_o],
710
+                        'type' => $l['objet'],
711
+                        'role' => ($colonne_role ? $l[$colonne_role] : ''),
712
+                        'id' => $id_o
713
+                    ];
714
+                    // Envoyer aux plugins
715
+                    pipeline(
716
+                        'post_edition_lien',
717
+                        [
718
+                            'args' => $args,
719
+                            'data' => $l
720
+                        ]
721
+                    );
722
+                }
723
+            }
724
+        }
725
+    }
726
+    // si on a supprime des liens, on reordonne les liens concernes
727
+    if ($dels) {
728
+        lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
729
+    }
730
+
731
+    pipeline('trig_supprimer_objets_lies', $retire);
732
+
733
+    return ($echec ? false : $dels);
734 734
 }
735 735
 
736 736
 
@@ -753,70 +753,70 @@  discard block
 block discarded – undo
753 753
  * @return bool|int
754 754
  */
755 755
 function lien_optimise($objet_source, $primary, $table_lien, $id, $objets) {
756
-	include_spip('genie/optimiser');
757
-	$echec = false;
758
-	$dels = 0;
759
-	foreach ($objets as $objet => $id_objets) {
760
-		$objet = ($objet == '*') ? $objet : objet_type($objet); # securite
761
-		if (!is_array($id_objets) || reset($id_objets) == 'NOT') {
762
-			$id_objets = [$id_objets];
763
-		}
764
-		foreach ($id_objets as $id_objet) {
765
-			$where = lien_where($primary, $id, $objet, $id_objet);
766
-			# les liens vers un objet inexistant
767
-			$r = sql_allfetsel('DISTINCT objet', $table_lien, $where);
768
-			$r = array_filter(array_column($r, 'objet'));
769
-			foreach ($r as $type) {
770
-				$spip_table_objet = table_objet_sql($type);
771
-				if (sql_table_exists($spip_table_objet)) {
772
-					$id_table_objet = id_table_objet($type);
773
-					$res = sql_select(
774
-						"L.$primary AS id,L.id_objet",
775
-						// la condition de jointure inclue L.objet='xxx' pour ne joindre que les bonnes lignes
776
-						// du coups toutes les lignes avec un autre objet ont un id_xxx=NULL puisque LEFT JOIN
777
-						// il faut les eliminier en repetant la condition dans le where L.objet='xxx'
778
-						"$table_lien AS L
756
+    include_spip('genie/optimiser');
757
+    $echec = false;
758
+    $dels = 0;
759
+    foreach ($objets as $objet => $id_objets) {
760
+        $objet = ($objet == '*') ? $objet : objet_type($objet); # securite
761
+        if (!is_array($id_objets) || reset($id_objets) == 'NOT') {
762
+            $id_objets = [$id_objets];
763
+        }
764
+        foreach ($id_objets as $id_objet) {
765
+            $where = lien_where($primary, $id, $objet, $id_objet);
766
+            # les liens vers un objet inexistant
767
+            $r = sql_allfetsel('DISTINCT objet', $table_lien, $where);
768
+            $r = array_filter(array_column($r, 'objet'));
769
+            foreach ($r as $type) {
770
+                $spip_table_objet = table_objet_sql($type);
771
+                if (sql_table_exists($spip_table_objet)) {
772
+                    $id_table_objet = id_table_objet($type);
773
+                    $res = sql_select(
774
+                        "L.$primary AS id,L.id_objet",
775
+                        // la condition de jointure inclue L.objet='xxx' pour ne joindre que les bonnes lignes
776
+                        // du coups toutes les lignes avec un autre objet ont un id_xxx=NULL puisque LEFT JOIN
777
+                        // il faut les eliminier en repetant la condition dans le where L.objet='xxx'
778
+                        "$table_lien AS L
779 779
 										LEFT JOIN $spip_table_objet AS O
780 780
 											ON (O.$id_table_objet=L.id_objet AND L.objet=" . sql_quote($type) . ')',
781
-						'L.objet=' . sql_quote($type) . " AND O.$id_table_objet IS NULL"
782
-					);
783
-					// sur une cle primaire composee, pas d'autres solutions que de virer un a un
784
-					while ($row = sql_fetch($res)) {
785
-						if ($primary === 'id_document' && in_array($type, ['site', 'rubrique']) && !(int) $row['id_objet']) {
786
-							continue; // gaffe, c'est le logo du site ou des rubriques!
787
-						}
788
-						$e = sql_delete(
789
-							$table_lien,
790
-							["$primary=" . $row['id'], 'id_objet=' . $row['id_objet'], 'objet=' . sql_quote($type)]
791
-						);
792
-						if ($e != false) {
793
-							$dels += $e;
794
-							spip_logger('genie')->notice(
795
-								'lien_optimise: Entree ' . $row['id'] . '/' . $row['id_objet'] . "/$type supprimee dans la table $table_lien"
796
-							);
797
-						}
798
-					}
799
-				}
800
-			}
801
-
802
-			# les liens depuis un objet inexistant
803
-			$table_source = table_objet_sql($objet_source);
804
-			if (sql_table_exists($table_source)) {
805
-				// filtrer selon $id, $objet, $id_objet eventuellement fournis
806
-				// (en general '*' pour chaque)
807
-				$where = lien_where("L.$primary", $id, $objet, $id_objet);
808
-				$where[] = "O.$primary IS NULL";
809
-				$res = sql_select(
810
-					"L.$primary AS id",
811
-					"$table_lien AS L LEFT JOIN $table_source AS O ON L.$primary=O.$primary",
812
-					$where
813
-				);
814
-				$dels += optimiser_sansref($table_lien, $primary, $res);
815
-			}
816
-		}
817
-	}
818
-
819
-	return ($echec ? false : $dels);
781
+                        'L.objet=' . sql_quote($type) . " AND O.$id_table_objet IS NULL"
782
+                    );
783
+                    // sur une cle primaire composee, pas d'autres solutions que de virer un a un
784
+                    while ($row = sql_fetch($res)) {
785
+                        if ($primary === 'id_document' && in_array($type, ['site', 'rubrique']) && !(int) $row['id_objet']) {
786
+                            continue; // gaffe, c'est le logo du site ou des rubriques!
787
+                        }
788
+                        $e = sql_delete(
789
+                            $table_lien,
790
+                            ["$primary=" . $row['id'], 'id_objet=' . $row['id_objet'], 'objet=' . sql_quote($type)]
791
+                        );
792
+                        if ($e != false) {
793
+                            $dels += $e;
794
+                            spip_logger('genie')->notice(
795
+                                'lien_optimise: Entree ' . $row['id'] . '/' . $row['id_objet'] . "/$type supprimee dans la table $table_lien"
796
+                            );
797
+                        }
798
+                    }
799
+                }
800
+            }
801
+
802
+            # les liens depuis un objet inexistant
803
+            $table_source = table_objet_sql($objet_source);
804
+            if (sql_table_exists($table_source)) {
805
+                // filtrer selon $id, $objet, $id_objet eventuellement fournis
806
+                // (en general '*' pour chaque)
807
+                $where = lien_where("L.$primary", $id, $objet, $id_objet);
808
+                $where[] = "O.$primary IS NULL";
809
+                $res = sql_select(
810
+                    "L.$primary AS id",
811
+                    "$table_lien AS L LEFT JOIN $table_source AS O ON L.$primary=O.$primary",
812
+                    $where
813
+                );
814
+                $dels += optimiser_sansref($table_lien, $primary, $res);
815
+            }
816
+        }
817
+    }
818
+
819
+    return ($echec ? false : $dels);
820 820
 }
821 821
 
822 822
 
@@ -848,92 +848,92 @@  discard block
 block discarded – undo
848 848
  *     Nombre de modifications faites, false si échec.
849 849
  */
850 850
 function lien_set($objet_source, $primary, $table_lien, $id, $objets, $qualif) {
851
-	$echec = null;
852
-	$ok = 0;
853
-	$reordonner = false;
854
-	if (!$qualif) {
855
-		return false;
856
-	}
857
-	// nettoyer qualif qui peut venir directement d'un objet_trouver_lien :
858
-	unset($qualif[$primary]);
859
-	unset($qualif[$objet_source]);
860
-	if (isset($qualif['objet'])) {
861
-		unset($qualif[$qualif['objet']]);
862
-	}
863
-	unset($qualif['objet']);
864
-	unset($qualif['id_objet']);
865
-	foreach ($objets as $objet => $id_objets) {
866
-		// role, colonne, where par défaut
867
-		[$role, $colonne_role, $cond] =
868
-			roles_trouver_dans_qualif($objet_source, $objet, $qualif);
869
-
870
-		$objet = ($objet == '*') ? $objet : objet_type($objet); # securite
871
-		if (!is_array($id_objets) || reset($id_objets) == 'NOT') {
872
-			$id_objets = [$id_objets];
873
-		}
874
-		foreach ($id_objets as $id_objet) {
875
-			$args = [
876
-				'table_lien' => $table_lien,
877
-				'objet_source' => $objet_source,
878
-				'id_objet_source' => $id,
879
-				'objet' => $objet,
880
-				'id_objet' => $id_objet,
881
-				'role' => $role,
882
-				'colonne_role' => $colonne_role,
883
-				'action' => 'modifier',
884
-			];
885
-
886
-			// Envoyer aux plugins
887
-			$qualif = pipeline(
888
-				'pre_edition_lien',
889
-				[
890
-					'args' => $args,
891
-					'data' => $qualif,
892
-				]
893
-			);
894
-			$args['id_objet'] = $id_objet;
895
-
896
-			if (lien_triables($table_lien) && isset($qualif['rang_lien'])) {
897
-				if ((int) $qualif['rang_lien']) {
898
-					// on decale les liens de rang_lien>=la valeur inseree pour faire la place
899
-					// sauf sur le meme lien avec un role eventuellement different
900
-					$where_meme_lien = lien_where($primary, $id, $objet, $id_objet);
901
-					$where_meme_lien = implode(' AND ', $where_meme_lien);
902
-					$w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>=' . (int) $qualif['rang_lien'], "NOT($where_meme_lien)"]);
903
-					sql_update($table_lien, ['rang_lien' => 'rang_lien+1'], $w);
904
-				}
905
-				// tous les liens de même rôle recoivent le rang indiqué aussi
906
-				if (roles_colonne($objet_source, $objet)) {
907
-					$w = lien_where($primary, $id, $objet, $id_objet);
908
-					sql_updateq($table_lien, ['rang_lien' => (int) $qualif['rang_lien']], $w);
909
-				}
910
-				$reordonner = true;
911
-			}
912
-
913
-			$where = lien_where($primary, $id, $objet, $id_objet, $cond);
914
-			$e = sql_updateq($table_lien, $qualif, $where);
915
-
916
-			if ($e === false) {
917
-				$echec = true;
918
-			} else {
919
-				// Envoyer aux plugins
920
-				pipeline(
921
-					'post_edition_lien',
922
-					[
923
-						'args' => $args,
924
-						'data' => $qualif
925
-					]
926
-				);
927
-				$ok++;
928
-			}
929
-		}
930
-	}
931
-	// si on a fait des modif de rang, on reordonne les liens concernes
932
-	if ($reordonner) {
933
-		lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
934
-	}
935
-
936
-	return ($echec ? false : $ok);
851
+    $echec = null;
852
+    $ok = 0;
853
+    $reordonner = false;
854
+    if (!$qualif) {
855
+        return false;
856
+    }
857
+    // nettoyer qualif qui peut venir directement d'un objet_trouver_lien :
858
+    unset($qualif[$primary]);
859
+    unset($qualif[$objet_source]);
860
+    if (isset($qualif['objet'])) {
861
+        unset($qualif[$qualif['objet']]);
862
+    }
863
+    unset($qualif['objet']);
864
+    unset($qualif['id_objet']);
865
+    foreach ($objets as $objet => $id_objets) {
866
+        // role, colonne, where par défaut
867
+        [$role, $colonne_role, $cond] =
868
+            roles_trouver_dans_qualif($objet_source, $objet, $qualif);
869
+
870
+        $objet = ($objet == '*') ? $objet : objet_type($objet); # securite
871
+        if (!is_array($id_objets) || reset($id_objets) == 'NOT') {
872
+            $id_objets = [$id_objets];
873
+        }
874
+        foreach ($id_objets as $id_objet) {
875
+            $args = [
876
+                'table_lien' => $table_lien,
877
+                'objet_source' => $objet_source,
878
+                'id_objet_source' => $id,
879
+                'objet' => $objet,
880
+                'id_objet' => $id_objet,
881
+                'role' => $role,
882
+                'colonne_role' => $colonne_role,
883
+                'action' => 'modifier',
884
+            ];
885
+
886
+            // Envoyer aux plugins
887
+            $qualif = pipeline(
888
+                'pre_edition_lien',
889
+                [
890
+                    'args' => $args,
891
+                    'data' => $qualif,
892
+                ]
893
+            );
894
+            $args['id_objet'] = $id_objet;
895
+
896
+            if (lien_triables($table_lien) && isset($qualif['rang_lien'])) {
897
+                if ((int) $qualif['rang_lien']) {
898
+                    // on decale les liens de rang_lien>=la valeur inseree pour faire la place
899
+                    // sauf sur le meme lien avec un role eventuellement different
900
+                    $where_meme_lien = lien_where($primary, $id, $objet, $id_objet);
901
+                    $where_meme_lien = implode(' AND ', $where_meme_lien);
902
+                    $w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>=' . (int) $qualif['rang_lien'], "NOT($where_meme_lien)"]);
903
+                    sql_update($table_lien, ['rang_lien' => 'rang_lien+1'], $w);
904
+                }
905
+                // tous les liens de même rôle recoivent le rang indiqué aussi
906
+                if (roles_colonne($objet_source, $objet)) {
907
+                    $w = lien_where($primary, $id, $objet, $id_objet);
908
+                    sql_updateq($table_lien, ['rang_lien' => (int) $qualif['rang_lien']], $w);
909
+                }
910
+                $reordonner = true;
911
+            }
912
+
913
+            $where = lien_where($primary, $id, $objet, $id_objet, $cond);
914
+            $e = sql_updateq($table_lien, $qualif, $where);
915
+
916
+            if ($e === false) {
917
+                $echec = true;
918
+            } else {
919
+                // Envoyer aux plugins
920
+                pipeline(
921
+                    'post_edition_lien',
922
+                    [
923
+                        'args' => $args,
924
+                        'data' => $qualif
925
+                    ]
926
+                );
927
+                $ok++;
928
+            }
929
+        }
930
+    }
931
+    // si on a fait des modif de rang, on reordonne les liens concernes
932
+    if ($reordonner) {
933
+        lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
934
+    }
935
+
936
+    return ($echec ? false : $ok);
937 937
 }
938 938
 
939 939
 /**
@@ -963,23 +963,23 @@  discard block
 block discarded – undo
963 963
  * @return array
964 964
  */
965 965
 function lien_find($objet_source, $primary, $table_lien, $id, $objets, $cond = null) {
966
-	$trouve = [];
967
-	foreach ($objets as $objet => $id_objets) {
968
-		$objet = ($objet == '*') ? $objet : objet_type($objet); # securite
969
-		// gerer les roles s'il y en a dans $cond
970
-		[$cond] = roles_creer_condition_role($objet_source, $objet, $cond, true);
971
-		// lien_where prend en charge les $id_objets sous forme int ou array
972
-		$where = lien_where($primary, $id, $objet, $id_objets, $cond);
973
-		$liens = sql_allfetsel('*', $table_lien, $where);
974
-		// ajouter les entrees objet_source et objet cible par convenance
975
-		foreach ($liens as $l) {
976
-			$l[$objet_source] = $l[$primary];
977
-			$l[$l['objet']] = $l['id_objet'];
978
-			$trouve[] = $l;
979
-		}
980
-	}
981
-
982
-	return $trouve;
966
+    $trouve = [];
967
+    foreach ($objets as $objet => $id_objets) {
968
+        $objet = ($objet == '*') ? $objet : objet_type($objet); # securite
969
+        // gerer les roles s'il y en a dans $cond
970
+        [$cond] = roles_creer_condition_role($objet_source, $objet, $cond, true);
971
+        // lien_where prend en charge les $id_objets sous forme int ou array
972
+        $where = lien_where($primary, $id, $objet, $id_objets, $cond);
973
+        $liens = sql_allfetsel('*', $table_lien, $where);
974
+        // ajouter les entrees objet_source et objet cible par convenance
975
+        foreach ($liens as $l) {
976
+            $l[$objet_source] = $l[$primary];
977
+            $l[$l['objet']] = $l['id_objet'];
978
+            $trouve[] = $l;
979
+        }
980
+    }
981
+
982
+    return $trouve;
983 983
 }
984 984
 
985 985
 /**
@@ -990,25 +990,25 @@  discard block
 block discarded – undo
990 990
  * @param array|int $ids
991 991
  */
992 992
 function lien_propage_date_modif($objet, $ids) {
993
-	static $done = [];
994
-	$hash = md5($objet . serialize($ids));
995
-
996
-	// sql_updateq, peut être un rien lent.
997
-	// On évite de l'appeler 2 fois sur les mêmes choses
998
-	if (isset($done[$hash])) {
999
-		return;
1000
-	}
1001
-
1002
-	$trouver_table = charger_fonction('trouver_table', 'base');
1003
-
1004
-	$table = table_objet_sql($objet);
1005
-	if (
1006
-		($desc = $trouver_table($table)) && isset($desc['field']['date_modif'])
1007
-	) {
1008
-		$primary = id_table_objet($objet);
1009
-		$where = (is_array($ids) ? sql_in($primary, array_map('intval', $ids)) : "$primary=" . (int) $ids);
1010
-		sql_updateq($table, ['date_modif' => date('Y-m-d H:i:s')], $where);
1011
-	}
1012
-
1013
-	$done[$hash] = true;
993
+    static $done = [];
994
+    $hash = md5($objet . serialize($ids));
995
+
996
+    // sql_updateq, peut être un rien lent.
997
+    // On évite de l'appeler 2 fois sur les mêmes choses
998
+    if (isset($done[$hash])) {
999
+        return;
1000
+    }
1001
+
1002
+    $trouver_table = charger_fonction('trouver_table', 'base');
1003
+
1004
+    $table = table_objet_sql($objet);
1005
+    if (
1006
+        ($desc = $trouver_table($table)) && isset($desc['field']['date_modif'])
1007
+    ) {
1008
+        $primary = id_table_objet($objet);
1009
+        $where = (is_array($ids) ? sql_in($primary, array_map('intval', $ids)) : "$primary=" . (int) $ids);
1010
+        sql_updateq($table, ['date_modif' => date('Y-m-d H:i:s')], $where);
1011
+    }
1012
+
1013
+    $done[$hash] = true;
1014 1014
 }
Please login to merge, or discard this patch.
Spacing   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -52,7 +52,7 @@  discard block
 block discarded – undo
52 52
 	$l = '';
53 53
 	if (
54 54
 		($primary = id_table_objet($objet))
55
-		&& $trouver_table($l = $table_sql . '_liens', '', true, ['log_missing' => false])
55
+		&& $trouver_table($l = $table_sql.'_liens', '', true, ['log_missing' => false])
56 56
 		&& !preg_match(',[^\w],', $primary)
57 57
 		&& !preg_match(',[^\w],', $l)
58 58
 	) {
@@ -211,7 +211,7 @@  discard block
 block discarded – undo
211 211
  * @return int
212 212
  */
213 213
 function objet_optimiser_liens($objets_source, $objets_lies) {
214
-	spip_logger('genie')->debug('objet_optimiser_liens : ' . json_encode($objets_source, JSON_THROW_ON_ERROR) . ', ' . json_encode($objets_lies, JSON_THROW_ON_ERROR));
214
+	spip_logger('genie')->debug('objet_optimiser_liens : '.json_encode($objets_source, JSON_THROW_ON_ERROR).', '.json_encode($objets_lies, JSON_THROW_ON_ERROR));
215 215
 	return objet_traiter_liaisons('lien_optimise', $objets_source, $objets_lies);
216 216
 }
217 217
 
@@ -437,7 +437,7 @@  discard block
 block discarded – undo
437 437
 					$where_meme_lien = implode(' AND ', $where_meme_lien);
438 438
 					// on decale les liens de rang_lien>=la valeur inseree pour faire la place
439 439
 					// sauf sur le meme lien avec un role eventuellement different
440
-					$w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>=' . (int) $insertions['rang_lien'], "NOT($where_meme_lien)"]);
440
+					$w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>='.(int) $insertions['rang_lien'], "NOT($where_meme_lien)"]);
441 441
 					sql_update($table_lien, ['rang_lien' => 'rang_lien+1'], $w);
442 442
 				}
443 443
 
@@ -502,7 +502,7 @@  discard block
 block discarded – undo
502 502
 					$rang = 1;
503 503
 					foreach ($liens as $lien) {
504 504
 						if (empty($deja_reordonne[$lien[$primary]][$lien['objet']][$lien['id_objet']])) {
505
-							$where = lien_where($primary, $lien[$primary], $lien['objet'], $lien['id_objet'], ['rang_lien!=' . (int) $rang]);
505
+							$where = lien_where($primary, $lien[$primary], $lien['objet'], $lien['id_objet'], ['rang_lien!='.(int) $rang]);
506 506
 							sql_updateq($table_lien, ['rang_lien' => $rang], $where);
507 507
 
508 508
 							if (empty($deja_reordonne[$lien[$primary]])) {
@@ -571,7 +571,7 @@  discard block
 block discarded – undo
571 571
 			addslashes($primary),
572 572
 			array_map('intval', $id_source),
573 573
 			$not
574
-		) : addslashes($primary) . ($not ? '<>' : '=') . (int) $id_source);
574
+		) : addslashes($primary).($not ? '<>' : '=').(int) $id_source);
575 575
 	} elseif ($not) {
576 576
 		$where[] = '0=1';
577 577
 	} // idiot mais quand meme
@@ -583,14 +583,14 @@  discard block
 block discarded – undo
583 583
 	}
584 584
 
585 585
 	if ($objet !== '*') {
586
-		$where[] = 'objet=' . sql_quote($objet);
586
+		$where[] = 'objet='.sql_quote($objet);
587 587
 	}
588 588
 	if ($id_objet !== '*') {
589 589
 		$where[] = (is_array($id_objet) ? sql_in(
590 590
 			'id_objet',
591 591
 			array_map('intval', $id_objet),
592 592
 			$not
593
-		) : 'id_objet' . ($not ? '<>' : '=') . (int) $id_objet);
593
+		) : 'id_objet'.($not ? '<>' : '=').(int) $id_objet);
594 594
 	} elseif ($not) {
595 595
 		$where[] = '0=1';
596 596
 	} // idiot mais quand meme
@@ -611,7 +611,7 @@  discard block
 block discarded – undo
611 611
 function lien_rang_where($table_lien, $primary, $id_source, $objet, $id_objet, $cond = []) {
612 612
 
613 613
 	// si on veut compter les rangs autrement que le core ne le fait par defaut, fournir le where adhoc
614
-	if (function_exists($f = 'lien_rang_where_' . $table_lien)) {
614
+	if (function_exists($f = 'lien_rang_where_'.$table_lien)) {
615 615
 		return $f($primary, $id_source, $objet, $id_objet, $cond);
616 616
 	}
617 617
 
@@ -777,8 +777,8 @@  discard block
 block discarded – undo
777 777
 						// il faut les eliminier en repetant la condition dans le where L.objet='xxx'
778 778
 						"$table_lien AS L
779 779
 										LEFT JOIN $spip_table_objet AS O
780
-											ON (O.$id_table_objet=L.id_objet AND L.objet=" . sql_quote($type) . ')',
781
-						'L.objet=' . sql_quote($type) . " AND O.$id_table_objet IS NULL"
780
+											ON (O.$id_table_objet=L.id_objet AND L.objet=".sql_quote($type).')',
781
+						'L.objet='.sql_quote($type)." AND O.$id_table_objet IS NULL"
782 782
 					);
783 783
 					// sur une cle primaire composee, pas d'autres solutions que de virer un a un
784 784
 					while ($row = sql_fetch($res)) {
@@ -787,12 +787,12 @@  discard block
 block discarded – undo
787 787
 						}
788 788
 						$e = sql_delete(
789 789
 							$table_lien,
790
-							["$primary=" . $row['id'], 'id_objet=' . $row['id_objet'], 'objet=' . sql_quote($type)]
790
+							["$primary=".$row['id'], 'id_objet='.$row['id_objet'], 'objet='.sql_quote($type)]
791 791
 						);
792 792
 						if ($e != false) {
793 793
 							$dels += $e;
794 794
 							spip_logger('genie')->notice(
795
-								'lien_optimise: Entree ' . $row['id'] . '/' . $row['id_objet'] . "/$type supprimee dans la table $table_lien"
795
+								'lien_optimise: Entree '.$row['id'].'/'.$row['id_objet']."/$type supprimee dans la table $table_lien"
796 796
 							);
797 797
 						}
798 798
 					}
@@ -899,7 +899,7 @@  discard block
 block discarded – undo
899 899
 					// sauf sur le meme lien avec un role eventuellement different
900 900
 					$where_meme_lien = lien_where($primary, $id, $objet, $id_objet);
901 901
 					$where_meme_lien = implode(' AND ', $where_meme_lien);
902
-					$w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>=' . (int) $qualif['rang_lien'], "NOT($where_meme_lien)"]);
902
+					$w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>='.(int) $qualif['rang_lien'], "NOT($where_meme_lien)"]);
903 903
 					sql_update($table_lien, ['rang_lien' => 'rang_lien+1'], $w);
904 904
 				}
905 905
 				// tous les liens de même rôle recoivent le rang indiqué aussi
@@ -991,7 +991,7 @@  discard block
 block discarded – undo
991 991
  */
992 992
 function lien_propage_date_modif($objet, $ids) {
993 993
 	static $done = [];
994
-	$hash = md5($objet . serialize($ids));
994
+	$hash = md5($objet.serialize($ids));
995 995
 
996 996
 	// sql_updateq, peut être un rien lent.
997 997
 	// On évite de l'appeler 2 fois sur les mêmes choses
@@ -1006,7 +1006,7 @@  discard block
 block discarded – undo
1006 1006
 		($desc = $trouver_table($table)) && isset($desc['field']['date_modif'])
1007 1007
 	) {
1008 1008
 		$primary = id_table_objet($objet);
1009
-		$where = (is_array($ids) ? sql_in($primary, array_map('intval', $ids)) : "$primary=" . (int) $ids);
1009
+		$where = (is_array($ids) ? sql_in($primary, array_map('intval', $ids)) : "$primary=".(int) $ids);
1010 1010
 		sql_updateq($table, ['date_modif' => date('Y-m-d H:i:s')], $where);
1011 1011
 	}
1012 1012
 
Please login to merge, or discard this patch.