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

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

 
Посетитель
small user social cms
Сообщений: 18
Решил настроить у себя регистрацию только по приглашениям: выбрал в компоненте "Регистрация" тип регистрации "по инвайтам", выдавать по 5 инвайтов в день всем пользователям (карма >= 0), нажал "Выдать сейчас", включил показ модуля "Пригласить друга" на главной, ввёл в поле нужный e-mail, нажал "Пригласить!" и... получил письмо от друга, что сообщение о приглашении на сайт ему пришло, на ссылку он нажал, а там просят ввести код приглашения, которого в письме нигде нет look

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

Код 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');
вставил проверку, чтобы письмо отправлялось только, если есть свободные приглашения для данного пользователя

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

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

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

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

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

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

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

PP.S. Впоследствии оказалось, что этот модуль и не предназначен для приглашения к регистрации, а работает просто как кнопка "рассказать другу" smile Однако моя модификация мне всё равно удобнее для работы, так что пользуйтесь, кому понадобиться ;)
Прикрепленные файлы:
modinvite1101_k8amc.rar | 6.05 Кб | Скачали: 641
Редактировалось: 1 раз (Последний: 2 января 2013 в 20:49)
Vision without action is merely a dream. Action without vision just passes the time. Vision with action can change the world (с) Joel Barker
Посетитель
small user social cms
Почетный донор проектаМедальПочетный донор проектаПочетный донор проектаКубок зрительских симпатий
Сообщений: 343
:)
Приглашение-инвайт для друга высылается из профиля. Там есть такая ссылка Мои инвайты
Туда кликаете и вводите почту друга.

А модуль, который Вы правили, это просто приглашение "заглянуть на чаёк", а не "прописываться" :)
Редактировалось: 1 раз (Последний: 2 января 2013 в 16:36)
-=-=-=-=-=-=-=-=-
Реклама
cms
Посетитель
small user social cms
Сообщений: 87
Вот что в меню инвайтов нет!
Модуль приглашений
http://linkmaybe.com/ - интернет журнал интернет заработка
Посетитель
small user social cms
Сообщений: 87
Все разобрался!)))
http://linkmaybe.com/ - интернет журнал интернет заработка
Посетитель
small user social cms
Сообщений: 18
Amurland, благодарю за ответ, теперь понятно smile Честно говоря, я бы и не подумал, что это именно приглашение "на чаёк" smile Однако мне удобнее иметь ещё и такой способ рассылать приглашения для регистрации, так что пусть будет, может, кому ещё пригодиться joke Полагаю, вряд ли кто-то сообразит без посторонней подсказки, что приглашать друзей можно через "Мои инвайты" в профиле (ох уж эта любовь к заимствованным словам), пойду поменяю на "Пригласить друга" joke
Vision without action is merely a dream. Action without vision just passes the time. Vision with action can change the world (с) Joel Barker
Посетитель
no avatar
Медаль
Сообщений: 649
Извините, а это для какой версии? В 1.9 такого нет по ходу.
Ваш надеждый хостинг для сайтов на InstantCMS: http://instanthosting.ru
Посетитель
small user social cms
Сообщений: 46
Dorimen, есть
Качественные статьи | Выдача займов вебмани в автоматическом режиме
Посетитель
small user social cms
Сообщений: 18
Dorimen, написано же - "версия InsctantCMS - 1.10.1" joke Хотя я уверен, что адаптация под 1.9 будет примерно такая же ;)
Vision without action is merely a dream. Action without vision just passes the time. Vision with action can change the world (с) Joel Barker
Посетитель
small user social cms
Кубок зрительских симпатий
Сообщений: 96
Не плохо было бы, например еще привязать (реф. ссылку билинга) к данному модулю?
Если есть решение подскажите???
Редактировалось: 1 раз (Последний: 31 мая 2013 в 13:41)
Век живи - век учись!
Посетитель
small user social cms
Сообщений: 11
Кстати, как установить реф. ссылку из биллинга в модуль пригласи друга? Какой код нужен?
Посетитель
small user social cms
Сообщений: 41
Подскажите пожалуйста, где я совершил ошибку, при запросе отправка после того как нажал пригласить появляется белый экран, вот код:
Код PHP:
  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. ?>
Спасибо за помощь.
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.