Changeset 103846 in spip-zone


Ignore:
Timestamp:
Apr 9, 2017, 11:05:03 AM (2 years ago)
Author:
kent1@…
Message:
  • Déclaration plus moderne de la table linkcheck (dans declarer_tables_objets_sql())
  • Utiliser les mêmes limitations de statuts entre la détection de liens générale et celle par le pipeline post_edition. Seuls sont conservés les liens sur des objets pouvant être prévisualisés.
  • Réparation de la détection des liens sur les rubriques
  • Ajout d'un champ publie à la fois sur la table spip_linkchecks et spip_linkchecks_liens testant si l'objet parent est publié.
  • Permettre de filtrer sur les liens "Visibles en ligne" (publie == oui) et "Non visibles en ligne" (publie == non)
  • Changement du coté des autorisations, dorénavant :
    • les administrateurs et les rédacteurs peuvent voir la page linkchecks
    • seuls les webmestres peuvent réinitialiser la base
    • les personnes autorisées à modifier un objet voient les liens contenus dans l'objet éditorial
  • Déplacement du bloc sur les objets dans la colonne de gauche
  • Limiter l'affichage du blocs de liens sur les objets aux auteurs pouvant modifier l'objet

Version 1.4.0

Location:
_plugins_/linkcheck/trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/linkcheck/trunk/README.md

    r99805 r103846  
    77## Todo
    88
    9 * [ ] bloc des liens trop visible sur les pages d'objets (articles, rubriques, il devrait être dans la marge car il ne s’agit pas d’un contenu éditable)
    109* [ ] ajout d’un lien vers archive.org sur les articles morts
    1110* [ ] export CSV (à finaliser avec generer_url_objet)
     
    1918* [x] améliorer la détection des liens (ex de bugs : "gazogène.com", ou "lacite.website" sont coupés bizarrement, les urls terminant par une virgule sont aussi coupés)
    2019* [x] présence du lien sur toutes les pages : ce message pourrait être plus informatif en précisant le nombre de liens
     20* [x] bloc des liens trop visible sur les pages d'objets (articles, rubriques, il devrait être dans la marge car il ne s’agit pas d’un contenu éditable)
     21
     22## Versions 1.4.x
     23
     24### Version 1.4.0
     25
     26* Permettre de filtrer les liens distants et internes
     27* Permettre de filtrer par type d'objet (articles, rubriques...)
     28* Ajouter un formulaire de recherche qui s'applique sur les urls (en faisant un `LIKE` mysql)
     29* Permettre d'exporter en CSV uniquement la liste filtrée
     30* Amélioration de la détection de liens
     31* Déplacement du bloc sur les objets dans la colonne de gauche
     32* Limiter l'affichage du blocs de liens sur les objets aux auteurs pouvant modifier l'objet
     33* Déclaration plus moderne de la table linkcheck (dans `declarer_tables_objets_sql()`)
     34* Utiliser les mêmes limitations de statuts entre la détection de liens générale et celle par le pipeline `post_edition`. Seuls sont conservés les liens sur des objets pouvant être prévisualisés.
     35* Réparation de la détection des liens sur les rubriques
     36* Ajout d'un champ `publie` à la fois sur la table `spip_linkchecks` et `spip_linkchecks_liens` testant si l'objet parent est publié.
     37* Permettre de filtrer sur les liens "Visibles en ligne" (`publie == oui`) et "Non visibles en ligne" (`publie == non`)
     38* Changement du coté des autorisations, dorénavant :
     39  * les administrateurs et les rédacteurs peuvent voir la page linkchecks
     40  * seuls les webmestres peuvent réinitialiser la base
     41  * les personnes autorisées à modifier un objet voient les liens contenus dans l'objet éditorial
    2142
    2243## Versions 1.3.x
     
    139160
    140161## Versions 1.0.x
    141        
     162
    142163### Version 1.0.2
    143164
  • _plugins_/linkcheck/trunk/action/linkcheck_parcours.php

    r99805 r103846  
    6262                                                // @todo Tester pour oracle et sqlite
    6363                                                if ($db_ok['type'] === 'mysql') {
     64                                                        /*$tab_expreg_mysql = array(
     65                                                                '(((https?|ftps?)://)|(((https?|ftps?)://)?[A-Za-z0-9\-]*\.))[A-Za-z0-9\-]+\.[a-zA-Z]{2,9}/?',
     66                                                                '->[^\]]\]');*/
     67                                                        $classe_alpha = 'a-zA-Z0-9âäéèëêïîôöùüû²';
    6468                                                        $tab_expreg_mysql = array(
    65                                                                 '(((https?|ftps?)://)|(((https?|ftps?)://)?[A-Za-z0-9\-]*\.))[A-Za-z0-9\-]+\.[a-zA-Z]{2,9}/?',
    66                                                                 '->[^\]]\]');
     69                                                                "(((http|https|ftp|ftps)://)?www\.)|((http|https|ftp|ftps)://([".$classe_alpha."\-]*\.)?))([".$classe_alpha."+\-]*\.)+[a-zA-Z0-9]{2,9}(/[".$classe_alpha."=.?&+\_\\@\:\,/%#\-]*)?)(\'|\"| |\.|\->|\]|,|;|\s)/?",
     70                                                                '(\->)([a-zA-Z]{3,10}[0-9]{1,})\]'
     71                                                        );
    6772
    6873                                                        $where_reg = array();
     
    8590                                                if (isset($info_table['statut'][0]['previsu'])) {
    8691                                                        $statuts = explode(',', str_replace('/auteur', '', $info_table['statut'][0]['previsu']));
    87                                                         $where .= ' AND '.sql_in('statut', $statuts);
     92                                                        foreach ($statuts as $key => $val) {
     93                                                                if ($val == '!') {
     94                                                                        unset($statuts[$key]);
     95                                                                }
     96                                                        }
     97                                                        if (count($statuts) > 0) {
     98                                                                $where .= ' AND '.sql_in('statut', $statuts);
     99                                                        }
    88100                                                } else if (isset($info_table['field']['statut'])) {
    89101                                                        // On exclus de la selection, les objet dont le status est refuse ou poubelle
     
    100112
    101113                                                //pour chaque objet
    102                                                 $table_objet = objet_type($table_sql);
     114                                                $objet = objet_type($table_sql);
    103115                                                foreach ($sql as $res) {
    104116                                                        //on créé les variables à envoyer
     
    109121                                                        $tab_liens = linkcheck_lister_liens($res);
    110122
     123                                                        // On regarde si l'objet parent est publie
     124                                                        $objet_publie = objet_test_si_publie($objet, $id_objet);
     125
     126                                                        if ($objet_publie) {
     127                                                                $publie = 'oui';
     128                                                        } else {
     129                                                                $publie = 'non';
     130                                                        }
     131
    111132                                                        //on les insere dans la base
    112                                                         linkcheck_ajouter_liens($tab_liens, $table_objet, $id_objet);
     133                                                        linkcheck_ajouter_liens($tab_liens, $objet, $id_objet, $publie);
    113134
    114135                                                        //on renseigne les ids de reprise
  • _plugins_/linkcheck/trunk/base/linkcheck.php

    r99340 r103846  
    1515function linkcheck_declarer_tables_interfaces($interfaces) {
    1616        $interfaces['table_des_tables']['linkchecks'] = 'linkchecks';
    17         $interfaces['table_date']['linkchecks']='date';
     17
    1818        return $interfaces;
    1919}
    2020
    21 
    22 /**
    23  * Déclaration des objets éditoriaux
    24  */
    25 function linkcheck_declarer_tables_principales($tables_principales) {
    26 
    27         $spip_linkchecks = array(
    28                         'id_linkcheck'       => 'bigint(21) NOT NULL',
    29                         'url'                => "text NOT NULL DEFAULT ''",
    30                         'distant'            => 'boolean',
    31                         'etat'               => "varchar(10) NOT NULL DEFAULT ''",
    32                         'code'                           => "varchar(10) NOT NULL DEFAULT ''",
    33                         'redirection'            => "text NOT NULL DEFAULT ''",
    34                         'essais'                         => 'int(1) DEFAULT 0',
    35                         'date'               => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
    36                         'maj'                => 'TIMESTAMP');
    37         $spip_linkchecks_key = array(
    38                         'PRIMARY KEY'        => 'id_linkcheck');
    39 
    40         $tables_principales['spip_linkchecks']  =
    41                 array('field' => &$spip_linkchecks, 'key' => &$spip_linkchecks_key);
    42 
    43         return $tables_principales;
     21function linkcheck_declarer_tables_objets_sql($tables) {
     22        $tables['spip_linkchecks'] = array(
     23                'type' => 'linkcheck',
     24                'principale' => 'non',
     25                'type_surnoms' => array(),
     26                'page'=>'',
     27                'date' => 'date',
     28                'field'=> array(
     29                        'id_linkcheck'          => 'bigint(21) NOT NULL',
     30                        'url'                           => "text NOT NULL DEFAULT ''",
     31                        'distant'                       => 'boolean',
     32                        'etat'                          => "varchar(10) NOT NULL DEFAULT ''",
     33                        'code'                          => "varchar(10) NOT NULL DEFAULT ''",
     34                        'redirection'           => "text NOT NULL DEFAULT ''",
     35                        'essais'                                => 'int(1) DEFAULT 0',
     36                        'date'                          => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
     37                        'publie'                                => "varchar(3) NOT NULL DEFAULT ''",
     38                        'maj'                           => 'TIMESTAMP'
     39                ),
     40                'key' => array(
     41                        'PRIMARY KEY'   => 'id_linkcheck',
     42                ),
     43                'join' => array(
     44                        'id_linkcheck' => 'id_linkcheck',
     45                ),
     46                'tables_jointures' => array('')
     47        );
     48        $tables[]['tables_jointures'][] = 'linkchecks_liens';
     49        return $tables;
    4450}
    4551
     
    5258        $tables['spip_linkchecks_liens'] = array(
    5359                'field' => array(
    54                         'id_linkcheck'       => "bigint(21) DEFAULT '0' NOT NULL",
    55                         'id_objet'           => "bigint(21) DEFAULT '0' NOT NULL",
    56                         'objet'              => "VARCHAR(25) DEFAULT '' NOT NULL"
     60                        'id_linkcheck'          => "bigint(21) DEFAULT '0' NOT NULL",
     61                        'id_objet'                      => "bigint(21) DEFAULT '0' NOT NULL",
     62                        'objet'                         => "VARCHAR(25) DEFAULT '' NOT NULL",
     63                        'publie'                                => "VARCHAR(3) DEFAULT '' NOT NULL"
    5764                ),
    5865                'key' => array(
    59                         'PRIMARY KEY'        => 'id_linkcheck,id_objet,objet',
    60                         'KEY id_linkcheck'   => 'id_linkcheck'
     66                        'PRIMARY KEY'           => 'id_linkcheck,id_objet,objet',
     67                        'KEY id_linkcheck'      => 'id_linkcheck'
    6168                )
    6269        );
  • _plugins_/linkcheck/trunk/genie/linkcheck_test_postedition.php

    r99339 r103846  
    99        include_spip('inc/linkcheck_fcts');
    1010
    11         $sel = sql_select(
     11        $sel = sql_allfetsel(
    1212                'sl.url, sl.distant, sl.id_linkcheck, sl.essais',
    1313                'spip_linkchecks AS sl, spip_linkchecks_liens AS sll',
    14                 'sll.id_objet='.$id.' AND sll.objet='.sql_quote($objet).' AND sll.id_linkcheck=sl.id_linkcheck'
     14                'sll.id_objet='.intval($id).' AND sll.objet='.sql_quote($objet).' AND sll.id_linkcheck=sl.id_linkcheck'
    1515        );
    1616
    17         while ($res = sql_fetch($sel)) {
     17        foreach($sel as $res)
    1818                linkcheck_maj_etat($res);
    1919        }
  • _plugins_/linkcheck/trunk/inc/linkcheck_fcts.php

    r103784 r103846  
    66
    77/**
    8  * Fonction qui recherche la presence d'un lien et de sa liaison ds la table spip_linkchecks
     8 * Fonction qui recherche la presence d'un lien et de sa liaison dans la table spip_linkchecks
    99 *
    1010 * @param string $url
     
    1919 *   - 1 : le lien a été trouvé mais il n'est pas rattaché à l'objet
    2020 *       - 2 : le lien a été trouvé et il est bien rattaché à l'objet
    21  *       Si la clé "etat" est égaleà 1, le tableau indique par la clé "id" l'identifiant du lien
    22  */
    23 function linkcheck_tester_presence_lien($url, $id_obj, $type) {
     21 *       Si la clé "etat" est égale à 1, le tableau indique par la clé "id" l'identifiant du lien
     22 */
     23function linkcheck_tester_presence_lien($url, $id_obj, $type, $publie) {
    2424        $retour = array('etat'=>0);
    2525        // on recherche le lien par l'URL
     
    2727        if ($id_linkcheck) {
    2828                // si on l'a trouvé on verifie si est attaché à l'objet passé en paramatre
    29                 $sel = sql_getfetsel(
    30                         'count(id_linkcheck)',
     29                $sel = sql_fetsel(
     30                        'id_linkcheck, publie',
    3131                        'spip_linkchecks_liens',
    3232                        'id_linkcheck='.$id_linkcheck.' AND id_objet='.intval($id_obj).' AND objet='.sql_quote($type)
    3333                );
    34                 if ($sel == 0) {
    35                         $retour['etat']=1;
    36                         $retour['id']=$id_linkcheck;
     34                if (!$sel) {
     35                        $retour['etat'] = 1;
     36                        $retour['id'] = $id_linkcheck;
    3737                } else {
    3838                        $retour['etat']= 2;
     39                        if ($publie != $sel['publie']) {
     40                                sql_updateq(
     41                                        'spip_linkchecks_liens',
     42                                        array('publie' => $publie),
     43                                        'id_linkcheck='.$id_linkcheck.' AND id_objet='.intval($id_obj).' AND objet='.sql_quote($type)
     44                                );
     45                                $statut_linkckeck = sql_getfetsel('publie', 'spip_linkchecks', 'id_linkcheck = '.intval($id_linkcheck));
     46                                if (!$statut_linkckeck or $publie != $statut_linkckeck) {
     47                                        if (!$statut_linkckeck or $statut_linkckeck == '' or $publie== 'oui') {
     48                                                sql_updateq(
     49                                                        'spip_linkchecks',
     50                                                        array('publie' => $publie),
     51                                                        'id_linkcheck='.intval($id_linkcheck)
     52                                                );
     53                                        } else if (!sql_getfetsel('publie', 'spip_linkchecks_liens', 'id_linkcheck='.$id_linkcheck.'  AND publie="oui"')) {
     54                                                sql_updateq(
     55                                                        'spip_linkchecks',
     56                                                        array('publie' => $publie),
     57                                                        'id_linkcheck='.intval($id_linkcheck)
     58                                                );
     59                                        }
     60                                }
     61                        }
    3962                }
    4063        }
     
    6588        $classe_alpha = 'a-zA-Z0-9âäéèëêïîôöùüû²';
    6689        $tab_expreg = array(
    67         "('|\"| |\.|\->|\]|,|;|\s)(((((http|https|ftp|ftps)://)?www\.)|((http|https|ftp|ftps)://([".$classe_alpha."'\-]*\.)?))(['".$classe_alpha."'0-9\-\+]*\.)+[a-zA-Z0-9]{2,9}(/['".$classe_alpha."=.?&_\->\-\+\@\:\,/%#]*)?)('|\"| |\.|\->|\]|,|;|\s)?",
    68         '(\->)([a-zA-Z]{3,10}[0-9]{1,})\]');
     90                "('|\"| |\.|\->|\]|,|;|\s)(((((http|https|ftp|ftps)://)?www\.)|((http|https|ftp|ftps)://([".$classe_alpha."'\-]*\.)?))(['".$classe_alpha."'0-9\-\+]*\.)+[a-zA-Z0-9]{2,9}(/['".$classe_alpha."=.?&_\->\-\+\@\:\,/%#]*)?)('|\"| |\.|\->|\]|,|;|\s)?",
     91                '(\->)([a-zA-Z]{3,10}[0-9]{1,})\]'
     92        );
    6993
    7094        foreach ($champs as $champ_value) {
     
    113137 * @return array $ret
    114138 */
    115 function linkcheck_ajouter_liens($tab_liens, $type_objet, $id_objet) {
     139function linkcheck_ajouter_liens($tab_liens, $objet, $id_objet, $publie = 'non') {
    116140        foreach ($tab_liens as $lien) {
    117                 //on test si c'est un lien interne ou externe
     141                // on teste si c'est un lien interne ou externe
    118142                $distant = (strpos($lien, '.')) ? true : false;
    119                 //on test son existence dans la base
    120                 $exi = linkcheck_tester_presence_lien($lien, $id_objet, $type_objet);
     143                // on test son existence dans la base
     144                $exi = linkcheck_tester_presence_lien($lien, $id_objet, $objet, $publie);
    121145                //s'il existe
    122146                if ($exi['etat'] > 0) {
     
    125149                                $ins = sql_insertq(
    126150                                        'spip_linkchecks_liens',
    127                                         array('id_linkcheck' => $exi['id'],
    128                                         'id_objet'=>$id_objet, 'objet'=>$type_objet)
     151                                        array (
     152                                                'id_linkcheck' => $exi['id'],
     153                                                'id_objet'=>$id_objet,
     154                                                'objet'=>$objet,
     155                                                'publie' => $publie
     156                                        )
    129157                                );
     158                                $publie_linkcheck = sql_getfetsel('publie', 'spip_linkchecks', 'id_linkcheck = '.intval($exi['id']));
     159                                if ($publie_linkcheck != $statut) {
     160                                        if ($publie_linkcheck == 'non') {
     161                                                sql_updateq('spip_linkchecks', array('publie' => 'oui'), 'id_linkcheck = '.intval($exi['id']));
     162                                        } else {
     163                                                $ok = sql_countsel('spip_linkchecks_liens', 'publie = "oui" AND id_linkcheck = '.intval($exi['id']));
     164                                                if (!$ok or $ok == 0) {
     165                                                        sql_updateq('spip_linkchecks', array('publie' => 'non'), 'id_linkcheck = '.intval($exi['id']));
     166                                                }
     167                                        }
     168                                }
    130169                        }
    131170                //s'il existe pas
     
    134173                        $ins = sql_insertq(
    135174                                'spip_linkchecks',
    136                                 array('url'=>$lien, 'distant'=>$distant, 'date'=> date('Y-m-d H:i:s'))
     175                                array('url'=>$lien, 'distant'=>$distant, 'date'=> date('Y-m-d H:i:s'), 'publie' => $publie)
    137176                        );
    138177                        //et ds la base qui lie un url a un objet
    139178                        sql_insertq(
    140179                                'spip_linkchecks_liens',
    141                                 array('id_linkcheck'=>$ins, 'id_objet'=>$id_objet, 'objet'=>$type_objet)
     180                                $donnees = array(
     181                                        'id_linkcheck' => $ins,
     182                                        'id_objet' => $id_objet,
     183                                        'objet' => $objet,
     184                                        'publie' => $publie
     185                                )
    142186                        );
    143187                }
     
    214258                                                if (strlen($end_redirection) > 0) {
    215259                                                        $redirection = str_replace($url_finale['query'], '', str_replace($url_finale['path'], '', $redirection));
     260                                                        $ret['redirection'] = rtrim($redirection, '/').'/'.$end_redirection;
     261                                                } else {
     262                                                        $ret['redirection'] = $redirection;
    216263                                                }
    217                                                 $ret['redirection'] = rtrim($redirection, '/').'/'.$end_redirection;
     264
    218265                                                $domaine = rtrim(str_replace($url_finale['query'], '', str_replace($url_finale['path'], '', $ret['redirection'])), '?');
    219266                                                /**
     
    318365
    319366                if (!empty($statut_objet)) {
    320                         if ($type_objet!='auteur') {
    321                                 $ret['etat'] = isset($tabStatus[1][$statut_objet]) ? $tabStatus[1][$statut_objet]:'malade';
     367                        if ($type_objet != 'auteur') {
     368                                $ret['etat'] = isset($tabStatus[1][$statut_objet]) ? $tabStatus[1][$statut_objet] : 'malade';
    322369                                $ret['code'] = $statut_objet;
    323370                        } else {
     
    340387 * Fonction de verifications des liens rescencés
    341388 *
    342  * Les liens stockés dans la table spip_linkchecks sont verifié
     389 * Les liens stockés dans la table spip_linkchecks sont verifiés
    343390 * suivant leurs statuts, ou pas, par lots, ou pas.
    344391 *
     
    360407        $limit = $cron ? lire_config('linkcheck/nb_verifs_cron', 30) : 5;
    361408        /**
    362          * On estime qu'au maximum, on accorde 1 minute max pour tester chaque lien
    363          * On essaie de forcer l'execution max de script en multipliant donc $limit par 60
     409         * On estime qu'au maximum, on accorde 1 minute 30 max pour tester chaque lien
     410         * On essaie de forcer l'execution max de script en multipliant donc $limit par 90
    364411         */
    365412        set_time_limit($limit*90);
     
    399446                sql_updateq('spip_linkchecks', array('essais' => 0), 'id_linkcheck='.intval($res['id_linkcheck']));
    400447        }
    401         //on met le champ à 0
    402 
    403448
    404449        //sinon on le signale comme malade
  • _plugins_/linkcheck/trunk/lang/linkcheck_fr.php

    r103782 r103846  
    5959        'liens_morts' => 'liens morts',
    6060        'liens_oks' => 'liens validés',
     61        'liens_publies' => 'Visibles en ligne',
     62        'liens_publies_non' => 'Non visibles en ligne',
    6163        'linkcheck' => 'LinkCheck',
    6264        'liste_des_liens' => 'Listes des liens',
  • _plugins_/linkcheck/trunk/linkcheck_administrations.php

    r99340 r103846  
    99        return;
    1010}
    11 
    1211
    1312/**
     
    3938        );
    4039
     40        /**
     41         * Ajout du champ publie sur spip_linkchecks_liens
     42         */
     43        $maj['1.4.0'] = array(
     44                array('maj_tables', array('spip_linkchecks', 'spip_linkchecks_liens'))
     45        );
     46
    4147        include_spip('base/upgrade');
    4248        maj_plugin($nom_meta_base_version, $version_cible, $maj);
  • _plugins_/linkcheck/trunk/linkcheck_pipelines.php

    r99802 r103846  
    22/**
    33 * Plugin LinkCheck
    4  * (c) 2013-2015 Benjamin Grapeloux, Guillaume Wauquier
     4 * (c) 2013-2017 Benjamin Grapeloux, Guillaume Wauquier
    55 * Licence GNU/GPL
    66 */
     
    1919 */
    2020function linkcheck_post_edition($flux) {
    21 
    22         include_spip('inc/linkcheck_fcts');
    23         include_spip('inc/linkcheck_vars');
    24         include_spip('inc/queue');
     21        $objet = false;
     22        /**
     23         * Le pipeline d'institution ne passe pas type
     24         */
     25        if (isset($flux['args']['type'])) {
     26                $objet = $flux['args']['type'];
     27        } elseif (isset($flux['args']['table'])) {
     28                $objet = objet_type($flux['args']['table']);
     29        }
    2530
    2631        //on verifie que l'on est bien dans un contexte de verification d'objet
    27         if ($flux['args']['id_objet'] && $flux['args']['type']) {
     32        if ($flux['args']['id_objet'] && $objet) {
     33                include_spip('inc/linkcheck_fcts');
     34                include_spip('inc/linkcheck_vars');
    2835                $champs_a_traiter = false;
    29                 $type_objet = $flux['args']['type'];
    3036                $id_objet = intval($flux['args']['id_objet']);
    31                 $table_sql = table_objet_sql($type_objet);
    32 
     37                $table_sql = table_objet_sql($objet);
     38                $id_table_objet = id_table_objet($objet);
    3339                $tables_a_traiter = linkcheck_tables_a_traiter();
    3440                foreach ($tables_a_traiter as $table) {
     
    4450                        }
    4551                }
     52                /**
     53                 * On ne comptabilise les liens que sur les objets prévisualisables
     54                 *
     55                 * Ici on vérifie si le statut de l'objet est prévisualisable
     56                 */
     57                $fields = objet_info($objet, 'field');
     58                if (isset($fields['statut'])) {
     59                        $info_statuts = objet_info($objet, 'statut');
     60                        $statuts = array();
     61                        if (isset($info_statuts[0]['previsu'])) {
     62                                $statuts = explode(',', str_replace('/auteur', '', $info_statuts[0]['previsu']));
     63                                foreach ($statuts as $key => $val) {
     64                                        if ($val == '!') {
     65                                                unset($statuts[$key]);
     66                                        }
     67                                }
     68                        } else {
     69                                $not_statuts = array('refuse', 'poubelle');
     70                        }
     71                        $statut = sql_getfetsel('statut', $table_sql, $id_table_objet.'='.intval($id_objet));;
     72                        if (count($statuts) > 0 && in_array($statut, $statuts)) {
     73                                $objet_ok = true;
     74                        } else if (count($statuts) == 0 && !in_array($statut, $not_statuts)) {
     75                                $objet_ok = true;
     76                        } else {
     77                                $objet_ok = false;
     78                        }
     79                } else {
     80                        $objet_ok = true;
     81                }
     82                /**
     83                 * L'objet n'a plus de statut prévisualisable donc ses liens ne sont plus pris en compte
     84                 * On les supprime et si le lien n'est plus utilisé sur d'autres objets, il est également supprimé
     85                 */
     86                if (!$objet_ok) {
     87                        $liens_lies = sql_allfetsel('id_linkcheck', 'spip_linkchecks_liens', 'id_objet='.intval($id_objet).' AND objet='.sql_quote($objet));
     88                        foreach ($liens_lies as $lien) {
     89                                sql_delete('spip_linkchecks_liens', 'id_linkcheck='.intval($lien['id_linkcheck']).' AND id_objet='.intval($id_objet).' AND objet='.sql_quote($objet));
     90                                if (!sql_countsel('spip_linkchecks_liens', 'id_linkcheck='.intval($lien['id_linkcheck']))) {
     91                                        sql_delete('spip_linkchecks', 'id_linkcheck='.intval($lien['id_linkcheck']));
     92                                }
     93                        }
     94                        return $flux;
     95                }
    4696                if (is_array($champs_a_traiter)) {
    47                         $tab_value=array();
     97                        $tab_value = sql_fetsel(array_keys($champs_a_traiter), $table_sql, $id_table_objet.'='.intval($id_objet));
    4898                        foreach (array_keys($champs_a_traiter) as $ct) {
    4999                                if (isset($flux['data'][$ct])) {
     
    51101                                }
    52102                        }
    53 
    54103                        //on parcours les liens
    55104                        $tab_liens = linkcheck_lister_liens($tab_value);
    56105
     106                        // On regarde si l'objet parent est publie
     107                        $objet_publie = objet_test_si_publie($objet, $id_objet);
     108
     109                        if ($objet_publie) {
     110                                $publie = 'oui';
     111                        } else {
     112                                $publie = 'non';
     113                        }
    57114                        //on les insère en base si besoin
    58                         linkcheck_ajouter_liens($tab_liens, $type_objet, $id_objet);
     115                        linkcheck_ajouter_liens($tab_liens, $objet, $id_objet, $publie);
    59116
    60117                        // maintenant on vérifie que tous les liens de la base correspondant à cet objet
     
    64121                                'l.url, l.id_linkcheck',
    65122                                'spip_linkchecks_liens AS ll, spip_linkchecks AS l',
    66                                 'l.id_linkcheck=ll.id_linkcheck AND id_objet='.$id_objet.' AND ll.objet='.sql_quote($type_objet)
     123                                'l.id_linkcheck=ll.id_linkcheck AND id_objet='.intval($id_objet).' AND ll.objet='.sql_quote($objet)
    67124                        );
    68125
     
    75132                                                'spip_linkchecks_liens',
    76133                                                'id_linkcheck='.intval($lks['id_linkcheck']).' AND id_objet='.intval($id_objet).'
    77                                                         AND objet='.sql_quote($type_objet)
     134                                                        AND objet='.sql_quote($objet)
    78135                                        );
    79136
     
    91148                                }
    92149                        }
    93 
     150                        include_spip('inc/queue');
    94151                        queue_add_job(
    95152                                'genie_linkcheck_test_postedition',
    96153                                'Tests post_edition des liens d\'un objet',
    97                                 array($id_objet, $type_objet),
     154                                array($id_objet, $objet),
    98155                                'genie/linkcheck_test_postedition'
    99156                        );
     
    122179
    123180/**
    124  * Pipeline qui des alertes au webmestre du site, pour l'informer et
     181 * Pipeline qui affiche des alertes au webmestre du site, pour l'informer et
    125182 * l'inciter à corriger les liens défectueux du site
    126183 *
     
    134191        if (lire_config('linkcheck/afficher_alerte')) {
    135192                include_spip('inc/autoriser');
    136                 if (autoriser('webmestre', $flux['args']['id_auteur'])) {
     193                if (autoriser('voir', 'linkchecks')) {
    137194                        include_spip('inc/linkcheck_fcts');
    138195                        $res = sql_getfetsel('id_linkcheck', 'spip_linkchecks', sql_in('etat', array('mort', 'malade')));
    139                         if ($res>0) {
     196                        if ($res > 0) {
    140197                                $comptes = linkcheck_chiffre();
    141198                                $texte = _T(
     
    154211}
    155212
    156 
    157 /**
    158  * Pipeline qui des alertes au webmestre du site, pour l'informer et
    159  * l'insiter à corriger les liens défectueux du site
    160  *
    161  * @param array $flux
    162  * @return array
    163  */
    164 function linkcheck_affiche_milieu($flux) {
    165         include_spip('inc/linkcheck_vars');
     213/**
     214 * Insertion dans le pipeline affiche_gauche (SPIP)
     215 * Affiche la liste des liens contenus dans l'objet
     216 *
     217 * @pipeline affiche_gauche
     218 * @param array $flux
     219 * @return array
     220 */
     221function linkcheck_affiche_gauche($flux) {
     222        include_spip('inc/autoriser');
    166223        $texte = '';
    167224        $e = trouver_objet_exec($flux['args']['exec']);
    168 
    169         $tab_type_objets=linkcheck_tables_a_traiter();
    170225        if (is_array($e) && !$e['edition']) {
     226                include_spip('inc/linkcheck_vars');
     227                $tab_type_objets = linkcheck_tables_a_traiter();
    171228                foreach ($tab_type_objets as $objet) {
    172229                        $_objet = array_shift($objet);
    173                         if ((isset($_objet['page']) && $e['type'] == $_objet['page']) || $e['type'] == $_objet['type']) {
     230                        if (autoriser('modifier', $e['type'], $flux['args'][$e['id_table_objet']]) && ((isset($_objet['page']) && $e['type'] == $_objet['page']) || $e['type'] == $_objet['type'])) {
    174231                                $texte .= recuperer_fond('prive/objets/liste/linkchecks_lies', array(
    175232                                        'objet_source' => 'linkcheck',
     
    190247}
    191248
    192 
    193249/**
    194250 * Optimiser la base de donnees en supprimant les liens orphelins
  • _plugins_/linkcheck/trunk/paquet.xml

    r103720 r103846  
    22        prefix="linkcheck"
    33        categorie="maintenance"
    4         version="1.3.11"
     4        version="1.4.0"
    55        etat="stable"
    66        compatibilite="[3.0.5;3.1.*]"
    77        logo="prive/themes/spip/images/linkcheck-64.png"
    88        documentation="https://contrib.spip.net/article4605"
    9         schema="1.0.1"
     9        schema="1.4.0"
    1010>
    1111
     
    2323        <necessite nom="facteur" compatibilite="[3.4.7;]" />
    2424
    25         <pipeline nom="autoriser" inclure="linkcheck_autorisations.php" />
    26         <pipeline nom="declarer_tables_principales" inclure="base/linkcheck.php" />
    27         <pipeline nom="declarer_tables_interfaces" inclure="base/linkcheck.php" />
     25        <pipeline nom="autoriser" inclure="linkcheck_autorisations.php" /> 
     26        <pipeline nom="declarer_tables_interfaces" inclure="base/linkcheck.php" />
     27        <pipeline nom="declarer_tables_objets_sql" inclure="base/linkcheck.php" />
    2828        <pipeline nom="declarer_tables_auxiliaires" inclure="base/linkcheck.php" />
    29         <pipeline nom="affiche_milieu" inclure="linkcheck_pipelines.php" />
     29        <pipeline nom="affiche_gauche" inclure="linkcheck_pipelines.php" />
    3030        <pipeline nom="optimiser_base_disparus" inclure="linkcheck_pipelines.php" />
    3131        <pipeline nom="post_edition" inclure="linkcheck_pipelines.php" />
  • _plugins_/linkcheck/trunk/prive/linkcheck.csv.html

    r103753 r103846  
    11#HTTP_HEADER{Content-Type: text/csv}
    22<:linkcheck:etat:>      <:linkcheck:url:>       <:linkcheck:redirection:>       <:linkcheck:utilise:>
    3 <BOUCLE_li(LINKCHECKS){etat IN #ENV{etat,#LISTE{mort,deplace}}}{distant?}>#ETAT #URL    #REDIRECTION    <BOUCLE_l(spip_linkchecks_liens){id_linkcheck}{', '}>[(#ID_OBJET|generer_url_entite{#OBJET}|url_absolue)]</BOUCLE_l>
     3<BOUCLE_li(LINKCHECKS){etat IN #ENV{etat,#LISTE{mort,deplace}}}{publie?}{objet?}{distant?}>#ETAT        #URL    #REDIRECTION    <BOUCLE_l(spip_linkchecks_liens){id_linkcheck}{', '}>[(#ID_OBJET|generer_url_entite{#OBJET}|url_absolue)]</BOUCLE_l>
    44</BOUCLE_li>
  • _plugins_/linkcheck/trunk/prive/objets/liste/linkchecks.html

    r103782 r103846  
    66        [<li>(#SELF|parametre_url{etat,''}|parametre_url{debut_ListeLink,''}|lien_ou_expose{<:linkcheck:tous_les_liens:>,#ENV{etat,''}|=={''},ajax})</li>]
    77        <BOUCLE_etats(DATA){liste mort,malade,deplace,ok}>
    8                 <BOUCLE_comptem(LINKCHECKS){etat=#VALEUR}{url LIKE %#ENV{recherche}%}{distant IN #GET{distant}}{objet ?} />
     8                <BOUCLE_comptem(LINKCHECKS){etat=#VALEUR}{url LIKE %#ENV{recherche}%}{distant IN #GET{distant}}{objet ?}{publie?} />
    99                [<li class='#VALEUR'>(#SELF|parametre_url{etat,#VALEUR}|parametre_url{debut_ListeLink,''}|lien_ou_expose{#VAL{linkcheck:etat_}|concat{#VALEUR}|_T|concat{' (',#TOTAL_BOUCLE,')'},#ENV{etat}|=={#VALEUR},ajax})</li>]
    1010                <//B_comptem>
     
    1616
    1717#FORMULAIRE_RECHERCHE_ECRIRE{#SELF}
     18
     19<div class='onglets_simple second clearfix'>
     20        <ul>
     21                [<li>(#SELF|parametre_url{publie,''}|parametre_url{debut_ListeLink,''}|lien_ou_expose{<:linkcheck:tous_les_liens:>,#ENV{publie,''}|=={''},ajax})</li>]
     22                [<li>(#SELF|parametre_url{publie,oui}|parametre_url{debut_ListeLink,''}|lien_ou_expose{<:linkcheck:liens_publies:>,#ENV{publie}|=={oui},ajax})</li>]
     23                [<li>(#SELF|parametre_url{publie,non}|parametre_url{debut_ListeLink,''}|lien_ou_expose{<:linkcheck:liens_publies_non:>,#ENV{publie}|=={non},ajax})</li>]
     24        </ul>
     25</div>
    1826
    1927<div class='onglets_simple second clearfix'>
     
    4553                </tr>
    4654        </thead>
    47 <BOUCLE_ListeLink(LINKCHECKS){objet?}{!par maj}{code?}{etat?}{url?}{url LIKE %#ENV{recherche}%}{distant IN #GET{distant}}{pagination #ENV{pagination,10}}>
     55<BOUCLE_ListeLink(LINKCHECKS){objet?}{!par maj}{code?}{etat?}{url?}{publie?}{url LIKE %#ENV{recherche}%}{distant IN #GET{distant}}{pagination #ENV{pagination,10}}>
    4856        <INCLURE{fond=prive/objets/liste/linkcheck_detail,id_linkcheck,env}>
    4957</BOUCLE_ListeLink>
  • _plugins_/linkcheck/trunk/prive/objets/liste/linkchecks_lies.html

    r99350 r103846  
    2222                [<tr><td colspan="5"><p class='pagination'>(#GET{p})</p></td></tr>]
    2323                <tr class='first_row'>
    24                 <th class="id" scope='col'><:linkcheck:id:></th>
    25                 <th scope='col'><:linkcheck:url:></th>
    26                 <th class="utilise" scope='col'><:linkcheck:utilise:></th>
    27                 <th class="etat" scope='col'><:linkcheck:etat:></th>
    28                 <th class='date' scope='col'><:linkcheck:maj:></th>
     24                        <th scope='col'><:linkcheck:url:></th>
     25                        <th class="etat" scope='col'><:linkcheck:etat:></th>
    2926                </tr>
    3027        </thead>
     
    3330                {tri #ENV{par,multi url},#GET{defaut_tri}}{pagination #ENV{nb,10} linl}>
    3431                <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})][ (#EXPOSE|unique)][ (#URL**|extraire_multi|initiale|=={#ENV{i}}|?{on}|unique)][(#ID_LINKCHECK|=={#ENV{id_lien_ajoute}}|oui)append]">
    35                         <INCLURE{fond=prive/objets/liste/linkcheck_detail,id_linkcheck,env}>
     32                        <td>
     33                                [(#URL|linkcheck_en_url{#DISTANT}|inserer_attribut{target,_blank})]
     34                                [<br /><br /><:linkcheck:redirection:><br />
     35                                (#REDIRECTION|match{'//'}|?{[(#REDIRECTION|linkcheck_en_url{1})],[(#REDIRECTION|linkcheck_en_url{0})]}|inserer_attribut{target,_blank}|trim)]
     36                        </td>
     37                        <td>
     38                                [(#VAL{linkcheck:etat_}|concat{#ETAT}|_T)] <br />
     39                                <a href="[(#URL_ACTION_AUTEUR{linkcheck_test,#ID_LINKCHECK,#SELF|parametre_url{id_test,#ID_LINKCHECK}})]" class="ajax"><:linkcheck:bouton_tester_lien:></a>
     40                        </td>
    3641                </tr>
    3742        </BOUCLE_liste_linkchecks>
Note: See TracChangeset for help on using the changeset viewer.