Как запретить пользователю вступать еще раз ?
Вообще я вам предлагал начать с ТЗ для этого компонента. Я не имел ввиду, что вы сразу начнёте искать исполнителя по этому ТЗ. Я предлагал это для того, чтобы вы сами проговорили для себя порядок действий, от этого вы бы представляли себе полную картину, что и как делать. Как оформить БД, какие действия нужны для каждого объекта пользователь-команда-турнир.
Фотобитвы которые r2 оформил в виде видеоурока, вам подходят лишь для начала. Там рассматривается лишь одна связка двух объектов: пользователь-битва. А у вас три объекта и это только начало. В вашем варианте это создание команды и сбор игроков в ней. А дальше надо аналогично делать для создания турниров и добавления команд в турнир.
А у вас не понять, чего действительно вам надо. То пользователь сам может вступить в турнир минуя команду, то капитан команды вступает в турнир и собирает из свободных пользователей команду тут же в турнире, то капитан создаёт команду и потом каким-то образом любой пользователь попадает в турнир. Вы опишите что вы хотите сделать, тогда и желающих помочь прибавится. И желающие идей подкинуть тоже появятся.
Ещё желательно создать одну нормальную тему на форуме, дабы не повторять все картинки и код в разных ветках. Так желающим помочь легче будет вам помогать не ползая по всем веткам. И сама ветка будет неким пособием для создания компонента для новичков.
А у вас какой экшн отвечает за добавление в турнир, в нём и пропишите.
Вообще я вам предлагал начать с ТЗ для этого компонента. Я не имел ввиду, что вы сразу начнёте искать исполнителя по этому ТЗ. Я предлагал это для того, чтобы вы сами проговорили для себя порядок действий, от этого вы бы представляли себе полную картину, что и как делать. Как оформить БД, какие действия нужны для каждого объекта пользователь-команда-турнир.
Фотобитвы которые r2 оформил в виде видеоурока, вам подходят лишь для начала. Там рассматривается лишь одна связка двух объектов: пользователь-битва. А у вас три объекта и это только начало. В вашем варианте это создание команды и сбор игроков в ней. А дальше надо аналогично делать для создания турниров и добавления команд в турнир.
А у вас не понять, чего действительно вам надо. То пользователь сам может вступить в турнир минуя команду, то капитан команды вступает в турнир и собирает из свободных пользователей команду тут же в турнире, то капитан создаёт команду и потом каким-то образом любой пользователь попадает в турнир. Вы опишите что вы хотите сделать, тогда и желающих помочь прибавится. И желающие идей подкинуть тоже появятся.
Ещё желательно создать одну нормальную тему на форуме, дабы не повторять все картинки и код в разных ветках. Так желающим помочь легче будет вам помогать не ползая по всем веткам. И сама ветка будет неким пособием для создания компонента для новичков.
Я понимаю вас но у меня скоро турнир и поэтому надо объявить регистрацию, и поэтому слепил что получилось, но на данные момент мне остался последний пункт сделать, что бы пользователи могли вступать только в одну команду, а не ко всем подряд(
Эту кнопку лучше не выводить для пользователя, которому нажимать её не надо.Посмотрите
Эту кнопку лучше не выводить для пользователя, которому нажимать её не надо.Посмотрите
Но надо 1 раз выводить, например он зашел в турнир увидел команду и вступил после он увидел другую команду но туда он не сможет вступать, только когда он выйдет из команды тогда сможет вступить.
model.php
<?php class modelTournament extends cmsModel { public function addTournament($tournament){ return $this->insert('tournaments', $tournament); } public function updateTournament($id, $tournament){ return $this->update('tournaments', $id, $tournament); } public function deleteTournament($id){ return $this->delete('tournaments', $id); } public function getTournament($id){ $tournament = $this->getItemById('tournaments', $id); $this->filterEqual('tournament_id', $id); $this->select('u.nickname', 'user_nickname'); $tournament['teams'] = $this->get('team'); return $tournament; } public function getTournaments(){ return $this->get('tournaments'); } public function getTournamentsCount(){ return $this->getCount('tournaments'); } public function addTeam($team){ $team_id = $this->insert('team', $team); $this->filterEqual('id', $team['tournament_id']); $this->increment('tournaments','users_count'); return $team_id; } public function isUserInTournament($user_id, $tournament_id){ $this->filterEqual('user_id', $user_id); $this->filterEqual('tournament_id', $tournament_id); $result = $this->getCount('team'); $this->resetFilters(); return $result; } public function setTournamentStatus($tournament_id, $status){ 'status' => $status )); } public function getTeam($id){ return $this->getItemById('team', $id); } public function deleteTeam($id){ $config = cmsConfig::getInstance(); $team = $this->getTeam($id); $this->delete('team', $id); $this->filterEqual('id', $team['tournament_id']); $this->decrement('tournaments', 'users_count'); $tournament = $this->getTournament($team['tournament_id']); if ($tournament['status'] == tournament::STATUS_MODERATION){ if ($tournament['users_count'] < $tournament['min_users']){ $this->setTournamentStatus($tournament['id'], tournament::STATUS_PENDING); } } } }
<?php class actionTournamentJoin extends cmsAction { public function run($tournament_id){ if (!$tournament_id) { cmsCore::error404(); } $tournament = $this->model->getTournament($tournament_id); if (!$tournament || $tournament['status'] != tournament::STATUS_PENDING) { cmsCore::error404(); } if(cmsUser::get('tournament_id')){ cmsUser::addSessionMessage('Вы уже в команде', 'error'); $this->redirectBack(); } $user = cmsUser::getInstance(); $is_user_in_tournament = $user->is_admin ? false : $is_max; if ($is_user_in_tournament){ cmsCore::error404(); } $errors = false; $form = $this->getForm('join'); $is_submitted = $this->request->has('submit'); $team = $form->parse($this->request, $is_submitted); $user = cmsUser::getInstance(); if ($is_submitted){ $errors = $form->validate($this, $team); if (!$errors){ $team['tournament_id'] = $tournament_id; $team['user_id'] = $user->id; $this->model->addTeam($team); $tournament = $this->model->getTournament($tournament_id); if ($tournament['users_count'] >= $tournament['min_users']){ $this->model->setTournamentStatus($tournament_id, tournament::STATUS_MODERATION); } } if ($errors){ cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error'); } } $template = cmsTemplate::getInstance(); 'form' => $form, 'errors' => $errors, 'team' => $team, 'tournament' => $tournament )); } }
Вот есть конки вступления-выхода из групп
<div id="information" class="content_item block"> <a href="<?php echo $this->href_to($group['id']); ?>/join"><img src="/image/voite.jpg" alt="Присоединиться к сообществу" title="Присоединиться к сообществу" style="width: 150px; "/><a/> <a href="<?php echo $this->href_to($group['id']); ?>/leave"><img src="/image/unvoite.jpg" alt="Покинуть сообщество" title="Покинуть сообщество" style="width: 150px; "/><a/><p>
— уже в группе, то ему взамен Вступить, показывается — Вы уже в группе? Выйти
— Еще не в группе, то взамен выйти — только Вступить?
Это решение будет для всех
class actionTournamentDeleteTeam extends cmsAction { public function run($team_id=false){ if (!$team_id) { cmsCore::error404(); } $team = $this->model->getTeam($team_id); $this->model->deleteTeam($team_id); } }
public function getTeam($id){ return $this->getItemById('team', $id); } public function deleteTeam($id){ $config = cmsConfig::getInstance(); $team = $this->getTeam($id); $this->delete('team', $id); $this->delete('users', $user_id['tournament_id']); Это я вписал не знаю правильно или нет но не вышло $this->filterEqual('id', $team['tournament_id']); $this->decrement('tournaments', 'users_count'); $tournament = $this->getTournament($team['tournament_id']); if ($tournament['status'] == tournament::STATUS_MODERATION){ if ($tournament['users_count'] < $tournament['min_users']){ $this->setTournamentStatus($tournament['id'], tournament::STATUS_PENDING); } } }
В actionTournamentDeleteTeam надо сперва получить всех участников команды, каждому сделать очистку поля таким образомusers не удаляет что делать ?
а затем удалить саму команду.
Не удаляет ((
Delete Team
<?php class actionTournamentDeleteTeam extends cmsAction { public function run($team_id=false){ if (!$team_id) { cmsCore::error404(); } $team = $this->model->getTeam($team_id); $this->model->deleteTeam($team_id); } }
public function getTeam($id){ return $this->getItemById('team', $id); } public function deleteTeam($id){ $config = cmsConfig::getInstance(); $team = $this->getTeam($id); $this->delete('team', $id); $this->filterEqual('id', $team['tournament_id']); $this->decrement('tournaments', 'users_count'); $tournament = $this->getTournament($team['tournament_id']); if ($tournament['status'] == tournament::STATUS_MODERATION){ if ($tournament['users_count'] < $tournament['min_users']){ $this->setTournamentStatus($tournament['id'], tournament::STATUS_PENDING); } } }
В таком исполненииНе удаляет ((
и не будет. У вас $user_id не определена. Вам надо сначала её получить. А точнее получить список всех пользователей из этой команды и в цикле всем по очереди удалить.
В таком исполненииНе удаляет ((
и не будет. У вас $user_id не определена. Вам надо сначала её получить. А точнее получить список всех пользователей из этой команды и в цикле всем по очереди удалить.
public function run($team_id=false){ if (!$team_id) { cmsCore::error404(); } $team = $this->model->getTeam($team_id); $this->model->deleteTeam($team_id); }
Я вообще не знаю как это сделать ?( у меня остался последний штрих ни как не сделаю ((
Так надо сделать ? public function getUsers($id){ return $this->getItemById('users, $id); }
Вы так считаете?у меня остался последний штрих
вот ваш последний штрих
<?php class actionTournamentDeleteTeam extends cmsAction { public function run($team_id=false){ if (!$team_id) { cmsCore::error404(); } $team = $this->model->getTeam($team_id); $this->model->filterEqual('tournament_id', $team['tournament_id']); $users = $this->model->get('users'); foreach ($users as $user_id => $user){ } $this->model->deleteTeam($team_id); } }
При удалении ошибка
HTTP ERROR 500