public function feed($object = false) { if ($object) { $feedDAO = new FreshRSS_FeedDAO(); return $feedDAO->searchById($this->feed); } else { return $this->feed; } }
private function checkAndProcessType($getType, $getId) { switch ($getType) { case 'a': $this->view->currentName = Minz_Translate::t('your_rss_feeds'); $this->nb_not_read_cat = $this->view->nb_not_read; $this->view->get_c = $getType; return true; case 's': $this->view->currentName = Minz_Translate::t('your_favorites'); $this->nb_not_read_cat = $this->view->nb_favorites['unread']; $this->view->get_c = $getType; return true; case 'c': $cat = isset($this->view->cat_aside[$getId]) ? $this->view->cat_aside[$getId] : null; if ($cat === null) { $catDAO = new FreshRSS_CategoryDAO(); $cat = $catDAO->searchById($getId); } if ($cat) { $this->view->currentName = $cat->name(); $this->nb_not_read_cat = $cat->nbNotRead(); $this->view->get_c = $getId; return true; } else { return false; } case 'f': $feed = FreshRSS_CategoryDAO::findFeed($this->view->cat_aside, $getId); if (empty($feed)) { $feedDAO = new FreshRSS_FeedDAO(); $feed = $feedDAO->searchById($getId); } if ($feed) { $this->view->currentName = $feed->name(); $this->nb_not_read_cat = $feed->nbNotRead(); $this->view->get_f = $getId; $this->view->get_c = $feed->category(); return true; } else { return false; } default: return false; } }
public function actualizeAction() { @set_time_limit(300); $feedDAO = new FreshRSS_FeedDAO(); $entryDAO = new FreshRSS_EntryDAO(); Minz_Session::_param('actualize_feeds', false); $id = Minz_Request::param('id'); $force = Minz_Request::param('force', false); // on créé la liste des flux à mettre à actualiser // si on veut mettre un flux à jour spécifiquement, on le met // dans la liste, mais seul (permet d'automatiser le traitement) $feeds = array(); if ($id) { $feed = $feedDAO->searchById($id); if ($feed) { $feeds = array($feed); } } else { $feeds = $feedDAO->listFeedsOrderUpdate(); } // on calcule la date des articles les plus anciens qu'on accepte $nb_month_old = max($this->view->conf->old_entries, 1); $date_min = time() - 3600 * 24 * 30 * $nb_month_old; $i = 0; $flux_update = 0; $is_read = $this->view->conf->mark_when['reception'] ? 1 : 0; foreach ($feeds as $feed) { if (!$feed->lock()) { Minz_Log::record('Feed already being actualized: ' . $feed->url(), Minz_Log::NOTICE); continue; } try { $url = $feed->url(); $feedHistory = $feed->keepHistory(); $feed->load(false); $entries = array_reverse($feed->entries()); //We want chronological order and SimplePie uses reverse order $hasTransaction = false; if (count($entries) > 0) { //For this feed, check last n entry GUIDs already in database $existingGuids = array_fill_keys($entryDAO->listLastGuidsByFeed($feed->id(), count($entries) + 10), 1); $useDeclaredDate = empty($existingGuids); if ($feedHistory == -2) { //default $feedHistory = $this->view->conf->keep_history_default; } $hasTransaction = true; $feedDAO->beginTransaction(); // On ne vérifie pas strictement que l'article n'est pas déjà en BDD // La BDD refusera l'ajout car (id_feed, guid) doit être unique foreach ($entries as $entry) { $eDate = $entry->date(true); if (!isset($existingGuids[$entry->guid()]) && ($feedHistory != 0 || $eDate >= $date_min)) { $values = $entry->toArray(); //Use declared date at first import, otherwise use discovery date $values['id'] = $useDeclaredDate || $eDate < $date_min ? min(time(), $eDate) . uSecString() : uTimeString(); $values['is_read'] = $is_read; $entryDAO->addEntry($values); } } } if ($feedHistory >= 0 && rand(0, 30) === 1) { if (!$hasTransaction) { $feedDAO->beginTransaction(); } $nb = $feedDAO->cleanOldEntries($feed->id(), $date_min, max($feedHistory, count($entries) + 10)); if ($nb > 0) { Minz_Log::record($nb . ' old entries cleaned in feed [' . $feed->url() . ']', Minz_Log::DEBUG); } } // on indique que le flux vient d'être mis à jour en BDD $feedDAO->updateLastUpdate($feed->id(), 0, $hasTransaction); if ($hasTransaction) { $feedDAO->commit(); } $flux_update++; if ($feed->url() !== $url) { //URL has changed (auto-discovery) $feedDAO->updateFeed($feed->id(), array('url' => $feed->url())); } } catch (FreshRSS_Feed_Exception $e) { Minz_Log::record($e->getMessage(), Minz_Log::NOTICE); $feedDAO->updateLastUpdate($feed->id(), 1); } $feed->faviconPrepare(); $feed->unlock(); unset($feed); // On arrête à 10 flux pour ne pas surcharger le serveur // sauf si le paramètre $force est à vrai $i++; if ($i >= 10 && !$force) { break; } } $url = array(); if ($flux_update === 1) { // on a mis un seul flux à jour $feed = reset($feeds); $notif = array('type' => 'good', 'content' => Minz_Translate::t('feed_actualized', $feed->name())); } elseif ($flux_update > 1) { // plusieurs flux on été mis à jour $notif = array('type' => 'good', 'content' => Minz_Translate::t('n_feeds_actualized', $flux_update)); } else { // aucun flux n'a été mis à jour, oups $notif = array('type' => 'good', 'content' => Minz_Translate::t('no_feed_to_refresh')); } if ($i === 1) { // Si on a voulu mettre à jour qu'un flux // on filtre l'affichage par ce flux $feed = reset($feeds); $url['params'] = array('get' => 'f_' . $feed->id()); } if (Minz_Request::param('ajax', 0) === 0) { Minz_Session::_param('notification', $notif); Minz_Request::forward($url, true); } else { // Une requête Ajax met un seul flux à jour. // Comme en principe plusieurs requêtes ont lieu, // on indique que "plusieurs flux ont été mis à jour". // Cela permet d'avoir une notification plus proche du // ressenti utilisateur $notif = array('type' => 'good', 'content' => Minz_Translate::t('feeds_actualized')); Minz_Session::_param('notification', $notif); // et on désactive le layout car ne sert à rien $this->view->_useLayout(false); } }