MOON
Server: Apache
System: Linux server1.studioinfinity.com.br 2.6.32-954.3.5.lve1.4.90.el6.x86_64 #1 SMP Tue Feb 21 12:26:30 UTC 2023 x86_64
User: artinside (517)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //home/artinside/sites.artinside.com.br/iande/source/App/Admin/Cases.php
<?php

namespace Source\App\Admin;
use Source\Models\Brand;
use Source\Models\Gallery;
use Source\Models\IandeCase;
use Source\Models\Service;
use Source\Support\Pager;
use Source\Support\Thumb;
use Source\Support\Upload;

/**
 * Class Services
 * @package Source\App\Admin
 */
class Cases extends Admin
{

    /**
     * Services constructor.
     */
    public function __construct($router)
    {
        parent::__construct();
        $this->view->addData("router", $router);
    }

    /**
     * @param array|null $data
     */
    public function home(?array $data): void
    {
        //search redirect
        if (!empty($data["s"])) {
            $s = str_search($data["s"]);
            echo json_encode(["redirect" => url("/admin/cases/home/{$s}/1")]);
            return;
        }

        $search = null;
        $case = (new IandeCase())->find();


        if (!empty($data["search"]) && str_search($data["search"]) != "all") {
            $search = str_search($data["search"]);
            $case = (new IandeCase())->find("MATCH(title) AGAINST(:s)", "s={$search}");
            if (!$case->count()) {
                $this->message->info("Sua pesquisa não retornou resultados")->flash();
                redirect("/admin/cases/home");
            }
        }

        $all = ($search ?? "all");
        $pager = new Pager(url("/admin/cases/home/{$all}/"));
        $pager->pager($case->count(), 12, (!empty($data["page"]) ? $data["page"] : 1));

        $head = $this->seo->render(
            CONF_SITE_NAME . " | Cases",
            CONF_SITE_DESC,
            url("/admin"),
            url("/admin/assets/images/image.jpg"),
            false
        );

        echo $this->view->render("widgets/cases/home", [
            "app" => "cases",
            "head" => $head,
            "cases" => $case->limit($pager->limit())->offset($pager->offset())->order("post_at DESC")->fetch(true),
            "paginator" => $pager->render(),
            "search" => $search
        ]);
    }

    /**
     * @param array|null $data
     * @throws \Exception
     */
    public function case(?array $data): void
    {


        //MCE Upload
        if (!empty($data["upload"]) && !empty($_FILES["image"])) {
            $files = $_FILES["image"];
            $upload = new Upload();
            $image = $upload->image($files, "services-" . time());

            if (!$image) {
                $json["message"] = $upload->message()->render();
                echo json_encode($json);
                return;
            }

            $json["mce_image"] = '<img style="width: 100%;" src="' . url("/storage/{$image}") . '" alt="{title}" title="{title}">';
            echo json_encode($json);
            return;
        }

        //create
        if (!empty($data["action"]) && $data["action"] == "create") {
            $content1 = $data["content1"];
            $content2 = $data["content2"];
            $content3 = $data["content3"];
            $content4 = $data["content4"];
            $data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);

            $caseCreate = new IandeCase();

            $gLink = gallery_id();

            $caseCreate->title = $data["title"];
            $caseCreate->uri = str_slug($caseCreate->title);
            $caseCreate->subtitle = $data["subtitle"];
            $caseCreate->gallery_link = $gLink;
            $caseCreate->content1 = str_replace(["{title}"], [$caseCreate->title], $content1);
            $caseCreate->content2 = str_replace(["{title}"], [$caseCreate->title], $content2);
            $caseCreate->content3 = str_replace(["{title}"], [$caseCreate->title], $content3);
            $caseCreate->content4 = str_replace(["{title}"], [$caseCreate->title], $content4);
            $caseCreate->post_at = date_fmt_back($data["post_at"]);
            $caseCreate->brand_id = $data["brand_id"];
            $caseCreate->status = $data["status"];

            //upload cover
            if (!empty($_FILES["cover"])) {
                $files = $_FILES["cover"];
                $upload = new Upload();
                $image = $upload->image($files, $caseCreate->title);

                if (!$image) {
                    $json["message"] = $upload->message()->render();
                    echo json_encode($json);
                    return;
                }
                $caseCreate->cover = $image;
            }



            if (!$caseCreate->save()) {
                $json["message"] = $caseCreate->message()->render();
                echo json_encode($json);
                return;
            }

            $this->message->success("Case publicado com sucesso...")->flash();
            $json["redirect"] = url("/admin/cases/case/{$caseCreate->id}");

            echo json_encode($json);
            return;
        }

        //update
        if (!empty($data["action"]) && $data["action"] == "update") {
            $content1 = $data["content1"];
            $content2 = $data["content2"];
            $content3 = $data["content3"];
            $content4 = $data["content4"];
            $data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
            $caseEdit = (new IandeCase())->findById($data["case_id"]);

            if (!$caseEdit) {
                $this->message->error("Você tentou atualizar um Case que não existe ou foi removido")->flash();
                echo json_encode(["redirect" => url("/admin/cases/home")]);
                return;
            }

            $caseEdit->title = $data["title"];
            $caseEdit->uri = str_slug($caseEdit->title);
            $caseEdit->subtitle = $data["subtitle"];
            $caseEdit->content1 = str_replace(["{title}"], [$caseEdit->title], $content1);
            $caseEdit->content2 = str_replace(["{title}"], [$caseEdit->title], $content2);
            $caseEdit->content3 = str_replace(["{title}"], [$caseEdit->title], $content3);
            $caseEdit->content4 = str_replace(["{title}"], [$caseEdit->title], $content4);
            $caseEdit->post_at = date_fmt_back($data["post_at"]);
            $caseEdit->brand_id = $data["brand_id"];
            $caseEdit->status = $data["status"];

            //upload cover
            if (!empty($_FILES["cover"])) {
                if ($caseEdit->cover && file_exists(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$caseEdit->cover}")) {
                    unlink(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$caseEdit->cover}");
                    (new Thumb())->flush($caseEdit->cover);
                }

                $files = $_FILES["cover"];
                $upload = new Upload();
                $image = $upload->image($files, $caseEdit->title);

                if (!$image) {
                    $json["message"] = $upload->message()->render();
                    echo json_encode($json);
                    return;
                }
                $caseEdit->cover = $image;
            }

            if (!$caseEdit->save()) {
                $json["message"] = $caseEdit->message()->render();
                echo json_encode($json);
                return;
            }
            $this->message->success("Case atualizado com sucesso...")->flash();
            echo json_encode(["redirect" => url("/admin/cases/home")]);
            return;
        }

        //delete
        if (!empty($data["action"]) && $data["action"] == "delete") {
            $data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
            $caseDelete = (new IandeCase())->findById($data["case_id"]);

            if (!$caseDelete) {
                $this->message->error("Você tentou excluir um Case que não existe ou já foi removido")->flash();
                echo json_encode(["reload" => true]);
                return;
            }


            $caseDelete->destroy();
            $this->message->success("O Case foi excluído com sucesso...")->flash();

            echo json_encode(["reload" => true]);
            return;
        }
        $caseId = "";
        $caseEdit = null;
        if (!empty($data["case_id"])) {
            $caseId = filter_var($data["case_id"], FILTER_VALIDATE_INT);
            $caseEdit = (new IandeCase())->findById($caseId);

        }

        $head = $this->seo->render(
            CONF_SITE_NAME . " | " . ($caseEdit->title ?? "Novo Artigo"),
            CONF_SITE_DESC,
            url("/admin"),
            url("/admin/assets/images/image.jpg"),
            false
        );

        echo $this->view->render("widgets/cases/case", [
            "app" => "cases",
            "head" => $head,
            "cases" => $caseEdit,
            "brands" => (new Brand())->find()->fetch(true),
            "gallery" => (new Gallery())->find("gallery_link IN (SELECT gallery_link FROM cases WHERE id = :id)", "id={$caseId}")->fetch(true),
        ]);
    }

}