109 lines
2.8 KiB
PHP
109 lines
2.8 KiB
PHP
<?php
|
|
/**
|
|
* @brief blogroll, a plugin for Dotclear 2
|
|
*
|
|
* @package Dotclear
|
|
* @subpackage Plugins
|
|
*
|
|
* @copyright Olivier Meunier & Association Dotclear
|
|
* @copyright GPL-2.0-only
|
|
*/
|
|
|
|
if (!defined('DC_RC_PATH')) {return;}
|
|
|
|
class linksImporter
|
|
{
|
|
protected $entries = null;
|
|
|
|
public function parse($data)
|
|
{
|
|
if (preg_match('!<xbel(\s+version)?!', $data)) {
|
|
$this->_parseXBEL($data);
|
|
} elseif (preg_match('!<opml(\s+version)?!', $data)) {
|
|
$this->_parseOPML($data);
|
|
} else {
|
|
throw new Exception(__('You need to provide a XBEL or OPML file.'));
|
|
}
|
|
}
|
|
|
|
protected function _parseOPML($data)
|
|
{
|
|
$xml = @simplexml_load_string($data);
|
|
if (!$xml) {
|
|
throw new Exception(__('File is not in XML format.'));
|
|
}
|
|
|
|
$outlines = $xml->xpath("//outline");
|
|
|
|
$this->entries = [];
|
|
foreach ($outlines as $outline) {
|
|
if (isset($outline['htmlUrl'])) {
|
|
$link = $outline['htmlUrl'];
|
|
} elseif (isset($outline['url'])) {
|
|
$link = $outline['url'];
|
|
} else {
|
|
continue;
|
|
}
|
|
|
|
$entry = new StdClass();
|
|
$entry->link = $link;
|
|
$entry->title = (!empty($outline['title'])) ? $outline['title'] : '';
|
|
if (empty($entry->title)) {
|
|
$entry->title = (!empty($outline['text'])) ? $outline['text'] : $entry->link;
|
|
}
|
|
$entry->desc = (!empty($outline['description'])) ? $outline['description'] : '';
|
|
$this->entries[] = $entry;
|
|
}
|
|
}
|
|
|
|
protected function _parseXBEL($data)
|
|
{
|
|
$xml = @simplexml_load_string($data);
|
|
if (!$xml) {
|
|
throw new Exception(__('File is not in XML format.'));
|
|
}
|
|
|
|
$outlines = $xml->xpath("//bookmark");
|
|
|
|
$this->entries = [];
|
|
foreach ($outlines as $outline) {
|
|
if (!isset($outline['href'])) {
|
|
continue;
|
|
}
|
|
|
|
$entry = new StdClass();
|
|
$entry->link = $outline['href'];
|
|
$entry->title = (!empty($outline->title)) ? $outline->title : '';
|
|
if (empty($entry->title)) {
|
|
$entry->title = $entry->link;
|
|
}
|
|
$entry->desc = (!empty($outline->desc)) ? $outline->desc : '';
|
|
$this->entries[] = $entry;
|
|
}
|
|
}
|
|
|
|
public function getAll()
|
|
{
|
|
if (!$this->entries) {
|
|
return;
|
|
}
|
|
|
|
return $this->entries;
|
|
}
|
|
|
|
}
|
|
|
|
class dcImportBlogroll
|
|
{
|
|
|
|
public static function loadFile($file)
|
|
{
|
|
if (file_exists($file) && is_readable($file)) {
|
|
$importer = new linksImporter();
|
|
$importer->parse(file_get_contents($file));
|
|
return $importer->getAll();
|
|
}
|
|
return false;
|
|
}
|
|
}
|