Skip to content

Commit

Permalink
Release 0.4.5
Browse files Browse the repository at this point in the history
  • Loading branch information
shvykov committed May 7, 2018
1 parent 93a1a6f commit dd74d55
Show file tree
Hide file tree
Showing 144 changed files with 10,292 additions and 0 deletions.
45 changes: 45 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Changelog

## [Released]

## [0.4.5] - 2018-05-04
### Added
- Генератор текста LoremIpsum
- Реализованы события загрузчика генераторов и сущности

## [0.4.0] - 2018-04-30
### Added
- Генератор привязки Highload элементов для пользовательского поля hlblock
- Генератор для ORM полей Boolean, Enum
- Генератор словарь для полей совместимых с типом string
- Рефакторинг кода

## [0.3.6] - 2018-04-29
### Added
- Рефакторинг кода

## [0.3.5] - 2018-04-25
### Added
- Генерация ORM элементов
- Генерация Highload элементов
- Генераторы: Числа float, файлов в формате ОРМ, перечислений ORM

## [0.3.0] - 2018-03-26
### Added
- Добавлено описание и документация

## [Unreleased]

## [0.2.0] - 2018-03-23
### Added
- Генерация элементов инфоблока
- Генераторы раздела, элемента, списка
- Доработан интерфейс администратора
- Реализовано удаление профилей
- Реализованы множественные типы данных у полей сущностей

## [0.1.0] - 2018-03-19

### Added
- Генерация пользователей
- Генераторы чекбокса, даты, email, числа, пароля, изображение, строки, страна, пол, группа пользователя
25 changes: 25 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
## Установка
```
$ cd local/modules
$ git clone https://github.com/ylabio/ylab.ddata.git
```
В папку `local/modules` будет склонирован репозиторий модуля, после этого, необходимо в панели администратора установить
модуль: `Рабочий стол -> Marketplace -> Установленные решения`.


## Bitrix модуль генерации демо данных

Модуль ylab.ddata реализует генерацию сущностей Bitrix заполненых случайными данными. Модуль поможет при отладке
публичной части сайта, API и в других ситуациях, когда необходимы сущности (ИБ, HL, Пользователи) заполненные тестовыми
данными.

Генерация производится на основе преднастроенного профиля в административном разделе.

Из коробки доступны:
* Сущности
* Пользователь
* Элемент инфоблока
* Элемент highload-блока
* Элемент ORM сущности

Настройка профиля производится в разделе `Рабочий стол -> Сервисы -> Ylab Демо данные -> Профили сущностей`.
120 changes: 120 additions & 0 deletions admin/entity_data_form.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
<?php
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php");

use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Ylab\Ddata\LoadUnits;

try {
define('MODULE_ID', 'ylab.ddata');
Loader::includeModule(MODULE_ID);

Loc::loadMessages(__FILE__);
$ctx = \Bitrix\Main\Application::getInstance()->getContext();
$request = $ctx->getRequest();
$sGeneratorID = $request->get('generator');
$sFieldID = $request->get('field');
$sPropertyName = $request->get('property-name');
$sProfileID = $request->get('profile_id');
$arRequest = $request->toArray();
$arOptions = $arRequest['option'];

$objLoadUnits = new LoadUnits();
$arDataUnits = $objLoadUnits->getDataUnits();
foreach ($arDataUnits as $arData) {
if ($arData['ID'] == $sGeneratorID) {
$arDataForm = $arData;
break;
}
}
$sDataClass = $arDataForm['CLASS'];
$sForm = $sDataClass::getOptionForm($request);

$isValidateOptions = false;
if ($request->isPost() && !empty($request->get('validate'))) {
$isValidateOptions = $sDataClass::isValidateOptions($request);
if (!$isValidateOptions) {
throw new Exception(Loc::getMessage('ERROR_OPTION'));
}
}

} catch (\Exception $e) {
$error = $e->getMessage();
}

if (isset($error)) {
CAdminMessage::ShowMessage([
"MESSAGE" => $error,
"TYPE" => "ERROR",
]);
}

if (!empty($sForm) && !$isValidateOptions) { ?>
<form action="<?= $APPLICATION->GetCurPage() ?>" method='post' name="WindowEntityDataForm" id='WindowEntityDataForm'>
<?= $sForm ?>
<script type="text/javascript">
var saveBtn = {
title: "Сохранить",
id: "savebtn",
name: "savebtn",
className: "adm-btn-save",
action: function () {
window.YlabDdata.WindowEntityDataForm.PostParameters("validate=Y");
}
};
window.YlabDdata.WindowEntityDataForm.SetButtons([saveBtn, BX.CDialog.btnCancel]);
</script>
</form>
<? } else { ?>
<script>
BX.ready(function () {
var inputButton = BX.findChild(
BX(document),
{
className: 'DataFieldButton',
attribute: {
'data-name': '<?= $sPropertyName ?>'
}
},
true,
true
)[0];
var inputOptions = BX.findChild(
BX(document),
{
attribute: {
'name': '<?= $sPropertyName ?>[<?= $sGeneratorID ?>]'
}
},
true,
true
)[0];
if (inputOptions == undefined) {
BX.prepend(BX.create('input', {
attrs: {
'type': 'hidden',
'class': 'options-input',
'name': '<?= $sPropertyName ?>[<?= $sGeneratorID ?>]',
'value': '<?= json_encode($arOptions) ?>',
'id': '<?= $sGeneratorID ?>'
}
}), BX.findParent(inputButton, {}));
} else {

BX.remove(inputOptions);

BX.prepend(BX.create('input', {
attrs: {
'type': 'hidden',
'class': 'options-input',
'name': '<?= $sPropertyName ?>[<?= $sGeneratorID ?>]',
'value': '<?= json_encode($arOptions) ?>',
'id': '<?= $sGeneratorID ?>'
}
}), BX.findParent(inputButton, {}));
}
});
window.YlabDdata.WindowEntityDataForm.Close();
</script>
<? } ?>

75 changes: 75 additions & 0 deletions admin/entity_prepare_form.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
<?php
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php");

use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Ylab\Ddata\LoadUnits;

try {
define('MODULE_ID', 'ylab.ddata');
Loader::includeModule(MODULE_ID);

Loc::loadMessages(__FILE__);
$ctx = \Bitrix\Main\Application::getInstance()->getContext();
$request = $ctx->getRequest();
$objLoadUnits = new LoadUnits();
$arEntityUnits = $objLoadUnits->getEntityUnits();
$arPrepareRequest = $request->get('prepare');
$isValidEntityPrepareForm = false;
if ($request->isPost() && !empty($arPrepareRequest['entity_id'])) {
$entityIndex = array_search($arPrepareRequest['entity_id'], array_column($arEntityUnits, 'ID'));
$class = $arEntityUnits[$entityIndex]['CLASS'];
$entityPrepareForm = $class::getPrepareForm($request);
$isValidEntityPrepareForm = $class::isValidPrepareForm($request);
}
} catch (\Exception $e) {
$error = $e->getMessage();
}

if (isset($error)) {
CAdminMessage::ShowMessage([
"MESSAGE" => $error,
"TYPE" => "ERROR",
]);
}

?>
<form action="<? echo $APPLICATION->GetCurPage(); ?>" method="post" id="WindowEntityPrepareForm">
<table class="adm-detail-content-table edit-table">
<tbody>
<tr>
<td width="40%"
class="adm-detail-content-cell-l"><?= Loc::getMessage("YLAB_DDATA_ENTITY_PREPARE_FORM_FIELD_ENTITY_ID") ?></td>
<td class="adm-detail-content-cell-r">
<select name="prepare[entity_id]" id="entity_id">
<option value="">-</option>
<? foreach ($arEntityUnits as $entityUnit): ?>
<option value="<?= $entityUnit['ID'] ?>" <?= ($arPrepareRequest['entity_id'] == $entityUnit['ID'] ? "selected" : "") ?>><?= $entityUnit['NAME'] ?></option>
<? endforeach; ?>
</select>
</td>
</tr>
<? if (isset($entityPrepareForm) && !empty($entityPrepareForm)) {
echo $entityPrepareForm;
} ?>
</tbody>
</table>
<script type="text/javascript">
BX.bind(BX('entity_id'), 'change', function () {
window.YlabDdata.WindowEntityPrepareForm.PostParameters();
});

var saveBtn = {
title: "Сохранить",
id: "savebtn",
name: "savebtn",
className: "adm-btn-save",
action: function () {
window.location.replace("/bitrix/admin/ylab.ddata_entity_profile_edit.php?<?=http_build_query(['prepare'=> $arPrepareRequest]);?>")
}
};

window.YlabDdata.WindowEntityPrepareForm.SetButtons([<?=($isValidEntityPrepareForm ? "saveBtn," : "")?> BX.CDialog.prototype.btnCancel]);
</script>
</form>

Loading

0 comments on commit dd74d55

Please sign in to comment.