public function handleUpload(Request $request)
{
$this->checkUpload($request);
$t = new Texture();
$t->name = $request->input('name');
$t->type = $request->input('type');
$t->likes = 1;
$t->hash = Utils::upload($_FILES['file']);
$t->size = ceil($_FILES['file']['size'] / 1024);
$t->public = $request->input('public') == 'true' ? "1" : "0";
$t->uploader = $this->user->uid;
$t->upload_at = Utils::getTimeFormatted();
$cost = $t->size * ($t->public == "1" ? Option::get('score_per_storage') : Option::get('private_score_per_storage'));
if ($this->user->getScore() < $cost) {
return json(trans('skinlib.upload.lack-score'), 7);
}
$results = Texture::where('hash', $t->hash)->get();
if (!$results->isEmpty()) {
foreach ($results as $result) {
// if the texture already uploaded was setted to private,
// then allow to re-upload it.
if ($result->type == $t->type && $result->public == "1") {
return json(trans('skinlib.upload.repeated'), 0, ['tid' => $result->tid]);
}
}
}
$t->save();
$this->user->setScore($cost, 'minus');
if ($this->user->getCloset()->add($t->tid, $t->name)) {
return json(trans('skinlib.upload.success', ['name' => $request->input('name')]), 0, ['tid' => $t->tid]);
}
}