Пример #1
0
function opml_import($xml)
{
    $xml = html_only_entity_decode($xml);
    //!\ Assume UTF-8
    $dom = new DOMDocument();
    $dom->recover = true;
    $dom->strictErrorChecking = false;
    $dom->loadXML($xml);
    $dom->encoding = 'UTF-8';
    $opml = simplexml_import_dom($dom);
    if (!$opml) {
        throw new FreshRSS_Opml_Exception();
    }
    $catDAO = new FreshRSS_CategoryDAO();
    $catDAO->checkDefault();
    $defCat = $catDAO->getDefault();
    $categories = array();
    $feeds = array();
    foreach ($opml->body->outline as $outline) {
        if (!isset($outline['xmlUrl'])) {
            // Catégorie
            $title = '';
            if (isset($outline['text'])) {
                $title = (string) $outline['text'];
            } elseif (isset($outline['title'])) {
                $title = (string) $outline['title'];
            }
            if ($title) {
                // Permet d'éviter les soucis au niveau des id :
                // ceux-ci sont générés en fonction de la date,
                // un flux pourrait être dans une catégorie X avec l'id Y
                // alors qu'il existe déjà la catégorie X mais avec l'id Z
                // Y ne sera pas ajouté et le flux non plus vu que l'id
                // de sa catégorie n'exisera pas
                $title = htmlspecialchars($title, ENT_COMPAT, 'UTF-8');
                $catDAO = new FreshRSS_CategoryDAO();
                $cat = $catDAO->searchByName($title);
                if ($cat === false) {
                    $cat = new FreshRSS_Category($title);
                    $values = array('name' => $cat->name());
                    $cat->_id($catDAO->addCategory($values));
                }
                $feeds = array_merge($feeds, getFeedsOutline($outline, $cat->id()));
            }
        } else {
            // Flux rss sans catégorie, on récupère l'ajoute dans la catégorie par défaut
            $feeds[] = getFeed($outline, $defCat->id());
        }
    }
    return array($categories, $feeds);
}
Пример #2
0
 public static function daoToCategory($listDAO)
 {
     $list = array();
     if (!is_array($listDAO)) {
         $listDAO = array($listDAO);
     }
     foreach ($listDAO as $key => $dao) {
         $cat = new FreshRSS_Category($dao['name']);
         $cat->_id($dao['id']);
         $list[$key] = $cat;
     }
     return $list;
 }