You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

298 lines
9.6 KiB

7 years ago
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Système de publication pour l'internet *
  4. * *
  5. * Copyright © avec tendresse depuis 2001 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribué sous licence GNU/GPL. *
  9. * Pour plus de détails voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined('_ECRIRE_INC_VERSION')) {
  12. return;
  13. }
  14. /**
  15. * verifier et maj le statut des documents
  16. *
  17. * @param bool $affiche
  18. * @return
  19. */
  20. function medias_check_statuts($affiche = false) {
  21. $trouver_table = charger_fonction('trouver_table', 'base');
  22. $desc = $trouver_table('documents');
  23. # securite, si jamais on arrive ici avant un upgrade de base
  24. if (!isset($desc['field']['statut'])) {
  25. return;
  26. }
  27. // utiliser sql_allfetsel pour clore la requete avant la mise a jour en base sur chaque doc (sqlite)
  28. // iterer par groupe de 100 pour ne pas exploser sur les grosses bases
  29. $docs = array_column(
  30. sql_allfetsel('id_document', 'spip_documents', "statut='0'", '', '', '0,100'),
  31. 'id_document'
  32. );
  33. while (count($docs)) {
  34. include_spip('action/editer_document');
  35. foreach ($docs as $id_document) {
  36. // mettre a jour le statut si necessaire
  37. instituer_document($id_document);
  38. }
  39. if ($affiche) {
  40. echo ' .';
  41. }
  42. $docs = array_column(
  43. sql_allfetsel('id_document', 'spip_documents', "statut='0'", '', '', '0,100'),
  44. 'id_document'
  45. );
  46. }
  47. }
  48. /**
  49. * Mise a jour de la BDD
  50. *
  51. * @param string $nom_meta_base_version
  52. * @param string $version_cible
  53. */
  54. function medias_upgrade($nom_meta_base_version, $version_cible) {
  55. // ne pas installer tant qu'on est pas a jour sur version base SPIP
  56. // cas typique d'un upgrade qui commence par suppression de connect.php
  57. // SPIP lance la maj des plugins lors de la connexion, alors que l'upgrade SPIP
  58. // a pas encore ete joue : ca casse cet upgrade quand on migre depuis un tres vieux SPIP
  59. if (isset($GLOBALS['meta']['version_installee'])
  60. and ($GLOBALS['spip_version_base'] != (str_replace(',', '.', $GLOBALS['meta']['version_installee'])))
  61. ) {
  62. return;
  63. }
  64. if (!isset($GLOBALS['meta'][$nom_meta_base_version])) {
  65. $trouver_table = charger_fonction('trouver_table', 'base');
  66. if ($desc = $trouver_table('spip_documents')
  67. and !isset($desc['field']['statut'])
  68. ) {
  69. ecrire_meta($nom_meta_base_version, '0.1.0');
  70. }
  71. }
  72. $maj = array();
  73. $maj['create'] = array(
  74. array('maj_tables', array('spip_documents', 'spip_documents_liens', 'spip_types_documents')),
  75. array('creer_base_types_doc')
  76. );
  77. $maj['0.2.0'] = array(
  78. array('sql_alter', "TABLE spip_documents ADD statut varchar(10) DEFAULT '0' NOT NULL"),
  79. );
  80. $maj['0.3.0'] = array(
  81. array('sql_alter', "TABLE spip_documents ADD date_publication datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"),
  82. );
  83. $maj['0.4.0'] = array(
  84. // recalculer tous les statuts en tenant compte de la date de publi des articles...
  85. array('medias_check_statuts', true),
  86. );
  87. $maj['0.5.0'] = array(
  88. array('sql_alter', 'TABLE spip_documents ADD brise tinyint DEFAULT 0'),
  89. );
  90. $maj['0.6.0'] = array(
  91. array('sql_alter', "TABLE spip_types_documents ADD media varchar(10) DEFAULT 'file' NOT NULL"),
  92. array('creer_base_types_doc', '', 'media'),
  93. );
  94. $maj['0.7.0'] = array(
  95. array('sql_alter', "TABLE spip_documents ADD credits varchar(255) DEFAULT '' NOT NULL"),
  96. );
  97. $maj['0.10.0'] = array(
  98. array('sql_alter', "TABLE spip_documents CHANGE fichier fichier TEXT NOT NULL DEFAULT ''"),
  99. );
  100. $maj['0.11.0'] = array(
  101. array('sql_alter', "TABLE spip_documents CHANGE mode mode varchar(10) DEFAULT 'document' NOT NULL"),
  102. );
  103. $maj['0.14.0'] = array(
  104. array('medias_maj_meta_documents'),
  105. array('creer_base_types_doc', '', 'media'),
  106. );
  107. $maj['0.15.0'] = array(
  108. array('creer_base_types_doc', '', 'media'),
  109. );
  110. $maj['0.15.1'] = array(
  111. array('sql_alter', 'TABLE spip_documents CHANGE taille taille bigint'),
  112. );
  113. $maj['0.16.0'] = array(
  114. array('creer_base_types_doc', '', 'media'),
  115. );
  116. $maj['1.0.0'] = array(
  117. // on cree le champ en defaut '?' pour reperer les nouveaux a peupler
  118. array('sql_alter', "TABLE spip_documents ADD media varchar(10) DEFAULT '?' NOT NULL"),
  119. array('medias_peuple_media_document', 'media'),
  120. // puis on retablit le bon defaut
  121. array('sql_alter', "TABLE spip_documents CHANGE media media varchar(10) DEFAULT 'file' NOT NULL"),
  122. );
  123. $maj['1.0.1'] = array(
  124. // puis on retablit le bon defaut
  125. array('sql_alter', "TABLE spip_types_documents CHANGE media media_defaut varchar(10) DEFAULT 'file' NOT NULL"),
  126. );
  127. $maj['1.1.0'] = array(
  128. array('sql_alter', 'TABLE spip_documents_liens ADD INDEX id_objet (id_objet)'),
  129. array('sql_alter', 'TABLE spip_documents_liens ADD INDEX objet (objet)'),
  130. );
  131. $maj['1.1.1'] = array(
  132. array('creer_base_types_doc'),
  133. );
  134. // reparer les media sur les file suite a upgrade rate depuis SPIP 2.x
  135. $maj['1.2.0'] = array(
  136. // on remet en ? tous les media=file
  137. array('sql_updateq', 'spip_documents', array('media' => '?'), "media='file'"),
  138. // et on repeuple
  139. array('medias_peuple_media_document'),
  140. );
  141. $maj['1.2.1'] = array(
  142. array('creer_base_types_doc'),
  143. );
  144. $maj['1.2.3'] = array(
  145. // ajout de mbtiles
  146. array('creer_base_types_doc'),
  147. // reparer les clauses DEFAULT manquantes de maniere reccurente sur cette table
  148. array('sql_alter', "TABLE spip_documents CHANGE extension extension VARCHAR(10) DEFAULT '' NOT NULL"),
  149. array('sql_alter', "TABLE spip_documents CHANGE credits credits varchar(255) DEFAULT '' NOT NULL"),
  150. array('sql_alter', "TABLE spip_documents CHANGE statut statut varchar(10) DEFAULT '0' NOT NULL"),
  151. );
  152. $maj['1.2.4'] = array(
  153. // ajout de tar
  154. array('creer_base_types_doc')
  155. );
  156. $maj['1.2.5'] = array(
  157. // ajout de json
  158. array('creer_base_types_doc')
  159. );
  160. $maj['1.2.6'] = array(
  161. // ajout de md (markdown)
  162. array('creer_base_types_doc')
  163. );
  164. $maj['1.2.7'] = array(
  165. // ajout de ics + vcf
  166. array('creer_base_types_doc')
  167. );
  168. $maj['1.3.0'] = array(
  169. // ajout de rang_lien
  170. array('maj_tables', 'spip_documents_liens'),
  171. );
  172. $maj['1.3.1'] = array(
  173. // plus de place dans les crédits
  174. array('sql_alter', "TABLE spip_documents CHANGE credits credits text DEFAULT '' NOT NULL"),
  175. );
  176. $maj['1.3.2'] = array(
  177. // buggons en 2038 plutôt qu'en 2018'
  178. array('medias_check_statuts', true),
  179. );
  180. $maj['1.3.4'] = array(
  181. // 1.3.2 et 1.3.3 n'étaient pas suffisants grml'
  182. array('medias_maj_date_publication_documents'),
  183. array('medias_check_statuts', true)
  184. );
  185. $maj['1.3.5'] = array(
  186. // ajout de duree
  187. array('maj_tables', 'spip_documents'),
  188. );
  189. $maj['1.3.6'] = array(
  190. // ajout de vtt
  191. array('creer_base_types_doc')
  192. );
  193. $maj['1.4.0'] = array(
  194. // update de SVG
  195. array('creer_base_types_doc')
  196. );
  197. $maj['1.5.0'] = array(
  198. // ajout de webp
  199. array('creer_base_types_doc'),
  200. );
  201. // upgrade des logos
  202. $maj['1.6.0'] = [];
  203. $tables_objets_sql = lister_tables_objets_sql();
  204. foreach(array_keys($tables_objets_sql) as $table) {
  205. $maj['1.6.0'][] = ['medias_upgrade_logo_objet', objet_type($table)];
  206. };
  207. $maj['1.7.0'] = array(
  208. // ajout de alt
  209. array('maj_tables', 'spip_documents'),
  210. );
  211. include_spip('base/upgrade');
  212. include_spip('base/medias');
  213. maj_plugin($nom_meta_base_version, $version_cible, $maj);
  214. }
  215. /**
  216. * Upgrader les logos objet vers des documents
  217. * @param $objet
  218. */
  219. function medias_upgrade_logo_objet($objet) {
  220. $GLOBALS['logo_migrer_en_base'] = true;
  221. include_spip('ecrire/action/editer_logo');
  222. logo_migrer_en_base($objet, _TIME_OUT);
  223. unset($GLOBALS['logo_migrer_en_base']);
  224. }
  225. /**
  226. * Maj des meta documents
  227. */
  228. function medias_maj_meta_documents() {
  229. $config = array();
  230. if (isset($GLOBALS['meta']['documents_article']) and $GLOBALS['meta']['documents_article'] !== 'non') {
  231. $config[] = 'spip_articles';
  232. }
  233. if (isset($GLOBALS['meta']['documents_rubrique']) and $GLOBALS['meta']['documents_rubrique'] !== 'non') {
  234. $config[] = 'spip_rubriques';
  235. }
  236. ecrire_meta('documents_objets', implode(',', $config));
  237. }
  238. function medias_peuple_media_document($champ_media = 'media_defaut') {
  239. $res = sql_select('DISTINCT extension', 'spip_documents', 'media=' . sql_quote('?'));
  240. while ($row = sql_fetch($res)) {
  241. // attention ici c'est encore le champ media, car on le renomme juste apres
  242. $media = sql_getfetsel($champ_media, 'spip_types_documents', 'extension=' . sql_quote($row['extension']));
  243. sql_updateq('spip_documents', array('media' => $media), 'media=' . sql_quote('?') . ' AND extension=' . sql_quote($row['extension']));
  244. if (time() >= _TIME_OUT) {
  245. return;
  246. }
  247. }
  248. }
  249. /**
  250. * Maj des date de publication des documents cf ticket #3329, z104221
  251. */
  252. function medias_maj_date_publication_documents() {
  253. sql_update('spip_documents', array('statut' => '0'), 'date_publication > ' . sql_quote('2017-01-01 00:00:00'));
  254. sql_update('spip_documents', array('statut' => '0'), 'date_publication = ' . sql_quote('1970-01-01 01:33:58'));
  255. }
  256. /*
  257. function medias_install($action, $prefix, $version_cible){
  258. $version_base = $GLOBALS[$prefix."_base_version"];
  259. switch ($action){
  260. case 'test':
  261. # plus necessaire si pas de bug :p
  262. # medias_check_statuts();
  263. return (isset($GLOBALS['meta'][$prefix."_base_version"])
  264. AND version_compare($GLOBALS['meta'][$prefix."_base_version"],$version_cible,">="));
  265. break;
  266. case 'install':
  267. medias_upgrade('medias_base_version',$version_cible);
  268. break;
  269. case 'uninstall':
  270. # pas de deinstallation sur les documents pour le moment, trop dangereux
  271. # medias_vider_tables();
  272. break;
  273. }
  274. }
  275. */