ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilBookmarkImportExport.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2012 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
13 {
19  public static function _parseFile($file)
20  {
21  if (file_exists($file) && is_file($file)) {
22  $fp = fopen($file, "r-");
23  while ($line=fgets($fp)) {
24  $line=trim($line);
25  if (preg_match('/<!DOCTYPE NETSCAPE-Bookmark-file-1>/i', $line)) {
27  }
28  }
29  }
30  return false;
31  }
38  public static function __parseNetscape(&$fp)
39  {
40  $result=array();
41  $parent=array();
42  $start_id=0;
43  $id=0;
44  $ok=false;
45  while ($line=fgets($fp)) {
46  $line=trim($line);
47  if (preg_match('/<DL>/i', $line)) {
48  $parent_id=$id;
49  } elseif (preg_match('/<\/DL>/i', $line)) {
50  $parent_id=array_pop($parent);
51  } elseif (preg_match('/<DD>(.+)$/i', $line, $match)) {
52  // extract description
53  $desc=ilBookmarkImportExport::_convertCharset(trim($match[1]), $charset);
55  $result[$parent_id][$id]['description']=strip_tags($desc);
56  } elseif (preg_match('/<DT><H3[^>]*>(.*)<\/H3>/i', $line, $match)) {
57  //bookmark folder
58  array_push($parent, $parent_id);
59  $name=ilBookmarkImportExport::_convertCharset(trim($match[1]), $charset);
61  $id++;
62  $result[$parent_id][$id]=array(
63  'type'=>'bmf',
64  'title'=>strip_tags($name),
65  );
66  } elseif (preg_match('/<DT><A HREF="([^"]*)[^>]*>(.*)<\/A>/i', $line, $match)) {
67  $id++;
68  // extract url and title
69  $url=ilBookmarkImportExport::_convertCharset(trim($match[1]), $charset);
71  $name=ilBookmarkImportExport::_convertCharset(trim($match[2]), $charset);
73  // extract dates
74  if (preg_match("/ADD_DATE=\"([^\"]*)/i", $line, $match)) {
75  $add_date = $match[1];
76  } else {
77  $add_date=0;
78  }
79  if (preg_match("/LAST_VISIT=\"([^\"]*)/i", $line, $match)) {
80  $visited = $match[1];
81  } else {
82  $visited=0;
83  }
84  if (preg_match("/LAST_MODIFIED=\"([^\"]*)/i", $line, $match)) {
85  $modified = $match[1];
86  } else {
87  $modified=0;
88  }
89  $result[$parent_id][$id]=array(
90  'type'=>'bm',
91  'target'=>strip_tags($url),
92  'title'=>strip_tags($name),
93  'add_date'=>$add_date,
94  'visited'=>$visited,
95  'modified'=>$modified,
96  );
97  } elseif (preg_match("/<META\s+HTTP-EQUIV=\"Content-Type\".+CONTENT=\"([^\"]*)\"/i", $line, $match)) {
98  preg_match("/charset=([^ ]+)/", $match[1], $match);
99  $charset=$match[1];
100  }
101  }
102  return $result;
103  }
111  public static function _exportBookmark($obj_ids, $recursive = true, $title = '')
112  {
113  $htmlCont='<!DOCTYPE NETSCAPE-Bookmark-file-1>' . "\n";
114  $htmlCont.='<!-- Created by ilias - www.ilias.de -->' . "\n";
115  $htmlCont.='<!-- on ' . date('r') . ' -->' . "\n\n";
116  $htmlCont.='<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">' . "\n";
117  $htmlCont.='<TITLE>' . ilUtil::prepareFormOutput($title) . '</TITLE>' . "\n";
118  $htmlCont.='<H1>' . ilUtil::prepareFormOutput($title) . '</H1>' . "\n\n";
119  $htmlCont.='<DL><p>' . "\n";
120  foreach ($obj_ids as $obj_id) {
121  $object = ilBookmarkFolder::getObject($obj_id);
122  $htmlCont.=ilBookmarkImportExport::__parseExport($object, 1, $recursive);
123  }
124  $htmlCont.='</DL><p>' . "\n";
125  //echo htmlentities($htmlCont); exit;
126  return $htmlCont;
127  }
136  public static function __parseExport($object, $depth=1, $recursive = true)
137  {
138  switch ($object['type']) {
139  case 'bm':
140  $result.=str_repeat("\t", $depth);
141  $result.='<DT><A HREF="' . ilUtil::prepareFormOutput($object['target']) . '" ';
142  $result.='ADD_DATE="' . intval(0) . '" ';
143  $result.='LAST_VISIT="' . intval(0) . '" ';
144  $result.='LAST_MODIFIED="' . intval(0) . '">';
145  $result.=ilUtil::prepareFormOutput($object['title']) . '</A>' . "\n";
146  if ($object['description']) {
147  $result.='<DD>' .
148  ilUtil::prepareFormOutput($object['description']) . "\n";
149  }
150  break;
151  case 'bmf':
152  $result.=str_repeat("\t", $depth) . '<DT><H3 ADD_DATE="0">' .
153  ilUtil::prepareFormOutput($object['title']) . '</H3>' . "\n";
154  if ($object['description']) {
155  $result.='<DD>' .
156  ilUtil::prepareFormOutput($object['description']) . "\n";
157  }
158  $result.=str_repeat("\t", $depth) . '<DL><p>' . "\n";
159  if ($recursive) {
160  $depth++;
161  $sub_objects=ilBookmarkFolder::getObjects($object['child']);
162  foreach ($sub_objects as $sub_object) {
164  $sub_object,
165  $depth,
166  $recursive
167  );
168  }
169  $depth--;
170  }
171  $result.=str_repeat("\t", $depth) . '</DL><p>' . "\n";
172  break;
173  }
174  return $result;
175  }
182  public static function _decodeEntities($string)
183  {
184  if (function_exists('html_entity_decode')) {
185  $string= html_entity_decode($string, ENT_QUOTES, "ISO-8859-15"); #NOTE: UTF-8 does not work!
186  } else {
187  $trans_table = array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES));
188  $string = strtr($string, $trans_table);
189  }
190  $string= preg_replace_callback(
191  '/&#(\d+);/m',
192  function ($hit) {
193  return chr($hit[1]);
194  },
195  $string
196  ); #decimal notation
197  $string= preg_replace_callback(
198  '/&#x([a-f0-9]+);/mi',
199  function ($hit) {
200  return chr(hexdec($hit[1]));
201  },
202  $string
203  ); #hex notation
204  return $string;
205  }
214  public static function _convertCharset($string, $from_charset='', $to_charset='UTF-8')
215  {
216  if (extension_loaded("mbstring")) {
217  if (!$from_charset) {
218  // try to detect charset
219  mb_detect_order("ASCII, JIS, UTF-8, EUC-JP, SJIS, ISO-8859-15, Windows-1252");
220  $from_charset=mb_detect_encoding($string);
221  }
222  if (strtoupper($from_charset)!=$to_charset) {
223  return @mb_convert_encoding($string, $to_charset, $from_charset);
224  }
225  }
226  return $string;
227  }
228 }
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms public
$result
static getObject($a_id)
static
static _convertCharset($string, $from_charset='', $to_charset='UTF-8')
converts charset of given string
if(!array_key_exists('StateId', $_REQUEST)) $id
static __parseNetscape(&$fp)
parse Netscape bookmark file
if($format !==null) $name
Definition: metadata.php:146
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
Create styles array
The data for the language used.
static _exportBookmark($obj_ids, $recursive=true, $title='')
export bookmarks static method return html string
static _decodeEntities($string)
decode html entities of given string
static __parseExport($object, $depth=1, $recursive=true)
recursive methode generates bookmark output for export
$url
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
static getObjects($a_id)
static
static _parseFile($file)
parse Bookmark file static method returns 3 dimensional array of bookmarks and folders ...