Changeset 96279 in spip-zone
- Timestamp:
- Mar 28, 2016, 10:30:21 PM (5 years ago)
- Location:
- _plugins_/medias_dereferencer/trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/medias_dereferencer/trunk/formulaires/configurer_medias_dereferencer.html
r95634 r96279 18 18 defaut=non})] 19 19 20 [(#SAISIE{radio, htaccess, 21 label=<:medias_dereferencer:htaccess_label:>, 22 explication=<:medias_dereferencer:htaccess_explication:>, 23 datas=#ARRAY{ 24 oui,<:medias_dereferencer:lier_document_choix_oui:>, 25 non,<:medias_dereferencer:lier_document_choix_non:>}, 26 defaut=non})] 20 <[(#DIV|sinon{li}) class="fieldset"]> 21 <fieldset> 22 <legend><:medias_dereferencer:htaccess_legend:></legend> 27 23 28 [(#SAISIE{textarea, adresse_ip, 29 label=<:medias_dereferencer:adresse_ip_label:>, 30 explication=<:medias_dereferencer:adresse_ip_explication:>, 31 rows=5})] 24 <[(#VAL{ul}|saisie_balise_structure_formulaire)] class="editer-groupe"> 25 26 [(#SAISIE{radio, apache, 27 label=<:medias_dereferencer:apache_label:>, 28 explication=<:medias_dereferencer:apache_explication:>, 29 datas=#ARRAY{ 30 oui,<:medias_dereferencer:lier_document_choix_oui:>, 31 non,<:medias_dereferencer:lier_document_choix_non:>}, 32 defaut=non})] 33 34 [(#SAISIE{radio, htaccess, 35 label=<:medias_dereferencer:htaccess_label:>, 36 explication=<:medias_dereferencer:htaccess_explication:>, 37 datas=#ARRAY{ 38 oui,<:medias_dereferencer:lier_document_choix_oui:>, 39 non,<:medias_dereferencer:lier_document_choix_non:>}, 40 defaut=non})] 41 42 [(#SAISIE{textarea, adresse_ip, 43 label=<:medias_dereferencer:adresse_ip_label:>, 44 explication=<:medias_dereferencer:adresse_ip_explication:>, 45 rows=5})] 46 </[(#VAL{ul}|saisie_balise_structure_formulaire)]> 47 </fieldset> 48 </[(#DIV|sinon{li})]> 32 49 33 50 </[(#VAL{ul}|saisie_balise_structure_formulaire)]> -
_plugins_/medias_dereferencer/trunk/inclure/medias_htaccess.html
r95634 r96279 2 2 <BOUCLE_disallow (DOCUMENTS) {statut='prepa'} {extension?} {par fichier}> 3 3 <Files [(#ENV{extension}|?{[(#FICHIER**|replace{#ENV{extension}/,''})],[(#FICHIER**)]})]> 4 [(#CONFIG{medias_dereferencer/apache}|=={oui}|?{ 4 5 Order Deny,Allow 5 6 Deny from all[ 7 (#VAL|md_adresses_allow)], 8 Require all denied[ 6 9 (#VAL|md_adresses_allow)] 10 })] 7 11 </Files> 8 12 </BOUCLE_disallow> -
_plugins_/medias_dereferencer/trunk/lang/medias_dereferencer_fr.php
r95639 r96279 4 4 5 5 if (!defined('_ECRIRE_INC_VERSION')) { 6 6 return; 7 7 } 8 8 9 9 $GLOBALS[$GLOBALS['idx_lang']] = array( 10 10 11 // A 12 'adresse_ip_explication' => 'Si vous avez activé la création du fichier <code>.htaccess</code> dans le répertoire <code>IMG/</code>, vous pouvez renseigner ci-dessous la liste des adresses IP qui pourront consulter les documents physiques.<br/><strong>Veuillez saisir les adresses IP séparées par un point-virgule ";"</strong>', 13 'adresse_ip_label' => 'Liste des adresses IP autorisées', 11 // A 12 'adresse_ip_explication' => 'Si vous avez activé la création du fichier <code>.htaccess</code> dans le répertoire <code>IMG/</code>, vous pouvez renseigner ci-dessous la liste des adresses IP qui pourront consulter les documents physiques.<br/><strong>Veuillez saisir les adresses IP séparées par un point-virgule ";"</strong>', 13 'adresse_ip_label' => 'Liste des adresses IP autorisées', 14 'apache_explication' => 'Avez-vous une version d\'Apache supérieure ou égale à 2.4 ?', 15 'apache_label' => 'Version d\'Apache', 14 16 15 16 17 18 17 // C 18 'cfg_exemple' => 'Exemple', 19 'cfg_exemple_explication' => 'Explication de cet exemple', 20 'cfg_titre_parametrages' => 'Paramétrages', 19 21 20 // H 21 'htaccess_content' => 'Contenu du fichier .htaccess', 22 'htaccess_explication' => 'Désirez-vous interdire la consultation des documents non-publiés ? Si oui, une tâche de fond créera un fichier <code>.htaccess</code> dans le répertoire <code>IMG/</code> du site contenant tous les fichiers non consultables.', 23 'htaccess_label' => 'Créer le fichier <em>.htaccess</em>', 22 // H 23 'htaccess_content' => 'Contenu du fichier .htaccess', 24 'htaccess_explication' => 'Désirez-vous interdire la consultation des documents non-publiés ? Si oui, une tâche de fond créera un fichier <code>.htaccess</code> dans le répertoire <code>IMG/</code> du site contenant tous les fichiers non consultables.', 25 'htaccess_label' => 'Créer le fichier <em>.htaccess</em>', 26 'htaccess_legend' => 'Fichier <em>.htaccess</em>', 24 27 25 26 27 28 29 28 // L 29 'lier_document_choix_non' => 'Non', 30 'lier_document_choix_oui' => 'Oui', 31 'lier_document_explication' => 'Il arrive parfois qu\'un document soit utilisé en raccourcis typographique sans être lié à l\'objet (articles, rubriques, etc.). Lorsque ce cas se présente, désirez-vous que le plugin "Déréférencer les médias" lie le document à l\'objet éditorial ?', 32 'lier_document_label' => 'Désirez-vous lier les documents ?', 30 33 31 32 34 // M 35 'medias_dereferencer_titre' => 'Déréférencer les médias', 33 36 34 35 37 // R 38 'robots_txt_content' => 'Inclusion pour le fichier robots.txt', 36 39 37 38 39 40 // T 41 'titre_page_configurer_medias_dereferencer' => 'Déréférencer les médias', 42 'titre_page_medias_lister_disallow' => 'Liste des Médias interdits aux moteurs de recherche.', 40 43 ); -
_plugins_/medias_dereferencer/trunk/medias_dereferencer_fonctions.php
r95685 r96279 11 11 */ 12 12 if (!defined('_ECRIRE_INC_VERSION')) { 13 13 return; 14 14 } 15 15 … … 18 18 * 19 19 * @return array 20 * Tableau avec pour clé le nom de la table. 21 */ 22 function medias_lister_champs_texte() { 23 include_spip('base/objets'); 24 $lister_tables_objets_sql = lister_tables_objets_sql(); 25 $lister_tables_principales = array_keys(lister_tables_principales()); 26 $champs_texte = array(); 27 foreach ($lister_tables_objets_sql as $table => $valeur) { 28 // On ne prend que les objets qui font partis des tables principales de SPIP. 29 // Donc, on ne prend pas les tables telles que spip_visites, spip_referers, etc. 30 // C'est une sécurité. 31 $id_primary_double = preg_match('/,/', 32 $valeur['key']['PRIMARY KEY']); // l'id_primary doit faire référence à un seul champ 33 if (in_array($table, $lister_tables_principales) and $id_primary_double == 0) { 34 $champs_texte[$table]['id_primary'] = $valeur['key']['PRIMARY KEY']; 35 $champs_texte[$table]['objet'] = objet_type($champs_texte[$table]['id_primary']); 36 $champs_texte[$table]['statut'] = (isset($valeur['field']['statut']) ? true : false); 37 $champs_texte[$table]['publie'] = ($champs_texte[$table]['statut'] ? $valeur['statut'][0]['publie'] : false); 38 39 foreach ($valeur['field'] as $champs => $descriptif) { 40 if (preg_match('/text/', $descriptif)) { 41 $champs_texte[$table]['texte'][] = $champs; 42 } 43 } 44 if (isset($champs_texte[$table]['texte'])) { 45 $champs_texte[$table]['texte'] = implode(',', $champs_texte[$table]['texte']); 46 } else { 47 unset($champs_texte[$table]); 48 } 49 } 50 } 51 $champs_texte = array_filter($champs_texte); 52 53 return $champs_texte; 20 * Tableau avec pour clé le nom de la table. 21 */ 22 function medias_lister_champs_texte() 23 { 24 include_spip('base/objets'); 25 $lister_tables_objets_sql = lister_tables_objets_sql(); 26 $lister_tables_principales = array_keys(lister_tables_principales()); 27 $champs_texte = array(); 28 foreach ($lister_tables_objets_sql as $table => $valeur) { 29 // On ne prend que les objets qui font partis des tables principales de SPIP. 30 // Donc, on ne prend pas les tables telles que spip_visites, spip_referers, etc. 31 // C'est une sécurité. 32 $id_primary_double = preg_match('/,/', 33 $valeur['key']['PRIMARY KEY']); // l'id_primary doit faire référence à un seul champ 34 if (in_array($table, $lister_tables_principales) and $id_primary_double == 0) { 35 $champs_texte[$table]['id_primary'] = $valeur['key']['PRIMARY KEY']; 36 $champs_texte[$table]['objet'] = objet_type($champs_texte[$table]['id_primary']); 37 $champs_texte[$table]['statut'] = (isset($valeur['field']['statut']) ? true : false); 38 $champs_texte[$table]['publie'] = ($champs_texte[$table]['statut'] ? $valeur['statut'][0]['publie'] : false); 39 40 foreach ($valeur['field'] as $champs => $descriptif) { 41 if (preg_match('/text/', $descriptif)) { 42 $champs_texte[$table]['texte'][] = $champs; 43 } 44 } 45 if (isset($champs_texte[$table]['texte'])) { 46 $champs_texte[$table]['texte'] = implode(',', $champs_texte[$table]['texte']); 47 } else { 48 unset($champs_texte[$table]); 49 } 50 } 51 } 52 $champs_texte = array_filter($champs_texte); 53 54 return $champs_texte; 54 55 } 55 56 … … 60 61 * @return array 61 62 */ 62 function medias_lister_medias_used_in_text() { 63 include_spip('base/abstract_sql'); 64 65 $tables_texte = medias_lister_champs_texte(); 66 $documents = array(); 67 foreach ($tables_texte as $table => $champs) { 68 $statut_requete = ''; 69 if (isset($champs['statut']) and $champs['statut'] and $champs['objet'] != 'auteur') { 70 $statut_requete = ', statut'; 71 } 72 $resultats = sql_allfetsel($champs['id_primary'] . ' as id_primary, CONCAT(' . $champs['texte'] . ') as texte_tmp' . $statut_requete, 73 $table); 74 foreach ($resultats as $resultat => $value) { 75 // On recherche les raccourcis typographiques 76 if (preg_match_all('/(doc|img|emb)([0-9]+)/', $value['texte_tmp'], $docs)) { 77 // On a au moins un résultat, alors on commence le traitement. 78 if (isset($value['statut']) and $value['statut'] == $champs['publie']) { 79 // l'objet a un statut et est publié ou actif, 80 // alors le document doit-être publié aussi. 81 $statut = 'publie'; 82 } elseif (isset($value['statut']) and $value['statut'] != $champs['publie']) { 83 // l'objet a un statut et n'est publié ou actif, 84 // alors le document doit-être en préparation. 85 $statut = 'prepa'; 86 } elseif (!isset($value['statut'])) { 87 // L'objet n'a pas de statut 88 // et donc son affichage n'est pas conditionné par le statut, 89 // alors le document sera publié. 90 $statut = 'publie'; 91 } 92 // On stocke maintenant toutes ces infos pour chaque document trouvé. 93 foreach ($docs[2] as $id_doc) { 94 // structure du tableau : 95 // 0 : id_document 96 // 1 : id_objet 97 // 2 : objet 98 // 3 : vu (oui ou non) 99 // 4 : statut du document 100 $documents[] = array( 101 'id_document' => $id_doc, 102 'id_objet' => $value['id_primary'], 103 'objet' => $champs['objet'], 104 'vu' => 'oui', 105 'statut' => $statut, 106 ); 107 } 108 } 109 } 110 } 111 // asort($documents); 112 // $documents = array_values(array_unique($documents)); 113 114 return $documents; 63 function medias_lister_medias_used_in_text() 64 { 65 include_spip('base/abstract_sql'); 66 67 $tables_texte = medias_lister_champs_texte(); 68 $documents = array(); 69 foreach ($tables_texte as $table => $champs) { 70 $statut_requete = ''; 71 if (isset($champs['statut']) and $champs['statut'] and $champs['objet'] != 'auteur') { 72 $statut_requete = ', statut'; 73 } 74 $resultats = sql_allfetsel($champs['id_primary'].' as id_primary, CONCAT('.$champs['texte'].') as texte_tmp'.$statut_requete, 75 $table); 76 foreach ($resultats as $resultat => $value) { 77 // On recherche les raccourcis typographiques 78 if (preg_match_all('/(doc|img|emb)([0-9]+)/', $value['texte_tmp'], $docs)) { 79 // On a au moins un résultat, alors on commence le traitement. 80 if (isset($value['statut']) and $value['statut'] == $champs['publie']) { 81 // l'objet a un statut et est publié ou actif, 82 // alors le document doit-être publié aussi. 83 $statut = 'publie'; 84 } elseif (isset($value['statut']) and $value['statut'] != $champs['publie']) { 85 // l'objet a un statut et n'est publié ou actif, 86 // alors le document doit-être en préparation. 87 $statut = 'prepa'; 88 } elseif (!isset($value['statut'])) { 89 // L'objet n'a pas de statut 90 // et donc son affichage n'est pas conditionné par le statut, 91 // alors le document sera publié. 92 $statut = 'publie'; 93 } 94 // On stocke maintenant toutes ces infos pour chaque document trouvé. 95 foreach ($docs[2] as $id_doc) { 96 // structure du tableau : 97 // 0 : id_document 98 // 1 : id_objet 99 // 2 : objet 100 // 3 : vu (oui ou non) 101 // 4 : statut du document 102 $documents[] = array( 103 'id_document' => $id_doc, 104 'id_objet' => $value['id_primary'], 105 'objet' => $champs['objet'], 106 'vu' => 'oui', 107 'statut' => $statut, 108 ); 109 } 110 } 111 } 112 } 113 // asort($documents); 114 // $documents = array_values(array_unique($documents)); 115 116 return $documents; 115 117 } 116 118 … … 121 123 * @return bool 122 124 */ 123 function medias_maj_documents_lies() { 124 include_spip('base/abstract_sql'); 125 include_spip('base/objets'); 126 $message_log = array(); 127 $message_log[] = "\n-----"; 128 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 129 $message_log[] = 'Fonction : ' . __FUNCTION__; 130 if (session_get('id_auteur')) { 131 // S'il y a un auteur authentifié, on indique que c'est lui qui a lancé l'action. 132 $message_log[] = "L'action a été lancé par l'auteur #" . session_get('id_auteur') . ', ' . session_get('nom') . ' (' . session_get('statut') . ')'; 133 } else { 134 // S'il n'y a pas d'auteur authentifié, c'est SPIP qui lance le script en tâche de fond. 135 $message_log[] = "L'action a été lancé par SPIP en tâche de fond."; 136 } 137 138 // On ne s'occupe que des objets pour lesquels on a des liens avec des documents. 139 $objets_lies = sql_fetsel('DISTINCT objet', 'spip_documents_liens'); 140 foreach ($objets_lies as $objet_lie) { 141 // exemple de requête demandée : 142 // SELECT * FROM spip_documents 143 // WHERE id_document IN (SELECT DISTINCT id_document FROM spip_documents_liens WHERE objet='article' AND id_objet IN (SELECT id_article FROM spip_articles WHERE statut NOT IN ('publie'))) 144 // AND statut IN ('publie') 145 // *** 146 // Sélectionner tous les documents publiés liés à des objets non publiés 147 // *** 148 $documents = sql_allfetsel('id_document,statut', 'spip_documents', 149 "statut IN ('publie') AND id_document IN (SELECT DISTINCT id_document FROM spip_documents_liens WHERE objet='" . $objet_lie . "' AND id_objet IN (SELECT " . id_table_objet($objet_lie) . ' FROM ' . table_objet_sql($objet_lie) . " WHERE statut NOT IN ('publie')))"); 150 if (is_array($documents) and count($documents) > 0) { 151 foreach ($documents as $document) { 152 if (sql_updateq('spip_documents', array('statut' => 'prepa'), 153 'id_document=' . $document['id_document'])) { 154 $message_log[] = 'Le statut du document #' . $document['id_document'] . ' lié à l\'objet ' . $objet_lie . ' a bien été mis à jour avec le statut \'' . $document['statut'] . '\''; 155 } 156 } 157 } 158 } 159 // Par défaut, le message de log a 4 entrées. Voir en début de la présente fonction. 160 if (count($message_log) == 4) { 161 $message_log[] = 'Il n\'y a pas eu d\'action à faire en base de données.'; 162 } 163 // On met l'heure de fin de la procédure dans le message de log 164 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 165 $message_log[] = "-----\n"; 166 // Et maintenant on stocke les messages dans un fichier de log. 167 spip_log(implode("\n", $message_log), 'medias_dereferencer'); 168 169 return true; 125 function medias_maj_documents_lies() 126 { 127 include_spip('base/abstract_sql'); 128 include_spip('base/objets'); 129 $message_log = array(); 130 $message_log[] = "\n-----"; 131 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 132 $message_log[] = 'Fonction : '.__FUNCTION__; 133 if (session_get('id_auteur')) { 134 // S'il y a un auteur authentifié, on indique que c'est lui qui a lancé l'action. 135 $message_log[] = "L'action a été lancé par l'auteur #".session_get('id_auteur').', '.session_get('nom').' ('.session_get('statut').')'; 136 } else { 137 // S'il n'y a pas d'auteur authentifié, c'est SPIP qui lance le script en tâche de fond. 138 $message_log[] = "L'action a été lancé par SPIP en tâche de fond."; 139 } 140 141 // On ne s'occupe que des objets pour lesquels on a des liens avec des documents. 142 $objets_lies = sql_fetsel('DISTINCT objet', 'spip_documents_liens'); 143 foreach ($objets_lies as $objet_lie) { 144 // exemple de requête demandée : 145 // SELECT * FROM spip_documents 146 // WHERE id_document IN (SELECT DISTINCT id_document FROM spip_documents_liens WHERE objet='article' AND id_objet IN (SELECT id_article FROM spip_articles WHERE statut NOT IN ('publie'))) 147 // AND statut IN ('publie') 148 // *** 149 // Sélectionner tous les documents publiés liés à des objets non publiés 150 // *** 151 $documents = sql_allfetsel('id_document,statut', 'spip_documents', 152 "statut IN ('publie') AND id_document IN (SELECT DISTINCT id_document FROM spip_documents_liens WHERE objet='".$objet_lie."' AND id_objet IN (SELECT ".id_table_objet($objet_lie).' FROM '.table_objet_sql($objet_lie)." WHERE statut NOT IN ('publie')))"); 153 if (is_array($documents) and count($documents) > 0) { 154 foreach ($documents as $document) { 155 if (sql_updateq('spip_documents', array('statut' => 'prepa'), 156 'id_document='.$document['id_document'])) { 157 $message_log[] = 'Le statut du document #'.$document['id_document'].' lié à l\'objet '.$objet_lie.' a bien été mis à jour avec le statut \''.$document['statut'].'\''; 158 } 159 } 160 } 161 } 162 // Par défaut, le message de log a 4 entrées. Voir en début de la présente fonction. 163 if (count($message_log) == 4) { 164 $message_log[] = 'Il n\'y a pas eu d\'action à faire en base de données.'; 165 } 166 // On met l'heure de fin de la procédure dans le message de log 167 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 168 $message_log[] = "-----\n"; 169 // Et maintenant on stocke les messages dans un fichier de log. 170 spip_log(implode("\n", $message_log), 'medias_dereferencer'); 171 172 return true; 170 173 } 171 174 … … 177 180 * @return [type] [description] 178 181 */ 179 function medias_maj_documents_non_lies() { 180 include_spip('base/abstract_sql'); 181 include_spip('base/objets'); 182 $documents_raccourcis = medias_lister_medias_used_in_text(); 183 $message_log = array(); 184 $message_log[] = "\n-----"; 185 // On met l'heure de début de la procédure dans le message de log 186 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 187 $message_log[] = 'Fonction : ' . __FUNCTION__; 188 if (session_get('id_auteur')) { 189 // S'il y a un auteur authentifié, on indique que c'est lui qui a lancé l'action. 190 $message_log[] = "L'action a été lancé par l'auteur #" . session_get('id_auteur') . ', ' . session_get('nom') . ' (' . session_get('statut') . ')'; 191 } else { 192 // S'il n'y a pas d'auteur authentifié, c'est SPIP qui lance le script en tâche de fond. 193 $message_log[] = "L'action a été lancé par SPIP en tâche de fond."; 194 } 195 196 // On lance les opérations uniquement si on a des documents utilisés en raccourcis. 197 if (is_array($documents_raccourcis) and count($documents_raccourcis) > 0) { 198 foreach ($documents_raccourcis as $document) { 199 if (sql_countsel('spip_documents_liens', array( 200 'id_document=' . sql_quote($document['id_document']), 201 'id_objet=' . sql_quote($document['id_objet']), 202 'objet=' . sql_quote($document['objet']), 203 'vu NOT IN (' . sql_quote($document['vu']) . ')', 204 ))) { 205 // Le lien de ce media avec l'objet existe mais n'a pas la bonne valeur dans 'vu' 206 // Donc on met à jour la valeur de 'vu' pour ce lien. 207 if (sql_updateq('spip_documents_liens', array( 208 'vu' => $document['vu'], 209 ), 210 'id_document=' . sql_quote($document['id_document']) . ' AND id_objet=' . sql_quote($document['id_objet']) . ' AND objet=' . sql_quote($document['objet']) . ' AND vu NOT IN (' . sql_quote($document['vu']) . ')')) { 211 $message_log[] = 'Le lien entre le document #' . $document['id_document'] . ' et l\'objet ' . $document['objet'] . ' #' . $document['id_objet'] . ' a bien été mis à jour avec la vu \'' . $document['vu'] . '\''; 212 } 213 // et on met à jour le statut dudit document si le statut est différent uniquement. 214 if (sql_updateq('spip_documents', array('statut' => $document['statut']), 215 'id_document=' . sql_quote($document['id_document']) . ' AND statut NOT IN (' . sql_quote($document['statut']) . ')')) { 216 $message_log[] = 'Le statut du document #' . $document['id_document'] . ' lié à l\'objet ' . $document['objet'] . ' #' . $document['id_objet'] . ' a bien été mis à jour avec le statut \'' . $document['statut'] . '\''; 217 } 218 } elseif (!sql_countsel('spip_documents_liens', array( 219 'id_document=' . sql_quote($document['id_document']), 220 'id_objet=' . sql_quote($document['id_objet']), 221 'objet=' . sql_quote($document['objet']), 222 'vu IN (' . sql_quote($document['vu']) . ')', 223 )) 224 ) { 225 // Le lien de ce média avec l'objet n'existe pas 226 // Alors on l'insère dans la table 227 if (sql_insertq('spip_documents_liens', array( 228 'id_document' => $document['id_document'], 229 'id_objet' => $document['id_objet'], 230 'objet' => $document['objet'], 231 'vu' => $document['vu'], 232 )) and lire_config('medias_dereferencer/lier_document') === 'oui' 233 ) { 234 $message_log[] = 'Le lien entre le document #' . $document['id_document'] . ' et l\'objet ' . $document['objet'] . ' #' . $document['id_objet'] . ' a bien été inséré en base de données avec la vu \'' . $document['vu'] . '\''; 235 } 236 // et on met à jour le statut dudit document si le statut est différent uniquement. 237 if (sql_updateq('spip_documents', array('statut' => $document['statut']), 238 'id_document=' . sql_quote($document['id_document']) . ' AND statut NOT IN (' . sql_quote($document['statut']) . ')')) { 239 $message_log[] = 'Le statut du document #' . $document['id_document'] . ' lié à l\'objet ' . $document['objet'] . ' #' . $document['id_objet'] . ' a bien été mis à jour avec le statut \'' . $document['statut'] . '\''; 240 } 241 } 242 } 243 } 244 // Par défaut, le message de log a 4 entrées. Voir en début de la présente fonction. 245 if (count($message_log) == 4) { 246 $message_log[] = 'Il n\'y a pas eu d\'action à faire en base de données.'; 247 } 248 // on met l'heure de fin de la procédure dans le message de log 249 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 250 $message_log[] = "-----\n"; 251 // Et maintenant on stocke les messages dans un fichier de log. 252 spip_log(implode("\n", $message_log), 'medias_dereferencer'); 253 254 return true; 182 function medias_maj_documents_non_lies() 183 { 184 include_spip('base/abstract_sql'); 185 include_spip('base/objets'); 186 $documents_raccourcis = medias_lister_medias_used_in_text(); 187 $message_log = array(); 188 $message_log[] = "\n-----"; 189 // On met l'heure de début de la procédure dans le message de log 190 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 191 $message_log[] = 'Fonction : '.__FUNCTION__; 192 if (session_get('id_auteur')) { 193 // S'il y a un auteur authentifié, on indique que c'est lui qui a lancé l'action. 194 $message_log[] = "L'action a été lancé par l'auteur #".session_get('id_auteur').', '.session_get('nom').' ('.session_get('statut').')'; 195 } else { 196 // S'il n'y a pas d'auteur authentifié, c'est SPIP qui lance le script en tâche de fond. 197 $message_log[] = "L'action a été lancé par SPIP en tâche de fond."; 198 } 199 200 // On lance les opérations uniquement si on a des documents utilisés en raccourcis. 201 if (is_array($documents_raccourcis) and count($documents_raccourcis) > 0) { 202 foreach ($documents_raccourcis as $document) { 203 if (sql_countsel('spip_documents_liens', array( 204 'id_document='.sql_quote($document['id_document']), 205 'id_objet='.sql_quote($document['id_objet']), 206 'objet='.sql_quote($document['objet']), 207 'vu NOT IN ('.sql_quote($document['vu']).')', 208 ))) { 209 // Le lien de ce media avec l'objet existe mais n'a pas la bonne valeur dans 'vu' 210 // Donc on met à jour la valeur de 'vu' pour ce lien. 211 if (sql_updateq('spip_documents_liens', array( 212 'vu' => $document['vu'], 213 ), 214 'id_document='.sql_quote($document['id_document']).' AND id_objet='.sql_quote($document['id_objet']).' AND objet='.sql_quote($document['objet']).' AND vu NOT IN ('.sql_quote($document['vu']).')')) { 215 $message_log[] = 'Le lien entre le document #'.$document['id_document'].' et l\'objet '.$document['objet'].' #'.$document['id_objet'].' a bien été mis à jour avec la vu \''.$document['vu'].'\''; 216 } 217 // et on met à jour le statut dudit document si le statut est différent uniquement. 218 if (sql_updateq('spip_documents', array('statut' => $document['statut']), 219 'id_document='.sql_quote($document['id_document']).' AND statut NOT IN ('.sql_quote($document['statut']).')')) { 220 $message_log[] = 'Le statut du document #'.$document['id_document'].' lié à l\'objet '.$document['objet'].' #'.$document['id_objet'].' a bien été mis à jour avec le statut \''.$document['statut'].'\''; 221 } 222 } elseif (!sql_countsel('spip_documents_liens', array( 223 'id_document='.sql_quote($document['id_document']), 224 'id_objet='.sql_quote($document['id_objet']), 225 'objet='.sql_quote($document['objet']), 226 'vu IN ('.sql_quote($document['vu']).')', 227 )) 228 ) { 229 // Le lien de ce média avec l'objet n'existe pas 230 // Alors on l'insère dans la table 231 if (sql_insertq('spip_documents_liens', array( 232 'id_document' => $document['id_document'], 233 'id_objet' => $document['id_objet'], 234 'objet' => $document['objet'], 235 'vu' => $document['vu'], 236 )) and lire_config('medias_dereferencer/lier_document') === 'oui' 237 ) { 238 $message_log[] = 'Le lien entre le document #'.$document['id_document'].' et l\'objet '.$document['objet'].' #'.$document['id_objet'].' a bien été inséré en base de données avec la vu \''.$document['vu'].'\''; 239 } 240 // et on met à jour le statut dudit document si le statut est différent uniquement. 241 if (sql_updateq('spip_documents', array('statut' => $document['statut']), 242 'id_document='.sql_quote($document['id_document']).' AND statut NOT IN ('.sql_quote($document['statut']).')')) { 243 $message_log[] = 'Le statut du document #'.$document['id_document'].' lié à l\'objet '.$document['objet'].' #'.$document['id_objet'].' a bien été mis à jour avec le statut \''.$document['statut'].'\''; 244 } 245 } 246 } 247 } 248 // Par défaut, le message de log a 4 entrées. Voir en début de la présente fonction. 249 if (count($message_log) == 4) { 250 $message_log[] = 'Il n\'y a pas eu d\'action à faire en base de données.'; 251 } 252 // on met l'heure de fin de la procédure dans le message de log 253 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 254 $message_log[] = "-----\n"; 255 // Et maintenant on stocke les messages dans un fichier de log. 256 spip_log(implode("\n", $message_log), 'medias_dereferencer'); 257 258 return true; 255 259 } 256 260 … … 261 265 * @return bool 262 266 */ 263 function md_creation_htaccess_img() { 264 include_spip('inc/config'); 265 $config_md = lire_config('medias_dereferencer'); 266 $message_log = array(); 267 $message_log[] = "\n-----"; 268 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 269 $message_log[] = 'Fonction : ' . __FUNCTION__; 270 if (session_get('id_auteur')) { 271 // S'il y a un auteur authentifié, on indique que c'est lui qui a lancé l'action. 272 $message_log[] = "L'action a été lancé par l'auteur #" . session_get('id_auteur') . ', ' . session_get('nom') . ' (' . session_get('statut') . ')'; 273 } else { 274 // S'il n'y a pas d'auteur authentifié, c'est SPIP qui lance le script en tâche de fond. 275 $message_log[] = "L'action a été lancé par SPIP en tâche de fond."; 276 } 277 278 /** 279 * On sélectionne les extensions des documents avec un statut en prepa, 280 * pour ne pas être trop gourmand en écriture sur le serveur. 281 */ 282 $extensions_documents = sql_allfetsel('DISTINCT(extension)', 'spip_documents', "statut='prepa'"); 283 if (is_array($extensions_documents) and count($extensions_documents) > 0) { 284 foreach ($extensions_documents as $extension) { 285 if (is_readable(_DIR_IMG . $extension['extension'])) { 286 $medias_htaccess = recuperer_fond('inclure/medias_htaccess', $extension); 287 if (function_exists('fopen') 288 and $ht = fopen(_DIR_IMG . $extension['extension'] . '/' . _ACCESS_FILE_NAME, "w") 289 ) { 290 fputs($ht, $medias_htaccess); 291 fclose($ht); 292 @chmod(_DIR_IMG . $extension['extension'] . '/' . _ACCESS_FILE_NAME, _SPIP_CHMOD & 0666); 293 $message_log[] = "Le fichier " . _ACCESS_FILE_NAME . " pour " . _DIR_IMG . $extension['extension'] . " a été créé. " . date_format(date_create(), 294 'Y-m-d H:i:s'); 295 } else { 296 $message_log[] = "Le fichier " . _ACCESS_FILE_NAME . " pour " . _DIR_IMG . $extension['extension'] . " n'a pu être créé. " 297 . date_format(date_create(), 'Y-m-d H:i:s'); 298 } 299 } 300 } 301 } 302 303 /** 304 * Par défaut, le message de log a 4 entrées. Voir en début de la présente fonction. 305 */ 306 if (count($message_log) == 4) { 307 $message_log[] = 'Aucun fichier ' . _ACCESS_FILE_NAME . " n'a été créé. " 308 . date_format(date_create(), 'Y-m-d H:i:s'); 309 } 310 // on met l'heure de fin de la procédure dans le message de log 311 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 312 $message_log[] = "-----\n"; 313 // Et maintenant on stocke les messages dans un fichier de log. 314 spip_log(implode("\n", $message_log), 'medias_dereferencer'); 315 316 if (count($message_log) > 7) { 317 return true; 318 } 319 320 return false; 321 } 322 323 function md_suppression_htaccess_img() { 324 include_spip('inc/config'); 325 include_spip('inc/flock'); 326 $config_md = lire_config('medias_dereferencer'); 327 $message_log = array(); 328 $message_log[] = "\n-----"; 329 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 330 $message_log[] = 'Fonction : ' . __FUNCTION__; 331 if (session_get('id_auteur')) { 332 // S'il y a un auteur authentifié, on indique que c'est lui qui a lancé l'action. 333 $message_log[] = "L'action a été lancé par l'auteur #" . session_get('id_auteur') . ', ' . session_get('nom') . ' (' . session_get('statut') . ')'; 334 } else { 335 // S'il n'y a pas d'auteur authentifié, c'est SPIP qui lance le script en tâche de fond. 336 $message_log[] = "L'action a été lancé par SPIP en tâche de fond."; 337 } 338 339 /** 340 * On recherche les extensions des documents sans distinction de statut des documents. 341 */ 342 $extensions_documents = sql_allfetsel('DISTINCT(extension)', 'spip_documents'); 343 if (is_array($extensions_documents) and count($extensions_documents) > 0) { 344 foreach ($extensions_documents as $extension) { 345 if (is_readable(_DIR_IMG . $extension['extension'])) { 346 spip_unlink(_DIR_IMG . $extension['extension'] . '/' . _ACCESS_FILE_NAME); 347 $message_log[] = "Le fichier " . _ACCESS_FILE_NAME . " pour " . _DIR_IMG . $extension['extension'] . " a été supprimé avec succès."; 348 } 349 } 350 } 351 352 353 // Par défaut, le message de log a 4 entrées. Voir en début de la présente fonction. 354 if (count($message_log) == 4) { 355 $message_log[] = 'Aucun fichier ' . _ACCESS_FILE_NAME . " n'a été supprimé. " 356 . date_format(date_create(), 'Y-m-d H:i:s'); 357 } 358 // on met l'heure de fin de la procédure dans le message de log 359 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 360 $message_log[] = "-----\n"; 361 // Et maintenant on stocke les messages dans un fichier de log. 362 spip_log(implode("\n", $message_log), 'medias_dereferencer'); 363 364 if (count($message_log) > 7) { 365 return true; 366 } 367 368 return false; 369 370 } 371 372 function md_adresses_allow() { 373 include_spip('inc/config'); 374 $config_md = lire_config('medias_dereferencer'); 375 $config_md = $config_md['adresse_ip']; 376 if (empty($config_md)) { 377 return false; 378 } 379 if (!is_array($config_md)) { 380 $config_md = explode(';', $config_md); 381 } 382 $config_md = array_filter($config_md); 383 $string = " Allow from " . implode("\n Allow from ", $config_md); 384 385 return $string; 386 } 267 function md_creation_htaccess_img() 268 { 269 include_spip('inc/config'); 270 $config_md = lire_config('medias_dereferencer'); 271 $message_log = array(); 272 $message_log[] = "\n-----"; 273 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 274 $message_log[] = 'Fonction : '.__FUNCTION__; 275 if (session_get('id_auteur')) { 276 // S'il y a un auteur authentifié, on indique que c'est lui qui a lancé l'action. 277 $message_log[] = "L'action a été lancé par l'auteur #".session_get('id_auteur').', '.session_get('nom').' ('.session_get('statut').')'; 278 } else { 279 // S'il n'y a pas d'auteur authentifié, c'est SPIP qui lance le script en tâche de fond. 280 $message_log[] = "L'action a été lancé par SPIP en tâche de fond."; 281 } 282 283 /* 284 * On sélectionne les extensions des documents avec un statut en prepa, 285 * pour ne pas être trop gourmand en écriture sur le serveur. 286 */ 287 $extensions_documents = sql_allfetsel('DISTINCT(extension)', 'spip_documents', "statut='prepa'"); 288 if (is_array($extensions_documents) and count($extensions_documents) > 0) { 289 foreach ($extensions_documents as $extension) { 290 if (is_readable(_DIR_IMG.$extension['extension'])) { 291 $medias_htaccess = recuperer_fond('inclure/medias_htaccess', $extension); 292 if (function_exists('fopen') 293 and $ht = fopen(_DIR_IMG.$extension['extension'].'/'._ACCESS_FILE_NAME, 'w') 294 ) { 295 fputs($ht, $medias_htaccess); 296 fclose($ht); 297 @chmod(_DIR_IMG.$extension['extension'].'/'._ACCESS_FILE_NAME, _SPIP_CHMOD & 0666); 298 $message_log[] = 'Le fichier '._ACCESS_FILE_NAME.' pour '._DIR_IMG.$extension['extension'].' a été créé. '.date_format(date_create(), 299 'Y-m-d H:i:s'); 300 } else { 301 $message_log[] = 'Le fichier '._ACCESS_FILE_NAME.' pour '._DIR_IMG.$extension['extension']." n'a pu être créé. " 302 .date_format(date_create(), 'Y-m-d H:i:s'); 303 } 304 } 305 } 306 } 307 308 /* 309 * Par défaut, le message de log a 4 entrées. Voir en début de la présente fonction. 310 */ 311 if (count($message_log) == 4) { 312 $message_log[] = 'Aucun fichier '._ACCESS_FILE_NAME." n'a été créé. " 313 .date_format(date_create(), 'Y-m-d H:i:s'); 314 } 315 // on met l'heure de fin de la procédure dans le message de log 316 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 317 $message_log[] = "-----\n"; 318 // Et maintenant on stocke les messages dans un fichier de log. 319 spip_log(implode("\n", $message_log), 'medias_dereferencer'); 320 321 if (count($message_log) > 7) { 322 return true; 323 } 324 325 return false; 326 } 327 328 function md_suppression_htaccess_img() 329 { 330 include_spip('inc/config'); 331 include_spip('inc/flock'); 332 $config_md = lire_config('medias_dereferencer'); 333 $message_log = array(); 334 $message_log[] = "\n-----"; 335 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 336 $message_log[] = 'Fonction : '.__FUNCTION__; 337 if (session_get('id_auteur')) { 338 // S'il y a un auteur authentifié, on indique que c'est lui qui a lancé l'action. 339 $message_log[] = "L'action a été lancé par l'auteur #".session_get('id_auteur').', '.session_get('nom').' ('.session_get('statut').')'; 340 } else { 341 // S'il n'y a pas d'auteur authentifié, c'est SPIP qui lance le script en tâche de fond. 342 $message_log[] = "L'action a été lancé par SPIP en tâche de fond."; 343 } 344 345 /* 346 * On recherche les extensions des documents sans distinction de statut des documents. 347 */ 348 $extensions_documents = sql_allfetsel('DISTINCT(extension)', 'spip_documents'); 349 if (is_array($extensions_documents) and count($extensions_documents) > 0) { 350 foreach ($extensions_documents as $extension) { 351 if (is_readable(_DIR_IMG.$extension['extension'])) { 352 spip_unlink(_DIR_IMG.$extension['extension'].'/'._ACCESS_FILE_NAME); 353 $message_log[] = 'Le fichier '._ACCESS_FILE_NAME.' pour '._DIR_IMG.$extension['extension'].' a été supprimé avec succès.'; 354 } 355 } 356 } 357 358 // Par défaut, le message de log a 4 entrées. Voir en début de la présente fonction. 359 if (count($message_log) == 4) { 360 $message_log[] = 'Aucun fichier '._ACCESS_FILE_NAME." n'a été supprimé. " 361 .date_format(date_create(), 'Y-m-d H:i:s'); 362 } 363 // on met l'heure de fin de la procédure dans le message de log 364 $message_log[] = date_format(date_create(), 'Y-m-d H:i:s'); 365 $message_log[] = "-----\n"; 366 // Et maintenant on stocke les messages dans un fichier de log. 367 spip_log(implode("\n", $message_log), 'medias_dereferencer'); 368 369 if (count($message_log) > 7) { 370 return true; 371 } 372 373 return false; 374 } 375 376 function md_adresses_allow() 377 { 378 include_spip('inc/config'); 379 $config_md = lire_config('medias_dereferencer'); 380 $config_md = $config_md['adresse_ip']; 381 $directive = 'Allow from'; 382 if (empty($config_md)) { 383 return false; 384 } 385 if (!is_array($config_md)) { 386 $config_md = explode(';', $config_md); 387 } 388 if (isset($config_md['apache']) and $config_md['apache'] === 'oui') { 389 $directive = 'Require not ip'; 390 } 391 $config_md = array_filter($config_md); 392 $string = " $directive ".implode("\n $directive ", $config_md); 393 394 return $string; 395 } -
_plugins_/medias_dereferencer/trunk/paquet.xml
r95685 r96279 2 2 prefix="medias_dereferencer" 3 3 categorie="statistique" 4 version="1.2. 2"4 version="1.2.3" 5 5 etat="test" 6 6 compatibilite="[3.0.9;3.1.*]" … … 15 15 <licence>GNU/GPL</licence> 16 16 17 <necessite nom="saisies" compatibilite="[2.5.29;]" /> 18 17 19 <pipeline nom="autoriser" inclure="medias_dereferencer_autorisations.php" /> 18 20 <pipeline nom="taches_generales_cron" inclure="medias_dereferencer_pipelines.php" />
Note: See TracChangeset
for help on using the changeset viewer.