Files
YwxAppThink/addon/haonav/model/FavoriteShare.php
T

71 lines
2.1 KiB
PHP

<?php
// +----------------------------------------------------------------------
// | YwxApp [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: ywxapp<admin@ywxapp.cn>
// +----------------------------------------------------------------------
declare(strict_types=1);
namespace addon\haonav\model;
use ywxapp\model\BaseModel;
/**
* 用户收藏夹分享配置(一个用户一条)
*
* 用户可把「我的导航」生成一个只读分享链接,他人凭 token 访问 shared 页浏览,
* enabled=1 才对外可见;token 可重置(旧链接立即失效)。
*
* @mixin \think\Model
*/
class FavoriteShare extends BaseModel
{
protected function getOptions(): array
{
return [
'strict' => false,
'name' => 'haonav_favorite_shares',
'autoRelation' => [],
'createTime' => 'create_at',
'updateTime' => 'update_at',
'dateFormat' => 'Y-m-d H:i:s',
];
}
/**
* 生成一个随机分享令牌(16位十六进制)
*/
public static function genToken(): string
{
try {
return bin2hex(random_bytes(8));
} catch (\Throwable $e) {
return substr(md5(uniqid((string)mt_rand(), true)), 0, 16);
}
}
/**
* 取当前用户的分享配置,无则创建一条(默认关闭、已生成 token)
*/
public static function forUser(int $uid): FavoriteShare
{
$row = self::where('user_id', $uid)->find();
if (!$row) {
$row = new self();
$row->user_id = $uid;
$row->token = self::genToken();
$row->title = '我的导航收藏夹';
$row->enabled = 0;
$row->views = 0;
$row->save();
} elseif (empty($row->token)) {
$row->token = self::genToken();
$row->save();
}
return $row;
}
}