medias_administrations.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  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. /**
  13. * verifier et maj le statut des documents
  14. * @param bool $affiche
  15. * @return
  16. */
  17. function medias_check_statuts($affiche = false){
  18. $trouver_table = charger_fonction('trouver_table','base');
  19. $desc = $trouver_table('documents');
  20. # securite, si jamais on arrive ici avant un upgrade de base
  21. if (!isset($desc['field']['statut']))
  22. return;
  23. // utiliser sql_allfetsel pour clore la requete avant la mise a jour en base sur chaque doc (sqlite)
  24. // iterer par groupe de 100 pour ne pas exploser sur les grosses bases
  25. $docs = array_map('reset',sql_allfetsel('id_document','spip_documents',"statut='0'",'','',"0,100"));
  26. while (count($docs)){
  27. include_spip('action/editer_document');
  28. foreach($docs as $id_document)
  29. // mettre a jour le statut si necessaire
  30. instituer_document($id_document);
  31. if ($affiche) echo " .";
  32. $docs = array_map('reset',sql_allfetsel('id_document','spip_documents',"statut='0'",'','',"0,100"));
  33. }
  34. }
  35. /**
  36. * Mise a jour de la BDD
  37. * @param string $nom_meta_base_version
  38. * @param string $version_cible
  39. */
  40. function medias_upgrade($nom_meta_base_version,$version_cible){
  41. // ne pas installer tant qu'on est pas a jour sur version base SPIP
  42. // cas typique d'un upgrade qui commence par suppression de connect.php
  43. // SPIP lance la maj des plugins lors de la connexion, alors que l'upgrade SPIP
  44. // a pas encore ete joue : ca casse cet upgrade quand on migre depuis un tres vieux SPIP
  45. if (isset($GLOBALS['meta']['version_installee'])
  46. AND ($GLOBALS['spip_version_base'] != (str_replace(',','.',$GLOBALS['meta']['version_installee']))))
  47. return;
  48. if (!isset($GLOBALS['meta'][$nom_meta_base_version])){
  49. $trouver_table = charger_fonction('trouver_table','base');
  50. if ($desc = $trouver_table('spip_documents')
  51. AND !isset($desc['field']['statut']))
  52. ecrire_meta($nom_meta_base_version,'0.1.0');
  53. }
  54. $maj = array();
  55. $maj['create'] = array(
  56. array('maj_tables',array('spip_documents','spip_documents_liens','spip_types_documents')),
  57. array('creer_base_types_doc')
  58. );
  59. $maj['0.2.0'] = array(
  60. array('sql_alter',"TABLE spip_documents ADD statut varchar(10) DEFAULT '0' NOT NULL"),
  61. );
  62. $maj['0.3.0'] = array(
  63. array('sql_alter',"TABLE spip_documents ADD date_publication datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"),
  64. );
  65. $maj['0.4.0'] = array(
  66. // recalculer tous les statuts en tenant compte de la date de publi des articles...
  67. array('medias_check_statuts',true),
  68. );
  69. $maj['0.5.0'] = array(
  70. array('sql_alter',"TABLE spip_documents ADD brise tinyint DEFAULT 0"),
  71. );
  72. $maj['0.6.0'] = array(
  73. array('sql_alter',"TABLE spip_types_documents ADD media varchar(10) DEFAULT 'file' NOT NULL"),
  74. array('creer_base_types_doc','','media'),
  75. );
  76. $maj['0.7.0'] = array(
  77. array('sql_alter',"TABLE spip_documents ADD credits varchar(255) DEFAULT '' NOT NULL"),
  78. );
  79. $maj['0.10.0'] = array(
  80. array('sql_alter',"TABLE spip_documents CHANGE fichier fichier TEXT NOT NULL DEFAULT ''"),
  81. );
  82. $maj['0.11.0'] = array(
  83. array('sql_alter',"TABLE spip_documents CHANGE mode mode varchar(10) DEFAULT 'document' NOT NULL"),
  84. );
  85. $maj['0.14.0'] = array(
  86. array('medias_maj_meta_documents'),
  87. array('creer_base_types_doc','','media'),
  88. );
  89. $maj['0.15.0'] = array(
  90. array('creer_base_types_doc','','media'),
  91. );
  92. $maj['0.15.1'] = array(
  93. array('sql_alter',"TABLE spip_documents CHANGE taille taille bigint"),
  94. );
  95. $maj['0.16.0'] = array(
  96. array('creer_base_types_doc','','media'),
  97. );
  98. $maj['1.0.0'] = array(
  99. // on cree le champ en defaut '?' pour reperer les nouveaux a peupler
  100. array('sql_alter',"TABLE spip_documents ADD media varchar(10) DEFAULT '?' NOT NULL"),
  101. array('medias_peuple_media_document', 'media'),
  102. // puis on retablit le bon defaut
  103. array('sql_alter',"TABLE spip_documents CHANGE media media varchar(10) DEFAULT 'file' NOT NULL"),
  104. );
  105. $maj['1.0.1'] = array(
  106. // puis on retablit le bon defaut
  107. array('sql_alter',"TABLE spip_types_documents CHANGE media media_defaut varchar(10) DEFAULT 'file' NOT NULL"),
  108. );
  109. $maj['1.1.0'] = array(
  110. array('sql_alter',"TABLE spip_documents_liens ADD INDEX id_objet (id_objet)"),
  111. array('sql_alter',"TABLE spip_documents_liens ADD INDEX objet (objet)"),
  112. );
  113. $maj['1.1.1'] = array(
  114. array('creer_base_types_doc'),
  115. );
  116. // reparer les media sur les file suite a upgrade rate depuis SPIP 2.x
  117. $maj['1.2.0'] = array(
  118. // on remet en ? tous les media=file
  119. array('sql_updateq',"spip_documents",array('media'=>'?'),"media='file'"),
  120. // et on repeuple
  121. array('medias_peuple_media_document'),
  122. );
  123. $maj['1.2.1'] = array(
  124. array('creer_base_types_doc'),
  125. );
  126. $maj['1.2.3'] = array(
  127. // ajout de mbtiles
  128. array('creer_base_types_doc'),
  129. // reparer les clauses DEFAULT manquantes de maniere reccurente sur cette table
  130. array('sql_alter',"TABLE spip_documents CHANGE extension extension VARCHAR(10) DEFAULT '' NOT NULL"),
  131. array('sql_alter',"TABLE spip_documents CHANGE credits credits varchar(255) DEFAULT '' NOT NULL"),
  132. array('sql_alter',"TABLE spip_documents CHANGE statut statut varchar(10) DEFAULT '0' NOT NULL"),
  133. );
  134. $maj['1.2.4'] = array(
  135. // ajout de tar
  136. array('creer_base_types_doc')
  137. );
  138. $maj['1.2.5'] = array(
  139. // ajout de json
  140. array('creer_base_types_doc')
  141. );
  142. $maj['1.2.6'] = array(
  143. // ajout du champ titre pour json cf oubli dans http://zone.spip.org/trac/spip-zone/changeset/80059
  144. array("sql_updateq","spip_types_documents",array('titre'=>'JSON'),"extension='json'"),
  145. );
  146. include_spip('base/upgrade');
  147. include_spip('base/medias');
  148. maj_plugin($nom_meta_base_version, $version_cible, $maj);
  149. medias_check_statuts();
  150. }
  151. /**
  152. * Maj des meta documents
  153. */
  154. function medias_maj_meta_documents(){
  155. $config = array();
  156. if (isset($GLOBALS['meta']['documents_article']) AND $GLOBALS['meta']['documents_article']!=='non')
  157. $config[] = 'spip_articles';
  158. if (isset($GLOBALS['meta']['documents_rubrique']) AND $GLOBALS['meta']['documents_rubrique']!=='non')
  159. $config[] = 'spip_rubriques';
  160. ecrire_meta('documents_objets',implode(',',$config));
  161. }
  162. function medias_peuple_media_document($champ_media="media_defaut"){
  163. $res = sql_select("DISTINCT extension","spip_documents","media=".sql_quote('?'));
  164. while($row = sql_fetch($res)){
  165. // attention ici c'est encore le champ media, car on le renomme juste apres
  166. $media = sql_getfetsel($champ_media,'spip_types_documents','extension='.sql_quote($row['extension']));
  167. sql_updateq('spip_documents',array('media'=>$media),"media=".sql_quote('?').' AND extension='.sql_quote($row['extension']));
  168. if (time() >= _TIME_OUT)
  169. return;
  170. }
  171. }
  172. /*
  173. function medias_install($action,$prefix,$version_cible){
  174. $version_base = $GLOBALS[$prefix."_base_version"];
  175. switch ($action){
  176. case 'test':
  177. # plus necessaire si pas de bug :p
  178. # medias_check_statuts();
  179. return (isset($GLOBALS['meta'][$prefix."_base_version"])
  180. AND version_compare($GLOBALS['meta'][$prefix."_base_version"],$version_cible,">="));
  181. break;
  182. case 'install':
  183. medias_upgrade('medias_base_version',$version_cible);
  184. break;
  185. case 'uninstall':
  186. # pas de deinstallation sur les documents pour le moment, trop dangereux
  187. # medias_vider_tables();
  188. break;
  189. }
  190. }
  191. */