четверг, 28 февраля 2013 г.

Битрикс. Создаём тестовых пользователей.

На определённых этапах разработки частенько встаёт задача добавления тестовых пользователей. Штук хотя бы сто, тыщща, подставьте_своё_значение.
Ручками это делать более чем утомительно. Но мы же программисты, мы любим автоматизировать. К тому же нам далее возможность добавления тестовых данных очень даже пригодится.
Сегодня общаемся о библиотеке фейковых данных и о добавлении тестовых юзверей с аватарками.




Первый шаг

Находим библиотечку, которая генерит нам фейковые данные. Зачем изобретать велосипед, правильно? Выбор пал на Faker от Fzaninotto. Хотя бы потому, что она знает русский. И много других языков там в комплекте. Но нам нужен только русский и английский.
Создаём в корне папочку tools, кидаем туда папку src с фейкером и радостно читаем документацию. Кстати, если в код заглянуть, можно найти ещё немного разных возможностей, так что не ленитесь =)
Инклюдим битриксовые либы и либу фейкера. Создаём два экземляра фейкера - на русском и на английском. Зачем? Да потому что некоторые данные нам всё-таки на английском нужны =)
//библиотека фейкера
require_once 'src/autoload.php';
$faker = Faker\Factory::create('ru_RU');
//всё-таки некоторые данные нам нужны на английском =)
$faker_en  = Faker\Factory::create();

Второй шаг

Находим сайт с плейсхолдерами, ибо нам нужны аватарки для всех юзверей. Сначала была попытка использовать http://placekitten.com/, но уж по адресу http://placekitten.com/51/51 всегда выдавался один и тот же котэ, а это грустно. Хочется же разные аватарки!
Тогда гугление выдало http://lorempixel.com/, который честно выдаёт разные картинки на один и тот ж запрос.
Когда закончили играться с картинками, переходим непосредственно к коду.

Третий шаг

Пишем функцию, которая будет получать данные об аватарке. Да-да, битрикс умеет скачивать по урлу!
function upload_avatar($ava_url='http://lorempixel.com/51/51')
{
 global $faker_en;
 
 if (!$ava_url)
  return false;
 
 //получаем данные о картинке
 $arAvatar = CFile::MakeFileArray($ava_url);
 $arAvatar['MODULE_ID'] = 'main';
 $arAvatar['name'] = $faker_en->bothify("#?##??#??##?").'.jpg';

 //ресайзим
 /*CFile::ResizeImage(
  &$arAvatar, // сюда же будет записан уменьшенный файл
  array('width'=>$resize, 'height'=>$resize),
  BX_RESIZE_IMAGE_PROPORTIONAL
 );*/

 return $arAvatar;
}
Функция MakeFileArray даёт на выходе практически аналог $_FILES, который дальше можно юзать для своих целей.
Фейкеровский bothify возвращает строку, где # заменены на цифры, а ? заменены на буквы. Имя мы вручную подписываем потому что lorempixel не отдаёт нам имена картинок.

Если хотите отресайзить, то делаем это тут же, пример приведён.

На выходе функции имеем массив типа $_FILES, который мы и будем скармливать далее функции добавления пользователя, и временный файлец картинки, который битрикс заботливо скачал и положил на время выполнения скрипта куда-то в недры файловой системы. Потом он так же заботливо его оттуда удалит.

Четвёртый шаг

Пишем код добавления юзверей.
//заносим $users_count юзверей
$user = new CUser;
for ($i=0; $i<$users_count; $i++)
{
 //выносим пароль, ибо для подтверждения он нужен такой же
 $password = $faker->bothify('##??????##????????##');
 //аплоадим аватарку
 $arImage = upload_avatar();
 //заполняем массив свойств юзверя
 $arNeededFields = array(
  'PERSONAL_PHOTO'=>$arImage, //аватарко
  'LID'=>'s1', //на каком сайте
  'ACTIVE'=>'Y', //активен?
  'LOGIN'=>$faker_en->userName, //логин
  'EMAIL'=>$faker_en->email, //емейл
  'GROUP_ID'=>array(5), //5 - зарегистрированный юзер
  'PASSWORD'=>$password, //пароль
  'CONFIRM_PASSWORD'=>$password, //подтверждение пароля
  'UF_ABOUT'=> $faker->text(200), //пользователь пишет о себе
  'NAME'=>$faker->firstName, //имя
  'LAST_NAME'=>$faker->lastName, //фамилия
  'SECOND_NAME'=>$faker->middleName, //отчество
  'PERSONAL_BIRTHDATE'=>$faker->date($format = 'd.m.Y'), //день рождения
  'UF_FAKE_NUMBER'=>$faker->numberBetween(25,50), //число из интервала
 );

 $ID = $user->Add($arNeededFields);
 if (intval($ID) > 0)
  echo $ID.": Пользователь ".$arNeededFields['LOGIN']." - ОК<br>";
 else
  echo $user->LAST_ERROR;
 
}
Тут уже всё понятно. Для примере приведены дополнительные поля типа с префиксом UF_. Фейкеровская text($number) выдаёт всем известный lorem ipsum длиной $number.
Обращу внимание лишь на тот факт, что если создавать русскоязычный экземпляр фейкера, то получим, например, емейлы на русском. Поэтому мы создавали также экземпляр на английском.

Вообще фзаниноттовская библиотечка фейкера меня очень порадовала. Есть, конечно, свои недочёты, но это мелочи =)

Комментариев нет:

Отправить комментарий