private function processElement($skin, $file) { $processedElements = array(); $oldanimationRegex = "/sliderb\\d|pippidonclear\\d|pippidonfail\\d|pippidonidle\\d|pippidonkiai\\d/"; $rules = array('file' => 'skinmimes'); $manualMove = false; if ($file->getSize() < 10 && in_array($file->getClientOriginalExtension(), array("mp3", "wav", "ogg"))) { $file = new UploadedFile(public_path() . "/blank.wav", $file->getClientOriginalName()); $manualMove = true; } if (!in_array($file->getMimeType(), array("application/x-font-ttf", "text/plain"))) { $validation = Validator::make(array("file" => $file), $rules); if ($validation->fails()) { return "error"; } } //processing of skin metadata $elementName = strtolower($file->getClientOriginalName()); $elementExt = strtolower($file->getClientOriginalExtension()); $filename = array("fullname" => $elementName, "filename" => rtrim(basename($elementName, $elementExt), "."), "fullnameUntouched" => $elementName, "extension" => $elementExt, "ishd" => strpos($elementName, "@2x"), "shouldScaleDown" => true, "hashdcounterpart" => false); $sizeDifference = 0; if ($filename['ishd']) { $filename['filename'] = substr($filename['filename'], 0, -3); $filename['fullname'] = $filename['filename'] . "." . $filename['extension']; } //pretty complex check if animatable element fits few ... things! $filename['issequence'] = (preg_match("/-\\d/", $filename['filename']) === 1 || preg_match("/\\d/", $filename['filename']) === 1 && preg_match($oldanimationRegex, $filename['filename']) === 1) && preg_match("/score-\\d|default-\\d|comboburst-\\d/", $filename['filename']) !== 1; // don't mark score digits as animatable elements - they are obviously not. if ($filename["issequence"] && !in_array($filename['extension'], array("mp3", "ogg", "wav"))) { preg_match("/\\d+\$/", $filename['filename'], $sequenceMatches); $filename['frame'] = $sequenceMatches[0]; $filename['filename'] = substr($filename['filename'], 0, -strlen((string) $filename['frame'])); } else { $filename['frame'] = -1; } $DBskinElements = SkinElement::where("filename", "=", $filename['filename'])->where("skin_id", "=", $skin->id)->get(); if (isset($DBskinElements)) { foreach ($DBskinElements as $DBskinElement) { if ($DBskinElement->ishd == 0 && $DBskinElement->useroverriden == 1) { $filename['shouldScaleDown'] = false; } if ($DBskinElement->ishd == 1) { $filename['hashdcountepart'] = true; } } } $elementGroup = Element::where('element_name', '=', $filename['filename'])->first(); if (in_array($filename['extension'], array("jpg", "jpeg", "png"))) { if ($filename["ishd"] && $filename['shouldScaleDown']) { $hdSkinElement = SkinElement::firstOrNew(array("skin_id" => $skin->id, "filename" => $filename['filename'], "extension" => $filename['extension'], "ishd" => 1, "sequence_frame" => $filename['frame'])); $hdSkinElement->group_id = isset($elementGroup) ? $elementGroup->group_id : -1; if ($hdSkinElement->exists) { $sizeDifference += $hdSkinElement->size; } $hdSkinElement->size = $file->getSize(); $file->move(public_path() . "/skins-content/" . $skin->id, $hdSkinElement->getFullname()); if ($filename['issequence']) { $hdSkinElement->issequence = 1; $hdSkinElement->sequence_frame = $filename['frame']; } $hdSkinElement->save(); $processedElements[] = $hdSkinElement; $sdSkinElement = SkinElement::firstOrNew(array("skin_id" => $skin->id, "filename" => $filename['filename'], "extension" => $filename['extension'], "ishd" => 0, "sequence_frame" => $filename['frame'])); $sdSkinElement->group_id = isset($elementGroup) ? $elementGroup->group_id : -1; $imageToResize = Image::make(public_path() . "/skins-content/" . $skin->id . "/" . $hdSkinElement->getFullname()); $imageToResize->resize(ceil(floatval($imageToResize->width() / 2)), ceil(floatval($imageToResize->height() / 2))); $imageToResize->save(public_path() . "/skins-content/" . $skin->id . "/" . $filename['fullname']); if ($sdSkinElement->exists) { $sizeDifference += $sdSkinElement->size; } $sdSkinElement->size = filesize(public_path() . "/skins-content/" . $skin->id . "/" . $filename['fullname']); if ($filename['issequence']) { $sdSkinElement->issequence = 1; $sdSkinElement->sequence_frame = $filename['frame']; } $sdSkinElement->save(); $processedElements[] = $sdSkinElement; } else { $skinElement = SkinElement::firstOrNew(array("skin_id" => $skin->id, "filename" => $filename['filename'], "extension" => $filename['extension'], "ishd" => $filename['ishd'] ? 1 : 0, "sequence_frame" => $filename['frame'])); $skinElement->group_id = isset($elementGroup) ? $elementGroup->group_id : -1; if ($skinElement->exists) { $sizeDifference += $skinElement->size; } $skinElement->size = $file->getSize(); if ($filename['issequence']) { $skinElement->issequence = 1; $skinElement->sequence_frame = $filename['frame']; } if (($skinElement->exists || !$filename['hashdcounterpart']) && $skinElement->ishd != 1) { $skinElement->useroverriden = 1; } $skinElement->save(); $processedElements[] = $skinElement; $file->move(public_path() . "/skins-content/" . $skin->id, $filename['fullnameUntouched']); } } else { $skinElement = SkinElement::firstOrNew(array("skin_id" => $skin->id, "filename" => $filename['filename'], "extension" => $filename['extension'], "ishd" => $filename['ishd'] ? 1 : 0)); $skinElement->element_id = isset($elementGroup) ? $elementGroup->group_id : -1; if ($skinElement->exists) { $sizeDifference += $skinElement->size; } $skinElement->size = $file->getSize(); $skinElement->save(); $processedElements[] = $skinElement; $pathToCopy = public_path() . "/skins-content/" . $skin->id; $manualMove ? copy(public_path() . "/blank.wav", $pathToCopy . "/" . $filename['fullnameUntouched']) : $file->move($pathToCopy, $filename['fullnameUntouched']); } $elementsSize = 0; foreach ($processedElements as $element) { $elementsSize += $element->size; } if ($sizeDifference != 0) { $diff = $sizeDifference - $elementsSize; $skin->size += $diff; } else { $skin->size += $elementsSize; } $skin->save(); return $processedElements; }