コード例 #1
0
 /**
  * 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);
 }
コード例 #2
0
 /**
  * show messages
  *
  * @return void
  */
 public function indexAction()
 {
     $offset = $this->getRequest()->getParam('offset', 0);
     // load latest errormessages
     $messagesModel = new application_models_messages();
     $messages = $messagesModel->fetchAll($messagesModel->select()->order('datetime DESC')->limit(Zend_Registry::get('config')->errormessages->length, $offset));
     // load feedname
     $this->view->messages = array();
     foreach ($messages as $message) {
         $msg = $message->toArray();
         $msg['feed'] = $message->findParentRow('application_models_feeds')->name;
         $this->view->messages[] = $msg;
     }
     $this->view->offset = $offset;
 }
コード例 #3
0
 /**
  * updates a given feed
  * returns an error or true on success
  *
  * @return int timestamp for this refresh
  * @param mixed $feed current feed model
  */
 public function feed($feed)
 {
     @set_time_limit(Zend_Registry::get('config')->rss->timelimit);
     @error_reporting(E_ERROR);
     // logging
     $logger = Zend_Registry::get('logger');
     $logger->log('start feed fetching "' . $feed->name . '"', Zend_Log::DEBUG);
     // get feed plugin
     $logger->log('load feed plugin', Zend_Log::DEBUG);
     $messagesModel = new application_models_messages();
     $plugin = Zend_Controller_Action_HelperBroker::getStaticHelper('pluginloader')->getPlugin($feed->source);
     if ($plugin === false) {
         $logger->log('error loading feed plugin ' . $feed->source, Zend_Log::ERR);
         return $messagesModel->add($feed, 'unknown plugin');
     }
     // receive new content
     $logger->log('load feed content', Zend_Log::DEBUG);
     try {
         $plugin->load($feed->url);
     } catch (Exception $e) {
         $logger->log('error loading feed content: ' . $e->getMessage(), Zend_Log::ERR);
         return $messagesModel->add($feed, $e->getMessage());
     }
     // update html url of the feed
     $feed->htmlurl = $plugin->getHtmlUrl();
     $feed->save();
     // current date
     $now = Zend_Date::now();
     $now->sub(Zend_Registry::get('session')->deleteItems, Zend_Date::DAY);
     $logger->log('current date ' . $now, Zend_Log::DEBUG);
     // include htmLawed
     if (!function_exists('htmLawed')) {
         require Zend_Registry::get('config')->includePaths->library . '/htmLawed.php';
     }
     // insert new items in database
     $logger->log('start item fetching', Zend_Log::DEBUG);
     $itemsModel = new application_models_items();
     foreach ($plugin as $item) {
         // test date: continue with next if item too old
         $date = new Zend_Date($item->getDate(), Zend_Date::ISO_8601);
         if ($now->compare($date) == 1 && Zend_Registry::get('session')->deleteItems != 0) {
             $logger->log('item "' . $item->getTitle() . '" (' . $date . ') older than ' . Zend_Registry::get('session')->deleteItems . ' days', Zend_Log::DEBUG);
             continue;
         }
         // filter match?
         try {
             if ($this->filter($feed, $item) === false) {
                 continue;
             }
         } catch (Exception $e) {
             $messagesModel->add($feed, 'filter error');
             continue;
         }
         // item already in database?
         if ($this->itemExists($item) === true) {
             continue;
         }
         // insert new item
         $logger->log('---', Zend_Log::DEBUG);
         $logger->log('start insertion of new item "' . $item->getTitle() . '"', Zend_Log::DEBUG);
         // sanitize content html
         $content = htmLawed($item->getContent(), array("safe" => 1, "deny_attribute" => Zend_Registry::get('config')->rss->allowed->deniedattribs, "keep_bad" => 0, "comment" => 1, "cdata" => 1, "elements" => Zend_Registry::get('config')->rss->allowed->tags));
         $title = htmLawed($item->getTitle(), array("deny_attribute" => "*", "elements" => "-*"));
         $logger->log('item content sanitized', Zend_Log::DEBUG);
         $nitem = array('title' => $title, 'content' => $content, 'feed' => $feed->id, 'unread' => 1, 'starred' => 0, 'datetime' => $item->getDate(), 'uid' => $item->getId(), 'link' => htmLawed($item->getLink(), array("deny_attribute" => "*", "elements" => "-*")));
         $logger->log('item in database inserted', Zend_Log::DEBUG);
         // multimedia item: get and save thumbnail
         if ($plugin->multimedia) {
             try {
                 // download and generate thumbnail
                 $thumbnail = $this->generateThumbnail($item->getThumbnail());
                 $logger->log('thumbnail "' . $thumbnail . '" generated', Zend_Log::DEBUG);
                 // set thumbnailpath as content
                 $nitem = array_merge($nitem, array('content' => $thumbnail));
             } catch (Exception $e) {
                 $logger->log('thumbnail error ' . $e->getMessage(), Zend_Log::ERR);
                 $messagesModel->add($feed, $e->getMessage());
                 continue;
             }
         }
         // insert new item
         $itemsModel->insert($nitem);
         $logger->log('item inserted', Zend_Log::DEBUG);
     }
     // success: set lastrefresh
     $feed->lastrefresh = Zend_Date::now()->get(Zend_Date::TIMESTAMP);
     $feed->error = 0;
     $feed->save();
     // cleanup old items
     $logger->log('cleanup old items', Zend_Log::DEBUG);
     $this->cleanupOldItems();
     // cleanup old message items
     $messagesModel->cleanup();
     // destroy feed object (prevent memory issues)
     $logger->log('destroy feed object', Zend_Log::DEBUG);
     $plugin->destroy();
     return $feed->lastrefresh;
 }
コード例 #4
0
 /**
  * test remove a feed
  */
 public function testRemove()
 {
     $this->model->remove(3);
     // feed really deleted
     $this->assertEquals(0, $this->model->find(3)->count());
     // all items deleted
     $itemModel = new application_models_items();
     $result = $itemModel->fetchAll($itemModel->select()->where('feed=?', 3));
     $this->assertEquals(0, $result->count());
     // no icon file
     $this->assertFalse(file_exists(Zend_Registry::get('config')->favicons->path . "4711.ico"));
     // no messages
     $messagesModel = new application_models_messages();
     $result = $messagesModel->fetchAll($messagesModel->select()->where('feed=?', 3));
     $this->assertEquals(0, $result->count());
     // check reorder
     $this->assertEquals('0', $this->model->find('1')->current()->position);
     // correct position
     $this->assertEquals('1', $this->model->find('2')->current()->position);
     // correct position
     // validation
     $this->assertTrue($this->model->remove(222) !== true);
 }
コード例 #5
0
 /**
  * removes a feed
  *
  * @return array|bool true or error messages
  * @param int id of the feed
  */
 public function remove($id)
 {
     // get feed and category
     $feed = $this->find($id);
     if ($feed->count() == 0) {
         return Zend_Registry::get('language')->translate("feed doesn't exists");
     }
     $feed = $feed->current();
     $category = $feed->category;
     // delete all items
     $itemsModel = new application_models_items();
     $itemsModel->delete('feed=' . $feed->id);
     // delete icon
     $this->deleteIcon($feed);
     // delete messages
     $messagesModel = new application_models_messages();
     $messagesModel->delete('feed=' . $feed->id);
     // delete feed
     $this->delete('id=' . $feed->id);
     // reorder feeds in parent category
     if ($category != 0) {
         $categoryModel = new application_models_categories();
         $categoryModel->fixPositions($categoryModel->find($category)->current());
     }
     // success
     return true;
 }