Нашелся очень крутой баг, который просто несовместим с жизнью социальной сети. Если не указать метки, то все написанное… То есть название топика и текст полностью теряются. Да, выводится сообщения об ошибке, но труд уже потерян.
Итак, дошел до работы с инвайтами и в данный момент занят их реализацией.
Итак. Сразу после включения я решил сделать инвайт, зашел в базу и увидел там следующие поля:
invite_id — ясно
invite_owner — вроде как владелец инвайта… ок
invite_grantee — вот это не ясно и я не нашел где используется
invite_added — время выдачи инвайта
invite_used — использован ли инвайт?
invite_code — Ну и собственно сам код инвайта
Этого вполне хватает для генерации инвайта.
Далее возникла сложность в том, что регистрация вообще не завершается. Вводишь инвайт, все заполняешь, но в результате снова получаешь форму, без какого либо результата. Пользователь так и не регистрируется. То есть даже не попадает в таблицу ожидания активации.
Ошибка кроется здесь похоже (
modules\registration\index.action.php (111)):
if (isset($_SESSION['is_grantee'])) {
$oUser->setId($_SESSION['is_grantee']);
$oUser->setActivateKey(md5($_POST['reg_login'].date('Y-m-d H:i:s').$_SESSION['is_grantee']));
}
$_SESSION['is_grantee'] содержит ID приглашения, но здесь происходит попытка задать ID пользователя равным ID приглашения… если я правильно понял. Более правильным будет задать номер приглашения по которыму пришел пользователь. Для этого меняем код на:
if (isset($_SESSION['is_grantee'])) {
$oUser->setInviteId($_SESSION['is_grantee']);
$oUser->setActivateKey(md5($_POST['reg_login'].date('Y-m-d H:i:s').$_SESSION['is_grantee']));
}
После этой замены пользователь таки проходит регистрацию и попадает в таблицу temp. То есть требуется активация. И письмо уходит. Но! Форма регистрации по прежнему показывается пользователю. Никаких сообщений нет. В коде по идее есть условие, что если письмо отправилось, то происходит переход на страницу
/registration/completed/, но похоже оно не выполняется…
UPD: Это происходит из-за небольшой ошибки в файле
completed.action.php. Там происходит проверка:
if (isset($_SESSION['grantee_registered'])) {
unset($_SESSION['grantee_registered']);
} else {
header('Location: '.System_Router::getPathWeb().'/registration/');
}
А нужно:
if (isset($_SESSION['registered'])) {
unset($_SESSION['registered']);
} else {
header('Location: '.System_Router::getPathWeb().'/registration/');
}
И все станет работать!
Второй косяк — приглашение так и остается активным. То есть по нему может зарегистрироваться еще туча посетителей.
Для исправления я поменял код:
if (isset($oUser)) {
$oSmarty->assign('registration_form_data', $aUser);
}
На следующий:
if (isset($oUser) and !$_SESSION['registered']) {
$oSmarty->assign('registration_form_data', $aUser);
} elseif($_SESSION['registered']) {
require_once('system/mappers/invites.mysql.mapper.php');
$oInvitesMapper = new Invites_MySQLMapper(System_Database::getInstance());
if ($oInvite = $oInvitesMapper->findById($_SESSION['is_grantee'])) {
$oInvite->setUsed(date('Y-m-d H:i:s'));
$oInvitesMapper->update($oInvite);
}
}
Так приглашения погашаются.
UPD: Еще один момент, у меня тут ошибки стали появляться при активации. Нужно исправить в файле
activation.action.php (46):$oInvitesMapper->save($oInvite);
на
$oInvitesMapper->update($oInvite);
Вот тебе раз. Размер сделки составляет $140 млн. Но кроме прочего - это явное свидетельство серьезного повышения активности Гугла на Российском рынке.
Интересно другое, что такая сделка однозначно должна повлиять на Рунет в целом. Сейчас по большому счету активнее всего работает именно сеть РСЯ и Бегун, а Гугл весьма осложнен отсутствием нормальной партнерской программы для Агентств и сложностью перевода средств. Если бегун банально заменят на АдВордс, то ситуация просто сыграет на пользу Яндекса. Но скорее всего Гугл расширит свои возможности в России за счет Бегуна и обеспечит нормальную работу на рынке.
Кроме того, есть некоторые заявления о том, что поиск Рамблера будет "усилен" с помощью Гугла, а вместо бегуна будет транслироваться АдСенс. Вот такие дела...
Но посмотрим немного с другой стороны. Как известно условия использования Бегуна менее жесткие, чем у Гугла. Его ставят на множество сайтом с мизерной и, что самое главное, подозрительной посещаемостью. На этом зарабатывает множество серых проектов. Если за это возьмется Гугл, то такие сайты получат серьезные сложности и косвенно может повлечь легкое оздоровление Рунета.
Хорошо бы. :-)