Commit ae27b007efa5922fd056e8c13723ad49181af527
1 parent
87fcd9da
add ajax handler for deleting files from server
Showing
6 changed files
with
82 additions
and
47 deletions
Show diff stats
backend/assets/CheckPriceAsset.php renamed to backend/assets/ParserAsset.php
@@ -10,14 +10,14 @@ namespace backend\assets; | @@ -10,14 +10,14 @@ namespace backend\assets; | ||
10 | 10 | ||
11 | use yii\web\AssetBundle; | 11 | use yii\web\AssetBundle; |
12 | 12 | ||
13 | -class CheckPriceAsset extends AssetBundle { | 13 | +class ParserAsset extends AssetBundle { |
14 | public $basePath = '@webroot'; | 14 | public $basePath = '@webroot'; |
15 | public $baseUrl = '@web'; | 15 | public $baseUrl = '@web'; |
16 | public $css = [ | 16 | public $css = [ |
17 | 'css/site.css', | 17 | 'css/site.css', |
18 | ]; | 18 | ]; |
19 | public $js = [ | 19 | public $js = [ |
20 | - 'js/check-price.js', | 20 | + 'js/parser.js', |
21 | ]; | 21 | ]; |
22 | public $depends = [ | 22 | public $depends = [ |
23 | 'yii\web\YiiAsset', | 23 | 'yii\web\YiiAsset', |
backend/controllers/ParserController.php
@@ -269,14 +269,14 @@ class ParserController extends BaseController | @@ -269,14 +269,14 @@ class ParserController extends BaseController | ||
269 | 269 | ||
270 | public function actionServerFiles () | 270 | public function actionServerFiles () |
271 | { | 271 | { |
272 | - $arr_id = []; | 272 | + $arr_id_files = []; |
273 | // получим список файлов которые ожидают к загрузке | 273 | // получим список файлов которые ожидают к загрузке |
274 | foreach (glob(Yii::getAlias('@auto_upload') . '/*') as $server_file) { | 274 | foreach (glob(Yii::getAlias('@auto_upload') . '/*') as $server_file) { |
275 | $file_id = basename($server_file,".csv"); | 275 | $file_id = basename($server_file,".csv"); |
276 | - $arr_id[] = (int) $file_id; | 276 | + $arr_id_files[] = (int) $file_id; |
277 | } | 277 | } |
278 | - | ||
279 | - $query = ImporterFiles::find()->where(['in', 'id', $arr_id])->orderBy(['upload_time' => SORT_DESC]); | 278 | + Yii::$app->cache->set( 'files_to_delete',json_encode( $arr_id_files ) ); |
279 | + $query = ImporterFiles::find()->where(['in', 'id', $arr_id_files])->orderBy(['upload_time' => SORT_DESC]); | ||
280 | 280 | ||
281 | $provider = new ActiveDataProvider([ | 281 | $provider = new ActiveDataProvider([ |
282 | 'query' => $query, | 282 | 'query' => $query, |
@@ -289,24 +289,35 @@ class ParserController extends BaseController | @@ -289,24 +289,35 @@ class ParserController extends BaseController | ||
289 | 'dataProvider' => $provider]); | 289 | 'dataProvider' => $provider]); |
290 | } | 290 | } |
291 | 291 | ||
292 | - public function actionDelete ($id) | 292 | + public function actionDelete () |
293 | { | 293 | { |
294 | - if(Yii::$app->request->isAjax){ | ||
295 | - CustomVarDamp::dumpAndDie(1); | ||
296 | - } | ||
297 | - | ||
298 | - $files_model = new ImporterFiles(); | ||
299 | - try { | 294 | + if ( Yii::$app->request->isAjax ) { |
300 | 295 | ||
301 | - $files_model->delete($id); | ||
302 | - unlink(Yii::getAlias('@auto_upload') . '/' . $id . '.csv' ); | ||
303 | - | ||
304 | - } catch (ErrorException $e) { | 296 | + $files_model = new ImporterFiles(); |
297 | + if ( isset(Yii::$app->request->post()['id'] )) { | ||
298 | + $id = Yii::$app->request->post()['id']; | ||
299 | + try { | ||
300 | + $files_model->delete($id); | ||
301 | + unlink(Yii::getAlias('@auto_upload') . '/' . $id . '.csv' ); | ||
302 | + | ||
303 | + // удалим этот id и из кэша | ||
304 | + if( $arr_id_files = Yii::$app->cache->get( 'files_to_delete' ) ){ | ||
305 | + $arr_id_files = json_decode($arr_id_files); | ||
306 | + if (isset( $arr_id_files[$id] ) ) { | ||
307 | + unset( $arr_id_files[$id] ); | ||
308 | + // положем уже обновленный массив | ||
309 | + Yii::$app->cache->set( 'files_to_delete',json_encode( $arr_id_files ) ); | ||
310 | + } | ||
311 | + } | ||
312 | + // сообщим скрипту что все ОК | ||
313 | + echo 1; | ||
314 | + } catch (ErrorException $e) { | ||
305 | 315 | ||
306 | - CustomVarDamp::dump($e->getMessage()); | 316 | + CustomVarDamp::dump($e->getMessage()); |
307 | 317 | ||
318 | + } | ||
319 | + } | ||
308 | } | 320 | } |
309 | 321 | ||
310 | - $this->redirect('server-files'); | ||
311 | } | 322 | } |
312 | } | 323 | } |
backend/views/check-price/index.php
@@ -2,11 +2,10 @@ | @@ -2,11 +2,10 @@ | ||
2 | use yii\helpers\Html; | 2 | use yii\helpers\Html; |
3 | use yii\grid\GridView; | 3 | use yii\grid\GridView; |
4 | use yii\grid\SerialColumn; | 4 | use yii\grid\SerialColumn; |
5 | -use yii\grid\ActionColumn; | ||
6 | use yii\widgets\Pjax; | 5 | use yii\widgets\Pjax; |
7 | use yii\bootstrap\Modal; | 6 | use yii\bootstrap\Modal; |
8 | use yii\helpers\Url; | 7 | use yii\helpers\Url; |
9 | -use backend\assets\CheckPriceAsset; | 8 | +use backend\assets\ParserAsset; |
10 | 9 | ||
11 | 10 | ||
12 | /* @var $this yii\web\View */ | 11 | /* @var $this yii\web\View */ |
@@ -16,7 +15,8 @@ use backend\assets\CheckPriceAsset; | @@ -16,7 +15,8 @@ use backend\assets\CheckPriceAsset; | ||
16 | $this->title = 'Проверка прайсов'; | 15 | $this->title = 'Проверка прайсов'; |
17 | $this->params['breadcrumbs'][] = $this->title; | 16 | $this->params['breadcrumbs'][] = $this->title; |
18 | // зарегистрируем скрипт для обработки загрузки модального окна | 17 | // зарегистрируем скрипт для обработки загрузки модального окна |
19 | -CheckPriceAsset::register($this); | 18 | +ParserAsset::register($this); |
19 | +Pjax::begin(); | ||
20 | ?> | 20 | ?> |
21 | <div class="catalog-index"> | 21 | <div class="catalog-index"> |
22 | 22 | ||
@@ -30,7 +30,6 @@ CheckPriceAsset::register($this); | @@ -30,7 +30,6 @@ CheckPriceAsset::register($this); | ||
30 | ['content' => function ($model) { | 30 | ['content' => function ($model) { |
31 | $url = Url::to(['view', 'id' => $model->id, 'date_update' => $model->price_date_update]); | 31 | $url = Url::to(['view', 'id' => $model->id, 'date_update' => $model->price_date_update]); |
32 | return Html::a('<span class="glyphicon glyphicon-remove"> Просмотреть </span>', '#', [ | 32 | return Html::a('<span class="glyphicon glyphicon-remove"> Просмотреть </span>', '#', [ |
33 | - 'title' => Yii::t('yii', 'Просмотреть прайс'), | ||
34 | 'class' => 'modalButton', | 33 | 'class' => 'modalButton', |
35 | 'value' => $url, | 34 | 'value' => $url, |
36 | ]); | 35 | ]); |
@@ -76,6 +75,7 @@ CheckPriceAsset::register($this); | @@ -76,6 +75,7 @@ CheckPriceAsset::register($this); | ||
76 | echo "<div id='modalContent'></div>"; | 75 | echo "<div id='modalContent'></div>"; |
77 | 76 | ||
78 | Modal::end(); | 77 | Modal::end(); |
78 | + Pjax::end(); | ||
79 | ?> | 79 | ?> |
80 | 80 | ||
81 | 81 |
backend/views/parser/server-files.php
@@ -4,15 +4,17 @@ use yii\grid\GridView; | @@ -4,15 +4,17 @@ use yii\grid\GridView; | ||
4 | use yii\grid\SerialColumn; | 4 | use yii\grid\SerialColumn; |
5 | use yii\grid\ActionColumn; | 5 | use yii\grid\ActionColumn; |
6 | use yii\widgets\Pjax; | 6 | use yii\widgets\Pjax; |
7 | +use backend\assets\ParserAsset; | ||
7 | 8 | ||
8 | 9 | ||
9 | /* @var $this yii\web\View */ | 10 | /* @var $this yii\web\View */ |
10 | /* @var $searchModel backend\models\CatalogSearch */ | 11 | /* @var $searchModel backend\models\CatalogSearch */ |
11 | /* @var $dataProvider yii\data\ActiveDataProvider */ | 12 | /* @var $dataProvider yii\data\ActiveDataProvider */ |
12 | 13 | ||
13 | -$this->title = 'Проверка прайсов'; | 14 | +$this->title = 'Файлы на сервере'; |
14 | $this->params['breadcrumbs'][] = $this->title; | 15 | $this->params['breadcrumbs'][] = $this->title; |
15 | -Pjax::begin(); | 16 | +ParserAsset::register($this); |
17 | +Pjax::begin(['id' => 'server_files_grid']); | ||
16 | 18 | ||
17 | ?> | 19 | ?> |
18 | <div class="catalog-index"> | 20 | <div class="catalog-index"> |
@@ -30,19 +32,15 @@ Pjax::begin(); | @@ -30,19 +32,15 @@ Pjax::begin(); | ||
30 | ['label' =>'Дата загрузки', | 32 | ['label' =>'Дата загрузки', |
31 | 'attribute' => 'upload_time' ], | 33 | 'attribute' => 'upload_time' ], |
32 | 34 | ||
33 | - ['class' => ActionColumn::className(), | ||
34 | - 'template'=>'{delete}', | ||
35 | - 'buttons' => [ | ||
36 | - 'delete' => function ($url, $model, $key) { | ||
37 | - return Html::a('<span class="glyphicon glyphicon-remove"></span>', $url, [ | ||
38 | - 'title' => Yii::t('yii', 'Удалить файл'), | ||
39 | - 'data-confirm' => 'Вы уверены что хотите удалить этот файл?', | ||
40 | - 'data-method' => 'post', | ||
41 | - 'data-pjax' => '0', | ||
42 | - ]); | ||
43 | - }, | ||
44 | - ], | ||
45 | - ] | 35 | + ['content' => function ($model) { |
36 | + //Url::to(['delete', 'id' => $model->id, 'date_update' => $model->price_date_update]); | ||
37 | + return Html::a('<span class="glyphicon glyphicon-remove"> Удалить </span>', '#', [ | ||
38 | + 'value' => $model->id, | ||
39 | + 'class' => 'deleteLink', | ||
40 | + ]); | ||
41 | + }, | ||
42 | + ], | ||
43 | + | ||
46 | 44 | ||
47 | ]] );?> | 45 | ]] );?> |
48 | 46 |
backend/web/js/check-price.js deleted
1 | +$(function(){ | ||
2 | + | ||
3 | + // для каждой строки обрабатываем клик по ссылке | ||
4 | + $('.modalButton').click(function (){ | ||
5 | + // находим контейнер с модальным контентом и подгружаем в него по оджаксу результат | ||
6 | + $('#modal').modal('show') | ||
7 | + .find('#modalContent') | ||
8 | + .load($(this).attr('value')); // в 'value' - у нас указан путь с гет параметрами к конроллеру | ||
9 | + }); | ||
10 | + | ||
11 | + $('.deleteLink').click(function () | ||
12 | + { | ||
13 | + if ( confirm('Вы уверены что хотите удалить этот файл?') ){ | ||
14 | + var data = $(this).attr('value');// здесь у нас id удаляемой модели | ||
15 | + | ||
16 | + $.post( 'delete',{'id':data} ) | ||
17 | + .done(function(result) { | ||
18 | + if(result == 1) | ||
19 | + { | ||
20 | + $.pjax.reload({container:'#server_files_grid'}); | ||
21 | + }else | ||
22 | + { | ||
23 | + $("#message").html(result); | ||
24 | + } | ||
25 | + }).fail(function() | ||
26 | + { | ||
27 | + console.log("server error"); | ||
28 | + }); | ||
29 | + } | ||
30 | + | ||
31 | + | ||
32 | + | ||
33 | + | ||
34 | +}); | ||
35 | +}); |