Changeset 96280 in spip-zone


Ignore:
Timestamp:
Mar 28, 2016, 10:41:24 PM (5 years ago)
Author:
teddy.spip@…
Message:

Formatage et indentation.

Location:
_plugins_/medias_dereferencer/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/medias_dereferencer/trunk/genie/medias_dereferencer.php

    r95639 r96280  
    66 * @plugin     Déréférencer les médias
    77 *
    8  * @copyright  2015
     8 * @copyright  2015-2016
    99 * @author     Teddy Payet
    1010 * @licence    GNU/GPL
  • _plugins_/medias_dereferencer/trunk/genie/medias_dereferencer_htaccess.php

    r95639 r96280  
    66 * @plugin     Déréférencer les médias
    77 *
    8  * @copyright  2015
     8 * @copyright  2015-2016
    99 * @author     Teddy Payet
    1010 * @licence    GNU/GPL
  • _plugins_/medias_dereferencer/trunk/genie/medias_dereferencer_vu.php

    r95639 r96280  
    66 * @plugin     Déréférencer les médias
    77 *
    8  * @copyright  2015
     8 * @copyright  2015-2016
    99 * @author     Teddy Payet
    1010 * @licence    GNU/GPL
  • _plugins_/medias_dereferencer/trunk/lang/medias_dereferencer_fr.php

    r96279 r96280  
    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',
    14     'apache_explication' => 'Avez-vous une version d\'Apache supérieure ou égale à 2.4 ?',
    15     'apache_label' => 'Version d\'Apache',
     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',
    1616
    17     // C
    18     'cfg_exemple' => 'Exemple',
    19     'cfg_exemple_explication' => 'Explication de cet exemple',
    20     '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',
    2121
    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>',
     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>',
    2727
    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 ?',
     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 ?',
    3333
    34     // M
    35     'medias_dereferencer_titre' => 'Déréférencer les médias',
     34        // M
     35        'medias_dereferencer_titre' => 'Déréférencer les médias',
    3636
    37     // R
    38     'robots_txt_content' => 'Inclusion pour le fichier robots.txt',
     37        // R
     38        'robots_txt_content' => 'Inclusion pour le fichier robots.txt',
    3939
    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        // 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.',
    4343);
  • _plugins_/medias_dereferencer/trunk/medias_dereferencer_fonctions.php

    r96279 r96280  
    1111 */
    1212if (!defined('_ECRIRE_INC_VERSION')) {
    13     return;
     13        return;
    1414}
    1515
     
    2020 *               Tableau avec pour clé le nom de la table.
    2121 */
    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;
     22function 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('/,/', $valeur['key']['PRIMARY KEY']); // l'id_primary doit faire référence à un seul champ
     32                if (in_array($table, $lister_tables_principales) and $id_primary_double == 0) {
     33                        $champs_texte[$table]['id_primary'] = $valeur['key']['PRIMARY KEY'];
     34                        $champs_texte[$table]['objet'] = objet_type($champs_texte[$table]['id_primary']);
     35                        $champs_texte[$table]['statut'] = (isset($valeur['field']['statut']) ? true : false);
     36                        $champs_texte[$table]['publie'] = ($champs_texte[$table]['statut'] ? $valeur['statut'][0]['publie'] : false);
     37
     38                        foreach ($valeur['field'] as $champs => $descriptif) {
     39                                if (preg_match('/text/', $descriptif)) {
     40                                        $champs_texte[$table]['texte'][] = $champs;
     41                                }
     42                        }
     43                        if (isset($champs_texte[$table]['texte'])) {
     44                                $champs_texte[$table]['texte'] = implode(',', $champs_texte[$table]['texte']);
     45                        } else {
     46                                unset($champs_texte[$table]);
     47                        }
     48                }
     49        }
     50        $champs_texte = array_filter($champs_texte);
     51
     52        return $champs_texte;
    5553}
    5654
     
    6159 * @return array
    6260 */
    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;
     61function medias_lister_medias_used_in_text() {
     62        include_spip('base/abstract_sql');
     63
     64        $tables_texte = medias_lister_champs_texte();
     65        $documents = array();
     66        foreach ($tables_texte as $table => $champs) {
     67                $statut_requete = '';
     68                if (isset($champs['statut']) and $champs['statut'] and $champs['objet'] != 'auteur') {
     69                        $statut_requete = ', statut';
     70                }
     71                $resultats = sql_allfetsel($champs['id_primary'] . ' as id_primary, CONCAT(' . $champs['texte'] . ') as texte_tmp' . $statut_requete, $table);
     72                foreach ($resultats as $resultat => $value) {
     73                        // On recherche les raccourcis typographiques
     74                        if (preg_match_all('/(doc|img|emb)([0-9]+)/', $value['texte_tmp'], $docs)) {
     75                                // On a au moins un résultat, alors on commence le traitement.
     76                                if (isset($value['statut']) and $value['statut'] == $champs['publie']) {
     77                                        // l'objet a un statut et est publié ou actif,
     78                                        // alors le document doit-être publié aussi.
     79                                        $statut = 'publie';
     80                                } elseif (isset($value['statut']) and $value['statut'] != $champs['publie']) {
     81                                        // l'objet a un statut et n'est publié ou actif,
     82                                        // alors le document doit-être en préparation.
     83                                        $statut = 'prepa';
     84                                } elseif (!isset($value['statut'])) {
     85                                        // L'objet n'a pas de statut
     86                                        // et donc son affichage n'est pas conditionné par le statut,
     87                                        // alors le document sera publié.
     88                                        $statut = 'publie';
     89                                }
     90                                // On stocke maintenant toutes ces infos pour chaque document trouvé.
     91                                foreach ($docs[2] as $id_doc) {
     92                                        // structure du tableau :
     93                                        // 0 : id_document
     94                                        // 1 : id_objet
     95                                        // 2 : objet
     96                                        // 3 : vu (oui ou non)
     97                                        // 4 : statut du document
     98                                        $documents[] = array(
     99                                                'id_document' => $id_doc,
     100                                                'id_objet' => $value['id_primary'],
     101                                                'objet' => $champs['objet'],
     102                                                'vu' => 'oui',
     103                                                'statut' => $statut,
     104                                        );
     105                                }
     106                        }
     107                }
     108        }
     109        // asort($documents);
     110        // $documents = array_values(array_unique($documents));
     111
     112        return $documents;
    117113}
    118114
     
    123119 * @return bool
    124120 */
    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;
     121function medias_maj_documents_lies() {
     122        include_spip('base/abstract_sql');
     123        include_spip('base/objets');
     124        $message_log = array();
     125        $message_log[] = "\n-----";
     126        $message_log[] = date_format(date_create(), 'Y-m-d H:i:s');
     127        $message_log[] = 'Fonction : ' . __FUNCTION__;
     128        if (session_get('id_auteur')) {
     129                // S'il y a un auteur authentifié, on indique que c'est lui qui a lancé l'action.
     130                $message_log[] = "L'action a été lancé par l'auteur #" . session_get('id_auteur') . ', ' . session_get('nom') . ' (' . session_get('statut') . ')';
     131        } else {
     132                // S'il n'y a pas d'auteur authentifié, c'est SPIP qui lance le script en tâche de fond.
     133                $message_log[] = "L'action a été lancé par SPIP en tâche de fond.";
     134        }
     135
     136        // On ne s'occupe que des objets pour lesquels on a des liens avec des documents.
     137        $objets_lies = sql_fetsel('DISTINCT objet', 'spip_documents_liens');
     138        foreach ($objets_lies as $objet_lie) {
     139                // exemple de requête demandée :
     140                // SELECT * FROM spip_documents
     141                // 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')))
     142                // AND statut IN ('publie')
     143                // ***
     144                // Sélectionner tous les documents publiés liés à des objets non publiés
     145                // ***
     146                $documents = sql_allfetsel('id_document,statut', 'spip_documents', "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')))");
     147                if (is_array($documents) and count($documents) > 0) {
     148                        foreach ($documents as $document) {
     149                                if (sql_updateq('spip_documents', array('statut' => 'prepa'), 'id_document=' . $document['id_document'])) {
     150                                        $message_log[] = 'Le statut du document #' . $document['id_document'] . ' lié à l\'objet ' . $objet_lie . ' a bien été mis à jour avec le statut \'' . $document['statut'] . '\'';
     151                                }
     152                        }
     153                }
     154        }
     155        // Par défaut, le message de log a 4 entrées. Voir en début de la présente fonction.
     156        if (count($message_log) == 4) {
     157                $message_log[] = 'Il n\'y a pas eu d\'action à faire en base de données.';
     158        }
     159        // On met l'heure de fin de la procédure dans le message de log
     160        $message_log[] = date_format(date_create(), 'Y-m-d H:i:s');
     161        $message_log[] = "-----\n";
     162        // Et maintenant on stocke les messages dans un fichier de log.
     163        spip_log(implode("\n", $message_log), 'medias_dereferencer');
     164
     165        return true;
    173166}
    174167
     
    180173 * @return [type] [description]
    181174 */
    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;
     175function medias_maj_documents_non_lies() {
     176        include_spip('base/abstract_sql');
     177        include_spip('base/objets');
     178        $documents_raccourcis = medias_lister_medias_used_in_text();
     179        $message_log = array();
     180        $message_log[] = "\n-----";
     181        // On met l'heure de début de la procédure dans le message de log
     182        $message_log[] = date_format(date_create(), 'Y-m-d H:i:s');
     183        $message_log[] = 'Fonction : ' . __FUNCTION__;
     184        if (session_get('id_auteur')) {
     185                // S'il y a un auteur authentifié, on indique que c'est lui qui a lancé l'action.
     186                $message_log[] = "L'action a été lancé par l'auteur #" . session_get('id_auteur') . ', ' . session_get('nom') . ' (' . session_get('statut') . ')';
     187        } else {
     188                // S'il n'y a pas d'auteur authentifié, c'est SPIP qui lance le script en tâche de fond.
     189                $message_log[] = "L'action a été lancé par SPIP en tâche de fond.";
     190        }
     191
     192        // On lance les opérations uniquement si on a des documents utilisés en raccourcis.
     193        if (is_array($documents_raccourcis) and count($documents_raccourcis) > 0) {
     194                foreach ($documents_raccourcis as $document) {
     195                        if (sql_countsel('spip_documents_liens', array(
     196                                'id_document=' . sql_quote($document['id_document']),
     197                                'id_objet=' . sql_quote($document['id_objet']),
     198                                'objet=' . sql_quote($document['objet']),
     199                                'vu NOT IN (' . sql_quote($document['vu']) . ')',
     200                        ))) {
     201                                // Le lien de ce media avec l'objet existe mais n'a pas la bonne valeur dans 'vu'
     202                                // Donc on met à jour la valeur de 'vu' pour ce lien.
     203                                if (sql_updateq('spip_documents_liens', array(
     204                                        'vu' => $document['vu'],
     205                                ), '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']) . ')')) {
     206                                        $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'] . '\'';
     207                                }
     208                                // et on met à jour le statut dudit document si le statut est différent uniquement.
     209                                if (sql_updateq('spip_documents', array('statut' => $document['statut']), 'id_document=' . sql_quote($document['id_document']) . ' AND statut NOT IN (' . sql_quote($document['statut']) . ')')) {
     210                                        $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'] . '\'';
     211                                }
     212                        } elseif (!sql_countsel('spip_documents_liens', array(
     213                                'id_document=' . sql_quote($document['id_document']),
     214                                'id_objet=' . sql_quote($document['id_objet']),
     215                                'objet=' . sql_quote($document['objet']),
     216                                'vu IN (' . sql_quote($document['vu']) . ')',
     217                        ))
     218                        ) {
     219                                // Le lien de ce média avec l'objet n'existe pas
     220                                // Alors on l'insère dans la table
     221                                if (sql_insertq('spip_documents_liens', array(
     222                                                'id_document' => $document['id_document'],
     223                                                'id_objet' => $document['id_objet'],
     224                                                'objet' => $document['objet'],
     225                                                'vu' => $document['vu'],
     226                                        )) and lire_config('medias_dereferencer/lier_document') === 'oui'
     227                                ) {
     228                                        $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'] . '\'';
     229                                }
     230                                // et on met à jour le statut dudit document si le statut est différent uniquement.
     231                                if (sql_updateq('spip_documents', array('statut' => $document['statut']), 'id_document=' . sql_quote($document['id_document']) . ' AND statut NOT IN (' . sql_quote($document['statut']) . ')')) {
     232                                        $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'] . '\'';
     233                                }
     234                        }
     235                }
     236        }
     237        // Par défaut, le message de log a 4 entrées. Voir en début de la présente fonction.
     238        if (count($message_log) == 4) {
     239                $message_log[] = 'Il n\'y a pas eu d\'action à faire en base de données.';
     240        }
     241        // on met l'heure de fin de la procédure dans le message de log
     242        $message_log[] = date_format(date_create(), 'Y-m-d H:i:s');
     243        $message_log[] = "-----\n";
     244        // Et maintenant on stocke les messages dans un fichier de log.
     245        spip_log(implode("\n", $message_log), 'medias_dereferencer');
     246
     247        return true;
    259248}
    260249
     
    265254 * @return bool
    266255 */
    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 }
     256function md_creation_htaccess_img() {
     257        include_spip('inc/config');
     258        $config_md = lire_config('medias_dereferencer');
     259        $message_log = array();
     260        $message_log[] = "\n-----";
     261        $message_log[] = date_format(date_create(), 'Y-m-d H:i:s');
     262        $message_log[] = 'Fonction : ' . __FUNCTION__;
     263        if (session_get('id_auteur')) {
     264                // S'il y a un auteur authentifié, on indique que c'est lui qui a lancé l'action.
     265                $message_log[] = "L'action a été lancé par l'auteur #" . session_get('id_auteur') . ', ' . session_get('nom') . ' (' . session_get('statut') . ')';
     266        } else {
     267                // S'il n'y a pas d'auteur authentifié, c'est SPIP qui lance le script en tâche de fond.
     268                $message_log[] = "L'action a été lancé par SPIP en tâche de fond.";
     269        }
     270
     271        /*
     272         * On sélectionne les extensions des documents avec un statut en prepa,
     273         * pour ne pas être trop gourmand en écriture sur le serveur.
     274         */
     275        $extensions_documents = sql_allfetsel('DISTINCT(extension)', 'spip_documents', "statut='prepa'");
     276        if (is_array($extensions_documents) and count($extensions_documents) > 0) {
     277                foreach ($extensions_documents as $extension) {
     278                        if (is_readable(_DIR_IMG . $extension['extension'])) {
     279                                $medias_htaccess = recuperer_fond('inclure/medias_htaccess', $extension);
     280                                if (function_exists('fopen') and $ht = fopen(_DIR_IMG . $extension['extension'] . '/' . _ACCESS_FILE_NAME, 'w')) {
     281                                        fputs($ht, $medias_htaccess);
     282                                        fclose($ht);
     283                                        @chmod(_DIR_IMG . $extension['extension'] . '/' . _ACCESS_FILE_NAME, _SPIP_CHMOD & 0666);
     284                                        $message_log[] = 'Le fichier ' . _ACCESS_FILE_NAME . ' pour ' . _DIR_IMG . $extension['extension'] . ' a été créé. ' . date_format(date_create(), 'Y-m-d H:i:s');
     285                                } else {
     286                                        $message_log[] = 'Le fichier ' . _ACCESS_FILE_NAME . ' pour ' . _DIR_IMG . $extension['extension'] . " n'a pu être créé. " . date_format(date_create(), 'Y-m-d H:i:s');
     287                                }
     288                        }
     289                }
     290        }
     291
     292        /*
     293         * Par défaut, le message de log a 4 entrées. Voir en début de la présente fonction.
     294         */
     295        if (count($message_log) == 4) {
     296                $message_log[] = 'Aucun fichier ' . _ACCESS_FILE_NAME . " n'a été créé. " . date_format(date_create(), 'Y-m-d H:i:s');
     297        }
     298        // on met l'heure de fin de la procédure dans le message de log
     299        $message_log[] = date_format(date_create(), 'Y-m-d H:i:s');
     300        $message_log[] = "-----\n";
     301        // Et maintenant on stocke les messages dans un fichier de log.
     302        spip_log(implode("\n", $message_log), 'medias_dereferencer');
     303
     304        if (count($message_log) > 7) {
     305                return true;
     306        }
     307
     308        return false;
     309}
     310
     311function md_suppression_htaccess_img() {
     312        include_spip('inc/config');
     313        include_spip('inc/flock');
     314        $config_md = lire_config('medias_dereferencer');
     315        $message_log = array();
     316        $message_log[] = "\n-----";
     317        $message_log[] = date_format(date_create(), 'Y-m-d H:i:s');
     318        $message_log[] = 'Fonction : ' . __FUNCTION__;
     319        if (session_get('id_auteur')) {
     320                // S'il y a un auteur authentifié, on indique que c'est lui qui a lancé l'action.
     321                $message_log[] = "L'action a été lancé par l'auteur #" . session_get('id_auteur') . ', ' . session_get('nom') . ' (' . session_get('statut') . ')';
     322        } else {
     323                // S'il n'y a pas d'auteur authentifié, c'est SPIP qui lance le script en tâche de fond.
     324                $message_log[] = "L'action a été lancé par SPIP en tâche de fond.";
     325        }
     326
     327        /*
     328         * On recherche les extensions des documents sans distinction de statut des documents.
     329         */
     330        $extensions_documents = sql_allfetsel('DISTINCT(extension)', 'spip_documents');
     331        if (is_array($extensions_documents) and count($extensions_documents) > 0) {
     332                foreach ($extensions_documents as $extension) {
     333                        if (is_readable(_DIR_IMG . $extension['extension'])) {
     334                                spip_unlink(_DIR_IMG . $extension['extension'] . '/' . _ACCESS_FILE_NAME);
     335                                $message_log[] = 'Le fichier ' . _ACCESS_FILE_NAME . ' pour ' . _DIR_IMG . $extension['extension'] . ' a été supprimé avec succès.';
     336                        }
     337                }
     338        }
     339
     340        // Par défaut, le message de log a 4 entrées. Voir en début de la présente fonction.
     341        if (count($message_log) == 4) {
     342                $message_log[] = 'Aucun fichier ' . _ACCESS_FILE_NAME . " n'a été supprimé. " . date_format(date_create(), 'Y-m-d H:i:s');
     343        }
     344        // on met l'heure de fin de la procédure dans le message de log
     345        $message_log[] = date_format(date_create(), 'Y-m-d H:i:s');
     346        $message_log[] = "-----\n";
     347        // Et maintenant on stocke les messages dans un fichier de log.
     348        spip_log(implode("\n", $message_log), 'medias_dereferencer');
     349
     350        if (count($message_log) > 7) {
     351                return true;
     352        }
     353
     354        return false;
     355}
     356
     357function md_adresses_allow() {
     358        include_spip('inc/config');
     359        $config_md = lire_config('medias_dereferencer');
     360        $config_md = $config_md['adresse_ip'];
     361        $directive = 'Allow from';
     362        if (empty($config_md)) {
     363                return false;
     364        }
     365        if (!is_array($config_md)) {
     366                $config_md = explode(';', $config_md);
     367        }
     368        if (isset($config_md['apache']) and $config_md['apache'] === 'oui') {
     369                $directive = 'Require not ip';
     370        }
     371        $config_md = array_filter($config_md);
     372        $string = "    $directive " . implode("\n    $directive ", $config_md);
     373
     374        return $string;
     375}
Note: See TracChangeset for help on using the changeset viewer.