116 lines
3.3 KiB
PHP
116 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace app\modules\module_shop\controllers;
|
|
|
|
use app\modules\module_shop\models\ModuleShop;
|
|
use JetBrains\PhpStorm\NoReturn;
|
|
use kernel\helpers\Debug;
|
|
use kernel\Request;
|
|
use kernel\RestController;
|
|
|
|
class ModuleShopRestController extends RestController
|
|
{
|
|
|
|
public function __construct()
|
|
{
|
|
$this->model = new ModuleShop();
|
|
}
|
|
|
|
#[NoReturn] public function actionIndex(): void
|
|
{
|
|
$request = new Request();
|
|
$page = $request->get('page') ?? 1;
|
|
$perPage = $request->get('per_page') ?? 10;
|
|
$query = $this->model->query();
|
|
|
|
$query->orderBy('created_at', 'DESC');
|
|
|
|
if ($page > 1) {
|
|
$query->skip(($page - 1) * $perPage)->take($perPage);
|
|
} else {
|
|
$query->take($perPage);
|
|
}
|
|
|
|
$expand = $this->expand();
|
|
$expandParams = explode( ",", $request->get('expand') ?? "");
|
|
$finalExpand = array_intersect($expandParams, $expand);
|
|
if ($finalExpand) {
|
|
$res = $query->get()->load($finalExpand)->toArray();
|
|
} else {
|
|
$res = $query->get()->toArray();
|
|
}
|
|
|
|
$this->renderApi($res);
|
|
}
|
|
|
|
#[NoReturn] public function actionIndexGroupBySlug(): void
|
|
{
|
|
$request = new Request();
|
|
$page = $request->get('page') ?? 1;
|
|
$perPage = $request->get('per_page') ?? 10;
|
|
$query = $this->model->query();
|
|
|
|
$query->select('ms1.*')
|
|
->from('module_shop as ms1')
|
|
->leftJoin('module_shop as ms2', function ($join) {
|
|
$join->on('ms1.slug', '=', 'ms2.slug')
|
|
->on('ms1.id', '<', 'ms2.id');
|
|
})
|
|
->where('ms2.slug', '=', null);
|
|
|
|
if ($page > 1) {
|
|
$query->skip(($page - 1) * $perPage)->take($perPage);
|
|
} else {
|
|
$query->take($perPage);
|
|
}
|
|
|
|
$expand = $this->expand();
|
|
$expandParams = explode( ",", $request->get('expand') ?? "");
|
|
$finalExpand = array_intersect($expandParams, $expand);
|
|
if ($finalExpand) {
|
|
$res = $query->get()->load($finalExpand)->toArray();
|
|
} else {
|
|
$res = $query->get()->toArray();
|
|
}
|
|
|
|
$this->renderApi($res);
|
|
}
|
|
|
|
#[NoReturn] public function actionView($id): void
|
|
{
|
|
$expand = $this->expand();
|
|
$request = new Request();
|
|
$expandParams = explode( ",", $request->get('expand') ?? "");
|
|
$model = $this->model->where("id", $id)->first();
|
|
$model->views++;
|
|
|
|
$finalExpand = array_intersect($expandParams, $expand);
|
|
if ($finalExpand){
|
|
$model->load($finalExpand);
|
|
}
|
|
$res = [];
|
|
if ($model){
|
|
$res = $model->toArray();
|
|
}
|
|
|
|
$model->save();
|
|
$this->renderApi($res);
|
|
}
|
|
|
|
public function actionInstall(int $id): void
|
|
{
|
|
$model = $this->model->where("id", $id)->first();
|
|
|
|
header('Content-type: application/zip');
|
|
header('Content-Disposition: attachment; filename="' . $model->slug . '.igm"');
|
|
header('Content-Length: ' . filesize(ROOT_DIR . $model->path_to_archive));
|
|
|
|
// Debug::dd(filesize(ROOT_DIR . $model->path_to_archive));
|
|
readfile(ROOT_DIR . $model->path_to_archive);
|
|
|
|
|
|
$model->installations++;
|
|
$model->save();
|
|
}
|
|
|
|
} |