419 lines
12 KiB
PHP
419 lines
12 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use Illuminate\Foundation\Validation\ValidatesRequests;
|
|
use Illuminate\Http\Request;
|
|
use App\News as NewsModel;
|
|
use App\NewsCategory;
|
|
use App\NewsDiscuss;
|
|
use DB;
|
|
use Validator;
|
|
|
|
class NewsController extends Controller
|
|
{
|
|
use ValidatesRequests;
|
|
|
|
|
|
/**
|
|
* @c_id integer 新闻分类
|
|
* @keyword string 关键词
|
|
* @num integer 每页记录数,为0则不分页
|
|
*/
|
|
|
|
public static function newsList($cId = 0, $keyword = '', $lang = '', $num = 0)
|
|
{
|
|
$keyword = '%' . $keyword . '%';
|
|
$news_query = NewsModel::where(function ($query) use ($cId, $keyword, $lang) {
|
|
!empty($keyword) && $query->where('title', 'like', $keyword);
|
|
$cId > 0 && $query->where('c_id', $cId);
|
|
!empty($lang) && $query->where('lang', $lang);
|
|
})->orderBy('id', 'desc');
|
|
$news = $num != 0 ? $news_query->paginate($num) : $news_query->get();
|
|
return $news;
|
|
}
|
|
|
|
/**
|
|
* @num integer 每页记录数,为0则不分页
|
|
* @id integer 分类ID,为0则返回所有
|
|
*/
|
|
|
|
public static function newsCateList($num = 0, $id = 0)
|
|
{
|
|
if($id == 0) {
|
|
if($num != 0) {
|
|
$discuss = NewsCategory::orderBy('id', 'desc')->paginate($num);
|
|
} else {
|
|
$discuss = NewsCategory::orderBy('id', 'desc')->get();
|
|
}
|
|
} else {
|
|
if($num != 0) {
|
|
$discuss = NewsCategory::where('id', $id)->orderBy('id', 'asc')->paginate($num);
|
|
} else {
|
|
$discuss = NewsCategory::where('id', $id)->orderBy('id', 'asc')->get();
|
|
}
|
|
}
|
|
return $discuss;
|
|
}
|
|
|
|
/**
|
|
* @nId integer 所属新闻ID
|
|
* @num integer 每页记录数,为0则不分页
|
|
*/
|
|
|
|
public static function newsDiscussList($nId = 0, $num = 0)
|
|
{
|
|
if($nId == 0) {
|
|
return false;
|
|
} else {
|
|
if($num != 0) {
|
|
$discuss = NewsDiscuss::where('n_id', $nId)->orderBy('id', 'desc')->paginate($num);
|
|
} else {
|
|
$discuss = NewsDiscuss::where('n_id', $nId)->orderBy('id', 'desc')->get();
|
|
}
|
|
}
|
|
return $discuss;
|
|
}
|
|
|
|
/**
|
|
* 后台新闻列表
|
|
*
|
|
* @return
|
|
*/
|
|
|
|
public function index(Request $request, $c_id = 0, $keyword = '')
|
|
{
|
|
$c_id = intval($request->input('c_id', '0'));
|
|
$keyword = trim($request->input('keyword', ''));
|
|
$lang = trim($request->input('lang', ''));
|
|
$cateList = NewsCategory::all();
|
|
$news = self::newsList($c_id, $keyword, $lang, 10);
|
|
$lang_list = NewsModel::getLangeList();
|
|
$count = count($news);
|
|
$data = [
|
|
'count'=> $count,
|
|
'news' => $news->appends([
|
|
'c_id' => $c_id,
|
|
'keyword' => $keyword,
|
|
'lang' => $lang,
|
|
]),
|
|
'cateList' => $cateList,
|
|
];
|
|
return view('admin.news.index', [
|
|
'data'=> $data,
|
|
'lang_list' => $lang_list,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 后台添加新闻表单
|
|
*
|
|
* @return
|
|
*/
|
|
|
|
public function add(Request $request)
|
|
{
|
|
$cateList = NewsCategory::all();
|
|
$lang_list = NewsModel::getLangeList();
|
|
return view('admin.news.add', [
|
|
'cateList' => $cateList,
|
|
'langList' => $lang_list
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 处理添加新闻表单数据
|
|
*
|
|
* @return
|
|
*/
|
|
|
|
public function postAdd(Request $request)
|
|
{
|
|
$news = new NewsModel();
|
|
$this->validate($request, [
|
|
'title' => 'required|min:1|max:128',
|
|
'c_id' => 'required|integer',
|
|
'author' => 'required|min:1|max:64',
|
|
'content' => 'required',
|
|
'lang' => 'required',
|
|
]);
|
|
$news->title = $request->input('title');
|
|
$news->c_id = $request->input('c_id');
|
|
$news->recommend = $request->input('recommend', 0);
|
|
$thumbnail = $request->input('thumbnail', "");
|
|
$cover = $request->input('cover', "");
|
|
$news->thumbnail = empty($thumbnail) ? URL("images/zwtp.png"):$thumbnail;
|
|
$news->cover = empty($cover) ? URL("images/zwtp.png"):$cover;
|
|
$news->audit = $request->input('audit', 0);
|
|
$news->display = $request->input('display', 0);
|
|
$news->discuss = $request->input('discuss', 0);
|
|
$news->author = $request->input('author', '管理员') ;
|
|
$news->views = $request->input('views', 0);
|
|
$news->create_time = $request->input('create_time') == date('Y-m-d') ? strtotime(date('Y-m-d H:i:s')) : strtotime($request->input('create_time'));
|
|
$news->browse_grant = $request->input('browse_grant');
|
|
$news->keyword = $request->input('keyword', '') ?? '';
|
|
$news->abstract = $request->input('abstract', '') ?? '';
|
|
$news->content = $request->input('content', '') ?? '';
|
|
$news->lang = $request->input('lang', 'zh');
|
|
$news->sorts = $request->input('sorts', 0);
|
|
$result = $news->save();
|
|
return $result ? $this->success('添加成功!') : $this->error('添加失败!');
|
|
}
|
|
|
|
/**
|
|
* 编辑新闻表单
|
|
*
|
|
* @return
|
|
*/
|
|
|
|
public function edit(Request $request, $id = 0)
|
|
{
|
|
$news = NewsModel::find($id);
|
|
$cateList = NewsCategory::all();
|
|
$lang_list = NewsModel::getLangeList();
|
|
$data = [
|
|
'news' => $news,
|
|
'cateList' => $cateList,
|
|
'langList' => $lang_list,
|
|
];
|
|
return view('admin.news.add', $data);
|
|
}
|
|
|
|
/**
|
|
* 处理编辑表单数据
|
|
*/
|
|
|
|
public function postEdit(Request $request, $id = 0)
|
|
{
|
|
$news = NewsModel::find($id);
|
|
$cateList = NewsCategory::all();
|
|
$this->validate($request, [
|
|
'title' => 'required|min:1|max:128',
|
|
'author' => 'required|min:1|max:64',
|
|
'content' => 'required',
|
|
'c_id' => 'required|integer|min:1',
|
|
'lang' => 'required',
|
|
]);
|
|
$news->title = $request->input('title');
|
|
$news->c_id = $request->input('c_id');
|
|
$thumbnail = $request->input('thumbnail', "");
|
|
$cover = $request->input('cover', "");
|
|
$news->thumbnail = empty($thumbnail) ? URL("images/zwtp.png"):$thumbnail;
|
|
$news->cover = empty($cover) ? URL("images/zwtp.png"):$cover;
|
|
$news->recommend = $request->input('recommend', 0);
|
|
$news->audit = $request->input('audit', 0);
|
|
$news->display = $request->input('display', 0);
|
|
$news->discuss = $request->input('discuss', 0);
|
|
$news->author = $request->input('author', '管理员');
|
|
$news->views = $request->input('views', 0);
|
|
$news->create_time = $request->input('create_time') == date('Y-m-d') ? strtotime(date('Y-m-d H:i:s')) : strtotime($request->input('create_time'));
|
|
$news->browse_grant = $request->input('browse_grant');
|
|
$news->keyword = $request->input('keyword', '');
|
|
$news->abstract = $request->input('abstract', '');
|
|
$news->content = $request->input('content', '');
|
|
$news->lang = $request->input('lang', 'zh');
|
|
$news->sorts = $request->input('sorts', 0);
|
|
$result = $news->save();
|
|
return $result ? $this->success('编辑成功!') : $this->error('编辑失败!');
|
|
}
|
|
|
|
/**
|
|
* 后台删除新闻
|
|
* @param $id 新闻ID
|
|
* @param $togetherDel 同评论一起删除
|
|
* @return
|
|
*/
|
|
|
|
public function del(Request $request, $id = 0, $togetherDel = 0)
|
|
{
|
|
//判断新闻对应评论是否一同删除
|
|
$result = false;
|
|
$s = 0;
|
|
if($togetherDel) {
|
|
DB::beginTransaction();
|
|
NewsDiscuss::where('n_id', $id)->delete() && $s++;
|
|
NewsModel::destroy($id) && $s++;
|
|
$result = $s == 2;
|
|
$result ? DB::commit() : DB::rollBack();
|
|
} else {
|
|
$result = NewsModel::destroy($id);
|
|
}
|
|
return $result ? $this->success('删除成功!') : $this->error('删除失败!');
|
|
}
|
|
|
|
/**
|
|
* 后台新闻分类列表
|
|
*
|
|
* @return
|
|
*/
|
|
|
|
public function cateIndex(Request $request)
|
|
{
|
|
$count = NewsCategory::count();
|
|
$newsCate = self::newsCateList(10);
|
|
$data = ['count' => $count, 'newsCate' => $newsCate];
|
|
return view('admin.news.cateIndex', ['data'=> $data]);
|
|
}
|
|
|
|
/**
|
|
* AJAX动态获取分类
|
|
* @return array
|
|
*/
|
|
|
|
public function getCateList()
|
|
{
|
|
$newsCate = self::newsCateList();
|
|
$count = $newsCate->count();
|
|
$data = [
|
|
'count' => $count,
|
|
'cate' => $newsCate
|
|
];
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* 添加新闻分类表单
|
|
*
|
|
* @return
|
|
*/
|
|
|
|
public function cateAdd(Request $request)
|
|
{
|
|
return view('admin.news.cateAdd');
|
|
}
|
|
|
|
/**
|
|
* 处理添加分类数据
|
|
*
|
|
* @return
|
|
*/
|
|
public function postCateAdd(Request $request)
|
|
{
|
|
$cate = new NewsCategory();
|
|
$this->validate($request, [
|
|
'name' => 'required|min:1|max:128',
|
|
]);
|
|
$cate->name = $request->input('name', '');
|
|
$cate->sorts = $request->input('sorts', 0);
|
|
$cate->is_show = $request->input('is_show', 1);
|
|
$result = $cate->save();
|
|
return $result ? $this->success('添加成功!') : $this->error('添加失败!');
|
|
}
|
|
|
|
/**
|
|
* 编辑新闻分类表单
|
|
*
|
|
* @return
|
|
*/
|
|
|
|
public function cateEdit(Request $request, $id = 0)
|
|
{
|
|
$cate = NewsCategory::find($id);
|
|
return view('admin.news.cateAdd', $cate);
|
|
}
|
|
|
|
/**
|
|
* 处理编辑新闻分类数据
|
|
*
|
|
* @return
|
|
*/
|
|
|
|
public function PostCateEdit(Request $request, $id = 0)
|
|
{
|
|
$cate = NewsCategory::find($id);
|
|
$this->validate($request, [
|
|
'name' => 'required|min:1|max:128',
|
|
]);
|
|
$cate->name = $request->input('name', '');
|
|
$cate->sorts = $request->input('sorts', 0);
|
|
$cate->is_show = $request->input('is_show', 1);
|
|
$result = $cate->save();
|
|
return $result ? $this->success('修改成功!') : $this->error('修改失败!');
|
|
}
|
|
|
|
/**
|
|
* 后台删除新闻分类
|
|
*
|
|
* @return
|
|
*/
|
|
|
|
public function cateDel(Request $request, $id = 0)
|
|
{
|
|
//需要先判断所属分类下是否有新闻
|
|
$count = NewsModel::where('c_id', $id)->count();
|
|
if($count > 0) {
|
|
return $this->error('删除失败,原因:对应分类下有新闻!');
|
|
} else {
|
|
$result = NewsCategory::destroy($id);
|
|
return $result ? $this->success('删除成功!') : $this->error('删除失败!');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 新闻评论列表
|
|
*
|
|
* @return
|
|
*/
|
|
|
|
public function discussIndex(Request $request, $nId = 0)
|
|
{
|
|
$newsDiscuss = self::newsDiscussList($nId, 20);
|
|
$news = NewsModel::find($nId);
|
|
$data = [
|
|
'news' => $news,
|
|
'newsDiscuss' => $newsDiscuss
|
|
];
|
|
return view('admin.news.discussIndex', $data);
|
|
}
|
|
|
|
/**
|
|
* AJAX获取评论列表
|
|
* @return array
|
|
*/
|
|
|
|
public function getDisscussList(Request $request, $nId = 0)
|
|
{
|
|
$count = NewsDiscuss::where('n_id', $nId)->count();
|
|
$newsCate = self::newsDiscussList($nId);
|
|
$data = [
|
|
'count' => $count,
|
|
'cate' => $newsCate
|
|
];
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* 切换新闻评论显示状态
|
|
*
|
|
* @return
|
|
*/
|
|
|
|
public function discussShowToggle(Request $request, $id = 0)
|
|
{
|
|
if($id !=0) {
|
|
$discuss = NewsDiscuss::find($id);
|
|
$discuss->status = 1 - intval($discuss->status);
|
|
$result = $discuss->save();
|
|
return $result ? $this->success('显示状态改变成功!') : $this->error('显示状态改变失败!');
|
|
} else {
|
|
return $this->error('ID传参错误');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 删除新闻评论
|
|
*
|
|
* @return
|
|
*/
|
|
|
|
public function discussDel(Request $request, $id = 0)
|
|
{
|
|
if($id !=0) {
|
|
$result = NewsDiscuss::destroy($id);
|
|
return $result ? $this->success('删除成功!') : $this->error('删除失败!');
|
|
} else {
|
|
return $this->error('ID传参错误');
|
|
}
|
|
}
|
|
}
|