cms-manage/plugins/assets/controller/DomainController.php

233 lines
7.1 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace plugins\assets\controller;
use app\controller\backend\BaseController;
use app\model\Website;
use plugins\assets\model\AssetsDomain;
use plugins\assets\validate\AssetsDomainValidate;
use think\exception\ValidateException;
class DomainController extends BaseController
{
public function index()
{
$param = $this->request->only([
'limit' => 10,
]);
$where = [];
//获取当前站点里的域名,添加进域名列表
$websiteModel = new Website();
$domainModel = new AssetsDomain();
$siteListRes = $websiteModel->getAllCustomData([], 'id asc', 'id, domain, title');
$siteList = $siteListRes['data'];
$domainList = [];
$insertData = [];
foreach ($siteList as $value) {
$domainList[$value['domain']] = $value;
if ($domainModel->isExist(['domain' => $value['domain']])) {
continue;
}
$insertData[] = [
'domain' => $value['domain'],
'desc' => $value['title'],
'sort' => 1000
];
}
$domainModel->insertAll($insertData);
$list = $domainModel->getList($where, ['admin'], $param['limit'], 'id asc, sort desc', '*');
$res = pageReturn($list);
foreach ($res['data'] as &$v) {
if (isset($domainList[$v['domain']])) {
$v['domain'] .= '(本系统域名)';
}
}
return json($res);
}
public function add()
{
$param = $this->request->post([
'domain' => '',
'desc' => '',
'holder_name' => '',
'registrants' => '',
'price' => '',
'status' => '',
'register_date' => '',
'expire_date' => '',
]);
try {
validate(AssetsDomainValidate::class)->scene('save')->check($param);
} catch (ValidateException $e) {
return jsonReturn(-1, $e->getError());
}
$domainModel = new AssetsDomain();
if ($domainModel->isExist(['domain' => $param['domain']])) {
return jsonReturn(-2, lang('域名已经存在'));
}
if (empty($param['register_date'])) unset($param['register_date']);
if (empty($param['expire_date'])){
unset($param['expire_date']);
} else {
$day = (strtotime($param['expire_date']) - time()) / (60*60*24);
if ($day > 0) {
$param['hint'] = lang('还有').$day.lang("天过期");
} else {
$day = abs($day);
$param['hint'] = lang('域名已过期').$day.lang("");
}
}
$param['seller_id'] = $this->admin['seller_id'];
$res = $domainModel->add($param);
return json($res);
}
public function edit()
{
$param = $this->request->post([
'id' => 0,
'domain' => '',
'desc' => '',
'holder_name' => '',
'registrants' => '',
'price' => '',
'status' => '',
'register_date' => '',
'expire_date' => '',
]);
try {
validate(AssetsDomainValidate::class)->scene('update')->check($param);
} catch (ValidateException $e) {
return jsonReturn(-1, $e->getError());
}
$domainModel = new AssetsDomain();
if ($domainModel->isExist([
['id', '<>', $param['id']],
['domain', '=', $param['domain']]
])) {
return jsonReturn(-2, lang('域名已经存在'));
}
if (empty($param['register_date'])) unset($param['register_date']);
if (empty($param['expire_date'])){
unset($param['expire_date']);
} else {
$day = (strtotime($param['expire_date']) - time()) / (60*60*24);
if ($day > 0) {
$param['hint'] = lang('还有').$day.lang("天过期");
} else {
$day = abs($day);
$param['hint'] = lang('域名已过期').$day.lang("");
}
}
$res = $domainModel->edit(['id' => $param['id']], $param);
return json($res);
}
public function del()
{
$param = $this->request->post([
'id' => 0,
]);
try {
validate(AssetsDomainValidate::class)->scene('del')->check($param);
} catch (ValidateException $e) {
return jsonReturn(-1, $e->getError());
}
$domainModel = new AssetsDomain();
$res = $domainModel->where(['id' => $param['id']])->delete();
if ($res === false) {
return jsonReturn(-1, lang('删除失败'));
}
return jsonReturn(0, lang('删除成功'));
}
public function whois()
{
$param = $this->request->post([
'id' => 0,
]);
$domainModel = new AssetsDomain();
$domain = $domainModel->where('id', $param['id'])->value('domain');
if (empty($domain)) {
return jsonReturn(-1, lang('没找到域名数据'));
}
$this->execWhois($domain);
return jsonReturn(0, lang('执行成功!'));
}
public function execWhois($domain)
{
$domainModel = new AssetsDomain();
$id = $domainModel->where('domain', $domain)->value('id');
$domain = url_root($domain);
// 执行命令
$res = `whois {$domain}`;
$domainModel->where('id', $id)->update(['whois' => $res]);
$infoArr = explode("\n", $res);
$newInfo = [];
foreach ($infoArr as $value) {
$info = explode(': ', $value);
if (!isset($info[1])) continue;
$newInfo[$info[0]] = trim($info[1]);
}
if (count($newInfo) < 5) {
// 没查到
return jsonReturn(-1, lang('执行失败whois查询失败'));
}
$expire_date = null;
if (isset($newInfo['Registry Expiry Date'])) {
$expire_date = date('Y-m-d H:i:s', strtotime($newInfo['Registry Expiry Date']));
}
if (isset($newInfo['Registrar Registration Expiration Date'])) {
$expire_date = date('Y-m-d H:i:s', strtotime($newInfo['Registrar Registration Expiration Date']));
}
$hint = '';
if (!empty($expire_date)) {
$day = (strtotime($expire_date) - time()) / (60*60*24);
$day = intval($day);
if ($day > 0) {
$hint = lang('还有').$day.lang("天过期");
} else {
$day = abs($day);
$hint = lang('域名已过期').$day.lang("");
}
}
$updateData = [
'status' => $newInfo['Domain Status'] ?? '',
'register_date' => isset($newInfo['Creation Date']) ? date('Y-m-d H:i:s', strtotime($newInfo['Creation Date'])) : null,
'expire_date' => $expire_date,
'holder_name' => $newInfo['Registrant Organization'] ?? '',
'registrants' => $newInfo['Registrar'] ?? '',
'hint' => $hint,
];
$domainModel->where('id', $id)->update($updateData);
}
}