ダッシュボードの確認済み

諏訪子 <suwako@076.moe>、2026-05-11 02:31
コミット 83e251cab3f24d43a39fcb0a7b6537e8c0ccc6f2 ・親 3a70309 ・ファイルを見る

5個のファイル、+75 -16

@@ -71,6 +71,19 @@
7171 color: #fcfcfc;
7272 }
7373
74+div.op-grid {
75+ display: grid;
76+ grid-auto-flow: column;
77+ margin: 8px 0;
78+}
79+
80+div.op-grid-item {
81+ margin: 4px;
82+ padding: 2px;
83+ border: 1px solid #fcfcfc;
84+ border-radius: 2px;
85+}
86+
7487 tr.status-free { background-color: #34860e; color: #fff; }
7588 tr.status-reserved { background-color: #c59e1d; color: #fff; }
7689 tr.status-use { background-color: #850000; color: #fff; }
@@ -78,6 +78,10 @@
7878 $this->tmpl->assign('pagetit', $this->pagetit);
7979
8080 if (!$this->user || $this->user->role !== Roles::ADMIN) goto noaccess;
81+ $data = $this->op->getReseller(['with_statistics' => true]);
82+ $domain = $this->op->listDomains(['order_by.renewal_date' => 'asc', 'status' => 'ACT']);
83+ $this->tmpl->assign('data', $data->data);
84+ $this->tmpl->assign('domain', $domain->data);
8185 $this->tmpl->render('index');
8286 exit();
8387
@@ -388,7 +388,7 @@
388388 if ($method === 'POST' || $method === 'PUT') {
389389 if (!empty($this->postRaw)) {
390390 $httpData = $this->postRaw;
391- } elseif (!empty($this->postFields)) {
391+ } else if (!empty($this->postFields)) {
392392 $httpData = http_build_query($this->postFields);
393393 if (!isset($this->headers['Content-Type'])) {
394394 $this->headers['Content-Type'] = 'application/x-www-form-urlencoded';
@@ -52,9 +52,9 @@
5252 private string $ip = '';
5353 private int $resellerId = 0;
5454 private int $lastAuth = 0;
55- // private string $BASEURL = 'https://api.openprovider.eu/v1beta';
56- private string $BASEURL = DEBUG_MODE ? 'http://api.sandbox.openprovider.nl:8480/v1beta'
57- : 'https://api.openprovider.eu/v1beta';
55+ private string $BASEURL = 'https://api.openprovider.eu/v1beta';
56+ // private string $BASEURL = DEBUG_MODE ? 'http://api.sandbox.openprovider.nl:8480/v1beta'
57+ // : 'https://api.openprovider.eu/v1beta';
5858
5959 public function __construct() {
6060 if (!OPENPROVIDER_ENABLED) return;
@@ -64,6 +64,10 @@
6464 $this->cache = new Cache($this->cacheDir);
6565 }
6666
67+ public function deleteCache(string $name): void {
68+ $this->cache->murder($name);
69+ }
70+
6771 /**
6872 * トークンの受け取り。
6973 * このライブリリーを使ったら、一回「login()」を実行する事が必須となります。
@@ -147,7 +151,6 @@
147151
148152 /**
149153 * ドメイン一覧。
150- * @todo テスト
151154 *
152155 * @return Result 結果。
153156 */
@@ -157,11 +160,12 @@
157160 $cache = $this->cache->get($cacheName);
158161 if ($this->cache->resurrect($cache, $query)) return Result::Success('', $cache);
159162
160- $curl = $this->setupCurl('/domains');
163+ $uri = "/domains?".http_build_query($query, '', '&', PHP_QUERY_RFC3986);
164+ $curl = $this->setupCurl($uri);
161165 $res = $this->curlResult($curl);
162- if (isset($res['data']['results'])) {
166+ if (isset($res->data['data']['results'])) {
163167 $this->cache->set($cacheName, $res->data);
164- return Result::Success('', $res['data']['results']);
168+ return Result::Success('', $res->data['data']['results']);
165169 }
166170
167171 return Result::Error('ドメインの確認に失敗。');
@@ -213,7 +217,8 @@
213217 'autorenew' => $autorenew,
214218 ];
215219
216- $curl = $this->setupCurl('/domains/', 'POST', $payload);
220+ $uri = '/domains/';
221+ $curl = $this->setupCurl($uri, 'POST', $payload);
217222 kys('TODO');
218223 $res = $this->curlResult($curl);
219224 if (isset($res['data'])) return Result::Success('', $res);
@@ -250,7 +255,8 @@
250255 'with_price' => $with_price,
251256 ];
252257
253- $curl = $this->setupCurl('/domains/check', 'POST', $payload);
258+ $uri = '/domains/check';
259+ $curl = $this->setupCurl($uri, 'POST', $payload);
254260 $res = $this->curlResult($curl);
255261 if (isset($res->data['data']['results'])) return Result::Success('', $res->data['data']['results']);
256262
@@ -267,7 +273,8 @@
267273 public function suggestDomainname(array $payload = []): Result {
268274 if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。');
269275
270- $curl = $this->setupCurl('/domains/suggest-name', 'POST', $payload);
276+ $uri = '/domains/suggest-name';
277+ $curl = $this->setupCurl($uri, 'POST', $payload);
271278 $res = $this->curlResult($curl);
272279 if (isset($res->data['data']['results'])) {
273280 return Result::Success('ドメインを勧められる事に成功。', $res->data['data']['results']);
@@ -286,7 +293,8 @@
286293 public function tradeDomainname(array $payload = []): Result {
287294 if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。');
288295
289- $curl = $this->setupCurl('/domains/trade', 'POST', $payload);
296+ $uri = '/domains/trade';
297+ $curl = $this->setupCurl($uri, 'POST', $payload);
290298 $res = $this->curlResult($curl);
291299 if (isset($res->data['data']['results'])) {
292300 $this->cache->murder('listdomains');
@@ -306,7 +314,8 @@
306314 public function transferDomainname(array $payload = []): Result {
307315 if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。');
308316
309- $curl = $this->setupCurl('/domains/transfer', 'POST', $payload);
317+ $uri = '/domains/transfer';
318+ $curl = $this->setupCurl($uri, 'POST', $payload);
310319 $res = $this->curlResult($curl);
311320 if (isset($res->data['data']['results'])) {
312321 $this->cache->murder('listdomains');
@@ -2084,7 +2093,6 @@
20842093
20852094 /**
20862095 * リセラーの受け取り
2087- * @todo テスト
20882096 *
20892097 * @param array $query 検索クエリー
20902098 * @return Result
@@ -2160,7 +2168,6 @@
21602168
21612169 /**
21622170 * 統計の受け取り
2163- * @todo テスト
21642171 *
21652172 * @return Result
21662173 */
@@ -1,5 +1,5 @@
11 {@ include(common/header) @}
2- <h1>{{ $description }}</h1>
2+ <h1>お帰り、{{ $data['data']['name']['full_name'] }}様</h1>
33 <ul>
44 <li>請求</li>
55 <ul>
@@ -23,4 +23,39 @@
2323 <li><a href="/openprovider/listdnszones">DNSゾーン一覧</a></li>
2424 </ul>
2525 </ul>
26+
27+ <div class="op-grid">
28+ <div class="op-grid-item">
29+ <div style="color: #00bb00; font-size: 24px;">利用可能な残高: € {{ $data['data']['balance'] }}</div>
30+ <div style="color: #777; font-size: 11px;">使用残高: € {{ $data['data']['reserved_balance'] }}</div>
31+ </div>
32+ <div class="op-grid-item">
33+ <a href="/openprovider/listdomains">ドメイン名</a>数:{{ $data['data']['statistics']['domain']['by_status']['ACT'] }}
34+ </div>
35+ <div class="op-grid-item">
36+ <a href="/openprovider/listsslorders">SSL証明書</a>数:{{ $data['data']['statistics']['ssl']['by_status']['ACT'] }}
37+ </div>
38+ <div class="op-grid-item">
39+ <a href="/openprovider/listlicenses">ライセンス</a>数:{{ $data['data']['statistics']['license']['total'] }}
40+ </div>
41+ </div>
42+
43+ <h2>間もなく更新が必要なドメイン名</h2>
44+ <table>
45+ <thead>
46+ <tr>
47+ <th>ドメイン名</th>
48+ <th>更新日</th>
49+ </tr>
50+ </thead>
51+ <tbody>
52+{@ foreach ($domain as $d) @}
53+ <tr>
54+{$ $dom = $d['domain']['name'].'.'.$d['domain']['extension'] $}
55+ <td><a href="/openprovider/getdomain/{{ $dom }}">{{ $dom }}</a></td>
56+ <td>{{ $d['renewal_date'] }}</td>
57+ </tr>
58+{@ endforeach @}
59+ </tbody>
60+ </table>
2661 {@ include(common/footer) @}