|  |  |  | <?php
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use zertex\gridstack\Gridstack;
 | 
					
						
							|  |  |  | use kartik\dialog\Dialog;
 | 
					
						
							|  |  |  | use yii\web\JsExpression;
 | 
					
						
							|  |  |  | use yii\helpers\Url;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* @var $this yii\web\View */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $this->title = Yii::t('dashboard', 'Dashboard');
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $css = '
 | 
					
						
							|  |  |  |         .grid-stack {
 | 
					
						
							|  |  |  |             margin: 0 !important;
 | 
					
						
							|  |  |  |             padding: 0 !important;
 | 
					
						
							|  |  |  |             /*border: solid 1px red;*/
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  |         .grid-stack-item {
 | 
					
						
							|  |  |  |             margin: 0 !important;
 | 
					
						
							|  |  |  |             padding: 0 !important;
 | 
					
						
							|  |  |  |             /*border: solid 1px green;*/
 | 
					
						
							|  |  |  |             overflow: hidden;
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  |         .grid-stack-item-content {
 | 
					
						
							|  |  |  |             margin: 0 !important;
 | 
					
						
							|  |  |  |             padding: 0 !important;
 | 
					
						
							|  |  |  |             overflow: hidden !important;
 | 
					
						
							|  |  |  |             left: 0 !important;
 | 
					
						
							|  |  |  |             right: 15px !important;
 | 
					
						
							|  |  |  |             /*bottom: 40px !important;*/
 | 
					
						
							|  |  |  |             /*bottom: auto !important;*/
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  |         
 | 
					
						
							|  |  |  |         .moveButton {
 | 
					
						
							|  |  |  |             font-size:12px;
 | 
					
						
							|  |  |  |             color:#999;
 | 
					
						
							|  |  |  |             cursor: pointer;
 | 
					
						
							|  |  |  |             margin-right:5px;
 | 
					
						
							|  |  |  |             display: inline-block;
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  |         .moveButton:hover {
 | 
					
						
							|  |  |  |             color:#333;
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .user128 {
 | 
					
						
							|  |  |  |             width: 128px;
 | 
					
						
							|  |  |  |             height: 128px;
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  |         
 | 
					
						
							|  |  |  |         .big_drop .select2-results ul {
 | 
					
						
							|  |  |  |             max-height: 500px !important;
 | 
					
						
							|  |  |  |             min-height: 500px !important;
 | 
					
						
							|  |  |  |             height: 500px !important;
 | 
					
						
							|  |  |  |         }  
 | 
					
						
							|  |  |  | ';
 | 
					
						
							|  |  |  | $this->registerCss($css);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $addWidgetUrl = Url::toRoute('/site/add-widget');
 | 
					
						
							|  |  |  | $removeWidgetUrl = Url::toRoute('/site/remove-widget');
 | 
					
						
							|  |  |  | $js = <<<JS
 | 
					
						
							|  |  |  |     var AddWidgetDialog;
 | 
					
						
							|  |  |  |     var RemoveWidgetDialog;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function addWidget(itemIdx, colorId)
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         var color = $("#"+colorId).val();
 | 
					
						
							|  |  |  |         $.ajax({
 | 
					
						
							|  |  |  |             method: "GET",
 | 
					
						
							|  |  |  |             data: {itemIdx: itemIdx, color: color},
 | 
					
						
							|  |  |  |             url: "{$addWidgetUrl}"
 | 
					
						
							|  |  |  |         })
 | 
					
						
							|  |  |  |         .done(function(data){
 | 
					
						
							|  |  |  |             AddWidgetDialog.close();
 | 
					
						
							|  |  |  |             document.location.reload();
 | 
					
						
							|  |  |  |         });
 | 
					
						
							|  |  |  |         return false;
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function removeWidget(idx)
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         $.ajax({
 | 
					
						
							|  |  |  |             method: "GET",
 | 
					
						
							|  |  |  |             data: {idx: idx},
 | 
					
						
							|  |  |  |             url: "{$removeWidgetUrl}"
 | 
					
						
							|  |  |  |         })
 | 
					
						
							|  |  |  |         .done(function(data){
 | 
					
						
							|  |  |  |             RemoveWidgetDialog.close();
 | 
					
						
							|  |  |  |             document.location.reload();
 | 
					
						
							|  |  |  |         });
 | 
					
						
							|  |  |  |         return false;
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | JS;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $this->registerJs($js, $this::POS_HEAD);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $saveWidgetsUrl = Url::toRoute('/site/save-widgets');
 | 
					
						
							|  |  |  | $js2 = '
 | 
					
						
							|  |  |  |     $("#addWidgetButton").on("click", function() {
 | 
					
						
							|  |  |  |         krajeeDialog.dialog(
 | 
					
						
							|  |  |  |             "",
 | 
					
						
							|  |  |  |             function (result) {alert(result);}
 | 
					
						
							|  |  |  |         );
 | 
					
						
							|  |  |  |     });
 | 
					
						
							|  |  |  |     
 | 
					
						
							|  |  |  |     $("#removeWidgetButton").on("click", function() {
 | 
					
						
							|  |  |  |         krajeeDialogRemove.dialog(
 | 
					
						
							|  |  |  |             "",
 | 
					
						
							|  |  |  |             function (result) {alert(result);}
 | 
					
						
							|  |  |  |         );
 | 
					
						
							|  |  |  |     });
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $(".grid-stack").on("change", function(event, items) {
 | 
					
						
							|  |  |  |         var widgets = [];
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $(".grid-stack-item.ui-draggable").each(function () {
 | 
					
						
							|  |  |  |             var $this = $(this);
 | 
					
						
							|  |  |  |             widgets.push({
 | 
					
						
							|  |  |  |                 x: $this.attr("data-gs-x"),
 | 
					
						
							|  |  |  |                 y: $this.attr("data-gs-y"),
 | 
					
						
							|  |  |  |                 w: $this.attr("data-gs-width"),
 | 
					
						
							|  |  |  |                 h: $this.attr("data-gs-height"),
 | 
					
						
							|  |  |  |                 c: $this.attr("data-color"),
 | 
					
						
							|  |  |  |                 title: $this.attr("data-title"),
 | 
					
						
							|  |  |  |                 name: $this.attr("data-name"),
 | 
					
						
							|  |  |  |                 method: $this.attr("data-method"),
 | 
					
						
							|  |  |  |                 resize: $this.attr("data-resize"),
 | 
					
						
							|  |  |  |                 widget: $this.attr("data-widget"),
 | 
					
						
							|  |  |  |                 icon: $this.attr("data-icon"),
 | 
					
						
							|  |  |  |             });
 | 
					
						
							|  |  |  |         });
 | 
					
						
							|  |  |  |         var widgetsJson = JSON.stringify(widgets);
 | 
					
						
							|  |  |  |         $.ajax({
 | 
					
						
							|  |  |  |             method: "POST",
 | 
					
						
							|  |  |  |             data: {widgets: widgetsJson},
 | 
					
						
							|  |  |  |             url: "' . $saveWidgetsUrl . '",
 | 
					
						
							|  |  |  |         })
 | 
					
						
							|  |  |  |         .done(function(data){
 | 
					
						
							|  |  |  |         });
 | 
					
						
							|  |  |  |     });
 | 
					
						
							|  |  |  | ';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $this->registerJs($js2, $this::POS_READY);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $formatJs = <<<JS
 | 
					
						
							|  |  |  | var formatRepo = function (repo) {
 | 
					
						
							|  |  |  |     if (repo.loading) {
 | 
					
						
							|  |  |  |         return repo.text;
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  |     var markup =
 | 
					
						
							|  |  |  | '<div class="row">' + 
 | 
					
						
							|  |  |  |     '<div class="col-sm-12">' +
 | 
					
						
							|  |  |  |         '<b style="margin-left:5px">' + repo.text + '</b>' + 
 | 
					
						
							|  |  |  |     '</div>' +
 | 
					
						
							|  |  |  | '</div>';
 | 
					
						
							|  |  |  |     if (repo.description) {
 | 
					
						
							|  |  |  |       markup += '<h5>' + repo.description + '</h5>';
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  |     return '<div style="overflow:hidden;">' + markup + '</div>';
 | 
					
						
							|  |  |  | };
 | 
					
						
							|  |  |  | var formatRepoSelection = function (repo) {
 | 
					
						
							|  |  |  |     return repo.full_name || repo.text;
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | JS;
 | 
					
						
							|  |  |  | $this->registerJs($formatJs, $this::POS_HEAD);
 | 
					
						
							|  |  |  | ?>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <div class="site-index">
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <?= Dialog::widget([
 | 
					
						
							|  |  |  |         'options' => [
 | 
					
						
							|  |  |  |             'title' => Yii::t('main', 'Add widget'),
 | 
					
						
							|  |  |  |             'buttons' => [
 | 
					
						
							|  |  |  |                 [
 | 
					
						
							|  |  |  |                     'id' => 'cancel-1',
 | 
					
						
							|  |  |  |                     'label' => Yii::t('main', 'Cancel'),
 | 
					
						
							|  |  |  |                     'action' => new JsExpression('function(dialog) {
 | 
					
						
							|  |  |  |                         dialog.close();
 | 
					
						
							|  |  |  |                     }')
 | 
					
						
							|  |  |  |                 ],
 | 
					
						
							|  |  |  |             ],
 | 
					
						
							|  |  |  |             'onshown' => new JsExpression("function(dialog){
 | 
					
						
							|  |  |  |                 var url = '" . Url::toRoute('/site/get-widgets-list') . "';
 | 
					
						
							|  |  |  |                 $.ajax({
 | 
					
						
							|  |  |  |                     method: 'POST',
 | 
					
						
							|  |  |  |                     url: url,
 | 
					
						
							|  |  |  |                 })
 | 
					
						
							|  |  |  |                 .done(function(data){
 | 
					
						
							|  |  |  |                     dialog.getModalBody().html(data);
 | 
					
						
							|  |  |  |                     AddWidgetDialog = dialog;
 | 
					
						
							|  |  |  |                 });
 | 
					
						
							|  |  |  |             }"),
 | 
					
						
							|  |  |  |         ],
 | 
					
						
							|  |  |  |     ]); ?>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <?= Dialog::widget([
 | 
					
						
							|  |  |  |         'libName' => 'krajeeDialogRemove',
 | 
					
						
							|  |  |  |         'options' => [
 | 
					
						
							|  |  |  |             'title' => Yii::t('main', 'Remove widget'),
 | 
					
						
							|  |  |  |             'type' => Dialog::TYPE_DANGER,
 | 
					
						
							|  |  |  |             'buttons' => [
 | 
					
						
							|  |  |  |                 [
 | 
					
						
							|  |  |  |                     'id' => 'cancel-1',
 | 
					
						
							|  |  |  |                     'label' => Yii::t('main', 'Cancel'),
 | 
					
						
							|  |  |  |                     'action' => new JsExpression('function(dialog) {
 | 
					
						
							|  |  |  |                         dialog.close();
 | 
					
						
							|  |  |  |                     }')
 | 
					
						
							|  |  |  |                 ],
 | 
					
						
							|  |  |  |             ],
 | 
					
						
							|  |  |  |             'onshown' => new JsExpression("function(dialog){
 | 
					
						
							|  |  |  |                 var url = '" . Url::toRoute('/site/get-selected-widgets-list') . "';
 | 
					
						
							|  |  |  |                 $.ajax({
 | 
					
						
							|  |  |  |                     method: 'POST',
 | 
					
						
							|  |  |  |                     url: url,
 | 
					
						
							|  |  |  |                 })
 | 
					
						
							|  |  |  |                 .done(function(data){
 | 
					
						
							|  |  |  |                     dialog.getModalBody().html(data);
 | 
					
						
							|  |  |  |                     RemoveWidgetDialog = dialog;
 | 
					
						
							|  |  |  |                 });
 | 
					
						
							|  |  |  |             }"),
 | 
					
						
							|  |  |  |         ],
 | 
					
						
							|  |  |  |     ]); ?>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <?php
 | 
					
						
							|  |  |  |     $gridStack = Gridstack::begin([
 | 
					
						
							|  |  |  |         'options'       => ['class' => 'grid-stack'],
 | 
					
						
							|  |  |  |         'clientOptions' => [
 | 
					
						
							|  |  |  |             'cellHeight'     => 22,
 | 
					
						
							|  |  |  |             'verticalMargin' => 15,
 | 
					
						
							|  |  |  |             'handle'         => '.moveHandle',
 | 
					
						
							|  |  |  |         ],
 | 
					
						
							|  |  |  |     ]);
 | 
					
						
							|  |  |  |     $widgets = \core\helpers\UserHelper::getSetting('widgetsLayout', []);
 | 
					
						
							|  |  |  |     foreach ($widgets as $widget) {
 | 
					
						
							|  |  |  |         $widgetData = [
 | 
					
						
							|  |  |  |             'class'=>'grid-stack-item',
 | 
					
						
							|  |  |  |             'data-gs-width'=>$widget['w'],
 | 
					
						
							|  |  |  |             'data-gs-height'=>$widget['h'],
 | 
					
						
							|  |  |  |             'data-gs-x'=>$widget['x'],
 | 
					
						
							|  |  |  |             'data-gs-y'=>$widget['y'],
 | 
					
						
							|  |  |  |             'data-method' => $widget['method'],
 | 
					
						
							|  |  |  |             'data-title' => $widget['title'],
 | 
					
						
							|  |  |  |             'data-color' => $widget['c'],
 | 
					
						
							|  |  |  |             'data-resize' => $widget['resize'],
 | 
					
						
							|  |  |  |             'data-widget' => $widget['widget'],
 | 
					
						
							|  |  |  |             'data-icon' => $widget['icon'],
 | 
					
						
							|  |  |  |             'data-name' => $widget['name'],
 | 
					
						
							|  |  |  |         ];
 | 
					
						
							|  |  |  |         // Disable resize if need
 | 
					
						
							|  |  |  |         if ($widget['resize'] == 0) {
 | 
					
						
							|  |  |  |             $widgetData['data-gs-no-resize'] = 'y';
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (isset($widget['auto']) && $widget['auto'] == 1) {
 | 
					
						
							|  |  |  |             $widgetData['data-gs-auto-position'] = 'y';
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Remove (), if exists
 | 
					
						
							|  |  |  |         $widget['method'] = str_replace('()', '', $widget['method']);
 | 
					
						
							|  |  |  |         // Echo widget data
 | 
					
						
							|  |  |  |         echo $gridStack->beginWidget($widgetData);
 | 
					
						
							|  |  |  |         echo call_user_func($widget['widget'] . '::' . $widget['method'], $widget['c']);
 | 
					
						
							|  |  |  |         echo $gridStack->endWidget();
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  |     ?>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <?php Gridstack::end(); ?>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <div class="clearfix"></div>
 | 
					
						
							|  |  |  |     <hr>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <div class="row" style="text-align: right; padding-right:15px;">
 | 
					
						
							|  |  |  |         <button class="btn btn-default" id="addWidgetButton"><i class="fa fa-plus"></i></button>
 | 
					
						
							|  |  |  |         <button class="btn btn-default" id="removeWidgetButton"><i class="fa fa-minus"></i></button>
 | 
					
						
							|  |  |  |     </div>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | </div>
 |