source: spip-zone/_galaxie_/www.spip-contrib.net/squelettes/2012/action/synchro_plugins.php @ 62399

Last change on this file since 62399 was 62399, checked in by cedric@…, 7 years ago

Synchronisation des paquets/plugins depuis plugins.spip.net
affichage des archives en consequence

File size: 4.6 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) return;
4
5function action_synchro_plugins_dist(){
6
7        include_spip('inc/autoriser');
8        if(!autoriser('webmestre'))
9                die();
10
11        $src = "http://plugins.spip.net/infos_plugin.api/?lien_doc=http://www.spip-contrib.net/";
12        include_spip('inc/distant');
13        $json = recuperer_page($src);
14        $json = json_decode($json,true);
15
16        if (!isset($json['plugins'])
17          OR !$json['plugins'])
18                return;
19
20        $motsv = array(
21                "SPIP-2.0" => 261,
22                "SPIP-2.1" => 278,
23                "SPIP-3.0" => 285,
24        );
25        $motsc = array(
26                "squelette" => 134,
27                "theme" => 206,
28                "plugin" => 112,
29        );
30        $motsall = array_values(array_merge($motsc,$motsv));
31
32
33        include_spip('action/editer_liens');
34        include_spip('action/editer_article');
35
36        foreach($json['plugins'] as $prefixe=>$infos){
37                echo "<hr />$prefixe<br />";
38                #var_dump($infos);
39                $liens_mots_art = array();
40                $liens_mots_doc = array();
41                $liens_docs = array();
42
43                // balayer les versions
44                foreach($infos as $vspip=>$d){
45                        if ($d){
46                                if ($id_article = get_article_from_url($d['lien_doc'])){
47                                        $liens_mots_art[$id_article][] = $motsv[$vspip];
48                                        if (isset($motsc[$d['categorie']]))
49                                                $liens_mots_art[$id_article][] = $motsc[$d['categorie']];
50                                        else
51                                                $liens_mots_art[$id_article][] = $motsc['plugin'];
52
53                                        // verifier le zip
54                                        if ($id_document = get_document_from_url($d['archive'],"Version ".$d['version'])){
55                                                $liens_docs[$id_article][] = $id_document;
56                                                $liens_mots_doc[$id_document][] = $motsv[$vspip];
57                                        }
58
59                                        // verfier le champ url_site
60                                        $url_p = "http://plugins.spip.net/".strtolower($prefixe);
61                                        $url_site = sql_getfetsel('url_site','spip_articles','id_article='.intval($id_article));
62                                        if (!$url_site){
63                                                echo "Modifier url_site=$url_p sur article $id_article<br />";
64                                                article_modifier($id_article,array('url_site'=>$url_p));
65                                        }
66                                        elseif($url_site!=$url_p){
67                                                echo "url_site incorrecte sur article $id_article<br />";
68                                        }
69                                }
70                                else {
71                                        echo "$prefixe:URL ".$d['lien_doc']." non trouvee<br />";
72                                }
73                        }
74                }
75                update_liens_mots($liens_mots_art,'article');
76                update_liens_mots($liens_mots_doc,'document');
77
78                // lier les docs aux articles
79                foreach($liens_docs as $id_article => $id_docs){
80                        objet_associer(array('document'=>$id_docs),array('article'=>$id_article));
81                }
82        }
83        die();
84
85}
86
87include_spip('inc/urls');
88function get_article_from_url($url){
89        static $cache = array();
90
91        if (isset($cache[$url])) return $cache[$url];
92
93        #var_dump($url);
94        list($fond,$contexte,$url_redirect) = urls_decoder_url($url);
95        if ($fond!=="article") return $cache[$url]=false;
96        if (!isset($contexte['id_article'])) return $cache[$url]=false;
97        #var_dump($contexte);
98        echo "$url => ".$contexte['id_article']."<br />";
99        return $cache[$url]=$contexte['id_article'];
100}
101
102function get_document_from_url($url_zip, $titre){
103        static $cache = array();
104        $id_document = 0;
105
106        include_spip('action/editer_document');
107        $ajouter_documents = charger_fonction('ajouter_documents','action');
108       
109        $row = sql_fetsel('*','spip_documents',"distant='oui' AND fichier=".sql_quote($url_zip));
110        if (!$row){
111                $file = array(
112                        'tmp_name' => $url_zip,
113                        'name' => '',
114                        'mode' => 'document',
115                        'distant' => 'oui',
116                );
117                $ids = $ajouter_documents('new',array($file));
118                $id_document= reset($ids);
119                echo "Ajout document distant $url_zip : #$id_document<br />";
120
121                if (!$id_document)
122                        return false;
123
124                $row = sql_fetsel('*','spip_documents',"id_document=".intval($id_document));
125        }
126        if (!$id_document = $row['id_document'])
127                return false;
128
129        // verifier le titre
130        if ($row['titre']!==$titre){
131                echo "Titre document #id_document : $titre <br />";
132                document_modifier($id_document,array('titre' => $titre));
133        }
134
135        return $id_document;
136}
137
138function update_liens_mots($liens_mots,$objet){
139                // mettre a jour les liens
140                // ne pas retirer compat 2.0 et 2.1 car plugin.spip pas exhaustif
141                // sauf si compat 2.0 ou 2.1 connue
142                $motsv_unknown = array_diff(array(261,278),array_merge($liens_mots));
143                foreach($liens_mots as $id_objet=>$mots){
144                        $set = array_unique($mots);
145                        $remove = array_diff($motsall,$set);
146                        // les liens existants
147                        $links = objet_trouver_liens(array('mot'=>$motsall),array($objet=>$id_objet));
148                        $l = array();
149                        foreach($links as $link) $l[] = $link['id_mot'];
150
151                        $remove = array_intersect($remove,$l);
152                        $remove = array_diff($remove,motsv_unknown);
153                        if (count($remove)){
154                                objet_dissocier(array('mot'=>$remove),array($objet=>$id_objet));
155                                echo "$objet $id_objet remove ".implode(",",$remove)."<br />";
156                        }
157                        $set = array_diff($set,$l);
158                        if (count($set)){
159                                objet_associer(array('mot'=>$set),array($objet=>$id_objet));
160                                echo "$objet $id_objet set ".implode(",",$set)."<br />";
161                        }
162                }
163}
Note: See TracBrowser for help on using the repository browser.