init
This commit is contained in:
363
apps/admin/controller/IndexController.php
Normal file
363
apps/admin/controller/IndexController.php
Normal file
@@ -0,0 +1,363 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年3月13日
|
||||
* 默认主页
|
||||
*/
|
||||
namespace app\admin\controller;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\IndexModel;
|
||||
|
||||
class IndexController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new IndexModel();
|
||||
}
|
||||
|
||||
// 登录页面
|
||||
public function index()
|
||||
{
|
||||
if (session('sid')) {
|
||||
location(url('admin/Index/home'));
|
||||
}
|
||||
$this->assign('admin_check_code', $this->config('admin_check_code'));
|
||||
$this->display('index.html');
|
||||
}
|
||||
|
||||
// 主页面
|
||||
public function home()
|
||||
{
|
||||
// 手动修改数据名称
|
||||
if (get('action') == 'moddb') {
|
||||
if ($this->modDB()) {
|
||||
alert_back('修改成功!');
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 删除修改后老数据库(上一步无法直接修改删除)
|
||||
if (issetSession('deldb')) {
|
||||
@unlink(ROOT_PATH . session('deldb'));
|
||||
unset($_SESSION['deldb']);
|
||||
}
|
||||
|
||||
$dbsecurity = true;
|
||||
// 如果是sqlite数据库,并且路径为默认的,则标记为不安全
|
||||
if (get_db_type() == 'sqlite') {
|
||||
if (strpos($this->config('database.dbname'), 'pbootcms') !== false) {
|
||||
if (get_user_ip() != '127.0.0.1' && $this->modDB()) { // 非本地测试时尝试自动修改数据库名称
|
||||
$dbsecurity = true;
|
||||
} else {
|
||||
$dbsecurity = false;
|
||||
}
|
||||
}
|
||||
} elseif (file_exists(ROOT_PATH . '/data/pbootcms.db')) {
|
||||
rename(ROOT_PATH . '/data/pbootcms.db', ROOT_PATH . '/data/' . get_uniqid() . '.db');
|
||||
}
|
||||
|
||||
$this->assign('dbsecurity', $dbsecurity);
|
||||
|
||||
if (! session('pwsecurity')) {
|
||||
location(url('/admin/Index/ucenter'));
|
||||
}
|
||||
|
||||
$this->assign('server', get_server_info());
|
||||
$this->assign('branch', $this->config('upgrade_branch') == '3.X.dev' ? '3.X.dev' : '3.X');
|
||||
$this->assign('revise', $this->config('revise_version') ?: '0');
|
||||
$this->assign('snuser', $this->config('sn_user') ?: '0');
|
||||
$this->assign('site', get_http_url());
|
||||
|
||||
$this->assign('user_info', $this->model->getUserInfo(session('ucode')));
|
||||
|
||||
$this->assign('sum_msg', model('admin.content.Message')->getCount());
|
||||
|
||||
// 内容模型菜单
|
||||
$model = model('admin.content.Model');
|
||||
$models = $model->getModelMenu();
|
||||
foreach ($models as $key => $value) {
|
||||
$models[$key]->count = $model->getModelCount($value->mcode)->count;
|
||||
}
|
||||
|
||||
$this->assign('model_msg', $models);
|
||||
$this->display('system/home.html');
|
||||
}
|
||||
|
||||
// 异步登录验证
|
||||
public function login()
|
||||
{
|
||||
if (! $_POST) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 在安装了gd库时才执行验证码验证
|
||||
if (extension_loaded("gd") && $this->config('admin_check_code') && strtolower(post('checkcode', 'var')) != session('checkcode')) {
|
||||
json(0, '验证码错误!');
|
||||
}
|
||||
|
||||
// 就收数据
|
||||
$username = post('username');
|
||||
$password = post('password');
|
||||
|
||||
if (! preg_match('/^[\x{4e00}-\x{9fa5}\w\-\.@]+$/u', $username)) {
|
||||
json(0, '用户名含有不允许的特殊字符!');
|
||||
}
|
||||
|
||||
if (! $username) {
|
||||
json(0, '用户名不能为空!');
|
||||
}
|
||||
|
||||
if (! $password) {
|
||||
json(0, '密码不能为空!');
|
||||
}
|
||||
|
||||
if (! ! $time = $this->checkLoginBlack()) {
|
||||
$this->log('登录锁定!');
|
||||
json(0, '您登录失败次数太多已被锁定,请' . $time . '秒后再试!');
|
||||
}
|
||||
|
||||
// 执行用户登录
|
||||
$where = array(
|
||||
'username' => $username,
|
||||
'password' => encrypt_string($password)
|
||||
);
|
||||
|
||||
// 判断数据库写入权限
|
||||
if ((get_db_type() == 'sqlite') && ! is_writable(ROOT_PATH . $this->config('database.dbname'))) {
|
||||
json(0, '数据库目录写入权限不足!');
|
||||
}
|
||||
|
||||
if (! ! $login = $this->model->login($where)) {
|
||||
|
||||
session_regenerate_id(true);
|
||||
session('sid', encrypt_string(session_id() . $login->id)); // 会话标识
|
||||
session('M', M);
|
||||
|
||||
session('id', $login->id); // 用户id
|
||||
session('ucode', $login->ucode); // 用户编码
|
||||
session('username', $login->username); // 用户名
|
||||
session('realname', $login->realname); // 真实名字
|
||||
|
||||
if ($where['password'] != '14e1b600b1fd579f47433b88e8d85291') {
|
||||
session('pwsecurity', true);
|
||||
}
|
||||
|
||||
session('acodes', $login->acodes); // 用户管理区域
|
||||
if ($login->acodes) { // 当前显示区域
|
||||
session('acode', $login->acodes[0]);
|
||||
} else {
|
||||
session('acode', '');
|
||||
}
|
||||
|
||||
session('rcodes', $login->rcodes); // 用户角色代码表
|
||||
session('levels', $login->levels); // 用户权限URL列表
|
||||
session('menu_tree', $login->menus); // 菜单树
|
||||
session('area_map', $login->area_map); // 区域代码名称映射表
|
||||
session('area_tree', $login->area_tree); // 用户区域树
|
||||
|
||||
$this->log('登录成功!');
|
||||
json(1, url('admin/Index/home'));
|
||||
} else {
|
||||
$this->setLoginBlack();
|
||||
$this->log('登录失败!');
|
||||
session('checkcode', mt_rand(10000, 99999)); // 登录失败,随机打乱原有验证码
|
||||
json(0, '用户名或密码错误!');
|
||||
}
|
||||
}
|
||||
|
||||
// 退出登录
|
||||
public function loginOut()
|
||||
{
|
||||
session_unset();
|
||||
location(url('/admin/Index/index'));
|
||||
}
|
||||
|
||||
// 用户中心,修改密码
|
||||
public function ucenter()
|
||||
{
|
||||
if ($_POST) {
|
||||
$username = post('username'); // 用户名
|
||||
$realname = post('realname'); // 真实姓名
|
||||
$cpassword = post('cpassword'); // 现在密码
|
||||
$password = post('password'); // 新密码
|
||||
$rpassword = post('rpassword'); // 确认密码
|
||||
|
||||
if (! $username) {
|
||||
alert_back('用户名不能为空!');
|
||||
}
|
||||
if (! $cpassword) {
|
||||
alert_back('当前密码不能为空!');
|
||||
}
|
||||
|
||||
if (! preg_match('/^[\x{4e00}-\x{9fa5}\w\-\.@]+$/u', $username)) {
|
||||
alert_back('用户名含有不允许的特殊字符!');
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'username' => $username,
|
||||
'realname' => $realname,
|
||||
'update_user' => $username
|
||||
);
|
||||
|
||||
// 如果有修改密码,则添加数据
|
||||
if ($password) {
|
||||
if ($password != $rpassword) {
|
||||
alert_back('确认密码不正确!');
|
||||
}
|
||||
$data['password'] = encrypt_string($password);
|
||||
if ($data['password'] != '14e1b600b1fd579f47433b88e8d85291') {
|
||||
session('pwsecurity', true);
|
||||
} else {
|
||||
session('pwsecurity', false);
|
||||
}
|
||||
}
|
||||
|
||||
// 检查现有密码
|
||||
if ($this->model->checkUserPwd(encrypt_string($cpassword))) {
|
||||
if ($this->model->modUserInfo($data)) {
|
||||
session('username', post('username'));
|
||||
session('realname', post('realname'));
|
||||
$this->log('用户资料成功!');
|
||||
success('用户资料修改成功!', - 1);
|
||||
}
|
||||
} else {
|
||||
$this->log('用户资料修改时当前密码错误!');
|
||||
alert_location('当前密码错误!', - 1);
|
||||
}
|
||||
}
|
||||
$this->display('system/ucenter.html');
|
||||
}
|
||||
|
||||
// 切换显示的数据区域
|
||||
public function area()
|
||||
{
|
||||
if ($_POST) {
|
||||
$acode = post('acode');
|
||||
if (in_array($acode, session('acodes'))) {
|
||||
session('acode', $acode);
|
||||
cookie('lg', $acode); // 同步切换前台语言
|
||||
}
|
||||
location(url('admin/Index/home'));
|
||||
}
|
||||
}
|
||||
|
||||
// 清理缓存
|
||||
public function clearCache()
|
||||
{
|
||||
if (get('delall')) {
|
||||
$rs = path_delete(RUN_PATH);
|
||||
} else {
|
||||
$rs = (path_delete(RUN_PATH . '/cache') && path_delete(RUN_PATH . '/complile') && path_delete(RUN_PATH . '/config') && path_delete(RUN_PATH . '/upgrade') && path_delete(RUN_PATH . '/image'));
|
||||
}
|
||||
if ($rs) {
|
||||
if (extension_loaded('Zend OPcache')) {
|
||||
opcache_reset(); // 在启用了OPcache加速器时同时清理
|
||||
}
|
||||
$this->log('清理缓存成功!');
|
||||
alert_back('清理缓存成功!');
|
||||
} else {
|
||||
$this->log('清理缓存失败!');
|
||||
alert_back('清理缓存失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 清理会话
|
||||
public function clearSession()
|
||||
{
|
||||
$rs = path_delete(RUN_PATH . '/session');
|
||||
|
||||
if ($rs) {
|
||||
$this->log('清理会话成功!');
|
||||
alert_back('清理会话成功!');
|
||||
} else {
|
||||
$this->log('清理会话失败!');
|
||||
alert_back('清理会话失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 文件上传方法
|
||||
public function upload()
|
||||
{
|
||||
$upload = upload('upload');
|
||||
if (is_array($upload)) {
|
||||
json(1, $upload);
|
||||
} else {
|
||||
json(0, $upload);
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否在黑名单
|
||||
private function checkLoginBlack()
|
||||
{
|
||||
// 读取黑名单
|
||||
$ip_black = RUN_PATH . '/data/' . md5('login_black') . '.php';
|
||||
if (file_exists($ip_black)) {
|
||||
$data = require $ip_black;
|
||||
$user_ip = get_user_ip();
|
||||
$lock_time = $this->config('lock_time') ?: 900;
|
||||
$lock_count = $this->config('lock_count') ?: 5;
|
||||
if (isset($data[$user_ip]) && $data[$user_ip]['count'] >= $lock_count && time() - $data[$user_ip]['time'] < $lock_time) {
|
||||
return $lock_time - (time() - $data[$user_ip]['time']); // 返回剩余秒数
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 添加登录黑名单
|
||||
private function setLoginBlack()
|
||||
{
|
||||
// 读取黑名单
|
||||
$ip_black = RUN_PATH . '/data/' . md5('login_black') . '.php';
|
||||
if (file_exists($ip_black)) {
|
||||
$data = require $ip_black;
|
||||
} else {
|
||||
$data = array();
|
||||
}
|
||||
|
||||
// 添加IP
|
||||
$user_ip = get_user_ip();
|
||||
$lock_time = $this->config('lock_time') ?: 900;
|
||||
$lock_count = $this->config('lock_count') ?: 5;
|
||||
if (isset($data[$user_ip]) && $data[$user_ip]['count'] < $lock_count && time() - $data[$user_ip]['time'] < $lock_time) {
|
||||
$data[$user_ip] = array(
|
||||
'time' => time(),
|
||||
'count' => $data[get_user_ip()]['count'] + 1
|
||||
);
|
||||
} else {
|
||||
$data[$user_ip] = array(
|
||||
'time' => time(),
|
||||
'count' => 1
|
||||
);
|
||||
}
|
||||
|
||||
// 写入黑名单
|
||||
check_file($ip_black, true);
|
||||
return file_put_contents($ip_black, "<?php\nreturn " . var_export($data, true) . ";");
|
||||
}
|
||||
|
||||
// 修改数据库名称
|
||||
private function modDB()
|
||||
{
|
||||
$file = CONF_PATH . '/database.php';
|
||||
$sname = $this->config('database.dbname');
|
||||
$dname = '/data/' . get_uniqid() . '.db';
|
||||
$sconfig = file_get_contents($file);
|
||||
$dconfig = str_replace($sname, $dname, $sconfig);
|
||||
if (file_put_contents($file, $dconfig)) {
|
||||
if (! copy(ROOT_PATH . $sname, ROOT_PATH . $dname)) {
|
||||
file_put_contents($file, $sconfig); // 回滚配置
|
||||
} else {
|
||||
session('deldb', $sname);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
70
apps/admin/controller/content/CompanyController.php
Normal file
70
apps/admin/controller/content/CompanyController.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年04月17日
|
||||
* 公司设置控制器
|
||||
*/
|
||||
namespace app\admin\controller\content;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\content\CompanyModel;
|
||||
|
||||
class CompanyController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new CompanyModel();
|
||||
}
|
||||
|
||||
// 显示公司设置
|
||||
public function index()
|
||||
{
|
||||
// 获取公司配置
|
||||
$this->assign('companys', $this->model->getList());
|
||||
$this->display('content/company.html');
|
||||
}
|
||||
|
||||
// 修改公司设置
|
||||
public function mod()
|
||||
{
|
||||
if (! $_POST) {
|
||||
return;
|
||||
}
|
||||
$data = array(
|
||||
'name' => post('name'),
|
||||
'address' => post('address'),
|
||||
'postcode' => post('postcode'),
|
||||
'contact' => post('contact'),
|
||||
'mobile' => post('mobile'),
|
||||
'phone' => post('phone'),
|
||||
'fax' => post('fax'),
|
||||
'email' => post('email'),
|
||||
'qq' => post('qq'),
|
||||
'weixin' => post('weixin'),
|
||||
'blicense' => post('blicense'),
|
||||
'other' => post('other')
|
||||
);
|
||||
|
||||
if ($this->model->checkCompany()) {
|
||||
if ($this->model->modCompany($data)) {
|
||||
$this->log('修改公司信息成功!');
|
||||
success('修改成功!', - 1);
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
$data['acode'] = session('acode');
|
||||
if ($this->model->addCompany($data)) {
|
||||
$this->log('修改公司信息成功!');
|
||||
success('修改成功!', - 1);
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
551
apps/admin/controller/content/ContentController.php
Normal file
551
apps/admin/controller/content/ContentController.php
Normal file
@@ -0,0 +1,551 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年12月15日
|
||||
* 文章控制器
|
||||
*/
|
||||
namespace app\admin\controller\content;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\content\ContentModel;
|
||||
|
||||
class ContentController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
private $blank;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new ContentModel();
|
||||
}
|
||||
|
||||
// 文章列表
|
||||
public function index()
|
||||
{
|
||||
if ((! ! $id = get('id', 'int')) && $result = $this->model->getContent($id)) {
|
||||
$this->assign('more', true);
|
||||
$this->assign('content', $result);
|
||||
} else {
|
||||
$this->assign('list', true);
|
||||
if (! $mcode = get('mcode', 'var')) {
|
||||
error('传递的模型编码参数有误,请核对后重试!');
|
||||
}
|
||||
|
||||
if (isset($_GET['keyword'])) {
|
||||
if (! ! $scode = get('scode', 'var')) {
|
||||
$result = $this->model->findContent($mcode, $scode, get('keyword', 'vars'));
|
||||
} else {
|
||||
$result = $this->model->findContentAll($mcode, get('keyword', 'vars'));
|
||||
}
|
||||
} else {
|
||||
$result = $this->model->getList($mcode);
|
||||
}
|
||||
$this->assign('contents', $result);
|
||||
|
||||
// 文章分类下拉列表
|
||||
$sort_model = model('admin.content.ContentSort');
|
||||
$sort_select = $sort_model->getListSelect($mcode);
|
||||
$this->assign('search_select', $this->makeSortSelect($sort_select, get('scode')));
|
||||
$this->assign('sort_select', $this->makeSortSelect($sort_select, session('addscode')));
|
||||
$this->assign('subsort_select', $this->makeSortSelect($sort_select));
|
||||
|
||||
// 模型名称
|
||||
$this->assign('model_name', model('admin.content.Model')->getName($mcode));
|
||||
|
||||
// 扩展字段
|
||||
$this->assign('extfield', model('admin.content.ExtField')->getModelField($mcode));
|
||||
|
||||
$this->assign('baidu_zz_token', $this->config('baidu_zz_token'));
|
||||
$this->assign('baidu_ks_token', $this->config('baidu_ks_token'));
|
||||
|
||||
// 前端地址连接符判断
|
||||
$url_break_char = $this->config('url_break_char') ?: '_';
|
||||
$this->assign('url_break_char', $url_break_char);
|
||||
|
||||
// 获取会员分组
|
||||
$this->assign('groups', model('admin.member.MemberGroup')->getSelect());
|
||||
}
|
||||
|
||||
$this->display('content/content.html');
|
||||
}
|
||||
|
||||
// 文章增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$scode = post('scode');
|
||||
$subscode = post('subscode');
|
||||
$title = post('title');
|
||||
$titlecolor = post('titlecolor');
|
||||
$subtitle = post('subtitle');
|
||||
$filename = trim(post('filename'), '/');
|
||||
$author = post('author');
|
||||
$source = post('source');
|
||||
$outlink = post('outlink');
|
||||
$date = post('date');
|
||||
$ico = post('ico');
|
||||
$pics = post('pics');
|
||||
|
||||
// 获取多图标题
|
||||
$picstitle = post('picstitle');
|
||||
if ($picstitle) {
|
||||
$picstitle = implode(',', $picstitle);
|
||||
}
|
||||
|
||||
$content = post('content');
|
||||
$tags = str_replace(',', ',', post('tags'));
|
||||
$enclosure = post('enclosure');
|
||||
$keywords = post('keywords');
|
||||
$description = post('description');
|
||||
$status = post('status', 'int');
|
||||
$istop = post('istop', 'int', '', '', 0);
|
||||
$isrecommend = post('isrecommend', 'int', '', '', 0);
|
||||
$isheadline = post('isheadline', 'int', '', '', 0);
|
||||
|
||||
$gid = post('gid', 'int') ?: 0;
|
||||
$gtype = post('gtype', 'int') ?: 4;
|
||||
$gnote = post('gnote');
|
||||
|
||||
if (! $scode) {
|
||||
alert_back('内容分类不能为空!');
|
||||
}
|
||||
|
||||
if (! $title) {
|
||||
alert_back('文章标题不能为空!');
|
||||
}
|
||||
|
||||
if ($filename && ! preg_match('/^[a-zA-Z0-9\-]+$/', $filename)) {
|
||||
alert_back('内容URL名称只允许字母、数字、横线组成!');
|
||||
}
|
||||
|
||||
// 自动提起前一百个字符为描述
|
||||
if (! $description && isset($_POST['content'])) {
|
||||
$description = escape_string(clear_html_blank(substr_both(strip_tags($_POST['content']), 0, 150)));
|
||||
}
|
||||
|
||||
// 缩放缩略图
|
||||
if ($ico) {
|
||||
resize_img(ROOT_PATH . $ico, '', $this->config('ico.max_width'), $this->config('ico.max_height'));
|
||||
}
|
||||
|
||||
// 检查自定义URL名称
|
||||
if ($filename) {
|
||||
while ($this->model->checkFilename($filename)) {
|
||||
$filename = $filename . '-' . mt_rand(1, 20);
|
||||
}
|
||||
}
|
||||
|
||||
// 记住新增栏目
|
||||
session('addscode', $scode);
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'acode' => session('acode'),
|
||||
'scode' => $scode,
|
||||
'subscode' => $subscode,
|
||||
'title' => $title,
|
||||
'titlecolor' => $titlecolor,
|
||||
'subtitle' => $subtitle,
|
||||
'filename' => $filename,
|
||||
'author' => $author,
|
||||
'source' => $source,
|
||||
'outlink' => $outlink,
|
||||
'date' => $date,
|
||||
'ico' => $ico,
|
||||
'pics' => $pics,
|
||||
'picstitle' => $picstitle,
|
||||
'content' => $content,
|
||||
'tags' => $tags,
|
||||
'enclosure' => $enclosure,
|
||||
'keywords' => $keywords,
|
||||
'description' => clear_html_blank($description),
|
||||
'sorting' => 255,
|
||||
'status' => $status,
|
||||
'istop' => $istop,
|
||||
'isrecommend' => $isrecommend,
|
||||
'isheadline' => $isheadline,
|
||||
'gid' => $gid,
|
||||
'gtype' => $gtype,
|
||||
'gnote' => $gnote,
|
||||
'visits' => 0,
|
||||
'likes' => 0,
|
||||
'oppose' => 0,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if (! ! $id = $this->model->addContent($data)) {
|
||||
// 扩展内容添加
|
||||
foreach ($_POST as $key => $value) {
|
||||
if (preg_match('/^ext_[\w\-]+$/', $key)) {
|
||||
if (! isset($data2['contentid'])) {
|
||||
$data2['contentid'] = $id;
|
||||
}
|
||||
$temp = post($key);
|
||||
if (is_array($temp)) {
|
||||
$data2[$key] = implode(',', $temp);
|
||||
} else {
|
||||
$data2[$key] = str_replace("\r\n", '<br>', $temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($data2)) {
|
||||
if (! $this->model->addContentExt($data2)) {
|
||||
$this->model->delContent($id);
|
||||
$this->log('新增文章失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
$this->log('新增文章成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/Content/index/mcode/' . get('mcode')));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增文章失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 生成分类选择
|
||||
private function makeSortSelect($tree, $selectid = null)
|
||||
{
|
||||
$list_html = '';
|
||||
foreach ($tree as $value) {
|
||||
// 默认选择项
|
||||
if ($selectid == $value->scode) {
|
||||
$select = "selected='selected'";
|
||||
} else {
|
||||
$select = '';
|
||||
}
|
||||
$list_html .= "<option value='{$value->scode}' $select>{$this->blank}{$value->name}";
|
||||
// 子菜单处理
|
||||
if ($value->son) {
|
||||
$this->blank .= ' ';
|
||||
$list_html .= $this->makeSortSelect($value->son, $selectid);
|
||||
}
|
||||
}
|
||||
// 循环完后回归位置
|
||||
$this->blank = substr($this->blank, 0, - 6);
|
||||
return $list_html;
|
||||
}
|
||||
|
||||
// 文章删除
|
||||
public function del()
|
||||
{
|
||||
// 执行批量删除
|
||||
if ($_POST) {
|
||||
if (! ! $list = post('list')) {
|
||||
if ($this->model->delContentList($list)) {
|
||||
$this->model->delContentExtList($list);
|
||||
$this->log('批量删除文章成功!');
|
||||
success('批量删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('批量删除文章失败!');
|
||||
error('批量删除失败!', - 1);
|
||||
}
|
||||
} else {
|
||||
alert_back('请选择要删除的内容!');
|
||||
}
|
||||
}
|
||||
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
if ($this->model->delContent($id)) {
|
||||
$this->model->delContentExt($id);
|
||||
$this->log('删除文章' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除文章' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 文章修改
|
||||
public function mod()
|
||||
{
|
||||
if (! ! $submit = post('submit')) {
|
||||
switch ($submit) {
|
||||
case 'sorting': // 修改列表排序
|
||||
$listall = post('listall');
|
||||
if ($listall) {
|
||||
$sorting = post('sorting');
|
||||
foreach ($listall as $key => $value) {
|
||||
if ($sorting[$key] === '' || ! is_numeric($sorting[$key]))
|
||||
$sorting[$key] = 255;
|
||||
$this->model->modContent($value, "sorting=" . $sorting[$key]);
|
||||
}
|
||||
$this->log('修改内容排序成功!');
|
||||
success('修改成功!', - 1);
|
||||
} else {
|
||||
alert_back('排序失败,无任何内容!');
|
||||
}
|
||||
break;
|
||||
case 'copy':
|
||||
$list = post('list');
|
||||
$scode = post('scode');
|
||||
if (! $list) {
|
||||
alert_back('请选择要复制的内容!');
|
||||
}
|
||||
if (! $scode) {
|
||||
alert_back('请选择目标栏目!');
|
||||
}
|
||||
if ($this->model->copyContent($list, $scode)) {
|
||||
$this->log('复制内容成功!');
|
||||
success('复制内容成功!', - 1);
|
||||
} else {
|
||||
alert_back('复制内容失败!');
|
||||
}
|
||||
break;
|
||||
case 'move':
|
||||
$list = post('list');
|
||||
$scode = post('scode');
|
||||
if (! $list) {
|
||||
alert_back('请选择要移动的内容!');
|
||||
}
|
||||
if (! $scode) {
|
||||
alert_back('请选择目标栏目!');
|
||||
}
|
||||
|
||||
if ($this->model->modContent($list, "scode='" . $scode . "'")) {
|
||||
$this->log('移动内容成功!');
|
||||
success('移动内容成功!', - 1);
|
||||
} else {
|
||||
alert_back('移动内容失败!');
|
||||
}
|
||||
break;
|
||||
case 'baiduzz':
|
||||
$list = post('list');
|
||||
$urls = post('urls');
|
||||
if (! $list) {
|
||||
alert_back('请选择要推送的内容!');
|
||||
}
|
||||
// 依次推送
|
||||
$domain = get_http_url();
|
||||
if (! $token = $this->config('baidu_zz_token')) {
|
||||
alert_back('请先到系统配置中填写百度普通收录推送token值!');
|
||||
}
|
||||
$api = "http://data.zz.baidu.com/urls?site=$domain&token=$token";
|
||||
foreach ($list as $key => $value) {
|
||||
$url = $domain . $urls[$value];
|
||||
$this->log('百度普通收录推送:' . $url);
|
||||
$post_urls[] = $url;
|
||||
}
|
||||
$result = post_baidu($api, $post_urls);
|
||||
if (isset($result->error)) {
|
||||
alert_back('百度普通收录推送发生错误:' . $result->message);
|
||||
} elseif (isset($result->success)) {
|
||||
alert_back('成功推送' . $result->success . '条,今天剩余可推送' . $result->remain . '条数!');
|
||||
} else {
|
||||
alert_back('发生未知错误!');
|
||||
}
|
||||
case 'baiduks':
|
||||
$list = post('list');
|
||||
$urls = post('urls');
|
||||
if (! $list) {
|
||||
alert_back('请选择要推送的内容!');
|
||||
}
|
||||
// 依次推送
|
||||
$domain = get_http_url();
|
||||
if (! $token = $this->config('baidu_ks_token')) {
|
||||
alert_back('请先到系统配置中填写百度快速收录推送token值!');
|
||||
}
|
||||
$api = "http://data.zz.baidu.com/urls?site=$domain&token=$token&type=daily";
|
||||
foreach ($list as $key => $value) {
|
||||
$url = $domain . $urls[$value];
|
||||
$this->log('百度快速收录推送:' . $url);
|
||||
$post_urls[] = $url;
|
||||
}
|
||||
$result = post_baidu($api, $post_urls);
|
||||
if (isset($result->error)) {
|
||||
alert_back('百度快速收录推送发生错误:' . $result->message);
|
||||
} elseif (isset($result->success_daily)) {
|
||||
alert_back('成功推送' . $result->success_daily . '条,今天剩余可推送' . $result->remain_daily . '条数!');
|
||||
} else {
|
||||
alert_back('发生未知错误!');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modContent($id, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$scode = post('scode');
|
||||
$subscode = post('subscode');
|
||||
$title = post('title');
|
||||
$titlecolor = post('titlecolor');
|
||||
$subtitle = post('subtitle');
|
||||
$filename = trim(post('filename'), '/');
|
||||
$author = post('author');
|
||||
$source = post('source');
|
||||
$outlink = post('outlink');
|
||||
$date = post('date');
|
||||
$ico = post('ico');
|
||||
$pics = post('pics');
|
||||
|
||||
// 获取多图标题
|
||||
$picstitle = post('picstitle');
|
||||
if ($picstitle) {
|
||||
$picstitle = implode(',', $picstitle);
|
||||
}
|
||||
|
||||
$content = post('content');
|
||||
$tags = str_replace(',', ',', post('tags'));
|
||||
$enclosure = post('enclosure');
|
||||
$keywords = post('keywords');
|
||||
$description = post('description');
|
||||
$status = post('status', 'int');
|
||||
$istop = post('istop', 'int', '', '', 0);
|
||||
$isrecommend = post('isrecommend', 'int', '', '', 0);
|
||||
$isheadline = post('isheadline', 'int', '', '', 0);
|
||||
|
||||
$gid = post('gid', 'int') ?: 0;
|
||||
$gtype = post('gtype', 'int') ?: 4;
|
||||
$gnote = post('gnote');
|
||||
|
||||
if (! $scode) {
|
||||
alert_back('内容分类不能为空!');
|
||||
}
|
||||
|
||||
if (! $title) {
|
||||
alert_back('文章标题不能为空!');
|
||||
}
|
||||
|
||||
if ($filename && ! preg_match('/^[a-zA-Z0-9\-]+$/', $filename)) {
|
||||
alert_back('内容URL名称只允许字母、数字、横线组成!');
|
||||
}
|
||||
|
||||
// 自动提起前一百个字符为描述
|
||||
if (! $description && isset($_POST['content'])) {
|
||||
$description = escape_string(clear_html_blank(substr_both(strip_tags($_POST['content']), 0, 150)));
|
||||
}
|
||||
|
||||
// 缩放缩略图
|
||||
if ($ico) {
|
||||
resize_img(ROOT_PATH . $ico, '', $this->config('ico.max_width'), $this->config('ico.max_height'));
|
||||
}
|
||||
|
||||
if ($filename) {
|
||||
while ($this->model->checkFilename($filename, "id<>$id")) {
|
||||
$filename = $filename . '-' . mt_rand(1, 20);
|
||||
}
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'scode' => $scode,
|
||||
'subscode' => $subscode,
|
||||
'title' => $title,
|
||||
'titlecolor' => $titlecolor,
|
||||
'subtitle' => $subtitle,
|
||||
'filename' => $filename,
|
||||
'author' => $author,
|
||||
'source' => $source,
|
||||
'outlink' => $outlink,
|
||||
'date' => $date,
|
||||
'ico' => $ico,
|
||||
'pics' => $pics,
|
||||
'picstitle' => $picstitle,
|
||||
'content' => $content,
|
||||
'tags' => $tags,
|
||||
'enclosure' => $enclosure,
|
||||
'keywords' => $keywords,
|
||||
'description' => clear_html_blank($description),
|
||||
'status' => $status,
|
||||
'istop' => $istop,
|
||||
'isrecommend' => $isrecommend,
|
||||
'isheadline' => $isheadline,
|
||||
'gid' => $gid,
|
||||
'gtype' => $gtype,
|
||||
'gnote' => $gnote,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->modContent($id, $data)) {
|
||||
// 扩展内容修改
|
||||
foreach ($_POST as $key => $value) {
|
||||
if (preg_match('/^ext_[\w\-]+$/', $key)) {
|
||||
$temp = post($key);
|
||||
if (is_array($temp)) {
|
||||
$data2[$key] = implode(',', $temp);
|
||||
} else {
|
||||
$data2[$key] = str_replace("\r\n", '<br>', $temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($data2)) {
|
||||
if ($this->model->findContentExt($id)) {
|
||||
$this->model->modContentExt($id, $data2);
|
||||
} else {
|
||||
$data2['contentid'] = $id;
|
||||
$this->model->addContentExt($data2);
|
||||
}
|
||||
}
|
||||
|
||||
$this->log('修改文章' . $id . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/Content/index/mcode/2'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
// 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
if (! $result = $this->model->getContent($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('content', $result);
|
||||
|
||||
if (! $mcode = get('mcode', 'var')) {
|
||||
error('传递的模型编码参数有误,请核对后重试!');
|
||||
}
|
||||
|
||||
// 文章分类
|
||||
$sort_model = model('admin.content.ContentSort');
|
||||
$sort_select = $sort_model->getListSelect($mcode);
|
||||
$this->assign('sort_select', $this->makeSortSelect($sort_select, $result->scode));
|
||||
$this->assign('subsort_select', $this->makeSortSelect($sort_select, $result->subscode));
|
||||
|
||||
// 模型名称
|
||||
$this->assign('model_name', model('admin.content.Model')->getName($mcode));
|
||||
|
||||
// 扩展字段
|
||||
$this->assign('extfield', model('admin.content.ExtField')->getModelField($mcode));
|
||||
|
||||
// 获取会员分组
|
||||
$this->assign('groups', model('admin.member.MemberGroup')->getSelect());
|
||||
|
||||
$this->display('content/content.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
557
apps/admin/controller/content/ContentSortController.php
Normal file
557
apps/admin/controller/content/ContentSortController.php
Normal file
@@ -0,0 +1,557 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年12月26日
|
||||
* 内容栏目控制器
|
||||
*/
|
||||
namespace app\admin\controller\content;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\content\ContentSortModel;
|
||||
|
||||
class ContentSortController extends Controller
|
||||
{
|
||||
|
||||
private $count;
|
||||
|
||||
private $blank;
|
||||
|
||||
private $outData = array();
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new ContentSortModel();
|
||||
}
|
||||
|
||||
// 内容栏目列表
|
||||
public function index()
|
||||
{
|
||||
$this->assign('list', true);
|
||||
$tree = $this->model->getList();
|
||||
$sorts = $this->makeSortList($tree);
|
||||
$this->assign('sorts', $sorts);
|
||||
|
||||
// 内容模型
|
||||
$models = model('admin.content.Model');
|
||||
$this->assign('allmodels', $models->getSelectAll());
|
||||
$this->assign('models', $models->getSelect());
|
||||
|
||||
// 内容栏目下拉表
|
||||
$sort_tree = $this->model->getSelect();
|
||||
$sort_select = $this->makeSortSelect($sort_tree);
|
||||
$this->assign('sort_select', $sort_select);
|
||||
|
||||
// 模板文件
|
||||
$htmldir = $this->config('tpl_html_dir') ? '/' . $this->config('tpl_html_dir') : '';
|
||||
$this->assign('tpls', file_list(ROOT_PATH . current($this->config('tpl_dir')) . '/' . $this->model->getTheme() . $htmldir));
|
||||
|
||||
// 前端地址连接符判断
|
||||
$url_break_char = $this->config('url_break_char') ?: '_';
|
||||
$this->assign('url_break_char', $url_break_char);
|
||||
|
||||
// 获取会员分组
|
||||
$this->assign('groups', model('admin.member.MemberGroup')->getSelect());
|
||||
|
||||
$this->display('content/contentsort.html');
|
||||
}
|
||||
|
||||
// 生成无限级内容栏目列表
|
||||
private function makeSortList($tree)
|
||||
{
|
||||
// 循环生成
|
||||
foreach ($tree as $value) {
|
||||
$this->count ++;
|
||||
$this->outData[$this->count] = new \stdClass();
|
||||
$this->outData[$this->count]->id = $value->id;
|
||||
$this->outData[$this->count]->blank = $this->blank;
|
||||
$this->outData[$this->count]->name = $value->name;
|
||||
$this->outData[$this->count]->subname = $value->subname;
|
||||
$this->outData[$this->count]->scode = $value->scode;
|
||||
$this->outData[$this->count]->pcode = $value->pcode;
|
||||
$this->outData[$this->count]->mcode = $value->mcode;
|
||||
$this->outData[$this->count]->listtpl = $value->listtpl;
|
||||
$this->outData[$this->count]->contenttpl = $value->contenttpl;
|
||||
$this->outData[$this->count]->ico = $value->ico;
|
||||
$this->outData[$this->count]->pic = $value->pic;
|
||||
$this->outData[$this->count]->keywords = $value->keywords;
|
||||
$this->outData[$this->count]->description = $value->description;
|
||||
$this->outData[$this->count]->outlink = $value->outlink;
|
||||
$this->outData[$this->count]->sorting = $value->sorting;
|
||||
$this->outData[$this->count]->status = $value->status;
|
||||
$this->outData[$this->count]->filename = $value->filename;
|
||||
$this->outData[$this->count]->type = $value->type;
|
||||
$this->outData[$this->count]->urlname = $value->urlname;
|
||||
$this->outData[$this->count]->create_user = $value->create_user;
|
||||
$this->outData[$this->count]->update_user = $value->update_user;
|
||||
$this->outData[$this->count]->create_time = $value->create_time;
|
||||
$this->outData[$this->count]->update_time = $value->update_time;
|
||||
|
||||
if ($value->son) {
|
||||
$this->outData[$this->count]->son = true;
|
||||
} else {
|
||||
$this->outData[$this->count]->son = false;
|
||||
}
|
||||
|
||||
// 子菜单处理
|
||||
if ($value->son) {
|
||||
$this->blank .= ' ';
|
||||
$this->makeSortList($value->son);
|
||||
}
|
||||
}
|
||||
|
||||
// 循环完后回归缩进位置
|
||||
$this->blank = substr($this->blank, 6);
|
||||
return $this->outData;
|
||||
}
|
||||
|
||||
// 内容栏目增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
if (! ! $multiplename = post('multiplename')) {
|
||||
$multiplename = str_replace(',', ',', $multiplename);
|
||||
$pcode = post('pcode', 'var');
|
||||
$type = post('type');
|
||||
$mcode = post('mcode');
|
||||
$listtpl = basename(post('listtpl'));
|
||||
$contenttpl = basename(post('contenttpl'));
|
||||
$status = post('status');
|
||||
|
||||
if (! $pcode) { // 父编码默认为0
|
||||
$pcode = 0;
|
||||
}
|
||||
|
||||
if (! $mcode) {
|
||||
alert_back('栏目模型必须选择!');
|
||||
}
|
||||
|
||||
if (! $type) {
|
||||
alert_back('栏目类型不能为空!');
|
||||
}
|
||||
|
||||
$names = explode(',', $multiplename);
|
||||
$lastcode = $this->model->getLastCode();
|
||||
$scode = get_auto_code($lastcode);
|
||||
foreach ($names as $key => $value) {
|
||||
$data[] = array(
|
||||
'acode' => session('acode'),
|
||||
'pcode' => $pcode,
|
||||
'scode' => $scode,
|
||||
'name' => $value,
|
||||
'mcode' => $mcode,
|
||||
'listtpl' => $listtpl,
|
||||
'contenttpl' => $contenttpl,
|
||||
'status' => $status,
|
||||
'gid' => 0,
|
||||
'gtype' => 4,
|
||||
'subname' => '',
|
||||
'filename' => '',
|
||||
'outlink' => '',
|
||||
'ico' => '',
|
||||
'pic' => '',
|
||||
'title' => '',
|
||||
'keywords' => '',
|
||||
'description' => '',
|
||||
'sorting' => 255,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
$scode = get_auto_code($scode);
|
||||
}
|
||||
} else {
|
||||
// 获取数据
|
||||
$scode = get_auto_code($this->model->getLastCode()); // 自动编码;
|
||||
$pcode = post('pcode', 'var');
|
||||
$name = post('name');
|
||||
$type = post('type');
|
||||
$mcode = post('mcode');
|
||||
$listtpl = basename(post('listtpl'));
|
||||
$contenttpl = basename(post('contenttpl'));
|
||||
$status = post('status');
|
||||
$subname = post('subname');
|
||||
$filename = trim(post('filename'), '/');
|
||||
$outlink = post('outlink');
|
||||
$ico = post('ico');
|
||||
$pic = post('pic');
|
||||
$title = post('title');
|
||||
$keywords = post('keywords');
|
||||
$description = post('description');
|
||||
|
||||
$gid = post('gid', 'int') ?: 0;
|
||||
$gtype = post('gtype', 'int') ?: 4;
|
||||
$gnote = post('gnote');
|
||||
|
||||
$def1 = post('def1');
|
||||
$def2 = post('def2');
|
||||
$def3 = post('def3');
|
||||
|
||||
if (! $scode) {
|
||||
alert_back('编码不能为空!');
|
||||
}
|
||||
|
||||
if (! $pcode) { // 父编码默认为0
|
||||
$pcode = 0;
|
||||
}
|
||||
|
||||
if (! $name) {
|
||||
alert_back('栏目名不能为空!');
|
||||
}
|
||||
|
||||
if (! $mcode) {
|
||||
alert_back('栏目模型必须选择!');
|
||||
}
|
||||
|
||||
if (! $type) {
|
||||
alert_back('栏目类型不能为空!');
|
||||
}
|
||||
|
||||
if ($filename && ! preg_match('/^[a-zA-Z0-9\-\/]+$/', $filename)) {
|
||||
alert_back('URL名称只允许字母、数字、横线、斜线组成!');
|
||||
}
|
||||
|
||||
if ($filename && $this->model->checkUrlname($filename)) {
|
||||
alert_back('URL名称与模型URL名称冲突,请换一个名称!');
|
||||
}
|
||||
|
||||
// 缩放缩略图
|
||||
if ($ico) {
|
||||
resize_img(ROOT_PATH . $ico, '', $this->config('ico.max_width'), $this->config('ico.max_height'));
|
||||
}
|
||||
|
||||
// 检查编码
|
||||
if ($this->model->checkSort("scode='$scode'")) {
|
||||
alert_back('该内容栏目编号已经存在,不能再使用!');
|
||||
}
|
||||
|
||||
// 检查自定义URL名称
|
||||
if ($filename) {
|
||||
while ($this->model->checkFilename($filename)) {
|
||||
$filename = $filename . '_' . mt_rand(1, 20);
|
||||
}
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'acode' => session('acode'),
|
||||
'pcode' => $pcode,
|
||||
'scode' => $scode,
|
||||
'name' => $name,
|
||||
'mcode' => $mcode,
|
||||
'listtpl' => $listtpl,
|
||||
'contenttpl' => $contenttpl,
|
||||
'status' => $status,
|
||||
'gid' => $gid,
|
||||
'gtype' => $gtype,
|
||||
'gnote' => $gnote,
|
||||
'subname' => $subname,
|
||||
'def1' => $def1,
|
||||
'def2' => $def2,
|
||||
'def3' => $def3,
|
||||
'filename' => $filename,
|
||||
'outlink' => $outlink,
|
||||
'ico' => $ico,
|
||||
'pic' => $pic,
|
||||
'title' => $title,
|
||||
'keywords' => $keywords,
|
||||
'description' => $description,
|
||||
'sorting' => 255,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
}
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->addSort($data)) {
|
||||
if ($type == 1 && ! $outlink) { // 在填写了外链时不生成单页
|
||||
if ($multiplename) {
|
||||
foreach ($data as $key => $value) {
|
||||
$this->addSingle($value['scode'], $value['name']);
|
||||
}
|
||||
} else {
|
||||
$this->addSingle($scode, $name);
|
||||
}
|
||||
}
|
||||
$this->log('新增数据内容栏目' . $scode . '成功!');
|
||||
success('新增成功!', url('/admin/ContentSort/index'));
|
||||
} else {
|
||||
$this->log('新增数据内容栏目' . $scode . '失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 生成内容栏目下拉选择
|
||||
private function makeSortSelect($tree, $selectid = null)
|
||||
{
|
||||
$list_html = '';
|
||||
foreach ($tree as $value) {
|
||||
// 默认选择项
|
||||
if ($selectid == $value->scode) {
|
||||
$select = "selected='selected'";
|
||||
} else {
|
||||
$select = '';
|
||||
}
|
||||
if (get('scode') != $value->scode) { // 不显示本身,避免出现自身为自己的父节点
|
||||
$list_html .= "<option value='{$value->scode}' $select>{$this->blank}{$value->name}</option>";
|
||||
}
|
||||
// 子菜单处理
|
||||
if ($value->son) {
|
||||
$this->blank .= ' ';
|
||||
$list_html .= $this->makeSortSelect($value->son, $selectid);
|
||||
}
|
||||
}
|
||||
// 循环完后回归位置
|
||||
$this->blank = substr($this->blank, 0, - 6);
|
||||
return $list_html;
|
||||
}
|
||||
|
||||
// 内容栏目删除
|
||||
public function del()
|
||||
{
|
||||
// 执行批量删除
|
||||
if ($_POST) {
|
||||
if (! ! $list = post('list')) {
|
||||
if ($this->model->delSortList($list)) {
|
||||
$this->log('批量删除栏目成功!');
|
||||
success('批量删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('批量删除栏目失败!');
|
||||
error('批量删除失败!', - 1);
|
||||
}
|
||||
} else {
|
||||
alert_back('请选择要删除的栏目!');
|
||||
}
|
||||
}
|
||||
|
||||
if (! $scode = get('scode', 'var')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
if ($this->model->delSort($scode)) {
|
||||
$this->log('删除数据内容栏目' . $scode . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除数据内容栏目' . $scode . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 内容栏目修改
|
||||
public function mod()
|
||||
{
|
||||
if (! ! $submit = post('submit')) {
|
||||
switch ($submit) {
|
||||
case 'sorting': // 修改列表排序
|
||||
$listall = post('listall');
|
||||
if ($listall) {
|
||||
$sorting = post('sorting');
|
||||
foreach ($listall as $key => $value) {
|
||||
if ($sorting[$key] === '' || ! is_numeric($sorting[$key]))
|
||||
$sorting[$key] = 255;
|
||||
$this->model->modSortSorting($value, "sorting=" . $sorting[$key]);
|
||||
}
|
||||
$this->log('批量修改栏目排序成功!');
|
||||
success('修改成功!', - 1);
|
||||
} else {
|
||||
alert_back('排序失败,无任何内容!');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (! $scode = get('scode', 'var')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modSort($scode, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
$this->log('修改数据内容栏目' . $scode . '状态' . $value . '成功!');
|
||||
location(- 1);
|
||||
} else {
|
||||
$this->log('修改数据内容栏目' . $scode . '状态' . $value . '失败!');
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$pcode = post('pcode', 'var');
|
||||
$name = post('name');
|
||||
$mcode = post('mcode');
|
||||
$type = post('type');
|
||||
$listtpl = basename(post('listtpl'));
|
||||
$contenttpl = basename(post('contenttpl'));
|
||||
$status = post('status');
|
||||
$subname = post('subname');
|
||||
$filename = trim(post('filename'), '/');
|
||||
$outlink = post('outlink');
|
||||
$ico = post('ico');
|
||||
$pic = post('pic');
|
||||
$title = post('title');
|
||||
$keywords = post('keywords');
|
||||
$description = post('description');
|
||||
$modsub = post('modsub', 'int');
|
||||
|
||||
$gid = post('gid', 'int') ?: 0;
|
||||
$gtype = post('gtype', 'int') ?: 4;
|
||||
$gnote = post('gnote');
|
||||
|
||||
$def1 = post('def1');
|
||||
$def2 = post('def2');
|
||||
$def3 = post('def3');
|
||||
|
||||
if (! $pcode) { // 父编码默认为0
|
||||
$pcode = 0;
|
||||
}
|
||||
|
||||
if (! $name) {
|
||||
alert_back('栏目名不能为空!');
|
||||
}
|
||||
|
||||
if (! $mcode) {
|
||||
alert_back('栏目模型必须选择!');
|
||||
}
|
||||
|
||||
if (! $type) {
|
||||
alert_back('栏目类型不能为空!');
|
||||
}
|
||||
|
||||
if ($filename && ! preg_match('/^[a-zA-Z0-9\-\/]+$/', $filename)) {
|
||||
alert_back('URL名称只允许字母、数字、横线、斜线组成!');
|
||||
}
|
||||
|
||||
if ($filename && $this->model->checkUrlname($filename)) {
|
||||
alert_back('URL名称与模型URL名称冲突,请换一个名称!');
|
||||
}
|
||||
|
||||
// 缩放缩略图
|
||||
if ($ico) {
|
||||
resize_img(ROOT_PATH . $ico, '', $this->config('ico.max_width'), $this->config('ico.max_height'));
|
||||
}
|
||||
|
||||
if ($filename) {
|
||||
while ($this->model->checkFilename($filename, "scode<>'$scode'")) {
|
||||
$filename = $filename . '-' . mt_rand(1, 20);
|
||||
}
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'pcode' => $pcode,
|
||||
'name' => $name,
|
||||
'mcode' => $mcode,
|
||||
'listtpl' => $listtpl,
|
||||
'contenttpl' => $contenttpl,
|
||||
'status' => $status,
|
||||
'gid' => $gid,
|
||||
'gtype' => $gtype,
|
||||
'gnote' => $gnote,
|
||||
'subname' => $subname,
|
||||
'def1' => $def1,
|
||||
'def2' => $def2,
|
||||
'def3' => $def3,
|
||||
'filename' => $filename,
|
||||
'outlink' => $outlink,
|
||||
'ico' => $ico,
|
||||
'pic' => $pic,
|
||||
'title' => $title,
|
||||
'keywords' => $keywords,
|
||||
'description' => $description,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->modSort($scode, $data, $modsub)) {
|
||||
// 如果修改为单页并且跳转,则删除单页内容,否则判断是否存在内容,不存在则添加
|
||||
if ($type == 1 && $outlink) {
|
||||
$this->model->delContent($scode);
|
||||
} elseif ($type == 1 && ! $this->model->findContent($scode)) {
|
||||
$this->addSingle($scode, $name);
|
||||
}
|
||||
|
||||
$this->log('修改数据内容栏目' . $scode . '成功!');
|
||||
success('修改成功!', url('/admin/ContentSort/index'));
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else { // 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
|
||||
$sort = $this->model->getSort($scode);
|
||||
if (! $sort) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('sort', $sort);
|
||||
|
||||
// 父编码下拉选择
|
||||
$sort_tree = $this->model->getSelect();
|
||||
$sort_select = $this->makeSortSelect($sort_tree, $sort->pcode);
|
||||
$this->assign('sort_select', $sort_select);
|
||||
|
||||
// 模板文件
|
||||
$htmldir = $this->config('tpl_html_dir') ? '/' . $this->config('tpl_html_dir') : '';
|
||||
$this->assign('tpls', file_list(ROOT_PATH . current($this->config('tpl_dir')) . '/' . $this->model->getTheme() . $htmldir));
|
||||
|
||||
// 内容模型
|
||||
$models = model('admin.content.Model');
|
||||
$this->assign('models', $models->getSelect());
|
||||
|
||||
// 获取会员分组
|
||||
$this->assign('groups', model('admin.member.MemberGroup')->getSelect());
|
||||
|
||||
$this->display('content/contentsort.html');
|
||||
}
|
||||
}
|
||||
|
||||
// 添加栏目时执行单页内容增加
|
||||
public function addSingle($scode, $title)
|
||||
{
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'acode' => session('acode'),
|
||||
'scode' => $scode,
|
||||
'subscode' => '',
|
||||
'title' => $title,
|
||||
'titlecolor' => '#333333',
|
||||
'subtitle' => '',
|
||||
'filename' => '',
|
||||
'author' => session('realname'),
|
||||
'source' => '本站',
|
||||
'outlink' => '',
|
||||
'date' => date('Y-m-d H:i:s'),
|
||||
'ico' => '',
|
||||
'pics' => '',
|
||||
'content' => '',
|
||||
'tags' => '',
|
||||
'enclosure' => '',
|
||||
'keywords' => '',
|
||||
'description' => '',
|
||||
'sorting' => 255,
|
||||
'status' => 1,
|
||||
'istop' => 0,
|
||||
'isrecommend' => 0,
|
||||
'isheadline' => 0,
|
||||
'gid' => 0,
|
||||
'gtype' => 4,
|
||||
'gnote' => '',
|
||||
'visits' => 0,
|
||||
'likes' => 0,
|
||||
'oppose' => 0,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->addSingle($data)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
231
apps/admin/controller/content/ExtFieldController.php
Normal file
231
apps/admin/controller/content/ExtFieldController.php
Normal file
@@ -0,0 +1,231 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2018年3月1日
|
||||
* 扩展字段控制器
|
||||
*/
|
||||
namespace app\admin\controller\content;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\content\ExtFieldModel;
|
||||
|
||||
class ExtFieldController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new ExtFieldModel();
|
||||
}
|
||||
|
||||
// 扩展字段列表
|
||||
public function index()
|
||||
{
|
||||
if ((! ! $id = get('id', 'int')) && $result = $this->model->getExtField($id)) {
|
||||
$this->assign('more', true);
|
||||
$this->assign('extfield', $result);
|
||||
} else {
|
||||
$this->assign('list', true);
|
||||
if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
|
||||
$result = $this->model->findExtField($field, $keyword);
|
||||
} else {
|
||||
$result = $this->model->getList();
|
||||
}
|
||||
|
||||
// 内容模型
|
||||
$models = model('admin.content.Model');
|
||||
$this->assign('models', $models->getSelect());
|
||||
|
||||
$this->assign('extfields', $result);
|
||||
}
|
||||
$this->display('content/extfield.html');
|
||||
}
|
||||
|
||||
// 扩展字段增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$mcode = post('mcode');
|
||||
$name = post('name', 'var');
|
||||
$type = post('type', 'int');
|
||||
if (! ! $value = post('value')) {
|
||||
$value = str_replace("\r\n", ",", $value); // 替换回车
|
||||
$value = str_replace(",", ",", $value); // 替换中文逗号分割符
|
||||
}
|
||||
$description = post('description');
|
||||
$sorting = post('sorting', 'int');
|
||||
|
||||
if (! $mcode) {
|
||||
alert_back('内容模型不能为空!');
|
||||
}
|
||||
|
||||
if (! $name) {
|
||||
alert_back('字段名称不能为空!');
|
||||
} else {
|
||||
$name = "ext_" . $name;
|
||||
}
|
||||
|
||||
if (! $type) {
|
||||
alert_back('字段类型不能为空!');
|
||||
}
|
||||
|
||||
if (! $description) {
|
||||
alert_back('字段描述不能为空!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'mcode' => $mcode,
|
||||
'name' => $name,
|
||||
'type' => $type,
|
||||
'value' => $value,
|
||||
'description' => $description,
|
||||
'sorting' => $sorting
|
||||
);
|
||||
|
||||
// 字段类型及长度
|
||||
switch ($type) {
|
||||
case '2': // 多行
|
||||
$mysql = 'varchar(1000)';
|
||||
$sqlite = 'TEXT(1000)';
|
||||
break;
|
||||
case '7': // 时间日期
|
||||
$mysql = 'datetime';
|
||||
$sqlite = 'TEXT';
|
||||
break;
|
||||
case '8': // 编辑器
|
||||
$mysql = 'TEXT';
|
||||
$sqlite = 'TEXT(10000)';
|
||||
break;
|
||||
default:
|
||||
$mysql = 'varchar(200)';
|
||||
$sqlite = 'TEXT(200)';
|
||||
}
|
||||
|
||||
// 字段不存在时创建
|
||||
if (! $this->model->isExistField($name)) {
|
||||
if (get_db_type() == 'sqlite') {
|
||||
$result = $this->model->amd("ALTER TABLE ay_content_ext ADD COLUMN $name $sqlite NULL");
|
||||
} else {
|
||||
$result = $this->model->amd("ALTER TABLE ay_content_ext ADD $name $mysql NULL COMMENT '$description'");
|
||||
}
|
||||
} elseif ($this->model->checkExtField($name)) { // 字段存在且已使用则 报错
|
||||
alert_back('字段已经存在,不能重复添加!');
|
||||
}
|
||||
|
||||
// 执行扩展字段记录添加
|
||||
if ($this->model->addExtField($data)) {
|
||||
$this->log('新增扩展字段成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/ExtField/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增扩展字段失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 扩展字段删除
|
||||
public function del()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
$name = $this->model->getExtFieldName($id);
|
||||
if ($this->model->delExtField($id)) {
|
||||
// mysql数据库执行字段删除,sqlite暂时不支持
|
||||
if (! ! $name) {
|
||||
if (get_db_type() == 'mysql') {
|
||||
$result = $this->model->amd("ALTER TABLE ay_content_ext DROP COLUMN $name");
|
||||
}
|
||||
}
|
||||
$this->log('删除扩展字段' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除扩展字段' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 扩展字段修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modExtField($id, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$mcode = post('mcode');
|
||||
$type = post('type');
|
||||
if (! ! $value = post('value')) {
|
||||
$value = str_replace("\r\n", ",", $value); // 替换回车
|
||||
$value = str_replace(",", ",", $value); // 替换中文逗号分割符
|
||||
}
|
||||
$description = post('description');
|
||||
$sorting = post('sorting', 'int');
|
||||
|
||||
if (! $mcode) {
|
||||
alert_back('内容模型不能为空!');
|
||||
}
|
||||
|
||||
if (! $description) {
|
||||
alert_back('字段描述不能为空!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'mcode' => $mcode,
|
||||
'type' => $type,
|
||||
'value' => $value,
|
||||
'description' => $description,
|
||||
'sorting' => $sorting
|
||||
);
|
||||
|
||||
// 执行修改
|
||||
if ($this->model->modExtField($id, $data)) {
|
||||
$this->log('修改扩展字段' . $id . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/ExtField/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
|
||||
// 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
if (! $result = $this->model->getExtField($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
|
||||
// 内容模型
|
||||
$models = model('admin.content.Model');
|
||||
$this->assign('models', $models->getSelect());
|
||||
|
||||
$this->assign('extfield', $result);
|
||||
$this->display('content/extfield.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
354
apps/admin/controller/content/FormController.php
Normal file
354
apps/admin/controller/content/FormController.php
Normal file
@@ -0,0 +1,354 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2018年5月28日
|
||||
* 自定义表单控制器
|
||||
*/
|
||||
namespace app\admin\controller\content;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\content\FormModel;
|
||||
|
||||
class FormController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new FormModel();
|
||||
}
|
||||
|
||||
// 自定义表单列表
|
||||
public function index()
|
||||
{
|
||||
if ((! ! $fcode = get('fcode', 'var')) && $form = $this->model->getFormByCode($fcode)) {
|
||||
$this->assign('form', $form);
|
||||
if (get('action') == 'showdata') {
|
||||
$this->assign('showdata', true);
|
||||
$this->assign('fields', $this->model->getFormFieldByCode($fcode)); // 获取字段
|
||||
$table = $this->model->getFormTableByCode($fcode);
|
||||
if (get('export')) {
|
||||
$this->assign('formdata', $this->model->getFormData($table, false));
|
||||
header('Content-Type:application/vnd.ms-excel');
|
||||
header('Cache-Control: max-age=0');
|
||||
header("Content-Disposition:filename=" . $form->form_name . "-" . date("YmdHis") . ".xls");
|
||||
$this->display('content/exform.html');
|
||||
} else {
|
||||
$this->assign('formdata', $this->model->getFormData($table, true));
|
||||
}
|
||||
}
|
||||
if (get('action') == 'showfield') {
|
||||
$this->assign('showfield', true);
|
||||
$this->assign('fields', $this->model->getFormFieldByCode($fcode));
|
||||
}
|
||||
} else {
|
||||
$this->assign('list', true);
|
||||
if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
|
||||
$result = $this->model->findForm($field, $keyword);
|
||||
} else {
|
||||
$result = $this->model->getList();
|
||||
}
|
||||
|
||||
$this->assign('forms', $result);
|
||||
}
|
||||
$this->display('content/form.html');
|
||||
}
|
||||
|
||||
// 自定义表单增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
if (get('action') == 'addform') {
|
||||
$fcode = get_auto_code($this->model->getLastCode());
|
||||
$form_name = post('form_name');
|
||||
$table_name = 'ay_diy_' . post('table_name', 'var');
|
||||
|
||||
if (! $form_name) {
|
||||
alert_back('表单名称不能为空!');
|
||||
}
|
||||
|
||||
if (! $table_name) {
|
||||
alert_back('表单数据表不能为空!');
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'fcode' => $fcode,
|
||||
'form_name' => $form_name,
|
||||
'table_name' => $table_name,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
if (get_db_type() == 'sqlite') {
|
||||
$result = $this->model->amd("CREATE TABLE `$table_name` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,`create_time` TEXT NOT NULL)");
|
||||
} else {
|
||||
$result = $this->model->amd("CREATE TABLE `$table_name` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`create_time` datetime NOT NULL,PRIMARY KEY (`id`))ENGINE=MyISAM DEFAULT CHARSET=utf8");
|
||||
}
|
||||
|
||||
if ($this->model->addForm($data)) {
|
||||
$this->log('新增自定义表单成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/Form/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增自定义表单失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
} else {
|
||||
// 获取数据
|
||||
$fcode = post('fcode', 'var');
|
||||
$name = post('name', 'var');
|
||||
$length = post('length', 'int') ?: 20;
|
||||
$required = post('required', 'int') ?: 0;
|
||||
$description = post('description');
|
||||
$sorting = post('sorting', 'int') ?: 255;
|
||||
|
||||
if (! $fcode) {
|
||||
alert_back('表单编码不能为空!');
|
||||
}
|
||||
|
||||
if (! $name) {
|
||||
alert_back('字段名称不能为空!');
|
||||
}
|
||||
|
||||
if (! $description) {
|
||||
alert_back('字段描述不能为空!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'fcode' => $fcode,
|
||||
'name' => $name,
|
||||
'length' => $length,
|
||||
'required' => $required,
|
||||
'description' => $description,
|
||||
'sorting' => $sorting,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 获取表名称
|
||||
$table = $this->model->getFormTableByCode($fcode);
|
||||
|
||||
// 字段类型及长度
|
||||
$mysql = "varchar($length)";
|
||||
$sqlite = "TEXT($length)";
|
||||
|
||||
// 字段不存在时创建
|
||||
if (! $this->model->isExistField($table, $name)) {
|
||||
if (get_db_type() == 'sqlite') {
|
||||
$result = $this->model->amd("ALTER TABLE $table ADD COLUMN $name $sqlite NULL");
|
||||
} else {
|
||||
$result = $this->model->amd("ALTER TABLE $table ADD $name $mysql NULL COMMENT '$description'");
|
||||
}
|
||||
} elseif ($this->model->checkFormField($fcode, $name)) {
|
||||
alert_back('字段已经存在,不能重复添加!');
|
||||
}
|
||||
|
||||
// 执行自定义表单记录添加
|
||||
if ($this->model->addFormField($data)) {
|
||||
$this->log('新增表单字段成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/Form/index/fcode/' . $fcode . '/action/showfield'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增表单字段失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 自定义表单删除
|
||||
public function del()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 删除表单
|
||||
if (get('action') == 'delform') {
|
||||
if ($id == 1) {
|
||||
alert_back('留言表单不允许删除');
|
||||
}
|
||||
$table = $this->model->getFormTable($id);
|
||||
$fcode = $this->model->getFormCode($id);
|
||||
if ($this->model->delForm($id)) {
|
||||
$this->model->delFormFieldByCode($fcode); // 删除字段记录
|
||||
$this->model->amd("DROP TABLE IF EXISTS $table"); // 删除表
|
||||
$this->log('删除自定义表单' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除自定义表单' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
} elseif (get('action') == 'deldata') {
|
||||
// 获取表单
|
||||
if (! $fcode = get('fcode', 'var')) {
|
||||
error('传递的参数值fcode错误!', - 1);
|
||||
}
|
||||
$table = $this->model->getFormTableByCode($fcode);
|
||||
if ($this->model->delFormData($table, $id)) {
|
||||
$this->log('删除表单数据' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除表单数据' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
} else {
|
||||
|
||||
// 获取表单
|
||||
if (! $fcode = get('fcode', 'var')) {
|
||||
error('传递的参数值fcode错误!', - 1);
|
||||
}
|
||||
|
||||
// 获取操作表
|
||||
$table = $this->model->getFormTableByCode($fcode);
|
||||
$name = $this->model->getFormFieldName($id);
|
||||
|
||||
if ($this->model->delFormField($id)) {
|
||||
// mysql数据库执行字段删除,sqlite暂时不支持
|
||||
if (! ! $name) {
|
||||
if (get_db_type() == 'mysql') {
|
||||
$result = $this->model->amd("ALTER TABLE $table DROP COLUMN $name");
|
||||
}
|
||||
}
|
||||
$this->log('删除自定义表单' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除自定义表单' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 自定义表单修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modFormField($id, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
if (get('action') == 'addmenu') {
|
||||
if ($this->model->addFormMenu($id)) {
|
||||
$this->log('添加自定义表单' . $id . '到菜单成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('添加成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('添加成功!', url('/admin/Form/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
|
||||
// 修改表单
|
||||
if (get('action') == 'modform') {
|
||||
$form_name = post('form_name');
|
||||
|
||||
if (! $form_name) {
|
||||
alert_back('表单名称不能为空!');
|
||||
}
|
||||
$data = array(
|
||||
'form_name' => $form_name,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行修改
|
||||
if ($this->model->modForm($id, $data)) {
|
||||
$this->log('修改自定义表单' . $id . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/Form/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
|
||||
// 获取数据
|
||||
$description = post('description');
|
||||
$required = post('required', 'int') ?: 0;
|
||||
$sorting = post('sorting', 'int') ?: 255;
|
||||
|
||||
if (! $description) {
|
||||
alert_back('字段描述不能为空!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'description' => $description,
|
||||
'required' => $required,
|
||||
'sorting' => $sorting,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行修改
|
||||
if ($this->model->modFormField($id, $data)) {
|
||||
$this->log('修改表单字段' . $id . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/Form/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
// 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
|
||||
if (get('action') == 'modform') {
|
||||
if (! $result = $this->model->getForm($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
|
||||
$this->assign('form', $result);
|
||||
} else {
|
||||
if (! $result = $this->model->getFormField($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('field', $result);
|
||||
}
|
||||
$this->display('content/form.html');
|
||||
}
|
||||
}
|
||||
|
||||
// 清空
|
||||
public function clear()
|
||||
{
|
||||
// 获取表单
|
||||
if (! $fcode = get('fcode', 'var')) {
|
||||
error('传递的参数值fcode错误!', - 1);
|
||||
}
|
||||
$table = $this->model->getFormTableByCode($fcode);
|
||||
|
||||
if ($this->model->clearFormData($table)) {
|
||||
alert_location('清空成功!', - 1);
|
||||
} else {
|
||||
alert_location('清空失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
168
apps/admin/controller/content/LabelController.php
Normal file
168
apps/admin/controller/content/LabelController.php
Normal file
@@ -0,0 +1,168 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2018年03月23日
|
||||
* 自定义标签控制器
|
||||
*/
|
||||
namespace app\admin\controller\content;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\content\LabelModel;
|
||||
|
||||
class LabelController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new LabelModel();
|
||||
}
|
||||
|
||||
// 自定义标签列表
|
||||
public function index()
|
||||
{
|
||||
// 修改参数配置
|
||||
if ($_POST) {
|
||||
foreach ($_POST as $key => $value) {
|
||||
if (preg_match('/^[\w\-]+$/', $key)) { // 带有违规字符时不带入查询
|
||||
$data = post($key);
|
||||
$data = str_replace("\r\n", "<br>", $data); // 多行文本时替换回车
|
||||
$this->model->modValue($key, $data);
|
||||
}
|
||||
}
|
||||
success('修改成功!', url('admin/Label/index'));
|
||||
}
|
||||
$this->assign('list', true);
|
||||
$this->assign('labels', $this->model->getList());
|
||||
$this->display('content/label.html');
|
||||
}
|
||||
|
||||
// 自定义标签字段增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$name = post('name', 'var');
|
||||
$description = post('description');
|
||||
$type = post('type');
|
||||
|
||||
if (! $name) {
|
||||
alert_back('标签名称不能为空!');
|
||||
}
|
||||
|
||||
if (! $description) {
|
||||
alert_back('标题描述不能为空!');
|
||||
}
|
||||
|
||||
if (! $type) {
|
||||
alert_back('标签类型不能为空!');
|
||||
}
|
||||
|
||||
// 检查标签名称
|
||||
if ($this->model->checkLabel("name='$name'")) {
|
||||
alert_back('该自定义标签称已经存在,不能再使用!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'name' => $name,
|
||||
'description' => $description,
|
||||
'value' => '', // 添加时设置为空
|
||||
'type' => $type,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->addLabel($data)) {
|
||||
$this->log('修改自定义标签' . $name . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('admin/Label/index' . get_tab('t2'), false));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增自定义标签' . $name . '失败!');
|
||||
error('新增失败!', url('admin/Label/index' . get_tab('t2'), false));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 自定义标签字段删除
|
||||
public function del()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
if ($this->model->delLabel($id)) {
|
||||
$this->log('删除自定义标签' . $id . '成功!');
|
||||
success('删除成功!', url('admin/Label/index' . get_tab('t2'), false));
|
||||
} else {
|
||||
$this->log('删除自定义标签' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 自定义标签字段修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$name = post('name', 'var');
|
||||
$description = post('description');
|
||||
$type = post('type');
|
||||
|
||||
if (! $name) {
|
||||
alert_back('标签名称不能为空!');
|
||||
}
|
||||
|
||||
if (! $description) {
|
||||
alert_back('标签描述不能为空!');
|
||||
}
|
||||
|
||||
if (! $type) {
|
||||
alert_back('标签类型不能为空!');
|
||||
}
|
||||
|
||||
// 检查标签名称
|
||||
if ($this->model->checkLabel("name='$name' AND id<>$id")) {
|
||||
alert_back('该自定义标签名称已经存在,不能再使用!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'name' => $name,
|
||||
'description' => $description,
|
||||
'type' => $type,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->modLabel($id, $data)) {
|
||||
$this->log('修改自定义标签字段' . $id . '成功!');
|
||||
success('修改成功!', url('admin/Label/index' . get_tab('t2'), false));
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
$this->assign('mod', true);
|
||||
|
||||
// 调取修改内容
|
||||
$result = $this->model->getLabel($id);
|
||||
if (! $result) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('label', $result);
|
||||
|
||||
$this->display('content/label.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
213
apps/admin/controller/content/LinkController.php
Normal file
213
apps/admin/controller/content/LinkController.php
Normal file
@@ -0,0 +1,213 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2018年3月1日
|
||||
* 友情链接控制器
|
||||
*/
|
||||
namespace app\admin\controller\content;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\content\LinkModel;
|
||||
|
||||
class LinkController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new LinkModel();
|
||||
}
|
||||
|
||||
// 友情链接列表
|
||||
public function index()
|
||||
{
|
||||
if ((! ! $id = get('id', 'int')) && $result = $this->model->getLink($id)) {
|
||||
$this->assign('more', true);
|
||||
$this->assign('link', $result);
|
||||
} else {
|
||||
$this->assign('list', true);
|
||||
if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
|
||||
$result = $this->model->findLink($field, $keyword);
|
||||
} else {
|
||||
$result = $this->model->getList();
|
||||
}
|
||||
$this->assign('gids', $this->model->getGid());
|
||||
$this->assign('links', $result);
|
||||
}
|
||||
$this->display('content/link.html');
|
||||
}
|
||||
|
||||
// 友情链接增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$gid = post('gid', 'int');
|
||||
$name = post('name');
|
||||
$link = post('link');
|
||||
$logo = post('logo');
|
||||
$sorting = post('sorting');
|
||||
|
||||
if (! $gid) {
|
||||
$gid = $this->model->getMaxGid() + 1;
|
||||
}
|
||||
|
||||
if (! $name) {
|
||||
alert_back('名称不能为空!');
|
||||
}
|
||||
|
||||
if (! $link) {
|
||||
alert_back('链接不能为空!');
|
||||
}
|
||||
|
||||
if (! $sorting) {
|
||||
$sorting = 255;
|
||||
}
|
||||
|
||||
// logo图缩放
|
||||
if ($logo) {
|
||||
resize_img(ROOT_PATH . $logo, '', $this->config('ico.max_width'), $this->config('ico.max_height'));
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'acode' => session('acode'),
|
||||
'gid' => $gid,
|
||||
'name' => $name,
|
||||
'link' => $link,
|
||||
'logo' => $logo,
|
||||
'sorting' => $sorting,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->addLink($data)) {
|
||||
$this->log('新增友情链接成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/Link/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增友情链接失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 友情链接删除
|
||||
public function del()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
if ($this->model->delLink($id)) {
|
||||
$this->log('删除友情链接' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除友情链接' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 友情链接修改
|
||||
public function mod()
|
||||
{
|
||||
if (! ! $submit = post('submit')) {
|
||||
switch ($submit) {
|
||||
case 'sorting': // 修改列表排序
|
||||
$listall = post('listall');
|
||||
if ($listall) {
|
||||
$sorting = post('sorting');
|
||||
foreach ($listall as $key => $value) {
|
||||
if ($sorting[$key] === '' || ! is_numeric($sorting[$key]))
|
||||
$sorting[$key] = 255;
|
||||
$this->model->modLink($value, "sorting=" . $sorting[$key]);
|
||||
}
|
||||
$this->log('批量修改链接排序成功!');
|
||||
success('修改成功!', - 1);
|
||||
} else {
|
||||
alert_back('排序失败,无任何内容!');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modLink($id, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$gid = post('gid', 'int');
|
||||
$name = post('name');
|
||||
$link = post('link');
|
||||
$logo = post('logo');
|
||||
$sorting = post('sorting');
|
||||
|
||||
if (! $gid) {
|
||||
$gid = $this->model->getMaxGid() + 1;
|
||||
}
|
||||
|
||||
if (! $name) {
|
||||
alert_back('名称不能为空!');
|
||||
}
|
||||
|
||||
if (! $link) {
|
||||
alert_back('链接不能为空!');
|
||||
}
|
||||
|
||||
// logo图缩放
|
||||
if ($logo) {
|
||||
resize_img(ROOT_PATH . $logo, '', $this->config('ico.max_width'), $this->config('ico.max_height'));
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'gid' => $gid,
|
||||
'name' => $name,
|
||||
'link' => $link,
|
||||
'logo' => $logo,
|
||||
'sorting' => $sorting,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->modLink($id, $data)) {
|
||||
$this->log('修改友情链接' . $id . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/Link/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
// 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
if (! $result = $this->model->getLink($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('gids', $this->model->getGid());
|
||||
$this->assign('link', $result);
|
||||
$this->display('content/link.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
119
apps/admin/controller/content/MessageController.php
Normal file
119
apps/admin/controller/content/MessageController.php
Normal file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年3月29日
|
||||
* 留言控制器
|
||||
*/
|
||||
namespace app\admin\controller\content;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\content\MessageModel;
|
||||
|
||||
class MessageController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new MessageModel();
|
||||
}
|
||||
|
||||
// 列表
|
||||
public function index()
|
||||
{
|
||||
$this->assign('list', true);
|
||||
$this->assign('fields', $this->model->getFormFieldByCode(1)); // 获取字段
|
||||
|
||||
if (get('export')) {
|
||||
$this->assign('messages', $this->model->getList(false));
|
||||
header("Content-Type:application/vnd.ms-excel");
|
||||
header('Cache-Control: max-age=0');
|
||||
header("Content-Disposition:filename=留言记录-" . date("YmdHis") . ".xls");
|
||||
$this->display('content/exmessage.html');
|
||||
} else {
|
||||
$this->assign('messages', $this->model->getList(true));
|
||||
$this->display('content/message.html');
|
||||
}
|
||||
}
|
||||
|
||||
// 删除
|
||||
public function del()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
if ($this->model->delMessage($id)) {
|
||||
$this->log('删除留言' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除留言' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modMessage($id, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$recontent = post('recontent');
|
||||
$status = post('status');
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'recontent' => $recontent,
|
||||
'status' => $status,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行修改
|
||||
if ($this->model->modMessage($id, $data)) {
|
||||
$this->log('修改留言' . $id . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/Message/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
// 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
if (! $result = $this->model->getMessage($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('message', $result);
|
||||
|
||||
$this->display('content/message.html');
|
||||
}
|
||||
}
|
||||
|
||||
// 清空
|
||||
public function clear()
|
||||
{
|
||||
if ($this->model->clearMessage()) {
|
||||
alert_location('清空成功!', url('/admin/Message/index'));
|
||||
} else {
|
||||
alert_location('清空失败!', url('/admin/Message/index'));
|
||||
}
|
||||
}
|
||||
}
|
||||
207
apps/admin/controller/content/ModelController.php
Normal file
207
apps/admin/controller/content/ModelController.php
Normal file
@@ -0,0 +1,207 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2018年3月1日
|
||||
* 内容模型控制器
|
||||
*/
|
||||
namespace app\admin\controller\content;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\content\ModelModel;
|
||||
|
||||
class ModelController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new ModelModel();
|
||||
}
|
||||
|
||||
// 内容模型列表
|
||||
public function index()
|
||||
{
|
||||
if ((! ! $id = get('id', 'int')) && $result = $this->model->getModel($id)) {
|
||||
$this->assign('more', true);
|
||||
$this->assign('model', $result);
|
||||
} else {
|
||||
$this->assign('list', true);
|
||||
if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
|
||||
$result = $this->model->findModel($field, $keyword);
|
||||
} else {
|
||||
$result = $this->model->getList();
|
||||
}
|
||||
$this->assign('models', $result);
|
||||
}
|
||||
$this->display('content/model.html');
|
||||
}
|
||||
|
||||
// 内容模型增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$mcode = get_auto_code($this->model->getLastCode());
|
||||
$name = post('name');
|
||||
$type = post('type');
|
||||
$urlname = post('urlname');
|
||||
$listtpl = basename(post('listtpl'));
|
||||
$contenttpl = basename(post('contenttpl'));
|
||||
$status = post('status');
|
||||
|
||||
if (! $name) {
|
||||
alert_back('模型名称不能为空!');
|
||||
}
|
||||
|
||||
if ($type == 1) {
|
||||
if (! $urlname)
|
||||
$urlname = 'about';
|
||||
} else {
|
||||
if (! $urlname)
|
||||
$urlname = 'list';
|
||||
}
|
||||
|
||||
if ($urlname && ! preg_match('/^[a-zA-Z0-9\-]+$/', $urlname)) {
|
||||
alert_back('模型URL名称只允许字母、数字、横线组成!');
|
||||
}
|
||||
|
||||
if ($this->model->checkUrlname($urlname, $type)) {
|
||||
alert_back('模型URL名称与其他模型冲突,请换一个名称!');
|
||||
}
|
||||
|
||||
if ($this->model->checkSortFilename($urlname)) {
|
||||
alert_back('模型URL名称与栏目URL名称冲突,请换一个名称!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'mcode' => $mcode,
|
||||
'name' => $name,
|
||||
'type' => $type,
|
||||
'urlname' => $urlname,
|
||||
'listtpl' => $listtpl,
|
||||
'contenttpl' => $contenttpl,
|
||||
'status' => $status,
|
||||
'issystem' => 0,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->addModel($data)) {
|
||||
$this->log('新增内容模型成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/Model/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增内容模型失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 内容模型删除
|
||||
public function del()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
if ($this->model->delModel($id)) {
|
||||
$this->log('删除内容模型' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除内容模型' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 内容模型修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modModel($id, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$name = post('name');
|
||||
$type = post('type');
|
||||
$urlname = post('urlname');
|
||||
$listtpl = basename(post('listtpl'));
|
||||
$contenttpl = basename(post('contenttpl'));
|
||||
$status = post('status');
|
||||
|
||||
if (! $name) {
|
||||
alert_back('模型名称不能为空!');
|
||||
}
|
||||
|
||||
if ($type == 1) {
|
||||
if (! $urlname)
|
||||
$urlname = 'about';
|
||||
} else {
|
||||
if (! $urlname)
|
||||
$urlname = 'list';
|
||||
}
|
||||
|
||||
if ($urlname && ! preg_match('/^[a-zA-Z0-9\-]+$/', $urlname)) {
|
||||
alert_back('模型URL名称只允许字母、数字、横线组成!');
|
||||
}
|
||||
|
||||
if ($this->model->checkUrlname($urlname, $type, "id<>$id")) {
|
||||
alert_back('模型URL名称与其他模型冲突,请换一个名称!');
|
||||
}
|
||||
|
||||
if ($this->model->checkSortFilename($urlname)) {
|
||||
alert_back('模型URL名称与栏目URL名称冲突,请换一个名称!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'name' => $name,
|
||||
'type' => $type,
|
||||
'urlname' => $urlname,
|
||||
'listtpl' => $listtpl,
|
||||
'contenttpl' => $contenttpl,
|
||||
'status' => $status,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->modModel($id, $data)) {
|
||||
$this->log('修改内容模型' . $id . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/Model/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
// 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
if (! $result = $this->model->getModel($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('model', $result);
|
||||
$this->display('content/model.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
266
apps/admin/controller/content/SingleController.php
Normal file
266
apps/admin/controller/content/SingleController.php
Normal file
@@ -0,0 +1,266 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年12月15日
|
||||
* 单页内容控制器
|
||||
*/
|
||||
namespace app\admin\controller\content;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\content\SingleModel;
|
||||
|
||||
class SingleController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
private $blank;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new SingleModel();
|
||||
}
|
||||
|
||||
// 单页内容列表
|
||||
public function index()
|
||||
{
|
||||
if ((! ! $id = get('id', 'int')) && $result = $this->model->getSingle($id)) {
|
||||
$this->assign('more', true);
|
||||
$this->assign('content', $result);
|
||||
} else {
|
||||
$this->assign('list', true);
|
||||
if (! $mcode = get('mcode', 'var')) {
|
||||
error('传递的模型编码参数有误,请核对后重试!');
|
||||
}
|
||||
|
||||
if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
|
||||
$result = $this->model->findSingle($mcode, $field, $keyword);
|
||||
} else {
|
||||
$result = $this->model->getList($mcode);
|
||||
}
|
||||
$this->assign('baidu_zz_token', $this->config('baidu_zz_token'));
|
||||
$this->assign('baidu_ks_token', $this->config('baidu_ks_token'));
|
||||
|
||||
// 模型名称
|
||||
$this->assign('model_name', model('admin.content.Model')->getName($mcode));
|
||||
|
||||
// 前端地址连接符判断
|
||||
$url_break_char = $this->config('url_break_char') ?: '_';
|
||||
$this->assign('url_break_char', $url_break_char);
|
||||
|
||||
$this->assign('contents', $result);
|
||||
}
|
||||
$this->display('content/single.html');
|
||||
}
|
||||
|
||||
// 单页内容删除
|
||||
public function del()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
if ($this->model->delSingle($id)) {
|
||||
$this->log('删除单页内容' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除单页内容' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 单页内容修改
|
||||
public function mod()
|
||||
{
|
||||
// 前端地址连接符判断
|
||||
if (get('baiduzz') || get('baiduxzh')) {
|
||||
$url_break_char = $this->config('url_break_char') ?: '_';
|
||||
$url_rule_sort_suffix = $this->config('url_rule_sort_suffix') ? true : false;
|
||||
}
|
||||
|
||||
// 站长普通推送
|
||||
if (! ! $id = get('baiduzz')) {
|
||||
$domain = get_http_url();
|
||||
if (! $token = $this->config('baidu_zz_token')) {
|
||||
alert_back('请先到系统配置中填写百度普通收录推送token值!');
|
||||
}
|
||||
|
||||
$api = "http://data.zz.baidu.com/urls?site=$domain&token=$token";
|
||||
$data = $this->model->getSingle($id);
|
||||
$data->urlname = $data->urlname ?: 'about';
|
||||
if ($data->outlink) {
|
||||
alert_back('链接类型不允许推送!');
|
||||
}
|
||||
if ($data->filename) {
|
||||
$urls[] = $domain . homeurl('/home/Index/' . $data->filename, $url_rule_sort_suffix);
|
||||
} else {
|
||||
$urls[] = $domain . homeurl('/home/Index/' . $data->urlname . $url_break_char . $data->scode, $url_rule_sort_suffix);
|
||||
}
|
||||
$result = post_baidu($api, $urls);
|
||||
if (isset($result->error)) {
|
||||
$this->log('百度普通收录推送失败:' . $urls[0]);
|
||||
alert_back('推送发生错误:' . $result->message);
|
||||
} elseif (isset($result->success)) {
|
||||
$this->log('百度普通收录推送成功:' . $urls[0]);
|
||||
alert_back('成功推送' . $result->success . '条,今天剩余可推送' . $result->remain . '条数!');
|
||||
} else {
|
||||
alert_back('发生未知错误!');
|
||||
}
|
||||
}
|
||||
|
||||
// 站长快速推送
|
||||
if (! ! $id = get('baiduks')) {
|
||||
$domain = get_http_url();
|
||||
if (! $token = $this->config('baidu_ks_token')) {
|
||||
alert_back('请先到系统配置中填写百度快速收录推送token值!');
|
||||
}
|
||||
|
||||
$api = "http://data.zz.baidu.com/urls?site=$domain&token=$token&type=daily";
|
||||
$data = $this->model->getSingle($id);
|
||||
$data->urlname = $data->urlname ?: 'about';
|
||||
if ($data->outlink) {
|
||||
alert_back('链接类型不允许推送!');
|
||||
}
|
||||
if ($data->filename) {
|
||||
$urls[] = $domain . homeurl('/home/Index/' . $data->filename, $url_rule_sort_suffix);
|
||||
} else {
|
||||
$urls[] = $domain . homeurl('/home/Index/' . $data->urlname . $url_break_char . $data->scode, $url_rule_sort_suffix);
|
||||
}
|
||||
$result = post_baidu($api, $urls);
|
||||
if (isset($result->error)) {
|
||||
$this->log('百度快速收录推送失败:' . $urls[0]);
|
||||
alert_back('推送发生错误:' . $result->message);
|
||||
} elseif (isset($result->success_daily)) {
|
||||
$this->log('百度快速收录推送成功:' . $urls[0]);
|
||||
alert_back('成功推送' . $result->success_daily . '条,今天剩余可推送' . $result->remain_daily . '条数!');
|
||||
} else {
|
||||
alert_back('发生未知错误!');
|
||||
}
|
||||
}
|
||||
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modSingle($id, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$title = post('title');
|
||||
$author = post('author');
|
||||
$source = post('source');
|
||||
$ico = post('ico');
|
||||
$pics = post('pics');
|
||||
$content = post('content');
|
||||
$tags = str_replace(',', ',', post('tags'));
|
||||
$titlecolor = post('titlecolor');
|
||||
$subtitle = post('subtitle');
|
||||
$outlink = post('outlink');
|
||||
$date = post('date');
|
||||
$enclosure = post('enclosure');
|
||||
$keywords = post('keywords');
|
||||
$description = post('description');
|
||||
$status = post('status', 'int');
|
||||
|
||||
// 获取多图标题
|
||||
$picstitle = post('picstitle');
|
||||
if ($picstitle) {
|
||||
$picstitle = implode(',', $picstitle);
|
||||
}
|
||||
|
||||
if (! $title) {
|
||||
alert_back('单页内容标题不能为空!');
|
||||
}
|
||||
|
||||
// 自动提起前一百个字符为描述
|
||||
if (! $description && isset($_POST['content'])) {
|
||||
$description = escape_string(clear_html_blank(substr_both(strip_tags($_POST['content']), 0, 150)));
|
||||
}
|
||||
|
||||
// 缩放缩略图
|
||||
if ($ico) {
|
||||
resize_img(ROOT_PATH . $ico, '', $this->config('ico.max_width'), $this->config('ico.max_height'));
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'title' => $title,
|
||||
'content' => $content,
|
||||
'tags' => $tags,
|
||||
'author' => $author,
|
||||
'source' => $source,
|
||||
'ico' => $ico,
|
||||
'pics' => $pics,
|
||||
'picstitle' => $picstitle,
|
||||
'titlecolor' => $titlecolor,
|
||||
'subtitle' => $subtitle,
|
||||
'outlink' => $outlink,
|
||||
'date' => $date,
|
||||
'enclosure' => $enclosure,
|
||||
'keywords' => $keywords,
|
||||
'description' => clear_html_blank($description),
|
||||
'status' => $status,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->modSingle($id, $data)) {
|
||||
|
||||
// 扩展内容修改
|
||||
foreach ($_POST as $key => $value) {
|
||||
if (preg_match('/^ext_[\w\-]+$/', $key)) {
|
||||
$temp = post($key);
|
||||
if (is_array($temp)) {
|
||||
$data2[$key] = implode(',', $temp);
|
||||
} else {
|
||||
$data2[$key] = str_replace("\r\n", '<br>', $temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($data2)) {
|
||||
if ($this->model->findContentExt($id)) {
|
||||
$this->model->modContentExt($id, $data2);
|
||||
} else {
|
||||
$data2['contentid'] = $id;
|
||||
$this->model->addContentExt($data2);
|
||||
}
|
||||
}
|
||||
|
||||
$this->log('修改单页内容' . $id . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/Single/index/mcode/1'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
// 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
if (! $result = $this->model->getSingle($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('content', $result);
|
||||
|
||||
// 扩展字段
|
||||
if (! $mcode = get('mcode', 'var')) {
|
||||
error('传递的模型编码参数有误,请核对后重试!');
|
||||
}
|
||||
$this->assign('extfield', model('admin.content.ExtField')->getModelField($mcode));
|
||||
|
||||
$this->display('content/single.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
82
apps/admin/controller/content/SiteController.php
Normal file
82
apps/admin/controller/content/SiteController.php
Normal file
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年3月21日
|
||||
* 站点设置控制器
|
||||
*/
|
||||
namespace app\admin\controller\content;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\content\SiteModel;
|
||||
|
||||
class SiteController extends Controller
|
||||
{
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new SiteModel();
|
||||
}
|
||||
|
||||
// 显示站点信息
|
||||
public function index()
|
||||
{
|
||||
// 获取主题列表
|
||||
$themes = dir_list(ROOT_PATH . current($this->config('tpl_dir')));
|
||||
$this->assign('themes', $themes);
|
||||
|
||||
// 获取系统配置
|
||||
$this->assign('sites', $this->model->getList());
|
||||
|
||||
// 显示
|
||||
$this->display('content/site.html');
|
||||
}
|
||||
|
||||
// 修改站点信息
|
||||
public function mod()
|
||||
{
|
||||
if (! $_POST) {
|
||||
return;
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'title' => post('title'),
|
||||
'subtitle' => post('subtitle'),
|
||||
'domain' => post('domain'),
|
||||
'logo' => post('logo'),
|
||||
'keywords' => post('keywords'),
|
||||
'description' => post('description'),
|
||||
'icp' => post('icp'),
|
||||
'theme' => basename(post('theme')) ?: 'default',
|
||||
'statistical' => post('statistical'),
|
||||
'copyright' => post('copyright')
|
||||
);
|
||||
|
||||
path_delete(RUN_PATH . '/config'); // 清理缓存的配置文件
|
||||
if ($this->model->checkSite()) {
|
||||
if ($this->model->modSite($data)) {
|
||||
$this->log('修改站点信息成功!');
|
||||
success('修改成功!', - 1);
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
$data['acode'] = session('acode');
|
||||
if ($this->model->addSite($data)) {
|
||||
$this->log('修改站点信息成功!');
|
||||
success('修改成功!', - 1);
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 服务器基础信息
|
||||
public function server()
|
||||
{
|
||||
$this->assign('server', get_server_info());
|
||||
$this->display('system/server.html');
|
||||
}
|
||||
}
|
||||
|
||||
195
apps/admin/controller/content/SlideController.php
Normal file
195
apps/admin/controller/content/SlideController.php
Normal file
@@ -0,0 +1,195 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2018年3月1日
|
||||
* 轮播图控制器
|
||||
*/
|
||||
namespace app\admin\controller\content;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\content\SlideModel;
|
||||
|
||||
class SlideController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new SlideModel();
|
||||
}
|
||||
|
||||
// 轮播图列表
|
||||
public function index()
|
||||
{
|
||||
if ((! ! $id = get('id', 'int')) && $result = $this->model->getSlide($id)) {
|
||||
$this->assign('more', true);
|
||||
$this->assign('slide', $result);
|
||||
} else {
|
||||
$this->assign('list', true);
|
||||
if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
|
||||
$result = $this->model->findSlide($field, $keyword);
|
||||
} else {
|
||||
$result = $this->model->getList();
|
||||
}
|
||||
$this->assign('gids', $this->model->getGid());
|
||||
$this->assign('slides', $result);
|
||||
}
|
||||
$this->display('content/slide.html');
|
||||
}
|
||||
|
||||
// 轮播图增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$gid = post('gid', 'int');
|
||||
$pic = post('pic');
|
||||
$link = post('link');
|
||||
$title = post('title');
|
||||
$subtitle = post('subtitle');
|
||||
$sorting = post('sorting', 'int');
|
||||
|
||||
if (! $gid) {
|
||||
$gid = $this->model->getMaxGid() + 1;
|
||||
}
|
||||
|
||||
if (! $pic) {
|
||||
alert_back('图片不能为空!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'acode' => session('acode'),
|
||||
'gid' => $gid,
|
||||
'pic' => $pic,
|
||||
'link' => $link,
|
||||
'title' => $title,
|
||||
'subtitle' => $subtitle,
|
||||
'sorting' => $sorting,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->addSlide($data)) {
|
||||
$this->log('新增轮播图成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/Slide/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增轮播图失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 轮播图删除
|
||||
public function del()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
if ($this->model->delSlide($id)) {
|
||||
$this->log('删除轮播图' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除轮播图' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 轮播图修改
|
||||
public function mod()
|
||||
{
|
||||
if (! ! $submit = post('submit')) {
|
||||
switch ($submit) {
|
||||
case 'sorting': // 修改列表排序
|
||||
$listall = post('listall');
|
||||
if ($listall) {
|
||||
$sorting = post('sorting');
|
||||
foreach ($listall as $key => $value) {
|
||||
if ($sorting[$key] === '' || ! is_numeric($sorting[$key]))
|
||||
$sorting[$key] = 255;
|
||||
$this->model->modSlide($value, "sorting=" . $sorting[$key]);
|
||||
}
|
||||
$this->log('批量修改轮播图排序成功!');
|
||||
success('修改成功!', - 1);
|
||||
} else {
|
||||
alert_back('排序失败,无任何内容!');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modSlide($id, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$gid = post('gid', 'int');
|
||||
$pic = post('pic');
|
||||
$link = post('link');
|
||||
$title = post('title');
|
||||
$subtitle = post('subtitle');
|
||||
$sorting = post('sorting', 'int');
|
||||
|
||||
if (! $gid) {
|
||||
$gid = $this->model->getMaxGid() + 1;
|
||||
}
|
||||
|
||||
if (! $pic) {
|
||||
alert_back('图片不能为空!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'gid' => $gid,
|
||||
'pic' => $pic,
|
||||
'link' => $link,
|
||||
'title' => $title,
|
||||
'subtitle' => $subtitle,
|
||||
'sorting' => $sorting,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->modSlide($id, $data)) {
|
||||
$this->log('修改轮播图' . $id . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/Slide/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
// 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
if (! $result = $this->model->getSlide($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('gids', $this->model->getGid());
|
||||
$this->assign('slide', $result);
|
||||
$this->display('content/slide.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
157
apps/admin/controller/content/TagsController.php
Normal file
157
apps/admin/controller/content/TagsController.php
Normal file
@@ -0,0 +1,157 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2019年07月12日
|
||||
* 内链链接控制器
|
||||
*/
|
||||
namespace app\admin\controller\content;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\content\TagsModel;
|
||||
|
||||
class TagsController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new TagsModel();
|
||||
}
|
||||
|
||||
// 文章内链列表
|
||||
public function index()
|
||||
{
|
||||
if ((! ! $id = get('id', 'int')) && $result = $this->model->getTags($id)) {
|
||||
$this->assign('more', true);
|
||||
$this->assign('tags', $result);
|
||||
} else {
|
||||
$this->assign('list', true);
|
||||
if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
|
||||
$result = $this->model->findTags($field, $keyword);
|
||||
} else {
|
||||
$result = $this->model->getList();
|
||||
}
|
||||
$this->assign('tags', $result);
|
||||
}
|
||||
$this->display('content/tags.html');
|
||||
}
|
||||
|
||||
// 文章内链增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$name = post('name');
|
||||
$link = post('link');
|
||||
|
||||
if (! $name) {
|
||||
alert_back('名称不能为空!');
|
||||
}
|
||||
|
||||
if (! $link) {
|
||||
alert_back('链接不能为空!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'acode' => session('acode'),
|
||||
'name' => $name,
|
||||
'link' => $link,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->addTags($data)) {
|
||||
$this->log('新增文章内链成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/Tags/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增文章内链失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 文章内链删除
|
||||
public function del()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
if ($this->model->delTags($id)) {
|
||||
$this->log('删除文章内链' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除文章内链' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 文章内链修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modTags($id, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$name = post('name');
|
||||
$link = post('link');
|
||||
|
||||
if (! $name) {
|
||||
alert_back('名称不能为空!');
|
||||
}
|
||||
|
||||
if (! $link) {
|
||||
alert_back('链接不能为空!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'name' => $name,
|
||||
'link' => $link,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->modTags($id, $data)) {
|
||||
$this->log('修改文章内链' . $id . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/Tags/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
// 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
if (! $result = $this->model->getTags($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('tags', $result);
|
||||
$this->display('content/tags.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
118
apps/admin/controller/member/MemberCommentController.php
Normal file
118
apps/admin/controller/member/MemberCommentController.php
Normal file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2020年06月27日
|
||||
* 文章评论控制器
|
||||
*/
|
||||
namespace app\admin\controller\member;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\member\MemberCommentModel;
|
||||
|
||||
class MemberCommentController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new MemberCommentModel();
|
||||
}
|
||||
|
||||
// 文章评论列表
|
||||
public function index()
|
||||
{
|
||||
if ((! ! $id = get('id', 'int')) && $result = $this->model->getComment($id)) {
|
||||
$this->assign('more', true);
|
||||
$this->assign('comment', $result);
|
||||
} else {
|
||||
$this->assign('list', true);
|
||||
if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
|
||||
$result = $this->model->findComment($field, $keyword);
|
||||
} else {
|
||||
$result = $this->model->getList();
|
||||
}
|
||||
$this->assign('comments', $result);
|
||||
}
|
||||
$this->display('member/comment.html');
|
||||
}
|
||||
|
||||
// 文章评论删除
|
||||
public function del()
|
||||
{
|
||||
// 执行批量删除
|
||||
if ($_POST) {
|
||||
if (! ! $list = post('list')) {
|
||||
if ($this->model->delCommentList($list)) {
|
||||
$this->log('批量删除评论成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('批量删除评论失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
} else {
|
||||
alert_back('请选择要删除的评论!');
|
||||
}
|
||||
}
|
||||
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
if ($this->model->delComment($id)) {
|
||||
$this->log('删除文章评论' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除文章评论' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 字段修改
|
||||
public function mod()
|
||||
{
|
||||
if (! ! $submit = post('submit')) {
|
||||
switch ($submit) {
|
||||
case 'verify1':
|
||||
$list = post('list');
|
||||
if (! $list) {
|
||||
alert_back('请选择要操作的评论!');
|
||||
}
|
||||
if ($this->model->modCommentList($list, "status=1")) {
|
||||
$this->log('评论批量审核成功!');
|
||||
success('审核成功!', - 1);
|
||||
} else {
|
||||
alert_back('审核失败!');
|
||||
}
|
||||
break;
|
||||
case 'verify0':
|
||||
$list = post('list');
|
||||
if (! $list) {
|
||||
alert_back('请选择要操作的评论!');
|
||||
}
|
||||
if ($this->model->modCommentList($list, "status=0")) {
|
||||
$this->log('评论批量禁用成功!');
|
||||
success('禁用成功!', - 1);
|
||||
} else {
|
||||
alert_back('禁用失败!');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modComment($id, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
292
apps/admin/controller/member/MemberController.php
Normal file
292
apps/admin/controller/member/MemberController.php
Normal file
@@ -0,0 +1,292 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2019年10月05日
|
||||
* 会员控制器
|
||||
*/
|
||||
namespace app\admin\controller\member;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\member\MemberModel;
|
||||
|
||||
class MemberController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new MemberModel();
|
||||
}
|
||||
|
||||
// 会员列表
|
||||
public function index()
|
||||
{
|
||||
if ((! ! $id = get('id', 'int')) && $result = $this->model->getMember($id)) {
|
||||
$this->assign('more', true);
|
||||
$this->assign('fields', $this->model->getFields());
|
||||
$this->assign('member', $result);
|
||||
} else {
|
||||
$this->assign('list', true);
|
||||
if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
|
||||
$result = $this->model->findMember($field, $keyword);
|
||||
} else {
|
||||
$result = $this->model->getList();
|
||||
}
|
||||
|
||||
// 会员等级
|
||||
$this->assign('groups', model('admin.member.MemberGroup')->getSelect());
|
||||
$this->assign('members', $result);
|
||||
}
|
||||
$this->display('member/member.html');
|
||||
}
|
||||
|
||||
// 会员增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$ucode = get_auto_code($this->model->getLastCode(), 1);
|
||||
$username = post('username');
|
||||
$useremail = post('useremail');
|
||||
$usermobile = post('usermobile');
|
||||
$nickname = post('nickname');
|
||||
$password = post('password');
|
||||
$headpic = post('headpic');
|
||||
$status = post('status') ?: 1;
|
||||
$gid = post('gid');
|
||||
$score = post('score');
|
||||
$register_time = get_datetime();
|
||||
|
||||
if (! $username) {
|
||||
alert_back('用户账号不能为空!');
|
||||
}
|
||||
|
||||
if (! preg_match('/^[\w\@\.]+$/', $username)) {
|
||||
alert_back('用户账号含有不允许的特殊字符!');
|
||||
}
|
||||
|
||||
if ($useremail && ! preg_match('/^[\w]+@[\w\.]+\.[a-zA-Z]+$/', $useremail)) {
|
||||
alert_back('邮箱账号格式不正确!');
|
||||
}
|
||||
|
||||
if ($usermobile && ! preg_match('/^1[0-9]{10}$/', $usermobile)) {
|
||||
alert_back('手机号码格式不正确!');
|
||||
}
|
||||
|
||||
if ($username && $this->model->checkMember("username='$username' OR useremail='$username' OR usermobile='$username'")) {
|
||||
alert_back('用户名已经存在!');
|
||||
}
|
||||
|
||||
if ($useremail && $this->model->checkMember("username='$useremail' OR useremail='$useremail' OR usermobile='$useremail'")) {
|
||||
alert_back('邮箱账号已经存在!');
|
||||
}
|
||||
|
||||
if ($usermobile && $this->model->checkMember("username='$usermobile' OR useremail='$usermobile' OR usermobile='$usermobile'")) {
|
||||
alert_back('手机号码已经存在!');
|
||||
}
|
||||
|
||||
if (! $password) {
|
||||
alert_back('密码不能为空!');
|
||||
} else {
|
||||
$password = md5(md5($password));
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'ucode' => $ucode,
|
||||
'username' => $username,
|
||||
'useremail' => $useremail,
|
||||
'usermobile' => $usermobile,
|
||||
'nickname' => $nickname,
|
||||
'password' => $password,
|
||||
'headpic' => $headpic,
|
||||
'status' => $status,
|
||||
'gid' => $gid,
|
||||
'wxid' => '',
|
||||
'qqid' => '',
|
||||
'wbid' => '',
|
||||
'activation' => 1,
|
||||
'score' => $score,
|
||||
'register_time' => $register_time,
|
||||
'login_count' => 0,
|
||||
'last_login_ip' => 0,
|
||||
'last_login_time' => 0
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->addMember($data)) {
|
||||
$this->log('新增会员成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/Member/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增会员失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 会员删除
|
||||
public function del()
|
||||
{
|
||||
// 执行批量删除
|
||||
if ($_POST) {
|
||||
if (! ! $list = post('list')) {
|
||||
if ($this->model->delMemberList($list)) {
|
||||
$this->log('批量删除会员成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('批量删除会员失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
} else {
|
||||
alert_back('请选择要删除的会员!');
|
||||
}
|
||||
}
|
||||
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
if ($this->model->delMember($id)) {
|
||||
$this->log('删除会员' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除会员' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 会员修改
|
||||
public function mod()
|
||||
{
|
||||
if (! ! $submit = post('submit')) {
|
||||
switch ($submit) {
|
||||
case 'verify1':
|
||||
$list = post('list');
|
||||
if (! $list) {
|
||||
alert_back('请选择要操作的会员!');
|
||||
}
|
||||
if ($this->model->modMemberList($list, "status=1")) {
|
||||
$this->log('会员批量启用成功!');
|
||||
success('启用成功!', - 1);
|
||||
} else {
|
||||
alert_back('启用失败!');
|
||||
}
|
||||
break;
|
||||
case 'verify0':
|
||||
$list = post('list');
|
||||
if (! $list) {
|
||||
alert_back('请选择要操作的会员!');
|
||||
}
|
||||
if ($this->model->modMemberList($list, "status=0")) {
|
||||
$this->log('会员批量禁用成功!');
|
||||
success('禁用成功!', - 1);
|
||||
} else {
|
||||
alert_back('禁用失败!');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modMember($id, "$field='$value'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$username = post('username');
|
||||
$useremail = post('useremail');
|
||||
$usermobile = post('usermobile');
|
||||
$nickname = post('nickname');
|
||||
$password = post('password');
|
||||
$headpic = post('headpic');
|
||||
$status = post('status') ?: 1;
|
||||
$gid = post('gid');
|
||||
$score = post('score');
|
||||
|
||||
if (! $username) {
|
||||
alert_back('用户账号不能为空!');
|
||||
}
|
||||
|
||||
if (! preg_match('/^[\w\@\.]+$/', $username)) {
|
||||
alert_back('用户账号含有不允许的特殊字符!');
|
||||
}
|
||||
|
||||
if ($useremail && ! preg_match('/^[\w]+@[\w\.]+\.[a-zA-Z]+$/', $useremail)) {
|
||||
alert_back('邮箱账号格式不正确!');
|
||||
}
|
||||
|
||||
if ($usermobile && ! preg_match('/^1[0-9]{10}$/', $usermobile)) {
|
||||
alert_back('手机号码格式不正确!');
|
||||
}
|
||||
|
||||
if ($username && $this->model->checkMember("(username='$username' OR useremail='$username' OR usermobile='$username') AND id<>$id")) {
|
||||
alert_back('用户名已经存在!');
|
||||
}
|
||||
|
||||
if ($useremail && $this->model->checkMember("(username='$useremail' OR useremail='$useremail' OR usermobile='$useremail') AND id<>$id")) {
|
||||
alert_back('邮箱账号已经存在!');
|
||||
}
|
||||
|
||||
if ($usermobile && $this->model->checkMember("(username='$usermobile' OR useremail='$usermobile' OR usermobile='$usermobile') AND id<>$id")) {
|
||||
alert_back('手机号码已经存在!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'username' => $username,
|
||||
'useremail' => $useremail,
|
||||
'usermobile' => $usermobile,
|
||||
'nickname' => $nickname,
|
||||
'headpic' => $headpic,
|
||||
'status' => $status,
|
||||
'gid' => $gid,
|
||||
'score' => $score
|
||||
);
|
||||
|
||||
if ($password) {
|
||||
$data['password'] = md5(md5($password));
|
||||
}
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->modMember($id, $data)) {
|
||||
$this->log('修改会员成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/Member/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('修改会员失败!');
|
||||
error('修改失败!', - 1);
|
||||
}
|
||||
} else {
|
||||
// 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
if (! $result = $this->model->getMember($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
// 会员等级
|
||||
$this->assign('groups', model('admin.member.MemberGroup')->getSelect());
|
||||
$this->assign('member', $result);
|
||||
$this->display('member/member.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
193
apps/admin/controller/member/MemberFieldController.php
Normal file
193
apps/admin/controller/member/MemberFieldController.php
Normal file
@@ -0,0 +1,193 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2020年06月25日
|
||||
* 会员字段控制器
|
||||
*/
|
||||
namespace app\admin\controller\member;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\member\MemberFieldModel;
|
||||
|
||||
class MemberFieldController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new MemberFieldModel();
|
||||
}
|
||||
|
||||
// 会员字段列表
|
||||
public function index()
|
||||
{
|
||||
if ((! ! $id = get('id', 'int')) && $result = $this->model->getField($id)) {
|
||||
$this->assign('more', true);
|
||||
$this->assign('field', $result);
|
||||
} else {
|
||||
$this->assign('list', true);
|
||||
if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
|
||||
$result = $this->model->findField($field, $keyword);
|
||||
} else {
|
||||
$result = $this->model->getList();
|
||||
}
|
||||
$this->assign('fields', $result);
|
||||
}
|
||||
$this->display('member/field.html');
|
||||
}
|
||||
|
||||
// 会员字段增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$name = post('name', 'var');
|
||||
$length = post('length', 'int') ?: 20;
|
||||
$required = post('required', 'int') ?: 0;
|
||||
$description = post('description');
|
||||
$sorting = post('sorting', 'int') ?: 255;
|
||||
$status = post('status') ?: 1;
|
||||
|
||||
if (! $name) {
|
||||
alert_back('字段名称不能为空!');
|
||||
}
|
||||
|
||||
if (! preg_match('/^[a-zA-Z][\w]+$/', $name)) {
|
||||
alert_back('字段名称必须以字母开头!');
|
||||
}
|
||||
|
||||
if (! $description) {
|
||||
alert_back('字段描述不能为空!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'name' => $name,
|
||||
'length' => $length,
|
||||
'required' => $required,
|
||||
'description' => $description,
|
||||
'sorting' => $sorting,
|
||||
'status' => $status,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 字段类型及长度
|
||||
$mysql = "varchar($length)";
|
||||
$sqlite = "TEXT($length)";
|
||||
|
||||
// 字段不存在时创建
|
||||
if (! $this->model->isExistField($name)) {
|
||||
if (get_db_type() == 'sqlite') {
|
||||
$result = $this->model->amd("ALTER TABLE ay_member ADD COLUMN $name $sqlite NULL");
|
||||
} else {
|
||||
$result = $this->model->amd("ALTER TABLE ay_member ADD $name $mysql NULL COMMENT '$description'");
|
||||
}
|
||||
} elseif ($this->model->checkField($name)) { // 字段存在且已使用则报错
|
||||
alert_back('字段已经存在,不能重复添加!');
|
||||
}
|
||||
|
||||
// 执行会员字段添加
|
||||
if ($this->model->addField($data)) {
|
||||
$this->log('新增会员字段成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/MemberField/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增会员字段失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 会员字段删除
|
||||
public function del()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
$name = $this->model->getFieldName($id);
|
||||
if ($this->model->delField($id)) {
|
||||
// mysql数据库执行字段删除,sqlite暂时不支持
|
||||
if (! ! $name) {
|
||||
if (get_db_type() == 'mysql') {
|
||||
$result = $this->model->amd("ALTER TABLE ay_member DROP COLUMN $name");
|
||||
}
|
||||
}
|
||||
$this->log('删除会员字段' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除会员字段' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 会员字段修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modField($id, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$required = post('required', 'int') ?: 0;
|
||||
$description = post('description');
|
||||
$sorting = post('sorting', 'int') ?: 255;
|
||||
$status = post('status') ?: 1;
|
||||
|
||||
if (! $description) {
|
||||
alert_back('字段描述不能为空!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'required' => $required,
|
||||
'description' => $description,
|
||||
'sorting' => $sorting,
|
||||
'status' => $status,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行会员字段修改
|
||||
if ($this->model->modField($id, $data)) {
|
||||
$this->log('修改会员字段成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/MemberField/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('修改会员字段失败!');
|
||||
error('修改失败!', - 1);
|
||||
}
|
||||
} else {
|
||||
// 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
if (! $result = $this->model->getField($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
|
||||
$this->assign('field', $result);
|
||||
$this->display('member/field.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
187
apps/admin/controller/member/MemberGroupController.php
Normal file
187
apps/admin/controller/member/MemberGroupController.php
Normal file
@@ -0,0 +1,187 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2020年06月25日
|
||||
* 会员等级控制器
|
||||
*/
|
||||
namespace app\admin\controller\member;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\member\MemberGroupModel;
|
||||
|
||||
class MemberGroupController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new MemberGroupModel();
|
||||
}
|
||||
|
||||
// 会员等级列表
|
||||
public function index()
|
||||
{
|
||||
if ((! ! $id = get('id', 'int')) && $result = $this->model->getGroup($id)) {
|
||||
$this->assign('more', true);
|
||||
$this->assign('group', $result);
|
||||
} else {
|
||||
$this->assign('list', true);
|
||||
if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
|
||||
$result = $this->model->findGroup($field, $keyword);
|
||||
} else {
|
||||
$result = $this->model->getList();
|
||||
}
|
||||
$this->assign('groups', $result);
|
||||
}
|
||||
$this->display('member/group.html');
|
||||
}
|
||||
|
||||
// 会员等级增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$gcode = post('gcode', 'int') ?: get_auto_code($this->model->getLastGid(), 1);
|
||||
$gname = post('gname');
|
||||
$description = post('description');
|
||||
$status = post('status') ?: 1;
|
||||
$lscore = post('lscore', 'int') ?: 0;
|
||||
$uscore = post('uscore', 'int') ?: 9999999999;
|
||||
|
||||
if (! $gcode) {
|
||||
alert_back('等级编号不能为空!');
|
||||
}
|
||||
|
||||
if (! $gname) {
|
||||
alert_back('等级名称不能为空!');
|
||||
}
|
||||
|
||||
if ($this->model->findGroupCode($gcode)) {
|
||||
alert_back('等级编码不能重复!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'gcode' => $gcode,
|
||||
'gname' => $gname,
|
||||
'description' => $description,
|
||||
'status' => $status,
|
||||
'lscore' => $lscore,
|
||||
'uscore' => $uscore,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行会员等级添加
|
||||
if ($this->model->addGroup($data)) {
|
||||
$this->log('新增会员等级成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/MemberGroup/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增会员等级失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 会员等级删除
|
||||
public function del()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
if ($this->model->findGroupUser($id)) {
|
||||
error('会员等级下存在用户,无法直接删除!', - 1);
|
||||
}
|
||||
|
||||
if ($this->model->delGroup($id)) {
|
||||
$this->log('删除会员等级' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除会员等级' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 会员等级修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modGroup($id, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
|
||||
// 获取数据
|
||||
$gcode = post('gcode', 'int') ?: get_auto_code($this->model->getLastGid(), 1);
|
||||
$gname = post('gname');
|
||||
$description = post('description');
|
||||
$status = post('status') ?: 1;
|
||||
$lscore = post('lscore', 'int') ?: 0;
|
||||
$uscore = post('uscore', 'int') ?: 9999999999;
|
||||
|
||||
if (! $gcode) {
|
||||
alert_back('等级编号不能为空!');
|
||||
}
|
||||
|
||||
if (! $gname) {
|
||||
alert_back('等级名称不能为空!');
|
||||
}
|
||||
|
||||
if ($this->model->findGroupCode($gcode, $id)) {
|
||||
alert_back('等级编码不能重复!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'gcode' => $gcode,
|
||||
'gname' => $gname,
|
||||
'description' => $description,
|
||||
'status' => $status,
|
||||
'lscore' => $lscore,
|
||||
'uscore' => $uscore,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行会员等级修改
|
||||
if ($this->model->modGroup($id, $data)) {
|
||||
$this->log('修改会员等级成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/MemberGroup/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('修改会员等级失败!');
|
||||
error('修改失败!', - 1);
|
||||
}
|
||||
} else {
|
||||
// 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
if (! $result = $this->model->getGroup($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
|
||||
$this->assign('group', $result);
|
||||
$this->display('member/group.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
303
apps/admin/controller/system/AreaController.php
Normal file
303
apps/admin/controller/system/AreaController.php
Normal file
@@ -0,0 +1,303 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年4月3日
|
||||
* 区域控制器
|
||||
*/
|
||||
namespace app\admin\controller\system;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\system\AreaModel;
|
||||
|
||||
class AreaController extends Controller
|
||||
{
|
||||
|
||||
private $count;
|
||||
|
||||
private $blank;
|
||||
|
||||
private $outData = array();
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new AreaModel();
|
||||
}
|
||||
|
||||
// 区域列表
|
||||
public function index()
|
||||
{
|
||||
$this->assign('list', true);
|
||||
$area_tree = $this->model->getList();
|
||||
$areas = $this->makeAreaList($area_tree);
|
||||
$this->assign('areas', $areas);
|
||||
|
||||
// 区域下拉表
|
||||
$area_tree = $this->model->getSelect();
|
||||
$area_select = $this->makeAreaSelect($area_tree);
|
||||
$this->assign('area_select', $area_select);
|
||||
|
||||
$this->display('system/area.html');
|
||||
}
|
||||
|
||||
// 生成无限级区域列表
|
||||
private function makeAreaList($tree)
|
||||
{
|
||||
// 循环生成
|
||||
foreach ($tree as $value) {
|
||||
$this->count ++;
|
||||
$this->outData[$this->count] = new \stdClass();
|
||||
$this->outData[$this->count]->id = $value->id;
|
||||
$this->outData[$this->count]->blank = $this->blank;
|
||||
$this->outData[$this->count]->name = $value->name;
|
||||
$this->outData[$this->count]->domain = $value->domain;
|
||||
$this->outData[$this->count]->acode = $value->acode;
|
||||
$this->outData[$this->count]->pcode = $value->pcode;
|
||||
$this->outData[$this->count]->is_default = $value->is_default;
|
||||
$this->outData[$this->count]->create_user = $value->create_user;
|
||||
$this->outData[$this->count]->update_user = $value->update_user;
|
||||
$this->outData[$this->count]->create_time = $value->create_time;
|
||||
$this->outData[$this->count]->update_time = $value->update_time;
|
||||
|
||||
if ($value->son) {
|
||||
$this->outData[$this->count]->son = true;
|
||||
} else {
|
||||
$this->outData[$this->count]->son = false;
|
||||
}
|
||||
|
||||
// 子菜单处理
|
||||
if ($value->son) {
|
||||
$this->blank .= ' ';
|
||||
$this->makeAreaList($value->son);
|
||||
}
|
||||
}
|
||||
|
||||
// 循环完后回归缩进位置
|
||||
$this->blank = substr($this->blank, 6);
|
||||
return $this->outData;
|
||||
}
|
||||
|
||||
// 区域增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$acode = post('acode', 'var');
|
||||
$pcode = post('pcode', 'var');
|
||||
$name = post('name');
|
||||
$domain = post('domain');
|
||||
$is_default = post('is_default');
|
||||
|
||||
if (! $acode) {
|
||||
alert_back('编码不能为空!');
|
||||
}
|
||||
|
||||
if (! $pcode) { // 父编码默认为0
|
||||
$pcode = 0;
|
||||
}
|
||||
|
||||
if (! $name) {
|
||||
alert_back('区域名称不能为空!');
|
||||
}
|
||||
|
||||
if ($domain) {
|
||||
$reg = '{^(https://|http://)?([\w\-.]+)([\/]+)?$}';
|
||||
if (preg_match($reg, $domain)) {
|
||||
$domain = preg_replace($reg, '$2', $domain);
|
||||
} else {
|
||||
alert_back('要绑定的域名输入有错!');
|
||||
}
|
||||
|
||||
// 检查绑定
|
||||
if ($this->model->checkArea("domain='$domain'")) {
|
||||
alert_back('该域名已经绑定其他区域,不能再使用!');
|
||||
}
|
||||
}
|
||||
|
||||
// 检查编码
|
||||
if ($this->model->checkArea("acode='$acode'")) {
|
||||
alert_back('该区域编号已经存在,不能再使用!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'acode' => $acode,
|
||||
'pcode' => $pcode,
|
||||
'name' => $name,
|
||||
'domain' => $domain,
|
||||
'is_default' => $is_default,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->addArea($data)) {
|
||||
if (session('ucode') == '10001') {
|
||||
$acodes = session('acodes');
|
||||
$acodes[] = $acode;
|
||||
session('acodes', $acodes); // 更新管理员管理区域
|
||||
$model = model('Index');
|
||||
$areas = $model->getAreas();
|
||||
session('area_map', get_mapping($areas, 'name', 'acode')); // 更新区域代码名称映射表
|
||||
session('area_tree', $model->getUserAreaTree($areas, 0, 'acode', 'pcode', 'son', $acodes)); // 更新当前用户的区域树
|
||||
}
|
||||
$this->log('新增数据区域' . $acode . '成功!');
|
||||
path_delete(RUN_PATH . '/config'); // 清理缓存的配置文件
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/Area/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增数据区域' . $acode . '失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 生成区域选择
|
||||
private function makeAreaSelect($tree, $selectid = null)
|
||||
{
|
||||
$list_html = '';
|
||||
foreach ($tree as $value) {
|
||||
// 默认选择项
|
||||
if ($selectid == $value->acode) {
|
||||
$select = "selected='selected'";
|
||||
} else {
|
||||
$select = '';
|
||||
}
|
||||
if (get('acode') != $value->acode) { // 不显示本身,避免出现自身为自己的父节点
|
||||
$list_html .= "<option value='{$value->acode}' $select>{$this->blank}{$value->acode} {$value->name}</option>";
|
||||
}
|
||||
// 子菜单处理
|
||||
if ($value->son) {
|
||||
$this->blank .= ' ';
|
||||
$list_html .= $this->makeAreaSelect($value->son, $selectid);
|
||||
}
|
||||
}
|
||||
// 循环完后回归位置
|
||||
$this->blank = substr($this->blank, 0, - 6);
|
||||
return $list_html;
|
||||
}
|
||||
|
||||
// 区域删除
|
||||
public function del()
|
||||
{
|
||||
if (! $acode = get('acode', 'var')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
if ($acode == 'cn') {
|
||||
error('系统内置区域不允许删除!', - 1);
|
||||
}
|
||||
|
||||
if ($this->model->delArea($acode)) {
|
||||
path_delete(RUN_PATH . '/config'); // 清理缓存的配置文件
|
||||
$this->log('删除数据区域' . $acode . '成功!');
|
||||
session_unset();
|
||||
success('删除成功,请重新登录', url('/admin/Index/index'));
|
||||
} else {
|
||||
$this->log('删除数据区域' . $acode . '失败!');
|
||||
error('删除失败,请核对是否为默认区域!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 区域修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $acode = get('acode', 'var')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$acode_new = post('acode', 'var');
|
||||
$pcode = post('pcode', 'var');
|
||||
$name = post('name');
|
||||
$domain = post('domain');
|
||||
$is_default = post('is_default');
|
||||
|
||||
if (! $acode_new) {
|
||||
alert_back('编码不能为空!');
|
||||
}
|
||||
|
||||
if (! $pcode) { // 父编码默认为0
|
||||
$pcode = 0;
|
||||
}
|
||||
|
||||
if (! $name) {
|
||||
alert_back('区域名称不能为空!');
|
||||
}
|
||||
|
||||
if ($domain) {
|
||||
$reg = '{^(https://|http://)?([\w\-.]+)([\/]+)?$}';
|
||||
if (preg_match($reg, $domain)) {
|
||||
$domain = preg_replace($reg, '$2', $domain);
|
||||
} else {
|
||||
alert_back('要绑定的域名输入有错!');
|
||||
}
|
||||
|
||||
// 检查绑定
|
||||
if ($this->model->checkArea("domain='$domain' AND acode<>'$acode'")) {
|
||||
alert_back('该域名已经绑定其他区域,不能再使用!');
|
||||
}
|
||||
}
|
||||
|
||||
// 检查编码
|
||||
if ($this->model->checkArea("acode='$acode_new' AND acode<>'$acode'")) {
|
||||
alert_back('该区域编号已经存在,不能再使用!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'acode' => $acode_new,
|
||||
'pcode' => $pcode,
|
||||
'name' => $name,
|
||||
'domain' => $domain,
|
||||
'is_default' => $is_default,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->modArea($acode, $data)) {
|
||||
if (session('ucode') == '10001') {
|
||||
$acodes = session('acodes');
|
||||
$acodes[] = $acode_new;
|
||||
session('acodes', $acodes); // 更新管理员管理区域
|
||||
$model = model('Index');
|
||||
$areas = $model->getAreas();
|
||||
session('area_map', get_mapping($areas, 'name', 'acode')); // 更新区域代码名称映射表
|
||||
session('area_tree', $model->getUserAreaTree($areas, 0, 'acode', 'pcode', 'son', $acodes)); // 更新当前用户的区域树
|
||||
}
|
||||
$this->log('修改数据区域' . $acode . '成功!');
|
||||
path_delete(RUN_PATH . '/config'); // 清理缓存的配置文件
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/Area/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else { // 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
|
||||
$area = $this->model->getArea($acode);
|
||||
if (! $area) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('area', $area);
|
||||
|
||||
// 父编码下拉选择
|
||||
$area_tree = $this->model->getSelect();
|
||||
$area_select = $this->makeAreaSelect($area_tree, $area->pcode);
|
||||
$this->assign('area_select', $area_select);
|
||||
|
||||
$this->display('system/area.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
226
apps/admin/controller/system/ConfigController.php
Normal file
226
apps/admin/controller/system/ConfigController.php
Normal file
@@ -0,0 +1,226 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2018年01月03日
|
||||
* 应用配置控制器
|
||||
*/
|
||||
namespace app\admin\controller\system;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\system\ConfigModel;
|
||||
use core\basic\Config;
|
||||
|
||||
class ConfigController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new ConfigModel();
|
||||
}
|
||||
|
||||
// 应用配置列表
|
||||
public function index()
|
||||
{
|
||||
if (! ! $action = get('action')) {
|
||||
switch ($action) {
|
||||
case 'sendemail':
|
||||
$rs = sendmail($this->config(), get('to'), '【PbootCMS】测试邮件', '欢迎您使用PbootCMS网站开发管理系统!');
|
||||
if ($rs === true) {
|
||||
alert_back('测试邮件发送成功!');
|
||||
} else {
|
||||
error('发送失败:' . $rs);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 修改参数配置
|
||||
if ($_POST) {
|
||||
unset($_POST['upload']); // 去除上传组件
|
||||
foreach ($_POST as $key => $value) {
|
||||
if (! preg_match('/^[\w\-]+$/', $key)) {
|
||||
continue;
|
||||
}
|
||||
$config = array(
|
||||
'debug',
|
||||
'sn',
|
||||
'sn_user',
|
||||
'pagenum',
|
||||
'tpl_html_cache',
|
||||
'tpl_html_cache_time',
|
||||
'session_in_sitepath'
|
||||
);
|
||||
if (in_array($key, $config)) {
|
||||
if ($key == 'tpl_html_cache_time' && ! $value) {
|
||||
$value = 900;
|
||||
} else {
|
||||
$value = post($key);
|
||||
}
|
||||
$this->modConfig($key, $value);
|
||||
} else {
|
||||
$this->modDbConfig($key);
|
||||
}
|
||||
}
|
||||
|
||||
$this->log('修改参数配置成功!');
|
||||
path_delete(RUN_PATH . '/config'); // 清理缓存的配置文件
|
||||
|
||||
switch (post('submit')) {
|
||||
case 'email':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t2'), false));
|
||||
break;
|
||||
case 'baidu':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t3'), false));
|
||||
break;
|
||||
case 'api':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t4'), false));
|
||||
break;
|
||||
case 'watermark':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t5'), false));
|
||||
break;
|
||||
case 'security':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t6'), false));
|
||||
break;
|
||||
case 'urlrule':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t7'), false));
|
||||
break;
|
||||
case 'pagetitle':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t8'), false));
|
||||
break;
|
||||
case 'member':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t9'), false));
|
||||
break;
|
||||
case 'upgrade':
|
||||
success('修改成功!', url('/admin/Upgrade/index' . get_tab('t2'), false));
|
||||
break;
|
||||
default:
|
||||
success('修改成功!', url('/admin/Config/index', false));
|
||||
}
|
||||
}
|
||||
$configs = $this->model->getList();
|
||||
$configs['debug']['value'] = $this->config('debug');
|
||||
$configs['sn']['value'] = $this->config('sn');
|
||||
$configs['sn_user']['value'] = $this->config('sn_user');
|
||||
$configs['session_in_sitepath']['value'] = $this->config('session_in_sitepath');
|
||||
$configs['pagenum']['value'] = $this->config('pagenum');
|
||||
$configs['url_type']['value'] = $this->config('url_type');
|
||||
$configs['tpl_html_cache']['value'] = $this->config('tpl_html_cache');
|
||||
$configs['tpl_html_cache_time']['value'] = $this->config('tpl_html_cache_time');
|
||||
$this->assign('configs', $configs);
|
||||
|
||||
$this->assign('groups', model('admin.member.MemberGroup')->getSelect());
|
||||
|
||||
$this->display('system/config.html');
|
||||
}
|
||||
|
||||
// 修改配置文件
|
||||
private function modConfig($key, $value)
|
||||
{
|
||||
$value = str_replace(' ', '', $value); // 去除空格
|
||||
$value = str_replace(',', ',', $value); // 转换可能输入的中文逗号
|
||||
if (! preg_match('/^[\w\s\,\-]+$/', $value)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$config = file_get_contents(CONF_PATH . '/config.php');
|
||||
if (preg_match("'$key'", $config)) {
|
||||
if (preg_match('/^[0-9]+$/', $value)) {
|
||||
$config = preg_replace('/(\'' . $key . '\'([\s]+)?=>([\s]+)?)[\w\'\"\s,]+,/', '${1}' . $value . ',', $config);
|
||||
} else {
|
||||
$config = preg_replace('/(\'' . $key . '\'([\s]+)?=>([\s]+)?)[\w\'\"\s,]+,/', '${1}\'' . $value . '\',', $config);
|
||||
}
|
||||
} else {
|
||||
$config = preg_replace('/(return array\()/', "$1\r\n\r\n\t'$key' => '$value',", $config); // 自动新增配置
|
||||
}
|
||||
return file_put_contents(CONF_PATH . '/config.php', $config);
|
||||
}
|
||||
|
||||
// 修改数据库配置
|
||||
private function modDbConfig($key)
|
||||
{
|
||||
$value = post($key);
|
||||
|
||||
// 如果开启伪静态时自动拷贝文件
|
||||
if ($key == 'url_rule_type' && $value == 2) {
|
||||
$soft = get_server_soft();
|
||||
if ($soft == 'iis') {
|
||||
if (! file_exists(ROOT_PATH . '/web.config')) {
|
||||
copy(ROOT_PATH . '/rewrite/web.config', ROOT_PATH . '/web.config');
|
||||
}
|
||||
} elseif ($soft == 'apache') {
|
||||
if (! file_exists(ROOT_PATH . '/web.config')) {
|
||||
copy(ROOT_PATH . '/rewrite/.htaccess', ROOT_PATH . '/.htaccess');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 模板目录修改
|
||||
if (($key == 'tpl_html_dir') && $value) {
|
||||
|
||||
// 不允许特殊字符
|
||||
if (! preg_match('/^\w+$/', $value)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$value = basename($value);
|
||||
$htmldir = $this->config('tpl_html_dir');
|
||||
$tpl_path = ROOT_PATH . current($this->config('tpl_dir')) . '/' . model('admin.content.ContentSort')->getTheme();
|
||||
|
||||
if (! $htmldir || ! file_exists($tpl_path . '/' . $htmldir)) {
|
||||
if (! check_dir($tpl_path . '/' . $value, true)) {
|
||||
return;
|
||||
} // 原来没有目录时只创建目录,创建失败时直接不修改
|
||||
} else {
|
||||
if ($value != $htmldir) {
|
||||
if (file_exists($tpl_path . '/' . $value)) {
|
||||
if (dir_copy($tpl_path . '/' . $htmldir, $tpl_path . '/' . $value)) {
|
||||
path_delete($tpl_path . '/' . $htmldir, true); // 删除原来的
|
||||
} else {
|
||||
return; // 修改失败
|
||||
}
|
||||
} else {
|
||||
if (! rename($tpl_path . '/' . $htmldir, $tpl_path . '/' . $value)) {
|
||||
return; // 修改失败
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($key == 'home_upload_ext') {
|
||||
// 不允许特殊扩展
|
||||
if (preg_match('/(php|jsp|asp|exe|sh|cmd|vb|vbs|phtml)/i', $value)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 数据分割处理
|
||||
$hander = array(
|
||||
'content_keyword_replace',
|
||||
'ip_deny',
|
||||
'ip_allow'
|
||||
);
|
||||
if (in_array($key, $hander) && $value) {
|
||||
$value = str_replace("\r\n", ",", $value); // 替换回车
|
||||
$value = str_replace(",", ",", $value); // 替换中文逗号分割符
|
||||
}
|
||||
|
||||
if ($this->model->checkConfig("name='$key'")) {
|
||||
$this->model->modValue($key, $value);
|
||||
} elseif ($key != 'submit' && $key != 'formcheck') {
|
||||
// 自动新增配置项
|
||||
$data = array(
|
||||
'name' => $key,
|
||||
'value' => $value,
|
||||
'type' => 2,
|
||||
'sorting' => 255,
|
||||
'description' => ''
|
||||
);
|
||||
return $this->model->addConfig($data);
|
||||
}
|
||||
}
|
||||
}
|
||||
248
apps/admin/controller/system/DatabaseController.php
Normal file
248
apps/admin/controller/system/DatabaseController.php
Normal file
@@ -0,0 +1,248 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年5月9日
|
||||
* 数据库管理,只支持MySQL
|
||||
*/
|
||||
namespace app\admin\controller\system;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\system\DatabaseModel;
|
||||
|
||||
class DatabaseController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
private $dbauth;
|
||||
|
||||
function __construct()
|
||||
{
|
||||
$this->model = new DatabaseModel();
|
||||
$this->dbauth = $this->config('database');
|
||||
}
|
||||
|
||||
// 数据库管理
|
||||
public function index()
|
||||
{
|
||||
switch ($this->dbauth['type']) {
|
||||
case 'mysqli':
|
||||
case 'pdo_mysql':
|
||||
$this->assign('db', 'mysql');
|
||||
$this->assign('tables', $this->model->getList());
|
||||
break;
|
||||
case 'sqlite':
|
||||
case 'pdo_sqlite':
|
||||
$this->assign('db', 'sqlite');
|
||||
break;
|
||||
default:
|
||||
error('当前配置的数据库类型不支持在线管理!');
|
||||
}
|
||||
$this->display('system/database.html');
|
||||
}
|
||||
|
||||
// 数据库修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $_POST) {
|
||||
alert_back('非法访问!', - 1);
|
||||
}
|
||||
|
||||
$submit = post('submit', 'letter', true);
|
||||
|
||||
switch ($submit) {
|
||||
case 'yh':
|
||||
$tables = self::getTableList();
|
||||
if (! $tables)
|
||||
alert_back('请选择数据表!');
|
||||
if ($this->model->optimize(implode(',', $tables))) {
|
||||
// $this->log('优化数据库表成功!');
|
||||
success('优化成功!', - 1);
|
||||
} else {
|
||||
// $this->log('优化数据库表失败!');
|
||||
error('优化失败!', - 1);
|
||||
}
|
||||
break;
|
||||
case 'xf':
|
||||
$tables = self::getTableList();
|
||||
if (! $tables)
|
||||
alert_back('请选择数据表!');
|
||||
if ($this->model->repair(implode(',', $tables))) {
|
||||
// $this->log('修复数据库表成功!');
|
||||
success('修复成功!', - 1);
|
||||
} else {
|
||||
// $this->log('修复数据库表失败!');
|
||||
error('修复失败!', - 1);
|
||||
}
|
||||
break;
|
||||
case 'bf':
|
||||
$tables = self::getTableList();
|
||||
if (! $tables)
|
||||
alert_back('请选择数据表!');
|
||||
if ($this->backupTable($tables)) {
|
||||
$this->log('备份数据库表成功!');
|
||||
success('备份表成功!', - 1);
|
||||
} else {
|
||||
$this->log('备份数据库表失败!');
|
||||
error('备份失败!', - 1);
|
||||
}
|
||||
break;
|
||||
case 'bfdb':
|
||||
if ($this->backupDB()) {
|
||||
$this->log('备份数据库成功!');
|
||||
success('备份数据库成功!', - 1);
|
||||
} else {
|
||||
$this->log('备份数据库失败!');
|
||||
error('备份失败!', - 1);
|
||||
}
|
||||
break;
|
||||
case 'bfsqlite':
|
||||
if (copy(DOC_PATH . $this->dbauth['dbname'], DOC_PATH . STATIC_DIR . '/backup/sql/' . get_uniqid() . '_' . date('YmdHis') . '.db')) {
|
||||
$this->log('备份数据库成功!');
|
||||
success('备份数据库成功!', - 1);
|
||||
} else {
|
||||
$this->log('备份数据库失败!');
|
||||
error('备份失败!', - 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 备份数据表
|
||||
public function backupTable($tables)
|
||||
{
|
||||
$backdir = date('YmdHis');
|
||||
foreach ($tables as $table) {
|
||||
$sql = '';
|
||||
$sql .= $this->header(); // 备份文件头部说明
|
||||
$sql .= $this->tableSql($table); // 表结构信息
|
||||
$fields = $this->model->getFields($table); // 表字段
|
||||
$field_num = $this->model->getFieldNum($table); // 字段数量
|
||||
$all_data = $this->model->getAll($table); // 读取全部数据
|
||||
$sql .= $this->dataSql($table, $fields, $field_num, $all_data); // 生成语句
|
||||
$filename = $backdir . "/" . get_uniqid() . "_" . $backdir . "_" . $table . '.sql'; // 写入文件
|
||||
$result = $this->writeFile($filename, $sql);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
// 备份整个数据库
|
||||
public function backupDB()
|
||||
{
|
||||
$sql = '';
|
||||
$sql .= $this->header(); // 备份文件头部说明
|
||||
$sql .= $this->dbSql(); // 数据库创建语句
|
||||
|
||||
$tables = $this->model->getTables(); // 获取所有表
|
||||
foreach ($tables as $table) { // 表结构及数据
|
||||
$sql .= $this->tableSql($table); // 表结构信息
|
||||
$fields = $this->model->getFields($table); // 表字段
|
||||
$field_num = $this->model->getFieldNum($table); // 字段数量
|
||||
$all_data = $this->model->getAll($table); // 读取全部数据
|
||||
if ($all_data) {
|
||||
$sql .= $this->dataSql($table, $fields, $field_num, $all_data); // 生成数据语句
|
||||
}
|
||||
$sql .= '-- --------------------------------------------------------' . PHP_EOL . PHP_EOL;
|
||||
}
|
||||
// 写入文件
|
||||
$filename = get_uniqid() . '_' . date('YmdHis') . '_' . $this->dbauth['dbname'] . '.sql';
|
||||
return $this->writeFile($filename, $sql);
|
||||
}
|
||||
|
||||
// 插入数据库备份基础信息
|
||||
private function header()
|
||||
{
|
||||
$sql = '-- Online Database Management SQL Dump' . PHP_EOL;
|
||||
$sql .= '-- 数据库名: ' . $this->dbauth['dbname'] . PHP_EOL;
|
||||
$sql .= '-- 生成日期: ' . date('Y-m-d H:i:s') . PHP_EOL;
|
||||
$sql .= '-- PHP 版本: ' . phpversion() . PHP_EOL . PHP_EOL;
|
||||
|
||||
$sql .= 'SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";' . PHP_EOL;
|
||||
$sql .= 'SET time_zone = "+08:00";' . PHP_EOL;
|
||||
$sql .= 'SET NAMES utf8;' . PHP_EOL . PHP_EOL;
|
||||
|
||||
$sql .= '-- --------------------------------------------------------' . PHP_EOL . PHP_EOL;
|
||||
return $sql;
|
||||
}
|
||||
|
||||
// 数据库创建语句
|
||||
private function dbSql()
|
||||
{
|
||||
$sql = '';
|
||||
$sql .= "--" . PHP_EOL;
|
||||
$sql .= "-- 数据库名 `" . $this->dbauth['dbname'] . '`' . PHP_EOL;
|
||||
$sql .= "--" . PHP_EOL . PHP_EOL;
|
||||
|
||||
// 如果数据库不存在则创建
|
||||
$sql .= "CREATE DATABASE IF NOT EXISTS `" . $this->dbauth['dbname'] . '` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;' . PHP_EOL;
|
||||
// 选择数据库
|
||||
$sql .= "USE `" . $this->dbauth['dbname'] . "`;" . PHP_EOL . PHP_EOL;
|
||||
$sql .= '-- --------------------------------------------------------' . PHP_EOL . PHP_EOL;
|
||||
return $sql;
|
||||
}
|
||||
|
||||
// 表结构语句
|
||||
private function tableSql($table)
|
||||
{
|
||||
$sql = '';
|
||||
$sql .= "--" . PHP_EOL;
|
||||
$sql .= "-- 表的结构 `" . $table . '`' . PHP_EOL;
|
||||
$sql .= "--" . PHP_EOL . PHP_EOL;
|
||||
|
||||
$sql .= $this->model->tableStru($table); // 表创建语句
|
||||
return $sql;
|
||||
}
|
||||
|
||||
// 数据语句
|
||||
private function dataSql($table, $fields, $fieldNnum, $data)
|
||||
{
|
||||
if (! $data)
|
||||
return;
|
||||
$sql = '';
|
||||
$sql .= "--" . PHP_EOL;
|
||||
$sql .= "-- 转存表中的数据 `" . $table . "`" . PHP_EOL;
|
||||
$sql .= "--" . PHP_EOL;
|
||||
$sql .= PHP_EOL;
|
||||
|
||||
// 循环每个字段下面的内容
|
||||
|
||||
$sql .= "INSERT INTO `" . $table . "` (" . implode(',', $fields) . ") VALUES" . PHP_EOL;
|
||||
$brackets = "(";
|
||||
foreach ($data as $value) {
|
||||
$sql .= $brackets;
|
||||
$comma = "";
|
||||
for ($i = 0; $i < $fieldNnum; $i ++) {
|
||||
$sql .= ($comma . "'" . decode_string($value[$i]) . "'");
|
||||
$comma = ",";
|
||||
}
|
||||
$sql .= ")";
|
||||
$brackets = "," . PHP_EOL . "(";
|
||||
}
|
||||
$sql .= ';' . PHP_EOL . PHP_EOL;
|
||||
return $sql;
|
||||
}
|
||||
|
||||
// 写入文件
|
||||
private function writeFile($filename, $content)
|
||||
{
|
||||
$sqlfile = DOC_PATH . STATIC_DIR . '/backup/sql/' . $filename;
|
||||
check_file($sqlfile, true);
|
||||
if (file_put_contents($sqlfile, $content)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// 获取并检查表名称
|
||||
private function getTableList()
|
||||
{
|
||||
$list = post('list');
|
||||
foreach ($list as $key => $value) {
|
||||
if (! preg_match('/^[\w]+$/', $value)) {
|
||||
unset($list[$key]);
|
||||
}
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
}
|
||||
275
apps/admin/controller/system/MenuController.php
Normal file
275
apps/admin/controller/system/MenuController.php
Normal file
@@ -0,0 +1,275 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年4月3日
|
||||
* 菜单控制器
|
||||
*/
|
||||
namespace app\admin\controller\system;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\system\MenuModel;
|
||||
|
||||
class MenuController extends Controller
|
||||
{
|
||||
|
||||
private $count;
|
||||
|
||||
private $blank;
|
||||
|
||||
private $outData = array();
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new MenuModel();
|
||||
}
|
||||
|
||||
// 菜单列表
|
||||
public function index()
|
||||
{
|
||||
$this->assign('list', true);
|
||||
$menus = $this->model->getList();
|
||||
$this->assign('menus', $this->makeMenuList($menus));
|
||||
|
||||
// 菜单下拉列表
|
||||
$menus = $this->model->getSelect();
|
||||
$this->assign('menu_select', $this->makeMenuSelect($menus));
|
||||
|
||||
// 获取菜单按钮
|
||||
$this->assign('actions', get_type('T101'));
|
||||
|
||||
$this->display('system/menu.html');
|
||||
}
|
||||
|
||||
// 生成无限级菜单管理列表
|
||||
private function makeMenuList($tree)
|
||||
{
|
||||
// 循环生成
|
||||
foreach ($tree as $value) {
|
||||
$this->count ++;
|
||||
$this->outData[$this->count] = new \stdClass();
|
||||
$this->outData[$this->count]->id = $value->id;
|
||||
$this->outData[$this->count]->blank = $this->blank;
|
||||
$this->outData[$this->count]->name = $value->name;
|
||||
$this->outData[$this->count]->mcode = $value->mcode;
|
||||
$this->outData[$this->count]->pcode = $value->pcode;
|
||||
$this->outData[$this->count]->sorting = $value->sorting;
|
||||
$this->outData[$this->count]->url = $value->url;
|
||||
$this->outData[$this->count]->status = $value->status;
|
||||
$this->outData[$this->count]->shortcut = $value->shortcut;
|
||||
$this->outData[$this->count]->ico = $value->ico;
|
||||
$this->outData[$this->count]->create_user = $value->create_user;
|
||||
$this->outData[$this->count]->update_user = $value->update_user;
|
||||
$this->outData[$this->count]->create_time = $value->create_time;
|
||||
$this->outData[$this->count]->update_time = $value->update_time;
|
||||
|
||||
if ($value->son) {
|
||||
$this->outData[$this->count]->son = true;
|
||||
} else {
|
||||
$this->outData[$this->count]->son = false;
|
||||
}
|
||||
// 子菜单处理
|
||||
if ($value->son) {
|
||||
$this->blank .= ' ';
|
||||
$this->makeMenuList($value->son);
|
||||
}
|
||||
}
|
||||
// 循环完后回归缩进位置
|
||||
$this->blank = substr($this->blank, 0, - 6);
|
||||
return $this->outData;
|
||||
}
|
||||
|
||||
// 菜单增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$mcode = get_auto_code($this->model->getLastCode()); // 自动编码
|
||||
$pcode = post('pcode', 'var');
|
||||
$name = post('name');
|
||||
$url = post('url');
|
||||
$sorting = post('sorting', 'int');
|
||||
$status = post('status', 'int');
|
||||
$shortcut = post('shortcut', 'int');
|
||||
$ico = post('ico');
|
||||
$actions = post('actions', 'array', false, '菜单按钮', array());
|
||||
|
||||
if (! $mcode) {
|
||||
alert_back('编码不能为空!');
|
||||
}
|
||||
if (! $pcode) {
|
||||
$pcode = 0; // 父编码默认为0
|
||||
}
|
||||
if (! $name) {
|
||||
alert_back('菜单名称不能为空!');
|
||||
}
|
||||
|
||||
if ($this->model->checkMenu("mcode='$mcode'")) {
|
||||
alert_back('该菜单编号已经存在,不能再使用!');
|
||||
}
|
||||
|
||||
// 菜单地址自动填充
|
||||
if (! $url) {
|
||||
$url = '/' . M . '/' . $mcode . '/index';
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'mcode' => $mcode,
|
||||
'pcode' => $pcode,
|
||||
'name' => $name,
|
||||
'url' => $url,
|
||||
'sorting' => $sorting,
|
||||
'status' => $status,
|
||||
'shortcut' => $shortcut,
|
||||
'ico' => $ico,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->addMenu($data, $actions)) {
|
||||
$this->log('新增菜单' . $mcode . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('admin/Menu/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增菜单' . $mcode . '失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 生成菜单下拉列表
|
||||
private function makeMenuSelect($tree, $selectid = null)
|
||||
{
|
||||
// 初始化
|
||||
$menu_html = '';
|
||||
// 循环生成
|
||||
foreach ($tree as $value) {
|
||||
// 默认选择项
|
||||
if ($selectid == $value->mcode) {
|
||||
$select = "selected='selected'";
|
||||
} else {
|
||||
$select = '';
|
||||
}
|
||||
if (get('mcode') != $value->mcode) { // 不显示本身,避免出现自身为自己的父节点
|
||||
$menu_html .= "<option value='{$value->mcode}' $select />{$this->blank}{$value->mcode} {$value->name}";
|
||||
}
|
||||
// 子菜单处理
|
||||
if ($value->son) {
|
||||
$this->blank .= ' ';
|
||||
$menu_html .= $this->makeMenuSelect($value->son, $selectid);
|
||||
}
|
||||
}
|
||||
// 循环完后回归位置
|
||||
$this->blank = substr($this->blank, 0, - 6);
|
||||
return $menu_html;
|
||||
}
|
||||
|
||||
// 菜单删除
|
||||
public function del()
|
||||
{
|
||||
if (! $mcode = get('mcode', 'var')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
if ($this->model->delMenu($mcode)) {
|
||||
$this->log('删除菜单' . $mcode . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除菜单' . $mcode . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 菜单修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $mcode = get('mcode', 'var')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modMenu($mcode, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
$this->log('修改菜单' . $mcode . '状态' . $value . '成功!');
|
||||
location(- 1);
|
||||
} else {
|
||||
$this->log('修改菜单' . $mcode . '状态' . $value . '失败!');
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$pcode = post('pcode', 'var');
|
||||
$name = post('name');
|
||||
$sorting = post('sorting', 'int');
|
||||
$url = post('url');
|
||||
$status = post('status', 'int');
|
||||
$shortcut = post('shortcut', 'int');
|
||||
$ico = post('ico');
|
||||
$actions = post('actions', 'array', false, '菜单按钮', array());
|
||||
|
||||
if (! $pcode) {
|
||||
$pcode = 0; // 父编码默认为0
|
||||
}
|
||||
if (! $name) {
|
||||
alert_back('菜单名称不能为空!');
|
||||
}
|
||||
// 菜单地址自动填充
|
||||
if (! $url) {
|
||||
$url = '/' . M . '/' . $mcode . '/index';
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'pcode' => $pcode,
|
||||
'name' => $name,
|
||||
'sorting' => $sorting,
|
||||
'url' => $url,
|
||||
'status' => $status,
|
||||
'shortcut' => $shortcut,
|
||||
'ico' => $ico,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行修改
|
||||
if ($this->model->modMenu($mcode, $data, $actions)) {
|
||||
$this->log('修改菜单' . $mcode . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('admin/Menu/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else { // 调取修改内容
|
||||
|
||||
$this->assign('mod', true);
|
||||
|
||||
$result = $this->model->getMenu($mcode);
|
||||
if (! $result) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('menu', $result); // 菜单信息
|
||||
|
||||
// 获取菜单按钮组
|
||||
$this->assign('actions', get_type('T101'));
|
||||
|
||||
// 菜单下拉列表
|
||||
$menus = $this->model->getSelect();
|
||||
$this->assign('menu_select', $this->makeMenuSelect($menus, $result->pcode));
|
||||
|
||||
// 显示
|
||||
$this->display('system/menu.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
249
apps/admin/controller/system/RoleController.php
Normal file
249
apps/admin/controller/system/RoleController.php
Normal file
@@ -0,0 +1,249 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年4月3日
|
||||
* 角色控制器
|
||||
*/
|
||||
namespace app\admin\controller\system;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\system\RoleModel;
|
||||
|
||||
class RoleController extends Controller
|
||||
{
|
||||
|
||||
private $blank;
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new RoleModel();
|
||||
}
|
||||
|
||||
// 角色列表
|
||||
public function index()
|
||||
{
|
||||
$this->assign('list', true);
|
||||
$this->assign('roles', $this->model->getList());
|
||||
|
||||
// 数据区域选择
|
||||
$area_model = model('admin.system.Area');
|
||||
$area_tree = $area_model->getSelect();
|
||||
$area_checkbox = $this->makeAreaCheckbox($area_tree);
|
||||
$this->assign('area_checkbox', $area_checkbox);
|
||||
|
||||
// 菜单权限表
|
||||
$menu_model = model('admin.system.Menu');
|
||||
$menu_level = $menu_model->getMenuLevel();
|
||||
$menus = $menu_model->getSelect();
|
||||
$menu_list = $this->makeLevelList($menus, $menu_level);
|
||||
$this->assign('menu_list', $menu_list);
|
||||
|
||||
$this->display('system/role.html');
|
||||
}
|
||||
|
||||
// 角色增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$rcode = get_auto_code($this->model->getLastCode()); // 自动编码
|
||||
$name = post('name');
|
||||
$description = post('description');
|
||||
$acodes = post('acodes', 'array', false, '角色数据区域', array()); // 区域
|
||||
$levels = post('levels', 'array', false, '角色权限', array()); // 权限
|
||||
|
||||
if (! $rcode) {
|
||||
alert_back('编码不能为空!');
|
||||
}
|
||||
|
||||
if (! $name) {
|
||||
alert_back('角色名不能为空!');
|
||||
}
|
||||
|
||||
// 检查编码
|
||||
if ($this->model->checkRole("rcode='$rcode'")) {
|
||||
alert_back('该角色编号已经存在,不能再使用!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'rcode' => $rcode,
|
||||
'name' => $name,
|
||||
'description' => $description,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->addRole($data, $acodes, $levels)) {
|
||||
$this->log('修改角色' . $rcode . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('admin/Role/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('修改角色' . $rcode . '失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 生成区域选择,无限制
|
||||
private function makeAreaCheckbox($tree, $checkeds = array())
|
||||
{
|
||||
$list_html = '';
|
||||
foreach ($tree as $values) {
|
||||
if (in_array($values->acode, $checkeds)) {
|
||||
$checked = 'checked="checked"';
|
||||
} else {
|
||||
$checked = '';
|
||||
}
|
||||
if (! $values->son) { // 没有子类才显示选择框
|
||||
$list_html .= "<input type='checkbox' $checked name='acodes[]' value='{$values->acode}' title='{$values->acode}-{$values->name}'>";
|
||||
} else {
|
||||
$list_html .= $this->makeAreaCheckbox($values->son, $checkeds);
|
||||
}
|
||||
}
|
||||
return $list_html;
|
||||
}
|
||||
|
||||
// 生成无限级菜单权限列表
|
||||
private function makeLevelList($menus, $menu_level, $checkeds = array())
|
||||
{
|
||||
$menu_html = '';
|
||||
foreach ($menus as $value) {
|
||||
$string = '';
|
||||
// 根据是否有子栏目生成图标
|
||||
if ($value->son) {
|
||||
$ico = "<i class='fa fa-folder-open-o' aria-hidden='true'></i>";
|
||||
} else {
|
||||
$ico = "<i class='fa fa-folder-o' aria-hidden='true'></i>";
|
||||
}
|
||||
|
||||
// 选中状态
|
||||
if (in_array($value->url, $checkeds)) {
|
||||
$checked = 'checked="checked"';
|
||||
} else {
|
||||
$checked = '';
|
||||
}
|
||||
|
||||
// 获取模块及控制器路径
|
||||
if ($value->url) {
|
||||
$pre_url = substr($value->url, 0, get_strpos($value->url, '/', 3) + 1);
|
||||
} else {
|
||||
error('"' . $value->name . '"菜单地址为空,请核对!');
|
||||
}
|
||||
|
||||
$string = "<input type='checkbox' $checked class='checkbox' lay-skin='primary' name='levels[]' value='" . $value->url . "' title='浏览'>";
|
||||
$mcode = $value->mcode;
|
||||
if (array_key_exists($mcode, $menu_level)) {
|
||||
foreach ($menu_level[$mcode] as $key2 => $value2) {
|
||||
$url = $pre_url . $value2->value;
|
||||
if (in_array($url, $checkeds)) {
|
||||
$checked = 'checked="checked"';
|
||||
} else {
|
||||
$checked = '';
|
||||
}
|
||||
$string .= "<input type='checkbox' $checked class='checkbox'lay-skin='primary' name='levels[]' value='$url' title='{$value2->item}'>";
|
||||
}
|
||||
}
|
||||
|
||||
// 生成菜单html
|
||||
$menu_html .= "<div class='layui-row'><div class='layui-col-md3 layui-col-lg2' style='margin-top:10px;'>{$this->blank} $ico {$value->name}</div><div class='layui-col-md9'>$string</div></div>";
|
||||
|
||||
// 子菜单处理
|
||||
if ($value->son) {
|
||||
$this->blank .= ' ';
|
||||
$menu_html .= $this->makeLevelList($value->son, $menu_level, $checkeds);
|
||||
}
|
||||
}
|
||||
|
||||
// 循环完后回归缩进位置
|
||||
$this->blank = substr($this->blank, 0, - 6);
|
||||
return $menu_html;
|
||||
}
|
||||
|
||||
// 角色删除
|
||||
public function del()
|
||||
{
|
||||
if (! $rcode = get('rcode', 'var')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
if ($this->model->delRole($rcode)) {
|
||||
$this->log('删除角色' . $rcode . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除角色' . $rcode . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 角色修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $rcode = get('rcode', 'var')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$name = post('name');
|
||||
$description = post('description');
|
||||
$acodes = post('acodes', 'array', false, '角色数据区域', array()); // 区域
|
||||
$levels = post('levels', 'array', false, '角色权限', array()); // 权限
|
||||
|
||||
if (! $name) {
|
||||
alert_back('角色名不能为空!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'name' => $name,
|
||||
'description' => $description,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行修改
|
||||
if ($this->model->modRole($rcode, $data, $acodes, $levels)) {
|
||||
$this->log('修改角色' . $rcode . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('admin/Role/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
$this->assign('mod', true);
|
||||
|
||||
// 调取修改内容
|
||||
$result = $this->model->getRole($rcode);
|
||||
if (! $result) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('role', $result);
|
||||
|
||||
// 数据区域选择
|
||||
$area_model = model('admin.system.Area');
|
||||
$area_tree = $area_model->getSelect();
|
||||
$area_checkbox = $this->makeAreaCheckbox($area_tree, $result->acodes);
|
||||
$this->assign('area_checkbox', $area_checkbox);
|
||||
|
||||
// 菜单权限表
|
||||
$menu_model = model('admin.system.Menu');
|
||||
$menu_level = $menu_model->getMenuLevel();
|
||||
$menus = $menu_model->getSelect();
|
||||
$menu_list = $this->makeLevelList($menus, $menu_level, $result->levels);
|
||||
$this->assign('menu_list', $menu_list);
|
||||
|
||||
$this->display('system/role.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
40
apps/admin/controller/system/SyslogController.php
Normal file
40
apps/admin/controller/system/SyslogController.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年3月29日
|
||||
* 系统日志控制器
|
||||
*/
|
||||
namespace app\admin\controller\system;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\system\SyslogModel;
|
||||
|
||||
class SyslogController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new SyslogModel();
|
||||
}
|
||||
|
||||
// 日志列表
|
||||
public function index()
|
||||
{
|
||||
$this->assign('syslogs', $this->model->getList());
|
||||
$this->display('system/syslog.html');
|
||||
}
|
||||
|
||||
// 清理日志
|
||||
public function clear()
|
||||
{
|
||||
if ($this->model->clearLog()) {
|
||||
alert_location('清空成功!', url('/admin/Syslog/index'));
|
||||
} else {
|
||||
alert_location('清空失败!', url('/admin/Syslog/index'));
|
||||
}
|
||||
}
|
||||
}
|
||||
172
apps/admin/controller/system/TypeController.php
Normal file
172
apps/admin/controller/system/TypeController.php
Normal file
@@ -0,0 +1,172 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年4月13日
|
||||
* 类型控制器
|
||||
*/
|
||||
namespace app\admin\controller\system;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\system\TypeModel;
|
||||
|
||||
class TypeController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new TypeModel();
|
||||
}
|
||||
|
||||
// 类型列表
|
||||
public function index()
|
||||
{
|
||||
$this->assign('list', true);
|
||||
if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
|
||||
$result = $this->model->findType($field, $keyword);
|
||||
} else {
|
||||
$result = $this->model->getList();
|
||||
}
|
||||
|
||||
$this->assign('types', $result);
|
||||
|
||||
// 类型选择
|
||||
$this->assign('type_select', $this->model->getSelect());
|
||||
|
||||
$this->display('system/type.html');
|
||||
}
|
||||
|
||||
// 类型增加
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$tcode = post('tcode', 'var');
|
||||
$name = post('name');
|
||||
$item = post('item');
|
||||
$value = post('value', 'var');
|
||||
$sorting = post('sorting', 'int');
|
||||
|
||||
if (! $tcode) {
|
||||
$tcode = get_auto_code($this->model->getLastCode()); // 自动编码
|
||||
}
|
||||
|
||||
if (! $name) {
|
||||
alert_back('类型名不能为空!');
|
||||
}
|
||||
|
||||
if (! $item) {
|
||||
alert_back('类型项名称不能为空!');
|
||||
}
|
||||
|
||||
if (is_null($value)) {
|
||||
alert_back('类型项值不能为空!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'tcode' => $tcode,
|
||||
'name' => $name,
|
||||
'item' => $item,
|
||||
'value' => $value,
|
||||
'sorting' => $sorting,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->addType($data)) {
|
||||
$this->log('新增类型' . $tcode . '-' . $item . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/Type/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增类型' . $tcode . '-' . $item . '失败!');
|
||||
error('新增失败!', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 类型删除
|
||||
public function del()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
if ($id < 7) {
|
||||
alert_back('该类型不允许删除!');
|
||||
}
|
||||
|
||||
if ($this->model->delType($id)) {
|
||||
$this->log('删除类型项' . $id . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除类型项' . $id . '失败!');
|
||||
error('删除失败!', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 类型修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $id = get('id', 'int')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$name = post('name');
|
||||
$item = post('item');
|
||||
$value = post('value', 'var');
|
||||
$sorting = post('sorting', 'int');
|
||||
|
||||
if (! $name) {
|
||||
alert_back('类型名不能为空!');
|
||||
}
|
||||
|
||||
if (! $item) {
|
||||
alert_back('类型项名称不能为空!');
|
||||
}
|
||||
|
||||
if (is_null($value)) {
|
||||
alert_back('类型项值不能为空!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'name' => $name,
|
||||
'item' => $item,
|
||||
'value' => $value,
|
||||
'sorting' => $sorting,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->modType($id, $data)) {
|
||||
$this->log('修改类型项' . $id . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/Type/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else {
|
||||
// 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
|
||||
if (! $result = $this->model->getType($id)) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('type', $result);
|
||||
$this->display('system/type.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
391
apps/admin/controller/system/UpgradeController.php
Normal file
391
apps/admin/controller/system/UpgradeController.php
Normal file
@@ -0,0 +1,391 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2018年8月14日
|
||||
* 在线更新
|
||||
*/
|
||||
namespace app\admin\controller\system;
|
||||
|
||||
use core\basic\Controller;
|
||||
use core\basic\Model;
|
||||
|
||||
class UpgradeController extends Controller
|
||||
{
|
||||
|
||||
// 服务器地址
|
||||
private $server = 'https://www.pbootcms.com';
|
||||
|
||||
// 更新分支
|
||||
private $branch;
|
||||
|
||||
// 强制同步文件
|
||||
private $force;
|
||||
|
||||
// 修改版本
|
||||
private $revise;
|
||||
|
||||
// 文件列表
|
||||
public $files = array();
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
error_reporting(0);
|
||||
$this->branch = $this->config('upgrade_branch') == '3.X.dev' ? '3.X.dev' : '3.X';
|
||||
$this->force = $this->config('upgrade_force') ?: 0;
|
||||
$this->revise = $this->config('revise_version') ?: 0;
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
switch (get('action')) {
|
||||
case 'local':
|
||||
$upfile = $this->local();
|
||||
break;
|
||||
default:
|
||||
$upfile = array();
|
||||
}
|
||||
$this->assign('upfile', $upfile);
|
||||
$this->assign('branch', $this->branch);
|
||||
$this->assign('force', $this->force);
|
||||
$this->assign('revise', $this->revise);
|
||||
$this->assign('snuser', $this->config('sn_user') ?: 0);
|
||||
$this->assign('site', get_http_url());
|
||||
$this->display('system/upgrade.html');
|
||||
}
|
||||
|
||||
// 检查更新
|
||||
public function check()
|
||||
{
|
||||
// 清理目录,检查下载目录及备份目录
|
||||
path_delete(RUN_PATH . '/upgrade', true);
|
||||
if (! check_dir(RUN_PATH . '/upgrade', true)) {
|
||||
json(0, '目录写入权限不足,无法正常升级!' . RUN_PATH . '/upgrade');
|
||||
}
|
||||
check_dir(DOC_PATH . STATIC_DIR . '/backup/upgrade', true);
|
||||
|
||||
$files = $this->getServerList();
|
||||
$db = get_db_type();
|
||||
foreach ($files as $key => $value) {
|
||||
// 过滤掉相对路径
|
||||
$value->path = preg_replace_r('{\.\.(\/|\\\\)}', '', $value->path);
|
||||
$file = ROOT_PATH . $value->path;
|
||||
if (@md5_file($file) != $value->md5) {
|
||||
// 筛选数据库更新脚本
|
||||
if (preg_match('/([\w]+)-([\w\.]+)-update\.sql/i', $file, $matches)) {
|
||||
if ($matches[1] != $db || ! $this->compareVersion($matches[2], APP_VERSION . '.' . RELEASE_TIME . '.' . $this->revise)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (file_exists($file)) {
|
||||
$files[$key]->type = '<span style="color:Red">覆盖</span>';
|
||||
$files[$key]->ltime = date('Y-m-d H:i:s', filemtime($file));
|
||||
} else {
|
||||
$files[$key]->type = '新增';
|
||||
$files[$key]->ltime = '无';
|
||||
}
|
||||
$files[$key]->ctime = date('Y-m-d H:i:s', $files[$key]->ctime);
|
||||
$upfile[] = $files[$key];
|
||||
}
|
||||
}
|
||||
if (! $upfile) {
|
||||
json(1, '您的系统无任何文件需要更新!');
|
||||
} else {
|
||||
json(1, $upfile);
|
||||
}
|
||||
}
|
||||
|
||||
// 执行下载
|
||||
public function down()
|
||||
{
|
||||
if (! ! $list = get('list')) {
|
||||
if (! is_array($list)) { // 单个文件转换为数组
|
||||
$list = array(
|
||||
$list
|
||||
);
|
||||
}
|
||||
$len = count($list) ?: 0;
|
||||
foreach ($list as $value) {
|
||||
// 过滤掉相对路径
|
||||
$value = preg_replace_r('{\.\.(\/|\\\\)}', '', $value);
|
||||
// 本地存储路径
|
||||
$path = RUN_PATH . '/upgrade' . $value;
|
||||
// 自动创建目录
|
||||
if (! check_dir(dirname($path), true)) {
|
||||
json(0, '目录写入权限不足,无法下载升级文件!' . dirname($path));
|
||||
}
|
||||
|
||||
// 定义执行下载的类型
|
||||
$types = '.zip|.rar|.doc|.docx|.ppt|.pptx|.xls|.xlsx|.chm|.ttf|.otf|';
|
||||
$pathinfo = explode(".", basename($path));
|
||||
$ext = end($pathinfo); // 获取扩展
|
||||
if (preg_match('/\.' . $ext . '\|/i', $types)) {
|
||||
$result = $this->getServerDown('/release/' . $this->branch . $value, $path);
|
||||
} else {
|
||||
$result = $this->getServerFile($value, $path);
|
||||
}
|
||||
}
|
||||
if ($len == 1) {
|
||||
json(1, "更新文件 " . basename($value) . " 下载成功!");
|
||||
} else {
|
||||
json(1, "更新文件" . basename($value) . "等文件全部下载成功!");
|
||||
}
|
||||
} else {
|
||||
json(0, '请选择要下载的文件!');
|
||||
}
|
||||
}
|
||||
|
||||
// 执行更新
|
||||
public function update()
|
||||
{
|
||||
if ($_POST) {
|
||||
if (! ! $list = post('list')) {
|
||||
$list = explode(',', $list);
|
||||
$backdir = date('YmdHis');
|
||||
|
||||
// 分离文件
|
||||
foreach ($list as $value) {
|
||||
// 过滤掉相对路径
|
||||
$value = preg_replace_r('{\.\.(\/|\\\\)}', '', $value);
|
||||
|
||||
if (stripos($value, '/script/') === 0 && preg_match('/\.sql$/i', $value)) {
|
||||
$sqls[] = $value;
|
||||
} else {
|
||||
$path = RUN_PATH . '/upgrade' . $value;
|
||||
$des_path = ROOT_PATH . $value;
|
||||
$back_path = DOC_PATH . STATIC_DIR . '/backup/upgrade/' . $backdir . $value;
|
||||
if (! check_dir(dirname($des_path), true)) {
|
||||
json(0, '目录写入权限不足,无法正常升级!' . dirname($des_path));
|
||||
}
|
||||
if (file_exists($des_path)) { // 文件存在时执行备份
|
||||
check_dir(dirname($back_path), true);
|
||||
copy($des_path, $back_path);
|
||||
}
|
||||
|
||||
// 如果后台入口文件修改过名字,则自动适配
|
||||
if (stripos($path, 'admin.php') !== false && stripos($_SERVER['SCRIPT_FILENAME'], 'admin.php') === false) {
|
||||
if (file_exists($_SERVER['SCRIPT_FILENAME'])) {
|
||||
$des_path = $_SERVER['SCRIPT_FILENAME'];
|
||||
}
|
||||
}
|
||||
|
||||
$files[] = array(
|
||||
'sfile' => $path,
|
||||
'dfile' => $des_path
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 更新数据库
|
||||
if (isset($sqls)) {
|
||||
$db = new DatabaseController();
|
||||
switch (get_db_type()) {
|
||||
case 'sqlite':
|
||||
copy(DOC_PATH . $this->config('database.dbname'), DOC_PATH . STATIC_DIR . '/backup/sql/' . date('YmdHis') . '_' . basename($this->config('database.dbname')));
|
||||
break;
|
||||
case 'mysql':
|
||||
$db->backupDB();
|
||||
break;
|
||||
}
|
||||
sort($sqls); // 排序
|
||||
foreach ($sqls as $value) {
|
||||
$path = RUN_PATH . '/upgrade' . $value;
|
||||
if (file_exists($path)) {
|
||||
$sql = file_get_contents($path);
|
||||
if (! $this->upsql($sql)) {
|
||||
$this->log("数据库 $value 更新失败!");
|
||||
json(0, "数据库" . basename($value) . " 更新失败!");
|
||||
}
|
||||
} else {
|
||||
json(0, "数据库文件" . basename($value) . "不存在!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 替换文件
|
||||
if (isset($files)) {
|
||||
foreach ($files as $value) {
|
||||
if (! copy($value['sfile'], $value['dfile'])) {
|
||||
$this->log("文件 " . $value['dfile'] . " 更新失败!");
|
||||
json(0, "文件 " . basename($value['dfile']) . " 更新失败,请重试!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 清理缓存
|
||||
path_delete(RUN_PATH . '/upgrade', true);
|
||||
path_delete(RUN_PATH . '/cache');
|
||||
path_delete(RUN_PATH . '/complite');
|
||||
path_delete(RUN_PATH . '/config');
|
||||
|
||||
$this->log("系统更新成功!");
|
||||
json(1, '系统更新成功!');
|
||||
} else {
|
||||
json(0, '请选择要更新的文件!');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 缓存文件
|
||||
private function local()
|
||||
{
|
||||
$files = $this->getLoaclList(RUN_PATH . '/upgrade');
|
||||
$files = json_decode(json_encode($files));
|
||||
foreach ($files as $key => $value) {
|
||||
$file = ROOT_PATH . $value->path;
|
||||
if (file_exists($file)) {
|
||||
$files[$key]->type = '<span style="color:Red">覆盖</span>';
|
||||
$files[$key]->ltime = date('Y-m-d H:i:s', filemtime($file));
|
||||
} else {
|
||||
$files[$key]->type = '新增';
|
||||
$files[$key]->ltime = '无';
|
||||
}
|
||||
$files[$key]->ctime = date('Y-m-d H:i:s', $files[$key]->ctime);
|
||||
$upfile[] = $files[$key];
|
||||
}
|
||||
return $upfile;
|
||||
}
|
||||
|
||||
// 执行更新数据库
|
||||
private function upsql($sql)
|
||||
{
|
||||
$sql = explode(';', $sql);
|
||||
$model = new Model();
|
||||
foreach ($sql as $value) {
|
||||
$value = trim($value);
|
||||
if ($value) {
|
||||
$model->amd($value);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// 获取列表
|
||||
private function getServerList()
|
||||
{
|
||||
$param = array(
|
||||
'version' => APP_VERSION . '.' . RELEASE_TIME . '.' . $this->revise,
|
||||
'branch' => $this->branch,
|
||||
'force' => $this->force,
|
||||
'site' => get_http_url(),
|
||||
'snuser' => $this->config('sn_user')
|
||||
);
|
||||
$url = $this->server . '/index.php?p=/upgrade/getlist&' . http_build_query($param);
|
||||
if (! ! $rs = json_decode(get_url($url, '', '', true))) {
|
||||
if ($rs->code) {
|
||||
if (is_array($rs->data)) {
|
||||
return $rs->data;
|
||||
} else {
|
||||
json(1, $rs->data);
|
||||
}
|
||||
} else {
|
||||
json(0, $rs->data);
|
||||
}
|
||||
} else {
|
||||
$this->log('连接更新服务器发生错误,请稍后再试!');
|
||||
json(0, '连接更新服务器发生错误,请稍后再试!');
|
||||
}
|
||||
}
|
||||
|
||||
// 获取文件
|
||||
private function getServerFile($source, $des)
|
||||
{
|
||||
$url = $this->server . '/index.php?p=/upgrade/getFile&branch=' . $this->branch;
|
||||
$data['path'] = $source;
|
||||
$file = basename($source);
|
||||
if (! ! $rs = json_decode(get_url($url, $data, '', true))) {
|
||||
if ($rs->code) {
|
||||
if (! file_put_contents($des, base64_decode($rs->data))) {
|
||||
$this->log("更新文件 " . $file . " 下载失败!");
|
||||
json(0, "更新文件 " . $file . " 下载失败!");
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
json(0, $rs->data);
|
||||
}
|
||||
} else {
|
||||
$this->log("更新文件 " . $file . " 获取失败!");
|
||||
json(0, "更新文件 " . $file . " 获取失败!");
|
||||
}
|
||||
}
|
||||
|
||||
// 获取非文本文件
|
||||
private function getServerDown($source, $des)
|
||||
{
|
||||
$url = $this->server . $source;
|
||||
$file = basename($source);
|
||||
if (($sfile = fopen($url, "rb")) && ($dfile = fopen($des, "wb"))) {
|
||||
while (! feof($sfile)) {
|
||||
$fwrite = fwrite($dfile, fread($sfile, 1024 * 8), 1024 * 8);
|
||||
if ($fwrite === false) {
|
||||
$this->log("更新文件 " . $file . " 下载失败!");
|
||||
json(0, "更新文件 " . $file . " 下载失败!");
|
||||
}
|
||||
}
|
||||
if ($sfile) {
|
||||
fclose($sfile);
|
||||
}
|
||||
if ($dfile) {
|
||||
fclose($dfile);
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
$this->log("更新文件 " . $file . " 获取失败!");
|
||||
json(0, "更新文件 " . $file . " 获取失败!");
|
||||
}
|
||||
}
|
||||
|
||||
// 获取文件列表
|
||||
private function getLoaclList($path)
|
||||
{
|
||||
$files = scandir($path);
|
||||
foreach ($files as $value) {
|
||||
if ($value != '.' && $value != '..') {
|
||||
if (is_dir($path . '/' . $value)) {
|
||||
$this->getLoaclList($path . '/' . $value);
|
||||
} else {
|
||||
$file = $path . '/' . $value;
|
||||
|
||||
// 避免中文乱码
|
||||
if (! mb_check_encoding($file, 'utf-8')) {
|
||||
$out_path = mb_convert_encoding($file, 'UTF-8', 'GBK');
|
||||
} else {
|
||||
$out_path = $file;
|
||||
}
|
||||
|
||||
$out_path = str_replace(RUN_PATH . '/upgrade', '', $out_path);
|
||||
|
||||
$this->files[] = array(
|
||||
'path' => $out_path,
|
||||
'md5' => md5_file($file),
|
||||
'ctime' => filemtime($file)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this->files;
|
||||
}
|
||||
|
||||
// 比较程序本号
|
||||
private function compareVersion($sv, $cv)
|
||||
{
|
||||
if (empty($sv) || $sv == $cv) {
|
||||
return 0;
|
||||
}
|
||||
$sv = explode('.', $sv);
|
||||
$cv = explode('.', $cv);
|
||||
$len = count($sv) > count($cv) ? count($sv) : count($cv);
|
||||
for ($i = 0; $i < $len; $i ++) {
|
||||
$n1 = $sv[$i] or 0;
|
||||
$n2 = $cv[$i] or 0;
|
||||
if ($n1 > $n2) {
|
||||
return 1;
|
||||
} elseif ($n1 < $n2) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
227
apps/admin/controller/system/UserController.php
Normal file
227
apps/admin/controller/system/UserController.php
Normal file
@@ -0,0 +1,227 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年4月3日
|
||||
* 用户控制器
|
||||
*/
|
||||
namespace app\admin\controller\system;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\system\UserModel;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new UserModel();
|
||||
}
|
||||
|
||||
// 用户列表
|
||||
public function index()
|
||||
{
|
||||
$this->assign('list', true);
|
||||
if ((! ! $field = get('field', 'var')) && (! ! $keyword = get('keyword', 'vars'))) {
|
||||
$result = $this->model->findUser($field, $keyword);
|
||||
} else {
|
||||
$result = $this->model->getList();
|
||||
}
|
||||
$this->assign('users', $result);
|
||||
// 角色列表
|
||||
$role_model = model('admin.system.Role');
|
||||
$this->assign('roles', $role_model->getSelect());
|
||||
|
||||
$this->display('system/user.html');
|
||||
}
|
||||
|
||||
// 用户新增
|
||||
public function add()
|
||||
{
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$ucode = get_auto_code($this->model->getLastCode());
|
||||
$username = post('username');
|
||||
$realname = post('realname');
|
||||
$password = post('password');
|
||||
$rpassword = post('rpassword');
|
||||
$status = post('status', 'int');
|
||||
$roles = post('roles', 'array', true, '用户角色', array()); // 用户角色
|
||||
|
||||
if (! $ucode) {
|
||||
alert_back('编码不能为空!');
|
||||
}
|
||||
if (! $username) {
|
||||
alert_back('用户名不能为空!');
|
||||
}
|
||||
if (! $realname) {
|
||||
alert_back('真实名字不能为空!');
|
||||
}
|
||||
if (! $password) {
|
||||
alert_back('密码不能为空!');
|
||||
}
|
||||
if (! $rpassword) {
|
||||
alert_back('确认密码不能为空!');
|
||||
}
|
||||
if ($password != $rpassword) {
|
||||
alert_back('确认密码不正确!');
|
||||
}
|
||||
|
||||
if (! preg_match('/^[\x{4e00}-\x{9fa5}\w\-\.@]+$/u', $username)) {
|
||||
alert_back('用户名含有不允许的特殊字符!');
|
||||
}
|
||||
|
||||
// 检查编码重复
|
||||
if ($this->model->checkUser("ucode='$ucode'")) {
|
||||
alert_back('该用户编号已经存在,不能再使用!');
|
||||
}
|
||||
|
||||
// 检查用户名重复
|
||||
if ($this->model->checkUser("username='$username'")) {
|
||||
alert_back('该用户名已经存在,不能再使用!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'ucode' => $ucode,
|
||||
'username' => $username,
|
||||
'realname' => $realname,
|
||||
'password' => encrypt_string($password),
|
||||
'status' => $status,
|
||||
'login_count' => 0,
|
||||
'last_login_ip' => 0,
|
||||
'create_user' => session('username'),
|
||||
'update_user' => session('username'),
|
||||
'create_time' => get_datetime(),
|
||||
'update_time' => '0000-00-00 00:00:00'
|
||||
);
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->addUser($data, $roles)) {
|
||||
$this->log('新增用户' . $ucode . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('新增成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('新增成功!', url('/admin/User/index'));
|
||||
}
|
||||
} else {
|
||||
$this->log('新增用户' . $ucode . '失败!');
|
||||
error('新增失败', - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 用户删除
|
||||
public function del()
|
||||
{
|
||||
if (! $ucode = get('ucode', 'var')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
if ($ucode == '10001') {
|
||||
error('内置管理员不允许删除!', - 1);
|
||||
}
|
||||
|
||||
if ($this->model->delUser($ucode)) {
|
||||
$this->log('删除用户' . $ucode . '成功!');
|
||||
success('删除成功!', - 1);
|
||||
} else {
|
||||
$this->log('删除用户' . $ucode . '失败!');
|
||||
error('删除失败', - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 用户修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $ucode = get('ucode', 'var')) {
|
||||
error('传递的参数值错误!', - 1);
|
||||
}
|
||||
|
||||
if ($ucode == '10001') {
|
||||
error('内置管理员不允许此操作!', - 1);
|
||||
}
|
||||
|
||||
// 单独修改状态
|
||||
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
|
||||
if ($this->model->modUser($ucode, "$field='$value',update_user='" . session('username') . "'")) {
|
||||
location(- 1);
|
||||
} else {
|
||||
alert_back('修改失败!');
|
||||
}
|
||||
}
|
||||
|
||||
// 修改操作
|
||||
if ($_POST) {
|
||||
// 获取数据
|
||||
$username = post('username');
|
||||
$realname = post('realname');
|
||||
$password = post('password');
|
||||
$rpassword = post('rpassword');
|
||||
$status = post('status', 'int');
|
||||
$roles = post('roles', 'array', true, '用户角色', array()); // 用户角色
|
||||
|
||||
if (! $username) {
|
||||
alert_back('用户名不能为空!');
|
||||
}
|
||||
if (! $realname) {
|
||||
alert_back('真实名字不能为空!');
|
||||
}
|
||||
|
||||
if (! preg_match('/^[\x{4e00}-\x{9fa5}\w\-\.@]+$/u', $username)) {
|
||||
alert_back('用户名含有不允许的特殊字符!');
|
||||
}
|
||||
|
||||
// 检查用户名重复
|
||||
if ($this->model->checkUser("username='$username' AND ucode<>'$ucode'")) {
|
||||
alert_back('该用户名已经存在,不能再使用!');
|
||||
}
|
||||
|
||||
// 构建数据
|
||||
$data = array(
|
||||
'username' => $username,
|
||||
'realname' => $realname,
|
||||
'status' => $status,
|
||||
'update_user' => session('username')
|
||||
);
|
||||
|
||||
if ($password) {
|
||||
if (! $rpassword) {
|
||||
alert_back('确认密码不能为空!');
|
||||
}
|
||||
if ($password != $rpassword) {
|
||||
alert_back('确认密码不正确!');
|
||||
}
|
||||
$data['password'] = encrypt_string($password);
|
||||
}
|
||||
|
||||
// 执行添加
|
||||
if ($this->model->modUser($ucode, $data, $roles)) {
|
||||
$this->log('修改用户' . $ucode . '成功!');
|
||||
if (! ! $backurl = get('backurl')) {
|
||||
success('修改成功!', base64_decode($backurl));
|
||||
} else {
|
||||
success('修改成功!', url('/admin/User/index'));
|
||||
}
|
||||
} else {
|
||||
location(- 1);
|
||||
}
|
||||
} else { // 调取修改内容
|
||||
$this->assign('mod', true);
|
||||
|
||||
$result = $this->model->getUser($ucode);
|
||||
if (! $result) {
|
||||
error('编辑的内容已经不存在!', - 1);
|
||||
}
|
||||
$this->assign('user', $result);
|
||||
|
||||
// 角色列表
|
||||
$role_model = model('admin.system.Role');
|
||||
$this->assign('roles', $role_model->getSelect());
|
||||
$this->display('system/user.html');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user