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); }
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') . ' · '); }
/** * 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); }
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; }
/** * @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()); }