Skip to content

Commit

Permalink
Added mass handler
Browse files Browse the repository at this point in the history
  • Loading branch information
execut committed Mar 13, 2019
1 parent ebb9cd6 commit e401ce1
Show file tree
Hide file tree
Showing 6 changed files with 427 additions and 0 deletions.
2 changes: 2 additions & 0 deletions action/Adapter.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ abstract class Adapter extends Component
*/
protected $response = null;

public $modelClass = null;

/**
* @var ViewRenderer $view
*/
Expand Down
53 changes: 53 additions & 0 deletions action/adapter/MassHandler.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php
/**
* Created by PhpStorm.
* User: execut
* Date: 3/11/19
* Time: 4:53 PM
*/

namespace execut\actions\action\adapter;


use execut\actions\action\adapter\helper\FormLoader;
use execut\actions\models\MassDelete;
use execut\crudFields\fields\Field;

class MassHandler extends GridView
{
public $scenario = Field::SCENARIO_GRID;
public function getDefaultViewRendererConfig()
{
return [
'class' => \execut\actions\action\adapter\viewRenderer\MassHandler::className(),
// 'title' => $this->model->getModelLabelOld(2),
];
}

protected function _run() {
$result = parent::_run();
$model = new MassDelete([
'owner' => $this->model
]);
$loader = new FormLoader();
$loader->model = $model;
$loader->data = \yii::$app->request->post();
$deletedCount = null;
if ($loader->run()) {
$deletedCount = $model->delete();
if (empty($model->deleteErrors)) {
$result->flashes = [
'Успешно удалено ' . $deletedCount . ' записей',
];
$urlParams = \yii::$app->request->getQueryParams();
$urlParams[0] = $this->getUniqueId();

$result->content = \yii::$app->controller->redirect($urlParams);
}
}
$result->content['deletedCount'] = $deletedCount;
$result->content['model'] = $model;

return $result;
}
}
10 changes: 10 additions & 0 deletions action/adapter/viewRenderer/DynaGrid.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ class DynaGrid extends Widget
public $refreshAttributes = [];
public $handleButtons = [];
public $isRenderFlashes = true;
public $isRenderMassDelete = false;
public $urlAttributesExcluded = [];
public $defaultHandleButtons = [
'visible' => [
Expand Down Expand Up @@ -343,6 +344,15 @@ protected function renderVisibleButtons(): string

}

if ($this->isRenderMassDelete) {
$urlParams = \yii::$app->request->getQueryParams();
$urlParams[0] = $this->getUniqueId() . '/mass-delete';

$buttons .= Html::a('', $urlParams, [
'class' => 'btn btn-danger glyphicon glyphicon-trash'
]);
}

return $buttons;
}

Expand Down
28 changes: 28 additions & 0 deletions action/adapter/viewRenderer/MassHandler.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php
/**
* User: execut
* Date: 21.07.16
* Time: 13:32
*/

namespace execut\actions\action\adapter\viewRenderer;


use execut\actions\action\adapter\helper\FormLoader;
use execut\actions\action\adapter\ViewRenderer;
use execut\actions\models\MassDelete;
use execut\actions\widgets\MassDeleteForm;

class MassHandler extends ViewRenderer
{
public $model = null;
public $filter = null;
public $dataProvider = null;
public $deletedCount = null;
protected function _run() {
return MassDeleteForm::widget([
'model' => $this->model,
'deletedCount' => $this->deletedCount,
]);
}
}
125 changes: 125 additions & 0 deletions models/MassDelete.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
<?php
/**
* Created by PhpStorm.
* User: execut
* Date: 3/13/19
* Time: 12:00 PM
*/

namespace execut\actions\models;


use detalika\goods\models\MergeRelation;
use detalika\goods\models\MergeRelations;
use execut\crudFields\fields\Field;
use yii\base\Model;

class MassDelete extends Model
{
public $owner = null;
protected $_deleteRelationsModels = null;
public $deleteErrors = [];

public function load($data, $formName = null)
{
if ($formName === null) {
$formName = $this->formName();
}

if (!empty($data[$formName]) && !empty($data[$formName]['deleteRelationsModels'])) {
$this->setDeleteRelationsModels($data[$formName]['deleteRelationsModels']);
}

return parent::load($data, $formName); // TODO: Change the autogenerated stub
}

public function setDeleteRelationsModels($modelsData) {
$models = $this->getDefaultDeleteRelationsModels();
foreach ($modelsData as $key => $modelsDatum) {
$models[$key]->load($modelsDatum, '');
}

$this->_deleteRelationsModels = $models;

return $this;
}

public function getDeleteRelationsModels() {
if ($this->_deleteRelationsModels !== null) {
return $this->_deleteRelationsModels;
}

return $this->_deleteRelationsModels = $this->getDefaultDeleteRelationsModels();
}

public function getDefaultDeleteRelationsModels() {
$result = [];
foreach ($this->owner->getRelations() as $relation) {
$result[$relation->name] = $relation->getDeleteModel();
}

return $result;
}

public function getCount() {
return $this->getQuery()->count();
}

public function getQuery() {
$dp = $this->owner->search();

return $dp->query;
}

public function attributeLabels()
{
return [
'deleteRelationsModels' => 'Удалить связанные записи:',
'count' => 'Количество удаляемых записей',
];
}

public function rules()
{
return [
['deleteRelationsModels', 'safe'],
];
}

public function delete() {
$result = 0;
foreach ($this->getQuery()->batch(10000) as $models) {
foreach ($models as $model) {
$mergeRelation = new MergeRelations();
$mergeRelation->article = $model;
$relations = [];
foreach ($this->getDeleteRelationsModels() as $name => $deleteRelationsModel) {
if ($deleteRelationsModel->is_delete) {
$relations[$name] = [
'action_id' => MergeRelation::ACTION_DELETE,
];
}
}
$mergeRelation->relations = $relations;
if (!$mergeRelation->validate()) {
foreach ($mergeRelation->errors as $errors) {
foreach ($errors as $error) {
$this->deleteErrors[] = [
'model' => $model,
'error' => $error
];
// $this->addError('deleteErrors', $error);
}
}
} else {
if ($mergeRelation->delete()) {
$result++;
}
}
}
// $mergeRelation->delete();
}

return $result;
}
}
Loading

0 comments on commit e401ce1

Please sign in to comment.