public function getIndex($status = 'Pending')
 {
     $status = ucfirst($status);
     if ($status != 'Pending') {
         $query = Confession::orderBy('created_at', 'desc');
     } else {
         $query = Confession::orderBy('created_at', 'asc');
     }
     if (\Input::get('category')) {
         $query->whereHas('categories', function ($query) {
             $query->where('confession_categories.confession_category_id', '=', intval(\Input::get('category')));
         });
     }
     if (\Input::get('q')) {
         $search = stripslashes(\Input::get('q'));
         $query->where('content', 'LIKE', "%{$search}%");
     }
     if (\Input::get('start') && \Input::get('end')) {
         $start = Carbon::createFromFormat('U', strtotime(\Input::get('start')))->startOfDay();
         $end = Carbon::createFromFormat('U', strtotime(\Input::get('end')))->startOfDay();
         if ($start > $end) {
             return \Redirect::back()->withMessage('Start date cannot be later than end date.')->with('alert-class', 'alert-danger');
         }
         $query->where('created_at', '>=', $start->toDateTimeString());
         $query->where('created_at', '<', $end->toDateTimeString());
     }
     if ($status != 'All') {
         $query->where('status', '=', ucfirst($status));
     }
     $confessions = $query->with('moderatorComments')->paginate(10);
     return view('admin.confessions.index', ['confessions' => $confessions, 'categoryOptions' => array_merge(array('All Categories' => 0), Category::orderBy('confession_category', 'asc')->lists('confession_category_id', 'confession_category')), 'hasPageToken' => (bool) $this->confessionsRepo->getPageToken()]);
 }
 /**
  * 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";
 }
 /**
  * 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]]);
 }