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/www/raquel/source/App/Admin/Order.php
<?php

namespace Source\App\Admin;


use Source\Core\View;
use Source\Models\Ecommerce\OrderItens;
use Source\Support\Email;
use Source\Models\Ecommerce\Orders;
use Source\Support\Pager;

/**
 * Class Orders
 * @package Source\App\Admin
 */
class Order extends Admin
{
    /**
     * Order 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("/order/{$data['type']}/{$s}/1")]);
            return;
        }
        $order = "id DESC";
        $search = null;
        $query = "";
        $title = "Todos Pedidos";
        if($data["type"] == "waiting"){
            $query = "(status = 'paid' OR status = 'authorized' OR status = 'processing' OR status = 'waiting_payment') AND shipment_code = 'Aguardando Entrega'";
            $order = "id ASC";
            $title = "Aguardando Entrega";
        }
        if($data["type"] == "delivered"){
            $query = "(status = 'paid' OR status = 'authorized') AND shipment_code != 'Aguardando Entrega'";
            $title = "Pedidos Entregue";
        }
        if($data["type"] == "refused"){
            $query = "(status = 'refused' OR status = 'canceled' OR status = 'refunded' OR status = 'pending_refund')";
            $title = "Cancelados e Estornados";

        }

        if (!empty($data["search"]) && str_search($data["search"]) != "all") {
            $search = str_search($data["search"]);
            $orders = (new Orders())->find("MATCH(title, subtitle) AGAINST(:s)", "s={$search}");
            if (!$orders->count()) {
                $this->message->info("Sua pesquisa não retornou resultados")->flash();
                redirect("/order/{$data["type"]}/all/1");
            }
        }


        $orders = (new Orders())->find($query);


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

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

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

    /**
     * @param array|null $data
     */
    public function invoice(?array $data): void
    {

        $order = (new Orders())->findById((int)$data['order_id']);
        if (!$order) {
            redirect("admin/error/404");
        }
        $orderItems = (new OrderItens())->find("order_id = :id", "id={$order->id}");
        if (!$orderItems) {
            redirect("admin/error/404");
        }


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

        echo $this->view->render("widgets/order/invoice", [
            "app" => "order/order",
            "head" => $head,
            "order" => $order,
            "orderItems" => $orderItems->fetch(true)
        ]);
    }

    public function shipping(array $data):void
    {
        if(isset($data) AND $data["action"] != null){
            $data = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRIPPED);
            $Orders = (new \Source\Models\Ecommerce\Orders())->findById($data["id"]);
            $Orders->shipment_code = $data["shipment_code"] ? $data["shipment_code"] : "N/A";
            if($Orders->save()){
                $view = new View(__DIR__ . "/../../../shared/views/email");
                $message = $view->render("shipped", [
                    "title" => CONF_SITE_NAME . " | Pedido Enviado",
                    "user" => $Orders->user()->fullName(),
                    "code" => $data["shipment_code"] ? $data["shipment_code"] : "N/A",
                    "orderId" => $data["id"]

                ]);

                (new Email())->bootstrap(
                    CONF_SITE_NAME . " | Pedido Enviado",
                    $message,
                    $Orders->user()->data()->email, $Orders->user()->fullName()
                )->send();

                $json["message"] = $this->message->success("Pedido Atualizado com sucesso!")->flash();
                $json["reload"] = true;
                echo json_encode($json);
                return;
            }


            $json["message"] = $this->message->error("Não foi possível atualizar, contate o suporte")->render();
            echo json_encode($json);
            return;
        }
        $json["message"] = $this->message->error("Não foi possível atualizar, contate o suporte")->render();
        echo json_encode($json);
        return;
    }

}