[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_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")) return;
14
15 function action_importer_bookmarks_netscape_dist($fichier_ok,$id_parent,$importer_statut_publie,$importer_tags){
16
17 $nb = 0;
18 if (autoriser('importer','_bookmarks')){
19 $out = bookmarks_netscape_fast_parse($fichier_ok['contenu']);
20
21 // le premier content ne nous interesse pas
22 $out = reset($out['sub']);
23 $nb = bookmarks_insert($out,$id_parent,$importer_statut_publie,$importer_tags);
24 }
25 return $nb;
26 }
27
28 function bookmarks_netscape_fast_parse(&$contenu){
29 $out = array();
30 #var_dump(">>".substr($contenu,0,200));
31
32 $po=stripos($contenu,"<h3",4);
33 $pf=stripos($contenu,"</dl>");
34 while ($po OR $pf){
35 #var_dump("$po:$pf");
36 if ($po>0 AND $po<$pf){
37 $out['content'] .= substr($contenu,0,$po);
38 $contenu = substr($contenu,$po);
39 $out['sub'][] = bookmarks_netscape_fast_parse($contenu);
40 }
41 else {
42
43 $out['content'] .= substr($contenu,0,$pf);
44 $contenu = substr($contenu,$pf+5);
45 #var_dump("<<".substr($contenu,0,200));
46 $out['content'] = bookmarks_extract_links($out['content']);
47 return $out;
48 }
49 $po=stripos($contenu,"<h3");
50 $pf=stripos($contenu,"</dl>");
51 }
52 $out['content'] = bookmarks_extract_links($out['content']);
53 return $out;
54 }
55
56 function bookmarks_extract_links($contenu){
57 $out = array();
58 $contenu = str_ireplace("<DT>","<dt>",$contenu);
59 $contenu = explode("<dt>",$contenu);
60
61 $h3 = array_shift($contenu);
62 $h3 = extraire_balise($h3,"h3");
63 $out['titre'] = strip_tags($h3);
64
65 foreach($contenu as $item){
66 $link = array();
67 if ($a = extraire_balise($item,'a')){
68 $link['url'] = extraire_attribut($a,'href');
69 $link['titre'] = strip_tags($a);
70 $link['date'] = extraire_attribut($a,"add_date");
71 $link['descriptif'] = "";
72
73 if ($p=stripos($item,"<dd>")){
74 $link['descriptif'] = textebrut(substr($item,$p));
75 }
76 $out['links'][] = $link;
77 }
78 }
79 return $out;
80 }
81
82 function bookmarks_insert($tree,$id_parent,$importer_statut_publie,$importer_tags,$level=0){
83 include_spip('action/editer_rubrique');
84 include_spip('action/editer_site');
85
86 $nb = 0;
87 if (count($tree['content']['links'])
88 OR isset($tree['sub'])){
89
90 $titre = ($tree['content']['titre']?$tree['content']['titre']:_T('info_sans_titre'));
91 $id_rubrique = sql_getfetsel('id_rubrique','spip_rubriques','id_parent='.intval($id_parent)." AND titre=".sql_quote($titre));
92 if (!$id_rubrique
93 AND $id_rubrique = rubrique_inserer($id_parent)){
94 rubrique_modifier($id_rubrique,array('titre'=>$titre));
95 }
96 if ($id_rubrique){
97 $statut = 'prop';
98 if ($importer_statut_publie AND autoriser('publierdans','rubrique',$id_rubrique))
99 $statut = 'publie';
100 $now = time();
101 foreach($tree['content']['links'] as $link){
102 if (!$id_syndic = sql_getfetsel('id_syndic',
103 'spip_syndic',
104 'id_rubrique='.intval($id_rubrique)." AND url_site=".sql_quote($link['url']))){
105 $id_syndic = site_inserer($id_rubrique);
106 $set = array(
107 'url_site' => $link['url'],
108 'nom_site' => $link['titre'],
109 'date' => date('Y-m-d H:i:s',$link['date']?$link['date']:$now),
110 'statut' => $statut,
111 'descriptif' => $link['descriptif']
112 );
113 #echo "creation site $id_syndic ".$set['url_site']." <br />";
114 site_modifier($id_syndic,$set);
115 $nb ++;
116 }
117 else {
118 #echo "existant site $id_syndic ".$link['url']." <br />";
119 $nb ++;
120 }
121 }
122 if ($level<30){
123 if (isset($tree['sub']))
124 foreach($tree['sub'] as $sub)
125 $nb += bookmarks_insert($sub,$id_rubrique,$importer_statut_publie,$importer_tags,$level+1);
126 }
127 }
128 }
129
130 return $nb;
131 }