yii2-backup icon indicating copy to clipboard operation
yii2-backup copied to clipboard

Add Download Button to _list.php buttons

Open DPineault opened this issue 7 years ago • 0 comments

I needed to add a download button to the _list.php

In the DefaultController.php controller I added

 	/* Added by CARDA Consultants Inc., Daniel Pineault */
	public function actionDownload()
	{
	    $file=Yii::$app->request->get('file');
	    $path=Yii::$app->request->get('path');
	    if (file_exists($path.$file)) {
	    	return Yii::$app->response->sendFile($path.$file);
	    } else {
	    	throw new \yii\web\NotFoundHttpException("{$file} is not found!");
	    }
	}

Then I modified the _list.php view files as follows

<?php
use yii\helpers\Html;
use yii\grid\GridView;
use yii\helpers\Url;

echo GridView::widget ( [ 
		'id' => 'install-grid',
		'dataProvider' => $dataProvider,
		'columns' => array (
				'name',
				'size:shortSize',
				'create_time:datetime',
				array (
						'header' => 'Actions',
						'class' => 'yii\grid\ActionColumn',
						'template' => '{restore} {download} {delete}', /* Modified by CARDA Consultants Inc., Daniel Pineault	*/
						'buttons' => [ 
								'delete' => function ($url, $model) {
									return Html::a ( '<span class="glyphicon glyphicon-remove"></span>', $url, [ 
											'title' => Yii::t ( 'app', 'Delete this backup' ) ,
											'data' => [
								                'confirm' => 'Are you sure you want to delete this backup?',  /* Added by CARDA Consultants Inc., Daniel Pineault	*/
								                'method' => 'post',
								            ],
									] );
								},
								
								'restore' => function ($url, $model) {
									return Html::a ( '<span class="glyphicon glyphicon-save"></span>', $url, [ 
											'title' => Yii::t ( 'app', 'Restore this backup' ) ,
											'data' => [
								                'confirm' => 'Are you sure you want to restore this version of your database and permanently crush any existing data?',  /* Added by CARDA Consultants Inc., Daniel Pineault	*/
								                'method' => 'post',
								            ],
									] );
								},

								/* Added by CARDA Consultants Inc., Daniel Pineault	*/
								'download' => function ($url, $model) {
									return Html::a ( '<span class="glyphicon glyphicon-cloud-download"></span>', $url, [ 
											'title' => Yii::t ( 'app', 'Download this backup' ),
											'data-method'=>'post',
									] );
								} 
						],
						'urlCreator' => function ($action, $model, $key, $index) {
							
								$url = Url::toRoute ( [ 
										'default/' .$action,
										'file' => $model ['name'] ,
										'path'=>\Yii::getAlias('@backend').'/db/' /*Added by CARDA Consultants Inc., Daniel Pineault */
								] );
								return $url;
							
						} 
				)
				 
		) 
] );
?>

Hopefully this can help someone else, and might be a feature worth adding.

Also, I'd recommend changing the header' => 'Delete DB', to perhaps 'header' => 'Actions' as 'Delete DB' isn't accurate since it has multiple buttons.

DPineault avatar Oct 30 '18 19:10 DPineault