/** * Действие для отображения */ public function action_index($season_id) { // Извлекаем из БД таблицу для главной $data['table'] = \Model_Table::find('first', array('related' => 'season', 'where' => array(array('season_id', '=', $season_id)))); if ($data['table']) { $data['table']->results = json_decode($data['table']->results_json); // Сортируем по очкам usort($data['table']->results, array('Main\\Controller_Table', 'cmp')); // Извлекаем команды сезона для получения их картинок $season_teams = \Model_Team::find('all', array('related' => 'seasons', 'where' => array(array('seasons.id', '=', $season_id)))); foreach ($data['table']->results as $key => $result_item) { foreach ($season_teams as $team) { if ($result_item->id == $team->id) { $data['table']->results[$key]->logo_uri = $team->logo_uri; break; } } } } $this->template->content = \View::forge('table/index', $data, FALSE); }
/** * Действие дял редактирования сезона (соревнования) * * @param int $id */ public function action_edit($id = null) { is_null($id) and \Response::redirect_back('admin/competitions/seasons'); if (!($season = \Model_Season::find($id, array('related' => array('teams'))))) { \Session::set_flash('error', 'Could not find Season #' . $id); \Response::redirect_back('admin/competitions/seasons'); } $val = \Model_Season::validate('edit'); if ($val->run()) { $season->value = \Input::post('value'); unset($season->teams); if (\Input::post('teams')) { foreach (\Input::post('teams') as $item) { $season->teams[] = \Model_Team::find($item); } } if ($season->has_table == 1 and \Input::post('has_table') == 0) { $table = \Model_Table::find('first', array('where' => array(array('season_id', '=', $season->id)))); if ($table) { $table->delete(); } $season->has_table = 0; } // Если нужно также создать таблицу if ($season->has_table == 0 and \Input::post('has_table') == 1) { $season->has_table = 1; // Массив таблицы результатов $arr = array(); $i = 1; foreach ($season->teams as $item) { $arr[] = array('id' => $item->id, 'place' => $i, 'name' => $item->value, 'games' => 0, 'wins' => 0, 'draws' => 0, 'loss' => 0, 'goals_in' => 0, 'goals_out' => 0, 'goals_out' => 0, 'points' => 0); $i++; } $season->table = \Model_Table::forge(array('results_json' => json_encode($arr), 'show_on_main' => 0)); } if ($season->save()) { \Session::set_flash('success', 'Сезон (соревнование) обновлен(о).'); \Response::redirect_back('admin/competitions/seasons'); } else { \Session::set_flash('error', 'Could not update Season #' . $id); } } else { if (\Input::method() == 'POST') { $season->value = $val->validated('value'); $season->has_table = $val->validated('has_table'); \Session::set_flash('error', $val->error()); } $this->template->set_global('season', $season, false); // Все команды $this->template->set_global('teams', \Model_Team::get_teams_for_select(), false); // Массив id команд сезона $season_teams = array(); foreach ($season->teams as $item) { $season_teams[] = $item->id; } $this->template->set_global('season_teams', $season_teams, false); } $this->template->content = \View::forge('competitions/seasons/edit'); }
/** * Действие уменьшение позиции команды в таблице */ public function action_decrease_team_position($table_id = null, $team_id = null) { (is_null($table_id) or is_null($team_id)) and \Response::redirect_back('admin/competitions/tables'); // Проверяем существует ли такая таблица if (!($table = \Model_Table::find($table_id))) { \Session::set_flash('error', 'Таблица не найдена.'); \Response::redirect_back('admin/competitions/tables'); } // Проверяем существует ли такая команда в ней $results = json_decode($table->results_json); foreach ($results as $key => $item) { // если такая команда найдена, то запоминаем место команды, // место которой увеличиваем и той, место которой нужно уменьшить if ($item->id == $team_id) { $key_dec = $key; foreach ($results as $k => $i) { if ($results[$k]->place == $results[$key_dec]->place - 1) { $key_inc = $k; break; } } break; } } if (!isset($key_dec)) { \Session::set_flash('error', 'Запись в таблице не найдена.'); \Response::redirect_back('admin/competitions/tables/edit/' . $table_id); } // Меняем местами команды и сохраняемся if (isset($key_inc) and isset($key_dec)) { $results[$key_inc]->place += 1; $results[$key_dec]->place -= 1; $table->results_json = json_encode($results); $table->save(); } \Session::set_flash('success', 'Действие успешно совершено.'); \Response::redirect_back('admin/competitions/tables/edit/' . $table_id); }
/** * Действие для отображение виджета турнирной таблицы */ public function action_table() { // Извлекаем из БД таблицу для главной $table = \Model_Table::find('first', array('where' => array(array('show_on_main', '=', 1)))); $data['results'] = array(); if ($table) { // Сортируем по очкам $data['results'] = json_decode($table->results_json); usort($data['results'], array('Main\\Controller_Widgets', 'cmp')); $data['season_id'] = $table->season_id; } return \View::forge('widgets/table', $data, FALSE)->render(); }