Exemple #1
0
 public static function processFeeds()
 {
     # This function retrieves all feeds which are due to be refreshed.
     # Any feed where the next update date is before now, will be included.
     # The time interval is determined by the FEED_UPDATE_INTERVAL environment variable
     # A scheduled task automatically gets articles for each feed and stored them in the database.
     # Set the timeout limit to 10 minutes
     set_time_limit(600);
     # Get Feeds which are due to be refreshed
     $current_time = time();
     $dt = new \DateTime("@{$current_time}");
     # Only get feeds where the next update date is before now.
     $feeds = \p4\Feed::where('next_update', '<', $dt->format("Y-m-d H:i:s"))->get();
     foreach ($feeds as $feed) {
         # Do not let a bad feed interrupt the processing of other feeds
         try {
             \p4\Libraries\RSSParser::getFeed($feed);
             echo "Processed Feed #" . $feed->id . "<br>";
         } catch (\Exception $e) {
             echo "Error in processing Feed #" . $feed->id . "<br>";
         }
     }
     # Update the Stats for Feeds
     $sql = "UPDATE\n                feeds INNER JOIN\n                (             \n                    SELECT\n                    f.id,\n                    COUNT(*) cnt\n                    FROM\n                    articles a INNER JOIN feeds f ON a.feed_id = f.id\n                    WHERE\n                    a.created_at > subdate(current_date, 1)\n                    GROUP BY\n                    f.id\n                ) v ON v.id = feeds.id\n                SET\n                stats = v.cnt   ";
     \DB::update(\DB::raw($sql));
     # Update the Stats for Tags
     $sql = "UPDATE\n                tags INNER JOIN\n                (             \n                    SELECT \n                     t.id,                \n                     COUNT(*) cnt\n                    FROM \n                      articles a INNER JOIN feeds f ON f.id = a.feed_id INNER JOIN feed_user u ON u.feed_id = f.id\n                     INNER JOIN tags t ON CONCAT(a.title,a.article_text) LIKE CONCAT('%',t.tag,'%')\n                     WHERE\n                     u.user_id = 1 \n                     GROUP BY\n                     t.id\n                ) v ON v.id = tags.id\n                SET\n                stats = v.cnt   ";
     \DB::update(\DB::raw($sql));
     # Update the Stats for Categories
     $sql = "UPDATE\n                categories INNER JOIN\n                (             \n                    SELECT\n                    u.category_id,\n                    COUNT(*) cnt\n                    FROM\n                    articles a INNER JOIN feeds f ON a.feed_id = f.id\n                    INNER JOIN feed_user u ON u.feed_id = f.id \n                    WHERE\n                    a.created_at > subdate(current_date, 1)\n                    GROUP BY\n                    u.category_id\n                ) v ON v.category_id = categories.id\n                SET\n                stats = v.cnt   ";
     \DB::update(\DB::raw($sql));
     # Update User Stats
     $sql = "UPDATE users\n                INNER JOIN\n                    (\n                        SELECT\n                        u.user_id,\n                        COUNT(*) new_articles\n                        FROM\n                        articles a INNER JOIN feed_user u ON a.feed_id = u.feed_id\n                        WHERE\n                        a.created_at > subdate(current_date, 1)\n                        GROUP BY\n                        u.user_id \n                    ) v ON users.id = v.user_id\n                SET\n                    users.new_articles = v.new_articles";
     \DB::update(\DB::raw($sql));
     # Update tua table
     \p4\Libraries\RSSParser::updateTagArticlesUsers();
 }
Exemple #2
0
 public function get_stats()
 {
     $feed = \p4\Feed::where('id', $this->feed_id)->first();
     #dd($feed->stats);
     return $feed->stats;
 }
 public function postAddFeed(Request $request)
 {
     $user_id = \Auth::user()->id;
     #Validate User Input
     $input = array('feed-url' => $request->input('feed-url'), 'feed-name' => $request->input('feed-name'), 'feed_category' => $request->input('add-feed-category'), 'new-feed-weight' => $request->input('new-feed-weight'));
     $validator = Validator::make($input, ['feed-url' => 'required|url', 'feed-name' => 'required|min:3|max:50', 'feed_category' => 'required|integer|min:0', 'new-feed-weight' => 'required|integer|min:1|max:100']);
     #dd($request->input('add-feed-category'));
     if ($validator->fails()) {
         return redirect('/Manage')->withErrors($validator)->withInput();
     }
     $feed_url = $request->input('feed-url');
     $feed_name = $request->input('feed-name');
     $feed_weight = $request->input('new-feed-weight');
     $categoryID = $request->input('add-feed-category');
     #Add Feed to the Feeds table (if it does not already exist)
     if (!\p4\Feed::where('feed_url', '=', $feed_url)->exists()) {
         $feed = new \p4\Feed();
         $feed->feed_url = $feed_url;
         $feed->next_update = new \DateTime();
         $feed->last_updated = new \DateTime();
         $feed->status = 'A';
         $feed->save();
         # Try to auto-load articles for the first time if it is a new feed.
         # If the URL is not a valid RSS feed, do not allow the user to add it, send back an error message instead.
         try {
             \p4\Libraries\RSSParser::getFeed($feed);
         } catch (\Exception $e) {
             # If the feed is not valid, remove it and tell the user
             $feed->delete();
             \Session::flash('message', '"The URL does not appear to point to a valid RSS feed. Please verify and try again."');
             return \Redirect::to('/Manage');
         }
     } else {
         $feed = \p4\Feed::where('feed_url', '=', $feed_url)->first();
     }
     #Add Feed to the Users_Feeds table
     $user_feed = new \p4\UserFeed();
     $user_feed->user_id = $user_id;
     $user_feed->feed_id = $feed->id;
     $user_feed->feed_name = $feed_name;
     $user_feed->category_id = $categoryID;
     $user_feed->weight = $feed_weight;
     $user_feed->save();
     # Update the Session Feeds so the updated list will appear in the left nav
     \p4\User::setSessionFeeds($user_id);
     return \Redirect::to('/Manage');
 }