/** * checks whether a feed exists or not * * @return boolean * @param int $value feed id */ public function isValid($value) { $feeds = new application_models_feeds(); if ($feeds->fetchAll($feeds->select()->where("id=?", $value))->count() == 0) { $this->_error(application_validate_feedid::NOT_EXISTS); return false; } return true; }
/** * checks whether a feed entry already exists or not * * @return boolean * @param string $value url */ public function isValid($value) { $feeds = new application_models_feeds(); $select = $feeds->select()->where("url=?", $value)->where("source=?", $this->source); if ($this->id) { $select->where("id!=?", $this->id); } if ($feeds->fetchAll($select)->count() > 0) { $this->_error(application_validate_duplicatefeed::ALREADY_EXISTS); return false; } return true; }
/** * test add new message */ public function testAdd() { $feedModel = new application_models_feeds(); $currentDatetime = date('Y-m-d H:i:s'); $this->model->add($feedModel->find(1)->current(), 'testmessage no 1'); // error in feed set $this->assertEquals('1', $feedModel->find(1)->current()->error); // correct error message added $this->assertGreaterThan(0, $this->model->fetchAll()->count()); $result = $this->model->fetchAll($this->model->select()->order('id DESC'))->current(); $this->assertEquals($currentDatetime, $result->datetime); $this->assertEquals('testmessage no 1', $result->message); $this->assertEquals('1', $result->feed); }
/** * shows a list of items * will be called on every change of settings and * returns the messages and images * * @return void */ public function listAction() { $isJson = $this->getRequest()->getParam('json', false); // load current settings $settingsModel = new application_models_settings(); $currentSettings = array(); foreach ($settingsModel->fetchAll() as $setting) { $currentSettings[$setting->name] = $setting->value; } // read settings $settings = $this->getRequest()->getPost(); $settings = array_merge($currentSettings, $settings); // get list template vars $listHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('list'); try { $listHelper->readItems($settings); $listHelper->setTemplateVars($this->view); } catch (Exception $e) { $this->_helper->json(array('error' => $e->getMessage())); } // save settings if (Zend_Registry::get('config')->demomode != "1" && Zend_Registry::get('session')->authenticated === true) { $settingsModel->save(array('currentPriorityStart' => $settings['currentPriorityStart'], 'currentPriorityEnd' => $settings['currentPriorityEnd'], 'view' => $settings['view'], 'selected' => $settings['selected'], 'unread' => $settings['unread'], 'starred' => $settings['starred'], 'sort' => $settings['sort'])); } // get unread items $itemCounter = Zend_Controller_Action_HelperBroker::getStaticHelper('itemcounter'); // return items $feedModel = new application_models_feeds(); $result = array('html' => utf8_encode(utf8_decode($this->view->render('item/list.' . Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->getViewSuffix()))), 'categories' => $itemCounter->unreadItemsCategories($settings), 'feeds' => $itemCounter->unreadItemsFeeds($settings), 'starred' => $itemCounter->starredItems($settings), 'all' => $itemCounter->allItems($settings), 'countfeeds' => $feedModel->count(Zend_Registry::get('session')->currentPriorityStart, Zend_Registry::get('session')->currentPriorityEnd, Zend_Registry::get('session')->view)); if ($isJson == true) { unset($result['html']); $result['messages'] = $listHelper->getMessages(); $result['moremessages'] = $listHelper->hasMoreMessages(); $result['multimedia'] = $listHelper->getMultimedia(); $result['moremultimedia'] = $listHelper->hasMoreMultimedia(); } $this->_helper->json($result); }
/** * test validation */ public function testValidation() { $newfeed = array('name' => 'Tobis Blog', 'url' => 'http://blog.aditu.de/feed', 'category' => '1', 'priority' => '3', 'favicon' => '', 'filter' => '', 'source' => 'plugins_rss_feed'); // invalid name $testfeed = array_merge($newfeed, array('name' => '')); $this->assertTrue(is_array($this->model->add($testfeed))); $testfeed = $newfeed; unset($testfeed['name']); $this->assertTrue(is_array($this->model->add($testfeed))); // invalid url $testfeed = array_merge($newfeed, array('url' => 'http://www.n-tv.de/wirtschaft/rss')); $this->assertTrue(is_array($this->model->add($testfeed))); // url optional => no error $testfeed = array_merge($newfeed, array('source' => 'plugins_images_visualizeus', 'url' => '')); $id = $this->model->add($testfeed); $this->assertTrue(is_numeric($id)); $this->assertGreaterThan(0, $id); $this->model->remove($id); // url not optional => error $testfeed = array_merge($newfeed, array('url' => '')); $this->assertTrue(is_array($this->model->add($testfeed))); $testfeed = $newfeed; unset($testfeed['url']); $this->assertTrue(is_array($this->model->add($testfeed))); // invalid category $testfeed = array_merge($newfeed, array('category' => 'abc')); $this->assertTrue(is_array($this->model->add($testfeed))); $testfeed = array_merge($newfeed, array('category' => '222')); $this->assertTrue(is_array($this->model->add($testfeed))); // invalid priority $testfeed = array_merge($newfeed, array('priority' => 'abc')); $this->assertTrue(is_array($this->model->add($testfeed))); $testfeed = $newfeed; unset($testfeed['priority']); $this->assertTrue(is_array($this->model->add($testfeed))); // invalid source $testfeed = $newfeed; unset($testfeed['source']); $this->assertTrue(is_array($this->model->add($testfeed))); $testfeed = array_merge($newfeed, array('source' => 'abc')); $this->assertTrue(is_array($this->model->add($testfeed))); // validation of id $editfeed = array('id' => '1111', 'name' => 'n-tv all news', 'url' => 'http://www.n-tv.de/rss', 'category' => '2', 'priority' => '1', 'favicon' => '467321.ico', 'filter' => '/.*4711.*/', 'source' => 'plugins_rss_multimedia'); $this->assertTrue(is_array($this->model->edit($editfeed))); }
/** * set feedlist data for the current view * * @return void */ protected function feedlistData() { // check whether uncategorized exists or not (add it if not) $categoriesModel = new application_models_categories(); $categoriesModel->checkUncategorized(); // categories and feeds (target template param) $this->view->categories = array(); // load unread items $itemCounter = Zend_Controller_Action_HelperBroker::getStaticHelper('itemcounter'); $unreadCategory = $itemCounter->unreadItemsCategories(); $unreadFeed = $itemCounter->unreadItemsFeeds(); // get open categories if (Zend_Registry::get('session')->saveOpenCategories == 1) { $open = explode(',', Zend_Registry::get('session')->openCategories); } else { $open = array(); } // load categories $categoriesDb = $categoriesModel->fetchAll($categoriesModel->select()->order('position ASC')); $feedPositions = Zend_Controller_Action_HelperBroker::getStaticHelper('icon')->getFeedsIconPosition(); // read feeds and count items of the loaded categories $feedsModel = new application_models_feeds(); foreach ($categoriesDb as $cat) { $newcat = $cat->toArray(); // get feeds of cat $feedRowset = $cat->findDependentRowset('application_models_feeds', null, $feedsModel->select()->order('position ASC')); $newcat['feeds'] = array(); foreach ($feedRowset as $feed) { $newfeed = $feed->toArray(); $newfeed['unread'] = isset($unreadFeed[$feed->id]) ? $unreadFeed[$feed->id] : 0; $newfeed['iconposition'] = $feedPositions[$feed->id]; $newcat['feeds'][] = $newfeed; } // get unread items of cat $newcat['unread'] = isset($unreadCategory[$cat->id]) ? $unreadCategory[$cat->id] : 0; // set open (feeds visible) or not if (in_array($cat->id, $open)) { $newcat['open'] = true; } else { $newcat['open'] = false; } // append category $this->view->categories[] = $newcat; } // count starred items $this->view->starred = $itemCounter->starredItems(); // count unread items $this->view->unread = $unreadCategory[0]; // count all items $this->view->all = $itemCounter->allItems(); // count read items $this->view->read = $this->view->all - $this->view->unread; // count feeds $this->view->amountfeeds = $feedsModel->count(Zend_Registry::get('session')->currentPriorityStart, Zend_Registry::get('session')->currentPriorityEnd, Zend_Registry::get('session')->view); }
/** * updates a given feed (for executing via ajax call) * * @return void */ public function feedAction() { // timeout bigger than 0 = no feed refresh needed $updater = Zend_Controller_Action_HelperBroker::getStaticHelper('updater'); if ($updater->timeout() != 0) { $this->finishAction(); return; } // get and check feed $feedModel = new application_models_feeds(); $feeds = $feedModel->find($this->getRequest()->getParam('id')); if ($feeds->count() == 0) { $this->_helper->json(array('error' => $this->view->translate('No feed with given ID found'))); } // update feed (fetch new data from source) $feed = $feeds->current(); $result = $updater->feed($feed); // if necessary update icon $updateIcon = $feed->dirtyicon == 1; if ($updateIcon) { $feedModel->saveIcon($feed); } // create answer if (!is_numeric($result)) { $this->_helper->json(array('error' => $result)); } else { // return category and feed unread items $this->_helper->json(array('success' => true, 'icon' => $updateIcon, 'lastrefresh' => $result)); } }
/** * test the fix position routine * setUp will insert feeds with position 0 and 2 * fixPosition corrects to 0 and 1 */ public function testFixPositions() { $this->model->fixPositions($this->model->find(1)->current()); $feedModel = new application_models_feeds(); $positions = $feedModel->fetchAll($feedModel->select()->order('position ASC')->from($feedModel, 'position'))->toArray(); $expected = array(array('position' => 0), array('position' => 1)); $this->assertEquals($expected, $positions); }
/** * return feed positions * * @return array of feed positions */ public function getFeedsIconPosition() { if ($this->iconPositions == false) { $feedsModel = new application_models_feeds(); $feeds = $feedsModel->fetchAll($feedsModel->select()->order('id ASC')); $feedPositions = array(); $count = 0; foreach ($feeds as $feed) { $feedPositions[$feed->id] = $count++; } $this->iconPositions = $feedPositions; } return $this->iconPositions; }
/** * test thumbnail cleanup */ public function testCleanupThumbnails() { $this->model->cleanupThumbnails(); $this->assertTrue(file_exists(Zend_Registry::get('config')->thumbnails->path . "thumb1.jpg")); $this->assertFalse(file_exists(Zend_Registry::get('config')->thumbnails->path . "thumb2.jpg")); }
/** * insert given feeds * * @return void * @param int $category id * @param array $feeds as array */ protected function insertFeeds($category, $feeds) { $feedsModel = new application_models_feeds(); // insert unkown feeds foreach ($feeds as $feed) { // search existing feed $moreFeeds = $feedsModel->fetchAll($feedsModel->select()->where($feedsModel->getAdapter()->quoteInto('url=?', trim($feed['link'])))); // if feed doesn't exists if ($moreFeeds->count() == 0) { $feedsModel->add(array('name' => trim($feed['title']), 'url' => trim($feed['link']), 'category' => $category, 'priority' => 1, 'source' => 'plugins_rss_feed')); } } // fix positions $categoriesModel = new application_models_categories(); $categoriesModel->fixPositions($categoriesModel->find($category)->current()); }
/** * reset priorities depending on the current * max and min priorities of all feeds * * @return array new settings */ protected function resetPriorities() { // set min and max priority $feedModel = new application_models_feeds(); $min = $feedModel->minPriority(); $max = $feedModel->maxPriority(); $newSettings = array('priorityStart' => $min, 'priorityEnd' => $max); // reset current priority if necessary if (Zend_Registry::get('session')->currentPriorityStart < $min) { $newSettings['currentPriorityStart'] = $min; } if (Zend_Registry::get('session')->currentPriorityEnd > $max) { $newSettings['currentPriorityEnd'] = $max; } if (Zend_Registry::get('session')->currentPriorityEnd < $min) { $newSettings['currentPriorityEnd'] = $min; } // save new settings $settings = new application_models_settings(); $settings->set($newSettings); return $newSettings; }