예제 #1
0
 /**
  * Saves posts from enabled Source Feeds
  *
  * @return  void
  */
 public function RetrieveNewPostsTask()
 {
     $model = new Models\Feeds();
     $feeds = $model->loadAll();
     $model = new Models\Posts();
     $savedURLS = $model->loadURLs();
     foreach ($feeds as $feed) {
         if ($feed->enabled == 1 && filter_var($feed->url, FILTER_VALIDATE_URL) == TRUE) {
             try {
                 $ch = curl_init();
                 // set URL and other appropriate options
                 curl_setopt($ch, CURLOPT_URL, $feed->url);
                 curl_setopt($ch, CURLOPT_HEADER, 0);
                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                 $data = curl_exec($ch);
                 curl_close($ch);
                 if (!$data) {
                     $this->setError(Lang::txt('COM_FEEDAGGREGATOR_ERROR_READING_FEED', $feed->url));
                     continue;
                 }
                 $page = simplexml_load_string(utf8_encode($data));
                 if (isset($page->entry) == TRUE) {
                     $items = $page->entry;
                     $feedType = 'ATOM';
                 } else {
                     $items = $page->channel->item;
                     //gets the items of the channel
                     $feedType = 'RSS';
                 }
                 foreach ($items as $item) {
                     if ($feedType == 'ATOM') {
                         // get the href attribute of the orignal content link
                         foreach ($item->link->attributes() as $link) {
                             $link = $link;
                         }
                         if (in_array($link, $savedURLS) == FALSE) {
                             $post = new Models\Posts();
                             //create post object
                             $post->set('title', html_entity_decode(strip_tags($item->title)));
                             $post->set('feed_id', (int) $feed->id);
                             $post->set('status', 0);
                             //force new status
                             //ATOM original content link
                             $post->set('url', (string) $link);
                             if (isset($item->published) == TRUE) {
                                 $post->set('created', strtotime($item->published));
                             } else {
                                 $post->set('created', strtotime($item->updated));
                             }
                             $post->set('description', (string) html_entity_decode(strip_tags($item->content, '<img>')));
                             $post->store();
                             //save the post
                         }
                         // end check for prior existance
                     } else {
                         if ($feedType == 'RSS') {
                             if (in_array($item->link, $savedURLS) == FALSE) {
                                 $post = new Models\Posts();
                                 //create post object
                                 $post->set('title', (string) html_entity_decode(strip_tags($item->title)));
                                 $post->set('feed_id', (int) $feed->id);
                                 $post->set('status', 0);
                                 //force new status
                                 $post->set('created', strtotime($item->pubDate));
                                 $post->set('description', (string) html_entity_decode(strip_tags($item->description, '<img>')));
                                 $post->set('url', (string) $item->link);
                                 $post->store();
                                 //save the post
                             }
                         }
                     }
                 }
                 //end foreach
             } catch (Exception $e) {
                 $this->setError(Lang::txt('COM_FEEDAGGREGATOR_ERROR_READING_FEED', $feed->url));
                 continue;
             }
         }
         //end if
     }
     if ($this->getError()) {
         Notify::warning(implode('<br />', $this->getErrors()), $this->_option);
     }
     // Output messsage and redirect
     App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=posts&filterby=all', false), Lang::txt('COM_FEEDAGGREGATOR_GOT_NEW_POSTS'));
 }
예제 #2
0
 /**
  * Save Source Feed form
  *
  * @return  void
  */
 public function saveTask()
 {
     //do a Request instead of a bind()
     $feed = new Models\Feeds();
     //get the URL first in order to validate
     $feed->set('url', Request::getVar('url'));
     $feed->set('name', Request::getVar('name'));
     $feed->set('id', Request::getVar('id'));
     $feed->set('enabled', Request::getVar('enabled'));
     $feed->set('description', Request::getVar('description'));
     //validate url
     if (!filter_var($feed->get('url'), FILTER_VALIDATE_URL)) {
         $this->feed = $feed;
         //redirect
         App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=feeds&task=new'), Lang::txt('COM_FEEDAGGREGATOR_ERROR_INVALID_URL'), 'warning');
     } else {
         if ($feed->store()) {
             // Output messsage and redirect
             App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller), Lang::txt('COM_FEEDAGGREGATOR_INFORMATION_UPDATED'));
         } else {
             App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller), Lang::txt('COM_FEEDAGGREGATOR_ERROR_UPDATE_FAILED'), 'warning');
         }
     }
 }