Ограничить Доступ к покупке Подписки

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X
#1 28 марта 2023 в 18:05

Доброго времени суток, Друзья!

Имеется настроенная Подписка для покупки, но как саму Подписку возможно ограничить Доступом только для определённой Группы пользователей? Чтобы её оформление-покупка могла быть доступна не всем.

Сломал голову совсем и остался без разрешения вопроса, прошу помощи!

Всем только Добра!

#2 28 марта 2023 в 18:54

Как вариант обернуть саму кнопку в условие. Тогда её будут видеть только те, кому можно.

#3 28 марта 2023 в 19:04

 Gudvin, примерно так (на примере группы Администраторы)

  1. <?php if ($this->cms_user->isInGroup(6)) { ?>
  2. <?php echo 'код_кнопки_подписки'; ?>
  3. <?php } else { ?>
  4. <?php echo 'Вашей группе пользователей покупка подписки невозможна'; ?>
  5. <?php } ?>

Lora вам подсказал уже выше, приведенный мной код конечно же не совершенен, но общая логика и принцип работы, думаю, понятен.

#4 29 марта 2023 в 18:21

Да, отличное решение и простое в плане изменения кода для тех, кто имеет для этого достаточные познания в PHP, но не для моих ))). Недостаточно ещё опытен для подобных действий.

Прошу Вашей помощи, Друзья, в правильном изменении, сам просто не справлюсь! )

Ниже привожу код самой кнопки. Надеюсь на Вашу компетентность и помощь! Благодарю!...

  1. <div class="balance-actions mt-4">
  2. <?php if ($this->controller->options['in_mode'] == 'enabled' || $is_admin) { ?>
  3. <a class="btn btn-success deposit<?php if($is_admin) { ?> ajax-modal<?php } ?>" href="<?php echo $deposit_url ?>" title="<?php echo $dep_link_title; ?>">
  4. <svg class="icms-svg-icon w-16" >
  5. <use xlink:href="/templates/modern/images/icons/solid.svg#coins"></use>
  6. </svg>
  7. <?php echo $dep_link_text; ?>
  8. </a>
  9. <?php } ?>
  10. <?php if ($this->controller->options['is_plans'] && $is_own_profile) { ?>
  11. <a class="btn btn-outline-success" href="<?php echo $plan_url ?>">
  12. <svg class="icms-svg-icon w-16" >
  13. <use xlink:href="/templates/modern/images/icons/solid.svg#clock"></use>
  14. </svg>
  15. <?php echo $plan_link_title; ?>
  16. </a>
  17. <?php } ?>
  18. <?php if ($is_exchange && $user->id == $profile['id']) { ?>
  19. <a class="btn btn-outline-primary exchange" href="<?php echo $this->href_to('exchange') ?>">
  20. <svg class="icms-svg-icon w-16" >
  21. <use xlink:href="/templates/modern/images/icons/solid.svg#exchange-alt"></use>
  22. </svg>
  23. <?php echo LANG_BILLING_EXCHANGE; ?>
  24. </a>
  25. <?php } ?>
  26. <?php if ($this->controller->options['is_refs'] && ($is_own_profile || $is_admin)) { ?>
  27. <a class="btn btn-outline-primary refs" href="<?php echo $this->href_to('refs', $is_own_profile ? '' : $profile['id']) ?>">
  28. <svg class="icms-svg-icon w-16" >
  29. <use xlink:href="/templates/modern/images/icons/solid.svg#link"></use>
  30. </svg>
  31. <?php echo LANG_BILLING_REFERALS; ?>
  32. </a>
  33. <?php } ?>
  34. <?php if ($is_out) { ?>
  35. <a class="btn btn-outline-primary out" href="<?php echo $this->href_to('out') ?>">
  36. <svg class="icms-svg-icon w-16" >
  37. <use xlink:href="/templates/modern/images/icons/solid.svg#sign-out-alt"></use>
  38. </svg>
  39. <?php echo LANG_BILLING_OUT; ?>
  40. </a>
  41. <?php } ?>
  42. </div>

Может быть вообще скрывать кнопку от пользователей не соответствующих условиям?

Ниже более полный код на вывод блока инфы по балансу пользователя

  1. <div class="balance-info balance card">
  2. <div class="card-body">
  3. <h4 class="card-title">
  4. <?php echo LANG_BILLING_BALANCE_INFO; ?>
  5. <span class="<?php echo $profile['balance'] ? 'text-success' : 'text-muted'; ?>"><?php echo html_spellcount($profile['balance'], $b_spellcount); ?></span>
  6. </h4>
  7.  
  8. --- КНОПКА ---
  9. <div class="balance-actions mt-4">
  10. <?php if ($this->controller->options['in_mode'] == 'enabled' || $is_admin) { ?>
  11. <a class="btn btn-success deposit<?php if($is_admin) { ?> ajax-modal<?php } ?>" href="<?php echo $deposit_url ?>" title="<?php echo $dep_link_title; ?>">
  12. <svg class="icms-svg-icon w-16" >
  13. <use xlink:href="/templates/modern/images/icons/solid.svg#coins"></use>
  14. </svg>
  15. <?php echo $dep_link_text; ?>
  16. </a>
  17. <?php } ?>
  18. <?php if ($this->controller->options['is_plans'] && $is_own_profile) { ?>
  19. <a class="btn btn-outline-success" href="<?php echo $plan_url ?>">
  20. <svg class="icms-svg-icon w-16" >
  21. <use xlink:href="/templates/modern/images/icons/solid.svg#clock"></use>
  22. </svg>
  23. <?php echo $plan_link_title; ?>
  24. </a>
  25. <?php } ?>
  26. <?php if ($is_exchange && $user->id == $profile['id']) { ?>
  27. <a class="btn btn-outline-primary exchange" href="<?php echo $this->href_to('exchange') ?>">
  28. <svg class="icms-svg-icon w-16" >
  29. <use xlink:href="/templates/modern/images/icons/solid.svg#exchange-alt"></use>
  30. </svg>
  31. <?php echo LANG_BILLING_EXCHANGE; ?>
  32. </a>
  33. <?php } ?>
  34. <?php if ($this->controller->options['is_refs'] && ($is_own_profile || $is_admin)) { ?>
  35. <a class="btn btn-outline-primary refs" href="<?php echo $this->href_to('refs', $is_own_profile ? '' : $profile['id']) ?>">
  36. <svg class="icms-svg-icon w-16" >
  37. <use xlink:href="/templates/modern/images/icons/solid.svg#link"></use>
  38. </svg>
  39. <?php echo LANG_BILLING_REFERALS; ?>
  40. </a>
  41. <?php } ?>
  42. <?php if ($is_out) { ?>
  43. <a class="btn btn-outline-primary out" href="<?php echo $this->href_to('out') ?>">
  44. <svg class="icms-svg-icon w-16" >
  45. <use xlink:href="/templates/modern/images/icons/solid.svg#sign-out-alt"></use>
  46. </svg>
  47. <?php echo LANG_BILLING_OUT; ?>
  48. </a>
  49. <?php } ?>
  50. </div>
  51. </div>
  52. </div>
Добавлено спустя 5 часов

 Gudvin, примерно так (на примере группы Администраторы)

  1. <?php if ($this->cms_user->isInGroup(6)) { ?>
  2. <?php echo 'код_кнопки_подписки'; ?>
  3. <?php } else { ?>
  4. <?php echo 'Вашей группе пользователей покупка подписки невозможна'; ?>
  5. <?php } ?>

Lora вам подсказал уже выше, приведенный мной код конечно же не совершенен, но общая логика и принцип работы, думаю, понятен.

Make

Дружище, а как и куда это сделать? Не силён в php от слова совсем! Благодарю! 🤝

#5 29 марта 2023 в 20:43

 Gudvin, с телефона мне сложно сказать что-то. Буду у ПК подскажу, если этого не сделают раньше

#6 29 марта 2023 в 20:45

Ну, если вы точно уверенны, что это кнопка, значит прямо после — КНОПКА --- и пишите условие. Перед <div class=«balance-actions mt-4»> 

это <?php if ($this->cms_user->isInGroup(6)) { ?> 6 — это номер группы администратора. Код говорит, что, если пользователь состоит в группе Администраторы значит далее ход открыт. Если вам надо дать доступ нескольким группам, то используйте это<?php if ($this->cms_user->isInGroups(array(1,2,3,...))) { ?>

Затем после того как ваш  <div class=«balance-actions mt-4»> закроется пишите это

<?php } else { ?>
    <?php echo 'Вашей группе пользователей покупка подписки невозможна'; ?>
<?php } ?>

#7 30 марта 2023 в 12:03

Друзья, Благодарю за подсказки, но, пока никаких результатов, к сожалению. Покопался и нашёл часть кода с Кнопкой на саму покупку Подписки, а перед этим я думал внести изменения на кнопку в главной странице баланса пользователя по работе с пополнением баланса. Думается, что изменения лучше было бы внести в другую кнопку самого оформления-покупки Подписки. Сделал так:

  1. <?php if ($this->cms_user->isInGroup(6)) { ?>
  2. <div class="buttons mt-4">
  3. <input type="submit" class="btn btn-primary button-submit" name="submit" value="<?php echo LANG_BILLING_BUY; ?>">
  4. <a class="back-btn btn btn-link" href="<?php echo href_to('users', $user->id, 'balance'); ?>"><?php echo LANG_CANCEL; ?></a>
  5. </div>
  6. <?php } else { ?>
  7. <?php echo 'Вашей группе пользователей покупка подписки невозможна'; ?>
  8. <?php } ?>

и выдало следующее:

Notice: Undefined property: cmsTemplate::$cms_user in /var/www/s230519/data/www/xxx/templates/modern/controllers/billing/plan.tpl.php on line 115

Fatal error: Uncaught Error: Call to a member function isInGroup() on null in /var/www/s230519/data/www/xxx/templates/modern/controllers/billing/plan.tpl.php:115 Stack trace: #0 /var/www/s230519/data/www/xxx/system/core/template.php(2304): include() #1 /var/www/s230519/data/www/xxx/system/core/template.php(2259): cmsTemplate->processRender('/var/www/s23051...', Array, Object(cmsRequest), true) #2 /var/www/s230519/data/www/xxx/system/controllers/billing/actions/plan.php(0): cmsTemplate->render('/var/www/s23051...', Array) #3 /var/xxx/s230519/data/www/xxx/system/core/controller.php(665): actionBillingPlan->run() #4 /var/www/s230519/data/www/xxx/system/core/controller.php(536): cmsController->runExternalAction('plan', Array) #5 /var/www/s230519/data/www/xxx/system/core/controller.php(512): cmsController->executeAction('plan', Array) #6 /var/www/s230519/data/www/xxx/system/core/core.php(763): cmsController->runAction('plan' in /var/www/s230519/data/www/xxx/templates/modern/controllers/billing/plan.tpl.php on line 115

Может быть её скрыть и ничего не выводить на её месте, если пользователь не соответствует заданным условиям?

Друзья, что не так делаю?

#8 30 марта 2023 в 12:10

 Gudvin, в любо место вашего кода добавьте это

  1. <?php $cms_user = cmsUser::getInstance(); ?>
#9 30 марта 2023 в 12:57

 Gudvin, в любо место вашего кода добавьте это

  1. <?php $cms_user = cmsUser::getInstance(); ?>
Make

Тот же вывод ошибки.

Добавлено спустя 28 минут

Пробовал так, но тот же результат ошибки

  1. <div class="buttons mt-4">
  2. <?php if ($this->cms_user->isInGroup(6)) { ?>
  3. <input type="submit" class="btn btn-primary button-submit" name="submit" value="<?php echo LANG_BILLING_BUY; ?>">
  4. <a class="back-btn btn btn-link" href="<?php echo href_to('users', $user->id, 'balance'); ?>"><?php echo LANG_CANCEL; ?></a>
  5. <?php } else { ?>
  6. <input type="submit" class="btn btn-primary button-submit" name="submit" value="<?php echo 'Вашей группе пользователей покупка подписки невозможна'; ?>">
  7. <a class="back-btn btn btn-link" href="<?php echo href_to('users', $user->id, 'balance'); ?>"><?php echo LANG_CANCEL; ?></a>
  8. <?php } ?>
  9. </div>
#10 30 марта 2023 в 14:01

Во первых данный код <?php $cms_user = cmsUser::getInstance(); ?> должен быть выше вашего условия для кнопки.

Во вторых. Если прописали этот код, то замените <?php if ($this->cms_user->isInGroup(6)) { ?> на <?php if ($cms_user->isInGroup(6)) { ?>

#11 1 апреля 2023 в 22:46

Друзья! Победа! Ура-ура-ура Вам! Всё заработало и результат полностью соответствует ожиданиям!

Благодарю!!!

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.