Как запретить пользователю вступать еще раз ?

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#31 7 июня 2016 в 17:10
А у вас какой экшн отвечает за добавление в турнир, в нём и пропишите.

Вообще я вам предлагал начать с ТЗ для этого компонента. Я не имел ввиду, что вы сразу начнёте искать исполнителя по этому ТЗ. Я предлагал это для того, чтобы вы сами проговорили для себя порядок действий, от этого вы бы представляли себе полную картину, что и как делать. Как оформить БД, какие действия нужны для каждого объекта пользователь-команда-турнир.
Фотобитвы которые r2 оформил в виде видеоурока, вам подходят лишь для начала. Там рассматривается лишь одна связка двух объектов: пользователь-битва. А у вас три объекта и это только начало. В вашем варианте это создание команды и сбор игроков в ней. А дальше надо аналогично делать для создания турниров и добавления команд в турнир.

А у вас не понять, чего действительно вам надо. То пользователь сам может вступить в турнир минуя команду, то капитан команды вступает в турнир и собирает из свободных пользователей команду тут же в турнире, то капитан создаёт команду и потом каким-то образом любой пользователь попадает в турнир. Вы опишите что вы хотите сделать, тогда и желающих помочь прибавится. И желающие идей подкинуть тоже появятся.

Ещё желательно создать одну нормальную тему на форуме, дабы не повторять все картинки и код в разных ветках. Так желающим помочь легче будет вам помогать не ползая по всем веткам. И сама ветка будет неким пособием для создания компонента для новичков.
#32 7 июня 2016 в 17:18


А у вас какой экшн отвечает за добавление в турнир, в нём и пропишите.

Вообще я вам предлагал начать с ТЗ для этого компонента. Я не имел ввиду, что вы сразу начнёте искать исполнителя по этому ТЗ. Я предлагал это для того, чтобы вы сами проговорили для себя порядок действий, от этого вы бы представляли себе полную картину, что и как делать. Как оформить БД, какие действия нужны для каждого объекта пользователь-команда-турнир.
Фотобитвы которые r2 оформил в виде видеоурока, вам подходят лишь для начала. Там рассматривается лишь одна связка двух объектов: пользователь-битва. А у вас три объекта и это только начало. В вашем варианте это создание команды и сбор игроков в ней. А дальше надо аналогично делать для создания турниров и добавления команд в турнир.

А у вас не понять, чего действительно вам надо. То пользователь сам может вступить в турнир минуя команду, то капитан команды вступает в турнир и собирает из свободных пользователей команду тут же в турнире, то капитан создаёт команду и потом каким-то образом любой пользователь попадает в турнир. Вы опишите что вы хотите сделать, тогда и желающих помочь прибавится. И желающие идей подкинуть тоже появятся.

Ещё желательно создать одну нормальную тему на форуме, дабы не повторять все картинки и код в разных ветках. Так желающим помочь легче будет вам помогать не ползая по всем веткам. И сама ветка будет неким пособием для создания компонента для новичков.

Loadырь


Я понимаю вас но у меня скоро турнир и поэтому надо объявить регистрацию, и поэтому слепил что получилось, но на данные момент мне остался последний пункт сделать, что бы пользователи могли вступать только в одну команду, а не ко всем подряд(
#33 7 июня 2016 в 17:18

Посмотрите

Нико
Эту кнопку лучше не выводить для пользователя, которому нажимать её не надо.
#34 7 июня 2016 в 17:21


Посмотрите

Нико
Эту кнопку лучше не выводить для пользователя, которому нажимать её не надо.

Loadырь

Но надо 1 раз выводить, например он зашел в турнир увидел команду и вступил после он увидел другую команду но туда он не сможет вступать, только когда он выйдет из команды тогда сможет вступить.
#35 7 июня 2016 в 17:28
Вот все файлы которые нужны

model.php
  1. <?php
  2.  
  3. class modelTournament extends cmsModel {
  4.  
  5. public function addTournament($tournament){
  6.  
  7. return $this->insert('tournaments', $tournament);
  8.  
  9. }
  10.  
  11. public function updateTournament($id, $tournament){
  12.  
  13. return $this->update('tournaments', $id, $tournament);
  14.  
  15. }
  16.  
  17. public function deleteTournament($id){
  18.  
  19. return $this->delete('tournaments', $id);
  20.  
  21. }
  22.  
  23. public function getTournament($id){
  24.  
  25. $tournament = $this->getItemById('tournaments', $id);
  26.  
  27. $this->filterEqual('tournament_id', $id);
  28.  
  29. $this->join('cms_users', 'u', 'u.id = i.user_id');
  30.  
  31. $this->select('u.nickname', 'user_nickname');
  32.  
  33. $tournament['teams'] = $this->get('team');
  34.  
  35. return $tournament;
  36.  
  37. }
  38.  
  39. public function getTournaments(){
  40.  
  41. return $this->get('tournaments');
  42.  
  43. }
  44.  
  45. public function getTournamentsCount(){
  46.  
  47. return $this->getCount('tournaments');
  48.  
  49. }
  50.  
  51. public function addTeam($team){
  52.  
  53. $team_id = $this->insert('team', $team);
  54.  
  55. $this->filterEqual('id', $team['tournament_id']);
  56.  
  57. $this->increment('tournaments','users_count');
  58.  
  59. return $team_id;
  60.  
  61. }
  62.  
  63. public function isUserInTournament($user_id, $tournament_id){
  64.  
  65. $this->filterEqual('user_id', $user_id);
  66. $this->filterEqual('tournament_id', $tournament_id);
  67.  
  68. $result = $this->getCount('team');
  69.  
  70. $this->resetFilters();
  71.  
  72. return $result;
  73.  
  74. }
  75.  
  76. public function setTournamentStatus($tournament_id, $status){
  77.  
  78. return $this->update('tournaments', $tournament_id, array(
  79. 'status' => $status
  80. ));
  81.  
  82. }
  83.  
  84. public function getTeam($id){
  85.  
  86. return $this->getItemById('team', $id);
  87. }
  88.  
  89. public function deleteTeam($id){
  90.  
  91. $config = cmsConfig::getInstance();
  92.  
  93. $team = $this->getTeam($id);
  94.  
  95. $this->delete('team', $id);
  96.  
  97. $this->filterEqual('id', $team['tournament_id']);
  98. $this->decrement('tournaments', 'users_count');
  99.  
  100. $tournament = $this->getTournament($team['tournament_id']);
  101.  
  102. if ($tournament['status'] == tournament::STATUS_MODERATION){
  103. if ($tournament['users_count'] < $tournament['min_users']){
  104. $this->setTournamentStatus($tournament['id'], tournament::STATUS_PENDING);
  105. }
  106. }
  107.  
  108. }
  109.  
  110. }
join.php
  1.  
  2.  
  3. <?php
  4.  
  5. class actionTournamentJoin extends cmsAction {
  6.  
  7. public function run($tournament_id){
  8.  
  9. if (!$tournament_id) { cmsCore::error404(); }
  10.  
  11. $tournament = $this->model->getTournament($tournament_id);
  12.  
  13. if (!$tournament || $tournament['status'] != tournament::STATUS_PENDING) {
  14. cmsCore::error404();
  15. }
  16. if(cmsUser::get('tournament_id')){
  17. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  18. $this->redirectBack();
  19. }
  20.  
  21. $user = cmsUser::getInstance();
  22. $is_user_in_tournament = $user->is_admin ? false : $is_max;
  23.  
  24. if ($is_user_in_tournament){
  25. cmsCore::error404();
  26. }
  27.  
  28. $errors = false;
  29.  
  30. $form = $this->getForm('join');
  31.  
  32. $is_submitted = $this->request->has('submit');
  33.  
  34. $team = $form->parse($this->request, $is_submitted);
  35.  
  36. $user = cmsUser::getInstance();
  37.  
  38.  
  39. if ($is_submitted){
  40.  
  41. $errors = $form->validate($this, $team);
  42.  
  43. if (!$errors){
  44.  
  45. $team['tournament_id'] = $tournament_id;
  46. $team['user_id'] = $user->id;
  47. $this->model->addTeam($team);
  48.  
  49. $tournament = $this->model->getTournament($tournament_id);
  50.  
  51. if ($tournament['users_count'] >= $tournament['min_users']){
  52.  
  53. $this->model->setTournamentStatus($tournament_id, tournament::STATUS_MODERATION);
  54.  
  55.  
  56. }
  57.  
  58.  
  59. $this->redirectToAction('event', array($tournament_id));
  60. }
  61.  
  62. if ($errors){
  63. cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
  64. }
  65.  
  66. }
  67.  
  68. $template = cmsTemplate::getInstance();
  69.  
  70. $template->render('form_join', array(
  71. 'form' => $form,
  72. 'errors' => $errors,
  73. 'team' => $team,
  74. 'tournament' => $tournament
  75. ));
  76.  
  77. }
  78.  
  79. }
  80.  
teams.php
  1.  
#36 7 июня 2016 в 18:52
В файле join.php в 48 cтроке пропишите
  1. $this->model->update('users', $user->id, array('tournament_id' => $tournament_id));
#37 7 июня 2016 в 20:53
Рано радовался.

Вот есть конки вступления-выхода из групп

  1. <div id="information" class="content_item block">
  2. <a href="<?php echo $this->href_to($group['id']); ?>/join"><img src="/image/voite.jpg" alt="Присоединиться к сообществу" title="Присоединиться к сообществу" style="width: 150px;
  3. "/><a/>
  4. <a href="<?php echo $this->href_to($group['id']); ?>/leave"><img src="/image/unvoite.jpg" alt="Покинуть сообщество" title="Покинуть сообщество" style="width: 150px;
  5. "/><a/><p>
Куда добавить проверку, что если человек
— уже в группе, то ему взамен Вступить, показывается — Вы уже в группе? Выйти
— Еще не в группе, то взамен выйти — только Вступить?

Это решение будет для всех
#38 7 июня 2016 в 21:00
ivanish, тут про другие группы речь идёт. Тут обсуждают действия группы (команды) баскетболистов на турнире. Это отдельный компонент и к компоненту "Группы" он никак не относится.
#39 7 июня 2016 в 22:52
Loadырь, Получилось теперь он записывает в users id turnira но при удаление игрока из команды, например у меня есть кнопка удалить игрока, он удаляет но из users не удаляет что делать ?

  1. class actionTournamentDeleteTeam extends cmsAction {
  2.  
  3. public function run($team_id=false){
  4.  
  5. if (!$team_id) { cmsCore::error404(); }
  6.  
  7. $team = $this->model->getTeam($team_id);
  8.  
  9. $this->model->deleteTeam($team_id);
  10.  
  11. $this->redirectToAction('event', array($team['tournament_id']));
  12.  
  13. }
  14.  
  15. }

  1. public function getTeam($id){
  2.  
  3. return $this->getItemById('team', $id);
  4. }
  5.  
  6. public function deleteTeam($id){
  7.  
  8. $config = cmsConfig::getInstance();
  9.  
  10. $team = $this->getTeam($id);
  11.  
  12. $this->delete('team', $id);
  13.  
  14. $this->delete('users', $user_id['tournament_id']); Это я вписал не знаю правильно или нет но не вышло
  15.  
  16. $this->filterEqual('id', $team['tournament_id']);
  17. $this->decrement('tournaments', 'users_count');
  18.  
  19. $tournament = $this->getTournament($team['tournament_id']);
  20.  
  21. if ($tournament['status'] == tournament::STATUS_MODERATION){
  22. if ($tournament['users_count'] < $tournament['min_users']){
  23. $this->setTournamentStatus($tournament['id'], tournament::STATUS_PENDING);
  24. }
  25. }
  26.  
  27. }
#40 8 июня 2016 в 07:19

users не удаляет что делать ?

Нико
В actionTournamentDeleteTeam надо сперва получить всех участников команды, каждому сделать очистку поля таким образом
  1. $this->model->update('users', $user_id, array('tournament_id' => null));
а затем удалить саму команду.
#41 8 июня 2016 в 11:24


users не удаляет что делать ?

Нико
В actionTournamentDeleteTeam надо сперва получить всех участников команды, каждому сделать очистку поля таким образом
  1. $this->model->update('users', $user_id, array('tournament_id' => null));
а затем удалить саму команду.

Loadырь

Не удаляет ((

Delete Team

  1.  
  2. <?php
  3.  
  4. class actionTournamentDeleteTeam extends cmsAction {
  5.  
  6. public function run($team_id=false){
  7.  
  8. if (!$team_id) { cmsCore::error404(); }
  9.  
  10. $this->model->update('users', $user_id, array('tournament_id' => null));
  11.  
  12. $team = $this->model->getTeam($team_id);
  13.  
  14. $this->model->deleteTeam($team_id);
  15.  
  16. $this->redirectToAction('event', array($team['tournament_id']));
  17.  
  18. }
  19.  
  20. }
Model.

  1.  
  2. public function getTeam($id){
  3.  
  4. return $this->getItemById('team', $id);
  5. }
  6.  
  7. public function deleteTeam($id){
  8.  
  9. $config = cmsConfig::getInstance();
  10.  
  11. $team = $this->getTeam($id);
  12.  
  13. $this->delete('team', $id);
  14.  
  15. $this->filterEqual('id', $team['tournament_id']);
  16. $this->decrement('tournaments', 'users_count');
  17.  
  18. $tournament = $this->getTournament($team['tournament_id']);
  19.  
  20. if ($tournament['status'] == tournament::STATUS_MODERATION){
  21. if ($tournament['users_count'] < $tournament['min_users']){
  22. $this->setTournamentStatus($tournament['id'], tournament::STATUS_PENDING);
  23. }
  24. }
  25.  
  26. }
#42 8 июня 2016 в 11:32

Не удаляет ((

Нико
В таком исполнении
  1. public function run($team_id=false){
  2.  
  3. if (!$team_id) { cmsCore::error404(); }
  4.  
  5. $this->model->update('users', $user_id, array('tournament_id' => null));
  6.  
  7. $team = $this->model->getTeam($team_id);
  8.  
  9. $this->model->deleteTeam($team_id);
  10.  
  11. $this->redirectToAction('event', array($team['tournament_id']));
  12.  
  13. }
и не будет. У вас $user_id не определена. Вам надо сначала её получить. А точнее получить список всех пользователей из этой команды и в цикле всем по очереди удалить.
#43 8 июня 2016 в 11:49


Не удаляет ((

Нико
В таком исполнении
  1. public function run($team_id=false){
  2.  
  3. if (!$team_id) { cmsCore::error404(); }
  4.  
  5. $this->model->update('users', $user_id, array('tournament_id' => null));
  6.  
  7. $team = $this->model->getTeam($team_id);
  8.  
  9. $this->model->deleteTeam($team_id);
  10.  
  11. $this->redirectToAction('event', array($team['tournament_id']));
  12.  
  13. }
и не будет. У вас $user_id не определена. Вам надо сначала её получить. А точнее получить список всех пользователей из этой команды и в цикле всем по очереди удалить.

Loadырь

Я вообще не знаю как это сделать ?( у меня остался последний штрих ни как не сделаю ((

  1. Так надо сделать ?
  2.  
  3. public function getUsers($id){
  4.  
  5. return $this->getItemById('users, $id);
  6. }
#44 8 июня 2016 в 14:02

у меня остался последний штрих

Нико
Вы так считаете?
вот ваш последний штрих
  1. <?php
  2.  
  3. class actionTournamentDeleteTeam extends cmsAction {
  4.  
  5. public function run($team_id=false){
  6.  
  7. if (!$team_id) { cmsCore::error404(); }
  8.  
  9. $team = $this->model->getTeam($team_id);
  10.  
  11. $this->model->filterEqual('tournament_id', $team['tournament_id']);
  12.  
  13. $users = $this->model->get('users');
  14.  
  15. foreach ($users as $user_id => $user){
  16.  
  17. $this->model->update('users', $user_id, array('tournament_id' => null));
  18.  
  19. }
  20.  
  21. $this->model->deleteTeam($team_id);
  22.  
  23. $this->redirectToAction('event', array($team['tournament_id']));
  24.  
  25. }
  26.  
  27. }
#45 8 июня 2016 в 14:10
Loadырь,

При удалении ошибка
HTTP ERROR 500
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.