Skip to content
Extraits de code Groupes Projets

Comparer les révisions

Les modifications sont affichées comme si la révision source était fusionnée avec la révision cible. En savoir plus sur la comparaison des révisions.

Source

Sélectionner le projet cible
No results found
Sélectionner une révision Git
  • 4.0
  • 4.2
  • 4.3
  • dev-sortable
  • dev/issue_4645_lien_fichier
  • dev/issue_4913_svg_agrandir
  • dev/issue_5000_coherence_logo_document
  • issue4887_recherche_id_document_master
  • issue_4480
  • issue_4935
  • issue_4978
  • issue_deprecated_http_post_files
  • issue_spip_5460
  • master
  • touti-patch-1
  • spip/3.0.0
  • spip/3.0.1
  • spip/3.0.10
  • spip/3.0.11
  • spip/3.0.12
  • spip/3.0.13
  • spip/3.0.14
  • spip/3.0.15
  • spip/3.0.16
  • spip/3.0.17
  • spip/3.0.18
  • spip/3.0.19
  • spip/3.0.2
  • spip/3.0.20
  • spip/3.0.21
  • spip/3.0.22
  • spip/3.0.23
  • spip/3.0.24
  • spip/3.0.25
  • spip/3.0.26
  • spip/3.0.27
  • spip/3.0.28
  • spip/3.0.3
  • spip/3.0.4
  • spip/3.0.5
  • spip/3.0.6
  • spip/3.0.7
  • spip/3.0.8
  • spip/3.0.9
  • spip/3.1.0
  • spip/3.1.1
  • spip/3.1.10
  • spip/3.1.11
  • spip/3.1.12
  • spip/3.1.13
  • spip/3.1.14
  • spip/3.1.15
  • spip/3.1.2
  • spip/3.1.3
  • spip/3.1.4
  • spip/3.1.5
  • spip/3.1.6
  • spip/3.1.7
  • spip/3.1.8
  • spip/3.1.9
  • spip/3.2.0
  • spip/3.2.1
  • spip/3.2.10
  • spip/3.2.11
  • spip/3.2.12
  • spip/3.2.2
  • spip/3.2.3
  • spip/3.2.4
  • spip/3.2.5
  • spip/3.2.6
  • spip/3.2.7
  • spip/3.2.8
  • spip/3.2.9
  • spip/4.0.0
  • spip/4.0.0-alpha
  • spip/4.0.0-beta
  • spip/4.0.1
  • spip/4.0.2
  • spip/4.0.3
  • v0.1.0
  • v1.1.1
  • v1.1.2
  • v1.6.0
  • v2.0.0
  • v2.0.1
  • v2.0.2
  • v2.0.3
  • v2.0.4
  • v2.0.5
  • v2.1.0
  • v2.10.0
  • v2.10.1
  • v2.10.10
  • v2.10.11
  • v2.10.12
  • v2.10.13
  • v2.10.14
  • v2.10.15
  • v2.10.16
  • v2.10.17
  • v2.10.18
  • v2.10.19
  • v2.10.2
  • v2.10.20
  • v2.10.21
  • v2.10.22
  • v2.10.23
  • v2.10.24
  • v2.10.25
  • v2.10.26
  • v2.10.27
  • v2.10.3
  • v2.10.4
  • v2.10.5
  • v2.10.6
115 résultats

Cible

Sélectionner le projet cible
No results found
Sélectionner une révision Git
  • 4.0
  • 4.2
  • 4.3
  • 4.4
  • Titre-complet-documents
  • dev-sortable
  • dev/issue_4645_lien_fichier
  • dev/issue_4913_svg_agrandir
  • issue4887_recherche_id_document_master
  • issue_4480
  • issue_4978
  • master
  • remove_joindre_document_galerie_valide
  • touti-patch-1
  • 4.3.5
  • 4.4.0
  • 4.4.1
  • 4.4.2
  • 4.4.3
  • 4.4.4
  • 4.4.5
  • 5.0.0
  • 5.0.1
  • spip/3.0.0
  • spip/3.0.1
  • spip/3.0.10
  • spip/3.0.11
  • spip/3.0.12
  • spip/3.0.13
  • spip/3.0.14
  • spip/3.0.15
  • spip/3.0.16
  • spip/3.0.17
  • spip/3.0.18
  • spip/3.0.19
  • spip/3.0.2
  • spip/3.0.20
  • spip/3.0.21
  • spip/3.0.22
  • spip/3.0.23
  • spip/3.0.24
  • spip/3.0.25
  • spip/3.0.26
  • spip/3.0.27
  • spip/3.0.28
  • spip/3.0.3
  • spip/3.0.4
  • spip/3.0.5
  • spip/3.0.6
  • spip/3.0.7
  • spip/3.0.8
  • spip/3.0.9
  • spip/3.1.0
  • spip/3.1.1
  • spip/3.1.10
  • spip/3.1.11
  • spip/3.1.12
  • spip/3.1.13
  • spip/3.1.14
  • spip/3.1.15
  • spip/3.1.2
  • spip/3.1.3
  • spip/3.1.4
  • spip/3.1.5
  • spip/3.1.6
  • spip/3.1.7
  • spip/3.1.8
  • spip/3.1.9
  • spip/3.2.0
  • spip/3.2.1
  • spip/3.2.10
  • spip/3.2.11
  • spip/3.2.12
  • spip/3.2.2
  • spip/3.2.3
  • spip/3.2.4
  • spip/3.2.5
  • spip/3.2.6
  • spip/3.2.7
  • spip/3.2.8
  • spip/3.2.9
  • spip/4.0.0
  • spip/4.0.0-alpha
  • spip/4.0.0-beta
  • spip/4.0.1
  • spip/4.0.2
  • spip/4.0.3
  • v0.1.0
  • v1.1.1
  • v1.1.2
  • v1.6.0
  • v2.0.0
  • v2.0.1
  • v2.0.2
  • v2.0.3
  • v2.0.4
  • v2.0.5
  • v2.1.0
  • v2.10.0
  • v2.10.1
  • v2.10.10
  • v2.10.11
  • v2.10.12
  • v2.10.13
  • v2.10.14
  • v2.10.15
  • v2.10.16
  • v2.10.17
  • v2.10.18
  • v2.10.19
  • v2.10.2
  • v2.10.20
  • v2.10.21
  • v2.10.22
114 résultats
Afficher les modifications

Validations dans la source 12

64 files
+ 2952
685
Comparer les modifications
  • Côte à côte
  • En ligne

Fichiers

.gitignore

0 → 100644
+7 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
/vendor/
/composer.phar
/composer.lock
/phpcs.xml
/phpstan.neon
/.php_cs.cache
/.php_cs.txt
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -31,7 +31,8 @@ function action_acceder_document_dist() {
	$arg = rawurldecode(_request('arg'));

	$status = false;
	if (strpos($f, '../') !== false
	if (
		strpos($f, '../') !== false
		or preg_match(',^\w+://,', $f)
	) {
		$status = 403;
@@ -52,7 +53,8 @@ function action_acceder_document_dist() {
			} else {
				// ETag pour gerer le status 304
				$ETag = md5($file . ': ' . filemtime($file));
				if (isset($_SERVER['HTTP_IF_NONE_MATCH'])
				if (
					isset($_SERVER['HTTP_IF_NONE_MATCH'])
					and $_SERVER['HTTP_IF_NONE_MATCH'] == $ETag
				) {
					http_status(304); // Not modified
@@ -100,7 +102,8 @@ function action_acceder_document_dist() {
				// sinon l'ignorer car certains navigateurs pataugent

				$f = basename($file);
				if (isset($doc['titre'])
				if (
					isset($doc['titre'])
					and (preg_match('/^\w+[.]\w+$/', $doc['titre']) or $doc['titre'] == 'Makefile')
				) {
					$f = $doc['titre'];
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -44,7 +44,7 @@ include_spip('inc/renseigner_document');
 */
function action_ajouter_documents_dist($id_document, $files, $objet, $id_objet, $mode) {
	$ajouter_un_document = charger_fonction('ajouter_un_document', 'action');
	$ajoutes = array();
	$ajoutes = [];

	// on ne peut mettre qu'un seul document a la place d'un autre ou en vignette d'un autre
	if (intval($id_document)) {
@@ -104,8 +104,10 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
	$mode = ((isset($file['mode']) and $file['mode']) ? $file['mode'] : $mode);

	include_spip('inc/modifier');
	if (isset($file['distant']) and $file['distant']
		and !in_array($mode, array('choix', 'auto', 'image', 'document'))) {
	if (
		isset($file['distant']) and $file['distant']
		and !in_array($mode, ['choix', 'auto', 'image', 'document'])
	) {
		spip_log("document distant $source accepte sans verification, mode=$mode", 'medias' . _LOG_INFO_IMPORTANTE);
		include_spip('inc/distant');
		$file['tmp_name'] = _DIR_RACINE . copie_locale($source);
@@ -118,16 +120,24 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
	// content-type est connu, et si possible recuperer la taille, voire plus.
	if (isset($file['distant']) and $file['distant']) {
		if (!tester_url_absolue($source)) {
			return _T('medias:erreur_chemin_distant', array('nom' => $source));
			return _T('medias:erreur_chemin_distant', ['nom' => $source]);
		}
		include_spip('inc/distant');
		$source = str_replace(array("'",'"','<'),array("%27",'%22','%3C'), $source);
		$source = str_replace(["'",'"','<'], ['%27','%22','%3C'], $source);
		if (is_array($a = renseigner_source_distante($source))) {
			$champs = $a;
			# NB: dans les bonnes conditions (fichier autorise et pas trop gros)
			# $a['fichier'] est une copie locale du fichier
			# $a['copie_locale'] est une copie locale du fichier

			// voir si le document a besoin d'un nettoyage et le cas echeant relire ses infos apres
			if (!empty($champs['copie_locale']) and file_exists($champs['copie_locale'])) {
				$res_sanitize = sanitizer_document($champs['copie_locale'], $champs['extension']);
				$infos = renseigner_taille_dimension_image($champs['copie_locale'], $champs['extension']);
			}
			else {
				$infos = renseigner_taille_dimension_image($champs['fichier'], $champs['extension'], true);
			}

			// on ignore erreur eventuelle sur $infos car on est distant, ca ne marche pas forcement
			if (is_array($infos)) {
				foreach ($infos as $k => $v) {
@@ -145,10 +155,9 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
			return $a; // message d'erreur
		}
	} else { // pas distant

		$champs = array(
		$champs = [
			'distant' => 'non'
		);
		];

		$champs['titre'] = '';
		if ($titrer) {
@@ -164,7 +173,7 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,

		if (!is_array($fichier = fixer_fichier_upload($file, $mode))) {
			return is_string($fichier) ?
				$fichier : _T('medias:erreur_upload_type_interdit', array('nom' => $file['name']));
				$fichier : _T('medias:erreur_upload_type_interdit', ['nom' => $file['name']]);
		}

		$champs['inclus'] = $fichier['inclus'];
@@ -214,7 +223,7 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
		$champs = array_merge($champs, $infos);

		// Si mode == 'choix', fixer le mode image/document
		if (in_array($mode, array('choix', 'auto'))) {
		if (in_array($mode, ['choix', 'auto'])) {
			$choisir_mode_document = charger_fonction('choisir_mode_document', 'inc');
			$mode = $choisir_mode_document($champs, $champs['inclus'] == 'image', $objet);
		}
@@ -276,7 +285,7 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
		}
	}
	if (!$id_document) {
		return _T('medias:erreur_insertion_document_base', array('fichier' => '<em>' . $file['name'] . '</em>'));
		return _T('medias:erreur_insertion_document_base', ['fichier' => '<em>' . $file['name'] . '</em>']);
	}

	document_modifier($id_document, $champs);
@@ -286,8 +295,8 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
	// Ce plugin ferait quand même mieux de se placer dans metadata/jpg.php
	pipeline(
		'post_edition',
		array(
			'args' => array(
		[
			'args' => [
				'table' => 'spip_documents', // compatibilite
				'table_objet' => 'documents',
				'spip_table_objet' => 'spip_documents',
@@ -297,9 +306,9 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
				'serveur' => '', // serveur par defaut, on ne sait pas faire mieux pour le moment
				'action' => 'ajouter_document',
				'operation' => 'ajouter_document', // compat <= v2.0
			),
			],
			'data' => $champs
		)
		]
	);

	return $id_document;
@@ -317,7 +326,7 @@ function determiner_sous_dossier_document($ext, $fichier, $mode) {

	// si mode un logoxx on met dans logo/
	if (strncmp($mode, 'logo', 4) === 0) {
		return "logo";
		return 'logo';
	}

	return $ext;
@@ -376,26 +385,31 @@ function corriger_extension($ext) {
 *     - false ou message d'erreur si l'extension est refusée
 */
function verifier_upload_autorise($source, $mode = '') {
	$infos = array('fichier' => $source);
	$infos = ['fichier' => $source];
	$res = false;
	if (preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $source, $match)
	if (
		preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $source, $match)
		and $ext = $match[1]
	) {
		$ext = corriger_extension(strtolower($ext));
		if ($res = sql_fetsel(
		if (
			$res = sql_fetsel(
				'extension,inclus,media_defaut as media',
				'spip_types_documents',
				'extension=' . sql_quote($ext) . " AND upload='oui'"
		)) {
			)
		) {
			$infos = array_merge($infos, $res);
		}
	}
	if (!$res) {
		if ($res = sql_fetsel(
		if (
			$res = sql_fetsel(
				'extension,inclus,media_defaut as media',
				'spip_types_documents',
				"extension='zip' AND upload='oui'"
		)) {
			)
		) {
			$infos = array_merge($infos, $res);
			$res['autozip'] = true;
		}
@@ -449,7 +463,7 @@ function fixer_fichier_upload($file, $mode = '') {
			if ($row['fichier'] && (!$taille = @intval(filesize(get_spip_doc($row['fichier']))))) {
				spip_log('Echec copie du fichier ' . $file['tmp_name'] . ' (taille de fichier indéfinie)');
				spip_unlink(get_spip_doc($row['fichier']));
				return _T('medias:erreur_copie_fichier', array('nom' => $file['tmp_name']));
				return _T('medias:erreur_copie_fichier', ['nom' => $file['tmp_name']]);
			} else {
				return $row;
			}
@@ -497,7 +511,7 @@ function fixer_fichier_upload($file, $mode = '') {
				spip_log('Echec copie du fichier ' . $file['tmp_name'] . ' (taille de fichier indéfinie)');
				spip_unlink(get_spip_doc($row['fichier']));

				return _T('medias:erreur_copie_fichier', array('nom' => $file['tmp_name']));
				return _T('medias:erreur_copie_fichier', ['nom' => $file['tmp_name']]);
			} else {
				return $row;
			}
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -37,7 +37,8 @@ function action_changer_mode_document_dist($id_document = null, $mode = null) {
		}
	}

	if ($id_document
	if (
		$id_document
		and include_spip('inc/autoriser')
		and autoriser('modifier', 'document', $id_document)
	) {
@@ -49,10 +50,11 @@ function action_changer_mode_document_dist($id_document = null, $mode = null) {
function action_changer_mode_document_post($id_document, $mode) {
	// - id_document le doc a modifier
	// - mode le mode a lui donner
	if ($id_document = intval($id_document)
		and in_array($mode, array('vignette', 'image', 'document'))
	if (
		$id_document = intval($id_document)
		and in_array($mode, ['vignette', 'image', 'document'])
	) {
		include_spip('action/editer_document');
		document_modifier($id_document, array('mode' => $mode));
		document_modifier($id_document, ['mode' => $mode]);
	}
}
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -59,17 +59,20 @@ function action_copier_local_post($id_document) {

	// si la source est bien un fichier distant
	// sinon c'est une donnee moisie, on ne fait rien
	if (tester_url_absolue($source)) {
		include_spip('inc/distant'); // pour 'copie_locale'
	include_spip('inc/distant');
	if (tester_url_absolue($source)
		and valider_url_distante($source)) {
		$fichier = copie_locale($source);
		if ($fichier
			and tester_url_absolue($source)) {
		if (
			$fichier
			and valider_url_distante($source)
		) {
			$fichier = _DIR_RACINE . $fichier;
			$files = array();
			$files[] = array('tmp_name' => $fichier, 'name' => basename($fichier));
			$files = [];
			$files[] = ['tmp_name' => $fichier, 'name' => basename($fichier)];
			$ajouter_documents = charger_fonction('ajouter_documents', 'action');
			spip_log("convertit doc $id_document en local: $source => $fichier", 'medias');
			$liste = array();
			$liste = [];
			$ajouter_documents($id_document, $files, '', 0, $row['mode'], $liste);

			spip_unlink($fichier);
@@ -78,16 +81,19 @@ function action_copier_local_post($id_document) {
			include_spip('action/editer_document');
			document_modifier(
				$id_document,
				array('credits' => ($row['credits'] ? $row['credits'] . ', ' : '') . $source)
				['credits' => ($row['credits'] ? $row['credits'] . ', ' : '') . $source]
			);

			return true;
		} else {
			spip_log("echec copie locale $source", 'medias' . _LOG_ERREUR);
			if ($fichier) {
				@unlink(_DIR_RACINE . $fichier);
			}
		}
	} else {
		spip_log("echec copie locale $source n'est pas une URL distante", 'medias' . _LOG_ERREUR);
	}

	return _T('medias:erreur_copie_fichier', array('nom' => $source));
	return _T('medias:erreur_copie_fichier', ['nom' => $source]);
}
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -73,7 +73,7 @@ function desordonner_liens_documents($document, $objet, $id_objet) {
	} else {
		list($image, $mode) = explode('/', $document);
		$image = ($image == 'I');
		$typdoc = sql_in('docs.extension', array('gif', 'jpg', 'png'), $image ? '' : 'NOT');
		$typdoc = sql_in('docs.extension', ['gif', 'jpg', 'png'], $image ? '' : 'NOT');

		$obj = 'id_objet=' . intval($id_objet) . ' AND objet=' . sql_quote($objet);

@@ -101,8 +101,8 @@ function desordonner_liens_documents($document, $objet, $id_objet) {
 */
function desordonner_liens_document($id_document, $objet, $id_objet) {
	objet_qualifier_liens(
		array('document' => $id_document),
		array($objet => $id_objet),
		array('rang_lien' => 0)
		['document' => $id_document],
		[$objet => $id_objet],
		['rang_lien' => 0]
	);
}
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -56,7 +56,8 @@ function action_dissocier_document_dist($arg = null) {
	if (count($arg) > 4 and $arg[4] == 'safe') {
		$check = true;
	}
	if ($id_objet = intval($id_objet)
	if (
		$id_objet = intval($id_objet)
		and (
			($id_objet < 0 and $id_objet == -$GLOBALS['visiteur_session']['id_auteur'])
			or autoriser('dissocierdocuments', $objet, $id_objet)
@@ -91,11 +92,11 @@ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = fa

	// D'abord on ne supprime pas, on dissocie
	include_spip('action/editer_liens');
	objet_dissocier(array('document' => $id_document), array($objet => $id_objet), array('role' => '*'));
	objet_dissocier(['document' => $id_document], [$objet => $id_objet], ['role' => '*']);

	// Si c'est une vignette, l'eliminer du document auquel elle appartient
	// cas tordu peu probable
	sql_updateq('spip_documents', array('id_vignette' => 0), 'id_vignette=' . $id_document);
	sql_updateq('spip_documents', ['id_vignette' => 0], 'id_vignette=' . $id_document);

	// verifier son statut apres une suppression de lien
	include_spip('action/editer_document');
@@ -107,17 +108,17 @@ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = fa

	pipeline(
		'post_edition',
		array(
			'args' => array(
		[
			'args' => [
				'operation' => 'delier_document', // compat v<=2
				'action' => 'delier_document',
				'table' => 'spip_documents',
				'id_objet' => $id_document,
				'objet' => $objet,
				'id' => $id_objet
			),
			],
			'data' => null
		)
		]
	);

	if ($check) {
@@ -165,7 +166,7 @@ function dissocier_document($document, $objet, $id_objet, $supprime = false, $ch
	} else {
		list($image, $mode) = explode('/', $document);
		$image = ($image == 'I');
		$typdoc = sql_in('docs.extension', array('gif', 'jpg', 'png'), $image ? '' : 'NOT');
		$typdoc = sql_in('docs.extension', ['gif', 'jpg', 'png'], $image ? '' : 'NOT');

		$obj = 'id_objet=' . intval($id_objet) . ' AND objet=' . sql_quote($objet);

Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -34,12 +34,12 @@ function action_editer_document_dist($arg = null) {
	}

	if (!$id_document) {
		return array(0, '');
		return [0, ''];
	} // erreur

	$err = document_modifier($id_document);

	return array($id_document, $err);
	return [$id_document, $err];
}

/**
@@ -52,10 +52,10 @@ function action_editer_document_dist($arg = null) {
 */
function document_inserer($id_parent = null, $set = null) {

	$champs = array(
	$champs = [
		'statut' => 'prop',
		'date' => 'NOW()',
	);
	];

	if ($set) {
		$champs = array_merge($champs, $set);
@@ -64,23 +64,23 @@ function document_inserer($id_parent = null, $set = null) {
	// Envoyer aux plugins
	$champs = pipeline(
		'pre_insertion',
		array(
			'args' => array(
		[
			'args' => [
				'table' => 'spip_documents',
			),
			],
			'data' => $champs
		)
		]
	);
	$id_document = sql_insertq('spip_documents', $champs);
	pipeline(
		'post_insertion',
		array(
			'args' => array(
		[
			'args' => [
				'table' => 'spip_documents',
				'id_objet' => $id_document
			),
			],
			'data' => $champs
		)
		]
	);

	return $id_document;
@@ -105,7 +105,7 @@ function document_modifier($id_document, $set = null) {
		// white list
		objet_info('document', 'champs_editables'),
		// black list
		array('parents', 'ajout_parents'),
		['parents', 'ajout_parents'],
		// donnees eventuellement fournies
		$set
	);
@@ -127,21 +127,24 @@ function document_modifier($id_document, $set = null) {
		$ancien_fichier = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($id_document));
	}

	if ($err = objet_modifier_champs(
	if (
		$err = objet_modifier_champs(
			'document',
			$id_document,
		array(
			[
			'data' => $set,
			'invalideur' => $invalideur,
			'indexation' => $indexation
		),
			],
			$champs
	)) {
		)
	) {
		return $err;
	}

	// nettoyer l'ancien fichier si necessaire
	if (isset($champs['fichier']) // un plugin a pu interdire la modif du fichier en virant le champ
	if (
		isset($champs['fichier']) // un plugin a pu interdire la modif du fichier en virant le champ
		and $champs['fichier']
		and $ancien_fichier // on avait bien note le nom du fichier avant la modif
		and $ancien_fichier !== $champs['fichier'] // et il a ete modifie
@@ -153,7 +156,7 @@ function document_modifier($id_document, $set = null) {

	// Changer le statut du document ?
	// le statut n'est jamais fixe manuellement mais decoule de celui des objets lies
	$champs = collecter_requests(array('parents', 'ajouts_parents'), array(), $set);
	$champs = collecter_requests(['parents', 'ajouts_parents'], [], $set);
	if (document_instituer($id_document, $champs)) {
		//
		// Post-modifications
@@ -174,7 +177,7 @@ function document_modifier($id_document, $set = null) {
 * @param array $champs
 * @return bool
 */
function document_instituer($id_document, $champs = array()) {
function document_instituer($id_document, $champs = []) {

	$statut = isset($champs['statut']) ? $champs['statut'] : null;
	$date_publication = isset($champs['date_publication']) ? $champs['date_publication'] : null;
@@ -189,7 +192,7 @@ function document_instituer($id_document, $champs = array()) {
	$statut_ancien = $row['statut'];
	$date_publication_ancienne = $row['date_publication'];

	$champs = array();
	$champs = [];

	/* Autodetermination du statut si non fourni */
	if (is_null($statut)) {
@@ -200,7 +203,6 @@ function document_instituer($id_document, $champs = array()) {
		if ($champs === false) {
			return false;
		}

	}
	else {
		if ($statut !== $statut_ancien) {
@@ -208,24 +210,27 @@ function document_instituer($id_document, $champs = array()) {
		}
	}

	if (!is_null($date_publication)
	if (
		!is_null($date_publication)
		and empty($champs['date_publication'])
		and $date_publication != $date_publication_ancienne) {
		and $date_publication != $date_publication_ancienne
	) {
		$champs['date_publication'] = $date_publication;
	}

	// Envoyer aux plugins
	$champs = pipeline('pre_edition',
		array(
			'args' => array(
	$champs = pipeline(
		'pre_edition',
		[
			'args' => [
				'table' => 'spip_documents',
				'id_objet' => $id_document,
				'action' => 'instituer',
				'statut_ancien' => $statut_ancien,
				'date_ancienne' => $date_publication_ancienne,
			),
			],
			'data' => $champs
		)
		]
	);

	if (!count($champs)) {
@@ -242,7 +247,7 @@ function document_instituer($id_document, $champs = array()) {
		if (count($publier_rubriques)) {
			include_spip('inc/rubriques');
			foreach ($publier_rubriques as $r) {
				calculer_rubriques_if($r['id_objet'], array('statut' => $champs['statut']), $statut_ancien, false);
				calculer_rubriques_if($r['id_objet'], ['statut' => $champs['statut']], $statut_ancien, false);
			}
		}
	}
@@ -251,17 +256,18 @@ function document_instituer($id_document, $champs = array()) {
	include_spip('inc/invalideur');
	suivre_invalideur("id='document/$id_document'");

	pipeline('post_edition',
		array(
			'args' => array(
	pipeline(
		'post_edition',
		[
			'args' => [
				'table' => 'spip_documents',
				'id_objet' => $id_document,
				'action' => 'instituer',
				'statut_ancien' => $statut_ancien,
				'date_ancienne' => $date_publication_ancienne,
			),
			],
			'data' => $champs
		)
		]
	);

	return true;
@@ -283,13 +289,14 @@ function medias_revision_document_parents($id_document, $parents = null, $ajout
		return;
	}

	$insertions = array();
	$objets_parents = array(); // array('article'=>array(12,23))
	$insertions = [];
	$objets_parents = []; // array('article'=>array(12,23))

	// au format objet|id_objet
	foreach ($parents as $p) {
		$p = explode('|', $p);
		if (preg_match('/^[a-z0-9_]+$/i', $objet = $p[0])
		if (
			preg_match('/^[a-z0-9_]+$/i', $objet = $p[0])
			and (($p[1] = intval($p[1])) or in_array($objet, ['site', 'rubrique']))
		) { // securite
			$objets_parents[$p[0]][] = $p[1];
@@ -298,14 +305,14 @@ function medias_revision_document_parents($id_document, $parents = null, $ajout

	include_spip('action/editer_liens');
	// les liens actuels
	$liens = objet_trouver_liens(array('document' => $id_document), '*');
	$deja_parents = array();
	$liens = objet_trouver_liens(['document' => $id_document], '*');
	$deja_parents = [];
	// si ce n'est pas un ajout, il faut supprimer les liens actuels qui ne sont pas dans $objets_parents
	if (!$ajout) {
		foreach ($liens as $k => $lien) {
			if (!isset($objets_parents[$lien['objet']]) or !in_array($lien['id_objet'], $objets_parents[$lien['objet']])) {
				if (autoriser('dissocierdocuments', $lien['objet'], $lien['id_objet'])) {
					objet_dissocier(array('document' => $id_document), array($lien['objet'] => $lien['id_objet']));
					objet_dissocier(['document' => $id_document], [$lien['objet'] => $lien['id_objet']]);
				}
				unset($liens[$k]);
			} else {
@@ -317,7 +324,8 @@ function medias_revision_document_parents($id_document, $parents = null, $ajout
	// trier les objets à traiter : ne pas prendre en compte ceux qui sont déjà associés ou qu'on n'a pas le droit d'associer
	foreach ($objets_parents as $objet => $ids) {
		foreach ($ids as $k => $id) {
			if ((
			if (
				(
					isset($deja_parents[$objet])
					and in_array($id, $deja_parents[$objet])
				)
@@ -327,5 +335,5 @@ function medias_revision_document_parents($id_document, $parents = null, $ajout
			}
		}
	}
	objet_associer(array('document' => $id_document), $objets_parents);
	objet_associer(['document' => $id_document], $objets_parents);
}
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -44,23 +44,25 @@ function action_ordonner_liens_dist() {

	list($_id_objet, $table_liens) = objet_associable($objet);

	$success = $errors = array();
	$success = $errors = [];

	$actuels = sql_allfetsel(
		array($_id_objet . ' AS id', 'rang_lien'),
		[$_id_objet . ' AS id', 'rang_lien'],
		$table_liens,
		array(
		[
			sql_in($_id_objet, $ordre),
			'objet = ' . sql_quote($objet_lie),
			'id_objet = ' . sql_quote($id_objet_lie)
		)
		]
	);

	$futurs = array_flip($ordre);
	// ordre de 1 à n (pas de 0 à n).
	array_walk($futurs, function(&$v) { $v++; });
	array_walk($futurs, function (&$v) {
 $v++;
	});

	$updates = array();
	$updates = [];

	foreach ($actuels as $l) {
		if ($futurs[$l['id']] !== $l['rang_lien']) {
@@ -72,21 +74,21 @@ function action_ordonner_liens_dist() {
		foreach ($updates as $id => $ordre) {
			sql_updateq(
				$table_liens,
				array('rang_lien' => $ordre),
				array(
				['rang_lien' => $ordre],
				[
					$_id_objet . ' = ' . $id,
					'objet = ' . sql_quote($objet_lie),
					'id_objet = ' . sql_quote($id_objet_lie)
				)
				]
			);
		}
	}

	return envoyer_json_envoi(array(
	return envoyer_json_envoi([
		'done' => true,
		'success' => $success,
		'errors' => $errors,
	));
	]);
}

function envoyer_json_envoi($data) {
@@ -95,9 +97,9 @@ function envoyer_json_envoi($data) {
}

function envoyer_json_erreur($msg) {
	return envoyer_json_envoi(array(
	return envoyer_json_envoi([
		'done' => false,
		'success' => array(),
		'errors' => array($msg)
	));
		'success' => [],
		'errors' => [$msg]
	]);
}
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -30,7 +30,7 @@ function action_supprimer_document_dist($id_document = 0) {
	// si c'etait une vignette, modifier le document source !
	if ($source = sql_getfetsel('id_document', 'spip_documents', 'id_vignette=' . intval($id_document))) {
		include_spip('action/editer_document');
		document_modifier($source, array('id_vignette' => 0));
		document_modifier($source, ['id_vignette' => 0]);
	}

	include_spip('inc/documents');
@@ -46,7 +46,7 @@ function action_supprimer_document_dist($id_document = 0) {
	// Si c'est un document ayant une vignette, supprimer aussi la vignette
	if ($doc['id_vignette']) {
		action_supprimer_document_dist($doc['id_vignette']);
		objet_dissocier(array('document' => $doc['id_vignette']), '*');
		objet_dissocier(['document' => $doc['id_vignette']], '*');
	}
	// Si c'est un document ayant des documents annexes (sous-titre, ...)
	// les supprimer aussi
@@ -59,7 +59,7 @@ function action_supprimer_document_dist($id_document = 0) {
	}

	// dereferencer dans la base
	objet_dissocier(array('document' => $id_document), '*', array('role' => '*'));
	objet_dissocier(['document' => $id_document], '*', ['role' => '*']);
	sql_delete('spip_documents', 'id_document=' . intval($id_document));


@@ -76,16 +76,16 @@ function action_supprimer_document_dist($id_document = 0) {

	pipeline(
		'post_edition',
		array(
			'args' => array(
		[
			'args' => [
				'operation' => 'supprimer_document', // compat v<=2
				'action' => 'supprimer_document',
				'table' => 'spip_documents',
				'id_objet' => $id_document,
				'document' => $doc,
			),
			],
			'data' => null
		)
		]
	);

	return true;
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -24,7 +24,7 @@ function action_supprimer_tous_orphelins() {
	//on recupere le contexte pour ne supprimer les orphelins que de ce dernier
	list($media, $distant, $statut, $sanstitre) = explode('/', $arg);

	$where = array();
	$where = [];
	//critere sur le media
	if ($media) {
		$select = 'media=' . sql_quote($media);
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -104,12 +104,12 @@ function action_tourner_post($id_document, $angle) {

	// succes !
	if ($largeur > 0 and $hauteur > 0) {
		$set = array(
		$set = [
			'fichier' => set_spip_doc($dest),
			'largeur' => $largeur,
			'hauteur' => $hauteur,
			'distant' => 'non' // le document n'est plus distant apres une transformation
		);
		];
		if ($taille = @filesize($dest)) {
			$set['taille'] = $taille;
		}
@@ -121,18 +121,18 @@ function action_tourner_post($id_document, $angle) {
		// pipeline pour les plugins
		pipeline(
			'post_edition',
			array(
				'args' => array(
			[
				'args' => [
					'table' => 'spip_documents',
					'table_objet' => 'documents',
					'spip_table_objet' => 'spip_documents',
					'type' => 'document',
					'id_objet' => $id_document,
					'champs' => array('rotation' => $angle, 'orientation' => $var_rot, 'fichier' => $row['fichier']),
					'champs' => ['rotation' => $angle, 'orientation' => $var_rot, 'fichier' => $row['fichier']],
					'action' => 'tourner',
				),
				],
				'data' => $set
			)
			]
		);
	}
}
@@ -142,7 +142,8 @@ function action_tourner_post($id_document, $angle) {
// https://code.spip.net/@tourner_selon_exif_orientation
function tourner_selon_exif_orientation($id_document, $fichier) {

	if (function_exists('exif_read_data')
	if (
		function_exists('exif_read_data')
		and $exif = exif_read_data($fichier)
		and (
			$ort = $exif['IFD0']['Orientation']
@@ -161,7 +162,7 @@ function tourner_selon_exif_orientation($id_document, $fichier) {
				$rot = -90;
		}
		if ($rot) {
			action_tourner_post(array(null, $id_document, $rot));
			action_tourner_post([null, $id_document, $rot]);
		}
	}
}
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -29,7 +29,7 @@ function action_verifier_documents_brises_dist() {
		$res = sql_select('fichier,brise,id_document', 'spip_documents', "distant='non'");
		while ($row = sql_fetch($res)) {
			if (($brise = !@file_exists(get_spip_doc($row['fichier']))) != $row['brise']) {
				sql_updateq('spip_documents', array('brise' => $brise), 'id_document=' . intval($row['id_document']));
				sql_updateq('spip_documents', ['brise' => $brise], 'id_document=' . intval($row['id_document']));
			}
		}
	}
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -36,5 +36,5 @@ function action_verifier_documents_liens_dist($id_document = null) {

	$id_document = ($id_document == '*') ? '*' : intval($id_document);
	include_spip('action/editer_liens');
	objet_optimiser_liens(array('document' => $id_document), '*');
	objet_optimiser_liens(['document' => $id_document], '*');
}
+61 −57
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -30,13 +30,13 @@ function medias_declarer_tables_interfaces($interfaces) {
	$interfaces['table_des_tables']['documents'] = 'documents';
	$interfaces['table_des_tables']['types_documents'] = 'types_documents';

	$interfaces['exceptions_des_tables']['documents']['type_document'] = array('types_documents', 'titre');
	$interfaces['exceptions_des_tables']['documents']['extension_document'] = array('types_documents', 'extension');
	$interfaces['exceptions_des_tables']['documents']['mime_type'] = array('types_documents', 'mime_type');
	$interfaces['exceptions_des_tables']['documents']['media_document'] = array('types_documents', 'media');
	$interfaces['exceptions_des_tables']['documents']['type_document'] = ['types_documents', 'titre'];
	$interfaces['exceptions_des_tables']['documents']['extension_document'] = ['types_documents', 'extension'];
	$interfaces['exceptions_des_tables']['documents']['mime_type'] = ['types_documents', 'mime_type'];
	$interfaces['exceptions_des_tables']['documents']['media_document'] = ['types_documents', 'media'];

	$interfaces['exceptions_des_jointures']['spip_documents']['id_forum'] = array('spip_documents_liens', 'id_forum');
	$interfaces['exceptions_des_jointures']['spip_documents']['vu'] = array('spip_documents_liens', 'vu');
	$interfaces['exceptions_des_jointures']['spip_documents']['id_forum'] = ['spip_documents_liens', 'id_forum'];
	$interfaces['exceptions_des_jointures']['spip_documents']['vu'] = ['spip_documents_liens', 'vu'];
	$interfaces['table_date']['types_documents'] = 'date';

	$interfaces['table_des_traitements']['FICHIER'][] = 'get_spip_doc(%s)';
@@ -53,7 +53,7 @@ function medias_declarer_tables_interfaces($interfaces) {
 */
function medias_declarer_tables_principales($tables_principales) {

	$spip_types_documents = array(
	$spip_types_documents = [
		'extension' => "varchar(10) DEFAULT '' NOT NULL",
		'titre' => "text DEFAULT '' NOT NULL",
		'descriptif' => "text DEFAULT '' NOT NULL",
@@ -62,15 +62,15 @@ function medias_declarer_tables_principales($tables_principales) {
		'upload' => "ENUM('oui', 'non') DEFAULT 'oui'  NOT NULL",
		'media_defaut' => "varchar(10) DEFAULT 'file' NOT NULL",
		'maj' => 'TIMESTAMP'
	);
	];

	$spip_types_documents_key = array(
	$spip_types_documents_key = [
		'PRIMARY KEY' => 'extension',
		'KEY inclus' => 'inclus'
	);
	];

	$tables_principales['spip_types_documents'] =
		array('field' => &$spip_types_documents, 'key' => &$spip_types_documents_key);
		['field' => &$spip_types_documents, 'key' => &$spip_types_documents_key];

	return $tables_principales;
}
@@ -83,25 +83,25 @@ function medias_declarer_tables_principales($tables_principales) {
 */
function medias_declarer_tables_auxiliaires($tables_auxiliaires) {

	$spip_documents_liens = array(
	$spip_documents_liens = [
		'id_document' => "bigint(21) DEFAULT '0' NOT NULL",
		'id_objet' => "bigint(21) DEFAULT '0' NOT NULL",
		'objet' => "VARCHAR (25) DEFAULT '' NOT NULL",
		'vu' => "ENUM('non', 'oui') DEFAULT 'non' NOT NULL",
		'rang_lien' => "int(4) DEFAULT '0' NOT NULL"
	);
	];

	$spip_documents_liens_key = array(
	$spip_documents_liens_key = [
		'PRIMARY KEY' => 'id_document,id_objet,objet',
		'KEY id_document' => 'id_document',
		'KEY id_objet' => 'id_objet',
		'KEY objet' => 'objet',
	);
	];

	$tables_auxiliaires['spip_documents_liens'] = array(
	$tables_auxiliaires['spip_documents_liens'] = [
		'field' => &$spip_documents_liens,
		'key' => &$spip_documents_liens_key
	);
	];

	return $tables_auxiliaires;
}
@@ -121,9 +121,9 @@ function medias_declarer_tables_objets_surnoms($surnoms) {

function medias_declarer_tables_objets_sql($tables) {
	$tables['spip_articles']['champs_versionnes'][] = 'jointure_documents';
	$tables['spip_documents'] = array(
		'table_objet_surnoms' => array('doc', 'img', 'emb'),
		'type_surnoms' => array(),
	$tables['spip_documents'] = [
		'table_objet_surnoms' => ['doc', 'img', 'emb'],
		'type_surnoms' => [],
		'url_voir' => 'document_edit',
		'url_edit' => 'document_edit',
		'page' => '',
@@ -137,7 +137,7 @@ function medias_declarer_tables_objets_sql($tables) {
		'titre' => "CASE WHEN length(titre)>0 THEN titre ELSE fichier END as titre, '' AS lang",
		'date' => 'date',
		'principale' => 'oui',
		'field' => array(
		'field' => [
			'id_document' => 'bigint(21) NOT NULL',
			'id_vignette' => "bigint(21) DEFAULT '0' NOT NULL",
			'extension' => "VARCHAR(10) DEFAULT '' NOT NULL",
@@ -158,34 +158,34 @@ function medias_declarer_tables_objets_sql($tables) {
			'date_publication' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
			'brise' => 'tinyint DEFAULT 0',
			'maj' => 'TIMESTAMP'
		),
		'key' => array(
		],
		'key' => [
			'PRIMARY KEY' => 'id_document',
			'KEY id_vignette' => 'id_vignette',
			'KEY mode' => 'mode',
			'KEY extension' => 'extension'
		),
		'join' => array(
		],
		'join' => [
			'id_document' => 'id_document',
			'extension' => 'extension'
		),
		'statut' => array(
			array(
		],
		'statut' => [
			[
				'champ' => 'statut',
				'publie' => 'publie',
				'previsu' => 'publie,prop,prepa',
				'post_date' => 'date_publication',
				'exception' => array('statut', 'tout')
			)
		),
		'tables_jointures' => array('types_documents'),
		'rechercher_champs' => array(
				'exception' => ['statut', 'tout']
			]
		],
		'tables_jointures' => ['types_documents'],
		'rechercher_champs' => [
			'titre' => 3,
			'descriptif' => 1,
			'fichier' => 1,
			'credits' => 1,
		),
		'champs_editables' => array(
		],
		'champs_editables' => [
			'titre',
			'descriptif',
			'date',
@@ -201,8 +201,8 @@ function medias_declarer_tables_objets_sql($tables) {
			'extension',
			'id_vignette',
			'media'
		),
		'champs_versionnes' => array(
		],
		'champs_versionnes' => [
			'id_vignette',
			'titre',
			'descriptif',
@@ -214,17 +214,17 @@ function medias_declarer_tables_objets_sql($tables) {
			'credits',
			'fichier',
			'distant'
		),
		'modeles' => array('document', 'doc', 'img', 'emb', 'image', 'video', 'audio', 'file'),
		],
		'modeles' => ['document', 'doc', 'img', 'emb', 'image', 'video', 'audio', 'file'],
		'modeles_styliser' => 'medias_modeles_styliser',
	);
	];

	// jointures sur les forum pour tous les objets
	$tables[]['tables_jointures'][] = 'documents_liens';

	// recherche jointe sur les documents pour les articles et rubriques
	$tables['spip_articles']['rechercher_jointures']['document'] = array('titre' => 2, 'descriptif' => 1);
	$tables['spip_rubriques']['rechercher_jointures']['document'] = array('titre' => 2, 'descriptif' => 1);
	$tables['spip_articles']['rechercher_jointures']['document'] = ['titre' => 2, 'descriptif' => 1];
	$tables['spip_rubriques']['rechercher_jointures']['document'] = ['titre' => 2, 'descriptif' => 1];

	return $tables;
}
@@ -243,13 +243,13 @@ function creer_base_types_doc($serveur = '', $champ_media = 'media_defaut') {

	// charger en memoire tous les types deja definis pour limiter les requettes
	$rows = sql_allfetsel('mime_type,titre,inclus,extension,' . $champ_media . ',upload,descriptif', 'spip_types_documents', '', '', '', '', '', $serveur);
	$deja = array();
	$deja = [];
	foreach ($rows as $k => $row) {
		$deja[$row['extension']] = &$rows[$k];
	}

	$insertions = array();
	$updates = array();
	$insertions = [];
	$updates = [];

	foreach ($tables_mime as $extension => $type_mime) {
		if (isset($tables_images[$extension])) {
@@ -271,18 +271,20 @@ function creer_base_types_doc($serveur = '', $champ_media = 'media_defaut') {

		// type de media
		$media = 'file';
		if (preg_match(',^image/,', $type_mime) or in_array($type_mime, array('application/illustrator'))) {
		if (preg_match(',^image/,', $type_mime) or in_array($type_mime, ['application/illustrator'])) {
			$media = 'image';
		} elseif (preg_match(',^audio/,', $type_mime)) {
			$media = 'audio';
		} elseif (preg_match(',^video/,', $type_mime) or in_array(
		} elseif (
			preg_match(',^video/,', $type_mime) or in_array(
				$type_mime,
			array('application/ogg', 'application/x-shockwave-flash', 'application/mp4')
		)) {
				['application/ogg', 'application/x-shockwave-flash', 'application/mp4']
			)
		) {
			$media = 'video';
		}

		$set = array(
		$set = [
			'mime_type' => $type_mime,
			'titre' => $titre,
			'inclus' => $inclus,
@@ -290,7 +292,7 @@ function creer_base_types_doc($serveur = '', $champ_media = 'media_defaut') {
			$champ_media => $media,
			'upload' => 'oui',
			'descriptif' => '',
		);
		];
		if (!isset($deja[$extension])) {
			$insertions[] = $set;
		} elseif (array_diff($deja[$extension], $set)) {
@@ -322,15 +324,17 @@ function medias_optimiser_base_disparus($flux) {
	// optimiser les liens morts :
	// entre documents vers des objets effaces
	// depuis des documents effaces
	$flux['data'] += objet_optimiser_liens(array('document' => '*'), '*');
	$flux['data'] += objet_optimiser_liens(['document' => '*'], '*');

	// on ne nettoie volontairement pas automatiquement les documents orphelins
	// mais il faut nettoyer les logos qui ne sont plus liés à rien
	$res = sql_select("D.id_document",
		"spip_documents AS D
	$res = sql_select(
		'D.id_document',
		'spip_documents AS D
						LEFT JOIN spip_documents_liens AS L
							ON (L.id_document=D.id_document)",
		sql_in('D.mode', ['logoon', 'logooff']) . " AND L.id_document IS NULL");
							ON (L.id_document=D.id_document)',
		sql_in('D.mode', ['logoon', 'logooff']) . ' AND L.id_document IS NULL'
	);

	$supprimer_document = charger_fonction('supprimer_document', 'action');
	while ($row = sql_fetch($res)) {
+10 −10
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -16,7 +16,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {

global $tables_images, $tables_sequences, $tables_documents, $tables_mime, $mime_alias;

$tables_images = array(
$tables_images = [
	// Images reconnues par PHP
	'jpg' => 'JPEG',
	'png' => 'PNG',
@@ -26,11 +26,11 @@ $tables_images = array(
	// Autres images (peuvent utiliser le tag <img>)
	'bmp' => 'BMP',
	'svg' => 'SVG',
);
];

// Multimedia (peuvent utiliser le tag <embed>)

$tables_sequences = array(
$tables_sequences = [
	'aac' => 'Advanced Audio Coding',
	'ac3' => 'AC-3 Compressed Audio',
	'aifc' => 'Compressed AIFF Audio',
@@ -86,10 +86,10 @@ $tables_sequences = array(
	'y4m' => 'YUV4MPEG2',
	'3ga' => '3GP Audio File',
	'3gp' => '3rd Generation Partnership Project'
);
];

// Documents varies
$tables_documents = array(
$tables_documents = [
	'7z' => '7 Zip',
	'abw' => 'Abiword',
	'ai' => 'Adobe Illustrator',
@@ -210,9 +210,9 @@ $tables_documents = array(
	'xlsx' => 'Excel',
	'xltm' => 'Excel template',
	'xltx' => 'Excel template'
);
];

$tables_mime = array(
$tables_mime = [
	// Images reconnues par PHP
	'jpg' => 'image/jpeg',
	'png' => 'image/png',
@@ -399,10 +399,10 @@ $tables_mime = array(
	'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
	'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12',
	'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template'
);
];


$mime_alias = array(
$mime_alias = [
	'application/x-ogg' => 'application/ogg',
	'audio/3gpp' => 'video/3gpp',
	'audio/x-mpeg' => 'audio/mpeg',
@@ -411,4 +411,4 @@ $mime_alias = array(
	'video/flv' => 'video/x-flv',
	'video/mp4' => 'application/mp4',
	'image/jpg' => 'image/jpeg'
);
];
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -17,7 +17,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
function formulaires_changer_fichier_document_charger_dist($id_document) {
	$valeurs = sql_fetsel('id_document,fichier,distant', 'spip_documents', 'id_document=' . intval($id_document));
	if (!$valeurs) {
		return array('editable' => false);
		return ['editable' => false];
	}

	$charger = charger_fonction('charger', 'formulaires/joindre_document');
@@ -29,7 +29,7 @@ function formulaires_changer_fichier_document_charger_dist($id_document) {
}

function formulaires_changer_fichier_document_verifier_dist($id_document) {
	$erreurs = array();
	$erreurs = [];
	if (_request('copier_local')) {
	} else {
		$verifier = charger_fonction('verifier', 'formulaires/joindre_document');
@@ -42,7 +42,7 @@ function formulaires_changer_fichier_document_verifier_dist($id_document) {
function formulaires_changer_fichier_document_traiter_dist($id_document) {
	if (_request('copier_local')) {
		$copier_local = charger_fonction('copier_local', 'action');
		$res = array('editable' => true);
		$res = ['editable' => true];
		if (($err = $copier_local($id_document)) === true) {
			$res['message_ok'] = _T('medias:document_copie_locale_succes');
		} else {
@@ -50,7 +50,8 @@ function formulaires_changer_fichier_document_traiter_dist($id_document) {
		}
	} else {
		// liberer le nom de l'ancien fichier pour permettre le remplacement par un fichier du meme nom
		if ($ancien_fichier = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($id_document))
		if (
			$ancien_fichier = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($id_document))
			and @file_exists($f = get_spip_doc($ancien_fichier))
		) {
			spip_unlink($f);
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -27,11 +27,13 @@ if (!defined('_ECRIRE_INC_VERSION')) {
 *     Environnement du formulaire
 **/
function formulaires_configurer_documents_charger_dist() {
	$valeurs = array();
	foreach (array(
	$valeurs = [];
	foreach (
		[
		'documents_objets',
		'documents_date',
	) as $m) {
		] as $m
	) {
		$valeurs[$m] = isset($GLOBALS['meta'][$m]) ? $GLOBALS['meta'][$m] : '';
	}
	$valeurs['documents_objets'] = explode(',', $valeurs['documents_objets']);
@@ -46,7 +48,7 @@ function formulaires_configurer_documents_charger_dist() {
 *     Retours du traitement
 **/
function formulaires_configurer_documents_traiter_dist() {
	$res = array('editable' => true);
	$res = ['editable' => true];
	if (!is_null($v = _request($m = 'documents_date'))) {
		ecrire_meta($m, $v == 'oui' ? 'oui' : 'non');
	}
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -25,7 +25,7 @@ function formulaires_editer_document_charger_dist(
	$retour = '',
	$lier_trad = 0,
	$config_fonc = 'documents_edit_config',
	$row = array(),
	$row = [],
	$hidden = ''
) {
	$valeurs = formulaires_editer_objet_charger('document', $id_document, $id_parent, $lier_trad, $retour, $config_fonc, $row, $hidden);
@@ -36,11 +36,11 @@ function formulaires_editer_document_charger_dist(
	}

	// relier les parents
	$valeurs['parents'] = array();
	$valeurs['parents'] = [];
	$valeurs['_hidden'] = '';
	$parents = sql_allfetsel('objet,id_objet', 'spip_documents_liens', 'id_document=' . intval($id_document));
	foreach ($parents as $p) {
		if (in_array($p['objet'], array('article', 'rubrique')) and $p['id_objet'] > 0) {
		if (in_array($p['objet'], ['article', 'rubrique']) and $p['id_objet'] > 0) {
			$valeurs['parents'][] = $p['objet'] . '|' . $p['id_objet'];
		} else {
			$valeurs['_hidden'] .= "<input type='hidden' name='parents[]' value='" . $p['objet'] . '|' . $p['id_objet'] . "' />";
@@ -66,7 +66,7 @@ function formulaires_editer_document_charger_dist(
	);
	$valeurs['type_document'] = $row['type_document'];
	$valeurs['_inclus'] = $row['inclus'];
	if (in_array($valeurs['extension'], array('jpg', 'gif', 'png', 'svg'))) {
	if (in_array($valeurs['extension'], ['jpg', 'gif', 'png', 'svg'])) {
		$valeurs['apercu'] = get_spip_doc($valeurs['fichier']);
	}

@@ -76,7 +76,8 @@ function formulaires_editer_document_charger_dist(
		include_spip('inc/renseigner_document');
		$infos = renseigner_taille_dimension_image(get_spip_doc($valeurs['fichier']), $valeurs['extension']);
		if ($infos and is_array($infos) and isset($infos['taille'])) {
			if ($infos['taille'] != $valeurs['taille']
			if (
				$infos['taille'] != $valeurs['taille']
				or ($infos['type_image'] && ($infos['largeur'] != $valeurs['largeur']))
				or ($infos['type_image'] && ($infos['hauteur'] != $valeurs['hauteur']))
			) {
@@ -106,7 +107,7 @@ function formulaires_editer_document_charger_dist(
function documents_edit_config($row) {
	global $spip_lang;

	$config = array();//$GLOBALS['meta'];
	$config = [];//$GLOBALS['meta'];
	$config['lignes'] = 8;
	$config['langue'] = $spip_lang;

@@ -121,10 +122,10 @@ function formulaires_editer_document_verifier_dist(
	$retour = '',
	$lier_trad = 0,
	$config_fonc = 'documents_edit_config',
	$row = array(),
	$row = [],
	$hidden = ''
) {
	$erreurs = formulaires_editer_objet_verifier('document', $id_document, is_numeric($id_document) ? array() : array('titre'));
	$erreurs = formulaires_editer_objet_verifier('document', $id_document, is_numeric($id_document) ? [] : ['titre']);

	// verifier l'upload si on a demande a changer le document
	if (_request('joindre_upload') or _request('joindre_ftp') or _request('joindre_distant')) {
@@ -137,7 +138,8 @@ function formulaires_editer_document_verifier_dist(

	// On ne vérifie la date que si on avait le droit de la modifier
	if (lire_config('documents_date') == 'oui') {
		if (!$date = recup_date(_request('saisie_date') . ' ' . _request('saisie_heure') . ':00')
		if (
			!$date = recup_date(_request('saisie_date') . ' ' . _request('saisie_heure') . ':00')
			or !($date = mktime($date[3], $date[4], 0, $date[1], $date[2], $date[0]))
		) {
			$erreurs['saisie_date'] = _T('medias:format_date_incorrect');
@@ -158,16 +160,16 @@ function formulaires_editer_document_traiter_dist(
	$retour = '',
	$lier_trad = 0,
	$config_fonc = 'documents_edit_config',
	$row = array(),
	$row = [],
	$hidden = ''
) {
	if (is_null(_request('parents'))) {
		set_request('parents', array());
		set_request('parents', []);
	}

	// verifier les infos de taille et dimensions sur les fichiers locaux
	// cas des maj de fichier directes par ftp
	foreach (array('taille', 'largeur', 'hauteur') as $c) {
	foreach (['taille', 'largeur', 'hauteur'] as $c) {
		if (($v = _request("_{$c}_modif")) and !_request($c)) {
			set_request($c, $v);
		}
@@ -176,7 +178,8 @@ function formulaires_editer_document_traiter_dist(
	$res = formulaires_editer_objet_traiter('document', $id_document, $id_parent, $lier_trad, $retour, $config_fonc, $row, $hidden);
	set_request('parents');
	$autoclose = "<script type='text/javascript'>if (window.jQuery) jQuery.modalboxclose();</script>";
	if (_request('copier_local')
	if (
		_request('copier_local')
		or _request('joindre_upload')
		or _request('joindre_ftp')
		or _request('joindre_distant')
@@ -185,7 +188,7 @@ function formulaires_editer_document_traiter_dist(
		$autoclose = '';
		if (_request('copier_local')) {
			$copier_local = charger_fonction('copier_local', 'action');
			$res = array('editable' => true);
			$res = ['editable' => true];
			if (($err = $copier_local($id_document)) === true) {
				$res['message_ok'] = (isset($res['message_ok']) ? $res['message_ok'] . '<br />' : '') . _T('medias:document_copie_locale_succes');
			} else {
@@ -194,7 +197,8 @@ function formulaires_editer_document_traiter_dist(
			set_request('credits'); // modifie par la copie locale
		} else {
			// liberer le nom de l'ancien fichier pour permettre le remplacement par un fichier du meme nom
			if ($ancien_fichier = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($id_document))
			if (
				$ancien_fichier = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($id_document))
				and !tester_url_absolue($ancien_fichier)
				and @file_exists($rename = get_spip_doc($ancien_fichier))
			) {
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -18,7 +18,7 @@ function formulaires_illustrer_document_charger_dist($id_document) {
	include_spip('inc/documents');
	$valeurs = sql_fetsel('id_document,mode,id_vignette,extension,media', 'spip_documents', 'id_document=' . intval($id_document));
	if (!$valeurs /*OR in_array($valeurs['extension'],array('jpg','gif','png'))*/) {
		return array('editable' => false, 'id' => $id_document);
		return ['editable' => false, 'id' => $id_document];
	}

	$valeurs['id'] = $id_document;
@@ -36,7 +36,7 @@ function formulaires_illustrer_document_charger_dist($id_document) {
		$valeurs['largeur'] = null;
		$valeurs['id_vignette'] = null;
	}
	$valeurs['_pipeline'] = array('editer_contenu_objet', array('type' => 'illustrer_document', 'id' => $id_document));
	$valeurs['_pipeline'] = ['editer_contenu_objet', ['type' => 'illustrer_document', 'id' => $id_document]];

	if (intval($id_document) and !autoriser('modifier', 'document', intval($id_document))) {
		$valeurs['editable'] = '';
@@ -46,7 +46,7 @@ function formulaires_illustrer_document_charger_dist($id_document) {
}

function formulaires_illustrer_document_verifier_dist($id_document) {
	$erreurs = array();
	$erreurs = [];
	if (_request('supprimer')) {
	} else {
		$id_vignette = sql_getfetsel('id_vignette', 'spip_documents', 'id_document=' . intval($id_document));
@@ -59,7 +59,7 @@ function formulaires_illustrer_document_verifier_dist($id_document) {

function formulaires_illustrer_document_traiter_dist($id_document) {
	$id_vignette = sql_getfetsel('id_vignette', 'spip_documents', 'id_document=' . intval($id_document));
	$res = array('editable' => true);
	$res = ['editable' => true];
	if (_request('supprimer')) {
		$supprimer_document = charger_fonction('supprimer_document', 'action');
		if ($id_vignette and $supprimer_document($id_vignette)) {
@@ -75,11 +75,12 @@ function formulaires_illustrer_document_traiter_dist($id_document) {

		$ajoute = $ajouter_documents($id_vignette, $files, '', 0, 'vignette');

		if (is_numeric(reset($ajoute))
		if (
			is_numeric(reset($ajoute))
			and $id_vignette = reset($ajoute)
		) {
			include_spip('action/editer_document');
			document_modifier($id_document, array('id_vignette' => $id_vignette, 'mode' => 'document'));
			document_modifier($id_document, ['id_vignette' => $id_vignette, 'mode' => 'document']);
			$res['message_ok'] = _T('medias:document_installe_succes');
		} else {
			$res['message_erreur'] = reset($ajoute);
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -36,10 +36,12 @@ function joindre_determiner_mode($mode, $id_document, $objet) {
		if (intval($id_document)) {
			$mode = sql_getfetsel('mode', 'spip_documents', 'id_document=' . intval($id_document));
		}
		if (!in_array($mode, array('choix', 'document', 'image'))) {
		if (!in_array($mode, ['choix', 'document', 'image'])) {
			$mode = 'choix';
			if ($objet
				and !in_array(table_objet_sql($objet), explode(',', $GLOBALS['meta']['documents_objets']))) {
			if (
				$objet
				and !in_array(table_objet_sql($objet), explode(',', $GLOBALS['meta']['documents_objets']))
			) {
				$mode = 'image';
			}
		}
@@ -80,7 +82,7 @@ function formulaires_joindre_document_charger_dist(
	$proposer_media = true,
	$proposer_ftp = true
) {
	$valeurs = array();
	$valeurs = [];
	$mode = joindre_determiner_mode($mode, $id_document, $objet);


@@ -181,7 +183,7 @@ function formulaires_joindre_document_verifier_dist(
) {
	include_spip('inc/joindre_document');

	$erreurs = array();
	$erreurs = [];
	// on joint un document deja dans le site
	if (_request('joindre_mediatheque')) {
		$refdoc_joindre = intval(preg_replace(',^(doc|document|img),', '', _request('refdoc_joindre')));
@@ -200,7 +202,8 @@ function formulaires_joindre_document_verifier_dist(
			} else {
				// regarder si on a eu une erreur sur l'upload d'un fichier
				foreach ($files as $file) {
					if (isset($file['error'])
					if (
						isset($file['error'])
						and $test = joindre_upload_error($file['error'])
					) {
						if (is_string($test)) {
@@ -213,7 +216,8 @@ function formulaires_joindre_document_verifier_dist(

				// si ce n'est pas deja un post de zip confirme
				// regarder si il faut lister le contenu du zip et le presenter
				if (!count($erreurs)
				if (
					!count($erreurs)
					and !_request('joindre_zip')
					and $contenu_zip = joindre_verifier_zip($files)
				) {
@@ -224,11 +228,11 @@ function formulaires_joindre_document_verifier_dist(
						$erreurs['message_erreur'] = '';
						$erreurs['lister_contenu_archive'] = recuperer_fond(
							'formulaires/inc-lister_archive_jointe',
							array(
							[
								'chemin_zip' => $token_zip,
								'liste_fichiers_zip' => $fichiers,
								'erreurs_fichier_zip' => $erreurs
							)
							]
						);
					} else {
						$erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier');
@@ -277,11 +281,11 @@ function formulaires_joindre_document_traiter_dist(
	$proposer_media = true,
	$proposer_ftp = true
) {
	$res = array('editable' => true);
	$res = ['editable' => true];
	$ancre = '';
	// on joint un document deja dans le site
	if (_request('joindre_mediatheque')) {
		$sel = array();
		$sel = [];
		$refdoc_joindre = _request('refdoc_joindre');
		$refdoc_joindre = strtr($refdoc_joindre, ';,', '  ');
		$refdoc_joindre = preg_replace(',\b(doc|document|img),', '', $refdoc_joindre);
@@ -294,7 +298,7 @@ function formulaires_joindre_document_traiter_dist(
		foreach ($refdoc_joindre as $j) {
			if ($j = intval(preg_replace(',^(doc|document|img),', '', $j))) {
				// lier le parent en plus
				$champs = array('ajout_parents' => array("$objet|$id_objet"));
				$champs = ['ajout_parents' => ["$objet|$id_objet"]];
				document_modifier($j, $champs);
				if (!$ancre) {
					$ancre = $j;
@@ -329,14 +333,14 @@ function formulaires_joindre_document_traiter_dist(
		}

		// checker les erreurs eventuelles
		$messages_erreur = array();
		$sel = array();
		$messages_erreur = [];
		$sel = [];
		foreach ($nouveaux_doc as $doc) {
			if (!is_numeric($doc)) {
				$messages_erreur[] = $doc;
			} // cas qui devrait etre traite en amont
			elseif (!$doc) {
				$messages_erreur[] = _T('medias:erreur_insertion_document_base', array('fichier' => '<em>???</em>'));
				$messages_erreur[] = _T('medias:erreur_insertion_document_base', ['fichier' => '<em>???</em>']);
			} else {
				if (!$ancre) {
					$ancre = $doc;
@@ -394,7 +398,7 @@ function formulaires_joindre_document_traiter_dist(
 */
function joindre_options_upload_ftp($dir, $mode = 'document') {
	$fichiers = preg_files($dir);
	$exts = $dirs = $texte_upload = array();
	$exts = $dirs = $texte_upload = [];

	// en mode "charger une image", ne proposer que les inclus
	$inclus = ($mode == 'image' or $mode == 'vignette')
@@ -425,7 +429,7 @@ function joindre_options_upload_ftp($dir, $mode = 'document') {
				if (!in_array($ledossier, $dirs)) {
					$texte_upload[] = "\n<option value=\"$ledossier\">"
						. str_repeat('&nbsp;', $k)
						. _T('medias:tout_dossier_upload', array('upload' => $ledossier))
						. _T('medias:tout_dossier_upload', ['upload' => $ledossier])
						. '</option>';
					$dirs[] = $ledossier;
				}
@@ -496,7 +500,7 @@ function joindre_liste_erreurs_to_li($erreurs) {
	if (count($erreurs) > 4) {
		$res = "<p style='cursor:pointer;' onclick='jQuery(this).siblings(\"ul\").toggle();return false;'>" . _T(
			'medias:erreurs_voir',
			array('nb' => count($erreurs))
			['nb' => count($erreurs)]
		) . '</p><ul class="spip none-js">' . $res . '</ul>';
	} else {
		$res = "<ul class=\"spip\">$res</ul>";
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -2,7 +2,7 @@
    <div class='editer editer_url[ (#ENV**{erreurs}|table_valeur{url}|oui)erreur]'>
        <label for='url#ENV{domid}'><:medias:info_referencer_doc_distant:></label>[
        <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{url})</span>
        ]<input class='text' placeholder="http://" type="text" name="url" value='#ENV{url}' id="url#ENV{domid}"/>
        ]<input class='text' placeholder="https://" type="text" name="url" value='#ENV{url}' id="url#ENV{domid}"/>
        <!--editer_url-->
    </div>
</div>
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -57,7 +57,8 @@ function inc_choisir_mode_document($infos, $type_inclus_image, $objet) {
		return 'image';
	}

	if ($infos['largeur'] > 0
	if (
		$infos['largeur'] > 0
		and $infos['largeur'] < _LARGEUR_MODE_IMAGE
	) {
		return 'image';
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -42,7 +42,7 @@ function inc_determiner_statut_document($id_document, $statut_ancien, $date_publ
	while ($row = sql_fetch($res)) {
		if (
			// si ce n'est pas un logo
			!in_array($row['mode'], array('logoon','logooff'))
			!in_array($row['mode'], ['logoon','logooff'])
			and (
				// cas particulier des rubriques qui sont publiees des qu'elles contiennent un document !
				$row['objet'] == 'rubrique'
@@ -54,7 +54,8 @@ function inc_determiner_statut_document($id_document, $statut_ancien, $date_publ
			$date_publication = 0;
			continue;
		} // si pas publie, et article, il faut checker la date de post-publi eventuelle
		elseif ($row['objet'] == 'article'
		elseif (
			$row['objet'] == 'article'
			and $row2 = sql_fetsel(
				'date',
				'spip_articles',
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -44,7 +44,7 @@ function inc_documenter_objet_dist($id, $type) {
	$marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc');
	$marquer_doublons_doc($champs, $id, $type, $id_table_objet, $table_objet, $spip_table_objet, '', $serveur);

	$contexte = array('objet' => $type, 'id_objet' => $id);
	$contexte = ['objet' => $type, 'id_objet' => $id];

	return recuperer_fond('prive/objets/contenu/portfolio_document', array_merge($_GET, $contexte));
}
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -131,7 +131,7 @@ function vignette_automatique($img, $doc, $lien, $x = 0, $y = 0, $align = '', $c
			$img = $f($e, false);
			$size = @spip_getimagesize($img);
			$img = "<img src='$img' " . $size[3] . ' />';
			$class .= " spip_document_icone";
			$class .= ' spip_document_icone';
		}
	} else {
		$size = @spip_getimagesize($img);
@@ -180,7 +180,8 @@ function vignette_automatique($img, $doc, $lien, $x = 0, $y = 0, $align = '', $c
 * @return string Chemin de l’image
 */
function image_du_document($document, $connect = null) {
	if ($e = $document['extension']
	if (
		$e = $document['extension']
		and in_array($e, formats_image_acceptables())
		and (!test_espace_prive() or $GLOBALS['meta']['creer_preview'] == 'oui')
		and $document['fichier']
@@ -232,13 +233,13 @@ function affiche_raccourci_doc($doc, $id, $align = '', $short = false) {
		$text = $align ? $align : $model;
	}

	$classes = "btn btn_link btn_mini";
	$classes = 'btn btn_link btn_mini';
	$classes = " class=\"$classes\"";

	$styles = '';
	if ($align && !$short) {
		// a priori ne sert plus de toutes façons…
		$styles = "text-align: " . ($align ?: 'center') . ";";
		$styles = 'text-align: ' . ($align ?: 'center') . ';';
		$styles = " style=\"$styles\"";
	}

Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -49,7 +49,7 @@ function erreur_upload_trop_gros() {
		. '<br />'
		. _T(
			'medias:upload_limit',
			array('max' => ini_get('upload_max_filesize'))
			['max' => ini_get('upload_max_filesize')]
		)
		. '</p>';

Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -24,7 +24,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
 * @return string/array
 */
function joindre_trouver_fichier_envoye() {
	static $files = array();
	static $files = [];
	// on est appele deux fois dans un hit, resservir ce qu'on a trouve a la verif
	// lorsqu'on est appelle au traitement

@@ -33,45 +33,21 @@ function joindre_trouver_fichier_envoye() {
	}

	if (_request('joindre_upload')) {
		$post = isset($_FILES) ? $_FILES : $GLOBALS['HTTP_POST_FILES'];
		$files = array();
		if (is_array($post)) {
			include_spip('action/ajouter_documents');
			foreach ($post as $file) {
				if (is_array($file['name'])) {
					while (count($file['name'])) {
						$test = array(
							'error' => array_shift($file['error']),
							'name' => array_shift($file['name']),
							'tmp_name' => array_shift($file['tmp_name']),
							'type' => array_shift($file['type']),
						);
						if (!($test['error'] == 4)) {
							if (is_string($err = joindre_upload_error($test['error']))) {
								return $err;
							} // un erreur upload
							if (!is_array(verifier_upload_autorise($test['name']))) {
								return _T('medias:erreur_upload_type_interdit', array('nom' => $test['name']));
							}
							$files[] = $test;
						}
					}
				} else {
					//UPLOAD_ERR_NO_FILE
					if (!($file['error'] == 4)) {
						if (is_string($err = joindre_upload_error($file['error']))) {
							return $err;
						} // un erreur upload
						if (!is_array(verifier_upload_autorise($file['name']))) {
							return _T('medias:erreur_upload_type_interdit', array('nom' => $file['name']));
						}
						$files[] = $file;
					}
				}
		$files = joindre_trouver_http_post_files();
		// erreur ?
		if (is_string($files)) {
			return $files;
		}
		// rien envoye ?
		if (!count($files)) {
			return _T('medias:erreur_indiquez_un_fichier');
		}
		// verifions les types de fichier envoyes
		include_spip('action/ajouter_documents');
		foreach ($files as $file) {
			if (!is_array(verifier_upload_autorise($file['name']))) {
				return _T('medias:erreur_upload_type_interdit', ['nom' => $file['name']]);
			}
		}

		return $files;
@@ -82,7 +58,7 @@ function joindre_trouver_fichier_envoye() {
		}
		include_spip('inc/distant');
		if (!valider_url_distante($path)) {
			return _T('medias:erreur_upload_type_interdit', array('nom' => $path));
			return _T('medias:erreur_upload_type_interdit', ['nom' => $path]);
		}
		include_spip('action/ajouter_documents');
		$infos = renseigner_source_distante($path);
@@ -90,13 +66,13 @@ function joindre_trouver_fichier_envoye() {
			return $infos;
		} // message d'erreur
		else {
			return array(
				array(
			return [
				[
					'name' => basename($path),
					'tmp_name' => $path,
					'distant' => true,
				)
			);
				]
			];
		}
	} elseif (_request('joindre_ftp')) {
		$path = _request('cheminftp');
@@ -113,30 +89,32 @@ function joindre_trouver_fichier_envoye() {

		if (!is_dir($upload)) {
			// seul un fichier est demande
			return array(
				array(
			return [
				[
					'name' => basename($upload),
					'tmp_name' => $upload
				)
			);
				]
			];
		} else {
			// on upload tout un repertoire
			$files = array();
			$files = [];
			foreach (preg_files($upload) as $fichier) {
				$files[] = array(
				$files[] = [
					'name' => basename($fichier),
					'tmp_name' => $fichier
				);
				];
			}

			return $files;
		}
	} elseif (_request('joindre_zip') and $token_zip = _request('chemin_zip')) {
		$zip_to_clean = (isset($GLOBALS['visiteur_session']['zip_to_clean']) ?
			unserialize($GLOBALS['visiteur_session']['zip_to_clean']) : array());
		if (!$zip_to_clean
			unserialize($GLOBALS['visiteur_session']['zip_to_clean']) : []);
		if (
			!$zip_to_clean
			or !isset($zip_to_clean[$token_zip])
			or !$path = $zip_to_clean[$token_zip]) {
			or !$path = $zip_to_clean[$token_zip]
		) {
			return _T('avis_operation_impossible');
		}

@@ -147,22 +125,72 @@ function joindre_trouver_fichier_envoye() {
			return _T('avis_operation_impossible');
		}

		$files = array();
		$files = [];
		if (_request('options_upload_zip') == 'deballe') {
			$files = joindre_deballer_lister_zip($path, _TMP_DIR);
		}

		// si le zip doit aussi etre conserve, l'ajouter
		if (_request('options_upload_zip') == 'upload' or _request('options_deballe_zip_conserver')) {
			$files[] = array(
			$files[] = [
				'name' => basename($path),
				'tmp_name' => $path,
			);
			];
		}
		return $files;
	}

	return array();
	return [];
}

/**
 * Récupérer et mettre en forme la liste des fichiers postes
 * que ce soit via plusieurs input file ou via un input file multiple
 * @param $name : nom de l'input qu'on veut recuperer si on ne veut pas tous les fichiers
 * @return array|string
 *   string en cas d'erreur
 */
function joindre_trouver_http_post_files($name = null) {
	$post = isset($_FILES) ? $_FILES : $GLOBALS['HTTP_POST_FILES'];
	$files = [];
	if (is_array($post)) {
		foreach ($post as $input_name => $file) {
			if ($name and $input_name !== $name) {
				continue;
			}
			if (is_array($file['name'])) {
				while (count($file['name'])) {
					$test = [
						'input_name' => $input_name,
						'error' => array_shift($file['error']),
						'name' => array_shift($file['name']),
						'tmp_name' => array_shift($file['tmp_name']),
						'type' => array_shift($file['type']),
					];
					//UPLOAD_ERR_NO_FILE
					if (!($test['error'] == 4)) {
						// un erreur upload
						if (is_string($err = joindre_upload_error($test['error']))) {
							return $err;
						}
						$files[] = $test;
					}
				}
			} else {
				//UPLOAD_ERR_NO_FILE
				if (!($file['error'] == 4)) {
					// un erreur upload
					if (is_string($err = joindre_upload_error($file['error']))) {
						return $err;
					}
					$file['input_name'] = $input_name;
					$files[] = $file;
				}
			}
		}
	}

	return $files;
}


@@ -184,19 +212,19 @@ function joindre_upload_error($error) {
		case 1: /* UPLOAD_ERR_INI_SIZE */
			$msg = _T(
				'medias:upload_limit',
				array('max' => ini_get('upload_max_filesize'))
				['max' => ini_get('upload_max_filesize')]
			);
			break;
		case 2: /* UPLOAD_ERR_FORM_SIZE */
			$msg = _T(
				'medias:upload_limit',
				array('max' => ini_get('upload_max_filesize'))
				['max' => ini_get('upload_max_filesize')]
			);
			break;
		case 3: /* UPLOAD_ERR_PARTIAL  */
			$msg = _T(
				'medias:upload_limit',
				array('max' => ini_get('upload_max_filesize'))
				['max' => ini_get('upload_max_filesize')]
			);
			break;
		case 6: /* UPLOAD_ERR_NO_TMP_DIR  */
@@ -224,7 +252,8 @@ function joindre_upload_error($error) {
 * @return string
 */
function joindre_verifier_zip($files) {
	if (function_exists('gzopen')
	if (
		function_exists('gzopen')
		and (count($files) == 1)
		and !isset($files[0]['distant'])
		and
@@ -244,7 +273,8 @@ function joindre_verifier_zip($files) {

		// Est-ce qu'on sait le lire ?
		include_spip('inc/archives');
		if ($zip
		if (
			$zip
			and $archive = new Spip\Archives\SpipArchives($zip)
			and $infos = $archive->informer()
			and $contenu = joindre_decrire_contenu_zip($infos)
@@ -252,7 +282,7 @@ function joindre_verifier_zip($files) {
			and rename($zip, $tmp = $tmp . basename($zip))
		) {
			$zip_to_clean = (isset($GLOBALS['visiteur_session']['zip_to_clean']) ?
				unserialize($GLOBALS['visiteur_session']['zip_to_clean']) : array());
				unserialize($GLOBALS['visiteur_session']['zip_to_clean']) : []);
			$zip_to_clean[md5($tmp)] = $tmp;
			session_set('zip_to_clean', serialize($zip_to_clean));
			$contenu[] = $tmp;
@@ -281,15 +311,15 @@ function joindre_decrire_contenu_zip($infos) {
	}

	// Verifier si le contenu peut etre uploade (verif extension)
	$fichiers = array();
	$erreurs = array();
	$fichiers = [];
	$erreurs = [];
	foreach ($infos['fichiers'] as $file) {
		if (accepte_fichier_upload($f = $file['filename'])) {
			$fichiers[$f] = $file;
		} else // pas de message pour les dossiers et fichiers caches
		{
			if (substr($f, -1) !== '/' and substr(basename($f), 0, 1) !== '.') {
				$erreurs[] = _T('medias:erreur_upload_type_interdit', array('nom' => $f));
				$erreurs[] = _T('medias:erreur_upload_type_interdit', ['nom' => $f]);
			}
		}
	}
@@ -301,7 +331,7 @@ function joindre_decrire_contenu_zip($infos) {

	ksort($fichiers);

	return array($fichiers, $erreurs);
	return [$fichiers, $erreurs];
}


@@ -310,20 +340,22 @@ function joindre_deballer_lister_zip($path, $tmp_dir) {
	include_spip('inc/archives');
	$archive = new Spip\Archives\SpipArchives($path);

	if ($infos = $archive->informer()
	  and $contenu = joindre_decrire_contenu_zip($infos)) {
	if (
		$infos = $archive->informer()
		and $contenu = joindre_decrire_contenu_zip($infos)
	) {
		$fichiers = reset($contenu);
		$fichiers = array_column($fichiers, 'filename');
		if ($archive->deballer($tmp_dir, $fichiers)) {
			$files = [];
			foreach ($fichiers as $fichier) {
				$f = basename($fichier);
				$files[] = array(
				$files[] = [
					'tmp_name' => $tmp_dir . $fichier,
					'name' => $f,
					'titrer' => _request('options_deballe_zip_titrer'),
					'mode' => null
				);
				];
			}
			return $files;
		}
@@ -345,7 +377,8 @@ if (!function_exists('fixer_extension_document')) {
	function fixer_extension_document($doc) {
		$extension = '';
		$name = $doc['name'];
		if (preg_match(',\.([^.]+)$,', $name, $r)
		if (
			preg_match(',\.([^.]+)$,', $name, $r)
			and $t = sql_fetsel(
				'extension',
				'spip_types_documents',
@@ -361,7 +394,7 @@ if (!function_exists('fixer_extension_document')) {
			}
		}

		return array($extension, $name);
		return [$extension, $name];
	}
}

@@ -373,7 +406,8 @@ if (!function_exists('fixer_extension_document')) {
 * @return bool|int
 */
function accepte_fichier_upload($f) {
	if (!preg_match(',.*__MACOSX/,', $f)
	if (
		!preg_match(',.*__MACOSX/,', $f)
		and !preg_match(',^\.,', basename($f))
	) {
		include_spip('action/ajouter_documents');
@@ -385,4 +419,3 @@ function accepte_fichier_upload($f) {
		);
	}
}
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -66,7 +66,7 @@ function inc_marquer_doublons_doc_dist(
	$id_table_objet,
	$table_objet,
	$spip_table_objet,
	$desc = array(),
	$desc = [],
	$serveur = ''
) {

@@ -84,7 +84,7 @@ function inc_marquer_doublons_doc_dist(
	// Il faut récupérer toutes les données qui impactent les liens de documents vus
	// afin de savoir lesquels sont présents dans les textes, et pouvoir actualiser avec
	// les liens actuellement enregistrés.
	$absents = array();
	$absents = [];

	// Récupérer chaque champ impactant qui existe dans la table de l'objet et qui nous manque
	foreach ($GLOBALS['medias_liste_champs'] as $champ) {
@@ -111,24 +111,24 @@ function inc_marquer_doublons_doc_dist(
	$modeles = $modeles['modeles'];

	// liste d'id_documents trouvés dans les textes
	$GLOBALS['doublons_documents_inclus'] = array();
	$GLOBALS['doublons_documents_inclus'] = [];

	// detecter les doublons dans ces textes
	traiter_modeles(implode(' ', $champs), array('documents' => $modeles), '', '', null, array(
	traiter_modeles(implode(' ', $champs), ['documents' => $modeles], '', '', null, [
		'objet' => $type,
		'id_objet' => $id,
		$id_table_objet => $id
	));
	]);

	$texte_documents_vus = $GLOBALS['doublons_documents_inclus'];

	// on ne modifie les liaisons que si c'est nécessaire
	$bdd_documents_vus = array(
		'oui' => array(),
		'non' => array()
	);
	$bdd_documents_vus = [
		'oui' => [],
		'non' => []
	];

	$liaisons = objet_trouver_liens(array('document' => '*'), array($type => $id));
	$liaisons = objet_trouver_liens(['document' => '*'], [$type => $id]);
	foreach ($liaisons as $l) {
		$bdd_documents_vus[$l['vu']][] = $l['id_document'];
	}
@@ -145,12 +145,12 @@ function inc_marquer_doublons_doc_dist(
		$ids = array_column($ids, 'id_document');
		if ($ids) {
			// Creer le lien s'il n'existe pas déjà
			objet_associer(array('document' => $ids), array($type => $id), array('vu' => 'oui'));
			objet_qualifier_liens(array('document' => $ids), array($type => $id), array('vu' => 'oui'));
			objet_associer(['document' => $ids], [$type => $id], ['vu' => 'oui']);
			objet_qualifier_liens(['document' => $ids], [$type => $id], ['vu' => 'oui']);
		}
	}

	if ($anciens) {
		objet_qualifier_liens(array('document' => $anciens), array($type => $id), array('vu' => 'non'));
		objet_qualifier_liens(['document' => $anciens], [$type => $id], ['vu' => 'non']);
	}
}
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -45,7 +45,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
 *     - fichier : Chemin local du fichier s'il a été recopié
 */
function renseigner_source_distante($source) {
	static $infos = array();
	static $infos = [];
	if (isset($infos[$source])) {
		return $infos[$source];
	}
@@ -55,19 +55,22 @@ function renseigner_source_distante($source) {
	// qui est capable de renseigner complete
	// fichier et mode + tous les autres champs a son gout
	// ex : oembed
	$a = pipeline('renseigner_document_distant', array('source' => $source));
	$a = pipeline('renseigner_document_distant', ['source' => $source]);

	// si la source est encore la, en revenir a la
	// methode traditionnelle : chargement de l'url puis analyse
	if (!isset($a['fichier']) or !isset($a['mode'])) {
		if (!$a = recuperer_infos_distantes($a['source'])) {
			return _T('medias:erreur_chemin_distant', array('nom' => $source));
			return _T('medias:erreur_chemin_distant', ['nom' => $source]);
		}
		# NB: dans les bonnes conditions (fichier autorise et pas trop gros)
		# $a['fichier'] est une copie locale du fichier
		unset($a['body']);
		$a['distant'] = 'oui';
		$a['mode'] = 'document';
		if (!empty($a['fichier'])) {
			$a['copie_locale'] = $a['fichier'];
		}
		$a['fichier'] = set_spip_doc($source);
	}

@@ -100,12 +103,12 @@ function renseigner_source_distante($source) {
 */
function renseigner_taille_dimension_image($fichier, $ext, $distant = false) {

	$infos = array(
	$infos = [
		'largeur' => 0,
		'hauteur' => 0,
		'type_image' => '',
		'taille' => 0
	);
	];

	// Quelques infos sur le fichier
	if (
@@ -119,22 +122,22 @@ function renseigner_taille_dimension_image($fichier, $ext, $distant = false) {

			// recuperer un debut de fichier 512ko semblent suffire
			$tmp = _DIR_TMP . md5($fichier);
			$res = recuperer_url($fichier, array('file' => $tmp, 'taille_max' => 512 * 1024));
			$res = recuperer_url($fichier, ['file' => $tmp, 'taille_max' => 512 * 1024]);
			if (!$res) {
				spip_log("Echec copie du fichier $fichier", 'medias');

				return _T('medias:erreur_copie_fichier', array('nom' => $fichier));
				return _T('medias:erreur_copie_fichier', ['nom' => $fichier]);
			}
			$fichier = $tmp;
		} else {
			spip_log("Echec copie du fichier $fichier", 'medias');

			return _T('medias:erreur_copie_fichier', array('nom' => $fichier));
			return _T('medias:erreur_copie_fichier', ['nom' => $fichier]);
		}
	}

	// chercher une fonction de description
	$meta = array();
	$meta = [];
	if ($metadata = charger_fonction($ext, 'metadata', true)) {
		$meta = $metadata($fichier);
	} else {
@@ -146,7 +149,7 @@ function renseigner_taille_dimension_image($fichier, $ext, $distant = false) {

	$meta = pipeline(
		'renseigner_document',
		array('args' => array('extension' => $ext, 'fichier' => $fichier), 'data' => $meta)
		['args' => ['extension' => $ext, 'fichier' => $fichier], 'data' => $meta]
	);

	include_spip('inc/filtres'); # pour objet_info()
@@ -169,7 +172,8 @@ function sanitizer_document($fichier, $ext) {
	// verifier que le fichier existe, sinon on ne peut rien faire
	if (
		!$fichier
		or !@file_exists($fichier)) {
		or !@file_exists($fichier)
	) {
		return false;
	}
	if ($sanitizer = charger_fonction($ext, 'sanitizer', true)) {
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

/***************************************************************************\
 *  SPIP, Système de publication pour l'internet                           *
 *                                                                         *
@@ -17,12 +18,12 @@ function inc_verifier_document_mode_image_dist($infos) {

	// Si on veut uploader une image, il faut qu'elle ait ete bien lue
	if ($infos['inclus'] != 'image') {
		return _T('medias:erreur_format_fichier_image', array('nom' => $infos['fichier']));
		return _T('medias:erreur_format_fichier_image', ['nom' => $infos['fichier']]);
	}

	if (isset($infos['largeur']) and isset($infos['hauteur'])) {
		if (!($infos['largeur'] or $infos['hauteur'])) {
			return _T('medias:erreur_upload_vignette', array('nom' => $infos['fichier']));
			return _T('medias:erreur_upload_vignette', ['nom' => $infos['fichier']]);
		}
	}

Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

/***************************************************************************\
 *  SPIP, Système de publication pour l'internet                           *
 *                                                                         *
@@ -17,12 +18,12 @@ function inc_verifier_document_mode_vignette_dist($infos) {

	// Si on veut uploader une vignette, il faut qu'elle ait ete bien lue
	if ($infos['inclus'] != 'image') {
		return _T('medias:erreur_format_fichier_image', array('nom' => $infos['fichier']));
		return _T('medias:erreur_format_fichier_image', ['nom' => $infos['fichier']]);
	}

	if (isset($infos['largeur']) and isset($infos['hauteur'])) {
		if (!($infos['largeur'] or $infos['hauteur'])) {
			return _T('medias:erreur_upload_vignette', array('nom' => $infos['fichier']));
			return _T('medias:erreur_upload_vignette', ['nom' => $infos['fichier']]);
		}
	}

Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

/***************************************************************************\
 *  SPIP, Système de publication pour l'internet                           *
 *                                                                         *
@@ -84,7 +85,8 @@ function inc_verifier_taille_document_acceptable_dist(&$infos, $is_logo = false)
 */
function medias_verifier_largeur_hauteur_image(&$infos, $max_width = null, $max_height = null, $min_width = null, $min_height = null) {

	if (($max_width and $infos['largeur'] > $max_width)
	if (
		($max_width and $infos['largeur'] > $max_width)
		or ($max_height and $infos['hauteur'] > $max_height)
	) {
		// pas la peine d'embeter le redacteur avec ca si on a active le calcul des miniatures
@@ -104,34 +106,36 @@ function medias_verifier_largeur_hauteur_image(&$infos, $max_width = null, $max_
			}
		}

		if (($max_width and $infos['largeur'] > $max_width)
		if (
			($max_width and $infos['largeur'] > $max_width)
			or ($max_height and $infos['hauteur'] > $max_height)
		) {
			return _T(
				'medias:info_image_max_taille',
				array(
				[
					'maxi' =>
						_T(
							'info_largeur_vignette',
							array(
							[
								'largeur_vignette' => $max_width,
								'hauteur_vignette' => $max_height
							)
							]
						),
					'actuel' =>
						_T(
							'info_largeur_vignette',
							array(
							[
								'largeur_vignette' => $infos['largeur'],
								'hauteur_vignette' => $infos['hauteur']
							]
						)
						)
				)
				]
			);
		}
	}

	if (($min_width and $infos['largeur'] < $min_width)
	if (
		($min_width and $infos['largeur'] < $min_width)
		or ($min_height and $infos['hauteur'] < $min_height)
	) {
		if ($min_width and $max_width and $min_width > $max_width) {
@@ -143,24 +147,24 @@ function medias_verifier_largeur_hauteur_image(&$infos, $max_width = null, $max_

		return _T(
			'medias:info_image_min_taille',
			array(
			[
				'mini' =>
					_T(
						'info_largeur_vignette',
						array(
						[
							'largeur_vignette' => $min_width,
							'hauteur_vignette' => $min_height
						)
						]
					),
				'actuel' =>
					_T(
						'info_largeur_vignette',
						array(
						[
							'largeur_vignette' => $infos['largeur'],
							'hauteur_vignette' => $infos['hauteur']
						]
					)
					)
			)
			]
		);
	}

@@ -178,10 +182,10 @@ function medias_verifier_poids_fichier($infos, $max_size = null, $is_image = fal
	if ($max_size and $infos['taille'] > $max_size * 1024) {
		return _T(
			$is_image ? 'medias:info_image_max_poids' : 'medias:info_doc_max_poids',
			array(
			[
				'maxi' => taille_en_octets($max_size * 1024),
				'actuel' => taille_en_octets($infos['taille'])
			)
			]
		);
	}

Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

/***************************************************************************\
 *  SPIP, Système de publication pour l'internet                           *
 *                                                                         *
@@ -68,5 +69,5 @@ function inc_vignette_dist($ext, $size = true, $loop = true) {
		$hauteur = $size[1];
	}

	return array($v, $largeur, $hauteur);
	return [$v, $largeur, $hauteur];
}
+11 −8
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -5,7 +5,7 @@
	url="https://trad.spip.net"
	source="https://git.spip.net/spip/medias.git"
	reference="fr">
	<langue code="ar" url="https://trad.spip.net/tradlang_module/medias?lang_cible=ar" total="178" traduits="177" relire="0" modifs="0" nouveaux="1" pourcent="99.44">
	<langue code="ar" url="https://trad.spip.net/tradlang_module/medias?lang_cible=ar" total="178" traduits="178" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
		<traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
	</langue>
	<langue code="ast" url="https://trad.spip.net/tradlang_module/medias?lang_cible=ast" total="178" traduits="31" relire="0" modifs="3" nouveaux="144" pourcent="17.42">
@@ -25,14 +25,15 @@
	<langue code="cpf_hat" url="https://trad.spip.net/tradlang_module/medias?lang_cible=cpf_hat" total="178" traduits="24" relire="0" modifs="4" nouveaux="150" pourcent="13.48" />
	<langue code="cs" url="https://trad.spip.net/tradlang_module/medias?lang_cible=cs" total="178" traduits="27" relire="0" modifs="2" nouveaux="149" pourcent="15.17" />
	<langue code="da" url="https://trad.spip.net/tradlang_module/medias?lang_cible=da" total="178" traduits="11" relire="0" modifs="3" nouveaux="164" pourcent="6.18" />
	<langue code="de" url="https://trad.spip.net/tradlang_module/medias?lang_cible=de" total="178" traduits="176" relire="0" modifs="0" nouveaux="2" pourcent="98.88">
	<langue code="de" url="https://trad.spip.net/tradlang_module/medias?lang_cible=de" total="178" traduits="178" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
		<traducteur nom="kennethkeen" lien="https://trad.spip.net/auteur/kennethkeen" />
		<traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
		<traducteur nom="Rainer Müller" lien="https://trad.spip.net/auteur/rainer-muller" />
		<traducteur nom="Torsten Willmann" lien="https://trad.spip.net/auteur/torsten-willmann" />
	</langue>
	<langue code="el" url="https://trad.spip.net/tradlang_module/medias?lang_cible=el" total="178" traduits="14" relire="0" modifs="3" nouveaux="161" pourcent="7.87" />
	<langue code="en" url="https://trad.spip.net/tradlang_module/medias?lang_cible=en" total="178" traduits="177" relire="0" modifs="0" nouveaux="1" pourcent="99.44">
	<langue code="en" url="https://trad.spip.net/tradlang_module/medias?lang_cible=en" total="178" traduits="178" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
		<traducteur nom="comcinco" lien="https://trad.spip.net/auteur/comcinco-7293" />
		<traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
		<traducteur nom="Gilles" lien="https://trad.spip.net/auteur/gilles" />
		<traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
@@ -45,8 +46,9 @@
		<traducteur nom="gpl" lien="https://trad.spip.net/auteur/gpl" />
		<traducteur nom="Matthieu Marcillaud" lien="https://trad.spip.net/auteur/matthieu-marcillaud" />
	</langue>
	<langue code="es" url="https://trad.spip.net/tradlang_module/medias?lang_cible=es" total="178" traduits="164" relire="0" modifs="2" nouveaux="12" pourcent="92.13">
	<langue code="es" url="https://trad.spip.net/tradlang_module/medias?lang_cible=es" total="178" traduits="178" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
		<traducteur nom="b_b" lien="https://trad.spip.net/auteur/b_b" />
		<traducteur nom="comcinco" lien="https://trad.spip.net/auteur/comcinco-7293" />
		<traducteur nom="dani" lien="https://trad.spip.net/auteur/dani" />
		<traducteur nom="juanalbglz" lien="https://trad.spip.net/auteur/juanalbglz" />
		<traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
@@ -57,11 +59,11 @@
	</langue>
	<langue code="fon" url="https://trad.spip.net/tradlang_module/medias?lang_cible=fon" total="178" traduits="22" relire="0" modifs="4" nouveaux="152" pourcent="12.36" />
	<langue code="fr" url="https://trad.spip.net/tradlang_module/medias?lang_cible=fr" total="178" traduits="178" relire="0" modifs="0" nouveaux="0" pourcent="100.00" />
	<langue code="fr_fem" url="https://trad.spip.net/tradlang_module/medias?lang_cible=fr_fem" total="178" traduits="173" relire="0" modifs="0" nouveaux="5" pourcent="97.19">
	<langue code="fr_fem" url="https://trad.spip.net/tradlang_module/medias?lang_cible=fr_fem" total="178" traduits="178" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
		<traducteur nom="b_b" lien="https://trad.spip.net/auteur/b_b" />
		<traducteur nom="denisb" lien="https://trad.spip.net/auteur/denisb" />
	</langue>
	<langue code="fr_tu" url="https://trad.spip.net/tradlang_module/medias?lang_cible=fr_tu" total="178" traduits="171" relire="0" modifs="2" nouveaux="5" pourcent="96.07">
	<langue code="fr_tu" url="https://trad.spip.net/tradlang_module/medias?lang_cible=fr_tu" total="178" traduits="178" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
		<traducteur nom="beatnick" lien="https://trad.spip.net/auteur/beatnick" />
		<traducteur nom="RealET" lien="https://trad.spip.net/auteur/realet" />
	</langue>
@@ -72,7 +74,8 @@
	<langue code="hu" url="https://trad.spip.net/tradlang_module/medias?lang_cible=hu" total="178" traduits="25" relire="0" modifs="4" nouveaux="149" pourcent="14.04" />
	<langue code="id" url="https://trad.spip.net/tradlang_module/medias?lang_cible=id" total="178" traduits="24" relire="0" modifs="4" nouveaux="150" pourcent="13.48" />
	<langue code="is" url="https://trad.spip.net/tradlang_module/medias?lang_cible=is" total="178" traduits="7" relire="0" modifs="2" nouveaux="169" pourcent="3.93" />
	<langue code="it" url="https://trad.spip.net/tradlang_module/medias?lang_cible=it" total="178" traduits="153" relire="0" modifs="3" nouveaux="22" pourcent="85.96">
	<langue code="it" url="https://trad.spip.net/tradlang_module/medias?lang_cible=it" total="178" traduits="178" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
		<traducteur nom="Alberto" lien="https://trad.spip.net/auteur/alberto" />
		<traducteur nom="Julia14" lien="https://trad.spip.net/auteur/julia14" />
		<traducteur nom="phante" lien="https://trad.spip.net/auteur/phante" />
	</langue>
@@ -109,7 +112,7 @@
	<langue code="pt" url="https://trad.spip.net/tradlang_module/medias?lang_cible=pt" total="178" traduits="151" relire="0" modifs="3" nouveaux="24" pourcent="84.83">
		<traducteur nom="Cláudia Anjos Lopes" lien="https://trad.spip.net/auteur/claudia_a_lopes" />
	</langue>
	<langue code="pt_br" url="https://trad.spip.net/tradlang_module/medias?lang_cible=pt_br" total="178" traduits="176" relire="0" modifs="0" nouveaux="2" pourcent="98.88">
	<langue code="pt_br" url="https://trad.spip.net/tradlang_module/medias?lang_cible=pt_br" total="178" traduits="178" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
		<traducteur nom="placido" lien="https://trad.spip.net/auteur/placido" />
		<traducteur nom="quijaua" lien="https://trad.spip.net/auteur/quijaua" />
		<traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -152,6 +152,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'label_paginer_par' => 'تصفح حسب:',
	'label_parents' => 'هذا المستند مرتبط بـ',
	'label_refdoc_joindre' => 'مستند رقم',
	'label_titre_mimetype' => 'نوع الملفات',
	'lien_tout_desordonner' => 'إعادة تأصيل الترتيب',
	'lien_tout_desordonner_verif' => 'سيتم إعادة تأصيل ترتيب هذه اللائحة. هل تؤكدون ذلك؟',
	'lien_tout_enlever' => 'فك ربط الكل',
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -136,6 +136,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'info_telecharger' => 'Von Ihrem Computer hochladen:',
	'info_utilisation' => 'Verwendunge(en)',
	'infos' => 'Technische Informationen',
	'inserer_raccourci' => 'Kürzel in den Text einfügen',
	'item_autoriser_selectionner_date_en_ligne' => 'Festlegen eines Datums für jedes Dokument gestatten',
	'item_non_autoriser_selectionner_date_en_ligne' => 'Das Datum der Dokumente entspricht dem Zeitpunkt des Uploads.',

@@ -150,6 +151,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'label_paginer_par' => 'Seitenweise sortieren nach:',
	'label_parents' => 'Dieses Dokument gehört zu',
	'label_refdoc_joindre' => 'Dokument Nummer',
	'label_titre_mimetype' => 'Dateityp',
	'lien_tout_desordonner' => 'Sortierung zurücksetzen',
	'lien_tout_desordonner_verif' => 'Die Sortierung für diese Liste von Dokumenten wird zurückgesetzt. Sind Sie sicher?',
	'lien_tout_enlever' => 'Alle entfernen',
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -151,6 +151,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'label_paginer_par' => 'Paginate by:',
	'label_parents' => 'This document is linked to',
	'label_refdoc_joindre' => 'Document number',
	'label_titre_mimetype' => 'File type',
	'lien_tout_desordonner' => 'Reset the order',
	'lien_tout_desordonner_verif' => 'The order set for this list of documents will be reset. Are you sure?',
	'lien_tout_enlever' => 'Unlink all',
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -10,6 +10,9 @@ if (!defined('_ECRIRE_INC_VERSION')) {
$GLOBALS[$GLOBALS['idx_lang']] = array(

	// A
	'affichage_documents_en_cases' => 'Mostrar en cajas',
	'affichage_documents_en_grand' => 'Pantalla grande',
	'affichage_documents_en_liste_compacte' => 'Visualización compacta de la lista',
	'aucun_audio' => 'Ninguna pista de sonido',
	'aucun_document' => 'Ningún documento',
	'aucun_file' => 'Ningún documento',
@@ -39,8 +42,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'bouton_remplacer_image' => 'Sustituir esta imagen',
	'bouton_remplacer_image_document' => 'Sustituir por una imagen o documento',
	'bouton_supprimer' => 'Eliminar',
	'bouton_supprimer_tous_orphelins' => 'Eliminar todos documentos no utilizados', # MODIF
	'bouton_supprimer_tous_orphelins_confirmation' => '¿Está seguro de querer eliminar @nb@ documentos no utilizados?', # MODIF
	'bouton_supprimer_tous_orphelins' => 'Eliminar todos los documentos no utilizados',
	'bouton_supprimer_tous_orphelins_confirmation' => '¿Está seguro de querer eliminar @nb@ documentos no utilizados?',
	'bouton_upload' => 'Subir',

	// D
@@ -51,6 +54,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'des_utilisations' => '@nb@ usos',
	'des_videos' => '@nb@ secuencias',
	'descriptif' => 'Descripción',
	'details_document' => 'Detalles',
	'details_document_afficher_masquer' => 'Mostrar / ocultar los detalles del documento',
	'document_attache_succes' => 'El documento ha sido añadido',
	'document_copie_locale_succes' => '	El archivo ha sido copiado en el sitio',
@@ -76,11 +80,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'erreur_chemin_distant' => 'No se encontró el archivo remoto @nom@',
	'erreur_chemin_ftp' => 'El archivo indicado no se encuentra en el servidor',
	'erreur_copie_fichier' => 'No se puede copiar el archivo @nom@',
	'erreur_deplacement_impossible' => 'No se puede mover.',
	'erreur_dossier_tmp_manquant' => 'Falta una carpeta temporal para poder subir los archivos',
	'erreur_ecriture_fichier' => 'Error durante la escritura del archivo en disco',
	'erreur_format_fichier_image' => 'El formato de @nom@ no es adecuado para una imagen',
	'erreur_indiquez_un_fichier' => 'Especifique un archivo!',
	'erreur_insertion_document_base' => 'Imposible guardar el documento @fichier@ en la base de datos',
	'erreur_objet_absent' => 'Informaciones recibidas incompletas.',
	'erreur_suppression_vignette' => 'Error al eliminar la miniatura',
	'erreur_upload_type_interdit' => 'Descarga de archivos de tipo @nom@ no permitida',
	'erreur_upload_vignette' => 'Error al cargar miniatura @nom@',
@@ -99,6 +105,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'image_tourner_180' => 'Rotación de 180°',
	'image_tourner_droite' => 'Rotación de 90° a la derecha',
	'image_tourner_gauche' => 'Rotación de 90° a la izquierda',
	'info_alt' => 'Descripción del contenido de la imagen cuando no es visible, además del título.',
	'info_dimensions_image' => 'Tamaño',
	'info_doc_max_poids' => 'Los documentos deben tener un tamaño inferior a @maxi@ (este archivo es de @actuel@).',
	'info_document' => 'Documento',
@@ -111,6 +118,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'info_illustrations' => 'Ilustraciones',
	'info_image_max_poids' => 'Las imágenes deben obligatoriamente pesar menos de @maxi@ (este archivo pesa @actuel@).',
	'info_image_max_taille' => 'Las imágenes deben obligatoriamente pesar menos de @maxi@ (este archivo pesa @actuel@).',
	'info_image_min_taille' => 'Las imágenes deben ser como mínimo de @mini@ (ahora es de @actual@).',
	'info_inclusion_directe' => 'Inclusión directa:',
	'info_inclusion_vignette' => 'Inclusión de la miniatura:',
	'info_installer_tous_documents' => 'Instalar todos los documentos',
@@ -128,11 +136,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'info_telecharger' => 'Subir desde tu equipo:',
	'info_utilisation' => 'Uso(s)',
	'infos' => 'Información técnica',
	'inserer_raccourci' => 'Inserte este atajo en el texto',
	'item_autoriser_selectionner_date_en_ligne' => 'Permitir la modificación de la fecha de cada documento',
	'item_non_autoriser_selectionner_date_en_ligne' => 'La fecha de los documentos corresponde al momento en que fueron subidos al sitio web',

	// L
	'label_activer_document_objets' => 'Activar el poder subir archivos para los contenidos:',
	'label_alt' => 'Texto alternativo (alt)',
	'label_apercu' => 'Vista previa',
	'label_caracteristiques' => 'Características',
	'label_credits' => 'Créditos',
@@ -141,6 +151,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'label_paginer_par' => 'Paginar por:',
	'label_parents' => 'Este documento está relacionado con',
	'label_refdoc_joindre' => 'Documento número',
	'label_titre_mimetype' => 'Tipo de archivo',
	'lien_tout_desordonner' => 'Reinicializar le órden',
	'lien_tout_desordonner_verif' => 'El órden definido para esta lsita va a ser reinicializado. 
¿Seguro?',
@@ -162,6 +173,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	// O
	'objet_document' => 'Documento',
	'objet_documents' => 'Documentos',
	'ordonner_ce_document' => 'Ordenar este documento',

	// P
	'par_date' => 'Fecha',
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -105,6 +105,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'image_tourner_180' => 'Rotation 180°',
	'image_tourner_droite' => 'Rotation 90° à droite',
	'image_tourner_gauche' => 'Rotation 90° à gauche',
	'info_alt' => 'Description du contenu de l’image quand elle n’est pas visible, en complément du titre.',
	'info_dimensions_image' => 'Dimensions',
	'info_doc_max_poids' => 'Les documents doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).',
	'info_document' => 'Document',
@@ -117,6 +118,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'info_illustrations' => 'Illustrations',
	'info_image_max_poids' => 'Les images doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).',
	'info_image_max_taille' => 'Les images doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).',
	'info_image_min_taille' => 'Les images doivent obligatoirement faire au moins @mini@ (ce fichier fait @actuel@).',
	'info_inclusion_directe' => 'Inclusion directe :',
	'info_inclusion_vignette' => 'Inclusion de la vignette :',
	'info_installer_tous_documents' => 'Installer tous les documents',
@@ -134,11 +136,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'info_telecharger' => 'Télécharger depuis votre ordinateur :',
	'info_utilisation' => 'Utilisation(s)',
	'infos' => 'Infos techniques',
	'inserer_raccourci' => 'Insérer ce raccourci dans le texte',
	'item_autoriser_selectionner_date_en_ligne' => 'Permettre de modifier la date de chaque document',
	'item_non_autoriser_selectionner_date_en_ligne' => 'La date des documents est celle de leur ajout sur le site',

	// L
	'label_activer_document_objets' => 'Activer le téléversement pour les contenus :',
	'label_alt' => 'Alternative textuelle (alt)',
	'label_apercu' => 'Aperçu',
	'label_caracteristiques' => 'Caractéristiques',
	'label_credits' => 'Crédits',
@@ -147,6 +151,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'label_paginer_par' => 'Paginer par :',
	'label_parents' => 'Ce document est lié à',
	'label_refdoc_joindre' => 'Document numéro',
	'label_titre_mimetype' => 'Type de fichier',
	'lien_tout_desordonner' => 'Réinitialiser l’ordre',
	'lien_tout_desordonner_verif' => 'L’ordre définit pour cette liste de documents sera réinitialisé. Êtes-vous sûre ?',
	'lien_tout_enlever' => 'Tout détacher',
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -42,8 +42,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'bouton_remplacer_image' => 'Remplacer cette image',
	'bouton_remplacer_image_document' => 'Remplacer par une image ou un document',
	'bouton_supprimer' => 'Supprimer',
	'bouton_supprimer_tous_orphelins' => 'Supprimer tous les orphelins', # MODIF
	'bouton_supprimer_tous_orphelins_confirmation' => 'Es-tu sûr de vouloir supprimer @nb@ orphelins ?', # MODIF
	'bouton_supprimer_tous_orphelins' => 'Supprimer tous les documents inutilisés',
	'bouton_supprimer_tous_orphelins_confirmation' => 'Es-tu sûr de vouloir supprimer @nb@ documents inutilisés ?',
	'bouton_upload' => 'Téléverser',

	// D
@@ -105,6 +105,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'image_tourner_180' => 'Rotation 180°',
	'image_tourner_droite' => 'Rotation 90° à droite',
	'image_tourner_gauche' => 'Rotation 90° à gauche',
	'info_alt' => 'Description du contenu de l’image quand elle n’est pas visible, en complément du titre.',
	'info_dimensions_image' => 'Dimensions',
	'info_doc_max_poids' => 'Les documents doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).',
	'info_document' => 'Document',
@@ -117,6 +118,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'info_illustrations' => 'Illustrations',
	'info_image_max_poids' => 'Les images doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).',
	'info_image_max_taille' => 'Les images doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).',
	'info_image_min_taille' => 'Les images doivent obligatoirement faire au moins @mini@ (ce fichier fait @actuel@).',
	'info_inclusion_directe' => 'Inclusion directe :',
	'info_inclusion_vignette' => 'Inclusion de la vignette :',
	'info_installer_tous_documents' => 'Installer tous les documents',
@@ -134,11 +136,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'info_telecharger' => 'Télécharger depuis ton ordinateur :',
	'info_utilisation' => 'Utilisation(s)',
	'infos' => 'Infos techniques',
	'inserer_raccourci' => 'Insérer ce raccourci dans le texte',
	'item_autoriser_selectionner_date_en_ligne' => 'Permettre de modifier la date de chaque document',
	'item_non_autoriser_selectionner_date_en_ligne' => 'La date des documents est celle de leur ajout sur le site',

	// L
	'label_activer_document_objets' => 'Activer le téléversement pour les contenus :',
	'label_alt' => 'Alternative textuelle (alt)',
	'label_apercu' => 'Aperçu',
	'label_caracteristiques' => 'Caractéristiques',
	'label_credits' => 'Crédits',
@@ -147,6 +151,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'label_paginer_par' => 'Paginer par :',
	'label_parents' => 'Ce document est lié à',
	'label_refdoc_joindre' => 'Document numéro',
	'label_titre_mimetype' => 'Type de fichier',
	'lien_tout_desordonner' => 'Réinitialiser l’ordre',
	'lien_tout_desordonner_verif' => 'L’ordre définit pour cette liste de documents sera réinitialisé. Es-tu sûr ?',
	'lien_tout_enlever' => 'Tout détacher',
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -10,6 +10,9 @@ if (!defined('_ECRIRE_INC_VERSION')) {
$GLOBALS[$GLOBALS['idx_lang']] = array(

	// A
	'affichage_documents_en_cases' => 'Visualizza in box',
	'affichage_documents_en_grand' => 'Visualizza in grande',
	'affichage_documents_en_liste_compacte' => 'Visualizzazione elenco compatto',
	'aucun_audio' => 'Nessun suono',
	'aucun_document' => 'Nessun documento',
	'aucun_file' => 'Nessun documento',
@@ -39,8 +42,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'bouton_remplacer_image' => 'Sostituisci l’immagine',
	'bouton_remplacer_image_document' => 'Sostituisci con un’immagine o un documento',
	'bouton_supprimer' => 'Cancella',
	'bouton_supprimer_tous_orphelins' => 'Cancella tutti i non utilizzati', # MODIF
	'bouton_supprimer_tous_orphelins_confirmation' => 'Vuoi veramente cancellare @nb@ documenti non utilizzati?', # MODIF
	'bouton_supprimer_tous_orphelins' => 'Elimina tutti i documenti non utilizzati',
	'bouton_supprimer_tous_orphelins_confirmation' => 'Vuoi veramente eliminare @nb@ documenti non utilizzati?',
	'bouton_upload' => 'Carica',

	// D
@@ -51,6 +54,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'des_utilisations' => '@nb@ utilizzazioni',
	'des_videos' => '@nb@ video',
	'descriptif' => 'Descrizione',
	'details_document' => 'Dettagli',
	'details_document_afficher_masquer' => 'Visualizza/nascondi i dettagli del documento',
	'document_attache_succes' => 'Il documento è stato aggiunto con successo',
	'document_copie_locale_succes' => 'Il documento è stato copiato con successo nel sito',
	'document_installe_succes' => 'Il file è stato caricato con successo',
@@ -71,14 +76,17 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'entree_titre_image' => 'Titolo dell’immagine:',
	'erreur_aucun_document' => 'Il documento non esiste nella media library',
	'erreur_aucun_fichier' => 'Nessun file è stato trovato',
	'erreur_autorisation' => 'Autorizzazione fallita',
	'erreur_chemin_distant' => 'Il file remoto @nom@ non può essere trovato',
	'erreur_chemin_ftp' => 'Il file indicato non è stato trovato nel server',
	'erreur_copie_fichier' => 'Impossibile copiare il file @nom@',
	'erreur_deplacement_impossible' => 'Spostamento impossibile',
	'erreur_dossier_tmp_manquant' => 'La directory temporanea per scaricare il file è mancante',
	'erreur_ecriture_fichier' => 'Errore scrivendo il file sul disco',
	'erreur_format_fichier_image' => 'Il formato di @nom@ non è assimilabile a un’immagine',
	'erreur_indiquez_un_fichier' => 'Specifica un file!',
	'erreur_insertion_document_base' => 'Impossibile salvare il documento @fichier@ nel database',
	'erreur_objet_absent' => 'Informazioni ricevute incomplete',
	'erreur_suppression_vignette' => 'Errore durante la cancellazione della miniatura',
	'erreur_upload_type_interdit' => 'Il caricamento di file del tipo @nom@ non è consentito',
	'erreur_upload_vignette' => 'Errore caricando la miniatura  @nom@',
@@ -97,16 +105,20 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'image_tourner_180' => 'Ruota 180°',
	'image_tourner_droite' => 'Ruota 90° a destra',
	'image_tourner_gauche' => 'Ruota 90° a sinistra',
	'info_alt' => 'Descrizione del contenuto dell’immagine quando non è visibile, oltre al titolo.',
	'info_dimensions_image' => 'Dimensioni',
	'info_doc_max_poids' => 'Il documento deve necessariamente essere più piccolo di @maxi@ (il file è attualmente @actuel@).',
	'info_document' => 'Documento',
	'info_document_indisponible' => 'Questo documento non è disponibile',
	'info_documents' => 'Documenti',
	'info_duree' => 'Durata',
	'info_gauche_numero_document' => 'DOCUMENTO NUMERO',
	'info_hauteur' => 'Altezza',
	'info_heure' => 'Ora',
	'info_illustrations' => 'Illustrazioni',
	'info_image_max_poids' => 'L’immagine deve essere necessariamente grande meno di @maxi@ (il file è @actuel@).',
	'info_image_max_taille' => 'L’immagine deve essere necessariamente grande meno di @maxi@ (il file è @actuel@).',
	'info_image_min_taille' => 'Le immagini devono essere almeno @mini@ (questo file è @actuel@).',
	'info_inclusion_directe' => 'Inclusione diretta:',
	'info_inclusion_vignette' => 'Inclusione dell’immagine:',
	'info_installer_tous_documents' => 'Installare tutti i documenti',
@@ -116,16 +128,21 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'info_modifier_document' => 'Modifica il documento',
	'info_portfolio' => 'Portfolio',
	'info_referencer_doc_distant' => 'Mettere in repertorio un documento su Internet:',
	'info_resolution_image' => 'Risoluzione',
	'info_resolution_mpx' => '@resolution@ Mpx',
	'info_sans_vignette' => 'Nessuna miniatura',
	'info_statut_document' => 'Il documento è:',
	'info_taille' => 'Peso',
	'info_telecharger' => 'Upload dal tuo computer:',
	'info_utilisation' => 'Utilizzo(i)',
	'infos' => 'Informazioni tecniche',
	'inserer_raccourci' => 'Inserisci questa scorciatoia nel testo',
	'item_autoriser_selectionner_date_en_ligne' => 'Permetti di modificare la data di ogni documento',
	'item_non_autoriser_selectionner_date_en_ligne' => 'La data dei documenti è quella in cui sono stati aggiunti al sito.',

	// L
	'label_activer_document_objets' => 'Attiva il caricamento di documento per il contenuto:',
	'label_alt' => 'Testo alternativo (alt)',
	'label_apercu' => 'Anteprima',
	'label_caracteristiques' => 'Specifiche',
	'label_credits' => 'Crediti',
@@ -134,7 +151,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'label_paginer_par' => 'Impaginare da :',
	'label_parents' => 'Il documento è collegato a',
	'label_refdoc_joindre' => 'Documento numero',
	'lien_tout_enlever' => 'Rimuovi tutto', # MODIF
	'label_titre_mimetype' => 'Tipo di file',
	'lien_tout_desordonner' => 'Ripristina l’ordine',
	'lien_tout_desordonner_verif' => 'L’ordine definito per questo elenco di documenti verrà reimpostato. Sei sicuro?',
	'lien_tout_enlever' => 'Rimuovi tutto',
	'lien_tout_enlever_verif' => 'Vuoi staccare tutti i documenti?',
	'logo' => 'Logo',

	// M
@@ -151,6 +172,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	// O
	'objet_document' => 'Documento',
	'objet_documents' => 'Documenti',
	'ordonner_ce_document' => 'Ordina questo documento',

	// P
	'par_date' => 'Data',
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -136,6 +136,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'info_telecharger' => 'Transferir do seu computador:',
	'info_utilisation' => 'Utilização(ões)',
	'infos' => 'Exibir informações técnicas',
	'inserer_raccourci' => 'Inserir este atalho no texto',
	'item_autoriser_selectionner_date_en_ligne' => 'Permite modificar a data de cada documento',
	'item_non_autoriser_selectionner_date_en_ligne' => 'A data dos documentos é a mesma da incorporação ao site',

@@ -150,6 +151,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'label_paginer_par' => 'Paginar por:',
	'label_parents' => 'Este documento está relacionado a',
	'label_refdoc_joindre' => 'Número do documento',
	'label_titre_mimetype' => 'Tipo de arquivo',
	'lien_tout_desordonner' => 'Reinicializar a ordenação',
	'lien_tout_desordonner_verif' => 'A ordenação desta listagem de documentos será reinicializada. Você confirma?',
	'lien_tout_enlever' => 'Desvincular todos',
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -62,7 +62,8 @@ function medias_upgrade($nom_meta_base_version, $version_cible) {
	// cas typique d'un upgrade qui commence par suppression de connect.php
	// SPIP lance la maj des plugins lors de la connexion, alors que l'upgrade SPIP
	// a pas encore ete joue : ca casse cet upgrade quand on migre depuis un tres vieux SPIP
	if (isset($GLOBALS['meta']['version_installee'])
	if (
		isset($GLOBALS['meta']['version_installee'])
		and ($GLOBALS['spip_version_base'] != (str_replace(',', '.', $GLOBALS['meta']['version_installee'])))
	) {
		return;
@@ -70,146 +71,147 @@ function medias_upgrade($nom_meta_base_version, $version_cible) {

	if (!isset($GLOBALS['meta'][$nom_meta_base_version])) {
		$trouver_table = charger_fonction('trouver_table', 'base');
		if ($desc = $trouver_table('spip_documents')
		if (
			$desc = $trouver_table('spip_documents')
			and !isset($desc['field']['statut'])
		) {
			ecrire_meta($nom_meta_base_version, '0.1.0');
		}
	}

	$maj = array();
	$maj['create'] = array(
		array('maj_tables', array('spip_documents', 'spip_documents_liens', 'spip_types_documents')),
		array('creer_base_types_doc')
	);
	$maj['0.2.0'] = array(
		array('sql_alter', "TABLE spip_documents ADD statut varchar(10) DEFAULT '0' NOT NULL"),
	);
	$maj['0.3.0'] = array(
		array('sql_alter', "TABLE spip_documents ADD date_publication datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"),
	);
	$maj['0.4.0'] = array(
	$maj = [];
	$maj['create'] = [
		['maj_tables', ['spip_documents', 'spip_documents_liens', 'spip_types_documents']],
		['creer_base_types_doc']
	];
	$maj['0.2.0'] = [
		['sql_alter', "TABLE spip_documents ADD statut varchar(10) DEFAULT '0' NOT NULL"],
	];
	$maj['0.3.0'] = [
		['sql_alter', "TABLE spip_documents ADD date_publication datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"],
	];
	$maj['0.4.0'] = [
		// recalculer tous les statuts en tenant compte de la date de publi des articles...
		array('medias_check_statuts', true),
	);
	$maj['0.5.0'] = array(
		array('sql_alter', 'TABLE spip_documents ADD brise tinyint DEFAULT 0'),
	);
	$maj['0.6.0'] = array(
		array('sql_alter', "TABLE spip_types_documents ADD media varchar(10) DEFAULT 'file' NOT NULL"),
		array('creer_base_types_doc', '', 'media'),
	);
	$maj['0.7.0'] = array(
		array('sql_alter', "TABLE spip_documents ADD credits varchar(255) DEFAULT '' NOT NULL"),
	);
	$maj['0.10.0'] = array(
		array('sql_alter', "TABLE spip_documents CHANGE fichier fichier TEXT NOT NULL DEFAULT ''"),
	);
	$maj['0.11.0'] = array(
		array('sql_alter', "TABLE spip_documents CHANGE mode mode varchar(10) DEFAULT 'document' NOT NULL"),
	);
	$maj['0.14.0'] = array(
		array('medias_maj_meta_documents'),
		array('creer_base_types_doc', '', 'media'),
	);
	$maj['0.15.0'] = array(
		array('creer_base_types_doc', '', 'media'),
	);
	$maj['0.15.1'] = array(
		array('sql_alter', 'TABLE spip_documents CHANGE taille taille bigint'),
	);
	$maj['0.16.0'] = array(
		array('creer_base_types_doc', '', 'media'),
	);
		['medias_check_statuts', true],
	];
	$maj['0.5.0'] = [
		['sql_alter', 'TABLE spip_documents ADD brise tinyint DEFAULT 0'],
	];
	$maj['0.6.0'] = [
		['sql_alter', "TABLE spip_types_documents ADD media varchar(10) DEFAULT 'file' NOT NULL"],
		['creer_base_types_doc', '', 'media'],
	];
	$maj['0.7.0'] = [
		['sql_alter', "TABLE spip_documents ADD credits varchar(255) DEFAULT '' NOT NULL"],
	];
	$maj['0.10.0'] = [
		['sql_alter', "TABLE spip_documents CHANGE fichier fichier TEXT NOT NULL DEFAULT ''"],
	];
	$maj['0.11.0'] = [
		['sql_alter', "TABLE spip_documents CHANGE mode mode varchar(10) DEFAULT 'document' NOT NULL"],
	];
	$maj['0.14.0'] = [
		['medias_maj_meta_documents'],
		['creer_base_types_doc', '', 'media'],
	];
	$maj['0.15.0'] = [
		['creer_base_types_doc', '', 'media'],
	];
	$maj['0.15.1'] = [
		['sql_alter', 'TABLE spip_documents CHANGE taille taille bigint'],
	];
	$maj['0.16.0'] = [
		['creer_base_types_doc', '', 'media'],
	];

	$maj['1.0.0'] = array(
	$maj['1.0.0'] = [
		// on cree le champ en defaut '?' pour reperer les nouveaux a peupler
		array('sql_alter', "TABLE spip_documents ADD media varchar(10) DEFAULT '?' NOT NULL"),
		array('medias_peuple_media_document', 'media'),
		['sql_alter', "TABLE spip_documents ADD media varchar(10) DEFAULT '?' NOT NULL"],
		['medias_peuple_media_document', 'media'],
		// puis on retablit le bon defaut
		array('sql_alter', "TABLE spip_documents CHANGE media media varchar(10) DEFAULT 'file' NOT NULL"),
	);
	$maj['1.0.1'] = array(
		['sql_alter', "TABLE spip_documents CHANGE media media varchar(10) DEFAULT 'file' NOT NULL"],
	];
	$maj['1.0.1'] = [
		// puis on retablit le bon defaut
		array('sql_alter', "TABLE spip_types_documents CHANGE media media_defaut varchar(10) DEFAULT 'file' NOT NULL"),
	);
		['sql_alter', "TABLE spip_types_documents CHANGE media media_defaut varchar(10) DEFAULT 'file' NOT NULL"],
	];

	$maj['1.1.0'] = array(
		array('sql_alter', 'TABLE spip_documents_liens ADD INDEX id_objet (id_objet)'),
		array('sql_alter', 'TABLE spip_documents_liens ADD INDEX objet (objet)'),
	);
	$maj['1.1.1'] = array(
		array('creer_base_types_doc'),
	);
	$maj['1.1.0'] = [
		['sql_alter', 'TABLE spip_documents_liens ADD INDEX id_objet (id_objet)'],
		['sql_alter', 'TABLE spip_documents_liens ADD INDEX objet (objet)'],
	];
	$maj['1.1.1'] = [
		['creer_base_types_doc'],
	];
	// reparer les media sur les file suite a upgrade rate depuis SPIP 2.x
	$maj['1.2.0'] = array(
	$maj['1.2.0'] = [
		// on remet en ? tous les media=file
		array('sql_updateq', 'spip_documents', array('media' => '?'), "media='file'"),
		['sql_updateq', 'spip_documents', ['media' => '?'], "media='file'"],
		// et on repeuple
		array('medias_peuple_media_document'),
	);
	$maj['1.2.1'] = array(
		array('creer_base_types_doc'),
	);
	$maj['1.2.3'] = array(
		['medias_peuple_media_document'],
	];
	$maj['1.2.1'] = [
		['creer_base_types_doc'],
	];
	$maj['1.2.3'] = [
		// ajout de mbtiles
		array('creer_base_types_doc'),
		['creer_base_types_doc'],
		// reparer les clauses DEFAULT manquantes de maniere reccurente sur cette table
		array('sql_alter', "TABLE spip_documents CHANGE extension extension VARCHAR(10) DEFAULT '' NOT NULL"),
		array('sql_alter', "TABLE spip_documents CHANGE credits credits varchar(255) DEFAULT '' NOT NULL"),
		array('sql_alter', "TABLE spip_documents CHANGE statut statut varchar(10) DEFAULT '0' NOT NULL"),
	);
	$maj['1.2.4'] = array(
		['sql_alter', "TABLE spip_documents CHANGE extension extension VARCHAR(10) DEFAULT '' NOT NULL"],
		['sql_alter', "TABLE spip_documents CHANGE credits credits varchar(255) DEFAULT '' NOT NULL"],
		['sql_alter', "TABLE spip_documents CHANGE statut statut varchar(10) DEFAULT '0' NOT NULL"],
	];
	$maj['1.2.4'] = [
		// ajout de tar
		array('creer_base_types_doc')
	);
	$maj['1.2.5'] = array(
		['creer_base_types_doc']
	];
	$maj['1.2.5'] = [
		// ajout de json
		array('creer_base_types_doc')
	);
	$maj['1.2.6'] = array(
		['creer_base_types_doc']
	];
	$maj['1.2.6'] = [
		// ajout de md (markdown)
		array('creer_base_types_doc')
	);
	$maj['1.2.7'] = array(
		['creer_base_types_doc']
	];
	$maj['1.2.7'] = [
		// ajout de ics + vcf
		array('creer_base_types_doc')
	);
	$maj['1.3.0'] = array(
		['creer_base_types_doc']
	];
	$maj['1.3.0'] = [
		// ajout de rang_lien
		array('maj_tables', 'spip_documents_liens'),
	);
	$maj['1.3.1'] = array(
		['maj_tables', 'spip_documents_liens'],
	];
	$maj['1.3.1'] = [
		// plus de place dans les crédits
		array('sql_alter', "TABLE spip_documents CHANGE credits credits text DEFAULT '' NOT NULL"),
	);
	$maj['1.3.2'] = array(
		['sql_alter', "TABLE spip_documents CHANGE credits credits text DEFAULT '' NOT NULL"],
	];
	$maj['1.3.2'] = [
		// buggons en 2038 plutôt qu'en 2018'
		array('medias_check_statuts', true),
	);
	$maj['1.3.4'] = array(
		['medias_check_statuts', true],
	];
	$maj['1.3.4'] = [
		// 1.3.2 et 1.3.3 n'étaient pas suffisants grml'
		array('medias_maj_date_publication_documents'),
		array('medias_check_statuts', true)
	);
	$maj['1.3.5'] = array(
		['medias_maj_date_publication_documents'],
		['medias_check_statuts', true]
	];
	$maj['1.3.5'] = [
		// ajout de duree
		array('maj_tables', 'spip_documents'),
	);
	$maj['1.3.6'] = array(
		['maj_tables', 'spip_documents'],
	];
	$maj['1.3.6'] = [
		// ajout de vtt
		array('creer_base_types_doc')
	);
		['creer_base_types_doc']
	];

	$maj['1.4.0'] = array(
	$maj['1.4.0'] = [
		// update de SVG
		array('creer_base_types_doc')
	);
		['creer_base_types_doc']
	];

	$maj['1.5.0'] = array(
	$maj['1.5.0'] = [
		// ajout de webp
		array('creer_base_types_doc'),
	);
		['creer_base_types_doc'],
	];


	// upgrade des logos
@@ -220,15 +222,14 @@ function medias_upgrade($nom_meta_base_version, $version_cible) {
	};


	$maj['1.7.0'] = array(
	$maj['1.7.0'] = [
		// ajout de alt
		array('maj_tables', 'spip_documents'),
	);
		['maj_tables', 'spip_documents'],
	];

	include_spip('base/upgrade');
	include_spip('base/medias');
	maj_plugin($nom_meta_base_version, $version_cible, $maj);

}

/**
@@ -246,7 +247,7 @@ function medias_upgrade_logo_objet($objet) {
 * Maj des meta documents
 */
function medias_maj_meta_documents() {
	$config = array();
	$config = [];
	if (isset($GLOBALS['meta']['documents_article']) and $GLOBALS['meta']['documents_article'] !== 'non') {
		$config[] = 'spip_articles';
	}
@@ -261,7 +262,7 @@ function medias_peuple_media_document($champ_media = 'media_defaut') {
	while ($row = sql_fetch($res)) {
		// attention ici c'est encore le champ media, car on le renomme juste apres
		$media = sql_getfetsel($champ_media, 'spip_types_documents', 'extension=' . sql_quote($row['extension']));
		sql_updateq('spip_documents', array('media' => $media), 'media=' . sql_quote('?') . ' AND extension=' . sql_quote($row['extension']));
		sql_updateq('spip_documents', ['media' => $media], 'media=' . sql_quote('?') . ' AND extension=' . sql_quote($row['extension']));
		if (time() >= _TIME_OUT) {
			return;
		}
@@ -272,8 +273,8 @@ function medias_peuple_media_document($champ_media = 'media_defaut') {
 * Maj des date de publication des documents cf ticket #3329, z104221
 */
function medias_maj_date_publication_documents() {
	sql_update('spip_documents', array('statut' => '0'), 'date_publication > ' . sql_quote('2017-01-01 00:00:00'));
	sql_update('spip_documents', array('statut' => '0'), 'date_publication = ' . sql_quote('1970-01-01 01:33:58'));
	sql_update('spip_documents', ['statut' => '0'], 'date_publication > ' . sql_quote('2017-01-01 00:00:00'));
	sql_update('spip_documents', ['statut' => '0'], 'date_publication = ' . sql_quote('1970-01-01 01:33:58'));
}

/*
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -81,7 +81,8 @@ function autoriser_document_tailler_dist($faire, $type, $id, $qui, $options) {

	// (on ne le propose pas pour les images qu'on sait
	// lire : gif jpg png), sauf bug, ou document distant
	if (in_array($document['extension'], array('gif', 'jpg', 'png'))
	if (
		in_array($document['extension'], ['gif', 'jpg', 'png'])
		and $document['hauteur']
		and $document['largeur']
		and $document['distant'] != 'oui'
@@ -93,7 +94,8 @@ function autoriser_document_tailler_dist($faire, $type, $id, $qui, $options) {
	$extension = $document['extension'];
	$type_inclus = sql_getfetsel('inclus', 'spip_types_documents', 'extension=' . sql_quote($extension));

	if (($type_inclus == 'embed' or $type_inclus == 'image')
	if (
		($type_inclus == 'embed' or $type_inclus == 'image')
		and (
			// documents dont la taille est definie
			($document['largeur'] * $document['hauteur'])
@@ -156,7 +158,7 @@ function autoriser_joindredocument_dist($faire, $type, $id, $qui, $opt) {
 * @return bool          true s'il a le droit, false sinon
 */
function autoriser_document_modifier_dist($faire, $type, $id, $qui, $opt) {
	static $m = array();
	static $m = [];

	$q = $qui['id_auteur'];
	if (isset($m[$q][$id])) {
@@ -165,7 +167,8 @@ function autoriser_document_modifier_dist($faire, $type, $id, $qui, $opt) {

	$s = sql_getfetsel('statut', 'spip_documents', 'id_document=' . intval($id));
	// les admins ont le droit de modifier tous les documents existants
	if ($qui['statut'] == '0minirezo'
	if (
		$qui['statut'] == '0minirezo'
		and !$qui['restreint']
	) {
		return is_string($s) ? true : false;
@@ -210,7 +213,8 @@ function autoriser_document_modifier_dist($faire, $type, $id, $qui, $opt) {
 * @return bool          true s'il a le droit, false sinon
 */
function autoriser_document_supprimer_dist($faire, $type, $id, $qui, $opt) {
	if (!intval($id)
	if (
		!intval($id)
		or !$qui['id_auteur']
		or !autoriser('ecrire', '', '', $qui)
	) {
@@ -230,11 +234,13 @@ function autoriser_document_supprimer_dist($faire, $type, $id, $qui, $opt) {
		return !$id_document or autoriser('modifier', 'document', $id_document);
	}
	// si c'est un document annexe, se ramener a l'autorisation de son parent
	if ($id_document = sql_getfetsel(
	if (
		$id_document = sql_getfetsel(
			'id_objet',
			'spip_documents_liens',
			"objet='document' AND id_document=" . intval($id)
	)) {
		)
	) {
		return autoriser('modifier', 'document', $id_document);
	}

@@ -264,7 +270,8 @@ function autoriser_document_supprimer_dist($faire, $type, $id, $qui, $opt) {
 **/
function autoriser_document_voir_dist($faire, $type, $id, $qui, $opt) {

	if (!isset($GLOBALS['meta']['creer_htaccess'])
	if (
		!isset($GLOBALS['meta']['creer_htaccess'])
		or $GLOBALS['meta']['creer_htaccess'] != 'oui'
	) {
		return true;
@@ -274,7 +281,7 @@ function autoriser_document_voir_dist($faire, $type, $id, $qui, $opt) {
		return false;
	}

	if (in_array($qui['statut'], array('0minirezo', '1comite'))) {
	if (in_array($qui['statut'], ['0minirezo', '1comite'])) {
		return 'htaccess';
	}

@@ -282,13 +289,15 @@ function autoriser_document_voir_dist($faire, $type, $id, $qui, $opt) {
		foreach ($liens as $l) {
			$table_sql = table_objet_sql($l['objet']);
			$id_table = id_table_objet($l['objet']);
			if (sql_countsel(
			if (
				sql_countsel(
					$table_sql,
					"$id_table = " . intval($l['id_objet'])
					. (in_array($l['objet'], array('article', 'rubrique', 'breve'))
					. (in_array($l['objet'], ['article', 'rubrique', 'breve'])
					? " AND statut = 'publie'"
					: '')
			) > 0) {
				) > 0
			) {
				return 'htaccess';
			}
		}
@@ -327,7 +336,8 @@ function autoriser_autoassocierdocument_dist($faire, $type, $id, $qui, $opt) {
 * @return bool          true s'il a le droit, false sinon
 */
function autoriser_orphelins_supprimer_dist($faire, $type, $id, $qui, $opt) {
	if ($qui['statut'] == '0minirezo'
	if (
		$qui['statut'] == '0minirezo'
		and !$qui['restreint']
	) {
		return true;
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -23,7 +23,8 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}

// nettoyer les zip abandonnes par l'utilisateur
if (isset($GLOBALS['visiteur_session']['zip_to_clean'])
if (
	isset($GLOBALS['visiteur_session']['zip_to_clean'])
	and test_espace_prive()
	and isset($_SERVER['REQUEST_METHOD'])
	and $_SERVER['REQUEST_METHOD'] !== 'POST'
@@ -41,7 +42,8 @@ if (isset($GLOBALS['visiteur_session']['zip_to_clean'])

// capturer un formulaire POST plus grand que post_max_size
// on genere un minipres car on ne peut rien faire de mieux
if (isset($_SERVER['REQUEST_METHOD'])
if (
	isset($_SERVER['REQUEST_METHOD'])
	and $_SERVER['REQUEST_METHOD'] == 'POST'
	and empty($_POST)
	and isset($_SERVER['CONTENT_TYPE'])
@@ -50,7 +52,7 @@ if (isset($_SERVER['REQUEST_METHOD'])
	and $_SERVER['CONTENT_LENGTH'] > medias_inigetoctets('post_max_size')
) {
	include_spip('inc/minipres');
	echo minipres(_T('medias:upload_limit', array('max' => ini_get('post_max_size'))));
	echo minipres(_T('medias:upload_limit', ['max' => ini_get('post_max_size')]));
	exit;
}

@@ -167,19 +169,20 @@ function boucle_DOCUMENTS($id_boucle, &$boucles) {

	// on ne veut pas des fichiers de taille nulle,
	// sauf s'ils sont distants (taille inconnue)
	array_unshift($boucle->where, array("'($id_table.taille > 0 OR $id_table.distant=\\'oui\\')'"));
	array_unshift($boucle->where, ["'($id_table.taille > 0 OR $id_table.distant=\\'oui\\')'"]);

	/**
	 * N'afficher que les modes de documents que l'on accepte
	 * Utiliser le "pipeline medias_documents_visibles" pour en ajouter
	 */
	if (!isset($boucle->modificateur['criteres']['mode'])
	if (
		!isset($boucle->modificateur['criteres']['mode'])
		and !isset($boucle->modificateur['tout'])
	) {
		$modes = pipeline('medias_documents_visibles', array('image', 'document'));
		$modes = pipeline('medias_documents_visibles', ['image', 'document']);
		$f = sql_serveur('quote', $boucle->sql_serveur, true);
		$modes = addslashes(join(',', array_map($f, array_unique($modes))));
		array_unshift($boucle->where, array("'IN'", "'$id_table.mode'", "'($modes)'"));
		array_unshift($boucle->where, ["'IN'", "'$id_table.mode'", "'($modes)'"]);
	}

	return calculer_boucle($id_boucle, $boucles);
@@ -312,36 +315,37 @@ function medias_lister_methodes_upload($env) {
		$env = unserialize($env);
	}

	$methodes = array();
	$methodes = [];
	// méthodes d'upload disponibles
	$methodes = array();
	$methodes['upload'] = array('label_lien'=>_T('medias:bouton_download_local'),'label_bouton'=>_T('bouton_upload'));
	$methodes = [];
	$methodes['upload'] = ['label_lien' => _T('medias:bouton_download_local'),'label_bouton' => _T('bouton_upload')];

	if ((isset($env['mediatheque']) and $env['mediatheque'])) {
		$methodes['mediatheque'] = array('label_lien'=>_T('medias:bouton_download_par_mediatheque'),'label_bouton'=>_T('medias:bouton_attacher_document'));
		$methodes['mediatheque'] = ['label_lien' => _T('medias:bouton_download_par_mediatheque'),'label_bouton' => _T('medias:bouton_attacher_document')];
	}

	if ((isset($env['proposer_ftp']) and $env['proposer_ftp'])) {
		$methodes['ftp'] = array('label_lien'=>_T('medias:bouton_download_par_ftp'),'label_bouton'=>_T('bouton_choisir'));
		$methodes['ftp'] = ['label_lien' => _T('medias:bouton_download_par_ftp'),'label_bouton' => _T('bouton_choisir')];
	}
	$methodes['distant'] = array('label_lien'=>_T('medias:bouton_download_sur_le_web'),'label_bouton'=>_T('bouton_choisir'));
	$methodes['distant'] = ['label_lien' => _T('medias:bouton_download_sur_le_web'),'label_bouton' => _T('bouton_choisir')];

	// pipeline pour les méthodes d'upload
	$objet = isset($env['objet']) ? $env['objet'] : '';
	$id_objet = isset($env['id_objet']) ? $env['id_objet'] : '';

	$methodes = pipeline('medias_methodes_upload',
		array(
			'args' => array('objet' => $objet, 'id_objet' => $id_objet),
	$methodes = pipeline(
		'medias_methodes_upload',
		[
			'args' => ['objet' => $objet, 'id_objet' => $id_objet],
			'data' => $methodes
		)
		]
	);

	return $methodes;
}

function duree_en_secondes($duree, $precis = false) {
	$out = "";
	$out = '';
	$heures = $minutes = 0;
	if ($duree > 3600) {
		$heures = intval(floor($duree / 3600));
@@ -353,7 +357,7 @@ function duree_en_secondes($duree, $precis = false) {
	}

	if ($heures > 0 or $minutes > 0) {
		$out = _T('date_fmt_heures_minutes', array('h' => $heures, 'm' => $minutes));
		$out = _T('date_fmt_heures_minutes', ['h' => $heures, 'm' => $minutes]);
		if (!$heures) {
			$out = preg_replace(',^0[^\d]+,Uims', '', $out);
		}
@@ -371,14 +375,24 @@ function duree_en_secondes($duree, $precis = false) {
 * - avec une extension
 * - avec un mime_type donne
 *
 * => modeles/{modele_base}_emb_html.html si il existe
 * => modeles/{modele_base}_text_html.html si il existe,
 * => modeles/{modele_base}_text.html si il existe,
 * => modeles/{modele_base}.html sinon
 *  En priorité :
 *  - modeles/{modele_base}_emb_{extension}.html si il existe
 *  - modeles/{modele_base}_emb_{mimetype}.html si il existe,
 *          dans {mimetype}, les caractères non alphanumériques (typiquement '/') ont été remplacés par '_'.
 *          Par exemple "text/css" devient "text_css"
 *  - modeles/{modele_base}_emb_{mimetypeprincipal}.html si il existe
 *          {mimetypeprincipal} est la partie du mimetype avant le '/'. C'est par exemple 'text' pour 'text/css'
 *  - modeles/{modele_base} sinon
 *
 * Pour une image jpg cela donne par priorité :
 * modeles/image_emb_jpg.html
 * modeles/image_emb_image_jpeg.html
 * modeles/image_emb_image.html
 * modeles/image.html
 *
 * @param  $extension
 * @param  $mime_type
 * @return mixed
 * @param string $extension
 * @param string $mime_type
 * @return string
 */
function medias_trouver_modele_emb($extension, $mime_type, $modele_base = 'file') {
	if ($extension and trouve_modele($fond = $modele_base . '_emb_' . $extension)) {
@@ -429,12 +443,12 @@ function filtre_medias_modele_document_standard_classes_dist($Pile, $id_document
		$classes[] = 'spip_document_center';
	}
	if (!empty($var['legende'])) {
		$classes[] = "spip_document_avec_legende";
		$classes[] = 'spip_document_avec_legende';
	}
	if (!empty($env['class'])) {
		$classes[] = $env['class'];
	}
	return implode(" ", $classes);
	return implode(' ', $classes);
}


@@ -454,14 +468,14 @@ function filtre_medias_modele_document_standard_attributs_dist($Pile, $id_docume
	if (!empty($var['legende'])) {
		$len = spip_strlen(textebrut($var['legende']));
		// des x. "x" = 32 caratères, "xx" => 64, "xxx" => 128, etc...
		$lenx = medias_str_repeat_log($len, 2, "x", 4);
		$lenx = medias_str_repeat_log($len, 2, 'x', 4);
		$attrs['data-legende-len'] = $len;
		$attrs['data-legende-lenx'] = $lenx;
	}

	$res = "";
	$res = '';
	foreach ($attrs as $attr => $value) {
		$res .= "$attr=\"" . attribut_html($value) . "\""; 
		$res .= "$attr=\"" . attribut_html($value) . '"';
	};
	return $res;
}
@@ -535,7 +549,7 @@ function filtre_medias_modele_document_standard_attributs_dist($Pile, $id_docume
 *
 * @return string Des x
 */
function medias_str_repeat_log($num, $base = 2, $string = "x", $remove = 0) {
function medias_str_repeat_log($num, $base = 2, $string = 'x', $remove = 0) {
	$pad = str_repeat($string, (int)log($num, $base));
	return substr($pad, $remove);
}
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -33,7 +33,8 @@ if (!defined('_ECRIRE_INC_VERSION')) {
 *     Nom du squelette par défaut qui sera utilisé
 **/
function medias_detecter_fond_par_defaut($fond) {
	if (empty($_GET) and empty($_POST) and empty($_FILES)
	if (
		empty($_GET) and empty($_POST) and empty($_FILES)
		and isset($_SERVER['CONTENT_LENGTH'])
		and isset($_SERVER['CONTENT_TYPE'])
		and strstr($_SERVER['CONTENT_TYPE'], 'multipart/form-data;')
@@ -75,12 +76,12 @@ function medias_post_insertion($flux) {

		# utiliser l'api editer_lien pour les appels aux pipeline edition_lien
		include_spip('action/editer_liens');
		$liens = objet_trouver_liens(array('document' => '*'), array($objet => 0 - $id_auteur));
		$liens = objet_trouver_liens(['document' => '*'], [$objet => 0 - $id_auteur]);
		foreach ($liens as $lien) {
			objet_associer(array('document' => $lien['document']), array($objet => $id_objet), $lien);
			objet_associer(['document' => $lien['document']], [$objet => $id_objet], $lien);
		}
		// un simple delete pour supprimer les liens temporaires
		sql_delete('spip_documents_liens', array('id_objet = ' . (0 - $id_auteur), 'objet=' . sql_quote($objet)));
		sql_delete('spip_documents_liens', ['id_objet = ' . (0 - $id_auteur), 'objet=' . sql_quote($objet)]);
	}

	return $flux;
@@ -97,7 +98,7 @@ function medias_affiche_milieu($flux) {
	if ($flux['args']['exec'] == 'configurer_contenu') {
		$flux['data'] .= recuperer_fond(
			'prive/squelettes/inclure/configurer',
			array('configurer' => 'configurer_documents')
			['configurer' => 'configurer_documents']
		);
	}

@@ -146,8 +147,16 @@ function medias_post_edition($flux) {
			$table_objet = isset($flux['args']['table_objet']) ?
				$flux['args']['table_objet'] : table_objet($flux['args']['table'], $serveur);
			$marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc');
			$marquer_doublons_doc($flux['data'], $flux['args']['id_objet'], $type, id_table_objet($type, $serveur),
				$table_objet, $flux['args']['table'], '', $serveur);
			$marquer_doublons_doc(
				$flux['data'],
				$flux['args']['id_objet'],
				$type,
				id_table_objet($type, $serveur),
				$table_objet,
				$flux['args']['table'],
				'',
				$serveur
			);
		}

		if (($flux['args']['action'] and $flux['args']['action'] == 'instituer') or isset($flux['data']['statut'])) {
@@ -167,9 +176,16 @@ function medias_post_edition($flux) {
		if (isset($flux['args']['table']) and $flux['args']['table'] !== 'spip_documents') {
			// verifier les doublons !
			$marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc');
			$marquer_doublons_doc($flux['data'], $flux['args']['id_objet'], $flux['args']['type'],
				id_table_objet($flux['args']['type'], $serveur), $flux['args']['table_objet'],
				$flux['args']['spip_table_objet'], '', $serveur);
			$marquer_doublons_doc(
				$flux['data'],
				$flux['args']['id_objet'],
				$flux['args']['type'],
				id_table_objet($flux['args']['type'], $serveur),
				$flux['args']['table_objet'],
				$flux['args']['spip_table_objet'],
				'',
				$serveur
			);
		}
	}

@@ -186,7 +202,8 @@ function medias_post_edition($flux) {
 * @return array
 */
function medias_afficher_complement_objet($flux) {
	if ($type = $flux['args']['type']
	if (
		$type = $flux['args']['type']
		and $id = intval($flux['args']['id'])
	) {
		include_spip('inc/config');
@@ -221,7 +238,8 @@ function medias_afficher_complement_objet($flux) {
 *     Données du pipeline
 */
function medias_affiche_gauche($flux) {
	if ($en_cours = trouver_objet_exec($flux['args']['exec'])
	if (
		$en_cours = trouver_objet_exec($flux['args']['exec'])
		and $en_cours['edition'] !== false // page edition uniquement
		and $type = $en_cours['type']
		and $id_table_objet = $en_cours['id_table_objet']
@@ -233,7 +251,7 @@ function medias_affiche_gauche($flux) {
	) {
		$flux['data'] .= recuperer_fond(
			'prive/objets/editer/colonne_document',
			array('objet' => $type, 'id_objet' => $id)
			['objet' => $type, 'id_objet' => $id]
		);
	}

@@ -304,7 +322,8 @@ function medias_renseigner_document_distant($flux) {
 * @return array
 */
function medias_objet_compte_enfants($flux) {
	if ($objet = $flux['args']['objet']
	if (
		$objet = $flux['args']['objet']
		and $id = intval($flux['args']['id_objet'])
	) {
		// juste les publies ?
@@ -332,7 +351,8 @@ function medias_objet_compte_enfants($flux) {
 * @return array
 */
function medias_boite_infos($flux) {
	if ($flux['args']['type'] == 'rubrique'
	if (
		$flux['args']['type'] == 'rubrique'
		and $id_rubrique = $flux['args']['id']
	) {
		if ($nb = sql_countsel('spip_documents_liens', "objet='rubrique' AND id_objet=" . intval($id_rubrique))) {
@@ -357,14 +377,14 @@ function medias_boite_infos($flux) {
 * @return array      Données du pipeline
 **/
function medias_revisions_chercher_label($flux) {
	foreach (array('id_vignette', 'hauteur', 'largeur', 'mode', 'taille') as $champ) {
	foreach (['id_vignette', 'hauteur', 'largeur', 'mode', 'taille'] as $champ) {
		if ($flux['args']['champ'] == $champ) {
			$flux['data'] = 'medias:info_' . $champ;

			return $flux;
		}
	}
	foreach (array('fichier', 'taille', 'mode', 'credits') as $champ) {
	foreach (['fichier', 'taille', 'mode', 'credits'] as $champ) {
		if ($flux['args']['champ'] == $champ) {
			$flux['data'] = 'medias:label_' . $champ;

@@ -387,21 +407,24 @@ function medias_revisions_chercher_label($flux) {
 */
function medias_calculer_rubriques($flux) {
	$r = sql_select(
		"R.id_rubrique AS id, max(D.date) AS date_h",
		["spip_rubriques AS R", "spip_documents_liens AS DL", "spip_documents AS D"],
		'R.id_rubrique AS id, max(D.date) AS date_h',
		['spip_rubriques AS R', 'spip_documents_liens AS DL', 'spip_documents AS D'],
		[
			"R.id_rubrique = DL.id_objet",
			'R.id_rubrique = DL.id_objet',
			"DL.objet = 'rubrique'",
			"D.id_document = DL.id_document",
			'D.id_document = DL.id_document',
			"D.statut = 'publie'",
			"D.date > R.date_tmp",