Commit | Line | Data |
---|---|---|
2aa91ff2 S |
1 | <?php |
2 | namespace dns\page; | |
01c0ad42 | 3 | use dns\system\api\idna\idna_convert; |
2aa91ff2 S |
4 | use dns\system\DNS; |
5 | use dns\system\User; | |
2aa91ff2 S |
6 | |
7 | /** | |
8 | * @author Jan Altensen (Stricted) | |
9 | * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> | |
d4779364 | 10 | * @copyright 2014-2016 Jan Altensen (Stricted) |
2aa91ff2 S |
11 | */ |
12 | class RecordListPage extends AbstractPage { | |
13 | public $activeMenuItem = 'index'; | |
14 | ||
15 | public function prepare() { | |
16 | if (!isset($_GET['id']) || empty($_GET['id'])) { | |
17 | throw new \Exception('The link you are trying to reach is no longer available or invalid.', 404); | |
18 | } | |
19 | ||
20 | $soaIDs = User::getAccessibleDomains(); | |
21 | if (!in_array($_GET['id'], $soaIDs)) { | |
580f0b08 | 22 | throw new \Exception('Access denied. You\'re not authorized to view this page.', 403); |
2aa91ff2 S |
23 | } |
24 | ||
25 | $idna = new idna_convert(); | |
26 | ||
bc0d15f7 S |
27 | $sql = "SELECT count(*) as count FROM dns_rr WHERE zone = ?"; |
28 | $res = DNS::getDB()->query($sql, array($_GET['id'])); | |
29 | $row = DNS::getDB()->fetch_array($res); | |
30 | $count = $row['count']; | |
31 | ||
32 | $sortField = "type"; | |
33 | $sortOrder = "ASC"; | |
34 | $sqlOrderBy = ""; | |
35 | $validSortFields = array('id', 'name', 'type', 'ttl', 'data'); | |
36 | ||
37 | if (isset($_GET['sortField'])) { | |
38 | if (in_array($_GET['sortField'], $validSortFields)) { | |
39 | $sortField = $_GET['sortField']; | |
40 | } | |
41 | } | |
42 | ||
43 | if (isset($_GET['sortOrder'])) { | |
44 | if ($_GET['sortOrder'] == "ASC" || $_GET['sortOrder'] == "DESC") { | |
45 | $sortOrder = $_GET['sortOrder']; | |
46 | } | |
47 | } | |
48 | ||
49 | if (!empty($sortField) && !empty($sortField)) { | |
50 | $sqlOrderBy = $sortField." ".$sortOrder; | |
51 | } | |
52 | ||
53 | $pageNo = 1; | |
54 | if (isset($_GET['pageNo']) && !empty($_GET['pageNo'])) { | |
55 | $pageNo = intval($_GET['pageNo']); | |
56 | } | |
57 | ||
58 | $itemsPerPage = 20; | |
59 | $pages = 0; | |
60 | ||
61 | $sqlLimit = $itemsPerPage; | |
62 | $sqlOffset = ($pageNo - 1) * $itemsPerPage; | |
63 | $pages = intval(ceil($count / $itemsPerPage)); | |
64 | ||
2aa91ff2 S |
65 | $sql = "SELECT * FROM dns_soa WHERE id = ?"; |
66 | $res = DNS::getDB()->query($sql, array($_GET['id'])); | |
67 | $soa = DNS::getDB()->fetch_array($res); | |
68 | ||
69 | $soa['origin'] = $idna->decode($soa['origin']); | |
70 | ||
71 | $records = array(); | |
72 | ||
bc0d15f7 | 73 | $sql = "SELECT * FROM dns_rr WHERE zone = ?".(!empty($sqlOrderBy) ? " ORDER BY ".$sqlOrderBy : '')." LIMIT " . $sqlLimit . " OFFSET " . $sqlOffset; |
2aa91ff2 S |
74 | $res = DNS::getDB()->query($sql, array($_GET['id'])); |
75 | while ($row = DNS::getDB()->fetch_array($res)) { | |
76 | $row['name'] = $idna->decode($row['name']); | |
77 | if ($row['type'] == "SRV") { | |
78 | $data = explode(" ", $row['data']); | |
79 | $weight = $data[0]; | |
80 | $port = $data[1]; | |
81 | $data = $idna->encode($data[2]); | |
82 | ||
83 | $data = $weight.' '.$port.' '.$data; | |
84 | ||
85 | $row['data'] = $idna->decode($data); | |
86 | } | |
87 | else { | |
88 | if ($row['type'] == "TLSA" || $row['type'] == "DS") { | |
bc0d15f7 | 89 | $row['data'] = $row['data']; |
2aa91ff2 S |
90 | } |
91 | else { | |
92 | $row['data'] = $idna->decode($row['data']); | |
93 | } | |
94 | } | |
95 | $records[] = $row; | |
96 | } | |
97 | ||
bc0d15f7 S |
98 | DNS::getTPL()->assign(array( |
99 | 'records' => $records, | |
100 | 'soa' => $soa, | |
101 | 'pageNo' => $pageNo, | |
102 | 'pages' => $pages, | |
d2bc98e7 | 103 | 'count' => $count, |
bc0d15f7 S |
104 | 'sortField' => $sortField, |
105 | 'sortOrder' => $sortOrder | |
106 | )); | |
2aa91ff2 S |
107 | } |
108 | } |