Files
NEUP-FleaMarket/app/Http/Controllers/GoodController.php
T
2017-06-24 11:22:34 +08:00

401 lines
16 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Http\Controllers;
use App\UserInfo;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Response;
use App\GoodCat;
use App\GoodInfo;
use App\GoodTag;
use App\Transaction;
use App\TransactionLog;
use App\Message;
use App\Tag;
use App\FavList;
use App\Http\Controllers\Controller;
use Storage;
use Image;
use App\Http\Requests\AddGoodRequest;
use App\Http\Requests\EditGoodRequest;
use Mews\Purifier\Purifier;
class GoodController extends Controller
{
/**
* @function GoodController@getList
* @input Request $request
* @return View
* @description Get the list of all goods.
*/
public function getList(Request $request)
{
$paginate_limit = 16;
$data = [];
$input = $request->all();
$query = "";
$cat_id = $start_price = $end_price = $start_count = $sort = "";
if(isset($input['cat_id']))
$cat_id = $input['cat_id'];
if(isset($input['start_price']))
$start_price = $input['start_price'];
if(isset($input['end_price']))
$end_price = $input['end_price'];
if(isset($input['start_count']))
$start_count = $input['start_count'];
if(isset($input['sort']))
$sort = $input['sort'];
if(isset($input['query'])) $query = $input['query'];
$data['cats'] = GoodCat::orderby('cat_index', 'asc')->get();
$data['goods'] = GoodInfo::where('good_name', 'like', "%$query%");
//$data['cat_id'] = 0;
if(isset($input['cat_id']) && $input['cat_id'] != ""){
$data['goods'] = GoodInfo::where('cat_id', $input['cat_id']);
$data['cat_id'] = $input['cat_id'];
}
//同时给定价格上下限
if(isset($input['start_price']) && isset($input['end_price'])
&& $input['start_price'] != "" && $input['end_price'] != ""){
//确保上限大于下限
if($input['start_price'] > $input['end_price']){
$temp = $input['start_price'];
$input['start_price'] = $input['end_price'];
$input['end_price'] = $temp;
}
$data['goods'] = $data['goods']->where([
['price', '>=', $input['start_price']],
['price', '<=', $input['end_price']]
]);
}
//只设上限或下限时
else{
if(isset($input['start_price']) && $input['start_price'] != "")
$data['goods'] = $data['goods']->where('price', '>=', $input['start_price']);
if(isset($input['end_price']) && $input['end_price'] != "")
$data['goods'] = $data['goods']->where('price', '<=', $input['end_price']);
}
//对数量筛选只设下限
if(isset($input['start_count']) && $input['start_count'] != "")
$data['goods'] = $data['goods']->where('count', '>=', $input['start_count']);
else
$data['goods'] = $data['goods']->where('count', '>', 0);
// 最后在排序筛选baned==0以及paginate分页
// p为价格,c为数量,d为倒序,值相同时按id倒序排列
if(isset($input['sort']) && $input['sort'] != ""){
if ($input['sort'] == 'old'){
$data['goods'] = $data['goods']->orderby('id', 'asc')->where('baned', 0)->paginate($paginate_limit);
}
elseif ($input['sort'] == 'p'){
$data['goods'] = $data['goods']->orderby('price', 'asc')->orderby('id', 'desc')->where('baned', 0)->paginate($paginate_limit);
}
elseif ($input['sort'] == 'pd') {
$data['goods'] = $data['goods']->orderby('price', 'desc')->orderby('id', 'desc')->where('baned', 0)->paginate($paginate_limit);
}
elseif ($input['sort'] == 'c') {
$data['goods'] = $data['goods']->orderby('count', 'asc')->orderby('id', 'desc')->where('baned', 0)->paginate($paginate_limit);
}
elseif ($input['sort'] == 'cd') {
$data['goods'] = $data['goods']->orderby('count', 'desc')->orderby('id', 'desc')->where('baned', 0)->paginate($paginate_limit);
}
}
//未指定排序规则时按id倒序排序
else
$data['goods'] = $data['goods']->orderby('id', 'desc')->where('baned', 0)->paginate($paginate_limit);
if($request->session()->has('user_id'))
$data['user_id'] = $request->session()->get('user_id');
else
$data['user_id'] = NULL;
if($request->session()->has('is_admin'))
$data['is_admin'] = $request->session()->get('is_admin');
else
$data['is_admin'] = NULL;
$data['page'] = 1;
if(isset($input['page']) && $input['page'] != "") $data['page'] = $input['page'];
$data['cat_id'] = $cat_id;
$data['query'] = $query;
$data['start_price'] = $start_price;
$data['end_price'] = $end_price;
$data['start_count'] = $start_count;
$data['sort'] = $sort;
//dd($data['cat_id'] == "");
return view::make('good.goodList')->with($data);
}
/**
* @function GoodController@getInfo
* @input Request $request, $good_id
* @return View
* @description Get the information of a specify goods.
*/
public function getInfo(Request $request, $good_id)
{
$data = [];
$data['cats'] = GoodCat::orderby('cat_index', 'asc')->get();
$data['good'] = GoodInfo::where('id', $good_id)->first();
if($data['good']==NULL) return View::make('common.errorPage')->withErrors('商品ID错误!');
if(($data['good']->baned) && ($data['good']->user_id != $request->session()->get('user_id') && !$request->session()->get('is_admin')))
return View::make('common.errorPage')->withErrors('商品ID错误!');
$data['user'] = User::where('id', $data['good']->user_id)->first();
if($request->session()->has('user_id'))
{
$data['user_id'] = $request->session()->get('user_id');
$data['inFvlst'] = FavList::where('user_id', $data['user_id'])->where('good_id', $good_id)->get();
}
else
$data['user_id'] = NULL;
if($request->session()->has('is_admin'))
$data['is_admin'] = $request->session()->get('is_admin');
else
$data['is_admin'] = NULL;
$good = GoodInfo::where('id', $good_id)->first();
return view::make('good.goodInfo')->with($data);
}
/**
* @function GoodController@addGood
* @input Request $request
* @return Redirect
* @description Add a new good.
*/
public function showAddGood(Request $request)
{
$user_id = $request->session()->get('user_id');
$user = User::find($user_id);
$data = [];
$data['cats'] = GoodCat::orderby('cat_index', 'asc')->get();
$data['good'] = new GoodInfo;
$data['add'] = true;
//$data['tags'] = Tag::orderby('id', 'asc')->get();
if(!$user || $user->baned)
return view::make('good.goodInfoForm')->with($data)->withErrors('您的账号被封禁,无法出售商品,请联系系统管理员');
if(UserInfo::where('user_id', $user_id)->count() == 0 && !$user->wechat_open_id)
return view::make('good.goodInfoForm')->with($data)->withErrors('你必须先添加联系方式才能出售');
return view::make('good.goodInfoForm')->with($data);
}
public function addGood(AddGoodRequest $request)
{
$user_id = $request->session()->get('user_id');
$user = User::find($user_id);
if(!$user || $user->baned)
return Redirect::back()->withInput()->withErrors('您的账号被封禁,请联系系统管理员');
if(UserInfo::where('user_id', $user_id)->count() == 0 && !$user->wechat_open_id)
return Redirect::back()->withInput()->withErrors('你必须添加联系方式才能出售');
$input = $request->all();
$good = new GoodInfo;
$good->good_name = $input['good_name'];
$good->cat_id = $input['cat_id'];
$good->description = clean($input['description']);
$good->price = $input['price'];
$good->type = $input['type'];
$good->count = $input['count'];
$good->user_id = $user_id;
$good->baned = '0';
$good->save();
/*$good_tags = $input['good_tag'];
foreach($good_tags as $tag_id)
{
$tag = new GoodTag;
if(!$tag_id)
{
$otherTag = new Tag;
$otherTag->tag_name = $input['other_tag'];
$otherTag->save();
$tag->tag_id = $otherTag->id;
}
else if($tag_id)
{
$tag->tag_id = $tag_id;
}
$tag->good_id = $good->id;
$tag->save();
}*/
Storage::put(
'good/titlepic/'.sha1($good->id),
Image::make($request->file('goodTitlePic'))->crop(round($input['crop_width']),round($input['crop_height']),round($input['crop_x']),round($input['crop_y']))->resize(800, 450)->encode('data-url')
);
return Redirect::to('/good/'.$good->id);
}
/**
* @function GoodController@editGood
* @input Request $request, $good_id
* @return Redirect
* @description Edit a specify good.
*/
public function showEditGood(Request $request, $good_id)
{
$data = [];
$data['cats'] = GoodCat::orderby('cat_index', 'asc')->get();
$data['good'] = GoodInfo::find($good_id);
if($data['good'] == NULL) return View::make('common.errorPage')->withErrors('商品ID错误!');
if($request->session()->get('user_id')!=$data['good']->user_id && $request->session()->get('is_admin')!=2)
return Redirect::to('/good/'.$good_id);
$data['add'] = false;
/*$data['tags'] = Tag::orderby('id', 'asc')->get();
$collection = GoodTag::where('good_id', $good_id)->pluck('tag_id');
$data['this_good_tags'] = $collection->toArray();*/
return view::make('good.goodInfoForm')->with($data);
}
public function editGood(EditGoodRequest $request, $good_id)
{
$input = $request->all();
$good = GoodInfo::find($good_id);
if($good == NULL) return View::make('common.errorPage')->withErrors('商品ID错误!');
if($request->session()->get('user_id')!=$good->user_id && $request->session()->get('is_admin')!=2)
return Redirect::to('/good/'.$good_id);
$good->good_name=$input['good_name'];
$good->cat_id=$input['cat_id'];
$good->description= clean($input['description']);
$good->price=$input['price'];
$good->type=$input['type'];
$good->count=$input['count'];
$good->update();
/*
$deleteoldtags = GoodTag::where('good_id', $good_id)->delete();
$good_tags = $input['good_tag'];
foreach($good_tags as $tag_id)
{
$tag = new GoodTag;
if(!$tag_id)
{
$otherTag = new Tag;
$otherTag->tag_name = $input['other_tag'];
$otherTag->save();
$tag->tag_id = $otherTag->id;
}
else if($tag_id)
{
$tag->tag_id = $tag_id;
}
$tag->good_id = $good->id;
$tag->save();
}*/
if($request->hasFile('goodTitlePic'))
Storage::put(
'good/titlepic/'.sha1($good->id),
Image::make($request->file('goodTitlePic'))->crop(round($input['crop_width']),round($input['crop_height']),round($input['crop_x']),round($input['crop_y']))->resize(800, 450)->encode('data-url')
);
return Redirect::to('/good/'.$good_id);
}
/**
* @function GoodController@deleteGood
* @input Request $request, $good_id
* @return Redirect
* @description Delete a specify good.
*/
public function deleteGood(Request $request, $good_id)
{
$good = GoodInfo::find($good_id);
if($request->session()->get('user_id') != $good->user_id && $request->session()->get('is_admin')!=2)
return Redirect::to('/good/'.$good_id);
Storage::delete('good/titlepic/'.sha1($good->id));
$good->delete();
//$deleteGoodTag = GoodTag::where('good_id', $good_id)->delete();
$deleteFavList = Favlist::where('good_id', $good_id)->delete();
$trans = Transaction::where('good_id', $good_id)->where('status', '<' , 3)->get();
foreach($trans as $tran)
{
$tran->status = 0;
MessageController::sendMessageHandle(0, $tran->buyer_id, "【系统消息】您好!由于该商品被卖家删除,您的<a href='/user/trans'>订单(编号:".$tran->id.")</a>已被取消。非常抱歉。");
$tran->update();
}
return Redirect::to('/good');
}
/*
* @function quickAccess
* @input $request (use query)
*
* @return Redirect or View
* @description Process the query and redirect to
* certain good or list
*/
public function quickAccess(Request $request)
{
$data = [];
$input = $request->all();
$query = $input['query'];
$data['cats'] = GoodCat::orderby('cat_index', 'asc')->get();
$data['goods'] = GoodInfo::where('good_name', 'like', "%$query%")->get();
if($request->session()->has('user_id'))
$data['user_id'] = $request->session()->get('user_id');
else
$data['user_id'] = NULL;
if($request->session()->has('is_admin'))
$data['is_admin'] = $request->session()->get('is_admin');
else
$data['is_admin'] = NULL;
return view::make('good.goodList')->with($data);
}
public function addFavlist(Request $request, $good_id)
{
$fav = new FavList;
$fav->user_id = $request->session()->get('user_id');
$fav->good_id = $good_id;
$fav->save();
$good = GoodInfo::find($good_id);
$good->fav_num++;
$good->save();
return json_encode(['msg' => 'success']);
}
public function delFavlist(Request $request, $good_id)
{
$user_id = $request->session()->get('user_id');
FavList::where('user_id', $user_id)->where('good_id', $good_id)->delete();
$good = GoodInfo::find($good_id);
$good->fav_num--;
$good->save();
return json_encode(['msg' => 'success']);
}
public function getTitlePic(Request $request, $good_id, $width = 800, $height = 450)
{
if($width > 1920)
$width = 1920;
if($height > 1080)
$height = 1080;
if (!Storage::exists('good/titlepic/'.$good_id))
$file = Storage::get('public/titlepic.jpg');
else
$file = Storage::get('good/titlepic/'.$good_id);
$image = Image::make($file)->resize($width, $height);
return $image->response('jpg');
}
public function banGood(Request $request, $good_id)
{
$good = GoodInfo::find($good_id);
$good->baned = 1;
$good->update();
$admin_id = $request->session()->get('user_id');
MessageController::sendMessageHandle($admin_id, $good->user_id, "【系统消息】您好!您的<a href='/good/" . $good_id ."'>商品(编号:".$good_id.")</a>由于不符合有关规定已被管理员(ID:".$admin_id.")下架。请在此消息下询问具体细节。");
$trans = Transaction::where('good_id', $good_id)->where('status', '<' , 3)->get();
foreach($trans as $tran)
{
$tran->status = 0;
MessageController::sendMessageHandle(0, $tran->buyer_id, "【系统消息】您好!由于该商品不符合有关规定被下架,您的<a href='/user/trans'>订单(编号:".$tran->id.")</a>已被取消。非常抱歉。");
$tran->update();
}
return Redirect::to('/good/'.$good_id);
}
}