[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / sites / action / importer_bookmarks_netscape.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
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
13 if (!defined("_ECRIRE_INC_VERSION")) {
14 return;
15 }
16
17 function 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
31 function 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
60 function 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
87 function 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 }