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/mainpro/source/App/Admin/Courses.php
<?php

namespace Source\App\Admin;

use Source\Models\Category;
use Source\Models\Course;
use Source\Models\CourseDocuments;
use Source\Models\Documents;
use Source\Models\Service;
use Source\Support\Pager;
use Source\Support\Thumb;
use Source\Support\Upload;

/**
 * Class Courses
 * @package Source\App\Admin
 */
class Courses 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/courses/home/{$s}/1")]);
            return;
        }

        $search = null;
        $courses = (new Course())->find();



        if (!empty($data["search"]) && str_search($data["search"]) != "all") {
            $search = str_search($data["search"]);
            $courses = (new Course())->find("title LIKE '%{$search}%'");
            if (!$courses->count()) {
                $this->message->info("Sua pesquisa não retornou resultados")->flash();
                redirect("/admin/courses/home");
            }
        }

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

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

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

    /**
     * @param array|null $data
     * @throws \Exception
     */
    public function course(?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") {

            $create = new Course();
            $create->title = $data["title"];
            $create->uri = str_slug($create->title);
            $create->subtitle = $data["subtitle"];
            $create->date = $data["date"];
            $create->time = $data["time"];
            $create->duration = $data["duration"];
            $create->about = $data["about"];
            $create->requirements = $data["requirements"];
            $create->diferentials = $data["diferentials"];
            $create->area = $data["area"];
            $create->grade = $data["grade"];
            $create->video = $data["video"];
            $create->workload = $data["workload"];
            $create->aspas = $data["aspas"];
            $create->coordenador = $data["coordenador"];
            $create->price = ((float)$data["price"]);
            $create->discount = ((float)$data["discount"]);
            $create->max_installment = ((int)$data["max_installment"]);
            $create->class_start = date_fmt_back($data["class_start"]);
            $create->limit_enrolment = date_fmt_back($data["limit_enrolment"]);
            $create->status = ((int)$data["status"]);

//            $create->first_installment = date_fmt_back($data["first_installment"]);
//            $create->limit_installment = ((int)$data["limit_installment"]);
//            $create->special_price = $data["special_price"];
//            $create->objective = $data["objective"];
//            $create->metodology = $data["metodology"];
//            $create->period = $data["period"];
//            $create->enrolment = ((int)$data["enrolment"]);

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

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



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

            $this->message->success("Curso publicado com sucesso...")->flash();
            $json["redirect"] = url("/admin/courses/course/{$create->id}");

            echo json_encode($json);
            return;
        }

        //update
        if (!empty($data["action"]) && $data["action"] == "update") {
//            $content = $data["content"];
            $edit = (new Course())->findById($data["service_id"]);

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

//            if(isset($data["documents"]) AND $data["documents"] != ""){
//
//                $courseDocuments = (new CourseDocuments())->find("course_id = :cid", "cid={$data["service_id"]}");
//                if($courseDocuments->count() != 0){
//                    foreach ($courseDocuments->fetch(true) as $item) {
//                        $delete = (new CourseDocuments())->findById($item->id);
//                        $delete->destroy();
//                  }
//                }
//                foreach ($data["documents"] as $document) {
//                    $cDoc = (new CourseDocuments());
//                    $cDoc->course_id = $data["service_id"];
//                    $cDoc->document_id = $document;
//
//                    $cDoc->save();
//                }
//            }else{
//                $courseDocuments = (new CourseDocuments())->find("course_id = :cid", "cid={$data["service_id"]}");
//                if($courseDocuments->count() != 0){
//                    foreach ($courseDocuments->fetch(true) as $item) {
//                        $delete = (new CourseDocuments())->findById($item->id);
//                        $delete->destroy();
//                    }
//                }
//            }

            $edit->title = $data["title"];
            $edit->uri = str_slug($edit->title);
            $edit->subtitle = $data["subtitle"];
            $edit->date = $data["date"];
            $edit->time = $data["time"];
            $edit->duration = $data["duration"];
            $edit->about = $data["about"];
            $edit->video = $data["video"];
            $edit->requirements = $data["requirements"];
            $edit->diferentials = $data["diferentials"];
            $edit->area = $data["area"];
            $edit->grade = $data["grade"];
            $edit->workload = $data["workload"];
            $edit->aspas = $data["aspas"];
            $edit->coordenador = $data["coordenador"];
            $edit->price = ((float)$data["price"]);
            $edit->discount = ((float)$data["discount"]);
            $edit->max_installment = ((int)$data["max_installment"]);
            $edit->class_start = date_fmt_back($data["class_start"]);
            $edit->limit_enrolment = date_fmt_back($data["limit_enrolment"]);
            $edit->status = ((int)$data["status"]);
//            $edit->enrolment = ((int)$data["enrolment"]);
//            $edit->objective = $data["objective"];
//            $edit->metodology = $data["metodology"];
//            $edit->period = $data["period"];
//            $edit->special_price = $data["special_price"];
//            $edit->limit_installment = ((int)$data["limit_installment"]);
//            $edit->first_installment = date_fmt_back($data["first_installment"]);
            //upload cover
            if (!empty($_FILES["cover"])) {
                if ($edit->cover && file_exists(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$edit->cover}")) {
                    unlink(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$edit->cover}");
                    (new Thumb())->flush($edit->cover);
                }

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

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





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

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

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

            if ($delete->cover && file_exists(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$delete->cover}")) {
                unlink(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$delete->cover}");
                (new Thumb())->flush($delete->cover);
            }


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

            echo json_encode(["reload" => true]);
            return;
        }

        $edit = null;
        if (!empty($data["service_id"])) {
            $serviceId = filter_var($data["service_id"], FILTER_VALIDATE_INT);
            $edit = (new Course())->findById($serviceId);
        }

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

        echo $this->view->render("widgets/courses/course", [
            "app" => "courses",
            "head" => $head,
            "courses" => $edit,



        ]);
    }

}