Skip to content
This repository was archived by the owner on Dec 6, 2019. It is now read-only.

Commit c743d9b

Browse files
Br3uxigames647
authored and
games647
committed
Add Skin Download and Player Sitemap (#6)
* Add Skin Download and Player Sitemap * Reformat Skin Image Download-Name * Remove unused Document Root and add public Paths
1 parent 135adc6 commit c743d9b

File tree

6 files changed

+197
-6
lines changed

6 files changed

+197
-6
lines changed

app/Console/Commands/SkinDownload.php

+24
Original file line numberDiff line numberDiff line change
@@ -88,5 +88,29 @@ function saveRendered($uuid, $url) {
8888
if (File::dirname($path) == public_path() . "/img/skin") {
8989
imagepng($skin, $path);
9090
}
91+
92+
$path = public_path() . "/img/skin/raw/$uuid.png";
93+
if (File::dirname($path) == public_path() . "/img/skin/raw") {
94+
95+
96+
$source_imagex = imagesx($rawSkin);
97+
$source_imagey = imagesy($rawSkin);
98+
99+
$dest = 200;
100+
$canvas = imagecreatetruecolor($dest, $dest);
101+
102+
imagealphablending($canvas, true);
103+
imagesavealpha($canvas, true);
104+
105+
$transparent = imagecolorallocatealpha($canvas, 255, 255, 255, 127);
106+
imagefill($canvas, 0, 0, $transparent);
107+
108+
109+
110+
imagecopyresampled($canvas, $rawSkin, 0, 0, 0, 0,
111+
$dest, $dest, $source_imagex, $source_imagey);
112+
113+
imagepng($canvas, $path);
114+
}
91115
}
92116
}

app/Http/Controllers/PlayerController.php

+69-5
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
namespace App\Http\Controllers;
44

55
use App\Player;
6+
use File;
67
use Illuminate\Http\Request;
78
use App\Http\Controllers\Controller;
9+
use Log;
810

911
class PlayerController extends Controller {
1012

@@ -19,19 +21,37 @@ public function addPlayer(Request $request) {
1921
'g-recaptcha-response' => 'required|recaptcha',
2022
);
2123

24+
2225
$name = $request->input("name");
2326

24-
$validator = validator()->make($request->input(), $rules);
27+
if (env('APP_DEBUG')) {
28+
$debugRules = array(
29+
'name' => array('required', 'regex:' . Player::VALID_USERNAME),
30+
//disable the captcha in order to hide the api keys and still be able to test the functionality of this
31+
//website
32+
// 'g-recaptcha-response' => 'required|recaptcha',
33+
);
34+
35+
$validator = validator()->make($request->input(), $debugRules);
36+
} else {
37+
$validator = validator()->make($request->input(), $rules);
38+
}
39+
2540
if ($validator->passes()) {
26-
logger("Adding player", ["name" => $name]);
2741

2842
$exists = Player::where("name", '=', $name)->exists();
2943
if ($exists) {
3044
return view("player.add")->with(["name" => $name])->withErrors(['Player already exists']);
3145
} else {
3246
\Artisan::call("app:uuid", ["playerName" => $name]);
33-
3447
logger()->info("Added player: " . $name . " : ");
48+
49+
50+
$uuid = Player::where("name", '=', $name)->value("uuid");
51+
logger()->info("Name: " . $name . " UUID: " . $uuid);
52+
\Artisan::call("app:skin", ["uuid" => $uuid]);
53+
54+
logger()->info("Skin Downloaded: Player:" . $name . " UUID: " . $uuid);
3555
return redirect()->action("PlayerController@getPlayerByUsername", [$name]);
3656
}
3757
} else {
@@ -47,8 +67,21 @@ public function getPlayerByUUID($uuid) {
4767
/* @var $player Player */
4868
$player = Player::where("uuid", '=', $uuid)->first();
4969

70+
// /home/breuxi/Minecraft-Database/public/
71+
72+
if (is_file(public_path("/img/skin/$player->uuid.png")) && is_file(public_path("/img/skin/raw/$player->uuid.png"))) {
73+
$skin_image_size = $this->getFileSize(public_path("/img/skin/$player->uuid.png"));
74+
$skin_raw_size = $this->getFileSize(public_path("/img/skin/raw/$player->uuid.png"));
75+
} else {
76+
$skin_image_size = null;
77+
$skin_raw_size = null;
78+
}
79+
80+
81+
$skin_sizes = array($skin_image_size, $skin_raw_size);
82+
5083
if ($player) {
51-
return view("player.player", ['player' => $player]);
84+
return view("player.player", ['player' => $player, 'skinsize' => $skin_sizes, 'root' => $_SERVER['DOCUMENT_ROOT']]);
5285
} else {
5386
return response()->view("player.notFound", ['uuid' => $uuid], 404);
5487
}
@@ -58,10 +91,41 @@ public function getPlayerByUsername($username) {
5891
/* @var $player Player */
5992
$player = Player::where("name", '=', $username)->first();
6093

94+
if (is_file(public_path("/img/skin/$player->uuid.png")) && is_file(public_path("/img/skin/raw/$player->uuid.png"))) {
95+
$skin_image_size = $this->getFileSize(public_path("/img/skin/$player->uuid.png"));
96+
$skin_raw_size = $this->getFileSize(public_path("/img/skin/raw/$player->uuid.png"));
97+
} else {
98+
$skin_image_size = null;
99+
$skin_raw_size = null;
100+
}
101+
102+
103+
$skin_sizes = array($skin_image_size, $skin_raw_size);
104+
105+
61106
if ($player) {
62-
return view("player.player", ['player' => $player]);
107+
return view("player.player", ['player' => $player, 'skinsize' => $skin_sizes]);
63108
} else {
64109
return response()->view("player.notFound", ['name' => $username], 404);
65110
}
66111
}
112+
113+
114+
public function getFileSize($skinURL) {
115+
$bytes = File::size($skinURL);
116+
117+
if ($bytes >= 1073741824) {
118+
return number_format($bytes / 1073741824, 2) . ' GB';
119+
} elseif ($bytes >= 1048576) {
120+
return number_format($bytes / 1048576, 2) . ' MB';
121+
} elseif ($bytes >= 1024) {
122+
return number_format($bytes / 1024, 2) . ' KB';
123+
} elseif ($bytes > 1) {
124+
return $bytes . ' Bytes';
125+
} elseif ($bytes == 1) {
126+
return '1 Byte';
127+
} else {
128+
return '0 Bytes';
129+
}
130+
}
67131
}

app/Http/Controllers/SitemapController.php

+63
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22

33
namespace App\Http\Controllers;
44

5+
use App\Player;
56
use \App\Server;
67

78
class SitemapController extends Controller {
89

10+
// Server
11+
912
public function getServerPages() {
1013
/* @var $sitemap Roumen\Sitemap\Sitemap */
1114
$sitemap = app()->make("sitemap");
@@ -62,4 +65,64 @@ public function getServerIndex() {
6265

6366
return $sitemap->render();
6467
}
68+
69+
70+
public function getPlayerPages() {
71+
/* @var $sitemap Roumen\Sitemap\Sitemap */
72+
$sitemap = app()->make("sitemap");
73+
74+
$sitemap->setCache('sitemap.player_pages');
75+
if (!$sitemap->isCached()) {
76+
$players = Player::whereNotNull('uuid')->orderBy('updated_at', 'desc')->get();
77+
78+
/* @var $server \App\Server */
79+
foreach ($players as $player) {
80+
$uuid = $player->uuid;
81+
82+
$loc = url("/player", $uuid);
83+
$lastmod = $player->updated_at;
84+
$freq = 'daily';
85+
86+
$images = array();
87+
if (file_exists(public_path() . "/img/skin/$uuid.png")) {
88+
$images[] = array(
89+
'url' => url("/img/skin", "$uuid.png"),
90+
'title' => $player->name . " 's skin"
91+
);
92+
}
93+
94+
$sitemap->add($loc, $lastmod, 0.8, $freq, $images);
95+
}
96+
}
97+
98+
return $sitemap->render();
99+
}
100+
101+
public function getPlayerIndex() {
102+
/* @var $sitemap \Roumen\Sitemap\Sitemap */
103+
$sitemap = app()->make("sitemap");
104+
105+
$sitemap->setCache('sitemap.player_index');
106+
if (!$sitemap->isCached()) {
107+
/* @var $lastUpdatedServer Server */
108+
$lastUpdatedServer = Player::whereNotNull('uuid')->orderBy('updated_at', 'desc')
109+
->firstOrFail();
110+
111+
$sitemap->add(url('/server'), $lastUpdatedServer->updated_at, '1.0', 'daily');
112+
113+
//add sites
114+
$serverCount = Server::whereOnline(true)->whereNotNull('motd')->count();
115+
//5 = per page
116+
for ($page = 1; $page <= ceil($serverCount / 5); $page++) {
117+
$sitemap->add(url('/server') . '/?page=' . $page, $lastUpdatedServer->updated_at, '0.6', 'weekly');
118+
}
119+
120+
$sitemap->add(url('/player/add'), null, '0.5', 'weekly');
121+
$sitemap->add(url('/player/search'), null, '0.5', 'weekly');
122+
$sitemap->add(secure_url('/server/add'), null, '0.5', 'weekly');
123+
$sitemap->add(secure_url('/search'), null, '0.5', 'weekly');
124+
}
125+
126+
return $sitemap->render();
127+
}
65128
}

app/Http/routes.php

+8
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,15 @@
6969
Route::get('/stats', 'ApiController@stats');
7070
});
7171

72+
// Sitemap
73+
74+
// Server
7275
Route::get('/sitemap_server_pages.xml', 'SitemapController@getServerPages');
7376
Route::get('/sitemap_server_index.xml', 'SitemapController@getServerIndex');
7477

78+
// Player
79+
80+
Route::get('/sitemap_player_pages.xml', 'SitemapController@getPlayerPages');
81+
Route::get('/sitemap_player_index.xml', 'SitemapController@getPlayerIndex');
82+
7583
Route::get('/.git', 'BaseController@git');

resources/views/player/notFound.blade.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@
1010
<h1>Player not found</h1>
1111

1212
<p>Do you want to submit him?</p>
13-
<a href="/player/add/{{ $uuid }}" class="btn btn-default" rel="noindex">Submit</a>
13+
@if(!empty($uuid))
14+
<a href="/player/add/{{ $uuid }}" class="btn btn-default" rel="noindex">Submit</a>
15+
@else
16+
<a href="/player/add/{{ $name }}" class="btn btn-default" rel="noindex">Submit</a>
17+
@endif
1418
</div>
1519
</div>
1620

resources/views/player/player.blade.php

+28
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,34 @@
7272
@endif
7373
</td>
7474
</tr>
75+
<tr>
76+
<th>Skin: </th>
77+
<td>
78+
@if($skinsize[0] != null && $skinsize[1] != null)
79+
<table style="width: 100%;">
80+
<tr>
81+
<td style="width: 120px; padding-left: 10px; padding-bottom: 10px;">
82+
<img style="margin: 0 0 0 20px; padding: 0;" src="{{ url("/img/skin/$player->uuid.png") }}">
83+
</td>
84+
<td style="padding-left: 110px;">
85+
<img style="width: 200px; margin: 0px 90px 0px 0px;" src="{{ url("/img/skin/raw/$player->uuid.png") }}">
86+
</td>
87+
</tr>
88+
89+
<tr>
90+
<td><a href="{{ public_path("/img/skin/$player->uuid.png") }}" download="{{ $player->name }}-Image.png" class="btn btn-default">Download Skin Image</a></td>
91+
<td><a href="{{ public_path("/img/skin/raw/$player->uuid.png") }}" download="{{ $player->name }}.png" style="width: 200px;" class="btn btn-default">Download Raw Skin</a></td>
92+
</tr>
93+
<tr>
94+
<td><p>{{ $skinsize[0] }}</p></td>
95+
<td><p>{{ $skinsize[1] }}</p></td>
96+
</tr>
97+
@else
98+
<p>This Player is using the Standard Skin</p>
99+
@endif
100+
</table>
101+
</td>
102+
</tr>
75103
</table>
76104
</div>
77105
</div>

0 commit comments

Comments
 (0)