1<?php
2
3use WHMCS\Admin;
4use WHMCS\Domain\Checker;
5use WHMCS\Domains;
6use WHMCS\Domains\Domain;
7use WHMCS\View\Helper;
8use WHMCS\WHOIS;
9
10define("ADMINAREA",true);
11
12require("../init.php");
13
14$aInt = new Admin("WHOIS Lookups");
15
16$aInt->title = $aInt->lang('whois','title');
17$aInt->sidebar = "utilities";
18$aInt->icon = "domains";
19$aInt->requiredFiles(array("domainfunctions"));
20
21if ($action=="checkavailability") {
22 check_token('WHMCS.admin.default');
23 $whois = new WHOIS();
24 $result = $whois->lookup(array('sld' => $sld, 'tld' => $tld));
25 $whois->logLookup();
26 echo $result['result'];
27 exit;
28}
29
30$code = '';
31
32if ($domain = $whmcs->get_req_var('domain')) {
33 check_token('WHMCS.admin.default');
34
35 $domains = new Domains();
36
37 /**
38 * A space in a domain name is always invalid. Strip whitespace to
39 * be sure the following method does not throw if a space is present.
40 *
41 * @see https://jira.whmcs.com/browse/CORE-16013
42 */
43 $domain = str_replace(' ', '', $domain);
44
45 $domainparts = $domains->splitAndCleanDomainInput($domain);
46 $isValid = $domains->checkDomainisValid($domainparts);
47
48 if ($isValid) {
49
50 $whois = new WHOIS();
51 if ($whois->canLookup($domainparts['tld'])) {
52
53 $result = $whois->lookup($domainparts);
54 $whois->logLookup();
55
56 if ($result['result'] == "available") {
57 $code .= '<div class="alert alert-success text-center" role="alert" style="font-size:18px;">'
58 . sprintf($aInt->lang('whois', 'available'), $domain)
59 . '</div>';
60 } elseif ($result['result'] == "unavailable") {
61 $code .= '<div class="alert alert-danger text-center" role="alert" style="font-size:18px;">'
62 . sprintf($aInt->lang('whois', 'unavailable'), $domain)
63 . '</div>';
64 } else {
65 $code .= '<div class="alert alert-danger text-center" role="alert" style="font-size:18px;">'
66 . $aInt->lang('whois', 'error')
67 . '</div>'
68 . '<p align="text-center">' . $result['errordetail'] . '</p>';
69 }
70
71 } else {
72
73 $code .= '<div class="alert alert-danger text-center" role="alert" style="font-size:18px;">'
74 . sprintf($aInt->lang('whois', 'invalidtld'), $domainparts['tld'])
75 . '</div>';
76
77 }
78
79 } else {
80
81 $code .= '<div class="alert alert-danger text-center" role="alert" style="font-size:18px;">'
82 . $aInt->lang('whois', 'invaliddomain')
83 . '</div>';
84
85 }
86
87}
88
89$code = '<form method="post" action="'.$_SERVER['PHP_SELF'].'">
90 <div class="row clearfix">
91 <div class="col-md-8 col-md-offset-2 col-sm-10 col-sm-offset-1">
92 <div class="input-group input-group-lg">
93 <input type="text" name="domain" value="' . $domain . '" class="form-control" placeholder="domaintolookup.com" />
94 <div class="input-group-btn">
95 <input type="submit" value="Lookup Domain" class="btn btn-primary" />
96 </div>
97 </div>
98 </div>
99 </div>
100</form><br>' . $code;
101
102$code .= '<div class="row">';
103$isUnavailable = false;
104
105if ($domain && $isValid && $result['result'] == 'unavailable') {
106 $isUnavailable = true;
107 $code .= '<div class="col-md-6 col-sm-12"><h2>' . $aInt->lang('whois', 'whois') . '</h2>
108<div class="well well-lg">
109 ' . $result['whois'] . '
110</div></div>';
111}
112
113$checker = new Checker();
114
115if (!empty($domain)) {
116 $suggestions = $checker->getLookupProvider()->getSuggestions((new Domain($domain)));
117
118 if ($suggestions->count()) {
119 $outputCount = 0;
120 $class = 'col-md-12';
121 $columns = 4;
122 $suggestionLimit = 52;
123 if ($isUnavailable) {
124 $class = 'col-md-6 col-sm-12';
125 $columns = 2;
126 $suggestionLimit = 30;
127 }
128 $code .= '<div class="' . $class . '"><h2>' . AdminLang::trans('whois.suggestions') . '</h2>'
129 . '<table class="table"><tr>';
130 /** @var Domains\DomainLookup\SearchResult $suggestion */
131 $count = 1;
132 foreach ($suggestions as $suggestion) {
133 if ($outputCount >= $suggestionLimit) {
134 break;
135 }
136 if ($count > $columns) {
137 $count = 1;
138 $code .= '</tr><tr>';
139 }
140 $label = $suggestion->getDomain();
141 if ($suggestion->group()) {
142 $label .= ' ' . Helper::getDomainGroupLabel($suggestion->group());
143 }
144 $code .= '<td>' . $label . '</td>';
145 $count++;
146 $outputCount++;
147 }
148 $code .= '</tr></table></div>';
149 }
150}
151$code .= '</div>';
152
153$aInt->content = $code;
154$aInt->display();
155