Exemplo n.º 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);
}
Exemplo n.º 2
0
 public function categorizeAction()
 {
     $feedDAO = new FreshRSS_FeedDAO();
     $catDAO = new FreshRSS_CategoryDAO();
     $defaultCategory = $catDAO->getDefault();
     $defaultId = $defaultCategory->id();
     if (Minz_Request::isPost()) {
         $cats = Minz_Request::param('categories', array());
         $ids = Minz_Request::param('ids', array());
         $newCat = trim(Minz_Request::param('new_category', ''));
         foreach ($cats as $key => $name) {
             if (strlen($name) > 0) {
                 $cat = new FreshRSS_Category($name);
                 $values = array('name' => $cat->name());
                 $catDAO->updateCategory($ids[$key], $values);
             } elseif ($ids[$key] != $defaultId) {
                 $feedDAO->changeCategory($ids[$key], $defaultId);
                 $catDAO->deleteCategory($ids[$key]);
             }
         }
         if ($newCat != '') {
             $cat = new FreshRSS_Category($newCat);
             $values = array('id' => $cat->id(), 'name' => $cat->name());
             if ($catDAO->searchByName($newCat) == false) {
                 $catDAO->addCategory($values);
             }
         }
         invalidateHttpCache();
         $notif = array('type' => 'good', 'content' => Minz_Translate::t('categories_updated'));
         Minz_Session::_param('notification', $notif);
         Minz_Request::forward(array('c' => 'configure', 'a' => 'categorize'), true);
     }
     $this->view->categories = $catDAO->listCategories(false);
     $this->view->defaultCategory = $catDAO->getDefault();
     $this->view->feeds = $feedDAO->listFeeds();
     $this->view->flux = false;
     Minz_View::prependTitle(Minz_Translate::t('categories_management') . ' · ');
 }
Exemplo n.º 3
0
 /**
  * This action updates the given category.
  *
  * Request parameters are:
  *   - id
  *   - name
  */
 public function updateAction()
 {
     $catDAO = new FreshRSS_CategoryDAO();
     $url_redirect = array('c' => 'subscription', 'a' => 'index');
     if (Minz_Request::isPost()) {
         invalidateHttpCache();
         $id = Minz_Request::param('id');
         $name = Minz_Request::param('name', '');
         if (strlen($name) <= 0) {
             Minz_Request::bad(_t('feedback.sub.category.no_name'), $url_redirect);
         }
         if ($catDAO->searchById($id) == null) {
             Minz_Request::bad(_t('feedback.sub.category.not_exist'), $url_redirect);
         }
         $cat = new FreshRSS_Category($name);
         $values = array('name' => $cat->name());
         if ($catDAO->updateCategory($id, $values)) {
             Minz_Request::good(_t('feedback.sub.category.updated'), $url_redirect);
         } else {
             Minz_Request::bad(_t('feedback.sub.category.error'), $url_redirect);
         }
     }
     Minz_Request::forward($url_redirect, true);
 }
Exemplo n.º 4
0
 public function checkDefault()
 {
     $def_cat = $this->searchById(1);
     if ($def_cat == null) {
         $cat = new FreshRSS_Category(_t('gen.short.default_category'));
         $cat->_id(1);
         $values = array('id' => $cat->id(), 'name' => $cat->name());
         $this->addCategory($values);
     }
 }
Exemplo n.º 5
0
 /**
  * @param string $input
  * @param string $expected
  * @dataProvider provideValidNames
  */
 public function test_name_whenValidValue_storesModifiedValue($input, $expected)
 {
     $category = new FreshRSS_Category($input);
     $this->assertEquals($expected, $category->name());
 }
Exemplo n.º 6
0
 public function checkDefault()
 {
     $def_cat = $this->searchById(1);
     if ($def_cat === false) {
         $cat = new FreshRSS_Category(Minz_Translate::t('default_category'));
         $cat->_id(1);
         $values = array('id' => $cat->id(), 'name' => $cat->name());
         $this->addCategory($values);
     }
 }