Completed
Pull Request — master (#4171)
by Muhlis
09:37
created

ExportButton   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
dl 0
loc 89
rs 10
c 0
b 0
f 0
wmc 6
lcom 1
cbo 3

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A setUpScripts() 0 21 1
A render() 0 32 2
A showRowSelectExportIfHasRowSelector() 0 8 2
1
<?php
2
3
namespace Encore\Admin\Grid\Tools;
4
5
use Encore\Admin\Admin;
6
use Encore\Admin\Grid;
7
8
class ExportButton extends AbstractTool
9
{
10
    /**
11
     * @var Grid
12
     */
13
    protected $grid;
14
15
    /**
16
     * Create a new Export button instance.
17
     *
18
     * @param Grid $grid
19
     */
20
    public function __construct(Grid $grid)
21
    {
22
        $this->grid = $grid;
23
    }
24
25
    /**
26
     * Set up script for export button.
27
     */
28
    protected function setUpScripts()
29
    {
30
        $script = <<<SCRIPT
31
32
$('.{$this->grid->getExportSelectedName()}').click(function (e) {
33
    e.preventDefault();
34
    
35
    var rows = $.admin.grid.selected().join();
36
37
    if (!rows) {
38
        return false;
39
    }
40
    
41
    var href = $(this).attr('href').replace('__rows__', rows);
42
    location.href = href;
43
});
44
45
SCRIPT;
46
47
        Admin::script($script);
48
    }
49
50
    /**
51
     * Render Export button.
52
     *
53
     * @return string
54
     */
55
    public function render()
56
    {
57
        if (!$this->grid->showExportBtn()) {
58
            return '';
59
        }
60
61
        $this->setUpScripts();
62
63
        $trans = [
64
            'export'        => trans('admin.export'),
65
            'all'           => trans('admin.all'),
66
            'current_page'  => trans('admin.current_page'),
67
            'selected_rows' => trans('admin.selected_rows'),
68
        ];
69
70
        $page = request('page', 1);
71
72
        return <<<EOT
73
<div class="btn-group pull-right" style="margin-right: 10px">
74
    <a href="{$this->grid->getExportUrl('all')}" target="_blank" class="btn btn-sm btn-twitter" title="{$trans['export']}"><i class="fa fa-download"></i><span class="hidden-xs"> {$trans['export']}</span></a>
75
    <button type="button" class="btn btn-sm btn-twitter dropdown-toggle" data-toggle="dropdown">
76
        <span class="caret"></span>
77
        <span class="sr-only">Toggle Dropdown</span>
78
    </button>
79
    <ul class="dropdown-menu" role="menu">
80
        <li><a href="{$this->grid->getExportUrl('all')}" target="_blank">{$trans['all']}</a></li>
81
        <li><a href="{$this->grid->getExportUrl('page', $page)}" target="_blank">{$trans['current_page']}</a></li>
82
        {$this->showRowSelectExportIfHasRowSelector($trans['selected_rows'])}
83
    </ul>
84
</div>
85
EOT;
86
    }
87
88
    private function showRowSelectExportIfHasRowSelector($text)
89
    {
90
        if ($this->grid->option('show_row_selector') === true) {
91
            return '<li><a href="'.$this->grid->getExportUrl('selected', '__rows__').'" target="_blank" class="'.$this->grid->getExportSelectedName().'">'.$text.'</a></li>';
92
        }
93
94
        return '';
95
    }
96
}
97