Skip to content

Commit d667cf3

Browse files
authored
Merge pull request #479 from openprovider/INTGRTNS-426-WHMCS-Domain-Module-WHMCS-Admin-Home-fails-when-Openprovider-registrar-module-is-deactivated
Intgrtns 426 whmcs domain module whmcs admin home fails when openprovider registrar module is deactivated
2 parents 84c4dc2 + 11a7b10 commit d667cf3

2 files changed

Lines changed: 132 additions & 70 deletions

File tree

modules/registrars/openprovider/Controllers/Hooks/AdminWidgetController.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,32 @@ class AdminWidgetController
1616
{
1717
public function showBalanceWidget()
1818
{
19+
$this->cleanupLegacyBalanceWidget();
20+
1921
return new BalanceWidget();
2022
}
2123

24+
private function cleanupLegacyBalanceWidget(): void
25+
{
26+
$legacyWidgetPath =
27+
$GLOBALS['whmcsAppConfig']->getRootDir()
28+
. '/modules/widgets/'
29+
. 'BalanceWidget.php';
30+
31+
if (file_exists($legacyWidgetPath)) {
32+
@unlink($legacyWidgetPath);
33+
34+
logModuleCall(
35+
'OpenProvider NL',
36+
'cleanupLegacyBalanceWidget',
37+
null,
38+
'Removed legacy BalanceWidget file to prevent duplicate widgets.',
39+
null,
40+
null
41+
);
42+
}
43+
}
44+
2245
public function showCrossSellWidget()
2346
{
2447
return new CrossSellWidget();

modules/registrars/openprovider/Controllers/Hooks/Widgets/BalanceWidget.php

Lines changed: 109 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -31,42 +31,6 @@ public function getId()
3131

3232
public function getData()
3333
{
34-
$url = "https://api.github.com/repos/openprovider/Openprovider-WHMCS-domains/releases/latest";
35-
36-
$ch = curl_init();
37-
curl_setopt($ch, CURLOPT_URL, $url);
38-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return the response as a string
39-
curl_setopt($ch, CURLOPT_HTTPHEADER, [
40-
'User-Agent: MyPHPApp' // GitHub API requires a user agent
41-
]);
42-
43-
$response = curl_exec($ch);
44-
45-
curl_close($ch);
46-
47-
$responseData = json_decode($response, true);
48-
49-
// Check if tag_name exists in the response
50-
if (isset($responseData['tag_name'])) {
51-
$availableVersion = $responseData['tag_name'];
52-
}
53-
54-
$installedVersion = explode('-', APIConfig::getModuleVersion())[0];
55-
56-
// Check if both versions are valid
57-
if (empty($installedVersion) || empty($availableVersion)) {
58-
logModuleCall('Openprovider', 'module version retrieval', "Failed to retrieve openprovider version", null, null, null);
59-
}
60-
61-
$versionResult = "";
62-
63-
// Compare versions
64-
if (version_compare($availableVersion, $installedVersion, '>')) {
65-
$versionResult = "<a href=\"https://github.com/openprovider/Openprovider-WHMCS-domains/releases/tag/$availableVersion\" target=\"_blank\" style=\"color:red;\">Update to version $availableVersion</a>";
66-
} else {
67-
$versionResult = "<span style=\"color:green;\">Module is up to date {$availableVersion}</span>";
68-
}
69-
7034
$command = 'GetRegistrars';
7135
$postData = array();
7236
$results = localAPI($command, $postData);
@@ -107,12 +71,14 @@ public function getData()
10771
if (isset($messages['results'])) {
10872
foreach ($messages['results'] as $message) {
10973
$html .= "<div class=\"row\">
110-
<div class=\"col-sm-12\">" . $message['html'] . "
111-
</div>
112-
</div>";
74+
<div class=\"col-sm-12\">" . $message['html'] . "
75+
</div>
76+
</div>";
11377
}
11478
}
11579

80+
$versionResult = $this->getModuleVersionStatus();
81+
11682
return [
11783
'balance' => $balance,
11884
'reservedBalance' => $reservedBalance,
@@ -125,20 +91,93 @@ public function getData()
12591
return ['error' => "The Openprovider module could not be found, please ensure that you have <a href='https://support.openprovider.eu/hc/en-us/articles/360012991620-Install-and-configure-Openprovider-module-in-WHMCS-8-X'>installed and activated the Openprovider domain registrar module</a>"];
12692
}
12793

94+
private function getModuleVersionStatus(): string
95+
{
96+
try {
97+
$url = "https://api.github.com/repos/openprovider/Openprovider-WHMCS-domains/releases/latest";
98+
99+
$ch = curl_init();
100+
curl_setopt($ch, CURLOPT_URL, $url);
101+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return the response as a string
102+
curl_setopt($ch, CURLOPT_HTTPHEADER, [
103+
'User-Agent: MyPHPApp' // GitHub API requires a user agent
104+
]);
105+
106+
$versionResult = "<span style=\"color:#999;\">Version check unavailable</span>";
107+
108+
$response = curl_exec($ch);
109+
if ($response === false) {
110+
$curlError = curl_error($ch);
111+
curl_close($ch);
112+
logModuleCall(
113+
'OpenProvider NL',
114+
'module version retrieval',
115+
'cURL error while retrieving Openprovider version',
116+
$curlError,
117+
null,
118+
null
119+
);
120+
return $versionResult;
121+
}
122+
123+
curl_close($ch);
124+
125+
$responseData = json_decode($response, true);
126+
127+
// Check if tag_name exists in the response
128+
if (isset($responseData['tag_name'])) {
129+
$availableVersion = $responseData['tag_name'];
130+
} else {
131+
return $versionResult;
132+
}
133+
134+
$installedVersion = explode('-', APIConfig::getModuleVersion())[0];
135+
136+
// Check if both versions are valid
137+
if (empty($installedVersion) || empty($availableVersion)) {
138+
logModuleCall('OpenProvider NL', 'module version retrieval', "Failed to retrieve openprovider version", null, null, null);
139+
return $versionResult;
140+
}
141+
142+
// Compare versions
143+
if (version_compare($availableVersion, $installedVersion, '>')) {
144+
$versionResult = "<a href=\"https://github.com/openprovider/Openprovider-WHMCS-domains/releases/tag/$availableVersion\" target=\"_blank\" style=\"color:red;\">Update to version $availableVersion</a>";
145+
} else {
146+
$versionResult = "<span style=\"color:green;\">Module is up to date {$availableVersion}</span>";
147+
}
148+
return $versionResult;
149+
} catch (\Throwable $e) {
150+
logModuleCall(
151+
'OpenProvider NL',
152+
'module version retrieval',
153+
'Failed to retrieve Openprovider version',
154+
$e->getMessage(),
155+
null,
156+
null
157+
);
158+
159+
return "<span style=\"color:#999;\">Version check unavailable</span>";
160+
}
161+
}
162+
163+
128164
public function generateOutput($data)
129165
{
130166
if (isset($data['error'])) {
131167
return <<<EOF
132-
<div class="widget-content-padded">
133-
<div style="color:red; font-weight: bold">
134-
{$data['error']}
135-
</div>
136-
</div>
137-
EOF;
168+
<div class="widget-content-padded">
169+
<div style="color:red; font-weight: bold">
170+
{$data['error']}
171+
</div>
172+
</div>
173+
EOF;
138174
}
139175
$availableBalance = $data['balance'] - $data['reservedBalance'];
140176
$balance = number_format((float) $data['balance'], 2);
141177

178+
$balance_css = '';
179+
$reservedBalance_css = '';
180+
142181
if ($data['balance'] <= 100)
143182
$balance_css = 'text-danger';
144183

@@ -149,30 +188,30 @@ public function generateOutput($data)
149188

150189

151190
return <<<EOF
152-
<div class="widget-content-padded">
153-
{$data['html']}
154-
<div class="row">
155-
<div class="col-sm-6 bordered-right">
156-
<div class="item">
157-
<div class="data $balance_css" style="display:inline-block;">€$balance</div> <div class="data $reservedBalance_css" style="display:inline-block;"><small>(€$availableBalance available)</small></div>
158-
<div class="note">Balance</div>
159-
</div>
160-
</div>
161-
<div class="col-sm-6">
162-
<div class="item">
163-
<div class="data color-orange">{$data['domainsTotal']}</div>
164-
<div class="note">Domains</div>
165-
</div>
166-
</div>
167-
</div>
168-
<div class="row">
169-
<div class="col-sm-12">
170-
<div class="item">
171-
<div class="data">{$data['versionResult']}</div>
172-
</div>
173-
</div>
174-
</div>
175-
</div>
176-
EOF;
191+
<div class="widget-content-padded">
192+
{$data['html']}
193+
<div class="row">
194+
<div class="col-sm-6 bordered-right">
195+
<div class="item">
196+
<div class="data $balance_css" style="display:inline-block;">€$balance</div> <div class="data $reservedBalance_css" style="display:inline-block;"><small>(€$availableBalance available)</small></div>
197+
<div class="note">Balance</div>
198+
</div>
199+
</div>
200+
<div class="col-sm-6">
201+
<div class="item">
202+
<div class="data color-orange">{$data['domainsTotal']}</div>
203+
<div class="note">Domains</div>
204+
</div>
205+
</div>
206+
</div>
207+
<div class="row">
208+
<div class="col-sm-12">
209+
<div class="item">
210+
<div class="data">{$data['versionResult']}</div>
211+
</div>
212+
</div>
213+
</div>
214+
</div>
215+
EOF;
177216
}
178217
}

0 commit comments

Comments
 (0)