В связи с осенним обострением у SEOшников, я вынужден перевести bigstreet.ru на осадное положение. Оно будет заключаться в следующем :
1. регистрация по инвайтам (invite)
(для получения инвайтов обращаться ко мне или к тем пользователям которые захотят заняться их распространением, мои контакты есть на страницах Бигстрита или на внутреннюю почту. Нужен один - будет нужно 20 сделаю, но не для ботов)
2. удаление любых постов с зачатками рекламы
3. запрет на публикацию своих контактных данных (есть внутренняя почта и закрытые сообщества)
4. для помощи нужен 1-2 добровольца модерить записи!
5. внимательно готов выслушать любые Ваши предложения.
P.S. данная мера объявляется бессрочной. у нас сайт разработки или площадка для тестов сеошников ?
С 13.05 и в течении 2х недель
регистрация на bigstreet.ru будет осуществляться по инвайтам.
Это сделанно для того чтобы отсечь ненужных пользователей и продолжить нормальное общение по разработкам на bigstreet.
Для того, чтобы получить инвайт обратитесь к любому пользователю которые уже получили инвайты, либо через форму обратной связи.
http://bigstreet.ru/feedback/Инвайты у пльзователей:
- antisite
- kolobok
- inetlover
- Skeicher
- Fanta
Итак, дошел до работы с инвайтами и в данный момент занят их реализацией.
Итак. Сразу после включения я решил сделать инвайт, зашел в базу и увидел там следующие поля:
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);