Valider 0ef8d61e rédigé par marcimat@rezo.net's avatar marcimat@rezo.net
Parcourir les fichiers

Intégration du plugin "Ordoc" dans Médias.

Cela permet d'ordonner les documents attachés à des objets éditoriaux. L'ordre est stocké dans la colonne "rang_lien" de la table "spip_documents_liens".
parent bf62b7fa
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+3 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -5,6 +5,7 @@ action/changer_mode_document.php -text
action/copier_local.php -text
action/dissocier_document.php -text
action/editer_document.php -text
action/ordonner_liens_documents.php -text
action/supprimer_document.php -text
action/supprimer_tous_orphelins.php -text
action/tourner.php -text
@@ -282,6 +283,8 @@ prive/themes/spip/images/base/video-16.png -text
prive/themes/spip/images/base/video-22.png -text
prive/themes/spip/images/base/video-32.png -text
prive/themes/spip/images/base/vu-16.png -text
prive/themes/spip/images/deplacer-16.png -text
prive/themes/spip/images/deplacer-24.png -text
prive/themes/spip/images/distant-16.png -text
prive/themes/spip/images/doc-16.png -text
prive/themes/spip/images/doc-24.png -text
+103 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

/**
 * Action ordonnant un lien sur une table de liens
 *
 * @plugin     Medias
 * @copyright  2017
 * @author     Matthieu Marcillaud
 * @licence    GNU/GPL
 * @package    SPIP\Ordoc\Action
 */

if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}

function action_ordonner_liens_documents_dist() {
	action_ordonner_liens_dist();
}


function action_ordonner_liens_dist() {
	include_spip('inc/autoriser');
	include_spip('base/objets');
	include_spip('action/editer_liens');

	// source (table spip_xx_liens)
	$objet = objet_type(_request('objet_source'));

	// objet lié
	$objet_lie = _request('objet_lie');
	$id_objet_lie = intval(_request('id_objet_lie'));

	// ordre des éléments
	$ordre = _request('ordre');

	if (!$objet or !$objet_lie or !$id_objet_lie OR !$ordre or !objet_associable($objet)) {
		return envoyer_json_erreur(_T('medias:erreur_objet_absent') . ' ' . _T('medias:erreur_deplacement_impossible'));
	}

	if (!autoriser('modifier', $objet_lie, $id_objet_lie)) {
		return envoyer_json_erreur(_T('medias:erreur_autorisation') . ' ' . _T('medias:erreur_deplacement_impossible'));
	}

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

	$success = $errors = array();

	$actuels = sql_allfetsel(
		array($_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++; });

	$updates = array();

	foreach ($actuels as $l) {
		if ($futurs[$l['id']] !== $l['rang_lien']) {
			$updates[$l['id']] = $futurs[$l['id']];
		}
	}

	if ($updates) {
		foreach ($updates as $id => $ordre) {
			sql_updateq(
				$table_liens,
				array('rang_lien' => $ordre),
				array(
					$_id_objet . ' = ' . $id,
					'objet = ' . sql_quote($objet_lie),
					'id_objet = ' . sql_quote($id_objet_lie)
				)
			);
		}
	}

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

function envoyer_json_envoi($data) {
	header('Content-Type: application/json; charset=' . $GLOBALS['meta']['charset']);
	echo json_encode($data);
}

function envoyer_json_erreur($msg) {
	return envoyer_json_envoi(array(
		'done' => false,
		'success' => array(),
		'errors' => array($msg)
	));
}
+2 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -87,7 +87,8 @@ function medias_declarer_tables_auxiliaires($tables_auxiliaires) {
		'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"
		'vu' => "ENUM('non', 'oui') DEFAULT 'non' NOT NULL",
		'rang_lien' => "int(4) DEFAULT '0' NOT NULL"
	);

	$spip_documents_liens_key = array(
+4 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -74,14 +74,17 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'entree_titre_image' => 'Titre de l’image :',
	'erreur_aucun_document' => 'Ce document n’existe pas dans la médiathèque',
	'erreur_aucun_fichier' => 'Aucun fichier n’a été trouvé',
	'erreur_autorisation' => 'Échec de l’autorisation.',
	'erreur_chemin_distant' => 'Le fichier distant @nom@ n’a pas pu être trouvé',
	'erreur_chemin_ftp' => 'Le fichier indiqué n’a pas été trouvé sur le serveur',
	'erreur_copie_fichier' => 'Impossible de copier le fichier @nom@',
	'erreur_deplacement_impossible' => 'Déplacement impossible.',
	'erreur_dossier_tmp_manquant' => 'Un dossier temporaire est manquant pour télécharger les fichiers',
	'erreur_ecriture_fichier' => 'Erreur lors de l’écriture du fichier sur le disque',
	'erreur_format_fichier_image' => 'Le format de @nom@ ne convient pas pour une image',
	'erreur_indiquez_un_fichier' => 'Indiquez un fichier !',
	'erreur_insertion_document_base' => 'Impossible d’enregistrer le document @fichier@ en base de données',
	'erreur_objet_absent' => 'Informations reçues incomplètes.',
	'erreur_suppression_vignette' => 'Erreur lors de la suppression de la vignette',
	'erreur_upload_type_interdit' => 'Le téléchargement des fichiers du type de @nom@ n’est pas autorisé',
	'erreur_upload_vignette' => 'Erreur lors du chargement de la vignette @nom@',
@@ -155,6 +158,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	// O
	'objet_document' => 'Document',
	'objet_documents' => 'Documents',
	'ordonner_ce_document' => 'Ordonner ce document',

	// P
	'par_date' => 'Date',
+4 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -169,6 +169,10 @@ function medias_upgrade($nom_meta_base_version, $version_cible) {
		// ajout de ics + vcf
		array('creer_base_types_doc')
	);
	$maj['1.3.0'] = array(
		// ajout de rang_lien
		array('maj_tables', 'spip_documents_liens'),
	);
	include_spip('base/upgrade');
	include_spip('base/medias');
	maj_plugin($nom_meta_base_version, $version_cible, $maj);
Chargement en cours