-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
427 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, | ||
]); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} |
Oops, something went wrong.