From 33b1c5b9e7ae603e4662b3e417fbc08dc8d0d770 Mon Sep 17 00:00:00 2001 From: SilverFire - Dima Naumenko Date: Thu, 12 Nov 2015 17:56:04 +0200 Subject: [PATCH] Continue Mail implementation --- src/controllers/MailController.php | 14 +++- src/grid/MailGridView.php | 12 +++- src/models/Mail.php | 2 +- src/views/mail/_form.php | 107 +++++++++++++++++++++++++++++ src/views/mail/create.php | 13 ++++ src/widgets/combo/MailCombo.php | 48 +++++++++++++ src/widgets/mail/Type.php | 4 +- 7 files changed, 195 insertions(+), 5 deletions(-) create mode 100644 src/views/mail/_form.php create mode 100644 src/views/mail/create.php create mode 100644 src/widgets/combo/MailCombo.php diff --git a/src/controllers/MailController.php b/src/controllers/MailController.php index 686c292b..e469dc70 100644 --- a/src/controllers/MailController.php +++ b/src/controllers/MailController.php @@ -8,11 +8,15 @@ namespace hipanel\modules\hosting\controllers; use hipanel\models\Ref; +use Yii; class MailController extends \hipanel\base\CrudController { public function actions() { return [ + 'search' => [ + 'class' => 'hipanel\actions\SearchAction' + ], 'index' => [ 'class' => 'hipanel\actions\IndexAction', 'data' => function ($action) { @@ -21,7 +25,15 @@ public function actions() { 'typeData' => $action->controller->getTypeData(), ]; } - ] + ], + 'create' => [ + 'class' => 'hipanel\actions\SmartCreateAction', + 'success' => Yii::t('app', 'Mailbox creating task has been added to queue'), + 'error' => Yii::t('app', 'An error occurred when trying to create mailbox') + ], + 'validate-form' => [ + 'class' => 'hipanel\actions\ValidateFormAction', + ], ]; } diff --git a/src/grid/MailGridView.php b/src/grid/MailGridView.php index d4f86a1b..82758af6 100644 --- a/src/grid/MailGridView.php +++ b/src/grid/MailGridView.php @@ -15,7 +15,7 @@ use hipanel\modules\server\grid\ServerColumn; use hipanel\widgets\ArraySpoiler; use Yii; -use yii\helpers\StringHelper; +use yii\helpers\Html; class MailGridView extends \hipanel\grid\BoxedGridView { @@ -49,6 +49,16 @@ static public function defaultColumns() // ], 'type' => [ 'format' => 'raw', + 'filter' => function ($column, $model, $attribute) { + return Html::activeDropDownList($model, $attribute, [ + '' => Yii::t('app', '---'), + 'mailbox' => Yii::t('app', 'Mailbox'), + 'forward_only' => Yii::t('app', 'Forward only'), + 'mailbox_with_forwards' => Yii::t('app', 'Mailbox with forwards'), + ], [ + 'class' => 'form-control', + ]); + }, 'value' => function ($model) { return Type::widget(compact('model')); } diff --git a/src/models/Mail.php b/src/models/Mail.php index 7155c4c9..af5fd90b 100644 --- a/src/models/Mail.php +++ b/src/models/Mail.php @@ -20,7 +20,7 @@ public function rules() return [ [['id', 'hdomain_id', 'client_id', 'seller_id', 'account_id', 'server_id'], 'integer'], [['mail', 'nick', 'hdomain', 'client', 'seller', 'account', 'server', 'domain'], 'safe'], - [['type', 'state', 'state_label'], 'safe'], + [['type', 'state', 'state_label', 'password', 'spam_forward_mail'], 'safe'], [['forwards', 'spam_action', 'autoanswer', 'du_limit'], 'safe'], [['is_alias'], 'boolean'], ]; diff --git a/src/views/mail/_form.php b/src/views/mail/_form.php new file mode 100644 index 00000000..436525e0 --- /dev/null +++ b/src/views/mail/_form.php @@ -0,0 +1,107 @@ + + + 'dynamic-form', + 'enableAjaxValidation' => true, + 'validationUrl' => Url::toRoute([ + 'validate-form', + 'scenario' => $model->isNewRecord ? reset($models)->scenario : 'update' + ]), +]) ?> + +
+ $model) { ?> +
+
+
+
+
+ isNewRecord) { + $model->setScenario('update'); + echo Html::activeHiddenInput($model, "[$i]id"); + } + ?> + + user->can('support')) { + print $form->field($model, "[$i]client")->widget(ClientCombo::className()); + } + + print $form->field($model, "[$i]server")->widget(ServerCombo::className()); + + print $form->field($model, "[$i]account")->widget(SshAccountCombo::className()); + + print Html::label(Yii::t('app', 'E-mail'), Html::getInputId($model, "[$i]nick")); + ?> +
+ field($model, "[$i]nick")->input('text', ['data-field' => 'nick'])->label(false) ?> + + field($model, "[$i]hdomain_id")->widget(HdomainCombo::className(), [ + 'activeWhen' => ['hosting/account'], + 'inputOptions' => [ + 'data-field' => 'dns_hdomain_id', + ], + 'pluginOptions' => [ + 'select2Options' => [ + 'width' => '250px', + ], + 'onChange' => new JsExpression("function () { + $(this).closest('.form-instance').find('input[data-field=\"sub-with-domain\"]').trigger('update'); + } + ") + ] + ])->label(false) ?> +
+ + field($model, "[$i]password")->widget(PasswordInput::className()); + + print $form->field($model, "[$i]spam_action")->radioList([ + '' => Yii::t('app', 'Do nothing'), + 'remove' => Yii::t('app', 'Remove'), + 'forward' => Yii::t('app', 'Forward to'), + ]); + print $form->field($model, "[$i]spam_forward_mail", [ + 'inputOptions' => [ + 'disabled' => true + ] + ])->widget(MailCombo::className(), [ + + ]); + + print $form->field($model, "[$i]forwards")->widget(MailCombo::className()); + + print $form->field($model, "[$i]autoanswer")->textarea(); + + print $form->field($model, "[$i]du_limit")->textarea(); + ?> +
+
+
+
+
+ +
+ 'btn btn-default']) ?> +   + 'btn btn-default', 'onclick' => 'history.go(-1)']) ?> +title = Yii::t('app', 'Create mailbox'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Mailboxes'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> + +
+ render('_form', compact('models')) ?> +
diff --git a/src/widgets/combo/MailCombo.php b/src/widgets/combo/MailCombo.php new file mode 100644 index 00000000..e724dbb9 --- /dev/null +++ b/src/widgets/combo/MailCombo.php @@ -0,0 +1,48 @@ + 'mail']; + + /** @inheritdoc */ + public function getFilter() + { + return ArrayHelper::merge(parent::getFilter(), [ + 'server' => 'server/server', + 'account' => 'hosting/account', + 'state' => ['format' => 'ok'], + ]); + } + + /** @inheritdoc */ + public function getPluginOptions($options = []) + { + return parent::getPluginOptions([ + 'activeWhen' => ['server/server'], + 'select2Options' => [ + 'formatResult' => new JsExpression("function (data) { + return data.text; + }") + ] + ]); + } +} \ No newline at end of file diff --git a/src/widgets/mail/Type.php b/src/widgets/mail/Type.php index b9598d19..7bf42bc5 100644 --- a/src/widgets/mail/Type.php +++ b/src/widgets/mail/Type.php @@ -20,13 +20,13 @@ class Type extends Label */ public function init() { - if ($this->model->is_alias) { + if ($this->model->type == 'forward_only') { $this->label = Yii::t('app', 'Forward only'); $this->color = 'primary'; $this->labelOptions = [ 'title' => Yii::t('app', 'You can not login ...') // TODO ]; - } elseif ($this->model->forwards) { + } elseif ($this->model->type == 'mailbox_with_forwards') { $this->label = Yii::t('app', 'Mailbox with forwards'); $this->color = 'warning'; } else {