Changeset 96279 in spip-zone


Ignore:
Timestamp:
Mar 28, 2016, 10:30:21 PM (5 years ago)
Author:
teddy.spip@…
Message:
  • Il y avait un bel oubli de nécessite dans le plugin… On utilisait SAISIE… Mais comme ce dernier est très souvent installé sur les dernières versions de SPIP, cela ne se voyait pas ;
  • On ajoute une compatibilité avec Apache >2.4. Le nom du paramètre n'est pas très évocateur par raport au besoin, mais c'est pour apache et c'est sa suele utilisation acetuellement dans le plugin. On avisera plus tard si besoin.
  • Up de z, ce n'est pas une nouvelle fonctionnalité mais un bug corrigé.
Location:
_plugins_/medias_dereferencer/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/medias_dereferencer/trunk/formulaires/configurer_medias_dereferencer.html

    r95634 r96279  
    1818                                defaut=non})]
    1919
    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>
    2723
    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})]>
    3249
    3350                </[(#VAL{ul}|saisie_balise_structure_formulaire)]>
  • _plugins_/medias_dereferencer/trunk/inclure/medias_htaccess.html

    r95634 r96279  
    22<BOUCLE_disallow (DOCUMENTS) {statut='prepa'} {extension?} {par fichier}>
    33<Files [(#ENV{extension}|?{[(#FICHIER**|replace{#ENV{extension}/,''})],[(#FICHIER**)]})]>
     4[(#CONFIG{medias_dereferencer/apache}|=={oui}|?{
    45    Order Deny,Allow
    56    Deny from all[
     7(#VAL|md_adresses_allow)],
     8    Require all denied[
    69(#VAL|md_adresses_allow)]
     10})]
    711</Files>
    812</BOUCLE_disallow>
  • _plugins_/medias_dereferencer/trunk/lang/medias_dereferencer_fr.php

    r95639 r96279  
    44
    55if (!defined('_ECRIRE_INC_VERSION')) {
    6         return;
     6    return;
    77}
    88
    99$GLOBALS[$GLOBALS['idx_lang']] = array(
    1010
    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',
    1416
    15         // C
    16         'cfg_exemple' => 'Exemple',
    17         'cfg_exemple_explication' => 'Explication de cet exemple',
    18         'cfg_titre_parametrages' => 'Paramétrages',
     17    // C
     18    'cfg_exemple' => 'Exemple',
     19    'cfg_exemple_explication' => 'Explication de cet exemple',
     20    'cfg_titre_parametrages' => 'Paramétrages',
    1921
    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>',
    2427
    25         // L
    26         'lier_document_choix_non' => 'Non',
    27         'lier_document_choix_oui' => 'Oui',
    28         '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 ?',
    29         'lier_document_label' => 'Désirez-vous lier les documents ?',
     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 ?',
    3033
    31         // M
    32         'medias_dereferencer_titre' => 'Déréférencer les médias',
     34    // M
     35    'medias_dereferencer_titre' => 'Déréférencer les médias',
    3336
    34         // R
    35         'robots_txt_content' => 'Inclusion pour le fichier robots.txt',
     37    // R
     38    'robots_txt_content' => 'Inclusion pour le fichier robots.txt',
    3639
    37         // T
    38         'titre_page_configurer_medias_dereferencer' => 'Déréférencer les médias',
    39         'titre_page_medias_lister_disallow' => 'Liste des Médias interdits aux moteurs de recherche.',
     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.',
    4043);
  • _plugins_/medias_dereferencer/trunk/medias_dereferencer_fonctions.php

    r95685 r96279  
    1111 */
    1212if (!defined('_ECRIRE_INC_VERSION')) {
    13         return;
     13    return;
    1414}
    1515
     
    1818 *
    1919 * @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 */
     22function 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;
    5455}
    5556
     
    6061 * @return array
    6162 */
    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;
     63function 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;
    115117}
    116118
     
    121123 * @return bool
    122124 */
    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;
     125function 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;
    170173}
    171174
     
    177180 * @return [type] [description]
    178181 */
    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;
     182function 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;
    255259}
    256260
     
    261265 * @return bool
    262266 */
    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 }
     267function 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
     328function 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
     376function 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  
    22        prefix="medias_dereferencer"
    33        categorie="statistique"
    4         version="1.2.2"
     4        version="1.2.3"
    55        etat="test"
    66        compatibilite="[3.0.9;3.1.*]"
     
    1515        <licence>GNU/GPL</licence>
    1616
     17        <necessite nom="saisies" compatibilite="[2.5.29;]" />
     18
    1719        <pipeline nom="autoriser" inclure="medias_dereferencer_autorisations.php" />
    1820        <pipeline nom="taches_generales_cron" inclure="medias_dereferencer_pipelines.php" />
Note: See TracChangeset for help on using the changeset viewer.