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.

70 lines
1.8 KiB

7 years ago
<?php
namespace core\forms;
use core\entities\Page;
use core\validators\SlugValidator;
use yii\helpers\ArrayHelper;
use Yii;
/**
* @property MetaForm $meta;
*/
class PageForm extends CompositeForm
{
public $title;
public $slug;
public $content;
public $parentId;
private $_page;
public function __construct(Page $page = null, $config = [])
{
if ($page) {
$this->title = $page->title;
$this->slug = $page->slug;
$this->content = $page->content;
$this->parentId = $page->parent ? $page->parent->id : null;
$this->meta = new MetaForm($page->meta);
$this->_page = $page;
} else {
$this->meta = new MetaForm();
}
parent::__construct($config);
}
public function rules(): array
{
return [
[['title', 'slug'], 'required'],
[['parentId'], 'integer'],
[['title', 'slug'], 'string', 'max' => 255],
[['content'], 'string'],
['slug', SlugValidator::class],
[['slug'], 'unique', 'targetClass' => Page::class, 'filter' => $this->_page ? ['<>', 'id', $this->_page->id] : null]
];
}
public function attributeLabels() {
return [
'title' => Yii::t('page', 'Title'),
'slug' => Yii::t('page', 'Slug'),
'id' => Yii::t('page', 'ID'),
'content' => Yii::t('page', 'Content'),
'parentId' => Yii::t('page', 'Parent Page'),
];
}
public function parentsList(): array
{
return ArrayHelper::map(Page::find()->orderBy('lft')->asArray()->all(), 'id', function (array $page) {
return ($page['depth'] > 1 ? str_repeat('-- ', $page['depth'] - 1) . ' ' : '') . $page['title'];
});
}
public function internalForms(): array
{
return ['meta'];
}
}