public function postIndex()
 {
     // Parse the Job IDs
     $selected_classes = Input::get('classes');
     foreach (ClassJob::get_id_abbr_list(true) as $abbr => $id) {
         if (in_array($abbr, $selected_classes)) {
             $job_ids[] = $id;
         }
     }
     if (empty($job_ids)) {
         $job_ids[] = 1;
     }
     // All Leves
     $query = Leve::with(array('classjob', 'item', 'item.name', 'item.recipe', 'item.vendors'))->where('item_id', '>', 0)->orderBy('classjob_id')->orderBy('level')->orderBy('xp')->orderBy('gil');
     // Job IDs
     $query->whereIn('classjob_id', $job_ids);
     // Level Range
     $min = Input::get('min_level');
     $max = Input::get('max_level');
     // Invert if needed
     if ($min > $max) {
         list($max, $min) = array($min, $max);
     }
     $query->whereBetween('level', array($min, $max));
     // Triple Only
     if (Input::get('triple_only') == 'true') {
         $query->where('triple', 1);
     }
     // Types
     $query->whereIn('type', Input::get('types'));
     // Text Searches
     if (Input::get('leve_name')) {
         $query->where('name', 'like', '%' . Input::get('leve_name') . '%');
     }
     $leve_records = $query->remember(Config::get('site.cache_length'))->get();
     $location_search = strtolower(Input::get('leve_location'));
     $item_search = strtolower(Input::get('leve_item'));
     $rewards = LeveReward::with('item')->whereBetween('level', array($min, $max))->whereIn('classjob_id', $job_ids)->get();
     $leve_rewards = array();
     foreach ($leve_records as $k => $row) {
         if ($item_search && !preg_match('/' . $item_search . '/', strtolower($row->item->name->term))) {
             unset($leve_records[$k]);
             continue;
         }
         // TODO this can be moved into the query itself now, most likely
         if ($location_search) {
             if (!preg_match('/' . $location_search . '/', strtolower($row->location)) && !preg_match('/' . $location_search . '/', strtolower($row->major_location)) && !preg_match('/' . $location_search . '/', strtolower($row->minor_location))) {
                 unset($leve_records[$k]);
                 continue;
             }
         }
         foreach ($rewards as $reward) {
             if ($reward->classjob_id == $row->classjob_id && $reward->level == $row->level) {
                 $leve_rewards[$row->id][] = $reward;
             }
         }
     }
     return View::make('leve.rows')->with('leves', $leve_records)->with('leve_rewards', $leve_rewards);
 }
 public function getIndex()
 {
     $job_ids = Config::get('site.job_ids.crafting');
     $job_ids[] = Config::get('site.job_ids.fishing');
     $type_to_icon = array('Field' => 'leaf', 'Courier' => 'envelope', 'Reverse Courier' => 'plane', 'Town' => 'home');
     // All Leves
     $all_leves = Leve::with(array('classjob', 'classjob.en_abbr', 'item', 'item.name', 'item.recipe', 'item.vendors'))->where('item_id', '>', 0)->orderBy('classjob_id')->orderBy('level')->orderBy('triple', 'desc')->orderBy('xp', 'desc')->orderBy('gil', 'desc')->get();
     $leves = array();
     foreach ($all_leves as $leve) {
         $leves[$leve->classjob->en_abbr->term][$leve->level][] = $leve;
     }
     $rewards = LeveReward::with('item')->orderBy('classjob_id')->orderBy('level')->orderBy('item_id')->orderBy('amount')->get();
     $leve_rewards = array();
     foreach ($rewards as $reward) {
         if ($reward->item_id) {
             $leve_rewards[$reward->classjob_id][$reward->level][$reward->item_id]['item'] = $reward->item;
             $leve_rewards[$reward->classjob_id][$reward->level][$reward->item_id]['amounts'][] = $reward->amount;
         }
     }
     return View::make('levequests.index')->with('crafting_job_list', ClassJob::with('name', 'en_name', 'en_abbr')->whereIn('id', $job_ids)->get())->with('crafting_job_ids', $job_ids)->with('leves', $leves)->with('rewards', $leve_rewards)->with('type_to_icon', $type_to_icon)->with('opening_level', 1)->with('opening_class', 'CRP');
 }