From 1d09b41dd6b009bc50b4ba2af9eab89b27348f77 Mon Sep 17 00:00:00 2001 From: gplane Date: Thu, 20 Apr 2017 23:01:16 +0800 Subject: [PATCH 01/12] Fix PHP version detection of composer --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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", From 7dcc1eb87e2a7bab42f5ccdd73fee17c6afad64e Mon Sep 17 00:00:00 2001 From: gplane Date: Thu, 20 Apr 2017 23:16:38 +0800 Subject: [PATCH 02/12] Fix preview link of admin panel --- .../views/vendor/admin-operations/players/previews.tpl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/views/vendor/admin-operations/players/previews.tpl b/resources/views/vendor/admin-operations/players/previews.tpl index 20f132ce..e975ef46 100644 --- a/resources/views/vendor/admin-operations/players/previews.tpl +++ b/resources/views/vendor/admin-operations/players/previews.tpl @@ -1,7 +1,7 @@ @if ($tid_steve == '0') @else - + @endif @@ -9,7 +9,7 @@ @if ($tid_alex == '0') @else - + @endif @@ -17,7 +17,7 @@ @if ($tid_cape == '0') @else - + @endif From e3e70a59e6582b7124ab6264c4e8004111b228d6 Mon Sep 17 00:00:00 2001 From: gplane Date: Thu, 20 Apr 2017 23:46:06 +0800 Subject: [PATCH 03/12] Update texture name when choosing file again --- resources/assets/src/scripts/skinlib.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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')); From 3e276250643525d307ce21959504f67c364e8268 Mon Sep 17 00:00:00 2001 From: gplane Date: Fri, 21 Apr 2017 00:05:45 +0800 Subject: [PATCH 04/12] Update storage display when checking in --- app/Http/Controllers/UserController.php | 1 + resources/assets/src/scripts/user.js | 8 ++++++++ resources/views/user/index.tpl | 16 +++++++--------- 3 files changed, 16 insertions(+), 9 deletions(-) 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/resources/assets/src/scripts/user.js b/resources/assets/src/scripts/user.js index b14864af..d775288e 100644 --- a/resources/assets/src/scripts/user.js +++ b/resources/assets/src/scripts/user.js @@ -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/views/user/index.tpl b/resources/views/user/index.tpl index e7dac682..22d3bdb4 100644 --- a/resources/views/user/index.tpl +++ b/resources/views/user/index.tpl @@ -44,18 +44,16 @@ $total = $statistics['storage']['total']; ?> - @if ($used > 1024) - - {{ round($used / 1024, 1) }}/ {{ is_string($total) ? $total : round($total / 1024, 1) }} MB + + @if ($used > 1024) + {{ round($used / 1024, 1) }}/ {{ is_string($total) ? $total : round($total / 1024, 1) }} MB + @else + {{ $used }}/ {{ $total }} KB + @endif - @else - - {{ $used }}/ {{ $total }} KB - - @endif
-
+
From 6e5ed604cd109f4e0885b9a3acf8523da3659acd Mon Sep 17 00:00:00 2001 From: gplane Date: Fri, 21 Apr 2017 00:09:13 +0800 Subject: [PATCH 05/12] Bluring when updating score in admin panel --- resources/assets/src/scripts/admin.js | 1 + 1 file changed, 1 insertion(+) 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(); } }); From f2b51fbd2a51db7c7851923018b318b51dce7cd7 Mon Sep 17 00:00:00 2001 From: gplane Date: Fri, 21 Apr 2017 00:18:51 +0800 Subject: [PATCH 06/12] Generate preview on img clicked only --- resources/assets/src/scripts/user.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/assets/src/scripts/user.js b/resources/assets/src/scripts/user.js index d775288e..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", From 2c9ba2c27772c77748866279a03d95b90479aaf2 Mon Sep 17 00:00:00 2001 From: gplane Date: Fri, 21 Apr 2017 12:34:12 +0800 Subject: [PATCH 07/12] Fix i18n --- resources/lang/en/user.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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: | From ec9598ae166b543dfc9f8ef533fc7bd1480c369c Mon Sep 17 00:00:00 2001 From: gplane Date: Fri, 21 Apr 2017 13:02:03 +0800 Subject: [PATCH 08/12] Update default copyright text --- config/options.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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', From 2986e6babd73e591526f8645c753c3058cc7966a Mon Sep 17 00:00:00 2001 From: gplane Date: Fri, 21 Apr 2017 16:48:25 +0800 Subject: [PATCH 09/12] Fix showing private textures for owner --- app/Http/Controllers/SkinlibController.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/SkinlibController.php b/app/Http/Controllers/SkinlibController.php index 8991dcff..78a1e6ef 100644 --- a/app/Http/Controllers/SkinlibController.php +++ b/app/Http/Controllers/SkinlibController.php @@ -30,7 +30,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 +51,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'); } From 8b002ab157d695f3068ec8b7b1f528f669d17016 Mon Sep 17 00:00:00 2001 From: gplane Date: Fri, 21 Apr 2017 16:55:34 +0800 Subject: [PATCH 10/12] Add menu item of cleaning filter --- resources/lang/en/skinlib.yml | 1 + resources/lang/zh_CN/skinlib.yml | 1 + resources/views/skinlib/master.tpl | 2 ++ 3 files changed, 4 insertions(+) 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/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 @@
  • {{ trans('skinlib.general.my-upload') }}
  • @endif +
  • +
  • {{ trans('skinlib.filter.clean-filter') }}
  • From 98ff895d3bed8b9aad39a23c81967604b6461eb8 Mon Sep 17 00:00:00 2001 From: gplane Date: Fri, 21 Apr 2017 18:11:17 +0800 Subject: [PATCH 11/12] Fix setting existing texture to be private --- app/Http/Controllers/SkinlibController.php | 14 ++++++++++++++ app/Models/Closet.php | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/app/Http/Controllers/SkinlibController.php b/app/Http/Controllers/SkinlibController.php index 78a1e6ef..5553fb40 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; @@ -205,6 +207,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); @@ -212,6 +216,16 @@ 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 ($t->setPrivacy(!$t->public)) { return json([ 'errno' => 0, 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; + } + } From 2b0f8b20c14607307e2b3497bcfc5362175b67d0 Mon Sep 17 00:00:00 2001 From: gplane Date: Fri, 21 Apr 2017 18:44:11 +0800 Subject: [PATCH 12/12] Fix score calculation --- app/Http/Controllers/ClosetController.php | 2 +- app/Http/Controllers/SkinlibController.php | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) 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 5553fb40..7e7a4bba 100644 --- a/app/Http/Controllers/SkinlibController.php +++ b/app/Http/Controllers/SkinlibController.php @@ -197,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()) @@ -223,9 +226,17 @@ class SkinlibController extends Controller 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,