public function index()
 {
     switch (Input::get('filter')) {
         case 'all':
             $conferences = EloquentConference::all();
             break;
         case 'future':
             $conferences = EloquentConference::future()->get();
             break;
         case 'open_cfp':
             $conferences = EloquentConference::openCfp()->get();
             break;
         case 'unclosed_cfp':
             // Pass through
         // Pass through
         default:
             $conferences = EloquentConference::unclosedCfp()->get();
             break;
     }
     $sort = 'closing_next';
     $sortDir = 'asc';
     if (Input::has('sort')) {
         $sort = Input::get('sort');
         if (substr($sort, 0, 1) == '-') {
             $sort = substr($sort, 1);
             $sortDir = 'desc';
         }
     }
     switch ($sort) {
         case 'alpha':
             $conferences->sortBy(function (EloquentConference $model) {
                 return strtolower($model->title);
             });
             break;
         case 'date':
             $conferences->sortBy(function (EloquentConference $model) {
                 return $model->starts_at;
             });
             break;
         case 'closing_next':
             // Pass through
         // Pass through
         default:
             // Forces closed CFPs to the end. I feel dirty. Even dirtier with the 500 thing.
             $conferences->sortBy(function (EloquentConference $model) {
                 if ($model->cfp_ends_at > Carbon::now()) {
                     return $model->cfp_ends_at;
                 } elseif ($model->cfp_ends_at === null) {
                     return Carbon::now()->addYear(500);
                 } else {
                     return $model->cfp_ends_at->addYear(1000);
                 }
             });
             break;
     }
     if ($sortDir == 'desc') {
         $conferences->reverse();
     }
     return response()->jsonApi(['data' => $conferences->values()]);
 }