From 7859a27ed0230a405dcf390c50baadd6d9fd717f Mon Sep 17 00:00:00 2001 From: Egorka Date: Mon, 13 Aug 2018 17:04:50 +0300 Subject: [PATCH] Form messages group actions --- backend/widgets/grid/CheckBoxColumn.php | 17 ++++ .../controllers/manage/FormMessageController.php | 90 +++++++++++++++++ common/modules/forms/messages/ru/form.php | 6 ++ .../forms/services/FormMessageManageService.php | 9 +- .../forms/views/manage/form-message/index.php | 106 +++++++++++++++++++++ 5 files changed, 227 insertions(+), 1 deletion(-) create mode 100644 backend/widgets/grid/CheckBoxColumn.php diff --git a/backend/widgets/grid/CheckBoxColumn.php b/backend/widgets/grid/CheckBoxColumn.php new file mode 100644 index 0000000..cac779e --- /dev/null +++ b/backend/widgets/grid/CheckBoxColumn.php @@ -0,0 +1,17 @@ + 'text-center', 'style' => 'width: 3em']; + public $contentOptions = [ + 'class' => 'text-center grid_checkbox', + ]; + public $name = 'gridSelection'; +} \ No newline at end of file diff --git a/common/modules/forms/controllers/manage/FormMessageController.php b/common/modules/forms/controllers/manage/FormMessageController.php index 4231d37..dd30637 100644 --- a/common/modules/forms/controllers/manage/FormMessageController.php +++ b/common/modules/forms/controllers/manage/FormMessageController.php @@ -5,11 +5,13 @@ namespace common\modules\forms\controllers\manage; use common\modules\forms\entities\FormMessage; use common\modules\forms\forms\FormMessageSearch; use common\modules\forms\services\FormMessageManageService; +use yii\helpers\Json; use yii\web\NotFoundHttpException; use yii\filters\AccessControl; use yii\filters\VerbFilter; use yii\web\Controller; use Yii; +use yii\web\Response; class FormMessageController extends Controller { @@ -89,6 +91,94 @@ class FormMessageController extends Controller return $this->redirect(['index']); } + public function actionDeleteSelected() + { + $post = Yii::$app->request->post(); + $ids = isset($post['ids']) ? $post['ids'] : null; + Yii::$app->response->format = Response::FORMAT_JSON; + if (!$ids) { + return [ + 'result' => 'error', + ]; + } + $idsArray = Json::decode($ids, true); + + foreach ($idsArray as $id) + { + try { + $this->service->remove($id); + } catch (\DomainException $e) { + Yii::$app->errorHandler->logException($e); + Yii::$app->session->setFlash('error', $e->getMessage()); + return [ + 'result' => 'failed', + ]; + } + } + Yii::$app->session->setFlash('success', Yii::t('form', 'Selected messages deleted')); + return [ + 'result' => 'success', + ]; + } + + public function actionReadSelected() + { + $post = Yii::$app->request->post(); + $ids = isset($post['ids']) ? $post['ids'] : null; + Yii::$app->response->format = Response::FORMAT_JSON; + if (!$ids) { + return [ + 'result' => 'error', + ]; + } + $idsArray = Json::decode($ids, true); + + foreach ($idsArray as $id) + { + try { + $this->service->setRead($id); + } catch (\DomainException $e) { + Yii::$app->errorHandler->logException($e); + Yii::$app->session->setFlash('error', $e->getMessage()); + return [ + 'result' => 'failed', + ]; + } + } + return [ + 'result' => 'success', + ]; + } + + public function actionUnreadSelected() + { + $post = Yii::$app->request->post(); + $ids = isset($post['ids']) ? $post['ids'] : null; + Yii::$app->response->format = Response::FORMAT_JSON; + if (!$ids) { + return [ + 'result' => 'error', + ]; + } + $idsArray = Json::decode($ids, true); + + foreach ($idsArray as $id) + { + try { + $this->service->setUnread($id); + } catch (\DomainException $e) { + Yii::$app->errorHandler->logException($e); + Yii::$app->session->setFlash('error', $e->getMessage()); + return [ + 'result' => 'failed', + ]; + } + } + return [ + 'result' => 'success', + ]; + } + /** * @param $id * diff --git a/common/modules/forms/messages/ru/form.php b/common/modules/forms/messages/ru/form.php index 8026967..593f1da 100644 --- a/common/modules/forms/messages/ru/form.php +++ b/common/modules/forms/messages/ru/form.php @@ -26,4 +26,10 @@ return [ 'Form Data' => 'Данные формы', 'Date' => 'Дата', 'New forms messages: {count}' => 'Новых сообщений из форм: {count}', + 'Mark as read' => 'Отметить как прочитанные', + 'Mark as unread' => 'Снять пометку о прочтении', + 'Delete selected' => 'Удалить выбранные', + 'Group actions {caret}' => 'Групповые операции {caret}', + 'Are you sure you want to delete selected messages?' => 'Вы действительно хотите удалить выбранные сообщения?', + 'Selected messages deleted' => 'Выбранные сообщения удалены', ]; \ No newline at end of file diff --git a/common/modules/forms/services/FormMessageManageService.php b/common/modules/forms/services/FormMessageManageService.php index 3ce1964..719d066 100644 --- a/common/modules/forms/services/FormMessageManageService.php +++ b/common/modules/forms/services/FormMessageManageService.php @@ -37,10 +37,17 @@ class FormMessageManageService public function setRead($id) { $message = $this->repository->get($id); - $message->new = 0; + $message->new = FormMessage::STATUS_OLD; $this->repository->save($message); } + public function setUnread($id) + { + $message = $this->repository->get($id); + $message->new = FormMessage::STATUS_NEW; + $this->repository->save($message); + } + public function remove($id): void { $message = $this->repository->get($id); diff --git a/common/modules/forms/views/manage/form-message/index.php b/common/modules/forms/views/manage/form-message/index.php index 211ade7..212833c 100644 --- a/common/modules/forms/views/manage/form-message/index.php +++ b/common/modules/forms/views/manage/form-message/index.php @@ -3,9 +3,11 @@ use common\modules\forms\entities\FormMessage; use yii\grid\ActionColumn; use yii\helpers\Html; +use yii\helpers\Url; use yii\grid\GridView; use yii\helpers\ArrayHelper; use common\modules\forms\entities\Form; +use backend\widgets\grid\CheckBoxColumn; /* @var $this yii\web\View */ /* @var $searchModel \common\modules\forms\forms\FormMessageSearch */ @@ -13,15 +15,118 @@ use common\modules\forms\entities\Form; $this->title = Yii::t('form', 'Messages'); $this->params['breadcrumbs'][] = $this->title; + +$js = <<registerJs($js, $this::POS_READY); + +$deleteConfirmMessage = Yii::t('form', 'Are you sure you want to delete selected messages?'); +$deleteSelectedUrl = Url::to(['delete-selected']); +$unreadSelectedUrl = Url::to(['unread-selected']); +$readSelectedUrl = Url::to(['read-selected']); + +$js2 = <<registerJs($js2, $this::POS_HEAD); ?>
+
+
+ '']), '#', [ + 'class' => 'btn btn-default dropdown-toggle disabled', + 'id' => 'groupActions', + 'disabled' => 'disabled', + 'data-toggle' => 'dropdown', + 'aria-haspopup' => 'true', + 'aria-expanded' => 'false', + ]) ?> + + +
+
+
$dataProvider, 'filterModel' => $searchModel, 'columns' => [ + [ + 'class' => CheckBoxColumn::class, + ], + [ + 'attribute' => 'id', + 'options' => ['style' => 'width: 50px;'], + 'contentOptions' => ['class' => 'text-center'], + ], [ 'label' => Yii::t('form', 'Date'), 'attribute' => 'created_at', @@ -43,6 +148,7 @@ $this->params['breadcrumbs'][] = $this->title; ], [ 'class' => ActionColumn::class, + 'template' => '{view} {delete}', 'options' => ['style' => 'width: 100px;'], 'contentOptions' => ['class' => 'text-center'], ],