marquer_doublons_doc.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. // On liste tous les champs susceptibles de contenir des documents ou images si on veut que ces derniers soient lies a l objet lorsqu on y fait reference par imgXX docXX ou embXX
  13. // la dist ne regarde que chapo et texte, on laisse comme ca, mais ca permet d etendre a descriptif ou toto depuis d autre plugin comme agenda ou grappe
  14. $GLOBALS['medias_liste_champs'][] = 'texte';
  15. $GLOBALS['medias_liste_champs'][] = 'chapo';
  16. // http://code.spip.net/@marquer_doublons_documents
  17. function inc_marquer_doublons_doc_dist($champs,$id,$type,$id_table_objet,$table_objet,$spip_table_objet, $desc=array(), $serveur=''){
  18. $champs_selection=array();
  19. foreach ($GLOBALS['medias_liste_champs'] as $champs_choisis) {
  20. if ( isset($champs[$champs_choisis]) )
  21. array_push($champs_selection,$champs_choisis);
  22. }
  23. if (count($champs_selection) == 0)
  24. return;
  25. if (!$desc){
  26. $trouver_table = charger_fonction('trouver_table', 'base');
  27. $desc = $trouver_table($table_objet, $serveur);
  28. }
  29. $load = "";
  30. // charger le champ manquant en cas de modif partielle de l 'objet
  31. // seulement si le champ existe dans la table demande
  32. $champs_a_traiter = "";
  33. foreach ($champs_selection as $champs_a_parcourir) {
  34. if (isset($desc['field'][$champs_a_parcourir])) {
  35. $load = $champs_a_parcourir;
  36. $champs_a_traiter .= $champs[$champs_a_parcourir];
  37. }
  38. }
  39. if ($load){
  40. $champs[$load] = "";
  41. $row = sql_fetsel($load, $spip_table_objet, "$id_table_objet=".sql_quote($id));
  42. if ($row AND isset($row[$load]))
  43. $champs[$load] = $row[$load];
  44. }
  45. include_spip('inc/texte');
  46. include_spip('base/abstract_sql');
  47. include_spip('action/editer_liens');
  48. include_spip('base/objets');
  49. $modeles = lister_tables_objets_sql('spip_documents');
  50. $modeles = $modeles['modeles'];
  51. $GLOBALS['doublons_documents_inclus'] = array();
  52. $env = array(
  53. 'objet' => $type,
  54. 'id_objet' => $id,
  55. $id_table_objet => $id
  56. );
  57. traiter_modeles($champs_a_traiter,array('documents'=>$modeles),'','',null,$env); // detecter les doublons
  58. objet_qualifier_liens(array('document'=>'*'),array($type=>$id),array('vu'=>'non'));
  59. if (count($GLOBALS['doublons_documents_inclus'])){
  60. // on repasse par une requete sur spip_documents pour verifier que les documents existent bien !
  61. $in_liste = sql_in('id_document',$GLOBALS['doublons_documents_inclus']);
  62. $res = sql_allfetsel("id_document", "spip_documents", $in_liste);
  63. $res = array_map('reset',$res);
  64. // Creer le lien s'il n'existe pas deja
  65. objet_associer(array('document'=>$res),array($type=>$id),array('vu'=>'oui'));
  66. objet_qualifier_liens(array('document'=>$res),array($type=>$id),array('vu'=>'oui'));
  67. }
  68. }
  69. ?>