Закрыть
Загрузка данных
Логин:   Пароль:      
Регистрация   Забыли пароль?

Поиск по Bigstreet:



Важные объявления:

Инвайты на bigstreet можно попросить здесь Регистрация по инвайтам это нормальная практика, чтобы отсеять лишних людей, спаммеров и автоматические программы регистрации. Все патчи будут находится только в закрытых сообществах!

Новое в лучших проектах:

И в деле, и на отдыхе сайт Домоседы.Ру - Ваш тайный советник

Все про бульдогов и их хозяев. Блог платформы - bigstreet.

СПОНСИРОВАНИЕ

15 горячих:

Закрыть
Загрузить:
Указать:
Выравнивание:    Копирайт:
Альт
Цвет шрифта Закрыть
Белый Розовый Серебряный Оливковый Красно-коричневый Лимонный Зеленый Темно-синий Желтый Красный Серый Фиолетовый Водный Зеленовато-голубой Голубой
Выделить маркером Закрыть
Розовый Серебряный Оливковый Красно-коричневый Лимонный Зеленый Темно-синий Желтый Красный Серый Фиолетовый Водный Зеленовато-голубой Голубой Черный
Смайлики ;) Закрыть
Улыбка Нахмуриться Подмигивание Язык Смех Смущение Нерешительность Сюрприз Поцелуй Вопль Класс Денежки Ошибся Невинность Плач Рот на замке

Все об инвайтах

Итак, дошел до работы с инвайтами и в данный момент занят их реализацией.

Итак. Сразу после включения я решил сделать инвайт, зашел в базу и увидел там следующие поля:

invite_id — ясно
invite_owner — вроде как владелец инвайта… ок
invite_grantee — вот это не ясно и я не нашел где используется
invite_added — время выдачи инвайта
invite_used — использован ли инвайт?
invite_code — Ну и собственно сам код инвайта

Этого вполне хватает для генерации инвайта.

Далее возникла сложность в том, что регистрация вообще не завершается. Вводишь инвайт, все заполняешь, но в результате снова получаешь форму, без какого либо результата. Пользователь так и не регистрируется. То есть даже не попадает в таблицу ожидания активации.

Ошибка кроется здесь похоже (modules\registration\index.action.php (111)):
  1.  
  2. if (isset($_SESSION['is_grantee'])) {
  3.         $oUser->setId($_SESSION['is_grantee']);
  4.         $oUser->setActivateKey(md5($_POST['reg_login'].date('Y-m-d H:i:s').$_SESSION['is_grantee']));
  5. }
  6.  


$_SESSION['is_grantee'] содержит ID приглашения, но здесь происходит попытка задать ID пользователя равным ID приглашения… если я правильно понял. Более правильным будет задать номер приглашения по которыму пришел пользователь. Для этого меняем код на:

  1.  
  2. if (isset($_SESSION['is_grantee'])) {
  3.         $oUser->setInviteId($_SESSION['is_grantee']);
  4.         $oUser->setActivateKey(md5($_POST['reg_login'].date('Y-m-d H:i:s').$_SESSION['is_grantee']));
  5. }
  6.  


После этой замены пользователь таки проходит регистрацию и попадает в таблицу temp. То есть требуется активация. И письмо уходит. Но! Форма регистрации по прежнему показывается пользователю. Никаких сообщений нет. В коде по идее есть условие, что если письмо отправилось, то происходит переход на страницу /registration/completed/, но похоже оно не выполняется…

UPD: Это происходит из-за небольшой ошибки в файле completed.action.php. Там происходит проверка:

  1.  
  2. if (isset($_SESSION['grantee_registered'])) {
  3.         unset($_SESSION['grantee_registered']);
  4. } else {
  5.         header('Location: '.System_Router::getPathWeb().'/registration/');
  6. }
  7.  


А нужно:

  1.  
  2. if (isset($_SESSION['registered'])) {
  3.         unset($_SESSION['registered']);
  4. } else {
  5.         header('Location: '.System_Router::getPathWeb().'/registration/');
  6. }
  7.  


И все станет работать!

Второй косяк — приглашение так и остается активным. То есть по нему может зарегистрироваться еще туча посетителей.

Для исправления я поменял код:
  1.  
  2. if (isset($oUser)) {
  3.         $oSmarty->assign('registration_form_data', $aUser);
  4. }
  5.  


На следующий:

  1.  
  2. if (isset($oUser) and !$_SESSION['registered']) {
  3.         $oSmarty->assign('registration_form_data', $aUser);
  4. } elseif($_SESSION['registered']) {
  5.         require_once('system/mappers/invites.mysql.mapper.php');
  6.         $oInvitesMapper = new Invites_MySQLMapper(System_Database::getInstance());
  7.         if ($oInvite = $oInvitesMapper->findById($_SESSION['is_grantee'])) {
  8.                 $oInvite->setUsed(date('Y-m-d H:i:s'));
  9.                 $oInvitesMapper->update($oInvite);
  10.         }
  11. }
  12.  


Так приглашения погашаются.

UPD: Еще один момент, у меня тут ошибки стали появляться при активации. Нужно исправить в файле activation.action.php (46):

  1. $oInvitesMapper->save($oInvite);


на

  1. $oInvitesMapper->update($oInvite);
Метки: баг, инвайт
Carw 30 сентября 2008 11:34 комментариев: 50
:) 7 :(
просмотров: 1287

Комментарии:
Есть предложения?
Carw Carw   30 сентября 2008 11:50
:) 2 :( #
Ну собственно письма отлично работают на сервере после переноса. А вот косяк с отсутствием пересылки на страницу с сообщением о необходимости активации остается. Погашение инвайта также отсутствует.

Неужели больше никто не возился с этим?
Carw Carw   30 сентября 2008 14:40
:) 2 :( #
очень хорошо что наконец обратили внимание на эту тему, спасибо!
_SP_ _SP_   30 сентября 2008 15:25
:) 1 :( #
Жаль, что это никто не решил еще, видимо я первый буду, так как очень надо :)
Carw Carw   30 сентября 2008 15:34
:) 0 :( #
Вот в этом посте http://bigstreet.ru/blog/topic/221/ я выкладывал версию движка, которую дорабатывал программер по моему заказу. Он что-то кажется смог сделать с приглашениями… попробуйте посмотреть его версии файлов, быть может это как-то поможет…
_SP_ _SP_   30 сентября 2008 15:42
:) 2 :( #
invite_grantee - это айдишник будущего пользователя, который по инвайту зарегистрируется. Может понадобиться для построения всяких социальных козней. Например приглашеный тобой пользователь начал вандальничать и ушел в глубокий минус. Ты же получишь отдачу в качестве частичного урезания кармы.
redhummer redhummer   1 октября 2008 06:14
:) 1 :( #
В целом я так и понял, но потом выяснил, что у пользователя есть поле invite_id, которое по сути делает тоже самое. Что же касается резервирования ID пользователя, то мне кажется это может привести к конфликту. Запись в invite_id более логична и ты даже частично сделал передачу туда параметра. Я ее завершил ;-)
Carw Carw   1 октября 2008 09:40
:) 1 :( #
Единственное, что еще надо сделать генерацию инвайтов. У меня уже появилась мысль как это сделать.
Carw Carw   1 октября 2008 09:35
:) 1 :( #
а у меня просьба, по завершению порадовать общественность доработанным модулем, за что заранее низкий поклон!
_SP_ _SP_   1 октября 2008 14:32
:) 1 :( #
было бы здорово задать в конфиге порог рейтинга поста пользователя, по достижении которого, пользователю начисляется инвайт, т.е. если пользователь написал хороший пост, который получил определенное количество голосов, то этот пользователь получает возможность пригласить друга… мне кажется так…
_SP_ _SP_   1 октября 2008 14:34
:) 0 :( #
Я пока думаю сделать это в привязке к рейтингу. Условно говоря сколько рейтинг (целая часть), столько и инвайтов. Можно некий множитель добавить еще например.
Carw Carw   1 октября 2008 15:20
:) 1 :( #
а если привязать инвайты к рейтингу поста, тогда стимул писать хорошо сохраняется для всех пользователей, и для новых и для старожилов с жирным рейтингом)) у всех честные и равные условия…
_SP_ _SP_   1 октября 2008 15:28
:) 1 :( #
Ну для меня это пока не актуально. Я вообще планирую систему рейтинга менять в будущем. А пока нужно, что бы инвайты просто генерировались, иначе расширения сети не получится.
Carw Carw   1 октября 2008 16:04
:) 1 :( #
понятно, ну да, как вариант.
еще вот такую ситуацию можно обыграть: человек прокачал рейтинг, заработал инвайтов, использовал их сам, прокачал им рейтинг, у него теперь целая армия по прокачке рейтинга))
а тут не проявил себя — не получил ни...))
в общем не поймите меня неправильно…
_SP_ _SP_   1 октября 2008 16:13
:) 1 :( #
Вот именно поэтому я не сторонник кармы как таковой. Я здесь описывал уже как я вижу более интересный механизм, который я и планирую реализовать в дальнейшем. Но до этого еще дожить надо :))
Carw Carw   1 октября 2008 16:16
:) 1 :( #
а можно ссылку, с удовольствием почитаю…
_SP_ _SP_   1 октября 2008 16:20
:) 1 :( #
Вот здесь я писал.
Carw Carw   1 октября 2008 16:21
:) 2 :( #
да, очень интересно и правильно при наличии групп, но вот к примеру мне группы в полной мере не нужны… т.е. в сообществе нет разделения на «программеров», «дизайнеров», «магов и волшебников»… управление же сообществом происходит по принципу выборов в администрацию, путем голосования всех участников сообщества за любого из, опять же, участников сообщества… выбор администрации происходит на определенный срок, а выбранный участник наделяется расширенными правами (удаление постов, комментариев и пр.) — быть может в этом случае группы окажутся полезными, в том плане, что «администрация» — это одна группа, «помощники администрации» — другая, а «участники» — третья…
_SP_ _SP_   1 октября 2008 16:47
:) 3 :( #
понимаешь в чем дело(если голоса равны по силе) что адм. всегда будет одной и той же типа я знаю тебя и мне на все пох — я голосую за тебя и я не знаю %username% и голосую против (хотя может у него просто золтые посты)
Robot Robot   1 октября 2008 16:57
:) 1 :( #
да, тоже верно… быть может нельзя выбираться на повторный срок? или же если тебе не понравилась форма правления, будешь голосовать за другого… в общем тут нужно еще подумать…
_SP_ _SP_   1 октября 2008 17:00
:) 0 :( #
вот другое дело — если голосование привязать к рейтингу ;)
Robot Robot   1 октября 2008 16:59
:) 1 :( #
а это как будет выглядеть?
_SP_ _SP_   1 октября 2008 17:03
:) 1 :( #
голосуют все (кто хочет) но если у тебя рейтинг больше — то и голос твой больше (типа несколько голосов)
Robot Robot   1 октября 2008 17:07
:) 0 :( #
а как это сможет повлиять на выбор одних и тех же каждый раз?
_SP_ _SP_   1 октября 2008 17:09
:) 0 :( #
Carw, а как можно с тобой связаться? Тут что то отправка личных сообщений не работает…
_SP_ _SP_   2 октября 2008 21:08
:) 0 :( #
Кстати, как выяснилось погашение приглашений таки происходит… Но оно вынесено в место активации.

Правда там есть ошибка в том, что вызывается метод save, а не update. Я в сообщение добавил что и как исправлять. На фоне этого дела получается, что ошибка-то всего в одном месте — в файле completed.action.php. Я уже не буду это проверять, но рекомендую попробовать.
Carw Carw   10 октября 2008 12:19
:) 0 :( #
Лучше save в маппере переписать по образцу, например, топиков, чтобы вилка была (установлен id или нет) на запись нового или апдейт существующего.
redhummer redhummer   10 октября 2008 12:53
:) 0 :( #
Точно! Так будет значительно лучше. Но я пока более критичными вещами займусь, потом может вернусь еще к этому вопросу :)
Carw Carw   10 октября 2008 16:14
:) 0 :( #
Не так и сложно оказалось сделать генерацию инвайтов :))
Выложу наверно скоро, выужу только все файлы. :)
Carw Carw   13 октября 2008 15:34
:) 2 :( #
Или давайте так. Меняю решение с инвайтами на решение с отправкой сообщений по почте при появлении новых комментариев! :-)
Carw Carw   13 октября 2008 16:11
:) 1 :( #
Видимо не надо никому. Тогда ладно :-))
Carw Carw   14 октября 2008 09:09
:) 1 :( #
мне нада! я ежедневно эту тему посещаю! ))))
_SP_ _SP_   14 октября 2008 11:24
:) 1 :( #
Расскажи про инвайты в твоём исполнении? Как оно всё работает? Особенно в области генерации и выдачи.
redhummer redhummer   14 октября 2008 11:49
:) 2 :( #
Даже точнее - генерации. По какому событию пользователь получает инвайт для последующей раздачи.
Я вот в этой части что-то никак не могу придумать справедливый механизм.
redhummer redhummer   14 октября 2008 11:55
:) 0 :( #
Я долго думал как сделать лучше и потом пришел к выводу, что нет лучшего варианта чем action в модуле profile. Я сделал экшен, который принимает почтовый адрес с клиента, генерит приглашение и отправляет по почте номер. При генерации номер проверяется на совпадение.

Количество доступных приглашений равно карма — количество сгенеренных приглашений.

Админ может посылать любое число приглашений.

Вот так если коротко.
Carw Carw   14 октября 2008 12:07
:) 1 :( #
Ну и пользователь просто видит в меню пункт «Приглашения» и когда туда переходит, то форму с объяснением или надпись, что свободных приглашений у него нет. :)
Carw Carw   14 октября 2008 12:09
:) 1 :( #
И да. Если на сорсфордже есть аккаунт, то скажи - сделаю ветку "carwed" и дам доступ ))
redhummer redhummer   14 октября 2008 11:57
:) 0 :( #
Вот чего нет, того нет. Но у меня уже в голове засел вопрос — как отдать файлы-то? :))
Carw Carw   14 октября 2008 12:01
:) 0 :( #
Ну когда же уже же уже? ,)
_SP_ _SP_   15 октября 2008 21:25
:) 1 :( #
может приоритеты сменились?)))))
Robot Robot   15 октября 2008 21:55
:) 0 :( #
Немного ниже ;-)
Carw Carw   16 октября 2008 10:37
:) 1 :( #
Выложил вот сюда. Но наверно уже смысла мало. Скоро Редхаммер предложит свое решение :-)
Carw Carw   16 октября 2008 10:36
:) 1 :( #
смысл есть, потому как я не совсем понимаю, что делать с группами, для моего сайда они ненужны… а их можно как-то отключить? ))
_SP_ _SP_   16 октября 2008 11:03
:) 1 :( #
Вот те на! =)
Отключить? Да, можно - удалив из меню и убив модуль community вместе со всеми маперами и сущностями, имена которых начинаются на community )
redhummer redhummer   16 октября 2008 11:04
:) 1 :( #
Нда… неожиданный поворот событий. Я думал, что без групп ВСЕМ никак. Однако жизнь куда разнообразнее :-D
Carw Carw   16 октября 2008 11:11
:) 1 :( #
_SP_, кстати группы могут понадобится при реализации «администрации» сайта
Robot Robot   16 октября 2008 11:30
:) 2 :( #
ну чтож, будем искать им применение!
_SP_ _SP_   16 октября 2008 11:33
:) 1 :( #
Хотел бы поинтересоваться как обстоят дела с доработкой инвайтов?

На деле не посмотрел еще вашего решения (www.artima.ru/invites.zip — битая ссылка). Как происходит отправка приглашения?

На деле было бы приятно видеть не список доступных инвайтов на соответствующей странице, а просто пару полей для имени приглашенного и его мыла. Человеку приходит сообщение от адресата==пользователю его пригласившего.

В письме ссылка на сайт с вбитым в нее (get'ом напр.) кодом приглашения. Новый пользователь регистрируется на интересном сайте, а тот, что его пригласил получает +1 к карме (или еще что-нидь, конфетку например).

спасибо за ответ.
galo4kin galo4kin   2 февраля 2009 14:52
:) 0 :( #
Фактически там было именно поле для ввода мыла и отправлялось письмо с номером инвайта.

Сожалею, но продолжать не буду это дело, так как перевел проект на ЛС :-)

Но решение рабочее вполне и должно до сих пор работать. Сейчас честно говоря могу и не найти уже. Последнюю версию я вроде SP давал.
Carw Carw   2 февраля 2009 16:31
:) 0 :( #
Carw
Покажи свой проект, если он у тебя в сети, please.
inetlover inetlover   2 февраля 2009 16:53
:) 0 :( #
Написать комментарий
Только зарегистрированные пользователи могут оставлять комментарии.





Подписаться на рассылку
"Бесплатный движок bigstreet.ru"


 
© 2008-2010. | О сайте | Инструкции | Обратная связь
© Powered by BigStreet RC1-maps Сервис коротких адресов
www.webmoney.ru Участник проекта CMS Magazine


Работа с БД:
 Время - 0.0042
 Запросов - 8
Работа с кэшем:
 Время - 0.0336
 Записей - 2
 Прочтений - 5
Общее время:
 0.0837