source: spip-zone/_core_/branches/spip-3.2/plugins/sites/action/importer_bookmarks_netscape.php @ 109751

Last change on this file since 109751 was 109751, checked in by spip.franck@…, 21 months ago

Bonne année aussi aux plugins-dist :-D

File size: 4.3 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2018                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined("_ECRIRE_INC_VERSION")) {
14        return;
15}
16
17function action_importer_bookmarks_netscape_dist($fichier_ok, $id_parent, $importer_statut_publie, $importer_tags) {
18
19        $nb = 0;
20        if (autoriser('importer', '_sites')) {
21                $out = bookmarks_netscape_fast_parse($fichier_ok['contenu']);
22
23                // le premier content ne nous interesse pas
24                $out = reset($out['sub']);
25                $nb = bookmarks_insert($out, $id_parent, $importer_statut_publie, $importer_tags);
26        }
27
28        return $nb;
29}
30
31function bookmarks_netscape_fast_parse(&$contenu) {
32        $out = array();
33        #var_dump(">>".substr($contenu,0,200));
34
35        $po = stripos($contenu, "<h3", 4);
36        $pf = stripos($contenu, "</dl>");
37        while ($po or $pf) {
38                #var_dump("$po:$pf");
39                if ($po > 0 and $po < $pf) {
40                        $out['content'] .= substr($contenu, 0, $po);
41                        $contenu = substr($contenu, $po);
42                        $out['sub'][] = bookmarks_netscape_fast_parse($contenu);
43                } else {
44
45                        $out['content'] .= substr($contenu, 0, $pf);
46                        $contenu = substr($contenu, $pf + 5);
47                        #var_dump("<<".substr($contenu,0,200));
48                        $out['content'] = bookmarks_extract_links($out['content']);
49
50                        return $out;
51                }
52                $po = stripos($contenu, "<h3");
53                $pf = stripos($contenu, "</dl>");
54        }
55        $out['content'] = bookmarks_extract_links($out['content']);
56
57        return $out;
58}
59
60function bookmarks_extract_links($contenu) {
61        $out = array();
62        $contenu = str_ireplace("<DT>", "<dt>", $contenu);
63        $contenu = explode("<dt>", $contenu);
64
65        $h3 = array_shift($contenu);
66        $h3 = extraire_balise($h3, "h3");
67        $out['titre'] = strip_tags($h3);
68
69        foreach ($contenu as $item) {
70                $link = array();
71                if ($a = extraire_balise($item, 'a')) {
72                        $link['url'] = extraire_attribut($a, 'href');
73                        $link['titre'] = strip_tags($a);
74                        $link['date'] = extraire_attribut($a, "add_date");
75                        $link['descriptif'] = "";
76
77                        if ($p = stripos($item, "<dd>")) {
78                                $link['descriptif'] = textebrut(substr($item, $p));
79                        }
80                        $out['links'][] = $link;
81                }
82        }
83
84        return $out;
85}
86
87function bookmarks_insert($tree, $id_parent, $importer_statut_publie, $importer_tags, $level = 0) {
88        include_spip('action/editer_rubrique');
89        include_spip('action/editer_site');
90
91        $nb = 0;
92        if (count($tree['content']['links'])
93                or isset($tree['sub'])
94        ) {
95
96                $titre = ($tree['content']['titre'] ? $tree['content']['titre'] : _T('info_sans_titre'));
97                $id_rubrique = sql_getfetsel('id_rubrique', 'spip_rubriques',
98                        'id_parent=' . intval($id_parent) . " AND titre=" . sql_quote($titre));
99                if (!$id_rubrique
100                        and $id_rubrique = rubrique_inserer($id_parent)
101                ) {
102                        rubrique_modifier($id_rubrique, array('titre' => $titre));
103                }
104                if ($id_rubrique) {
105                        $statut = 'prop';
106                        if ($importer_statut_publie and autoriser('publierdans', 'rubrique', $id_rubrique)) {
107                                $statut = 'publie';
108                        }
109                        $now = time();
110                        foreach ($tree['content']['links'] as $link) {
111                                if (!$id_syndic = sql_getfetsel('id_syndic',
112                                        'spip_syndic',
113                                        'id_rubrique=' . intval($id_rubrique) . " AND url_site=" . sql_quote($link['url']))
114                                ) {
115                                        $id_syndic = site_inserer($id_rubrique);
116                                        $set = array(
117                                                'url_site' => $link['url'],
118                                                'nom_site' => $link['titre'],
119                                                'date' => date('Y-m-d H:i:s', $link['date'] ? $link['date'] : $now),
120                                                'statut' => $statut,
121                                                'descriptif' => $link['descriptif']
122                                        );
123                                        #echo "creation site $id_syndic ".$set['url_site']." <br />";
124                                        site_modifier($id_syndic, $set);
125                                        $nb++;
126                                } else {
127                                        #echo "existant site $id_syndic ".$link['url']." <br />";
128                                        $nb++;
129                                }
130                        }
131                        if ($level < 30) {
132                                if (isset($tree['sub'])) {
133                                        foreach ($tree['sub'] as $sub) {
134                                                $nb += bookmarks_insert($sub, $id_rubrique, $importer_statut_publie, $importer_tags, $level + 1);
135                                        }
136                                }
137                        }
138                }
139        }
140
141        return $nb;
142}
Note: See TracBrowser for help on using the repository browser.