Completed
Push — develop ( 4b5b5c...e668b0 )
by Tony
9s
created

MacDataTable   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

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

4 Methods

Rating   Name   Duplication   Size   Complexity  
A ajax() 0 14 3
A query() 0 6 1
A getColumns() 0 17 1
A filename() 0 4 1
1
<?php
2
/**
3
 * app/DataTables/General/MacDataTable.php
4
 *
5
 * Datatable for mac address search
6
 *
7
 * This program is free software: you can redistribute it and/or modify
8
 * it under the terms of the GNU General Public License as published by
9
 * the Free Software Foundation, either version 3 of the License, or
10
 * (at your option) any later version.
11
 *
12
 * This program is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
15
 * GNU General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU General Public License
18
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
 *
20
 * @package    LibreNMS
21
 * @link       http://librenms.org
22
 * @copyright  2016 Neil Lathwood
23
 * @author     Neil Lathwood <[email protected]>
24
 */
25
26
namespace App\DataTables\General;
27
28
use App\DataTables\BaseDataTable;
29
use App\Models\Port;
30
31
class MacDataTable extends BaseDataTable
32
{
33
34
    /**
35
     * Display ajax response.
36
     *
37
     * @return \Illuminate\Http\JsonResponse
38
     */
39
    public function ajax()
40
    {
41
        return $this->datatables
42
            ->eloquent($this->query())
43
            ->editColumn('hostname', function($data) {
44
                $hostname = is_null($data->device) ? trans('devices.text.deleted') : $data->device->hostname;
45
                return '<a href="'.url("devices/".$data->device_id).'">'.$hostname.'</a>';
46
            })
47
            ->editColumn('ifName', function($data) {
48
                $ifName = is_null($data->ifName) ? trans('devices.text.deleted') : $data->ifName;
49
                return '<a href="'.url("devices/".$data->device_id."/ports/".$data->port_id).'">'.$ifName.'</a>';
50
            })
51
            ->make(true);
52
    }
53
54
    /**
55
     * Get the query object to be processed by datatables.
56
     *
57
     * @return \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder
58
     */
59
    public function query()
60
    {
61
        $data = Port::join('devices', 'devices.device_id', '=', 'ports.device_id')->select('ports.*', 'devices.*');
62
        //FIXME This is valid but stops us generalising this file so until the nested queries above are fixed then we default to joins
63
        return $this->applyScopes($data);
64
    }
65
66
    /**
67
     * Get columns.
68
     *
69
     * @return array
70
     */
71
    public function getColumns()
72
    {
73
        return [
74
            'hostname'  => [
75
                'title' => trans('devices.label.hostname'),
76
            ],
77
            'ifName'    => [
78
                'title' => trans('general.text.interface'),
79
            ],
80
            'ifPhysAddress' => [
81
                'title'    => trans('general.text.mac_address'),
82
            ],
83
            'ifDescr'   => [
84
                'title' => trans('general.text.port_descr'),
85
            ],
86
        ];
87
    }
88
89
    /**
90
     * Get filename for export.
91
     *
92
     * @return string
93
     */
94
    protected function filename()
95
    {
96
        return 'mac';
97
    }
98
99
}
100