Красивый номер инвайтов

Посвящается тем кому, как и мне, не нравится код инвайтов вида 5884804e763972972042b1fccd6f1d13. Я расскажу как сделать красивые номера вида Y8EC-HRF-9I5.

Для этого открываем файл include/function.php и находим там функцию func_generator (81 строка). Не будем ее менять, так как она используется в других местах, а сделаем под ней свою:

/**
 * генерирует код инвайта
 */
function func_generator_invite() {
	$allowable_characters = "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
	$ps_len = strlen($allowable_characters);
	mt_srand((double)microtime()*1000000);
	$pass = "";
	for($i = 0; $i < 12; $i++) {
		if(($i == 4) || ($i == 8)) {
			$pass .= '-';
		} else {
			$pass .= $allowable_characters[mt_rand(0,$ps_len-1)];
		}
	}
	return $pass;
}


Затем идем в файл classes/modules/user/User.class.php и находим функцию GenerateInvite (строка 444) и меняем там строку:

$oInvite->setCode(func_generator(32));

на

$oInvite->setCode(func_generator_invite());


Чтобы пользователи могли вводить код в любом регистре сделаем небольшое изменение в файле classes/modules/user/mapper/User.mapper.class.php изменив функцию GetInviteByCode (строка 444). Меняем строку:

if ($aRow=$this->oDb->selectRow($sql,$sCode,$iUsed)) {

на

if ($aRow=$this->oDb->selectRow($sql,strtoupper($sCode),$iUsed)) {

10 комментариев

avatar
Но при этом, кстати, остается еще проблема с тем, что проверка инвайта чувствительна к регистру. Маленькие буквы не прокатят.
  • Carw
  • 0
avatar
Поправил этот момент.
avatar
J3QQ4-H7H2V-2HCH4-M3HK8-6M8VW

самый модный инвайт времён конца 90х
avatar
Да, сейчас каждый может генерить свои такие же :-))
Можно слегка изменить, чтобы такого же вида было :-)
avatar
для айтишных сайтов будет актуально
оставлять первый блок таким как есть а в остальных менять мстами некоторые элементы.
avatar
А в релизе 0.3 функцию можно поместить в отдельный файл, например myfunc.php, который просто размещается в папку /include/.

При следующем обновлении функция останется живой (как и любые другие, если вы их туда добавите) :-)
avatar
Старые инвайты при этом остаются работать?
avatar
Разумеется, просто меняется способ генерации, а те что уже были сгенерированы не должны затрагиваться вообще.
avatar
Спасибо ;)
avatar
спасибо, работает
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.