diff --git a/app/Http/Controllers/ClosetController.php b/app/Http/Controllers/ClosetController.php index 5fe5273d..5f07b80b 100644 --- a/app/Http/Controllers/ClosetController.php +++ b/app/Http/Controllers/ClosetController.php @@ -119,7 +119,7 @@ class ClosetController extends Controller $t->save(); if (option('return_score')) - app('user.current')->setScore(option('score_per_closet_item'), 'minus'); + app('user.current')->setScore(option('score_per_closet_item'), 'plus'); return json(trans('user.closet.remove.success'), 0); } else { diff --git a/app/Http/Controllers/SkinlibController.php b/app/Http/Controllers/SkinlibController.php index 8991dcff..7e7a4bba 100644 --- a/app/Http/Controllers/SkinlibController.php +++ b/app/Http/Controllers/SkinlibController.php @@ -8,6 +8,8 @@ use Option; use Storage; use Session; use App\Models\User; +use App\Models\Closet; +use App\Models\Player; use App\Models\Texture; use Illuminate\Http\Request; use Illuminate\Http\JsonResponse; @@ -30,7 +32,7 @@ class SkinlibController extends Controller { $filter = $request->input('filter', 'skin'); $sort = $request->input('sort', 'time'); - $uid = $request->input('uid', 0); + $uid = $request->input('uid', session('uid')); $page = $request->input('page', 1); $page = $page <= 0 ? 1 : $page; @@ -51,8 +53,9 @@ class SkinlibController extends Controller if (!is_null($this->user)) { // show private textures when show uploaded textures of current user - if ($uid != $this->user->uid && !$this->user->isAdmin()) - $textures = $textures->where('public', '1'); + if (!$this->user->isAdmin()) + $textures = $textures->where('public', '1') + ->orWhere('uploader', $this->user->uid); } else { $textures = $textures->where('public', '1'); } @@ -194,7 +197,10 @@ class SkinlibController extends Controller Storage::delete($result['hash']); if (option('return_score')) { - $this->user->setScore($result->size * Option::get('score_per_storage'), 'plus'); + if ($result->public == 1) + $this->user->setScore($result->size * Option::get('score_per_storage'), 'plus'); + else + $this->user->setScore($result->size * Option::get('private_score_per_storage'), 'plus'); } if ($result->delete()) @@ -204,6 +210,8 @@ class SkinlibController extends Controller public function privacy(Request $request) { $t = Texture::find($request->input('tid')); + $type = $t->type; + $uid = session('uid'); if (!$t) return json(trans('skinlib.non-existent'), 1); @@ -211,6 +219,24 @@ class SkinlibController extends Controller if ($t->uploader != $this->user->uid && !$this->user->isAdmin()) return json(trans('skinlib.no-permission'), 1); + foreach (Player::where("tid_$type", $t->tid)->where('uid', '<>', $uid)->get() as $player) { + $player->setTexture(["tid_$type" => 0]); + } + + foreach (Closet::all() as $closet) { + if ($closet->uid != $uid && $closet->has($t->tid)) { + $closet->remove($t->tid); + if (option('return_score')) { + User::find($closet->uid)->setScore(option('score_per_closet_item'), 'plus'); + } + } + } + + app('user.current')->setScore( + $t->size * (option('private_score_per_storage') - option('score_per_storage')) * ($t->public == 1 ? -1 : 1), + 'plus' + ); + if ($t->setPrivacy(!$t->public)) { return json([ 'errno' => 0, diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 6e058203..569f7de1 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -73,6 +73,7 @@ class UserController extends Controller 'errno' => 0, 'msg' => trans('user.sign-in-success', ['score' => $acuiredScore]), 'score' => $this->user->getScore(), + 'storage' => $this->calculatePercentageUsed($this->user->getStorageUsed(), option('score_per_storage')), 'remaining_time' => round($this->user->getSignInRemainingTime() / 3600) ]); } else { diff --git a/app/Models/Closet.php b/app/Models/Closet.php index 1936fd6d..0cfb9b05 100644 --- a/app/Models/Closet.php +++ b/app/Models/Closet.php @@ -238,4 +238,18 @@ class Closet $this->save(); } + /** + * Get all closets. + * + * @return array + */ + public static function all() + { + $result = []; + foreach (DB::table('closets')->lists('uid') as $uid) { + $result[] = new Closet($uid); + } + return $result; + } + } diff --git a/composer.json b/composer.json index dc2ffbb6..b4af5f86 100644 --- a/composer.json +++ b/composer.json @@ -3,7 +3,7 @@ "description": "A web application brings your custom skins back in offline Minecraft servers.", "license": "GPL-3.0", "require": { - "php": "^5.5.9", + "php": ">=5.5.9", "filp/whoops": "^2.1", "predis/predis": "~1.0", "gregwar/captcha": "^1.1", diff --git a/config/options.php b/config/options.php index 9dc86da6..61e055bb 100644 --- a/config/options.php +++ b/config/options.php @@ -2,8 +2,8 @@ /** * @Author: printempw * @Date: 2016-07-29 11:53:11 - * @Last Modified by: printempw - * @Last Modified time: 2017-01-20 19:24:21 + * @Last Modified by: g-plane + * @Last Modified time: 2017-04-21 13:01:49 */ return [ @@ -32,7 +32,7 @@ return [ 'version' => '', 'check_update' => 'true', 'update_source' => 'https://work.prinzeugen.net/update.json', - 'copyright_text' => 'Copyright © 2016 {site_name}. All rights reserved.', + 'copyright_text' => 'Copyright © '.getdate()['year'].' {site_name}. All rights reserved.', 'auto_del_invalid_texture' => 'false', 'return_200_when_notfound' => 'false', 'cache_expire_time' => '31536000', diff --git a/resources/assets/src/scripts/admin.js b/resources/assets/src/scripts/admin.js index d7367ba9..3a9ce350 100644 --- a/resources/assets/src/scripts/admin.js +++ b/resources/assets/src/scripts/admin.js @@ -187,6 +187,7 @@ function deleteUserAccount(uid) { $('body').on('keypress', '.score', function(event){ if (event.which == 13) { changeUserScore($(this).parent().parent().attr('id'), $(this).val()); + $(this).blur(); } }); diff --git a/resources/assets/src/scripts/skinlib.js b/resources/assets/src/scripts/skinlib.js index 2d5bec64..631df5f2 100644 --- a/resources/assets/src/scripts/skinlib.js +++ b/resources/assets/src/scripts/skinlib.js @@ -156,7 +156,11 @@ function handleFiles(files, type) { img.onload = () => { (type == "skin") ? MSP.changeSkin(img.src) : MSP.changeCape(img.src); - $('#name').val($('#name').val() == "" ? file.name.split('.png')[0] : $('#name').val()); + let domTextureName = $('#name'); + if (domTextureName.val() === '' || domTextureName.val() === domTextureName.attr('data-last-file-name')) { + domTextureName.attr('data-last-file-name', file.name); + domTextureName.val(file.name); + } }; img.onerror = () => toastr.warning(trans('skinlib.fileExtError')); diff --git a/resources/assets/src/scripts/user.js b/resources/assets/src/scripts/user.js index b14864af..b3138b1d 100644 --- a/resources/assets/src/scripts/user.js +++ b/resources/assets/src/scripts/user.js @@ -20,11 +20,11 @@ $('body').on('click', '#preview-switch', () => { var selected = []; -$('body').on('click', '.item', function () { - $('.item-selected').removeClass('item-selected'); - $(this).addClass('item-selected'); +$('body').on('click', '.item-body', function () { + $('.item-selected').parent().removeClass('item-selected'); + $(this).parent().addClass('item-selected'); - let tid = $(this).attr('tid'); + let tid = $(this).parent().attr('tid'); $.ajax({ type: "POST", @@ -554,6 +554,14 @@ function signIn() { var dom = ' ' + trans('user.signInRemainingTime', { time: String(json.remaining_time) }); $('#sign-in-button').attr('disabled', 'disabled').html(dom); + if (json.storage.used > 1024) { + $('#user-storage').html(`${Math.round(json.storage.used)}/ ${Math.round(json.storage.total)} MB`); + } else { + $('#user-storage').html(`${Math.round(json.storage.used)}/ ${Math.round(json.storage.total)} KB`); + } + + $('#user-storage-bar').css('width', `${json.storage.percentage}%`) + swal({ type: 'success', html: json.msg diff --git a/resources/lang/en/skinlib.yml b/resources/lang/en/skinlib.yml index 656d05ad..23db7b47 100644 --- a/resources/lang/en/skinlib.yml +++ b/resources/lang/en/skinlib.yml @@ -14,6 +14,7 @@ filter: steve-model: (Steve Model) alex-model: (Alex Model) uploader: User (:name) Uploaded + clean-filter: Clean Filter sort: newest-uploaded: Newestly Uploaded diff --git a/resources/lang/en/user.yml b/resources/lang/en/user.yml index 8f9fe0ca..f49dc4b6 100644 --- a/resources/lang/en/user.yml +++ b/resources/lang/en/user.yml @@ -25,10 +25,10 @@ score-intro: player: :score scores = 1 player closet: - upload: Uplaod Texture + upload: Upload Texture search: Search Texture switch-category: Switch Category - view: View in skin librariy + view: View in skin library more: More set-avatar: Set as avatar empty-msg: | diff --git a/resources/lang/zh_CN/skinlib.yml b/resources/lang/zh_CN/skinlib.yml index 3b158f3d..c4e3eab1 100644 --- a/resources/lang/zh_CN/skinlib.yml +++ b/resources/lang/zh_CN/skinlib.yml @@ -14,6 +14,7 @@ filter: steve-model: (Steve 模型) alex-model: (Alex 模型) uploader: 用户(:name)上传 + clean-filter: 清除筛选 sort: newest-uploaded: 最新上传 diff --git a/resources/views/skinlib/master.tpl b/resources/views/skinlib/master.tpl index 21b48423..13c2f828 100644 --- a/resources/views/skinlib/master.tpl +++ b/resources/views/skinlib/master.tpl @@ -48,6 +48,8 @@
@endif
@@ -9,7 +9,7 @@
@if ($tid_alex == '0')
@endif
@@ -17,7 +17,7 @@
@if ($tid_cape == '0')
@endif