run:R W Run
1.7 KB
2026-04-08 19:26:11
R W Run
8.34 KB
2026-04-08 19:26:11
R W Run
3.54 KB
2026-04-08 19:26:10
R W Run
1.8 KB
2026-04-08 19:26:10
R W Run
3.59 KB
2026-04-08 19:26:09
R W Run
3.19 KB
2026-04-08 19:26:10
R W Run
4.85 KB
2026-04-08 19:26:12
R W Run
2.47 KB
2026-04-08 19:26:12
R W Run
11.26 KB
2026-04-08 19:26:10
R W Run
1.34 KB
2026-04-08 19:26:10
R W Run
3.54 KB
2026-04-08 19:26:09
R W Run
4.61 KB
2026-04-08 19:26:10
R W Run
37 By
2026-04-08 19:26:09
R W Run
error_log
📄MarketConnect.php
1<?php
2
3namespace WHMCS\Module\Widget;
4
5use AdminLang;
6use App;
7use WHMCS\MarketConnect\Balance;
8use WHMCS\MarketConnect\MarketConnect as MarketConnectConnector;
9use WHMCS\Module\AbstractWidget;
10
11/**
12 * MarketConnect Widget.
13 *
14 * @copyright Copyright (c) WHMCS Limited 2005-2021
15 * @license https://www.whmcs.com/eula/ WHMCS Eula
16 */
17class MarketConnect extends AbstractWidget
18{
19 protected $title = 'MarketConnect';
20 protected $description = 'An overview of MarketConnect.';
21 protected $weight = 200;
22 protected $cache = true;
23 protected $cacheExpiry = 6 * 60;
24 protected $requiredPermission = 'View MarketConnect Balance';
25
26 public function getData()
27 {
28 $isMarketConnectConfigured = MarketConnectConnector::isAccountConfigured();
29 if ($isMarketConnectConfigured) {
30 $activeServices = MarketConnectConnector::getActiveServices();
31 }
32
33 return [
34 'isConfigured' => $isMarketConnectConfigured,
35 'activeServices' => $isMarketConnectConfigured ? $activeServices : [],
36 ];
37 }
38
39 public function generateOutput($data)
40 {
41 $isConfigured = $data['isConfigured'];
42 $activeServices = $data['activeServices'];
43
44 $balance = (new Balance)
45 ->loadFromCache();
46
47 try {
48 if (App::getFromRequest('refresh')) {
49 $balance->updateViaApi();
50 } else {
51 $balance->setCacheTimeout(6)
52 ->updateViaApiIfExpired();
53 }
54 } catch (\Exception $e) {
55 // Exception will likely be an auth error
56 // On exception, continue using cached data or assume zero
57 }
58
59 $balanceAmount = number_format($balance->getBalance(), 2, '.', ',');
60 $balanceLastUpdated = $balance->getLastUpdatedDiff();
61
62 $langManage = AdminLang::trans('home.manage');
63 $langSellingStatus = AdminLang::trans('marketConnect.sellingStatus');
64 $langDepositFunds = AdminLang::trans('marketConnect.depositFunds');
65 $langYourBalance = AdminLang::trans('marketConnect.yourBalance');
66 $langLastUpdated = AdminLang::trans('marketConnect.lastUpdated');
67 $langBalance = AdminLang::trans('fields.balance');
68 $langPromotions = AdminLang::trans('global.promotions');
69
70 $services = [];
71 foreach (MarketConnectConnector::SERVICES as $service) {
72 $isActive = in_array($service['vendorSystemName'], $activeServices);
73 $logoFilename = 'logo-sml.png';
74 if (file_exists(
75 ROOTDIR
76 . DIRECTORY_SEPARATOR . 'assets'
77 . DIRECTORY_SEPARATOR . 'img'
78 . DIRECTORY_SEPARATOR . 'marketconnect'
79 . DIRECTORY_SEPARATOR . $service['vendorSystemName']
80 . DIRECTORY_SEPARATOR . 'logo-sml.svg'
81 )) {
82 $logoFilename = 'logo-sml.svg';
83 }
84 $services[] = '<div class="service ' . ($isActive ? 'selling' : 'not-selling') . '">
85 <img src="../assets/img/marketconnect/' . $service['vendorSystemName'] . '/' . $logoFilename . '">
86 <span class="title">' . $service['serviceTitle'] . '<br>by ' . $service['vendorName'] . '</span>
87 ' . ($isActive ? '<span class="label label-success">Selling</span>' : '<span class="label label-default">Not Selling</span>') . '
88 </div>';
89 }
90
91 if ($isConfigured) {
92 $accountOutput = '<form method="post" action="marketconnect.php">
93 <input type="hidden" name="action" value="sso">
94 <div class="balance-wrapper">
95 <div class="pull-right text-right">
96 <button type="submit" class="btn btn-default btn-deposit">
97 <i class="fas fa-credit-card fa-fw"></i>
98 ' . $langDepositFunds . '
99 </button><br>
100 <a href="https://marketplace.whmcs.com/promotions" target="_blank" class="btn btn-default btn-promo">
101 <i class="fas fa-ticket-alt fa-fw"></i>
102 ' . $langPromotions . '
103 </a>
104 </div>
105 <h4>' . $langYourBalance . '</h4>
106 <strong>' . $balanceAmount . '</strong>
107 Points
108 <small>' . $langLastUpdated . ': ' . $balanceLastUpdated . '</small>
109 </div>
110 </form>';
111 } else {
112 $accountOutput = '<div class="balance-wrapper promo-wrapper">
113 MarketConnect gives you access to resell market leading services to your customers in minutes. <a href="#">Learn more &raquo;</a>
114 </div>';
115 }
116
117 return '<div class="widget-content-padded">
118
119 <a href="marketconnect.php" class="btn btn-default btn-manage pull-right">
120 ' . $langManage . '
121 </a>
122 <h4>' . $langSellingStatus . '</h4>
123
124 <div class="selling-status">
125 ' . implode($services) . '
126 </div>
127
128 ' . $accountOutput . '
129
130</div>';
131 }
132}
133