update copyright year
[GitHub/Stricted/Domain-Control-Panel.git] / lib / page / RecordListPage.class.php
CommitLineData
2aa91ff2
S
1<?php
2namespace dns\page;
01c0ad42 3use dns\system\api\idna\idna_convert;
2aa91ff2
S
4use dns\system\DNS;
5use 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 */
12class 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}