/**
  * Execute the console command.
  *
  * @return mixed
  */
 public function fire()
 {
     $confessions = Confession::orderBy('confession_queue.update_status_at', 'DESC')->join('confession_queue', 'confessions.confession_id', '=', 'confession_queue.confession_id')->where('confession_queue.update_status_at', '<=', Carbon::now()->toDateTimeString())->get();
     $confessions->each(function ($confession) {
         $queue = $confession->queue()->get()->get(0);
         echo '[INFO] Setting confession #' . $confession->confession_id . ' to ' . strtolower($queue->status_after) . '.' . "\n";
         $this->confessionsRepo->switchStatus($confession, $queue->status_after);
         $confession->queue()->delete();
     });
     echo '[INFO] Completed posting scheduled confessions.' . "\n";
 }
 /**
  * Display a confession based on ID for search engine crawlers
  * @param  int $id confession ID
  * @return void
  */
 public function getConfession($id)
 {
     if ($this->isCrawler()) {
         $confession = Confession::approved()->find($id);
         if (!$confession) {
             \App::abort(404);
         }
         return view('robots.confession', ['confession' => $confession]);
     } else {
         return redirect(url('/confession', $id));
     }
 }
 public function postFavourite()
 {
     $fbUserId = \Session::get('fb_user_id');
     $confessionId = \Input::get('confession_id');
     if ($fbUserId && $confessionId) {
         $fbUser = FbUser::find($fbUserId);
         if (!Confession::find($confessionId)) {
             return \Response::json(['success' => false, 'errors' => ['Confession does not exist.']]);
         }
         if ($fbUser->favourites->contains($confessionId)) {
             return \Response::json(['success' => false, 'errors' => ['Confession already favourited.']]);
         }
         $fbUser->favourites()->attach($confessionId);
         return \Response::json(['success' => true]);
     }
     return \Response::json(['success' => false, 'errors' => ['User not logged in.']]);
 }
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function fire()
 {
     // Get the latest 250 facebook posts and record likes/comments
     $facebookRequest = sprintf('/%s/feed?limit=250&oauth_token=%s&fields=comments.limit(1).summary(true),likes.limit(1).summary(true)', env('FACEBOOK_PAGE_ID', ''), \Config::get('laravel-facebook-sdk.facebook_config.page_access_token'));
     $facebookResponse = \Facebook::get($facebookRequest)->getDecodedBody();
     foreach ($facebookResponse['data'] as $facebookPost) {
         $facebookPostId = explode('_', $facebookPost['id'])[1];
         // get facebook post id
         $confession = Confession::where('fb_post_id', '=', $facebookPostId)->first();
         // get confession associated with fb post
         if ($confession) {
             $confession->fb_like_count = $facebookPost['likes']['summary']['total_count'];
             $confession->fb_comment_count = $facebookPost['comments']['summary']['total_count'];
             $confession->save();
         }
     }
     $this->info('Facebook Information Updated!');
 }
 /**
  * Search for confessions which contains the search string
  * method: get
  * route: api/confessions/search/<searchString>?timestamp=<time>&offset=<offset>&count=<count>
  * @param  string $searchString - non-empty string (of length at least 5? - maybe at least 1)
  * @return json {"data": {"confessions": [Confession1, confession2, ...]}}
  *                           an array of confession json
  */
 public function search($searchString)
 {
     // Naive search ...
     $query = Confession::orderBy('status_updated_at', 'DESC')->where('content', 'LIKE', '%' . $searchString . '%')->approved()->with('favourites')->with('categories');
     if (intval(\Input::get('count')) == 0) {
         $count = self::MAX_CONFESSION_COUNT;
     } else {
         $count = min(intval(\Input::get('count')), self::MAX_CONFESSION_COUNT);
     }
     if (\Input::get('timestamp')) {
         $query->whereRaw('UNIX_TIMESTAMP(status_updated_at) <= ?', [\Input::get('timestamp')]);
     }
     $query->take($count);
     if (intval(\Input::get('offset')) > 0) {
         $query->skip(intval(\Input::get('offset')));
     }
     $confessions = $query->get();
     foreach ($confessions as $confession) {
         $confession->status_updated_at_timestamp = $confession->status_updated_at->timestamp;
         $confession->getFacebookInformation();
     }
     return \Response::json(['data' => ['confessions' => $confessions]]);
 }
 public function getReject($id)
 {
     // @TODO: Move this to a repository
     $confession = Confession::findOrFail($id);
     if (!$this->confessionsRepo->getPageToken()) {
         return \Redirect::back()->withMessage('You have not connected your account with Facebook.')->with('alert-class', 'alert-danger');
     }
     try {
         $this->confessionsRepo->switchStatus($confession, 'Rejected');
         return \Redirect::back()->withMessage('Confession successfully rejected.')->with('alert-class', 'alert-success');
     } catch (\Exception $e) {
         return \Redirect::back()->withMessage('Error rejecting confession: ' . $e->getMessage())->with('alert-class', 'alert-danger');
     }
 }