You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.2 KiB

6 years ago
<?php
namespace common\modules\forms\services;
use common\modules\forms\entities\Form;
use common\modules\forms\forms\FormForm;
use common\modules\forms\repositories\FormRepository;
use common\modules\forms\widgets\FormGenerator;
3 years ago
use yii\db\StaleObjectException;
6 years ago
use yii\helpers\Json;
class FormManageService
{
3 years ago
private FormRepository $repository;
6 years ago
public function __construct(FormRepository $repository)
{
$this->repository = $repository;
}
3 years ago
public function clearJsonLabels($json): string
6 years ago
{
$new_data = [];
$data = Json::decode($json, true);
foreach ($data as $item) {
if (isset($item['label'])) {
$item['label'] = str_replace( '<br>', '', $item['label'] );
}
$new_data[] = $item;
}
return Json::encode($new_data, JSON_UNESCAPED_UNICODE);
}
public function create(FormForm $form): Form
{
$form = Form::create(
$form->name,
$this->clearJsonLabels($form->data),
$form->subject,
$form->from,
$form->reply,
$form->return,
$form->complete_text,
$form->complete_page_id,
$form->status,
$form->captcha
);
$this->repository->save($form);
FormGenerator::generateFormClass($form->id, Json::decode($form->data, true));
FormGenerator::generateFormView($form->id, Json::decode($form->data, true));
return $form;
}
public function edit($id, FormForm $form): void
{
$form_entity = $this->repository->get($id);
$form_entity->edit(
$form->name,
$this->clearJsonLabels($form->data),
$form->subject,
$form->from,
$form->reply,
$form->return,
$form->complete_text,
$form->complete_page_id,
$form->status,
$form->captcha
);
$this->repository->save($form_entity);
FormGenerator::generateFormClass($id, Json::decode($form->data, true));
FormGenerator::generateFormView($id, Json::decode($form->data, true));
}
3 years ago
/**
* @param $id
* @throws StaleObjectException
*/
6 years ago
public function remove($id): void
{
$form = $this->repository->get($id);
$this->repository->remove($form);
}
}