mirror of
https://github.com/ProxyPanel/ProxyPanel.git
synced 2026-04-03 02:58:42 +00:00
功能添加/重置 1. 商品限购功能重置 - 商品为0时下架 2. 添加用户付费自行重置套餐流量 - 可规定价格让用户重置或不开启功能 3. 邮箱注册增加白名单 - 白名单为用户只能使用固定邮箱后缀注册 4. 节点TCP和ICMP检测 - 节点阻断检测 5. 优惠券规则添加 - 满XX元抵XX,或者满XX元打折 页面添加与修改 1. 节点信息简化 2. 系统页面排版优化 3. 注册页面全新的TOS和AUP显示 4. 添加订阅记录查询页面 5. 人性化删除确认页 BUG修复和优化 1. 流量重置日相关代码统一 2. 众多代码简化 3. auth相关css导致的宽度变动bug修复
168 lines
3.6 KiB
PHP
168 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Models\ReferralLog;
|
|
use App\Http\Models\SensitiveWords;
|
|
use App\Http\Models\UserBalanceLog;
|
|
use Exception;
|
|
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
|
use Illuminate\Foundation\Bus\DispatchesJobs;
|
|
use Illuminate\Foundation\Validation\ValidatesRequests;
|
|
use Illuminate\Routing\Controller as BaseController;
|
|
|
|
class Controller extends BaseController
|
|
{
|
|
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
|
|
|
// 生成随机密码
|
|
public function makePasswd()
|
|
{
|
|
exit(makeRandStr());
|
|
}
|
|
|
|
// 生成VmessId
|
|
public function makeVmessId()
|
|
{
|
|
exit(createGuid());
|
|
}
|
|
|
|
// 生成网站安全码
|
|
public function makeSecurityCode()
|
|
{
|
|
exit(strtolower(makeRandStr(8)));
|
|
}
|
|
|
|
// 类似Linux中的tail命令
|
|
public function tail($file, $n, $base = 5)
|
|
{
|
|
$fileLines = $this->countLine($file);
|
|
if($fileLines < 15000){
|
|
return FALSE;
|
|
}
|
|
|
|
$fp = fopen($file, "r+");
|
|
assert($n > 0);
|
|
$pos = $n+1;
|
|
$lines = [];
|
|
while(count($lines) <= $n){
|
|
try{
|
|
fseek($fp, -$pos, SEEK_END);
|
|
} catch(Exception $e){
|
|
fseek(0);
|
|
break;
|
|
}
|
|
|
|
$pos *= $base;
|
|
while(!feof($fp)){
|
|
array_unshift($lines, fgets($fp));
|
|
}
|
|
}
|
|
|
|
return array_slice($lines, 0, $n);
|
|
}
|
|
|
|
/**
|
|
* 计算文件行数
|
|
*/
|
|
public function countLine($file)
|
|
{
|
|
$fp = fopen($file, "r");
|
|
$i = 0;
|
|
while(!feof($fp)){
|
|
//每次读取2M
|
|
if($data = fread($fp, 1024*1024*2)){
|
|
//计算读取到的行数
|
|
$num = substr_count($data, "\n");
|
|
$i += $num;
|
|
}
|
|
}
|
|
|
|
fclose($fp);
|
|
|
|
return $i;
|
|
}
|
|
|
|
/**
|
|
* 记录余额操作日志
|
|
*
|
|
* @param int $userId 用户ID
|
|
* @param string $oid 订单ID
|
|
* @param int $before 记录前余额
|
|
* @param int $after 记录后余额
|
|
* @param int $amount 发生金额
|
|
* @param string $desc 描述
|
|
*
|
|
* @return int
|
|
*/
|
|
public function addUserBalanceLog($userId, $oid, $before, $after, $amount, $desc = '')
|
|
{
|
|
$log = new UserBalanceLog();
|
|
$log->user_id = $userId;
|
|
$log->order_id = $oid;
|
|
$log->before = $before;
|
|
$log->after = $after;
|
|
$log->amount = $amount;
|
|
$log->desc = $desc;
|
|
$log->created_at = date('Y-m-d H:i:s');
|
|
|
|
return $log->save();
|
|
}
|
|
|
|
/**
|
|
* 添加返利日志
|
|
*
|
|
* @param int $userId 用户ID
|
|
* @param int $refUserId 返利用户ID
|
|
* @param int $oid 订单ID
|
|
* @param int $amount 发生金额
|
|
* @param int $refAmount 返利金额
|
|
*
|
|
* @return int
|
|
*/
|
|
public function addReferralLog($userId, $refUserId, $oid, $amount, $refAmount)
|
|
{
|
|
$log = new ReferralLog();
|
|
$log->user_id = $userId;
|
|
$log->ref_user_id = $refUserId;
|
|
$log->order_id = $oid;
|
|
$log->amount = $amount;
|
|
$log->ref_amount = $refAmount;
|
|
$log->status = 0;
|
|
|
|
return $log->save();
|
|
}
|
|
|
|
// 获取敏感词
|
|
public function sensitiveWords($type)
|
|
{
|
|
return SensitiveWords::query()->where('type',$type)->get()->pluck('words')->toArray();
|
|
}
|
|
|
|
// 将Base64图片转换为本地图片并保存
|
|
function base64ImageSaver($base64_image_content)
|
|
{
|
|
// 匹配出图片的格式
|
|
if(preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
|
|
$type = $result[2];
|
|
|
|
$directory = date('Ymd');
|
|
$path = '/assets/images/qrcode/'.$directory.'/';
|
|
if(!file_exists(public_path($path))){ // 检查是否有该文件夹,如果没有就创建,并给予最高权限
|
|
mkdir(public_path($path), 0755, TRUE);
|
|
}
|
|
|
|
$fileName = makeRandStr(18, TRUE).".{$type}";
|
|
if(file_put_contents(public_path($path.$fileName), base64_decode(str_replace($result[1], '', $base64_image_content)))){
|
|
chmod(public_path($path.$fileName), 0744);
|
|
|
|
return $path.$fileName;
|
|
}else{
|
|
return '';
|
|
}
|
|
}else{
|
|
return '';
|
|
}
|
|
}
|
|
}
|