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/public_html/finance/source/App/Admin/Coupons.php
<?php

namespace Source\App\Admin;


use Source\Models\Ecommerce\Coupon;

use Source\Models\User;
use Source\Support\Pager;

/**
 * Class Coupons
 * @package Source\App\Admin
 */
class Coupons extends Admin
{
    /**
     * Dash constructor.
     */
    public function __construct($router)
    {
        parent::__construct();
        $this->view->addData("router", $router);
    }


    /**
     * @param array|null $data
     * @throws \Exception
     */
    /**
     * @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/coupon/home/{$s}/1")]);
            return;
        }

        $search = null;
        $coupons = (new Coupon())->find();


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

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

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

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


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

        //create
        if (!empty($data["action"]) && $data["action"] == "create") {
            $data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
            $create = (new Coupon())->find("code = :code", "code={$data["code"]}");
            if($create->count()){
                $json["message"] = $this->message->warning("Código de cupom já cadastrado, favor escolha outro")->render();
                echo json_encode($json);
                return;
            }
            $create->title = $data["title"];
            $create->code = $data["code"];
            $create->content = $data["content"];
            $create->value = $data["value"];
            $create->quantity = $data["quantity"];
            $create->partner = $data["partner"] ? $data["partner"] : "";
            $create->partner_commission = $data["partner_commission"] ? $data["partner_commission"] : 0.00;
            $create->uses = 0;
            $create->valid_at = date_fmt_back($data["valid_at"]) . " 23:59:59";


            if(!is_date($create->valid_at)){
                $json["message"] = $this->message->error("Data de validade inválida")->render();
                echo json_encode($json);
                return;
            }
            if (!$create->save()) {
                $json["message"] = $create->message()->render();
                echo json_encode($json);
                return;
            }

            $this->message->success("Cupon criado com sucesso...")->flash();
            $json["redirect"] = url("/admin/coupon/home");

            echo json_encode($json);
            return;
        }

        //update
        if (!empty($data["action"]) && $data["action"] == "update") {
            $data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
            $edit = (new Coupon())->findById($data["coupon_id"]);

            if (!$edit) {
                $this->message->error("Você tentou editar uma categoria que não existe ou foi removida")->flash();
                echo json_encode(["redirect" => url("/admin/product/categories")]);
                return;
            }

            $edit->title = $data["title"];
            $edit->content = $data["content"];
            $edit->value = $data["value"];
            $edit->quantity = $data["quantity"];
            $edit->partner = $data["partner"] ? $data["partner"] : "";
            $edit->partner_commission = $data["partner_commission"] ? $data["partner_commission"] : 0.00;
            $edit->valid_at = date_fmt_back($data["valid_at"]) . " 23:59:59";

            if(!is_date($edit->valid_at)){
                $json["message"] = $this->message->error("Data de validade inválida")->render();
                echo json_encode($json);
                return;
            }
            

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

            $this->message->success("Cupom atualizado com sucesso...")->flash();
            echo json_encode(["redirect" => url("/admin/coupon/home")]);
            return;
        }


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

            if (!$delete) {
                $json["message"] = $this->message->error("O Cupom não existe ou já foi excluído antes")->render();
                echo json_encode($json);
                return;
            }


            $delete->destroy();
            $this->message->success("O Cupom foi excluído com sucesso...")->flash();
            echo json_encode(["reload" => true]);

            return;
        }

        $edit = null;
        if (!empty($data["coupon_id"])) {
            $itemId = filter_var($data["coupon_id"], FILTER_VALIDATE_INT);
            $edit = (new Coupon())->findById($itemId);
        }

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

        echo $this->view->render("widgets/coupon/coupon", [
            "app" => "coupon",
            "head" => $head,
            "partners" => (new User())->find("level = 2")->fetch(true),
            "coupon" => $edit
        ]);
    }


}