medias_pipelines.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2014 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined('_ECRIRE_INC_VERSION')) return;
  12. function medias_detecter_fond_par_defaut($fond){
  13. // traiter le cas pathologique d'un upload de document ayant echoue
  14. // car trop gros
  15. if (empty($_GET) AND empty($_POST) AND empty($_FILES)
  16. AND isset($_SERVER["CONTENT_LENGTH"])
  17. AND strstr($_SERVER["CONTENT_TYPE"], "multipart/form-data;")) {
  18. include_spip('inc/getdocument');
  19. erreur_upload_trop_gros();
  20. }
  21. return $fond;
  22. }
  23. /**
  24. * A chaque insertion d'un nouvel objet editorial
  25. * auquel on a attache des documents, restituer l'identifiant
  26. * du nouvel objet cree sur les liaisons documents/objet,
  27. * qui ont ponctuellement un identifiant id_objet negatif.
  28. * cf. medias_affiche_gauche()
  29. **/
  30. function medias_post_insertion($flux){
  31. $objet = objet_type($flux['args']['table']);
  32. $id_objet = $flux['args']['id_objet'];
  33. include_spip('inc/autoriser');
  34. if (autoriser('joindredocument', $objet, $id_objet)
  35. AND $id_auteur = intval($GLOBALS['visiteur_session']['id_auteur'])){
  36. # cf. HACK medias_affiche_gauche()
  37. # rattrapper les documents associes a cet objet nouveau
  38. # ils ont un id = 0-id_auteur
  39. # utiliser l'api editer_lien pour les appels aux pipeline edition_lien
  40. include_spip('action/editer_liens');
  41. $liens = objet_trouver_liens(array('document'=>'*'),array($objet=>0-$id_auteur));
  42. foreach($liens as $lien){
  43. objet_associer(array('document'=>$lien['document']),array($objet=>$id_objet),$lien);
  44. }
  45. // un simple delete pour supprimer les liens temporaires
  46. sql_delete("spip_documents_liens", array("id_objet = ".(0-$id_auteur),"objet=".sql_quote($objet)));
  47. }
  48. return $flux;
  49. }
  50. /**
  51. * Configuration des contenus
  52. * @param array $flux
  53. * @return array
  54. */
  55. function medias_affiche_milieu($flux){
  56. if ($flux["args"]["exec"] == "configurer_contenu") {
  57. $flux["data"] .= recuperer_fond('prive/squelettes/inclure/configurer',array('configurer'=>'configurer_documents'));
  58. }
  59. return $flux;
  60. }
  61. function medias_configurer_liste_metas($config){
  62. $config['documents_objets'] = 'spip_articles';
  63. $config['documents_date'] = 'non';
  64. return $config;
  65. }
  66. function medias_post_edition($flux){
  67. // le serveur n'est pas toujours la
  68. $serveur = (isset($flux['args']['serveur']) ? $flux['args']['serveur'] : '');
  69. // si on ajoute un document, mettre son statut a jour
  70. if($flux['args']['action']=='ajouter_document'){
  71. include_spip('action/editer_document');
  72. // mettre a jour le statut si necessaire
  73. document_instituer($flux['args']['id_objet']);
  74. }
  75. // si on institue un objet, mettre ses documents lies a jour
  76. elseif ($flux['args']['table']!=='spip_documents'){
  77. $type = isset($flux['args']['type'])?$flux['args']['type']:objet_type($flux['args']['table']);
  78. // verifier d'abord les doublons !
  79. include_spip('inc/autoriser');
  80. if (autoriser('autoassocierdocument',$type,$flux['args']['id_objet'])){
  81. $table_objet = isset($flux['args']['table_objet'])?$flux['args']['table_objet']:table_objet($flux['args']['table'],$serveur);
  82. $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc');
  83. $marquer_doublons_doc($flux['data'],$flux['args']['id_objet'],$type,id_table_objet($type, $serveur),$table_objet,$flux['args']['table'], '', $serveur);
  84. }
  85. if($flux['args']['action']=='instituer' OR isset($flux['data']['statut'])){
  86. include_spip('base/abstract_sql');
  87. $id = $flux['args']['id_objet'];
  88. $docs = array_map('reset',sql_allfetsel('id_document','spip_documents_liens','id_objet='.intval($id).' AND objet='.sql_quote($type)));
  89. include_spip('action/editer_document');
  90. foreach($docs as $id_document)
  91. // mettre a jour le statut si necessaire
  92. document_instituer($id_document);
  93. }
  94. }
  95. else {
  96. if ($flux['args']['table']!=='spip_documents'){
  97. // verifier les doublons !
  98. $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc');
  99. $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);
  100. }
  101. }
  102. return $flux;
  103. }
  104. /**
  105. * Pipeline afficher_complement_objet
  106. * afficher le portfolio et ajout de document sur les fiches objet
  107. * sur lesquelles les medias ont ete activees
  108. * Pour les articles, on ajoute toujours !
  109. *
  110. * @param $flux
  111. * @return
  112. */
  113. function medias_afficher_complement_objet($flux){
  114. if ($type=$flux['args']['type']
  115. AND $id=intval($flux['args']['id'])
  116. AND (autoriser('joindredocument',$type,$id))) {
  117. $documenter_objet = charger_fonction('documenter_objet','inc');
  118. $flux['data'] .= $documenter_objet($id,$type);
  119. }
  120. return $flux;
  121. }
  122. /**
  123. * Pipeline affiche_gauche
  124. * Affiche le formulaire d'ajout de document sur le formulaire d'edition
  125. * d'un objet (lorsque cet objet peut recevoir des documents).
  126. *
  127. * HACK : Lors d'une premiere creation de l'objet, celui-ci n'ayant pas
  128. * encore d'identifiant tant que le formulaire d'edition n'est pas enregistre,
  129. * les liaisions entre les documents lies et l'objet a creer sauvegardent
  130. * un identifiant d'objet negatif de la valeur de id_auteur (l'auteur
  131. * connecte). Ces liaisons seront corrigees apres validation dans
  132. * medias_post_insertion()
  133. */
  134. function medias_affiche_gauche($flux){
  135. if ($en_cours = trouver_objet_exec($flux['args']['exec'])
  136. AND $en_cours['edition']!==false // page edition uniquement
  137. AND $type = $en_cours['type']
  138. AND $id_table_objet = $en_cours['id_table_objet']
  139. // id non defini sur les formulaires de nouveaux objets
  140. AND (isset($flux['args'][$id_table_objet]) and $id = intval($flux['args'][$id_table_objet])
  141. // et justement dans ce cas, on met un identifiant negatif
  142. OR $id = 0-$GLOBALS['visiteur_session']['id_auteur'])
  143. AND autoriser('joindredocument',$type,$id)){
  144. $flux['data'] .= recuperer_fond('prive/objets/editer/colonne_document',array('objet'=>$type,'id_objet'=>$id));
  145. }
  146. return $flux;
  147. }
  148. function medias_document_desc_actions($flux){
  149. return $flux;
  150. }
  151. function medias_editer_document_actions($flux){
  152. return $flux;
  153. }
  154. function medias_renseigner_document_distant($flux){
  155. return $flux;
  156. }
  157. /**
  158. * Compter les documents dans un objet
  159. *
  160. * @param array $flux
  161. * @return array
  162. */
  163. function medias_objet_compte_enfants($flux){
  164. if ($objet = $flux['args']['objet']
  165. AND $id=intval($flux['args']['id_objet'])) {
  166. // juste les publies ?
  167. if (array_key_exists('statut', $flux['args']) and ($flux['args']['statut'] == 'publie')) {
  168. $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')");
  169. } else {
  170. $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')");
  171. }
  172. }
  173. return $flux;
  174. }
  175. /**
  176. * Afficher le nombre de documents dans chaque rubrique
  177. *
  178. * @param array $flux
  179. * @return array
  180. */
  181. function medias_boite_infos($flux){
  182. if ($flux['args']['type']=='rubrique'
  183. AND $id_rubrique = $flux['args']['id']){
  184. if ($nb = sql_countsel('spip_documents_liens',"objet='rubrique' AND id_objet=".intval($id_rubrique))){
  185. $nb = "<div>". singulier_ou_pluriel($nb, "medias:un_document", "medias:des_documents") . "</div>";
  186. if ($p = strpos($flux['data'],"<!--nb_elements-->"))
  187. $flux['data'] = substr_replace($flux['data'],$nb,$p,0);
  188. }
  189. }
  190. return $flux;
  191. }