Changeset 95637 in spip-zone for _plugins_/medias_dereferencer/branches


Ignore:
Timestamp:
Mar 1, 2016, 1:02:22 AM (5 years ago)
Author:
teddy.spip@…
Message:

On importe dans la branche v1 les modifications apportées dans le trunk.

Location:
_plugins_/medias_dereferencer/branches/v1
Files:
9 edited
4 copied

Legend:

Unmodified
Added
Removed
  • _plugins_/medias_dereferencer/branches/v1

  • _plugins_/medias_dereferencer/branches/v1/formulaires/configurer_medias_dereferencer.html

    r92763 r95637  
    1515                                datas=#ARRAY{
    1616                                        oui,<:medias_dereferencer:lier_document_choix_oui:>,
    17                                         non,<:medias_dereferencer:lier_document_choix_non:>}})]
     17                                        non,<:medias_dereferencer:lier_document_choix_non:>},
     18                                defaut=non})]
     19
     20                        [(#SAISIE{radio, htaccess,
     21                                label=<:medias_dereferencer:htaccess_label:>,
     22                                explication=<:medias_dereferencer:htaccess_explication:>,
     23                                datas=#ARRAY{
     24                                        oui,<:medias_dereferencer:lier_document_choix_oui:>,
     25                                        non,<:medias_dereferencer:lier_document_choix_non:>},
     26                                defaut=non})]
     27
     28                        [(#SAISIE{textarea, adresse_ip,
     29                                label=<:medias_dereferencer:adresse_ip_label:>,
     30                                explication=<:medias_dereferencer:adresse_ip_explication:>,
     31                                rows=5})]
    1832
    1933                </[(#VAL{ul}|saisie_balise_structure_formulaire)]>
  • _plugins_/medias_dereferencer/branches/v1/inclure/medias_disallow.html

    r90803 r95637  
    11<BOUCLE_disallow (DOCUMENTS) {statut='prepa'} {par fichier}>
    2 Disallow: [/IMG/(#FICHIER**)] # #ID_DOCUMENT / #STATUT</BOUCLE_disallow>
     2Disallow: [#EVAL{'_DIR_IMG'}(#FICHIER**)] # #ID_DOCUMENT / #STATUT</BOUCLE_disallow>
  • _plugins_/medias_dereferencer/branches/v1/lang/medias_dereferencer_fr.php

    r90806 r95637  
    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
    1115    // C
    1216    'cfg_exemple' => 'Exemple',
    1317    'cfg_exemple_explication' => 'Explication de cet exemple',
    1418    'cfg_titre_parametrages' => 'Paramétrages',
     19
     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>',
    1524
    1625    // L
     
    2332    'medias_dereferencer_titre' => 'Déréférencer les médias',
    2433
     34    // R
     35    'robots_txt_content' => 'Inclusion pour le fichier robots.txt',
     36
    2537    // T
    2638    'titre_page_configurer_medias_dereferencer' => 'Déréférencer les médias',
  • _plugins_/medias_dereferencer/branches/v1/medias_dereferencer_fonctions.php

    r95185 r95637  
    2929                // Donc, on ne prend pas les tables telles que spip_visites, spip_referers, etc.
    3030                // 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
     31                $id_primary_double = preg_match('/,/',
     32                        $valeur['key']['PRIMARY KEY']); // l'id_primary doit faire référence à un seul champ
    3233                if (in_array($table, $lister_tables_principales) and $id_primary_double == 0) {
    3334                        $champs_texte[$table]['id_primary'] = $valeur['key']['PRIMARY KEY'];
     
    6970                        $statut_requete = ', statut';
    7071                }
    71                 $resultats = sql_allfetsel($champs['id_primary'] . ' as id_primary, CONCAT(' . $champs['texte'] . ') as texte_tmp' . $statut_requete, $table);
     72                $resultats = sql_allfetsel($champs['id_primary'] . ' as id_primary, CONCAT(' . $champs['texte'] . ') as texte_tmp' . $statut_requete,
     73                        $table);
    7274                foreach ($resultats as $resultat => $value) {
    7375                        // On recherche les raccourcis typographiques
     
    144146                // Sélectionner tous les documents publiés liés à des objets non publiés
    145147                // ***
    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')))");
     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')))");
    147150                if (is_array($documents) and count($documents) > 0) {
    148151                        foreach ($documents as $document) {
    149                                 if (sql_updateq('spip_documents', array('statut' => 'prepa'), 'id_document=' . $document['id_document'])) {
     152                                if (sql_updateq('spip_documents', array('statut' => 'prepa'),
     153                                        'id_document=' . $document['id_document'])) {
    150154                                        $message_log[] = 'Le statut du document #' . $document['id_document'] . ' lié à l\'objet ' . $objet_lie . ' a bien été mis à jour avec le statut \'' . $document['statut'] . '\'';
    151155                                }
     
    169173 * Cette fonction récupère les medias qui ont été utilisé par raccourcis typographiques dans les champs de type text. Et crée les liens entre le media et l'objet. Puis met à jour le statut du media.
    170174 *
    171  * @uses medias_lister_medias_used_in_text()
     175 * @uses   medias_lister_medias_used_in_text()
    172176 *
    173177 * @return [type] [description]
     
    203207                                if (sql_updateq('spip_documents_liens', array(
    204208                                        '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']) . ')')) {
     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']) . ')')) {
    206211                                        $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'] . '\'';
    207212                                }
    208213                                // 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']) . ')')) {
     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']) . ')')) {
    210216                                        $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'] . '\'';
    211217                                }
     
    229235                                }
    230236                                // 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']) . ')')) {
     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']) . ')')) {
    232239                                        $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'] . '\'';
    233240                                }
     
    247254        return true;
    248255}
     256
     257/**
     258 * Cette fonction va créer pour chaque répertoire d'extension de documents non publiés un fichier .htaccess
     259 * Toutefois, il faut que le répertoire IMG/ext existe et soit accessible en écriture.
     260 *
     261 * @return bool
     262 */
     263function 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
     323function 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
     372function 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}
  • _plugins_/medias_dereferencer/branches/v1/medias_dereferencer_pipelines.php

    r95185 r95637  
    2424        $taches['medias_dereferencer'] = 24 * 3600; // toutes les 24h
    2525        $taches['medias_dereferencer_vu'] = 24 * 3600; // toutes les 24h
     26        if (defined('_DUREE_CACHE_DEFAUT')) {
     27                $taches['medias_dereferencer_htaccess'] = _DUREE_CACHE_DEFAUT; // toutes les 24h
     28        } else {
     29                $taches['medias_dereferencer_htaccess'] = 24 * 3600; // toutes les 24h
     30        }
    2631
    2732        return $taches;
  • _plugins_/medias_dereferencer/branches/v1/paquet.xml

    r95186 r95637  
    22        prefix="medias_dereferencer"
    33        categorie="statistique"
    4         version="1.1.3"
     4        version="1.2.0"
    55        etat="test"
    66        compatibilite="[3.0.9;3.1.*]"
  • _plugins_/medias_dereferencer/branches/v1/prive/squelettes/contenu/medias_dereferencer.html

    r95185 r95637  
    11<h1><:medias_dereferencer:titre_page_medias_lister_disallow:></h1>
    2 [(#BOITE_OUVRIR)]
     2
     3<h3><:medias_dereferencer:robots_txt_content:></h3>
    34<pre>
    4 <INCLURE{fond=inclure/medias_disallow, env} />
     5#INCLURE{fond=inclure/medias_disallow, env}
    56</pre>
    6 [(#BOITE_FERMER)]
     7
     8[(#CONFIG{medias_dereferencer/htaccess}|=={oui}|oui)
     9<h3><:medias_dereferencer:htaccess_content:></h3>
     10[(#INCLURE{fond=prive/squelettes/inclure/medias_htaccess, env})]
     11]
     12
     13
     14[(#VAL|md_creation_htaccess_img)]
  • _plugins_/medias_dereferencer/branches/v1/prive/style_prive_plugin_medias_dereferencer.html

    r92763 r95637  
    3434.medias_dereferencer #contenu pre {
    3535    white-space: pre-line;
     36    height: 350px;
     37    overflow: scroll;
     38    widht: 95%;
     39    padding: 1em 2.5%;
     40    margin-bottom: 2em;
     41    background-color: white;
     42    color: black;
     43    border: 1px solid #GET{foncee};
    3644}
    3745
Note: See TracChangeset for help on using the changeset viewer.