完善项目描述

This commit is contained in:
hdm 2021-07-26 17:41:59 +08:00
parent dcd1734132
commit 2731fee4df
62 changed files with 1120 additions and 685 deletions

View File

@ -30,3 +30,8 @@ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
勾股CMS遵循Apache2开源协议发布并提供免费使用。
版权所有Copyright © 2021 by gouguCMS (https://www.gougucms.com)
All rights reserved。

View File

@ -1,17 +1,23 @@
# 勾股CMS
## 链接
[![勾股CMS](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://gitee.com/gougucms/gougucms/)
[![勾股CMS](https://img.shields.io/badge/GouguCMS-1.0.0-brightgreen.svg)](https://gitee.com/gougucms/gougucms/)
[![star](https://gitee.com/gougucms/gougucms/badge/star.svg?theme=dark)](https://gitee.com/gougucms/gougucms/stargazers)
[![fork](https://gitee.com/gougucms/gougucms/badge/fork.svg?theme=dark)](https://gitee.com/gougucms/gougucms/members)
### 链接
- 勾股CMShttps://www.gougucms.com
- giteehttps://gitee.com/gougucms/gougucms.git
## 相关链接
### 相关链接
- [开源项目系列之勾股CMS](https://www.gougucms.com)
- [开源项目系列之勾股博客](https://blog.gougucms.com)
### 介绍
1. 勾股CMS是一套基于ThinkPHP6 + Layui + MySql打造的轻量级、高性能极速后台开发框架。
2. 系统后台各管理模块,一目了然,操作简单;通用型的后台权限管理框架,前后台用户的操作记录覆盖跟踪,紧随潮流、极低门槛、开箱即用。
3. 系统易于功能扩展,代码维护,方便二次开发,帮助开发者简单高效降低二次开发的成本,满足专注业务深度开发的需求。
- 勾股CMS是一套基于ThinkPHP6 + Layui + MySql打造的轻量级、高性能极速后台开发框架。
- 系统后台各管理模块,一目了然,操作简单;通用型的后台权限管理框架,前后台用户的操作记录覆盖跟踪,紧随潮流、极低门槛、开箱即用。
- 系统易于功能扩展,代码维护,方便二次开发,帮助开发者简单高效降低二次开发的成本,满足专注业务深度开发的需求。
- 可去前台版权,真正意义的永久免费,可商用的后台系统。
### 目录结构
@ -77,14 +83,16 @@ www 系统部署目录(或者子目录)
### 安装教程
1. 勾股CMS推荐你使用阿里云和腾讯云服务器
一、勾股CMS推荐你使用阿里云和腾讯云服务器
阿里云服务器官方长期折扣优惠地址: (https://www.aliyun.com/activity/daily/bestoffer?userCode=dmrcx154)
腾讯云服务器官方长期折扣优惠地址: (https://curl.qcloud.com/PPEgI0oV)
2. 服务器运行环境要求
二、服务器运行环境要求。
~~~
PHP >= 7.1
Mysql >= 5.5.0 (需支持innodb引擎)
Apache 或 Nginx
@ -92,41 +100,56 @@ www 系统部署目录(或者子目录)
MBstring PHP Extension
CURL PHP Extension
Composer (用于管理第三方扩展包)
~~~
3. 完整包安装
三、系统安装
前往官网下载页面 (https://www.gougucms.com/) 下载完整包解压到你的项目目录
添加站点并绑定域名到项目中的public目录为运行目录
访问 http://www.yoursite.com/install/index 进行安装
**方式一:完整包安装**
4. 命令行安装
第一步:前往官网下载页面 (https://www.gougucms.com) 下载完整包解压到你的项目目录
强烈建议使用命令行安装因为采用命令行安装的方式可以和勾股CMS随时保持更新同步。使用命令行安装请提前准备好Git、Composer、Linux下勾股CMS的安装请使用以下命令进行安装。
克隆勾股CMS到你本地
第二步添加虚拟主机并绑定到项目的public目录
第三步:访问 http://www.yoursite.com/install/index 进行安装
**方式二:命令行安装(推荐)**
推荐使用命令行安装因为采用命令行安装的方式可以和勾股CMS随时保持更新同步。使用命令行安装请提前准备好Git、Composer。
Linux下勾股CMS的安装请使用以下命令进行安装。
第一步克隆勾股CMS到你本地
git clone https://gitee.com/gougucms/gougucms.git
进入目录
第二步:进入目录
cd gougucms
下载PHP依赖包composer的版本最好是2.0.8版本否则可能下载PHP依赖包失败composer降级composer self-update 2.0.8
第三步下载PHP依赖包
composer install
注意composer的版本最好是2.0.8版本否则可能下载PHP依赖包失败composer降级composer self-update 2.0.8
第四步添加虚拟主机并绑定到项目的public目录
添加虚拟主机并绑定到项目的public目录
访问 http://www.yoursite.com/install/index 进行安装
第五步:访问 http://www.yoursite.com/install/index 进行安装
### 常见问题
1. 安装失败可能存在php配置文件禁止了putenv 和 proc_open函数。解决方法查找php.ini文件位置打开php.ini搜索 disable_functions 项看是否禁用了putenv 和 proc_open函数。如果在禁用列表里移除putenv proc_open然后退出重启php即可。
2. 如果安装后打开页面提示404错误请检查服务器伪静态配置宝塔伪静态请配置使用thinkphp规则
3. 如果提示当前权限不足无法写入配置文件config/database.php请检查database.php是否可读还有可能是当前安装程序无法访问父目录请检查PHP的open_basedir配置
4. 如果composer install失败请尝试在命令行进行切换配置到国内源命令如下composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
5. 如果composer install失败请尝试composer降级composer self-update 2.0.8
6. 访问 http://www.yoursite.com/install/index请注意查看伪静态请配置是否设置了thinkphp规则
7. 遇到问题请到QQ群24641076 反馈
2. 如果安装后打开页面提示404错误请检查服务器伪静态配置如果是宝塔面板网站伪静态请配置使用thinkphp规则。
3. 如果提示当前权限不足无法写入配置文件config/database.php请检查database.php是否可读还有可能是当前安装程序无法访问父目录请检查PHP的open_basedir配置。
4. 如果composer install失败请尝试在命令行进行切换配置到国内源命令如下composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/。
5. 如果composer install失败请尝试composer降级composer self-update 2.0.8。
6. 访问 http://www.yoursite.com/install/index 请注意查看伪静态请配置是否设置了thinkphp规则。
7. 遇到问题请到QQ群24641076 反馈。
### 截图预览
![输入图片说明](https://images.gitee.com/uploads/images/2021/0225/002705_51fd21e2_8633021.png "p1.png")

View File

@ -1,10 +1,17 @@
<?php
declare(strict_types = 1);
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin;
use think\App;
use think\exception\HttpResponseException;
use think\facade\Request;
use think\App;
/**
* 控制器基础类
@ -42,7 +49,7 @@ abstract class BaseController
*/
public function __construct(App $app)
{
$this->app = $app;
$this->app = $app;
$this->request = $this->app->request;
// 控制器初始化
@ -55,11 +62,11 @@ abstract class BaseController
$this->param = $this->request->param();
}
//
// 以下为新增,为了使用旧版的 success error redirect 跳转 start
//
/**
//
// 以下为新增,为了使用旧版的 success error redirect 跳转 start
//
/**
* 操作成功跳转的快捷方法
* @access protected
* @param mixed $msg 提示信息
@ -79,14 +86,14 @@ abstract class BaseController
$result = [
'code' => 1,
'msg' => $msg,
'msg' => $msg,
'data' => $data,
'url' => $url,
'url' => $url,
'wait' => $wait,
];
$type = $this->getResponseType();
if ($type == 'html'){
if ($type == 'html') {
$response = view($this->app->config->get('app.dispatch_success_tmpl'), $result);
} else if ($type == 'json') {
$response = json($result);
@ -114,14 +121,14 @@ abstract class BaseController
$result = [
'code' => 0,
'msg' => $msg,
'msg' => $msg,
'data' => $data,
'url' => $url,
'url' => $url,
'wait' => $wait,
];
$type = $this->getResponseType();
if ($type == 'html'){
if ($type == 'html') {
$response = view($this->app->config->get('app.dispatch_error_tmpl'), $result);
} else if ($type == 'json') {
$response = json($result);
@ -143,7 +150,7 @@ abstract class BaseController
$response = Response::create($url, 'redirect');
if (is_integer($params)) {
$code = $params;
$code = $params;
$params = [];
}
@ -161,8 +168,8 @@ abstract class BaseController
{
return $this->request->isJson() || $this->request->isAjax() ? 'json' : 'html';
}
//
// 以上为新增,为了使用旧版的 success error redirect 跳转 end
//
//
// 以上为新增,为了使用旧版的 success error redirect 跳转 end
//
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
@ -32,10 +38,9 @@ class Admin extends BaseController
$item->last_login_time = empty($item->last_login_time) ? '-' : date('Y-m-d H:i', $item->last_login_time);
});
return table_assign(1, '', $admin);
}
else{
} else {
return view();
}
}
}
//添加
@ -254,9 +259,8 @@ class Admin extends BaseController
$content->offsetSet($k, $data);
}
return table_assign(1, '', $content);
}
else{
} else {
return view();
}
}
}
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
@ -117,7 +123,7 @@ class Api extends BaseController
$keyword = get_keywords();
return to_assign(1, '', $keyword);
}
//获取话题
public function get_topics_cate()
{
@ -208,15 +214,16 @@ class Api extends BaseController
}
// 测试邮件发送
public function email_test(){
public function email_test()
{
$sender = get_params('email');
//检查是否邮箱格式
if (!is_email($sender)) {
return to_assign(0, '测试邮箱码格式有误');
}
$email_config = \think\facade\Db::name('config')
->where('name', 'email')
->find();
->where('name', 'email')
->find();
$config = unserialize($email_config['content']);
$content = $config['template'];
//所有项目必须填写
@ -224,7 +231,7 @@ class Api extends BaseController
return to_assign(0, '请完善邮件配置信息!');
}
$send = send_email($sender, '测试邮件',$content);
$send = send_email($sender, '测试邮件', $content);
if ($send) {
return to_assign(1, '邮件发送成功!');
} else {
@ -240,7 +247,7 @@ class Api extends BaseController
->order('id desc')
->limit(10)
->select()->toArray();
$res['data']=$content;
$res['data'] = $content;
return table_assign(1, '', $res);
}
@ -252,10 +259,10 @@ class Api extends BaseController
->order('id desc')
->limit(10)
->select()->toArray();
foreach($list as $key=>$val){
$list[$key]['last_login_time']=date('Y-m-d :h:m:s',$val['last_login_time']);
foreach ($list as $key => $val) {
$list[$key]['last_login_time'] = date('Y-m-d :h:m:s', $val['last_login_time']);
}
$res['data']=$list;
$res['data'] = $list;
return table_assign(1, '', $res);
}
@ -270,26 +277,26 @@ class Api extends BaseController
->order('a.id desc')
->limit(10)
->select()->toArray();
foreach($list as $key=>$val){
$list[$key]['create_time']=date('Y-m-d :H:i',$val['create_time']);
}
$res['data']=$list;
return table_assign(1, '', $res);
foreach ($list as $key => $val) {
$list[$key]['create_time'] = date('Y-m-d :H:i', $val['create_time']);
}
$res['data'] = $list;
return table_assign(1, '', $res);
}
//系统操作日志
public function log_list()
{
return view('admin/log_list');
{
return view('admin/log_list');
}
//获取系统操作日志
//获取系统操作日志
public function get_log_list()
{
$param=get_params();
{
$param = get_params();
$log = new AdminLog();
$content = $log->get_log_list($param);
return table_assign(1,'',$content);
}
return table_assign(1, '', $content);
}
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
@ -17,15 +23,14 @@ class Conf extends BaseController
$param = get_params();
$where = array();
$where[] = ['status', '>=', 0];
$rows = empty($param['limit']) ? get_config(app.page_size) : $param['limit'];
$content = Db::name('config')
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$content = Db::name('Config')
->where($where)
->paginate($rows, false, ['query' => $param]);
return table_assign(1, '', $content);
}
else{
} else {
return view();
}
}
}
//添加
@ -33,7 +38,7 @@ class Conf extends BaseController
{
$id = empty(get_params('id')) ? 0 : get_params('id');
if ($id > 0) {
$config = Db::name('config')->where(['id' => $id])->find();
$config = Db::name('Config')->where(['id' => $id])->find();
View::assign('config', $config);
}
View::assign('id', $id);
@ -54,12 +59,18 @@ class Conf extends BaseController
if (!empty($param['id']) && $param['id'] > 0) {
$param['update_time'] = time();
$res = Db::name('config')->strict(false)->field(true)->update($param);
if($res) add_log('edit',$param['id'],$param);
if ($res) {
add_log('edit', $param['id'], $param);
}
return to_assign();
} else {
$param['create_time'] = time();
$insertId = Db::name('config')->strict(false)->field(true)->insertGetId($param);
if($insertId) add_log('add',$insertId,$param);
$insertId = Db::name('Config')->strict(false)->field(true)->insertGetId($param);
if ($insertId) {
add_log('add', $insertId, $param);
}
return to_assign();
}
}
@ -71,8 +82,8 @@ class Conf extends BaseController
$data['status'] = '-1';
$data['id'] = $id;
$data['update_time'] = time();
if (Db::name('config')->update($data) !== false) {
add_log('delete',$id,$data);
if (Db::name('Config')->update($data) !== false) {
add_log('delete', $id, $data);
return to_assign(1, "删除成功");
} else {
return to_assign(0, "删除失败");
@ -83,12 +94,12 @@ class Conf extends BaseController
public function edit()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
$conf = Db::name('config')->where('id',$id)->find();
$config=[];
if($conf['content']){
$conf = Db::name('Config')->where('id', $id)->find();
$config = [];
if ($conf['content']) {
$config = unserialize($conf['content']);
}
return view($conf['name'], ['id'=>$id,'config' => $config]);
return view($conf['name'], ['id' => $id, 'config' => $config]);
}
//提交添加
public function conf_submit()
@ -98,10 +109,12 @@ class Conf extends BaseController
$data['content'] = serialize($param);
$data['update_time'] = time();
$data['id'] = $param['id'];
$res = Db::name('config')->strict(false)->field(true)->update($data);
$conf = Db::name('config')->where('id',$param['id'])->find();
$res = Db::name('Config')->strict(false)->field(true)->update($data);
$conf = Db::name('Config')->where('id', $param['id'])->find();
clear_cache('system_config' . $conf['name']);
if($res) add_log('edit',$param['id'],$param);
if ($res) {
add_log('edit', $param['id'], $param);
}
return to_assign();
}
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
@ -11,13 +17,14 @@ use think\facade\View;
class Database extends BaseController
{
protected $db = '', $datadir;
function initialize(){
public function initialize()
{
parent::initialize();
$this->config=array(
'path' => './backup/', // 数据库备份路径
'part' => 20971520, // 数据库备份卷大小
'compress' => 0, // 数据库备份文件是否启用压缩 0不压缩 1 压缩
'level' => 9 // 数据库备份文件压缩级别 1普通 4 一般 9最高
$this->config = array(
'path' => './backup/', // 数据库备份路径
'part' => 20971520, // 数据库备份卷大小
'compress' => 0, // 数据库备份文件是否启用压缩 0不压缩 1 压缩
'level' => 9, // 数据库备份文件压缩级别 1普通 4 一般 9最高
);
$this->db = new Backup($this->config);
}
@ -36,9 +43,9 @@ class Database extends BaseController
$list[$k]['data_length'] = format_bytes($v['data_length']);
}
// 提示信息
$dataTips = '数据库中共有<strong> ' . count($list) . '</strong> 张表,共计 <strong>' . format_bytes($total) .'</strong>大小。';
$data['data']=$list;
return table_assign(1, $dataTips,$data);
$dataTips = '数据库中共有<strong> ' . count($list) . '</strong> 张表,共计 <strong>' . format_bytes($total) . '</strong>大小。';
$data['data'] = $list;
return table_assign(1, $dataTips, $data);
}
return view();
}
@ -60,12 +67,13 @@ class Database extends BaseController
}
// 优化
public function optimize() {
public function optimize()
{
$tables = get_params('id');
if (empty($tables)) {
return to_assign(1,'请选择要优化的表!');
return to_assign(1, '请选择要优化的表!');
}
$tables = explode(',',$tables);
$tables = explode(',', $tables);
if ($this->db->optimize($tables)) {
add_log('edit');
return to_assign(1, '数据表优化成功!');
@ -75,12 +83,13 @@ class Database extends BaseController
}
// 修复
public function repair() {
public function repair()
{
$tables = get_params('id');
if (empty($tables)) {
return to_assign(0,'请选择要修复的表!');
return to_assign(0, '请选择要修复的表!');
}
$tables = explode(',',$tables);
$tables = explode(',', $tables);
if ($this->db->repair($tables)) {
add_log('edit');
return to_assign(1, '数据表修复成功!');
@ -89,24 +98,22 @@ class Database extends BaseController
}
}
// ===========================
// 还原列表
public function backuplist()
{
// 数据信息
$list = $this->db->fileList();
$list = $this->db->fileList();
$listNew = [];
$indx=0;
$indx = 0;
foreach ($list as $k => $v) {
$listNew[$indx]['time'] = $k;
$listNew[$indx]['data'][] = $v;
$indx++;
// $listNew[$k]['list'] = $list[$k];
// $listNew[$k]['list'] = $list[$k];
}
$list = $listNew;
array_multisort(array_column($list, 'time'), SORT_DESC, $list);
return view('',['list' => $list]);
array_multisort(array_column($list, 'time'), SORT_DESC, $list);
return view('', ['list' => $list]);
}
// 执行还原数据库操作
@ -115,7 +122,7 @@ class Database extends BaseController
$list = $this->db->getFile('timeverif', $id);
$this->db->setFile($list)->import(1);
add_log('save');
return to_assign(1,'还原成功!');
return to_assign(1, '还原成功!');
}
// 下载
@ -123,31 +130,31 @@ class Database extends BaseController
{
$file_name = $name; //得到文件名
header("Content-type:text/html;charset=utf-8");
$file_name = iconv("utf-8","gb2312",$file_name); // 转换编码
$file_sub_path = $this->config['path']; //确保文件在这个路径下面,换成你文件所在的路径
$file_name = iconv("utf-8", "gb2312", $file_name); // 转换编码
$file_sub_path = $this->config['path']; //确保文件在这个路径下面,换成你文件所在的路径
$file_path = $file_sub_path . $file_name;
# 将反斜杠 替换成正斜杠
$file_path = str_replace('\\','/',$file_path);
if(!file_exists($file_path)){
$this->error($file_path);exit; //如果提示这个错误,很可能你的路径不对,可以打印$file_sub_path查看
$file_path = str_replace('\\', '/', $file_path);
if (!file_exists($file_path)) {
$this->error($file_path);exit; //如果提示这个错误,很可能你的路径不对,可以打印$file_sub_path查看
}
$fp = fopen($file_path,"r"); // 以可读的方式打开这个文件
# 如果出现图片无法打开,可以在这个位置添加函数
ob_clean(); # 清空擦掉,输出缓冲区。
$fp = fopen($file_path, "r"); // 以可读的方式打开这个文件
# 如果出现图片无法打开,可以在这个位置添加函数
ob_clean(); # 清空擦掉,输出缓冲区。
$file_size = filesize($file_path);
//下载文件需要用到的头
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length:".$file_size);
Header("Content-Disposition: attachment; filename = ". $file_name);
Header("Accept-Length:" . $file_size);
Header("Content-Disposition: attachment; filename = " . $file_name);
$buffer = 1024000;
$file_count = 0;
while(!feof($fp) && $file_count<$file_size){
$file_con = fread($fp,$buffer);
while (!feof($fp) && $file_count < $file_size) {
$file_con = fread($fp, $buffer);
$file_count += $buffer;
echo $file_con;
}
fclose($fp); //关闭这个打开的文件
fclose($fp); //关闭这个打开的文件
}
// 删除sql文件
@ -160,15 +167,15 @@ class Database extends BaseController
$this->db->delFile($v);
}
add_log('delete');
return to_assign(1,"删除成功!");
return to_assign(1, "删除成功!");
}
if ($this->db->delFile($id)) {
add_log('delete');
return to_assign(1,"删除成功!");
return to_assign(1, "删除成功!");
} else {
return to_assign(0, "备份文件删除失败,请检查文件权限!");
}
}
}
}
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
@ -18,12 +24,12 @@ class Index extends BaseController
public function main()
{
$adminCount=Db::name('admin')->where('status','1')->count();
$userCount=Db::name('user')->where('status','1')->count();
$articleCount=Db::name('article')->where('status','1')->count();
$install=false;
$adminCount = Db::name('Admin')->where('status', '1')->count();
$userCount = Db::name('User')->where('status', '1')->count();
$articleCount = Db::name('Article')->where('status', '1')->count();
$install = false;
if (file_exists(CMS_ROOT . 'app/install')) {
$install=true;
$install = true;
}
View::assign('adminCount', $adminCount);
View::assign('userCount', $userCount);
@ -36,5 +42,5 @@ class Index extends BaseController
{
echo '错误';
}
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
@ -17,7 +23,7 @@ class Keywords extends BaseController
$param = get_params();
$where = array();
if (!empty($param['keywords'])) {
$where[] = ['title','like', '%' . $param['keywords'] . '%'];
$where[] = ['title', 'like', '%' . $param['keywords'] . '%'];
}
$where[] = ['status', '>=', 0];
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
@ -26,10 +32,9 @@ class Keywords extends BaseController
->where($where)
->paginate($rows, false, ['query' => $param]);
return table_assign(1, '', $content);
}
else{
} else {
return view();
}
}
}
//添加
@ -58,7 +63,10 @@ class Keywords extends BaseController
}
$param['update_time'] = time();
$res = Db::name('Keywords')->strict(false)->field(true)->update($param);
if($res) add_log('edit',$param['id'],$param);
if ($res) {
add_log('edit', $param['id'], $param);
}
return to_assign();
} else {
try {
@ -69,7 +77,10 @@ class Keywords extends BaseController
}
$param['create_time'] = time();
$insertId = Db::name('Keywords')->strict(false)->field(true)->insertGetId($param);
if($insertId) add_log('add',$insertId,$param);
if ($insertId) {
add_log('add', $insertId, $param);
}
return to_assign();
}
}
@ -82,7 +93,7 @@ class Keywords extends BaseController
$data['id'] = $id;
$data['update_time'] = time();
if (Db::name('Keywords')->update($data) !== false) {
add_log('delete',$id,$data);
add_log('delete', $id, $data);
return to_assign(1, "删除成功");
} else {
return to_assign(0, "删除失败");

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
@ -31,7 +37,7 @@ class Login
return to_assign(0, $e->getError());
}
$admin = Db::name('admin')->where(['username' => $param['username']])->find();
$admin = Db::name('Admin')->where(['username' => $param['username']])->find();
if (empty($admin)) {
return to_assign(0, '用户名或密码错误');
}
@ -53,8 +59,8 @@ class Login
$token = make_token();
set_cache($token, $admin, 7200);
$admin['token'] = $token;
add_log('login',$admin['id'],$data);
return to_assign(1, '登录成功', ['uid'=>$admin['id']]);
add_log('login', $admin['id'], $data);
return to_assign(1, '登录成功', ['uid' => $admin['id']]);
}
//退出登录

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
@ -17,10 +22,9 @@ class Menu extends BaseController
if (request()->isAjax()) {
$menu = Db::name('AdminMenu')->order('sort asc')->select();
return to_assign(0, '', $menu);
}
else{
} else {
return view();
}
}
}
//添加菜单页面

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
@ -27,10 +32,9 @@ class Nav extends BaseController
->order('create_time asc')
->paginate($rows, false, ['query' => $param]);
return table_assign(1, '', $nav);
}
else{
} else {
return view();
}
}
}
//添加
@ -38,7 +42,7 @@ class Nav extends BaseController
{
$id = empty(get_params('id')) ? 0 : get_params('id');
if ($id > 0) {
$nav = Db::name('nav')->where(['id' => $id])->find();
$nav = Db::name('Nav')->where(['id' => $id])->find();
View::assign('nav', $nav);
}
View::assign('id', $id);
@ -63,7 +67,7 @@ class Nav extends BaseController
->update($param);
// 删除导航缓存
clear_cache('homeNav');
add_log('edit',$param['id'], $param);
add_log('edit', $param['id'], $param);
return to_assign();
} else {
try {
@ -75,7 +79,7 @@ class Nav extends BaseController
$nid = NavList::strict(false)->field(true)->insertGetId($param);
// 删除导航缓存
clear_cache('homeNav');
add_log('add',$nid, $param);
add_log('add', $nid, $param);
return to_assign();
}
}
@ -95,7 +99,7 @@ class Nav extends BaseController
return to_assign(1, '删除成功');
// 删除导航缓存
clear_cache('homeNav');
add_log('delete',$id, []);
add_log('delete', $id, []);
} else {
return to_assign(0, '删除失败');
}
@ -108,16 +112,15 @@ class Nav extends BaseController
if (request()->isAjax()) {
$id = $param['id'];
$navInfoList = Db::name('NavInfo')
->where(['nav_id' => $id])
->order('sort asc')
->select();
->where(['nav_id' => $id])
->order('sort asc')
->select();
return to_assign(0, '', $navInfoList);
}
else{
} else {
return view('', [
'nav_id' => $param['id'],
]);
}
}
}
@ -152,7 +155,7 @@ class Nav extends BaseController
NavInfo::strict(false)->field(true)->update($param);
// 删除导航缓存
clear_cache('homeNav');
add_log('edit',$param['id'], $param);
add_log('edit', $param['id'], $param);
return to_assign();
} else {
try {

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
@ -18,17 +24,16 @@ class Role extends BaseController
$param = get_params();
$where = array();
if (!empty($param['keywords'])) {
$where[] = ['id|title|desc','like', '%' . $param['keywords'] . '%'];
$where[] = ['id|title|desc', 'like', '%' . $param['keywords'] . '%'];
}
$rows = empty($param['limit']) ? get_config(app.page_size) : $param['limit'];
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$group = AdminGroup::where($where)
->order('create_time asc')
->paginate($rows, false, ['query' => $param]);
return table_assign(1, '', $group);
}
else{
} else {
return view();
}
}
}
//添加&编辑
@ -36,7 +41,7 @@ class Role extends BaseController
{
$id = empty(get_params('id')) ? 0 : get_params('id');
if ($id > 0) {
$role = Db::name('admin_group')->where(['id' => $id])->find();
$role = Db::name('AdminGroup')->where(['id' => $id])->find();
View::assign('role', $role);
}
View::assign('id', $id);
@ -62,14 +67,14 @@ class Role extends BaseController
}
/*
if (!empty($param['rules'])) {
$param['rules'] = implode(',', $param['rules']);
$param['rules'] = implode(',', $param['rules']);
}
if (!empty($param['menus'])) {
$param['menus'] = implode(',', $param['menus']);
$param['menus'] = implode(',', $param['menus']);
}
*/
Db::name('admin_group')->where(['id' => $param['id']])->strict(false)->field(true)->update($param);
add_log('edit',$param['id'],$param);
*/
Db::name('AdminGroup')->where(['id' => $param['id']])->strict(false)->field(true)->update($param);
add_log('edit', $param['id'], $param);
} else {
try {
validate(GroupCheck::class)->scene('add')->check($param);
@ -79,14 +84,14 @@ class Role extends BaseController
}
/*
if (!empty($param['rules'])) {
$param['rules'] = implode(',', $param['rules']);
$param['rules'] = implode(',', $param['rules']);
}
if (!empty($param['menus'])) {
$param['menus'] = implode(',', $param['menus']);
$param['menus'] = implode(',', $param['menus']);
}
*/
$gid = Db::name('admin_group')->strict(false)->field(true)->insertGetId($param);
add_log('add',$gid,$param);
*/
$gid = Db::name('AdminGroup')->strict(false)->field(true)->insertGetId($param);
add_log('add', $gid, $param);
}
//清除菜单\权限缓存
clear_cache('adminMenu');
@ -103,7 +108,7 @@ class Role extends BaseController
return to_assign(0, "该组是系统所有者,无法删除");
}
if (Db::name('AdminGroup')->delete($id) !== false) {
add_log('delete',$id,[]);
add_log('delete', $id, []);
return to_assign(1, "删除角色成功");
} else {
return to_assign(0, "删除失败");

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
@ -16,8 +22,7 @@ class Rule extends BaseController
if (request()->isAjax()) {
$rule = Db::name('adminRule')->order('create_time asc')->select();
return to_assign(0, '', $rule);
}
else{
} else {
return view();
}
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
@ -15,18 +21,17 @@ class Search extends BaseController
$param = get_params();
$where = array();
if (!empty($param['keywords'])) {
$where[] = ['title','like', '%' . $param['keywords'] . '%'];
$where[] = ['title', 'like', '%' . $param['keywords'] . '%'];
}
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$content = Db::name('SearchKeywords')
->order('id desc')
->where($where)
->paginate($rows, false, ['query' => $param]);
return table_assign(1, '', $content);
}
else{
} else {
return view();
}
}
}
//删除

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
@ -22,16 +28,15 @@ class Sitemap extends BaseController
if (!empty($param['keywords'])) {
$where[] = ['id|name', 'like', '%' . $param['keywords'] . '%'];
}
$where[] = ['status','=',1];
$where[] = ['status', '=', 1];
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$SitemapCate = SitemapCate::where($where)
->order('sort desc, id desc')
->paginate($rows, false, ['query' => $param]);
return table_assign(1, '', $SitemapCate);
}
else{
} else {
return view();
}
}
}
//添加
@ -60,7 +65,10 @@ class Sitemap extends BaseController
}
$param['update_time'] = time();
$res = SitemapCate::where('id', $param['id'])->strict(false)->field(true)->update($param);
if($res) add_log('edit', $param['id'], $param);
if ($res) {
add_log('edit', $param['id'], $param);
}
// 删除菜单缓存
clear_cache('homeSitemap');
return to_assign();
@ -73,7 +81,10 @@ class Sitemap extends BaseController
}
$param['create_time'] = time();
$sid = SitemapCate::strict(false)->field(true)->insertGetId($param);
if($sid) add_log('add', $sid, $param);
if ($sid) {
add_log('add', $sid, $param);
}
// 删除菜单缓存
clear_cache('homeSitemap');
return to_assign();
@ -85,8 +96,8 @@ class Sitemap extends BaseController
public function delete()
{
$id = get_params("id");
$where[] = ['sitemap_cate_id','=',$id];
$where[] = ['status','>=',0];
$where[] = ['sitemap_cate_id', '=', $id];
$where[] = ['status', '>=', 0];
$count = Db::name('Sitemap')->where($where)->count();
if ($count > 0) {
return to_assign(0, '该分类下还有数据,无法删除');
@ -106,21 +117,20 @@ class Sitemap extends BaseController
public function sitemap_info()
{
$param = get_params();
if (request()->isAjax()) {
if (request()->isAjax()) {
$where = array();
$where[] = ['sitemap_cate_id','=',$param['id']];
$where[] = ['status','>=',0];
$where[] = ['sitemap_cate_id', '=', $param['id']];
$where[] = ['status', '>=', 0];
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$sitemap = SitemapInfo::where($where)
->order('sort desc, id desc')
->paginate($rows, false, ['query' => $param]);
return table_assign(1, '', $sitemap);
}
else{
} else {
return view('', [
'sitemap_cate_id' => $param['id'],
]);
}
}
}
//添加网站地图
@ -152,7 +162,10 @@ class Sitemap extends BaseController
$param['update_time'] = time();
$param['name'] = htmlspecialchars($param['name']);
$res = SitemapInfo::where(['id' => $param['id']])->strict(false)->field(true)->update($param);
if($res) add_log('edit',$param['id'],$param);
if ($res) {
add_log('edit', $param['id'], $param);
}
// 删除导航缓存
clear_cache('homeSitemap');
return to_assign();
@ -166,7 +179,10 @@ class Sitemap extends BaseController
$param['name'] = htmlspecialchars($param['name']);
$param['create_time'] = time();
$sid = SitemapInfo::strict(false)->field(true)->insertGetId($param);
if($sid) add_log('add', $sid, $param);
if ($sid) {
add_log('add', $sid, $param);
}
// 删除导航缓存
clear_cache('homeSitemap');
return to_assign();

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
@ -21,15 +27,14 @@ class Slide extends BaseController
if (!empty($param['keywords'])) {
$where[] = ['id|name|title|desc', 'like', '%' . $param['keywords'] . '%'];
}
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$slide = SlideList::where($where)
->order('create_time asc')
->paginate($rows, false, ['query' => $param]);
return table_assign(1, '', $slide);
}
else{
} else {
return view();
}
}
}
//添加
@ -37,7 +42,7 @@ class Slide extends BaseController
{
$id = empty(get_params('id')) ? 0 : get_params('id');
if ($id > 0) {
$slide = Db::name('slide')->where(['id' => $id])->find();
$slide = Db::name('Slide')->where(['id' => $id])->find();
View::assign('slide', $slide);
}
View::assign('id', $id);
@ -58,7 +63,10 @@ class Slide extends BaseController
}
$param['update_time'] = time();
$res = SlideList::where('id', $param['id'])->strict(false)->field(true)->update($param);
if($res) add_log('edit', $param['id'], $param);
if ($res) {
add_log('edit', $param['id'], $param);
}
clear_cache('homeSlide');
return to_assign();
} else {
@ -70,7 +78,10 @@ class Slide extends BaseController
}
$param['create_time'] = time();
$sid = SlideList::strict(false)->field(true)->insertGetId($param);
if($sid) add_log('add', $sid, $param);
if ($sid) {
add_log('add', $sid, $param);
}
// 删除banner缓存
clear_cache('homeSlide');
return to_assign();
@ -86,7 +97,7 @@ class Slide extends BaseController
'slide_id' => $id,
])->count();
if ($count > 0) {
return to_assign(0, '该组下还有幻灯片,无法删除');
return to_assign(0, '该组下还有Banner,无法删除');
}
if (Db::name('Slide')->delete($id) !== false) {
add_log('delete', $id);
@ -103,21 +114,20 @@ class Slide extends BaseController
$param = get_params();
if (request()->isAjax()) {
$where = array();
$where[] = ['s.slide_id','=',$param['id']];
$where[] = ['s.slide_id', '=', $param['id']];
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$slideInfoList = SlideInfo::where($where)
->alias('s')
->join('file f', 's.img=f.id', 'LEFT')
->join('File f', 's.img=f.id', 'LEFT')
->field('s.*,f.filepath')
->order('s.sort desc, s.id desc')
->paginate($rows, false, ['query' => $param]);
return table_assign(1, '', $slideInfoList);
}
else{
} else {
return view('', [
'slide_id' => $param['id'],
]);
}
}
}
//幻灯片列表
@ -125,12 +135,12 @@ class Slide extends BaseController
{
$param = get_params();
$where = array();
$where[] = ['s.slide_id','=',$param['id']];
$where[] = ['s.slide_id', '=', $param['id']];
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$slideInfoList = SlideInfo::where($where)
->alias('s')
->join('file f', 's.img=f.id', 'LEFT')
->field('s.*,f.filepath')
->alias('s')
->join('File f', 's.img=f.id', 'LEFT')
->field('s.*,f.filepath')
->order('s.sort desc, s.id desc')
->paginate($rows, false, ['query' => $param]);
return table_assign(1, '', $slideInfoList);
@ -165,7 +175,10 @@ class Slide extends BaseController
}
$param['update_time'] = time();
$res = SlideInfo::where(['id' => $param['id']])->strict(false)->field(true)->update($param);
if($res) add_log('edit',$param['id'],$param);
if ($res) {
add_log('edit', $param['id'], $param);
}
// 删除缓存
clear_cache('homeSlide');
return to_assign();
@ -178,7 +191,10 @@ class Slide extends BaseController
}
$param['create_time'] = time();
$sid = SlideInfo::strict(false)->field(true)->insertGetId($param);
if($sid) add_log('add', $sid, $param);
if ($sid) {
add_log('add', $sid, $param);
}
// 删除缓存
clear_cache('homeSlide');
return to_assign();
@ -192,7 +208,7 @@ class Slide extends BaseController
if (Db::name('SlideInfo')->delete($id) !== false) {
add_log('delete', $id);
clear_cache('homeSlide');
return to_assign(1, "删除成功");
return to_assign(1, "删除成功");
} else {
return to_assign(0, "删除失败");
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
@ -16,13 +22,13 @@ class User extends BaseController
$param = get_params();
$where = array();
if (!empty($param['keywords'])) {
$where[] = ['nickname|truename|mobile|province|city','like', '%' . $param['keywords'] . '%'];
$where[] = ['nickname|truename|mobile|province|city', 'like', '%' . $param['keywords'] . '%'];
}
//按时间检索
$start_time = isset($param['start_time']) ? strtotime(urldecode($param['start_time'])) : 0;
$end_time = isset($param['end_time']) ? strtotime(urldecode($param['end_time'])) : 0;
if ($start_time > 0 && $end_time > 0) {
if ($start_time === $end_time) {
$where['register_time'] = array('eq', $start_time);
@ -34,7 +40,7 @@ class User extends BaseController
} elseif ($start_time == 0 && $end_time > 0) {
$where['register_time'] = array('elt', $end_time);
}
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$content = UserList::where($where)
->order('id desc')
@ -43,17 +49,16 @@ class User extends BaseController
$item->register_time = empty($item->register_time) ? '-' : date('Y-m-d H:i', $item->register_time);
});
return table_assign(1, '', $content);
}
else{
} else {
return view();
}
}
}
//编辑
public function edit()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
$user = Db::name('user')->where(['id' => $id])->find();
$user = Db::name('User')->where(['id' => $id])->find();
View::assign('user', $user);
return view();
}
@ -64,13 +69,13 @@ class User extends BaseController
if (request()->isAjax()) {
$param = get_params();
if (!empty($param['id']) && $param['id'] > 0) {
$res = Db::name('user')->where(['id' => $param['id']])->strict(false)->field(true)->update($param);
if($res){
add_log('edit', $param['id'], $param);
return to_assign();
}else{
return to_assign(0, '提交失败:' . $e->getMessage());
}
$res = Db::name('User')->where(['id' => $param['id']])->strict(false)->field(true)->update($param);
if ($res) {
add_log('edit', $param['id'], $param);
return to_assign();
} else {
return to_assign(0, '提交失败:' . $e->getMessage());
}
}
}
}
@ -79,7 +84,7 @@ class User extends BaseController
public function view()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
$user = Db::name('user')->where(['id' => $id])->find();
$user = Db::name('User')->where(['id' => $id])->find();
add_log('view', get_params('id'));
View::assign('user', $user);
return view();
@ -90,7 +95,7 @@ class User extends BaseController
$id = get_params("id");
$data['status'] = get_params("status");
$data['id'] = $id;
if (Db::name('user')->update($data) !== false) {
if (Db::name('User')->update($data) !== false) {
add_log('edit', $id);
return to_assign(1, "操作成功");
} else {
@ -98,21 +103,22 @@ class User extends BaseController
}
}
//日志
public function log()
{
if (request()->isAjax()) {
$param = get_params();
$where = array();
if (!empty($param['keywords'])) {
$where[] = ['nickname|title','like', '%' . $param['keywords'] . '%'];
$where[] = ['nickname|title', 'like', '%' . $param['keywords'] . '%'];
}
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$content = DB::name('user_log')
$content = DB::name('UserLog')
->field("id,uid,nickname,title,content,ip,param,FROM_UNIXTIME(create_time,'%Y-%m-%d %H:%i:%s') create_time")
->order('create_time desc')
->where($where)
->paginate($rows, false, ['query' => $param]);
$content->toArray();
foreach ($content as $k => $v) {
$data = $v;
@ -128,47 +134,46 @@ class User extends BaseController
$content->offsetSet($k, $data);
}
return table_assign(1, '', $content);
}
else{
} else {
return view();
}
}
}
//记录
public function record()
{
if (request()->isAjax()) {
$param = get_params();
$where = array();
if (!empty($param['keywords'])) {
$where[] = ['nickname|title','like', '%' . $param['keywords'] . '%'];
$where[] = ['nickname|title', 'like', '%' . $param['keywords'] . '%'];
}
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$content = DB::name('user_log')
$content = DB::name('UserLog')
->field("id,uid,nickname,title,content,ip,param,create_time")
->order('create_time desc')
->where($where)
->paginate($rows, false, ['query' => $param]);
$content->toArray();
foreach ($content as $k => $v) {
$data = $v;
$param_array = json_decode($v['param'], true);
$name = '';
if (!empty($param_array['name'])) {
$name = ''. $param_array['name'];
$name = '' . $param_array['name'];
}
if (!empty($param_array['title'])) {
$name = ''. $param_array['title'];
$name = '' . $param_array['title'];
}
$data['content'] = $v['content'] . $name;
$data['times'] = time_trans($v['create_time']);
$content->offsetSet($k, $data);
}
return table_assign(1, '', $content);
}
else{
} else {
return view();
}
}
}
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\middleware;
@ -16,30 +22,28 @@ class Auth
$pathInfo = str_replace('.' . $request->ext(), '', $request->pathInfo());
$action = explode('/', $pathInfo)[0];
//var_dump($pathInfo);exit;
if($pathInfo == '' || $action == '' ){
redirect('/admin/index/index.html')->send();
exit;
}
if ($pathInfo == '' || $action == '') {
redirect('/admin/index/index.html')->send();
exit;
}
//验证用户登录
if ($action !== 'login') {
$session_admin = get_config('app.session_admin');
if (!Session::has($session_admin)) {
if($request->isAjax()){
return to_assign(404, '请先登录');
}
else{
redirect('/admin/login/index.html')->send();
exit;
}
if ($request->isAjax()) {
return to_assign(404, '请先登录');
} else {
redirect('/admin/login/index.html')->send();
exit;
}
}
// 验证用户访问权限
if ($action !== 'index' && $action !== 'api') {
if (!$this->checkAuth($controller, $pathInfo, $action, Session::get($session_admin)['id'])) {
if($request->isAjax()){
if ($request->isAjax()) {
return to_assign(202, '你没有权限,请联系超级管理员!');
}
else{
} else {
echo '<div style="text-align:center;color:red;margin-top:20%;">您没有权限,请联系超级管理员</div>';exit;
}
}
@ -59,49 +63,48 @@ class Auth
protected function checkAuth($controller, $pathInfo, $action, $uid)
{
//Cache::delete('RulesSrc' . $uid);
if (!Cache::get('RulesSrc' . $uid) || !Cache::get('RulesSrc0')) {
//用户所在权限组及所拥有的权限
// 执行查询
$user_groups = Db::name('admin_group_access')
->alias('a')
->join("admin_group g", "a.group_id=g.id", 'LEFT')
->where("a.uid='{$uid}' and g.status='1'")
->select()
->toArray();
$groups = $user_groups ?: [];
if (!Cache::get('RulesSrc' . $uid) || !Cache::get('RulesSrc0')) {
//用户所在权限组及所拥有的权限
// 执行查询
$user_groups = Db::name('AdminGroupAccess')
->alias('a')
->join("AdminGroup g", "a.group_id=g.id", 'LEFT')
->where("a.uid='{$uid}' and g.status='1'")
->select()
->toArray();
$groups = $user_groups ?: [];
$ids = []; //保存用户所属用户组设置的所有权限规则id
foreach ($groups as $g) {
$ids = array_merge($ids, explode(',', trim($g['rules'], ',')));
}
$ids = array_unique($ids);
//读取所有权限规则
$rules_all = Db::name('admin_rule')->field('src')->select();
//读取用户组所有权限规则
$rules = Db::name('admin_rule')->where('id', 'in', $ids)->field('src')->select();
//循环规则,判断结果。
$auth_list_all = [];
$auth_list = [];
foreach ($rules_all as $rule_all) {
$auth_list_all[] = strtolower($rule_all['src']);
}
foreach ($rules as $rule) {
$auth_list[] = strtolower($rule['src']);
}
//规则列表结果保存到Cache
Cache::tag('adminRules')->set('RulesSrc0', $auth_list_all, 36000);
Cache::tag('adminRules')->set('RulesSrc' . $uid, $auth_list, 36000);
} else {
$auth_list_all = Cache::get('RulesSrc0');
$auth_list = Cache::get('RulesSrc' . $uid);
}
$pathUrl = $controller . '/' . $pathInfo;
if (!in_array($pathUrl , $auth_list) && !in_array($pathUrl, $auth_list_all)) {
return false;
}
else{
return true;
}
$ids = []; //保存用户所属用户组设置的所有权限规则id
foreach ($groups as $g) {
$ids = array_merge($ids, explode(',', trim($g['rules'], ',')));
}
$ids = array_unique($ids);
//读取所有权限规则
$rules_all = Db::name('AdminRule')->field('src')->select();
//读取用户组所有权限规则
$rules = Db::name('AdminRule')->where('id', 'in', $ids)->field('src')->select();
//循环规则,判断结果。
$auth_list_all = [];
$auth_list = [];
foreach ($rules_all as $rule_all) {
$auth_list_all[] = strtolower($rule_all['src']);
}
foreach ($rules as $rule) {
$auth_list[] = strtolower($rule['src']);
}
//规则列表结果保存到Cache
Cache::tag('adminRules')->set('RulesSrc0', $auth_list_all, 36000);
Cache::tag('adminRules')->set('RulesSrc' . $uid, $auth_list, 36000);
} else {
$auth_list_all = Cache::get('RulesSrc0');
$auth_list = Cache::get('RulesSrc' . $uid);
}
$pathUrl = $controller . '/' . $pathInfo;
if (!in_array($pathUrl, $auth_list) && !in_array($pathUrl, $auth_list_all)) {
return false;
} else {
return true;
}
}
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\middleware;

View File

@ -1,7 +1,15 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;
use think\Model;
class Admin extends Model
{
}
}

View File

@ -1,7 +1,15 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;
use think\Model;
class AdminGroup extends Model
{
}
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\model;
@ -20,7 +26,7 @@ class AdminLog extends Model
}
$where['status'] = 1;
$rows = empty($param['limit']) ? get_config('app.pages') : $param['limit'];
$content = \think\facade\Db::name('admin_log')
$content = \think\facade\Db::name('AdminLog')
->field("id,uid,nickname,type,title,module,controller,function,param,content,create_time")
->order('create_time desc')
->where($where)
@ -32,10 +38,10 @@ class AdminLog extends Model
$param_array = json_decode($v['param'], true);
$name = '';
if (!empty($param_array['name'])) {
$name = ''. $param_array['name'];
$name = '' . $param_array['name'];
}
if (!empty($param_array['title'])) {
$name = ''. $param_array['title'];
$name = '' . $param_array['title'];
}
$data['content'] = $v['content'] . $name;
$data['times'] = time_trans($v['create_time']);

View File

@ -1,44 +1,53 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;
use think\Model;
use app\admin\model\Keywords;
use think\Model;
class Article extends Model
{
// 获取文章详情
public function detail($id)
{
$article = \think\facade\Db::name('article')->where(['id' => $id])->find();
if (empty($article)) {
return $this->error('文章不存在');
}
$keywrod_array = \think\facade\Db::name('ArticleKeywords')
->field('i.aid,i.keywords_id,k.title')
->alias('i')
->join('keywords k', 'k.id = i.keywords_id', 'LEFT')
->order('i.create_time asc')
->where(array('i.aid' => $id, 'k.status' => 1))
->select()->toArray();
// 获取文章详情
public function detail($id)
{
$article = \think\facade\Db::name('Article')->where(['id' => $id])->find();
if (empty($article)) {
return $this->error('文章不存在');
}
$keywrod_array = \think\facade\Db::name('ArticleKeywords')
->field('i.aid,i.keywords_id,k.title')
->alias('i')
->join('keywords k', 'k.id = i.keywords_id', 'LEFT')
->order('i.create_time asc')
->where(array('i.aid' => $id, 'k.status' => 1))
->select()->toArray();
$article['keyword_ids'] = implode(",", array_column($keywrod_array, 'keywords_id'));
$article['keyword_names'] = implode(',', array_column($keywrod_array, 'title'));
return $article;
}
$article['keyword_ids'] = implode(",", array_column($keywrod_array, 'keywords_id'));
$article['keyword_names'] = implode(',', array_column($keywrod_array, 'title'));
return $article;
}
//插入关键字
public function insertKeyword($keywordArray=[],$aid){
$insert = [];
$time = time();
foreach ($keywordArray as $key => $value) {
if (!$value) {
continue;
}
$keywords_id = (new Keywords())->increase($value);
$insert[] = ['aid' => $aid ,
'keywords_id' => $keywords_id,
'create_time' => $time
];
}
$res = \think\facade\Db::name('ArticleKeywords')->strict(false)->field(true)->insertAll($insert);
return $res;
}
}
//插入关键字
public function insertKeyword($keywordArray = [], $aid)
{
$insert = [];
$time = time();
foreach ($keywordArray as $key => $value) {
if (!$value) {
continue;
}
$keywords_id = (new Keywords())->increase($value);
$insert[] = ['aid' => $aid,
'keywords_id' => $keywords_id,
'create_time' => $time,
];
}
$res = \think\facade\Db::name('ArticleKeywords')->strict(false)->field(true)->insertAll($insert);
return $res;
}
}

View File

@ -1,7 +1,15 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;
use think\Model;
class ArticleCate extends Model
{
}
}

View File

@ -1,18 +1,26 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;
use think\Model;
// 关键字模型
class Keywords extends Model
{
// 关联关键字
public function increase($keywords)
{
$is_exist = $this->where('title',$keywords)->find();
if( $is_exist ){
$res = $is_exist['id'];
}else{
$res = $this->strict(false)->field(true)->insertGetId(['title' => $keywords,'create_time' => time()]);
}
return $res;
}
}
// 关联关键字
public function increase($keywords)
{
$is_exist = $this->where('title', $keywords)->find();
if ($is_exist) {
$res = $is_exist['id'];
} else {
$res = $this->strict(false)->field(true)->insertGetId(['title' => $keywords, 'create_time' => time()]);
}
return $res;
}
}

View File

@ -1,7 +1,15 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;
use think\Model;
class Nav extends Model
{
}
}

View File

@ -1,7 +1,15 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;
use think\Model;
class NavInfo extends Model
{
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;

View File

@ -1,11 +1,17 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;
use think\Model;
class SitemapCate extends Model
{
/**
/**
* 关联网站地图
* @param [type] $value [description]
*/
@ -14,4 +20,4 @@ class SitemapCate extends Model
return $this->hasMany('sitemap', 'sitemap_cate_id', 'id')->order('sort desc, id desc');
}
}
}

View File

@ -1,7 +1,15 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;
use think\Model;
class Slide extends Model
{
}
}

View File

@ -1,7 +1,15 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;
use think\Model;
class SlideInfo extends Model
{
}
}

View File

@ -1,8 +1,15 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;
use think\Model;
class User extends Model
{
{
}
}

View File

@ -1,48 +1,55 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
class AdminCheck extends Validate
{
protected $rule = [
'username' => 'require|unique:admin',
'pwd' => 'require|confirm',
'mobile' => 'require',
'nickname' => 'require',
'group_id' => 'require',
'id' => 'require',
'status' => 'require|checkStatus:-1,1',
'old_pwd' => 'require|different:pwd',
'username' => 'require|unique:admin',
'pwd' => 'require|confirm',
'mobile' => 'require',
'nickname' => 'require',
'group_id' => 'require',
'id' => 'require',
'status' => 'require|checkStatus:-1,1',
'old_pwd' => 'require|different:pwd',
];
protected $message = [
'username.require' => '登录账号不能为空',
'pwd.require' => '密码不能为空',
'pwd.confirm' => '两次密码不一致',
'username.unique' => '同样的登录账号已经存在!',
'mobile.require' => '手机不能为空',
'nickname.require' => '昵称不能为空',
'group_id.require' => '至少要选择一个用户角色',
'id.require' => '缺少更新条件',
'status.require' => '状态为必选',
'status.checkStatus' => '系统所有者不能被禁用!',
'old_pwd.require' => '请提供旧密码',
'old_pwd.different' => '新密码不能和旧密码一样',
'username.require' => '登录账号不能为空',
'pwd.require' => '密码不能为空',
'pwd.confirm' => '两次密码不一致',
'username.unique' => '同样的登录账号已经存在!',
'mobile.require' => '手机不能为空',
'nickname.require' => '昵称不能为空',
'group_id.require' => '至少要选择一个用户角色',
'id.require' => '缺少更新条件',
'status.require' => '状态为必选',
'status.checkStatus' => '系统所有者不能被禁用!',
'old_pwd.require' => '请提供旧密码',
'old_pwd.different' => '新密码不能和旧密码一样',
];
protected $scene = [
'add' => ['phone', 'nickname', 'group_id', 'pwd', 'username', 'status'],
'edit' => ['phone', 'nickname', 'group_id', 'id', 'username.unique', 'status'],
'add' => ['phone', 'nickname', 'group_id', 'pwd', 'username', 'status'],
'edit' => ['phone', 'nickname', 'group_id', 'id', 'username.unique', 'status'],
'editPersonal' => ['phone', 'nickname'],
'editpwd' => ['old_pwd', 'pwd'],
];
// 自定义验证规则
protected function checkStatus($value,$rule,$data)
protected function checkStatus($value, $rule, $data)
{
if($value == -1 and $data['id'] == 1) {
if ($value == -1 and $data['id'] == 1) {
return $rule == false;
}
return $rule == true;
}
}
}

View File

@ -1,26 +1,33 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
class ArticleCateCheck extends Validate
{
protected $rule = [
'title' => 'require|unique:article_cate',
'pid' => 'require',
'id' => 'require',
'field' => 'require',
'title' => 'require|unique:article_cate',
'pid' => 'require',
'id' => 'require',
'field' => 'require',
];
protected $message = [
'title.require' => '名称不能为空',
'pid.require' => '父级分类为必选',
'title.unique' => '同样的记录已经存在',
'id.require' => '缺少更新条件',
'filed.require' => '缺少要更新的字段名',
'title.require' => '名称不能为空',
'pid.require' => '父级分类为必选',
'title.unique' => '同样的记录已经存在',
'id.require' => '缺少更新条件',
'filed.require' => '缺少要更新的字段名',
];
protected $scene = [
'add' => ['title', 'pid'],
'edit' => ['id', 'field','title.unique'],
'add' => ['title', 'pid'],
'edit' => ['id', 'field', 'title.unique'],
];
}
}

View File

@ -1,27 +1,34 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
class ArticleCheck extends Validate
{
protected $rule = [
'title' => 'require|unique:article',
'content' => 'require',
'id' => 'require',
'article_cate_id' => 'require',
'status' => 'require'
'title' => 'require|unique:article',
'content' => 'require',
'id' => 'require',
'article_cate_id' => 'require',
'status' => 'require',
];
protected $message = [
'title.require' => '标题不能为空',
'article_cate_id.require' => '所属分类为必选',
'title.unique' => '同样的记录已经存在!',
'id.require' => '缺少更新条件',
'status.require' => '状态为必选',
'title.require' => '标题不能为空',
'article_cate_id.require' => '所属分类为必选',
'title.unique' => '同样的记录已经存在!',
'id.require' => '缺少更新条件',
'status.require' => '状态为必选',
];
protected $scene = [
'add' => ['title', 'thumb', 'article_cate_id', 'content', 'status'],
'edit' => ['title', 'thumb', 'article_cate_id', 'content', 'id', 'status'],
];
}
}

View File

@ -1,18 +1,25 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
class ConfCheck extends Validate
{
protected $rule = [
'title' => 'require|unique:config',
'name' => 'require|unique:config'
'title' => 'require|unique:config',
'name' => 'require|unique:config',
];
protected $message = [
'title.require' => '配置名称不能为空',
'name.require' => '配置标识不能为空',
'title.unique' => '同样的配置名称已经存在',
'name.unique' => '同样的配置标识已经存在'
'title.require' => '配置名称不能为空',
'name.require' => '配置标识不能为空',
'title.unique' => '同样的配置名称已经存在',
'name.unique' => '同样的配置标识已经存在',
];
}
}

View File

@ -1,34 +1,41 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
class GroupCheck extends Validate
{
protected $rule = [
'title' => 'require|unique:admin_group',
'id' => 'require',
'status' => 'require|checkStatus:-1,1'
'title' => 'require|unique:admin_group',
'id' => 'require',
'status' => 'require|checkStatus:-1,1',
];
protected $message = [
'title.require' => '名称不能为空',
'title.unique' => '同样的记录已经存在!',
'id.require' => '缺少更新条件',
'status.require' => '状态为必选',
'status.checkStatus' => '系统所有者组不能被禁用!',
'title.require' => '名称不能为空',
'title.unique' => '同样的记录已经存在!',
'id.require' => '缺少更新条件',
'status.require' => '状态为必选',
'status.checkStatus' => '系统所有者组不能被禁用!',
];
protected $scene = [
'add' => ['title','status'],
'add' => ['title', 'status'],
'edit' => ['id', 'title', 'status'],
];
// 自定义验证规则
protected function checkStatus($value,$rule,$data)
protected function checkStatus($value, $rule, $data)
{
if($value == -1 and $data['id'] == 1) {
if ($value == -1 and $data['id'] == 1) {
return $rule == false;
}
return $rule == true;
}
}
}

View File

@ -1,40 +1,47 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
use think\facade\Db;
use think\Validate;
class KeywordsCheck extends Validate
{
protected $rule = [
'title' => 'require|checkUnique',
'id' => 'require',
'title' => 'require|checkUnique',
'id' => 'require',
];
protected $message = [
'title.require' => '关键字名称不能为空',
'title.checkUnique' => '同样的关键字名称已经存在',
'id.require' => '缺少更新条件',
'title.require' => '关键字名称不能为空',
'title.checkUnique' => '同样的关键字名称已经存在',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['title'],
'edit' => ['id','title']
'add' => ['title'],
'edit' => ['id', 'title'],
];
//自定义验证规则
protected function checkUnique($value,$rule,$data)
{
if(isset($data['id'])){
$unique =Db::name('keywords')->where([['id','<>',$data['id']],['title','=',$value],['status','>=',0]])->value('id');
}else{
$unique =Db::name('keywords')->where([['title','=',$value],['status','>=',0]])->value('id');
protected function checkUnique($value, $rule, $data)
{
if (isset($data['id'])) {
$unique = Db::name('keywords')->where([['id', '<>', $data['id']], ['title', '=', $value], ['status', '>=', 0]])->value('id');
} else {
$unique = Db::name('keywords')->where([['title', '=', $value], ['status', '>=', 0]])->value('id');
}
if($unique) {
if ($unique) {
return false;
}else{
} else {
return true;
}
}
}
}

View File

@ -1,26 +1,33 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
class MenuCheck extends Validate
{
protected $rule = [
'title' => 'require|unique:admin_menu',
'pid' => 'require',
'id' => 'require',
'field' => 'require',
'title' => 'require|unique:admin_menu',
'pid' => 'require',
'id' => 'require',
'field' => 'require',
];
protected $message = [
'title.require' => '菜单名称不能为空',
'pid.require' => '父级菜单为必选',
'title.unique' => '同样的菜单名称已经存在',
'id.require' => '缺少更新条件',
'filed.require' => '缺少要更新的字段名',
'title.require' => '菜单名称不能为空',
'pid.require' => '父级菜单为必选',
'title.unique' => '同样的菜单名称已经存在',
'id.require' => '缺少更新条件',
'filed.require' => '缺少要更新的字段名',
];
protected $scene = [
'add' => ['title', 'pid'],
'add' => ['title', 'pid'],
'edit' => ['id', 'field', 'title.unique'],
];
}
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
@ -10,7 +16,7 @@ class NavCheck extends Validate
'name' => 'require|unique:nav',
'id' => 'require',
'status' => 'require',
'slide_id' => 'require'
'slide_id' => 'require',
];
protected $message = [

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;

View File

@ -1,21 +1,29 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
class SitemapCateCheck extends Validate
{
protected $rule = [
'name' => 'require|unique:sitemap_cate',
'id' => 'require',
'name' => 'require|unique:sitemap_cate',
'id' => 'require',
];
protected $message = [
'name.require' => '名称不能为空',
'name.unique' => '同样的记录已经存在!',
'id.require' => '缺少更新条件',
'name.require' => '名称不能为空',
'name.unique' => '同样的记录已经存在!',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['name'],
'edit' => ['id', 'name'],
'add' => ['name'],
'edit' => ['id', 'name'],
];
}
}

View File

@ -1,31 +1,38 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
class SitemapCheck extends Validate
{
protected $rule = [
'name' => 'require',
'id' => 'require',
'name' => 'require',
'id' => 'require',
'sitemap_cate_id' => 'require',
'pc_img' => 'require',
'pc_src' => 'require',
'mobile_img' => 'require',
'mobile_src' => 'require',
'pc_img' => 'require',
'pc_src' => 'require',
'mobile_img' => 'require',
'mobile_src' => 'require',
];
protected $message = [
'name.require' => '名称不能为空',
'pc_img.require' => 'pc端图片不能为空',
'pc_src.require' => 'pc端链接不能为空',
'mobile_img.require' => '移动端图片不能为空',
'mobile_src.require' => '移动端链接不能为空',
'id.require' => '缺少更新条件',
'sitemap_cate_id.require' => '缺少更新条件',
'name.require' => '名称不能为空',
'pc_img.require' => 'pc端图片不能为空',
'pc_src.require' => 'pc端链接不能为空',
'mobile_img.require' => '移动端图片不能为空',
'mobile_src.require' => '移动端链接不能为空',
'id.require' => '缺少更新条件',
'sitemap_cate_id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['sitemap_cate_id', 'name', 'pc_src', 'mobile_src'],
'edit' => ['id', 'name', 'pc_src', 'mobile_src'],
'add' => ['sitemap_cate_id', 'name', 'pc_src', 'mobile_src'],
'edit' => ['id', 'name', 'pc_src', 'mobile_src'],
];
}
}

View File

@ -1,33 +1,40 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
class SlideCheck extends Validate
{
protected $rule = [
'title' => 'require|unique:slide',
'name' => 'require|unique:slide',
'id' => 'require',
'status' => 'require',
'img' => 'require',
'slide_id' => 'require',
'title' => 'require|unique:slide',
'name' => 'require|unique:slide',
'id' => 'require',
'status' => 'require',
'img' => 'require',
'slide_id' => 'require',
];
protected $message = [
'title.require' => '标题不能为空',
'name.require' => '标识不能为空',
'title.unique' => '同样的记录已经存在!',
'name.unique' => '同样的记录已经存在!',
'id.require' => '缺少更新条件',
'status.require' => '状态为必选',
'img.require' => '请上传图片',
'slide_id.require' => '缺少换灯组ID',
'title.require' => '标题不能为空',
'name.require' => '标识不能为空',
'title.unique' => '同样的记录已经存在!',
'name.unique' => '同样的记录已经存在!',
'id.require' => '缺少更新条件',
'status.require' => '状态为必选',
'img.require' => '请上传图片',
'slide_id.require' => '缺少换灯组ID',
];
protected $scene = [
'add' => ['title', 'name', 'status'],
'edit' => ['id', 'title', 'name', 'status'],
'addInfo' => ['title', 'img', 'status', 'slide_id'],
'editInfo' => ['title', 'img', 'status', 'id'],
'add' => ['title', 'name', 'status'],
'edit' => ['id', 'title', 'name', 'status'],
'addInfo' => ['title', 'img', 'status', 'slide_id'],
'editInfo' => ['title', 'img', 'status', 'id'],
];
}
}

View File

@ -1,19 +1,26 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
class UserCheck extends Validate
{
protected $rule = [
'username' => 'require',
'password' => 'require',
'captcha' => 'require|captcha',
'username' => 'require',
'password' => 'require',
'captcha' => 'require|captcha',
];
protected $message = [
'username.require' => '用户名不能为空',
'password.require' => '密码不能为空',
'captcha.require' => '验证码不能为空',
'captcha.captcha' => '验证码不正确',
'username.require' => '用户名不能为空',
'password.require' => '密码不能为空',
'captcha.require' => '验证码不能为空',
'captcha.captcha' => '验证码不正确',
];
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
// 应用公共文件
use think\facade\Cache;
use think\facade\Config;

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\home;
@ -66,7 +72,7 @@ abstract class BaseController
$info = $this->checkLogin();
if ($info) {
$login_class = 'nav-login nav-logined';
$login_top = '<a class="nav-img" href="/home/user/index"><img src="' . $info['headimgurl'] . '" alt="' . $info['username'] . '" />'.$info['username'].'</a>';
$login_top = '<a class="nav-img" href="/home/user/index"><img src="' . $info['headimgurl'] . '" alt="' . $info['username'] . '" />' . $info['username'] . '</a>';
$params['isLogin'] = 1;
$params['uid'] = $info['id'];
$params['nickname'] = $info['nickname'];

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
// 这是home公共文件
//获取当前登录用户的信息
function get_login_user($key = "")
@ -25,7 +31,7 @@ function get_login_user($key = "")
* @param int $param_id 操作类型
* @param array $param 提交的参数
*/
function add_user_log($type, $param_str='', $param_id = 0, $param = [])
function add_user_log($type, $param_str = '', $param_id = 0, $param = [])
{
$request = request();
switch ($type) {
@ -47,18 +53,18 @@ function add_user_log($type, $param_str='', $param_id = 0, $param = [])
case 'delete':
$title = '删除';
break;
case 'join':
case 'join':
$title = '报名';
break;
case 'sign':
break;
case 'sign':
$title = '签到';
break;
case 'play':
break;
case 'play':
$title = '播放';
break;
case 'order':
break;
case 'order':
$title = '下单';
break;
break;
case 'pay':
$title = '支付';
break;
@ -68,29 +74,28 @@ function add_user_log($type, $param_str='', $param_id = 0, $param = [])
}
if ($type == 'login') {
$login_user = \think\facade\Db::name('user')->where(array('id' => $param_id))->find();
if($login_user['nickname'] == ''){
$login_user['nickname'] = $login_user['name'];
}
if($login_user['nickname'] == ''){
$login_user['nickname'] = $login_user['username'];
}
if ($login_user['nickname'] == '') {
$login_user['nickname'] = $login_user['name'];
}
if ($login_user['nickname'] == '') {
$login_user['nickname'] = $login_user['username'];
}
} else {
$login_user = get_login_user();
if (empty($login_user)) {
$login_user=[];
$login_user = [];
$login_user['id'] = 0;
$login_user['nickname'] = '游客';
} else {
if ($login_user['nickname'] == '') {
$login_user['nickname'] = $login_user['username'];
}
}
else{
if($login_user['nickname'] == ''){
$login_user['nickname'] = $login_user['username'];
}
}
}
$content = $login_user['nickname'] . '在' . date('Y-m-d H:i:s') . '执行了' . $title . '操作';
if($param_str!=''){
$content = $login_user['nickname'] . '在' . date('Y-m-d H:i:s') . $title .'了' . $param_str;
}
$content = $login_user['nickname'] . '在' . date('Y-m-d H:i:s') . '执行了' . $title . '操作';
if ($param_str != '') {
$content = $login_user['nickname'] . '在' . date('Y-m-d H:i:s') . $title . '了' . $param_str;
}
$data = [];
$data['uid'] = $login_user['id'];
$data['nickname'] = $login_user['nickname'];

View File

@ -1,17 +1,22 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\home\controller;
use app\home\BaseController;
use think\facade\Db;
use think\facade\View;
class Index extends BaseController
{
public function index()
{
add_user_log('view','首页');
{
add_user_log('view', '首页');
return View();
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\home\controller;
@ -14,10 +20,10 @@ class Login
//登录
public function index()
{
if(!empty(get_login_user('id'))){
if (!empty(get_login_user('id'))) {
redirect('/home/user/index')->send();
}
add_user_log('view','登录页面');
add_user_log('view', '登录页面');
return View();
}
//错误页面
@ -36,7 +42,7 @@ class Login
return to_assign(0, $e->getError());
}
$user = Db::name('user')->where(['username' => $param['username']])->find();
$user = Db::name('User')->where(['username' => $param['username']])->find();
if (empty($user)) {
return to_assign(0, '用户名或密码错误');
}
@ -64,7 +70,7 @@ class Login
$token = make_token();
set_cache($token, $userInfo, 7200);
$userInfo['token'] = $token;
add_user_log('login','',$user['id']);
add_user_log('login', '', $user['id']);
return to_assign(1, '登录成功', $userInfo);
}
@ -97,17 +103,17 @@ class Login
$Avatar->Free();
return $path;
}
//注册
//注册
public function reg()
{
if(!empty(get_login_user('id'))){
if (!empty(get_login_user('id'))) {
redirect('/home/user/index')->send();
}
add_user_log('view','注册页面');
add_user_log('view', '注册页面');
return View();
}
//提交注册
//提交注册
public function reg_submit()
{
$param = get_params();
@ -118,7 +124,7 @@ class Login
return to_assign(0, $e->getError());
}
$user = Db::name('user')->where(['username' => $param['username']])->find();
$user = Db::name('User')->where(['username' => $param['username']])->find();
if (!empty($user)) {
return to_assign(0, '该账户已经存在');
}
@ -130,7 +136,7 @@ class Login
$char = mb_substr($param['username'], 0, 1, 'utf-8');
$param['headimgurl'] = $this->to_avatars($char);
$uid = Db::name('User')->strict(false)->field(true)->insertGetId($param);
add_user_log('reg','',$uid);
add_user_log('reg', '', $uid);
return to_assign(1, '注册成功,请登录', $uid);
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\home\controller;
@ -11,35 +17,34 @@ class User extends BaseController
{
public function index()
{
$uid=get_login_user('id');
$uid = get_login_user('id');
$userInfo = Db::name('User')->where(['id' => $uid])->find();
$userInfo['showname'] = empty($userInfo['nickname']) ? $userInfo['username'] : $userInfo['nickname'];
$userInfo['sex'] = ($userInfo['sex'] == 1) ? '男' : '女';
add_user_log('view','个人中心');
add_user_log('view', '个人中心');
View::assign('userInfo', $userInfo);
return view();
}
public function info_edit()
{
$uid=get_login_user('id');
$uid = get_login_user('id');
$userInfo = Db::name('User')->where(['id' => $uid])->find();
add_user_log('view','个人信息');
add_user_log('view', '个人信息');
View::assign('userInfo', $userInfo);
return view();
}
public function edit_submit()
{
$param =get_params();
$param = get_params();
$param['birthday'] = strtotime($param['birthday']);
$res = Db::name('User')->where(['id' => $param['id']])->strict(false)->field(true)->update($param);
if($res!== false){
add_user_log('edit','个人信息',$param['id'],$param);
to_assign(1,'操作成功');
}
else{
to_assign(0,'操作失败');
if ($res !== false) {
add_user_log('edit', '个人信息', $param['id'], $param);
to_assign(1, '操作成功');
} else {
to_assign(0, '操作失败');
}
}

View File

@ -1,10 +1,16 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
// 这是系统自动生成的middleware定义文件
return [
//开启session中间件
//'think\middleware\SessionInit',
//验证勾股cms是否完成安装
\app\home\middleware\Install::class,
//验证操作
\app\home\middleware\Auth::class,
];
//开启session中间件
//'think\middleware\SessionInit',
//验证勾股cms是否完成安装
\app\home\middleware\Install::class,
//验证操作
\app\home\middleware\Auth::class,
];

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\home\middleware;

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\home\middleware;
@ -8,9 +14,9 @@ class Install
public function handle($request, \Closure $next)
{
if (!is_installed()) {
return $request->isAjax()?to_assign(0,'请先完成系统安装引导'):redirect((string)url('/install/index'));
return $request->isAjax() ? to_assign(0, '请先完成系统安装引导') : redirect((string) url('/install/index'));
}
return $next($request);
}
}

View File

@ -1,29 +1,36 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\home\validate;
use think\Validate;
class UserCheck extends Validate
{
protected $rule = [
'username' => 'require',
'password' => 'require',
'pwd' =>'require|min:6|confirm',
'captcha' => 'require|captcha',
'username' => 'require',
'password' => 'require',
'pwd' => 'require|min:6|confirm',
'captcha' => 'require|captcha',
];
protected $message = [
'username.require' => '账号不能为空',
'password.require' => '密码不能为空',
'pwd.require' => '密码不能为空',
'pwd.min' => '密码必须6位以上',
'pwd.confirm' => '两次密码不一致',//confirm自动相互验证
'captcha.require' => '验证码不能为空',
'captcha.captcha' => '验证码不正确',
'username.require' => '账号不能为空',
'password.require' => '密码不能为空',
'pwd.require' => '密码不能为空',
'pwd.min' => '密码必须6位以上',
'pwd.confirm' => '两次密码不一致', //confirm自动相互验证
'captcha.require' => '验证码不能为空',
'captcha.captcha' => '验证码不正确',
];
protected $scene = [
'login' => ['username', 'password','captcha'],
'reg' => ['username', 'pwd','captcha']
'login' => ['username', 'password', 'captcha'],
'reg' => ['username', 'pwd', 'captcha'],
];
}
}

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\install\controller;
@ -9,7 +15,8 @@ use think\facade\View;
class Index
{
function __construct(){
public function __construct()
{
// 检测是否安装过
if (is_installed()) {
echo '你已经安装过勾股cms系统!';
@ -63,60 +70,60 @@ class Index
public function install()
{
$data = get_params();
try {
validate(InstallCheck::class)->check($data);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(0, $e->getError());
}
// 连接数据库
$link = @new mysqli("{$data['DB_HOST']}:{$data['DB_PORT']}", $data['DB_USER'], $data['DB_PWD']);
// 获取错误信息
$error = $link->connect_error;
if (!is_null($error)) {
// 转义防止和alert中的引号冲突
$error = addslashes($error);
return to_assign(0, '数据库链接失败:' . $error);die;
}
// 设置字符集
$link->query("SET NAMES 'utf8'");
if ($link->server_info < 5.0) {
return to_assign(0, '请将您的mysql升级到5.0以上');die;
}
// 创建数据库并选中
if (!$link->select_db($data['DB_NAME'])) {
return to_assign(0, '未找到数据库'.$data['DB_NAME'].',请先自行创建数据库');die;
}
$link->select_db($data['DB_NAME']);
// 导入sql数据并创建表
$fqcms_sql = file_get_contents(CMS_ROOT . '/app/install/data/gougucms.sql');
$sql_array = preg_split("/;[\r\n]+/", str_replace("cms_", $data['DB_PREFIX'], $fqcms_sql));
foreach ($sql_array as $k => $v) {
if (!empty($v)) {
$link->query($v);
}
$data = get_params();
try {
validate(InstallCheck::class)->check($data);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(0, $e->getError());
}
// 连接数据库
$link = @new mysqli("{$data['DB_HOST']}:{$data['DB_PORT']}", $data['DB_USER'], $data['DB_PWD']);
// 获取错误信息
$error = $link->connect_error;
if (!is_null($error)) {
// 转义防止和alert中的引号冲突
$error = addslashes($error);
return to_assign(0, '数据库链接失败:' . $error);die;
}
// 设置字符集
$link->query("SET NAMES 'utf8'");
if ($link->server_info < 5.0) {
return to_assign(0, '请将您的mysql升级到5.0以上');die;
}
// 创建数据库并选中
if (!$link->select_db($data['DB_NAME'])) {
return to_assign(0, '未找到数据库' . $data['DB_NAME'] . ',请先自行创建数据库');die;
}
$link->select_db($data['DB_NAME']);
// 导入sql数据并创建表
$fqcms_sql = file_get_contents(CMS_ROOT . '/app/install/data/gougucms.sql');
$sql_array = preg_split("/;[\r\n]+/", str_replace("cms_", $data['DB_PREFIX'], $fqcms_sql));
foreach ($sql_array as $k => $v) {
if (!empty($v)) {
$link->query($v);
}
}
//插入管理员信息
$username = get_params('username');
$password = get_params('password');
$nickname = '超级管理员';
$thumb = '/static/admin/images/icon.png';
$salt = set_salt(20);
$password = set_password($password, $salt);
$create_time = time();
$update_time = time();
//插入管理员信息
$username = get_params('username');
$password = get_params('password');
$nickname = '超级管理员';
$thumb = '/static/admin/images/icon.png';
$salt = set_salt(20);
$password = set_password($password, $salt);
$create_time = time();
$update_time = time();
$create_admin_sql = "INSERT INTO " . $data['DB_PREFIX'] . "admin " .
"(username,pwd, nickname,thumb,salt,create_time,update_time) "
. "VALUES "
. "('$username','$password','$nickname','$thumb','$salt','$create_time','$update_time')";
if (!$link->query($create_admin_sql)) {
return to_assign(0, '创建管理员信息失败');
}
$link->close();
$db_str = "<?php
$create_admin_sql = "INSERT INTO " . $data['DB_PREFIX'] . "admin " .
"(username,pwd, nickname,thumb,salt,create_time,update_time) "
. "VALUES "
. "('$username','$password','$nickname','$thumb','$salt','$create_time','$update_time')";
if (!$link->query($create_admin_sql)) {
return to_assign(0, '创建管理员信息失败');
}
$link->close();
$db_str = "<?php
return [
// 默认使用的数据库连接配置
'default' => 'mysql',
@ -147,8 +154,8 @@ return [
'prefix' => '{$data['DB_PREFIX']}',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库编码默认采用utf8mb4
'charset' => 'utf8mb4',
// 数据库调试模式
'debug' => false,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
@ -171,13 +178,13 @@ return [
],
];";
// 创建数据库配置文件
if (false == file_put_contents(CMS_ROOT . "config/database.php", $db_str)) {
return to_assign(0, '创建数据库配置文件失败,请检查目录权限');
}
if (false == file_put_contents(CMS_ROOT . "config/install.lock", '勾股CMS安装鉴定文件请勿删除此次安装时间为' . date('Y-m-d H:i:s', time()))) {
return to_assign(0, '创建安装鉴定文件失败,请检查目录权限');
}
return to_assign();
// 创建数据库配置文件
if (false == file_put_contents(CMS_ROOT . "config/database.php", $db_str)) {
return to_assign(0, '创建数据库配置文件失败,请检查目录权限');
}
if (false == file_put_contents(CMS_ROOT . "config/install.lock", '勾股CMS安装鉴定文件请勿删除此次安装时间为' . date('Y-m-d H:i:s', time()))) {
return to_assign(0, '创建安装鉴定文件失败,请检查目录权限');
}
return to_assign();
}
}

View File

@ -1,6 +1,9 @@
/*
Date: 2021-01-08 18:00:00
*/
/**
* @copyright Copyright (c) 2021
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
SET FOREIGN_KEY_CHECKS=0;

View File

@ -1,36 +1,43 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\install\validate;
use think\Validate;
class InstallCheck extends Validate
{
protected $rule = [
'DB_TYPE' => 'require|eq:mysql',
'DB_HOST' => 'require',
'DB_PORT' => 'require',
'DB_USER' => 'require',
'DB_PWD' => 'require',
'DB_NAME' => 'require',
'DB_PREFIX' => 'require',
'username' => 'require',
'password' => 'require|confirm',
'DB_TYPE' => 'require|eq:mysql',
'DB_HOST' => 'require',
'DB_PORT' => 'require',
'DB_USER' => 'require',
'DB_PWD' => 'require',
'DB_NAME' => 'require',
'DB_PREFIX' => 'require',
'username' => 'require',
'password' => 'require|confirm',
];
protected $message = [
'DB_TYPE.require' => '数据库类型不能为空',
'DB_TYPE.eq' => '数据库类型固定为mysql',
'DB_HOST.require' => '数据库地址不能为空',
'DB_PORT.require' => '数据库端口不能为空',
'DB_USER.require' => '数据库用户名不能为空',
'DB_PWD.require' => '数据库密码不能为空',
'DB_NAME.require' => '数据库名字不能为空',
'DB_PREFIX.require' => '表前缀不能为空',
'username.require' => '管理员账户不能为空',
'password.require' => '密码不能为空',
'password.confirm' => '两次密码不一致',
'DB_TYPE.require' => '数据库类型不能为空',
'DB_TYPE.eq' => '数据库类型固定为mysql',
'DB_HOST.require' => '数据库地址不能为空',
'DB_PORT.require' => '数据库端口不能为空',
'DB_USER.require' => '数据库用户名不能为空',
'DB_PWD.require' => '数据库密码不能为空',
'DB_NAME.require' => '数据库名字不能为空',
'DB_PREFIX.require' => '表前缀不能为空',
'username.require' => '管理员账户不能为空',
'password.require' => '密码不能为空',
'password.confirm' => '两次密码不一致',
];
protected $scene = [
];
}
}

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
// 全局中间件定义文件
return [
// 全局请求缓存
@ -6,5 +11,5 @@ return [
// 多语言加载
// \think\middleware\LoadLangPack::class,
// Session初始化
'think\middleware\SessionInit'
'think\middleware\SessionInit',
];

View File

@ -1,4 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
// [ 应用入口文件 ]
namespace think;
@ -7,7 +13,7 @@ require __DIR__ . '/../vendor/autoload.php';
// 定义当前版本号
define('CMS_VERSION','1.0.0');
// 定义Layui版本号
// 定义ThinkPHP版本号
define('TP_VERSION','6.0.5');
// 定义Layui版本号