From 780a36c167da541492eaaa2498be82eaaee7079e Mon Sep 17 00:00:00 2001 From: sanek Date: Fri, 13 Mar 2015 03:02:22 +0300 Subject: [PATCH] new module --- migrations/m150307_162718_create_form_table.php | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ migrations/m150312_162718_create_form_table.php | 72 ------------------------------------------------------------------------ models/Form.php | 36 ++++++++++++++++++++++-------------- models/FormEmail.php | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++------------------ models/Message.php | 0 models/forms/EmailForm.php | 38 ++++++++++++++++++++++++++++++++++++++ views/admin-form/_form.php | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- 7 files changed, 242 insertions(+), 112 deletions(-) create mode 100644 migrations/m150307_162718_create_form_table.php delete mode 100644 migrations/m150312_162718_create_form_table.php create mode 100644 models/Message.php create mode 100644 models/forms/EmailForm.php diff --git a/migrations/m150307_162718_create_form_table.php b/migrations/m150307_162718_create_form_table.php new file mode 100644 index 0000000..bbbc152 --- /dev/null +++ b/migrations/m150307_162718_create_form_table.php @@ -0,0 +1,72 @@ + + * @link http://skeeks.com/ + * @copyright 2010 SkeekS (СкикС) + * @date 07.03.2015 + */ +use yii\db\Schema; +use yii\db\Migration; + +class m150307_162718_create_form_table extends Migration +{ + public function up() + { + $tableExist = $this->db->getTableSchema("{{%form_form}}", true); + if ($tableExist) + { + return true; + } + + $tableOptions = null; + if ($this->db->driverName === 'mysql') { + $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB'; + } + + $this->createTable("{{%form_form}}", [ + 'id' => Schema::TYPE_PK, + + 'created_by' => Schema::TYPE_INTEGER . ' NULL', + 'updated_by' => Schema::TYPE_INTEGER . ' NULL', + + 'created_at' => Schema::TYPE_INTEGER . ' NULL', + 'updated_at' => Schema::TYPE_INTEGER . ' NULL', + + 'name' => Schema::TYPE_STRING . '(255) NOT NULL', + 'description' => Schema::TYPE_TEXT . ' NULL', + 'template' => Schema::TYPE_TEXT . ' NULL', + + 'code' => Schema::TYPE_STRING . '(32) NULL', + + ], $tableOptions); + + $this->execute("ALTER TABLE {{%form_form}} ADD INDEX(updated_by);"); + $this->execute("ALTER TABLE {{%form_form}} ADD INDEX(created_by);"); + + $this->execute("ALTER TABLE {{%form_form}} ADD INDEX(created_at);"); + $this->execute("ALTER TABLE {{%form_form}} ADD INDEX(updated_at);"); + + $this->execute("ALTER TABLE {{%form_form}} ADD INDEX(name);"); + $this->execute("ALTER TABLE {{%form_form}} ADD UNIQUE(code);"); + + $this->execute("ALTER TABLE {{%form_form}} COMMENT = 'Конструктор форм';"); + + $this->addForeignKey( + 'form_form_created_by', "{{%form_form}}", + 'created_by', '{{%cms_user}}', 'id', 'RESTRICT', 'RESTRICT' + ); + + $this->addForeignKey( + 'form_form_updated_by', "{{%form_form}}", + 'updated_by', '{{%cms_user}}', 'id', 'RESTRICT', 'RESTRICT' + ); + } + + public function down() + { + $this->dropForeignKey("form_form_created_by", "{{%form_form}}"); + $this->dropForeignKey("form_form_updated_by", "{{%form_form}}"); + + $this->dropTable("{{%form_form}}"); + } +} diff --git a/migrations/m150312_162718_create_form_table.php b/migrations/m150312_162718_create_form_table.php deleted file mode 100644 index bbbc152..0000000 --- a/migrations/m150312_162718_create_form_table.php +++ /dev/null @@ -1,72 +0,0 @@ - - * @link http://skeeks.com/ - * @copyright 2010 SkeekS (СкикС) - * @date 07.03.2015 - */ -use yii\db\Schema; -use yii\db\Migration; - -class m150307_162718_create_form_table extends Migration -{ - public function up() - { - $tableExist = $this->db->getTableSchema("{{%form_form}}", true); - if ($tableExist) - { - return true; - } - - $tableOptions = null; - if ($this->db->driverName === 'mysql') { - $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB'; - } - - $this->createTable("{{%form_form}}", [ - 'id' => Schema::TYPE_PK, - - 'created_by' => Schema::TYPE_INTEGER . ' NULL', - 'updated_by' => Schema::TYPE_INTEGER . ' NULL', - - 'created_at' => Schema::TYPE_INTEGER . ' NULL', - 'updated_at' => Schema::TYPE_INTEGER . ' NULL', - - 'name' => Schema::TYPE_STRING . '(255) NOT NULL', - 'description' => Schema::TYPE_TEXT . ' NULL', - 'template' => Schema::TYPE_TEXT . ' NULL', - - 'code' => Schema::TYPE_STRING . '(32) NULL', - - ], $tableOptions); - - $this->execute("ALTER TABLE {{%form_form}} ADD INDEX(updated_by);"); - $this->execute("ALTER TABLE {{%form_form}} ADD INDEX(created_by);"); - - $this->execute("ALTER TABLE {{%form_form}} ADD INDEX(created_at);"); - $this->execute("ALTER TABLE {{%form_form}} ADD INDEX(updated_at);"); - - $this->execute("ALTER TABLE {{%form_form}} ADD INDEX(name);"); - $this->execute("ALTER TABLE {{%form_form}} ADD UNIQUE(code);"); - - $this->execute("ALTER TABLE {{%form_form}} COMMENT = 'Конструктор форм';"); - - $this->addForeignKey( - 'form_form_created_by', "{{%form_form}}", - 'created_by', '{{%cms_user}}', 'id', 'RESTRICT', 'RESTRICT' - ); - - $this->addForeignKey( - 'form_form_updated_by', "{{%form_form}}", - 'updated_by', '{{%cms_user}}', 'id', 'RESTRICT', 'RESTRICT' - ); - } - - public function down() - { - $this->dropForeignKey("form_form_created_by", "{{%form_form}}"); - $this->dropForeignKey("form_form_updated_by", "{{%form_form}}"); - - $this->dropTable("{{%form_form}}"); - } -} diff --git a/models/Form.php b/models/Form.php index ea1eb39..b1cdba6 100644 --- a/models/Form.php +++ b/models/Form.php @@ -11,7 +11,6 @@ use skeeks\cms\base\db\ActiveRecord; use skeeks\cms\models\behaviors\HasDescriptionsBehavior; use skeeks\cms\models\behaviors\HasStatus; use skeeks\cms\models\behaviors\Implode; -use skeeks\cms\models\behaviors\Serialize; use skeeks\cms\models\Core; /** @@ -33,12 +32,7 @@ class Form extends Core */ public function behaviors() { - return array_merge(parent::behaviors(), [ - [ - "class" => Serialize::className(), - 'fields' => ['emails', 'phones', 'elements'] - ], - ]); + return array_merge(parent::behaviors(), []); } /** @@ -47,12 +41,25 @@ class Form extends Core public function rules() { return array_merge(parent::rules(), [ + [['created_by', 'updated_by', 'created_at', 'updated_at'], 'integer'], [['name'], 'required'], - [['name', 'description'], 'string'], - [['emails', 'phones', 'elements'], 'safe'], + [['description', 'template'], 'string'], + [['name'], 'string', 'max' => 255], + [['code'], 'string', 'max' => 32], + [['code'], 'unique'], + + [['code'], 'validateCode'] ]); } + public function validateCode($attribute) + { + if(!preg_match('/^[a-z]{1}[a-z0-1-]{3,32}$/', $this->$attribute)) + { + $this->addError($attribute, 'Используйте только буквы латинского алфавита и цифры. Начинаться должен с буквы. Пример block1.'); + } + } + public function scenarios() { $scenarios = parent::scenarios(); @@ -68,12 +75,13 @@ class Form extends Core */ public function attributeLabels() { - return array_merge(parent::attributeLabels(), [ - 'id' => \Yii::t('app', 'ID'), - 'name' => \Yii::t('app', 'Name'), - 'description' => \Yii::t('app', 'Description'), + return array_merge(parent::attributeLabels(), [ + 'id' => \Yii::t('app', 'ID'), + 'name' => \Yii::t('app', 'Name'), + 'code' => \Yii::t('app', 'Уникальный код'), + 'description' => \Yii::t('app', 'Небольшое описание'), + 'template' => \Yii::t('app', 'Шаблон формы'), ]); } - } \ No newline at end of file diff --git a/models/FormEmail.php b/models/FormEmail.php index 9a734a1..df50e58 100644 --- a/models/FormEmail.php +++ b/models/FormEmail.php @@ -1,38 +1,73 @@ * @link http://skeeks.com/ - * @copyright 2010-2014 SkeekS (Sx) - * @date 28.10.2014 - * @since 1.0.0 + * @copyright 2010 SkeekS (СкикС) + * @date 07.03.2015 */ - namespace skeeks\modules\cms\form\models; -use Yii; -use yii\base\Model; +use skeeks\cms\base\db\ActiveRecord; +use skeeks\cms\models\behaviors\HasDescriptionsBehavior; +use skeeks\cms\models\behaviors\HasStatus; +use skeeks\cms\models\behaviors\Implode; +use skeeks\cms\models\Core; /** - * Login form + * Class FormEmail + * @package skeeks\modules\cms\form\models */ -class FormEmail extends Model +class FormEmail extends Core { - public $value; + /** + * @inheritdoc + */ + public static function tableName() + { + return '{{%form_email}}'; + } + + /** + * @inheritdoc + */ + public function behaviors() + { + return array_merge(parent::behaviors(), []); + } /** * @inheritdoc */ public function rules() { - return [ - // username and password are both required - [['value'], 'required'], - // rememberMe must be a boolean value - ['value', 'email'], - ]; + return array_merge(parent::rules(), [ + [['value', 'form_id'], 'required'], + [['value'], 'string', 'max' => 255], + [['form_id', 'value'], 'unique', 'targetAttribute' => ['form_id', 'value'], 'message' => 'The combination of Value and Form ID has already been taken.'], + [['value'], 'email'], + ]); + } + + public function scenarios() + { + $scenarios = parent::scenarios(); + + $scenarios['create'] = $scenarios[self::SCENARIO_DEFAULT]; + $scenarios['update'] = $scenarios[self::SCENARIO_DEFAULT]; + + return $scenarios; } + /** + * @inheritdoc + */ + public function attributeLabels() + { + return array_merge(parent::attributeLabels(), [ + 'id' => \Yii::t('app', 'ID'), + 'value' => \Yii::t('app', 'Email'), + 'form_id' => \Yii::t('app', 'Форма'), + ]); + } -} +} \ No newline at end of file diff --git a/models/Message.php b/models/Message.php new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/Message.php diff --git a/models/forms/EmailForm.php b/models/forms/EmailForm.php new file mode 100644 index 0000000..b73696e --- /dev/null +++ b/models/forms/EmailForm.php @@ -0,0 +1,38 @@ + + * @link http://skeeks.com/ + * @copyright 2010-2014 SkeekS (Sx) + * @date 28.10.2014 + * @since 1.0.0 + */ + +namespace skeeks\modules\cms\form\models\forms; + +use Yii; +use yii\base\Model; + +/** + * Login form + */ +class EmailForm extends Model +{ + public $value; + + /** + * @inheritdoc + */ + public function rules() + { + return [ + // username and password are both required + [['value'], 'required'], + // rememberMe must be a boolean value + ['value', 'email'], + ]; + } + + +} diff --git a/views/admin-form/_form.php b/views/admin-form/_form.php index 33a0042..114a86f 100644 --- a/views/admin-form/_form.php +++ b/views/admin-form/_form.php @@ -1,21 +1,70 @@ - + - field($model, 'name')->textInput(['maxlength' => 255]) ?> -buttonsCreateOrUpdate($model); ?> + - +fieldSet('Общая ниформация')?> + field($model, 'name')->textInput(); ?> +fieldSetEnd(); ?> + "Email адреса", + 'hint' => "Укажите email адреса, на которые будут приходить уведомления об отправке формы.", + 'parentModel' => $model, + 'relation' => [ + 'form_id' => 'id' + ], + 'controllerRoute' => 'form/admin-form-email', + 'gridViewOptions' => [ + 'columns' => [ + //['class' => 'yii\grid\SerialColumn'], + 'value', + ], + ], +]); ?> + "Телефоны", + 'hint' => "Укажите телефоны, на которые будут приходить уведомления об отправке формы.", + 'parentModel' => $model, + 'relation' => [ + 'form_id' => 'id' + ], + 'controllerRoute' => 'form/admin-form-phone', + 'gridViewOptions' => [ + 'columns' => [ + //['class' => 'yii\grid\SerialColumn'], + 'value', + ], + ], +]); ?> + "Элементы формы", + 'hint' => "", + 'parentModel' => $model, + 'relation' => [ + 'form_id' => 'id' + ], + 'controllerRoute' => 'form/admin-form-field', + 'gridViewOptions' => [ + 'columns' => [ + //['class' => 'yii\grid\SerialColumn'], + 'value', + ], + ], +]); ?> + +buttonsCreateOrUpdate($model); ?> + -- libgit2 0.26.0