Newer
Older

cedric@yterium.com
a validé
<?php
/**
* SPIP, Système de publication pour l'internet
*
* Copyright © avec tendresse depuis 2001
* Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James
*
* Ce programme est un logiciel libre distribué sous licence GNU/GPL.
*/

cedric@yterium.com
a validé

marcimat@rezo.net
a validé
/**

cedric@yterium.com
a validé
* Utilisations de pipelines

marcimat@rezo.net
a validé
*
* @package SPIP\Medias\Pipelines

cedric@yterium.com
a validé
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}

cedric@yterium.com
a validé
/**
* Traiter le cas pathologique d'un upload de document ayant echoué
* car étant trop gros
*
* @uses erreur_upload_trop_gros()
* @pipeline detecter_fond_par_defaut
* @param string $fond
* Nom du squelette par défaut qui sera utilisé
* @return string
* Nom du squelette par défaut qui sera utilisé

cedric@yterium.com
a validé
function medias_detecter_fond_par_defaut($fond) {
empty($_GET) && empty($_POST) && empty($_FILES) && isset($_SERVER['CONTENT_LENGTH']) && isset($_SERVER['CONTENT_TYPE']) && strstr(
(string) $_SERVER['CONTENT_TYPE'],
'multipart/form-data;'
)

cedric@yterium.com
a validé
) {

cedric@yterium.com
a validé
include_spip('inc/getdocument');
erreur_upload_trop_gros();
}

cedric@yterium.com
a validé
return $fond;

cedric@yterium.com
a validé
}

marcimat@rezo.net
a validé
/**
* À chaque insertion d'un nouvel objet editorial
* auquel on a attaché des documents, restituer l'identifiant
* du nouvel objet crée sur les liaisons documents/objet,
* qui ont ponctuellement un identifiant id_objet négatif.

cedric@yterium.com
a validé
*
* @see medias_affiche_gauche()
* @pipeline post_insertion

cedric@yterium.com
a validé
*
* @param array $flux
* Données du pipeline
* @return array
* Données du pipeline

cedric@yterium.com
a validé
function medias_post_insertion($flux) {

cedric@yterium.com
a validé

cedric@yterium.com
a validé
$objet = objet_type($flux['args']['table']);

marcimat@rezo.net
a validé
$id_objet = $flux['args']['id_objet'];
$id_auteur = $GLOBALS['visiteur_session']['id_auteur'] ?? 0;

cedric@yterium.com
a validé

cedric@yterium.com
a validé
if (autoriser('joindredocument', $objet, $id_objet) && $id_auteur) {

marcimat@rezo.net
a validé
# cf. HACK medias_affiche_gauche()

cedric@yterium.com
a validé
# rattrapper les documents associes a cet objet nouveau
# ils ont un id = 0-id_auteur

marcimat@rezo.net
a validé

cedric@yterium.com
a validé
# utiliser l'api editer_lien pour les appels aux pipeline edition_lien
include_spip('action/editer_liens');
$liens = objet_trouver_liens(['document' => '*'], [$objet => 0 - $id_auteur]);

cedric@yterium.com
a validé
foreach ($liens as $lien) {
objet_associer(['document' => $lien['document']], [$objet => $id_objet], $lien);

cedric@yterium.com
a validé
}
// un simple delete pour supprimer les liens temporaires
sql_delete('spip_documents_liens', ['id_objet = ' . (0 - $id_auteur), 'objet=' . sql_quote($objet)]);

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
return $flux;

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
/**
* Ajoute la configuration des documents à la page de configuration des contenus
*
* @pipeline affiche_milieu

cedric@yterium.com
a validé
* @param array $flux
* @return array
*/

cedric@yterium.com
a validé
function medias_affiche_milieu($flux) {
if ($flux['args']['exec'] == 'configurer_contenu') {
$flux['data'] .= recuperer_fond('prive/squelettes/inclure/configurer', ['configurer' => 'configurer_documents']);

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé

cedric@yterium.com
a validé
return $flux;
}
/**
* Définir les meta de configuration liées aux documents
*
* @pipeline configurer_liste_metas
* @param array $config
* Couples nom de la méta => valeur par défaut
* @return array
* Couples nom de la méta => valeur par défaut
*/

cedric@yterium.com
a validé
function medias_configurer_liste_metas($config) {

guy.cesaro@gmail.com
a validé
$config['documents_objets'] = 'spip_articles';

cedric@yterium.com
a validé
$config['documents_date'] = 'non';

cedric@yterium.com
a validé

cedric@yterium.com
a validé
return $config;

cedric@yterium.com
a validé
}
marcimat
a validé
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/**
* Compléter un début de traduction avec le logo de l’objet que l’on traduit
*
* @pipeline pre_edition
* @param array $flux
* @return array
*/
function medias_pre_edition($flux) {
if ($flux['args']['action'] === 'completer_traduction') {
$table = $flux['args']['table'];
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table($table);
if (!empty($desc['field']['id_trad'])) {
$_id_table = id_table_objet($table);
$objet = $flux['args']['objet'];
$id_objet = intval($flux['args']['id_objet']);
$id_trad = sql_getfetsel('id_trad', $table, $_id_table . '=' . $id_objet);
// recuperer le logo
$chercher_logo = charger_fonction('chercher_logo', 'inc');
include_spip('action/editer_logo');
foreach (['on', 'off'] as $etat) {
$logo = $chercher_logo($id_trad, $_id_table, $etat);
if ($logo && ($file = reset($logo))) {
logo_modifier($objet, $id_objet, $etat, $file);
}
}
}
}
return $flux;
}
/**
* Institue ou met à jour les liens de documents après l'édition d'un objet
*
* @pipeline post_edition
* @param array $flux
* Données du pipeline
* @return array
* Données du pipeline

cedric@yterium.com
a validé
function medias_post_edition($flux) {

marcimat@rezo.net
a validé
// le serveur n'est pas toujours la
$serveur = ($flux['args']['serveur'] ?? '');

cedric@yterium.com
a validé
// si on ajoute un document, mettre son statut a jour
if (isset($flux['args']['action']) && $flux['args']['action'] == 'ajouter_document') {

cedric@yterium.com
a validé
include_spip('action/editer_document');
// mettre a jour le statut si necessaire
document_instituer($flux['args']['id_objet']);

cedric@yterium.com
a validé
} // si on institue un objet, mettre ses documents lies a jour
elseif (isset($flux['args']['table']) && $flux['args']['table'] !== 'spip_documents') {
$type = $flux['args']['type'] ?? objet_type($flux['args']['table']);

cedric@yterium.com
a validé
// verifier d'abord les doublons !
include_spip('inc/autoriser');

cedric@yterium.com
a validé
if (autoriser('autoassocierdocument', $type, $flux['args']['id_objet'])) {
$table_objet = $flux['args']['table_objet'] ?? table_objet($flux['args']['table'], $serveur);

cedric@yterium.com
a validé
$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
);

cedric@yterium.com
a validé
}
if ($flux['args']['action'] && $flux['args']['action'] == 'instituer' || isset($flux['data']['statut'])) {

cedric@yterium.com
a validé
include_spip('base/abstract_sql');
$id = $flux['args']['id_objet'];
$docs = array_column(
sql_allfetsel('id_document', 'spip_documents_liens', 'id_objet=' . intval($id) . ' AND objet=' . sql_quote($type)),
'id_document'

cedric@yterium.com
a validé
include_spip('action/editer_document');
foreach ($docs as $id_document) {
// mettre a jour le statut si necessaire
document_instituer($id_document);

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
} else {
if (isset($flux['args']['table']) && $flux['args']['table'] !== 'spip_documents') {

cedric@yterium.com
a validé
// verifier les doublons !

cedric@yterium.com
a validé
$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
);

cedric@yterium.com
a validé
}
}

cedric@yterium.com
a validé

cedric@yterium.com
a validé
return $flux;
}
* Ajouter le portfolio et ajout de document sur les fiches objet

cedric@yterium.com
a validé
*
* Uniquement sur les objets pour lesquelles les medias ont été activés
*
* @pipeline afficher_complement_objet
* @param array $flux
* @return array

cedric@yterium.com
a validé
function medias_afficher_complement_objet($flux) {
($type = $flux['args']['type'])
&& ($id = intval($flux['args']['id']))

cedric@yterium.com
a validé
) {

gouz@root-me.org
a validé
include_spip('inc/config');
include_spip('action/editer_liens');
// document autorisé en upload sur cet objet ? ou, y a t'il déja des docs attachés ?
$existe_docs = count(objet_trouver_liens(['document' => '*'], [$type => $id]));
if ($existe_docs || $type == 'article' || in_array(
explode(',', (string) lire_config('documents_objets', ''))

gouz@root-me.org
a validé
$documenter_objet = charger_fonction('documenter_objet', 'inc');
$flux['data'] .= $documenter_objet($id, $type);
}

cedric@yterium.com
a validé
return $flux;

marcimat@rezo.net
a validé
/**
* Ajoute le formulaire d'ajout de document au formulaire d'édition

marcimat@rezo.net
a validé
* d'un objet (lorsque cet objet peut recevoir des documents).
*
* @note
* HACK : Lors d'une première création de l'objet, celui-ci n'ayant pas
* encore d'identifiant tant que le formulaire d'édition n'est pas enregistré,
* les liaisions entre les documents liés et l'objet à créer sauvegardent
* un identifiant d'objet négatif de la valeur de id_auteur (l'auteur
* connecte). Ces liaisons seront corrigées après validation dans
* le pipeline medias_post_insertion()
*
* @pipeline affiche_gauche
* @see medias_post_insertion()

cedric@yterium.com
a validé
*
* @param array $flux
* Données du pipeline
* @return array
* Données du pipeline

marcimat@rezo.net
a validé
*/

cedric@yterium.com
a validé
function medias_affiche_gauche($flux) {
($en_cours = trouver_objet_exec($flux['args']['exec']))
&& $en_cours['edition'] !== false
&& ($type = $en_cours['type'])
&& ($id_table_objet = $en_cours['id_table_objet'])
&& (
isset($flux['args'][$id_table_objet]) && ($id = intval($flux['args'][$id_table_objet]))
|| ($id = 0 - $GLOBALS['visiteur_session']['id_auteur'])
)
&& autoriser('joindredocument', $type, $id)

cedric@yterium.com
a validé
) {
$flux['data'] .= recuperer_fond('prive/objets/editer/colonne_document', ['objet' => $type, 'id_objet' => $id]);

cedric@yterium.com
a validé
}
return $flux;
}
/**
* Utilisation du pipeline document_desc_actions
*
* Ne fait rien ici.
*
* Ce pipeline permet aux plugins d'ajouter de boutons d'action supplémentaires
* sur les formulaires d'ajouts de documents
*
* @pipeline document_desc_actions
* @param array $flux
* Données du pipeline
* @return array
* Données du pipeline

cedric@yterium.com
a validé
function medias_document_desc_actions($flux) {

cedric@yterium.com
a validé
return $flux;
}
/**
* Utilisation du pipeline editer_document_actions
*
* Ne fait rien ici.
*
* Ce pipeline permet aux plugins d'ajouter de boutons d'action supplémentaires
* sur les formulaires d'édition de documents
*
* @pipeline editer_document_actions
* @param array $flux
* Données du pipeline
* @return array
* Données du pipeline

cedric@yterium.com
a validé
function medias_editer_document_actions($flux) {

cedric@yterium.com
a validé
return $flux;

cedric@yterium.com
a validé
}
/**
* Utilisation du pipeline renseigner_document_distant
*
* Ne fait rien ici.
*
* Ce pipeline permet aux plugins de renseigner les clés `fichier` et
* `mode` d'un document distant à partir de l'URL du fichier dans
* la clé `source`.
*
* @see renseigner_source_distante()
* @pipeline renseigner_document_distant
* @param array $flux
* Données du pipeline
* @return array
* Données du pipeline

cedric@yterium.com
a validé
function medias_renseigner_document_distant($flux) {

kent1@arscenic.info
a validé
return $flux;
}

cedric@yterium.com
a validé
/**
* Compter les documents dans un objet
*

cedric@yterium.com
a validé
* @param array $flux
* @return array
*/

cedric@yterium.com
a validé
function medias_objet_compte_enfants($flux) {
($objet = $flux['args']['objet']) && ($id = intval($flux['args']['id_objet']))

cedric@yterium.com
a validé
) {

cedric@yterium.com
a validé
// juste les publies ?
if (array_key_exists('statut', $flux['args']) && $flux['args']['statut'] == 'publie') {
$flux['data']['document'] = sql_countsel(
'spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document',
'L.objet=' . sql_quote($objet) . 'AND L.id_objet=' . intval(
$id
) . " AND (D.statut='publie') and D.mode NOT IN ('logoon','logoff') "

cedric@yterium.com
a validé
} else {
$flux['data']['document'] = sql_countsel(
'spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document',
'L.objet=' . sql_quote($objet) . 'AND L.id_objet=' . intval(
$id
) . " AND (D.statut='publie' OR D.statut='prepa') and D.mode NOT IN ('logoon','logoff')"

cedric@yterium.com
a validé
}
}

cedric@yterium.com
a validé

cedric@yterium.com
a validé
return $flux;
}
/**
* Afficher le nombre de documents dans chaque rubrique
*
* @param array $flux
* @return array
*/

cedric@yterium.com
a validé
function medias_boite_infos($flux) {
$flux['args']['type'] == 'rubrique'
&& ($id_rubrique = $flux['args']['id'])

cedric@yterium.com
a validé
) {
if ($nb = sql_countsel('spip_documents_liens', "objet='rubrique' AND id_objet=" . intval($id_rubrique))) {
$nb = '<div>' . singulier_ou_pluriel($nb, 'medias:un_document', 'medias:des_documents') . '</div>';
if ($p = strpos((string) $flux['data'], '<!--nb_elements-->')) {

cedric@yterium.com
a validé
$flux['data'] = substr_replace($flux['data'], $nb, $p, 0);
}

cedric@yterium.com
a validé
/**
* Insertion dans le pipeline revisions_chercher_label (Plugin révisions)
* Trouver le bon label à afficher sur les champs dans les listes de révisions

cedric@yterium.com
a validé
*
* Si un champ est un champ extra, son label correspond au label défini du champs extra

cedric@yterium.com
a validé
*
* @pipeline revisions_chercher_label
* @param array $flux Données du pipeline
* @return array Données du pipeline

cedric@yterium.com
a validé
function medias_revisions_chercher_label($flux) {
foreach (['id_vignette', 'hauteur', 'largeur', 'mode', 'taille'] as $champ) {

cedric@yterium.com
a validé
if ($flux['args']['champ'] == $champ) {

teddy.spip@gmail.com
a validé
$flux['data'] = 'medias:info_' . $champ;

cedric@yterium.com
a validé
return $flux;
}
}
foreach (['fichier', 'taille', 'mode', 'credits'] as $champ) {

cedric@yterium.com
a validé
if ($flux['args']['champ'] == $champ) {

teddy.spip@gmail.com
a validé
$flux['data'] = 'medias:label_' . $champ;

cedric@yterium.com
a validé
return $flux;
}
}

cedric@yterium.com
a validé
if ($flux['args']['champ'] == 'distant') {

teddy.spip@gmail.com
a validé
$flux['data'] = $flux['data'] = 'medias:fichier_distant';

cedric@yterium.com
a validé
}

marcimat@rezo.net
a validé
}
/**
* Publier une rubrique ayant un document joint…
*
* @param array $flux
* @return array
*/
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 = DL.id_objet',
"DL.objet = 'rubrique'",
'D.id_document = DL.id_document',
"D.statut = 'publie'",
],
);
while ($row = sql_fetch($r)) {
sql_updateq(
'spip_rubriques',
['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']],
'id_rubrique=' . $row['id']
);
}
return $flux;