Модуль приглашений

странная логика работы и предложения по доработке модуля

#1 2 января 2013 в 13:22
Решил настроить у себя регистрацию только по приглашениям: выбрал в компоненте "Регистрация" тип регистрации "по инвайтам", выдавать по 5 инвайтов в день всем пользователям (карма >= 0), нажал "Выдать сейчас", включил показ модуля "Пригласить друга" на главной, ввёл в поле нужный e-mail, нажал "Пригласить!" и… получил письмо от друга, что сообщение о приглашении на сайт ему пришло, на ссылку он нажал, а там просят ввести код приглашения, которого в письме нигде нет look

Полез разбираться, и ещё больше удивился: этот код действительно не присылается в шаблоне письма. Возможно, я не понял логики разработчиков, но я так и не нашёл, как заставить всё это работать. Пришлось садиться и дописывать самому😊Изменений я внёс не много, только добавил в модуль ("\modules\mod_invite\module.php") запрос к БД с получением доступного кода регистрации для данного пользователя

  1. $user = $inUser->id;
  2. $code = $inDB->get_field('rb_user_invites', "`is_used` = '0' and `is_sended` = '0' and `owner_id`='$user'", 'code');
вставил проверку, чтобы письмо отправлялось только, если есть свободные приглашения для данного пользователя

  1.  
  2. if (!$code){
  3. $errors .= $_LANG['ERR_NO_IVITE'].'
  4. ';
  5. }
добавил вставку кода в шаблон письма

  1. $letter = str_replace('{code}', $code, $letter);
и установку маркера отправленного приглашения

  1. $inDB->query("UPDATE `cms_user_invites` SET `is_sended` = '1' WHERE `code` = '$code';");
а также условие, чтобы модуль был виден только для залогининых пользователей (смысл в том, чтобы приглашения могли рассылать существующие пользователи, а не кто попало)

  1. if (!$inUser->id){
  2. return false;
  3. }
Естественно, нужно было ещё добавить соответствующие изменения в шаблон письма ("\includes\letters\mail_invite.txt")

  1. Код приглашения: {code}
и языковой файл ("\languages\ru\modules\mod_invite.php")

  1. $_LANG['ERR_NO_IVITE'] = 'Нет свободных приглашений!';
Думаю, есть смысл внести эти изменения в релиз, потому как без них этот модуль просто бесполезен :)

P.S. Для ленивых добавил ниже архив со всеми изменёнными файлами, можете просто закачать их на сайт, заменив старые (версия InsctantCMS — 1.10.1). Успехов! ;)

PP.S. Впоследствии оказалось, что этот модуль и не предназначен для приглашения к регистрации, а работает просто как кнопка "рассказать другу"😊Однако моя модификация мне всё равно удобнее для работы, так что пользуйтесь, кому понадобиться ;)
Прикрепленный файл
modinvite1101_k8amc.rar 7 Кб
#2 2 января 2013 в 16:36
:)
Приглашение-инвайт для друга высылается из профиля. Там есть такая ссылка Мои инвайты
Туда кликаете и вводите почту друга.

А модуль, который Вы правили, это просто приглашение "заглянуть на чаёк", а не "прописываться" :)
#3 2 января 2013 в 19:44
Вот что в меню инвайтов нет!
#4 2 января 2013 в 20:19
Все разобрался!)))
#5 2 января 2013 в 20:47
Amurland, благодарю за ответ, теперь понятно smileЧестно говоря, я бы и не подумал, что это именно приглашение "на чаёк"😊Однако мне удобнее иметь ещё и такой способ рассылать приглашения для регистрации, так что пусть будет, может, кому ещё пригодиться😉Полагаю, вряд ли кто-то сообразит без посторонней подсказки, что приглашать друзей можно через "Мои инвайты" в профиле (ох уж эта любовь к заимствованным словам), пойду поменяю на "Пригласить друга" joke
#6 4 января 2013 в 12:49
Извините, а это для какой версии? В 1.9 такого нет по ходу.
#7 4 января 2013 в 13:11
Dorimen, есть
#8 4 января 2013 в 14:46
Dorimen, написано же — "версия InsctantCMS — 1.10.1" jokeХотя я уверен, что адаптация под 1.9 будет примерно такая же ;)
#9 31 мая 2013 в 13:40
Не плохо было бы, например еще привязать (реф. ссылку билинга) к данному модулю?
Если есть решение подскажите???
#10 27 июня 2014 в 09:21
Кстати, как установить реф. ссылку из биллинга в модуль пригласи друга? Какой код нужен?
#11 12 мая 2015 в 04:11
Подскажите пожалуйста, где я совершил ошибку, при запросе отправка после того как нажал пригласить появляется белый экран, вот код:
  1. <?php
  2. /******************************************************************************/
  3. // //
  4. // InstantCMS v1.10.3 //
  5. // http://instantcms.ru/ //
  6. // //
  7. // written by InstantCMS Team, 2007-2013 //
  8. // produced by InstantSoft, (www.instantsoft.ru) //
  9. // //
  10. // LICENSED BY GNU/GPL v2 //
  11. // //
  12. /******************************************************************************/
  13.  
  14. function mod_invite($module_id, $cfg){
  15.  
  16. $inUser = cmsUser::getInstance();
  17.  
  18. global $_LANG;
  19.  
  20. $errors = false;
  21. $is_redirect = false; // в модуле нельзя использовать cmsCore::redirectBack(), используем костыли ;)
  22.  
  23. if (!$inUser->id){
  24. return false;
  25. }
  26.  
  27.  
  28. if (cmsCore::inRequest('send_invite_email')){
  29.  
  30. $is_redirect = true;
  31. $user = $inUser->id;
  32. $username = cmsCore::request('username', 'str', '');
  33. $email = cmsCore::request('friend_email', 'email', '');
  34. $code = $inDB->get_field('rb_user_invites', "`is_used` = '0' and `is_sended` = '0' and `owner_id`='$user'", 'code');
  35.  
  36. if (!$username && !$inUser->id){
  37. cmsCore::addSessionMessage($_LANG['ERR_NEED_NAME'], 'error'); $errors = true;
  38. }
  39. if ($inUser->id) { $username = $inUser->nickname; }
  40.  
  41. if (!$email){
  42. cmsCore::addSessionMessage($_LANG['ERR_NEED_MAIL'], 'error'); $errors = true;
  43. }
  44. if (!$code){
  45. $errors .= $_LANG['ERR_NO_IVITE'].'<br/>';
  46. }
  47.  
  48. if(!$errors){
  49.  
  50. if(!cmsUser::checkCsrfToken()){
  51. cmsCore::error404();
  52. }
  53.  
  54. $letter = cmsCore::getLanguageTextFile('mail_invite');
  55. $inDB->query("UPDATE `cms_user_invites` SET `is_sended` = '1' WHERE `code` = '$code';");
  56. $letter = str_replace('{sitename}', cmsConfig::getConfig('sitename'), $letter);
  57. $letter = str_replace('{site_url}', HOST, $letter);
  58. $letter = str_replace('{username}', $username, $letter);
  59. $letter = str_replace('{code}', $code, $letter);
  60. cmsCore::mailText($email, sprintf($_LANG['INVITE_SUBJECT'], $username), $letter);
  61.  
  62. cmsCore::addSessionMessage($_LANG['INVITE_SENDED'], 'success');
  63.  
  64. }
  65.  
  66. }
  67.  
  68. cmsPage::initTemplate('modules', 'mod_invite')->
  69. assign('user_id', $inUser->id)->
  70. assign('is_redirect', $is_redirect)->
  71. display('mod_invite.tpl');
  72.  
  73. return true;
  74.  
  75. }
  76.  
  77. ?>
Спасибо за помощь.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.