secure_img; header('Expires: 0'); if (\Yii::$app->getRefresh()) { header("Cache-Control: no-cache, must-revalidate"); } else { header('Cache-Control: must-revalidate, max-age=31536000'); } header('Pragma: public'); header('Content-Length: ' . filesize($file)); header("Content-Type: image/jpeg"); readfile($file); exit; } public function actionRemoveImg() { $hash = $_POST['hash']; $decode = JWT::decode($hash, JWT::SECRET_KEY); $file = $_SERVER['DOCUMENT_ROOT'] . $decode->secure_img; if (file_exists($file)) { unlink($file); return $this->asJson(['success' => true]); } } public function actionUploadFileCms() { if ($_SERVER['REQUEST_METHOD'] == 'POST') { $media_key = $_POST['media_key']; /** @var \app\models\_Base | null $model_class */ $model_class = $_POST['model_class'] ?? null; $id = $_POST['id'] ?? null; $object_key = $_POST['object_key']; $order_index = $_POST['order_index']; $dir_raw = $_SERVER['DOCUMENT_ROOT'] . '/_files/raw'; $dir_media = $_SERVER['DOCUMENT_ROOT'] . '/_files/raw/' . $media_key; $dir_object = $_SERVER['DOCUMENT_ROOT'] . '/_files/raw/' . $media_key . '/' . $object_key; $has_article = $_POST['has_article'] ?? null; if (!file_exists($dir_raw)) mkdir($dir_raw, 0777); if (!file_exists($dir_media)) mkdir($dir_media, 0777); if (!file_exists($dir_object)) mkdir($dir_object, 0777); /* foreach ($_FILES as $id => $fileObject) { if (!empty($fileObject)) { $extension = pathinfo($fileObject['name'], PATHINFO_EXTENSION); $fileCms = new FileCms(); $fileCms->media_key = $media_key; $fileCms->object_key = $object_key; $fileCms->file_name = $id . '_' . time() . '.' . $extension; $fileCms->file_extension = $extension; $fileCms->file_size = $fileObject['size']; $fileCms->file_type = $fileObject['type']; $fileCms->order_index = $order_index; $fileCms->date_time = date('Y-m-d H:i:s'); if ($has_article) $fileCms->has_article = 1; if ($fileObject['type'] == 'image/jpeg' || $fileObject['type'] == 'image/jpg' || $fileObject['type'] == 'image/png') { $image = new Image(); $image->crateThumb($media_key, $object_key, $fileCms->file_name, $fileCms->file_type, $fileObject['tmp_name']); } move_uploaded_file($fileObject['tmp_name'], $dir_object . '/' . $fileCms->file_name); $fileCms->save(); $fileData = $fileCms->getImageData(); return $this->asJson([ 'id' => $fileCms->id, 'fileType' => $fileData['type'], 'srcRaw' => $fileData['src_raw'], 'fileName' => $fileCms->file_name, 'mediaKey' => $media_key ]); } } */ foreach ($_FILES as $id => $fileObject) { if (!empty($fileObject)) { $extension = pathinfo($fileObject['name'], PATHINFO_EXTENSION); $fileCms = new FileCms(); $fileCms->media_key = $media_key; $fileCms->object_key = $object_key; $fileCms->file_name = $id . '_' . time() . '.' . $extension; $fileCms->file_extension = $extension; $fileCms->file_size = $fileObject['size']; $fileCms->file_type = $fileObject['type']; $fileCms->order_index = $order_index; $fileCms->date_time = date('Y-m-d H:i:s'); if ($has_article) $fileCms->has_article = 1; // Resize if image if (in_array($fileObject['type'], ['image/jpeg', 'image/jpg', 'image/png'])) { // Load original image switch ($fileObject['type']) { case 'image/jpeg': case 'image/jpg': $srcImage = imagecreatefromjpeg($fileObject['tmp_name']); break; case 'image/png': $srcImage = imagecreatefrompng($fileObject['tmp_name']); break; } if ($srcImage) { $maxWidth = 1080; $maxHeight = 650; $width = imagesx($srcImage); $height = imagesy($srcImage); // Calculate proportional size $ratio = min($maxWidth / $width, $maxHeight / $height); $newWidth = (int)($width * $ratio); $newHeight = (int)($height * $ratio); // Create new resized image $resizedImage = imagecreatetruecolor($newWidth, $newHeight); // Preserve transparency for PNG if ($fileObject['type'] === 'image/png') { imagealphablending($resizedImage, false); imagesavealpha($resizedImage, true); } // Resample imagecopyresampled($resizedImage, $srcImage, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); // Save resized image switch ($fileObject['type']) { case 'image/jpeg': case 'image/jpg': imagejpeg($resizedImage, $dir_object . '/' . $fileCms->file_name, 90); break; case 'image/png': imagepng($resizedImage, $dir_object . '/' . $fileCms->file_name); break; } imagedestroy($srcImage); imagedestroy($resizedImage); } // Optional: generate thumbnail $image = new Image(); $image->crateThumb($media_key, $object_key, $fileCms->file_name, $fileCms->file_type, $dir_object . '/' . $fileCms->file_name); } else { // Non-images: move file directly move_uploaded_file($fileObject['tmp_name'], $dir_object . '/' . $fileCms->file_name); } $fileCms->save(); $fileData = $fileCms->getImageData(); return $this->asJson([ 'id' => $fileCms->id, 'fileType' => $fileData['type'], 'srcRaw' => $fileData['src_raw'], 'fileName' => $fileCms->file_name, 'mediaKey' => $media_key ]); } } exit; } } public function actionDeleteFileCms() { if ($_SERVER['REQUEST_METHOD'] == 'POST') { $del_ids = json_decode($_POST['del_ids']); $files = FileCms::find()->where(['IN', 'id', $del_ids])->all(); /** @var FileCms $file */ foreach ($files as $file) { $resolutions = $file->resolutionArray; $resolutions[] = 'thumb'; $fileToDelete = $_SERVER['DOCUMENT_ROOT'] . "/_files/raw/$file->media_key/$file->object_key/$file->file_name"; if (file_exists($fileToDelete)) { foreach ($resolutions as $rez) { $readyToDelete = $_SERVER['DOCUMENT_ROOT'] . "/_files/ready/$file->media_key/$file->object_key/$rez/$file->file_name"; if (file_exists($readyToDelete)) { unlink($readyToDelete); } } unlink($fileToDelete); $file->delete(); } } if (sizeof($del_ids) > 1) { return $this->asJson(['success' => sizeof($del_ids) . ' файла бяха премахнати успешно']); } else { return $this->asJson(['success' => 'Файлът беше успешно премахнат']); } } } public function actionUpdateFileIndexes() { if ($_SERVER['REQUEST_METHOD'] == 'POST') { $indexes = json_decode($_POST['indexes']); foreach ($indexes as $index) { $file = FileCms::findOne($index->id); $file->order_index = $index->order_index; $file->save(); } echo json_encode(['success' => true]); } exit; } public function actionUploadCrop() { if ($_SERVER['REQUEST_METHOD'] == 'POST') { $media_key = $_POST['media_key']; $object_key = $_POST['object_key']; $file_name = $_POST['file_name']; $resolutions = json_decode($_POST['resolutions']); $image = new Image(); foreach ($_FILES as $crop => $file) { $image->createCrop($crop, $file, $media_key, $object_key); } $fileCms = FileCms::find()->where([ 'media_key' => $media_key, 'object_key' => $object_key, 'file_name' => $file_name ])->one(); if ($fileCms) { $resolutionArray = $fileCms->resolutionArray; foreach ($resolutions as $resolution) { if (!in_array($resolution, $resolutionArray)) { $resolutionArray[] = $resolution; } } $fileCms->resolutions = json_encode($resolutionArray); $fileCms->save(); $files = []; foreach ($resolutionArray as $r) { $files[$r] = "/_files/ready/$media_key/$object_key/$r/$file_name"; } echo json_encode([ 'resolutions' => $resolutionArray, 'files' => $files ]); exit; } } exit; } public function actionDeleteCrop() { if ($_SERVER['REQUEST_METHOD'] == 'POST') { $del_id = $_POST['del_id']; $rez = $_POST['rez']; $file = FileCms::findOne($del_id); if ($file) { $filePath = $_SERVER['DOCUMENT_ROOT'] . "/_files/ready/$file->media_key/$file->object_key/$rez/$file->file_name"; if (file_exists($filePath)) unlink($filePath); $file->deleteResolution($rez); $file->save(); $files = []; foreach ($file->resolutionArray as $r) { $files[$r] = "/_files/ready/$file->media_key/$file->object_key/$r/$file->file_name"; } echo json_encode([ 'resolutions' => $file->resolutionArray, 'files' => $files ]); } } exit; } public function actionClearTemporary() { if (!Auth::userAdminGlobal()) exit; $temporary = FileCms::find() ->where(['and', ['IS', 'has_article', NULL], ['<', 'date_time', date('Y-m-d H:i:s', (time() - (60 * 60 * 2)))] ]); $rows = $temporary->all(); $media_keys = $temporary->select('media_key')->distinct()->all(); $deleted = 0; foreach ($media_keys as $file) { $dirRaw = $_SERVER['DOCUMENT_ROOT'] . '/_files/raw/' . $file->media_key; $dirReady = $_SERVER['DOCUMENT_ROOT'] . '/_files/ready/' . $file->media_key; if (file_exists($dirRaw)) system("rm -rf " . escapeshellarg($dirRaw)); if (file_exists($dirReady)) system("rm -rf " . escapeshellarg($dirReady)); } foreach ($rows as $row) { $row->delete(); $deleted++; } echo $deleted . ' temporary file(s) cleaned'; exit; } // DOCS public function actionDocumentAdd() { if (!Auth::userAdminGlobal() && !Auth::userPartner()) exit; $p = json_decode(\Yii::$app->request->getRawBody()); if (!empty($p->modelId) && !empty($p->modelClass) && !empty($p->documentKey)) { /** @var \app\models\_Base $model */ $model = $p->modelClass::findOne($p->modelId); if ($model) { if ($model->document_key != $p->documentKey) { $model->document_key = $p->documentKey; $model->save(); } } $document = new DocsCms(); $document->document_key = $p->documentKey; $document->save(); echo json_encode(['document_id' => $document->id]); exit; } else { echo json_encode(['error' => true, 'message' => 'Missing parameter']); } exit; } public function actionDocumentUpdate() { if (!Auth::userAdminGlobal() && !Auth::userPartner()) exit; $p = json_decode(\Yii::$app->request->getRawBody()); if (!empty($p->id) && !empty($p->key)) { $document = DocsCms::findOne($p->id); $document->{$p->key} = $p->value ?? null; $document->save(); echo json_encode(['document_id' => $document->id]); exit; } else { echo json_encode(['error' => true, 'message' => 'Missing parameter']); } exit; } public function actionDocumentFileDelete() { if (!Auth::userAdminGlobal() && !Auth::userPartner()) exit; $p = json_decode(\Yii::$app->request->getRawBody()); $model = DocsCms::findOne($p->id); if($model && $model->{$p->deleteField}) { $file = $_SERVER['DOCUMENT_ROOT']. $model->{$p->deleteField}; if(file_exists($file)) { unlink($file); } $model->{$p->deleteField} = null; $model->save(); echo json_encode(['success' => true, 'file' => $file]); } exit; } public function actionDocumentFileUpload() { if (!Auth::userAdminGlobal() && !Auth::userPartner()) exit; if (!empty($_FILES['file'])) { $file = $_FILES['file']; $id = $_POST['id']; $update = $_POST['update']; $model = DocsCms::findOne($id); $extension = pathinfo($file['name'], PATHINFO_EXTENSION);; if ($model && $model->document_key) { $docs = $_SERVER['DOCUMENT_ROOT'] . '/_files/docs'; $document_key = $docs . '/' . $model->document_key; $dirId = $document_key . '/' . $model->id; $dir = $dirId . '/' . $update; if (!file_exists($docs)) mkdir($docs, 0777); if (!file_exists($document_key)) mkdir($document_key, 0777); if (!file_exists($dirId)) mkdir($dirId, 0777); if (!file_exists($dir)) mkdir($dir, 0777); $filePath = $dir . '/' . time() . '_' . $file['name']; move_uploaded_file($file['tmp_name'], $filePath); $model->{$update} = str_replace($_SERVER['DOCUMENT_ROOT'], '', $filePath); if($update == 'file_name') { $model->extension = $extension; } if($update == 'file_name_en') { $model->extension_en = $extension; } $model->save(); echo json_encode(['id' => $model->id, 'file_path' => $model->{$update}, 'update' => $update, 'extension' => $extension]); exit; } } exit; } public function actionDocumentDelete() { if (!Auth::userAdminGlobal() && !Auth::userPartner()) exit; $p = json_decode(\Yii::$app->request->getRawBody()); $model = DocsCms::findOne($p->id); if($model) { $dir = $_SERVER['DOCUMENT_ROOT'] . '/_files/docs/' . $model->document_key . '/' . $model->id; if(file_exists($dir)) { system("rm -rf " . escapeshellarg($dir)); } $model->delete(); echo json_encode(['success']); } exit; } }