2016-07-21 22:01:57 +08:00
|
|
|
<?php
|
|
|
|
|
2016-08-28 10:05:21 +08:00
|
|
|
namespace App\Http\Controllers;
|
2016-07-21 22:01:57 +08:00
|
|
|
|
2016-09-04 15:35:12 +08:00
|
|
|
use View;
|
|
|
|
use Option;
|
2016-07-21 22:01:57 +08:00
|
|
|
use App\Models\User;
|
|
|
|
use App\Models\Closet;
|
2016-09-04 15:35:12 +08:00
|
|
|
use App\Models\Texture;
|
2016-07-21 22:01:57 +08:00
|
|
|
use App\Models\ClosetModel;
|
2016-09-04 15:35:12 +08:00
|
|
|
use Illuminate\Http\Request;
|
2016-08-29 19:47:30 +08:00
|
|
|
use App\Exceptions\PrettyPageException;
|
2016-07-21 22:01:57 +08:00
|
|
|
|
2016-09-04 15:35:12 +08:00
|
|
|
class ClosetController extends Controller
|
2016-07-21 22:01:57 +08:00
|
|
|
{
|
2016-09-04 15:35:12 +08:00
|
|
|
/**
|
|
|
|
* Instance of Closet.
|
|
|
|
*
|
|
|
|
* @var \App\Models\Closet
|
|
|
|
*/
|
2016-08-16 22:52:00 +08:00
|
|
|
private $closet;
|
2016-07-21 22:01:57 +08:00
|
|
|
|
2016-08-16 22:52:00 +08:00
|
|
|
public function __construct()
|
2016-07-21 22:01:57 +08:00
|
|
|
{
|
2018-07-11 16:09:22 +08:00
|
|
|
$this->middleware(function ($request, $next) {
|
|
|
|
$this->closet = new Closet($request->session()->get('uid'));
|
|
|
|
return $next($request);
|
|
|
|
});
|
2016-07-21 22:01:57 +08:00
|
|
|
}
|
|
|
|
|
2017-04-23 23:58:22 +08:00
|
|
|
public function index()
|
|
|
|
{
|
|
|
|
return view('user.closet')->with('user', app('user.current'));
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getClosetData(Request $request)
|
2016-07-21 22:01:57 +08:00
|
|
|
{
|
2016-09-04 15:35:12 +08:00
|
|
|
$category = $request->input('category', 'skin');
|
2017-04-23 23:58:22 +08:00
|
|
|
$page = abs($request->input('page', 1));
|
2017-11-06 11:07:24 +08:00
|
|
|
$per_page = (int) $request->input('perPage', 6);
|
2016-10-16 20:04:21 +08:00
|
|
|
$q = $request->input('q', null);
|
2016-07-21 22:01:57 +08:00
|
|
|
|
2017-11-06 11:07:24 +08:00
|
|
|
$per_page = $per_page > 0 ? $per_page : 6;
|
|
|
|
|
2017-11-05 16:54:01 +08:00
|
|
|
$items = collect();
|
2016-07-21 22:01:57 +08:00
|
|
|
|
2016-11-13 12:20:30 +08:00
|
|
|
if ($q) {
|
2018-02-16 17:31:04 +08:00
|
|
|
// Do search
|
2017-11-05 16:54:01 +08:00
|
|
|
$items = $this->closet->getItems($category)->filter(function ($item) use ($q) {
|
|
|
|
return stristr($item['name'], $q);
|
|
|
|
});
|
2016-10-16 20:04:21 +08:00
|
|
|
} else {
|
2017-04-23 23:58:22 +08:00
|
|
|
$items = $this->closet->getItems($category);
|
2016-10-16 20:04:21 +08:00
|
|
|
}
|
|
|
|
|
2018-02-16 17:31:04 +08:00
|
|
|
// Pagination
|
2017-11-06 11:07:24 +08:00
|
|
|
$total_pages = ceil($items->count() / $per_page);
|
2016-07-21 22:01:57 +08:00
|
|
|
|
2017-04-23 23:58:22 +08:00
|
|
|
return response()->json([
|
|
|
|
'category' => $category,
|
2017-11-06 11:07:24 +08:00
|
|
|
'items' => $items->forPage($page, $per_page)->values(),
|
2017-04-23 23:58:22 +08:00
|
|
|
'total_pages' => $total_pages
|
|
|
|
]);
|
2016-07-21 22:01:57 +08:00
|
|
|
}
|
|
|
|
|
2016-09-04 15:35:12 +08:00
|
|
|
public function add(Request $request)
|
2016-07-21 22:01:57 +08:00
|
|
|
{
|
2016-09-04 15:35:12 +08:00
|
|
|
$this->validate($request, [
|
|
|
|
'tid' => 'required|integer',
|
2016-09-25 10:35:16 +08:00
|
|
|
'name' => 'required|no_special_chars'
|
2016-09-04 15:35:12 +08:00
|
|
|
]);
|
2016-07-21 22:01:57 +08:00
|
|
|
|
2016-12-31 23:36:44 +08:00
|
|
|
if (app('user.current')->getScore() < option('score_per_closet_item')) {
|
2016-12-28 13:08:17 +08:00
|
|
|
return json(trans('user.closet.add.lack-score'), 7);
|
|
|
|
}
|
|
|
|
|
2017-11-04 17:18:01 +08:00
|
|
|
$tid = $request->tid;
|
2018-02-16 17:31:04 +08:00
|
|
|
if (! Texture::find($tid)) {
|
2017-11-04 17:18:01 +08:00
|
|
|
return json(trans('user.closet.add.not-found'), 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($this->closet->add($tid, $request->name)) {
|
|
|
|
$t = Texture::find($tid);
|
2016-07-21 22:01:57 +08:00
|
|
|
$t->likes += 1;
|
|
|
|
$t->save();
|
|
|
|
|
2018-07-11 16:10:45 +08:00
|
|
|
$this->closet->save();
|
|
|
|
|
2017-01-02 00:19:55 +08:00
|
|
|
app('user.current')->setScore(option('score_per_closet_item'), 'minus');
|
|
|
|
|
2016-09-24 22:49:20 +08:00
|
|
|
return json(trans('user.closet.add.success', ['name' => $request->input('name')]), 0);
|
2016-09-10 21:39:45 +08:00
|
|
|
} else {
|
2016-09-24 22:49:20 +08:00
|
|
|
return json(trans('user.closet.add.repeated'), 1);
|
2016-07-21 22:01:57 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-09-25 10:35:16 +08:00
|
|
|
public function rename(Request $request)
|
|
|
|
{
|
|
|
|
$this->validate($request, [
|
|
|
|
'tid' => 'required|integer',
|
|
|
|
'new_name' => 'required|no_special_chars'
|
|
|
|
]);
|
|
|
|
|
|
|
|
if ($this->closet->rename($request->tid, $request->new_name)) {
|
2018-07-11 16:10:45 +08:00
|
|
|
$this->closet->save();
|
2016-09-25 10:35:16 +08:00
|
|
|
return json(trans('user.closet.rename.success', ['name' => $request->new_name]), 0);
|
|
|
|
} else {
|
2017-11-04 17:18:01 +08:00
|
|
|
return json(trans('user.closet.remove.non-existent'), 1);
|
2016-09-25 10:35:16 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-09-04 15:35:12 +08:00
|
|
|
public function remove(Request $request)
|
2016-07-21 22:01:57 +08:00
|
|
|
{
|
2016-09-04 15:35:12 +08:00
|
|
|
$this->validate($request, [
|
|
|
|
'tid' => 'required|integer'
|
|
|
|
]);
|
2016-07-21 22:01:57 +08:00
|
|
|
|
2016-09-04 15:35:12 +08:00
|
|
|
if ($this->closet->remove($request->tid)) {
|
|
|
|
$t = Texture::find($request->tid);
|
2016-07-21 22:01:57 +08:00
|
|
|
$t->likes = $t->likes - 1;
|
|
|
|
$t->save();
|
|
|
|
|
2018-07-11 16:10:45 +08:00
|
|
|
$this->closet->save();
|
|
|
|
|
2017-01-02 00:19:55 +08:00
|
|
|
if (option('return_score'))
|
2017-04-21 18:44:11 +08:00
|
|
|
app('user.current')->setScore(option('score_per_closet_item'), 'plus');
|
2017-01-02 00:19:55 +08:00
|
|
|
|
2016-09-24 22:49:20 +08:00
|
|
|
return json(trans('user.closet.remove.success'), 0);
|
2016-09-10 21:39:45 +08:00
|
|
|
} else {
|
2017-11-04 17:18:01 +08:00
|
|
|
return json(trans('user.closet.remove.non-existent'), 1);
|
2016-07-21 22:01:57 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|