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

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 6 июня 2016 в 17:44
Как запретить пользователю вступать еще раз? Друзья есть турнир в котором люди заходят и создают команду но проблема в том что каждый пользователь может принять участие во всех командах, а мне надо что бы если он вступил в команду, все закрыть ему кнопку и вместо этой кнопки написать что * вы уже в команде*, только после если он захочет поменять команду он сможет вступить, есть база куда при вступление игрока записывается user_id. Вот кнопка

  1.  
  2. if ($tournament['status'] == tournament::STATUS_PENDING){
  3. if (cmsUser::isLogged()){
  4. if (!$is_user_in_tournament || cmsUser::isAdmin()){
  5. $this->addToolButton(array(
  6. 'class' => 'user_add',
  7. 'title' => LANG_TOURNAMENT_JOIN,
  8. 'href' => $this->href_to('join', $tournament['id'])
  9. ));
  10. }
  11. }
  12.  
  13. }
Но у меня есть запрет вступать повторно в эту же команду.
#2 6 июня 2016 в 22:35
На странице вступления в команду, перед добавлением в БД, делайте запрос
  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('cms_таблицы', 'user_id', cmsUser::get('id'));
Тут мы пытаемся получить список пользователей, которые вступили в группу, если запрос что то вернет, значить этот пользователь уже в команде, тогда можете вернуть false с текстом, что вы уже в команде
#3 6 июня 2016 в 22:48


На странице вступления в команду, перед добавлением в БД, делайте запрос

  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('cms_таблицы', 'user_id', cmsUser::get('id'));
Тут мы пытаемся получить список пользователей, которые вступили в группу, если запрос что то вернет, значить этот пользователь уже в команде, тогда можете вернуть false с текстом, что вы уже в команде

Evanescence

То есть это вставляем сюда ?

  1. <?php
  2. class actionTournamentJoin extends cmsAction {
  3. public function run($tournament_id){
  4. if (!$tournament_id) { cmsCore::error404(); }
  5. $tournament = $this->model->getTournament($tournament_id);
  6. if (!$tournament || $tournament['status'] != tournament::STATUS_PENDING) {
  7. cmsCore::error404(); }
  8. $user = cmsUser::getInstance();
  9. $is_user_in_tournament = $user->is_admin ? false : $is_max;
  10. if ($is_user_in_tournament){
  11. cmsCore::error404(); }
  12. $errors = false;
  13. $form = $this->getForm('join');
  14. $is_submitted = $this->request->has('submit');
  15. $team = $form->parse($this->request, $is_submitted);
  16. $user = cmsUser::getInstance();
  17. if ($is_submitted){
  18. $errors = $form->validate($this, $team);
  19. if (!$errors){
  20. $team['tournament_id'] = $tournament_id;
  21. $team['user_id'] = $user->id;
  22. $this->model->addTeam($team);
  23. $tournament = $this->model->getTournament($tournament_id);
  24. if ($tournament['users_count'] >= $tournament['min_users']){
  25. $this->model->setTournamentStatus($tournament_id, tournament::STATUS_MODERATION); }
  26. $this->redirectToAction('event', array($tournament_id)); }
  27. if ($errors){
  28. cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error'); } }
  29. $template = cmsTemplate::getInstance();
  30. $template->render('form_join', array(
  31. 'form' => $form,
  32. 'errors' => $errors,
  33. 'team' => $team,
  34. 'tournament' => $tournament
  35. ));
  36. }
  37. }
А в шаблоне как прописать?
#4 6 июня 2016 в 23:06
Да.
В шаблон нечего не надо прописать, сделайте проверку, если пользователь уже вступил
  1. if($is_add){
  2. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  3. $this->redirectBack();
  4. }
#5 6 июня 2016 в 23:29


Да.
В шаблон нечего не надо прописать, сделайте проверку, если пользователь уже вступил

  1. if($is_add){
  2. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  3. $this->redirectBack();
  4. }

Evanescence

Нет не получается опять вступает вот щас код весь скину (
  1.  
  2. <?php
  3.  
  4. class actionTournamentJoin extends cmsAction {
  5.  
  6. public function run($tournament_id){
  7.  
  8. if (!$tournament_id) { cmsCore::error404(); }
  9.  
  10. $tournament = $this->model->getTournament($tournament_id);
  11.  
  12. if (!$tournament || $tournament['status'] != tournament::STATUS_PENDING) {
  13. cmsCore::error404();
  14. }
  15.  
  16. $user = cmsUser::getInstance();
  17. $is_user_in_tournament = $user->is_admin ? false : $is_max;
  18.  
  19. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('team', 'user_id', cmsUser::get('id')); - ВОТ ВАШ КОД*************************************************************************************
  20.  
  21. if ($is_user_in_tournament){
  22. cmsCore::error404();
  23. }
  24.  
  25. $errors = false;
  26.  
  27. $form = $this->getForm('join');
  28.  
  29. $is_submitted = $this->request->has('submit');
  30.  
  31. $team = $form->parse($this->request, $is_submitted);
  32.  
  33. $user = cmsUser::getInstance();
  34.  
  35.  
  36. if ($is_submitted){
  37.  
  38. $errors = $form->validate($this, $team);
  39.  
  40. if (!$errors){
  41.  
  42. $team['tournament_id'] = $tournament_id;
  43. $team['user_id'] = $user->id;
  44. $this->model->addTeam($team);
  45.  
  46. $tournament = $this->model->getTournament($tournament_id);
  47.  
  48. if ($tournament['users_count'] >= $tournament['min_users']){
  49.  
  50. $this->model->setTournamentStatus($tournament_id, tournament::STATUS_MODERATION);
  51.  
  52.  
  53. }
  54.  
  55.  
  56. $this->redirectToAction('event', array($tournament_id));
  57. }
  58.  
  59. if ($errors){
  60. cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
  61. }
  62.  
  63. }
  64.  
  65. $template = cmsTemplate::getInstance();
  66.  
  67. $template->render('form_join', array(
  68. 'form' => $form,
  69. 'errors' => $errors,
  70. 'team' => $team,
  71. 'tournament' => $tournament
  72. ));
  73.  
  74. }
  75.  
  76. }

  1.  
  2. <?php
  3.  
  4. $this->setPageTitle($tournament['tournament_name']);
  5.  
  6. $this->addBreadcrumb(LANG_TOURNAMENT_CONTROLLER, $this->href_to(''));
  7.  
  8.  
  9. $this->addBreadcrumb(LANG_TOURNAMENT_TEAMS, $this->href_to('teams'));
  10. $this->addBreadcrumb($tournament['tournament_name']);
  11.  
  12.  
  13. if ($tournament['status'] == tournament::STATUS_PENDING){
  14.  
  15. if (!$is_user_in_tournament || cmsUser::isAdmin()){
  16.  
  17. $this->addToolButton(array(
  18. 'class' => 'user_add',
  19. 'title' => LANG_TOURNAMENT_JOIN,
  20. 'href' => $this->href_to('join', $tournament['id'])
  21. ));
  22.  
  23. }
  24.  
  25. }
  26.  
  27.  
  28. $is_buttons = cmsUser::isAllowed('tournament', 'edit', 'all') ||
  29. ( cmsUser::isAllowed('tournament', 'edit', 'own') && $tournament['user_id']==cmsUser::getInstance()->id );
  30. if ($is_buttons){
  31.  
  32. $this->addToolButton(array(
  33. 'class' => 'edit',
  34. 'title' => LANG_TOURNAMENT_TEAM_EDIT,
  35. 'href' => $this->href_to('edit', $tournament['id'])
  36. ));
  37.  
  38. $this->addToolButton(array(
  39. 'class' => 'delete',
  40. 'title' => LANG_TOURNAMENT_TEAM_DELETE,
  41. 'href' => $this->href_to('delete', $tournament['id'])
  42. ));
  43.  
  44. }
  45.  
  46. $statuses_text = array(
  47. 0 => LANG_PHOTOBATTLE_STATUS_PENDING,
  48. 1 => LANG_PHOTOBATTLE_STATUS_MODERATION,
  49. 2 => LANG_PHOTOBATTLE_STATUS_OPENED,
  50. 3 => LANG_PHOTOBATTLE_STATUS_CLOSED,
  51. );
  52.  
  53. if($is_add){
  54. cmsUser::addSessionMessage('Вы уже в команде', 'error'); ВОТ ВАШ КОД******************************************
  55. $this->redirectBack();
  56. }
  57.  
  58. ?>
  59.  
  60. <h1><?php html($tournament['tournament_name']); ?></h1>
  61.  
  62. <div class="photobattle-status">
  63. <strong><?php echo LANG_PHOTOBATTLE_STATUS; ?>:</strong>
  64. <?php echo $statuses_text[ $tournament['status'] ]; ?>
  65. </div>
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72. <div class="sport__table">
  73. <table class="table">
  74. <tbody>
  75. <tr>
  76. <th class="_group_thead" colspan="4">
  77. <div class="sport__table__head"><?php echo LANG_TOURNAMENT_PLAYERS; ?></div>
  78. </th>
  79. </tr>
  80. <tr>
  81. <th colspan="4"></th>
  82. <th class="_center"><strong><?php echo LANG_TOURNAMENT_PLAYERS_LIST; ?></strong></th>
  83. <th class="_center"><strong><?php echo LANG_TOURNAMENT_PLAYERS_DELETE; ?></strong></th>
  84. </tr>
  85. <?php $i = 1; foreach($tournament['teams'] as $team) { ?>
  86. <tr>
  87. <td class="_num"><?php echo $i;?></td>
  88. <td class="_color _color_0"></td>
  89. <td class="_pic"></td>
  90. <td class="_big">
  91. <a class="user" href="<?php echo href_to('users', $team['user_id']); ?>"><?php echo $team['user_nickname']; ?></a>
  92. </td>
  93.  
  94. <td class="_right"><?php html($team['team_name']); ?></span></td>
  95. <td class="_right"> <?php $is_buttons = cmsUser::isAllowed('tournament', 'edit', 'all') ||
  96. ( cmsUser::isAllowed('tournament', 'edit', 'own') && $team['user_id']==cmsUser::getInstance()->id );
  97. if ($is_buttons){ ?>
  98. <a class="item" title="<?php echo LANG_PHOTOBATTLE_PHOTO_DELETE; ?>" href="<?php echo $this
#6 7 июня 2016 в 00:52
Мой код вы добавили к двум файлам а надо к одному join.php
Вот как должно быть:
  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('team', 'user_id', cmsUser::get('id'));
  2. if($is_add){
  3. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  4. $this->redirectBack();
  5. }
#7 7 июня 2016 в 01:00


Мой код вы добавили к двум файлам а надо к одному join.php
Вот как должно быть:

  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('team', 'user_id', cmsUser::get('id'));
  2. if($is_add){
  3. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  4. $this->redirectBack();
  5. }

Evanescence

Все равно вступает (( 3 команды создал ко всем вступает ((
#8 7 июня 2016 в 01:05


Мой код вы добавили к двум файлам а надо к одному join.php
Вот как должно быть:

  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('team', 'user_id', cmsUser::get('id'));
  2. if($is_add){
  3. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  4. $this->redirectBack();
  5. }

Evanescence

Вот линк на сайт 3x3azerbaijan.com/tournament/teams
#9 7 июня 2016 в 14:39


Мой код вы добавили к двум файлам а надо к одному join.php
Вот как должно быть:

  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('team', 'user_id', cmsUser::get('id'));
  2. if($is_add){
  3. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  4. $this->redirectBack();
  5. }

Evanescence

Ух-ты какая штука. А можно узнать, этот код не даст вступить в другие группы или в ту же самую, делая кнопку не активной?
#10 7 июня 2016 в 14:41



Мой код вы добавили к двум файлам а надо к одному join.php
Вот как должно быть:

  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('team', 'user_id', cmsUser::get('id'));
  2. if($is_add){
  3. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  4. $this->redirectBack();
  5. }

Evanescence

Ух-ты какая штука. А можно узнать, этот код не даст вступить в другие группы или в ту же самую, делая кнопку не активной?

ivanish

Вот у меня не дает вступать эту же самую, но я хочу что бы он не давал вступать и в другие группы, только если он выйдет то тогда может вступить, то есть он должен вступать не имеет значения куда только 1 раз
#11 7 июня 2016 в 15:09

или в ту же самую, делая кнопку не активной?

ivanish
Не дает вступить в команду, ID которую получаем по URL
Если автор поймет код выше, то может использовать и на странице, где есть кнопка Вступить в команду и по условию, вывести или скрыть кнопку.
#12 7 июня 2016 в 15:42


или в ту же самую, делая кнопку не активной?

ivanish
Не дает вступить в команду, ID которую получаем по URL
Если автор поймет код выше, то может использовать и на странице, где есть кнопка Вступить в команду и по условию, вывести или скрыть кнопку.

Evanescence

Я вот делаю как вы сказали но не получается ни как, если не сложно подскажите (((

Вот join.php как вы сказали сделал

  1. <?php
  2.  
  3. class actionTournamentJoin extends cmsAction {
  4.  
  5. public function run($tournament_id){
  6.  
  7. if (!$tournament_id) { cmsCore::error404(); }
  8.  
  9. $tournament = $this->model->getTournament($tournament_id);
  10.  
  11. if (!$tournament || $tournament['status'] != tournament::STATUS_PENDING) {
  12. cmsCore::error404();
  13. }
  14.  
  15. $user = cmsUser::getInstance();
  16. $is_user_in_tournament = $user->is_admin ? false : $is_max;
  17.  
  18. if ($is_user_in_tournament){
  19. cmsCore::error404();
  20. }
  21.  
  22. $errors = false;
  23.  
  24. $form = $this->getForm('join');
  25.  
  26. $is_submitted = $this->request->has('submit');
  27.  
  28. $team = $form->parse($this->request, $is_submitted);
  29.  
  30. $user = cmsUser::getInstance();
  31.  
  32. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('team', 'user_id', cmsUser::get('id'));
  33. if($is_add){
  34. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  35. $this->redirectBack();
  36. } *******************Вот Код который я вставил
  37.  
  38. if ($is_submitted){
  39.  
  40. $errors = $form->validate($this, $team);
  41.  
  42. if (!$errors){
  43.  
  44. $team['tournament_id'] = $tournament_id;
  45. $team['user_id'] = $user->id;
  46. $this->model->addTeam($team);
  47.  
  48. $tournament = $this->model->getTournament($tournament_id);
  49.  
  50. if ($tournament['users_count'] >= $tournament['min_users']){
  51.  
  52. $this->model->setTournamentStatus($tournament_id, tournament::STATUS_MODERATION);
  53.  
  54.  
  55. }
  56.  
  57.  
  58. $this->redirectToAction('event', array($tournament_id));
  59. }
  60.  
  61. if ($errors){
  62. cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
  63. }
  64.  
  65. }
  66.  
  67. $template = cmsTemplate::getInstance();
  68.  
  69. $template->render('form_join', array(
  70. 'form' => $form,
  71. 'errors' => $errors,
  72. 'team' => $team,
  73. 'tournament' => $tournament
  74. ));
  75.  
  76. }
  77.  
  78. }
И вот сама кнопка вступить


  1. <?php
  2.  
  3. $this->setPageTitle($tournament['tournament_name']);
  4.  
  5. $this->addBreadcrumb(LANG_TOURNAMENT_CONTROLLER, $this->href_to(''));
  6.  
  7.  
  8. $this->addBreadcrumb(LANG_TOURNAMENT_TEAMS, $this->href_to('teams'));
  9. $this->addBreadcrumb($tournament['tournament_name']);
  10.  
  11.  
  12. if ($tournament['status'] == tournament::STATUS_PENDING){
  13.  
  14. if (!$is_user_in_tournament || cmsUser::isAdmin()){
  15.  
  16. $this->addToolButton(array(
  17. 'class' => 'user_add',
  18. 'title' => LANG_TOURNAMENT_JOIN,
  19. 'href' => $this->href_to('join', $tournament['id'])
  20. ));
  21.  
  22. }
  23.  
  24. }
  25.  
  26.  
  27. $is_buttons = cmsUser::isAllowed('tournament', 'edit', 'all') ||
  28. ( cmsUser::isAllowed('tournament', 'edit', 'own') && $tournament['user_id']==cmsUser::getInstance()->id );
  29. if ($is_buttons){
  30.  
  31. $this->addToolButton(array(
  32. 'class' => 'edit',
  33. 'title' => LANG_TOURNAMENT_TEAM_EDIT,
  34. 'href' => $this->href_to('edit', $tournament['id'])
  35. ));
  36.  
  37. $this->addToolButton(array(
  38. 'class' => 'delete',
  39. 'title' => LANG_TOURNAMENT_TEAM_DELETE,
  40. 'href' => $this->href_to('delete', $tournament['id'])
  41. ));
  42.  
  43. }
  44.  
  45.  
  46.  
  47. ?>
  48.  
  49. <h1><?php html($tournament['tournament_name']); ?></h1>
  50.  
  51. <div class="photobattle-status">
  52. <strong><?php echo LANG_PHOTOBATTLE_STATUS; ?>:</strong>
  53. <?php echo $statuses_text[ $tournament['status'] ]; ?>
  54. </div>
  55.  
#13 7 июня 2016 в 15:53
Вроде правильно всё, а что именно не работает? пользователь может 2 раза вступить в команду?
Таблица в БД, которые хранить ID пользователей, которые вступили, точно называется team? поле называется user_id?
#14 7 июня 2016 в 16:06


Вроде правильно всё, а что именно не работает? пользователь может 2 раза вступить в команду?
Таблица в БД, которые хранить ID пользователей, которые вступили, точно называется team? поле называется user_id?

Evanescence

Пользователь не может 2 раза вступать в команду А это изначально было, пользователь может вступать в разные команды, то есть в команду А он вступил и в команду Б тоже он может вступить, а мне надо если в команду А он вступил то в Б не должен

id tournament_id user_id team_name
1 6 1 3x3 Azerbaijan
2 7 1 Streetball
3 8 2 tournament_teams
7 9 2 3x3 Azerbaijan

tournament_id — это id команд
#15 7 июня 2016 в 16:17
Вам просто надо сделать проверку на заполненность поля cmsUser::get('tournament_id').
  1. if(cmsUser::get('tournament_id')){
  2. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  3. $this->redirectBack();
  4. }
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.