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: //proc/self/cwd/sabbry/source/App/Admin/Admin.php
<?php

namespace Source\App\Admin;

use Source\Core\Controller;
use Source\Models\Auth;
use Source\Models\Company;
use Source\Models\Config;
use Source\Models\Ecommerce\Orders;
use Source\Models\Gallery;
use Source\Models\Report\Access;
use Source\Support\Thumb;
use Source\Support\Upload;

/**
 * Class Admin
 * @package Source\App\Admin
 */
class Admin extends Controller
{
    /**
     * @var \Source\Models\User|null
     */
    protected $user;
    protected $router;

    /**
     * Admin constructor.
     */
    public function __construct()
    {
        parent::__construct(__DIR__ . "/../../../themes/" . CONF_VIEW_ADMIN . "/");
        $this->user = Auth::user();

        if (!$this->user || $this->user->level < 5) {
            $this->message->error("Para acessar é preciso logar-se")->flash();
            redirect("/admin/login");
        }

    }

    /**
     * @param array $data
     */
    public function removeImageGallery(array $data): void
    {
        $data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
        $galleryDelete = (new Gallery())->findById($data["id"]);

        if (empty($data["id"])) {
            $json["message"] = $this->message->error("Erro ao selecionar a image, favor entrar em contato com o suporte!")->render();
            echo json_encode($json);
            return;
        }
        if ($galleryDelete->gallery && file_exists(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$galleryDelete->gallery}")) {
            unlink(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$galleryDelete->gallery}");
            $galleryDelete->destroy();
            (new Thumb())->flush($galleryDelete->gallery);
            $json["message"] = $this->message->success("Imagem da galeria deletada com sucesso!")->render();
            $json["resposta"] = "sucesso";
            echo json_encode($json);
            return;
        }
    }

    /**
     * @param array|null $data
     */
    public function config(?array $data):void
    {
        //update
        if (!empty($data["action"]) && $data["action"] == "update") {
            $data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
            $configEdit = (new Config())->findById($data["id"]);

            if (!$configEdit) {
                $this->message->error("Você tentou atualizar um post que não existe ou foi removido")->flash();
                echo json_encode(["redirect" => url("/admin/blog/home")]);
                return;
            }
            $configEdit->site_name = $data["site_name"];
            $configEdit->site_title = $data["site_title"];
            $configEdit->site_description = $data["site_description"];
            $configEdit->facebook = $data["facebook"];
            $configEdit->instagram = $data["instagram"];
            $configEdit->youtube = $data["youtube"];
            $configEdit->linkedin = $data["linkedin"];
            $configEdit->pinterest = $data["pinterest"];
            $configEdit->twitter = $data["twitter"];
            $configEdit->skype = $data["skype"];
            $configEdit->tumblr = $data["tumblr"];
            $configEdit->mail_host = $data["mail_host"];
            $configEdit->mail_port = $data["mail_port"];
            $configEdit->mail_user = $data["mail_user"];
            $configEdit->mail_password = $data["mail_password"];

            if (!$configEdit->save()) {
                $json["message"] = $configEdit->message()->render();
                echo json_encode($json);
                return;
            }
            $this->message->success("Configurações atualizadas com sucesso...")->flash();
            echo json_encode(["reload" => true]);
            return;
        }
        $configEdit = null;
        if (!empty($data["id"])) {
            $configId = filter_var($data["id"], FILTER_VALIDATE_INT);
            $configEdit = (new Config())->findById($configId);
        }
        $head = $this->seo->render(
            CONF_SITE_NAME . " | Config",
            CONF_SITE_DESC,
            url("/admin"),
            url("/admin/assets/images/image.jpg"),
            false
        );
        echo $this->view->render("widgets/config/config", [
            "head" => $head,
            "config" => $configEdit
        ]);
    }

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

        if (!empty($data["action"]) && $data["action"] == "update") {
            $data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
            $pageEdit = (new Company())->findById($data["page_id"]);

            if (!$pageEdit) {
                $this->message->error("Erro ao editar, página não encontrada")->flash();
                echo json_encode(["redirect" => url("/admin/dash")]);
                return;
            }
            $pageEdit->title = $data["title"];
            $pageEdit->description = $data["description"];
            $pageEdit->adress = $data["adress"];
            $pageEdit->number = $data["number"];
            $pageEdit->zip_code = $data["zip_code"];
            $pageEdit->complement = $data["complement"];
            $pageEdit->city = $data["city"];
            $pageEdit->state = $data["state"];
            $pageEdit->email = $data["email"];
            $pageEdit->phone_1 = $data["phone_1"];
            $pageEdit->phone_2 = $data["phone_2"];
            $pageEdit->mission = $data["mission"];
            $pageEdit->vision = $data["vision"];
            $pageEdit->company_values = $data["company_values"];
            $pageEdit->cnpj = $data["cnpj"];


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

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

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

                $pageEdit->cover = $image;
            }

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

            $this->message->success("Página alterada com sucesso...")->flash();
            echo json_encode(["reload" => true]);
            return;
        }

        $pageEdit = null;
        if (!empty($data["page_id"])) {
            $pageId = filter_var($data["page_id"], FILTER_VALIDATE_INT);
            $pageEdit = (new Company())->findById($pageId);
        }

        $head = $this->seo->render(
            CONF_SITE_NAME . " | Empresa",
            CONF_SITE_DESC,
            url("/admin"),
            url("/admin/assets/images/image.jpg"),
            false
        );
        echo $this->view->render("widgets/pages/company", [
            "app" => "pages/company",
            "head" => $head,
            "page" => $pageEdit
        ]);

    }

    public function reportAccess(int $limit = 7, string $columns = "users") : ? object
    {
        $data = new \stdClass();
        $report = (new Access())->find()->limit($limit);
        $reportB = (new Access())->find()->limit($limit)->offset($limit);
        $data->usersTotal = 0;
        $data->usersTotalB = 0;
        foreach ($report->order("id DESC")->fetch(true) as $item) {
            $chartData[] = $item->$columns;
            $data->usersTotal += $item->$columns;
        }
        foreach ($reportB->order("id DESC")->fetch(true) as $itemB) {
            $data->usersTotalB += $itemB->$columns;
        }
        $data->days = $limit;
        $data->userReport = implode(",", array_reverse($chartData));

        return $data;
    }

    public function orderGraph(int $qtyMonths = 4) : ?object
    {
        $data = new \stdClass();
        $actual = 0.00;
        $total = 0.00;
        for($i=1; $i<=$qtyMonths; $i++){
            $mes = $i-1;
            $date = new \DateTime();
            $date->modify("-{$mes} months");
            $m = $date->format('m');
            $fDay = date("Y-{$m}-01 00:00:01");
            $lDay = date("Y-{$m}-t 23:59:59", strtotime($fDay));
            $Orders = (new Orders())->find("status = 'paid' AND created_at BETWEEN '{$fDay}' AND '{$lDay}'")->fetch(true);
            $subTotal = 0.00;

            if($Orders){
                foreach ($Orders as $values){
                    $subTotal += $values->products_price+$values->shipment_price;
                    $total += $values->products_price+$values->shipment_price;
                    if ($i == 1){
                        $actual = $subTotal;
                    }
                }
            }else{
                $subTotal = 0.00;
            }

            $chartData[] = $subTotal;
        }
        $data->graph = implode(",", array_reverse($chartData));
        $data->total = $total;
        $data->months = $qtyMonths;
        $data->actualValues = $actual;
        return $data;

    }


    public function maintenance():void
    {
        $Config = (new Config())->findById(1);
            $Config->maintenance == 0 ? $Config->maintenance = 1 : $Config->maintenance = 0;
            $Config->maintenance == 0 ? $message = "Modo de manutenção desativado!" : $message = "Modo de manutenção ativado!";
            $Config->save();
        $this->message->success($message)->flash();
        echo json_encode(["reload" => true]);
        return;
    }


    /**
     * SITE NAV ERROR
     * @param array $data
     */
    public function error(array $data): void
    {
        $error = new \stdClass();

        switch ($data['errcode']) {
            case "problemas":
                $error->code = "OPS";
                $error->title = "Estamos enfrentando problemas!";
                $error->message = "Parece que nosso serviço não está diponível no momento. Já estamos vendo isso mas caso precise, envie um e-mail :)";
                $error->linkTitle = "ENVIAR E-MAIL";
                $error->link = "mailto:" . CONF_MAIL_SUPPORT;
                break;

            case "manutencao":
                $error->code = "OPS";
                $error->title = "Desculpe. Estamos em manutenção!";
                $error->message = "Voltamos logo! Por hora estamos trabalhando para melhorar nosso conteúdo para você controlar melhor as suas contas :P";
                $error->linkTitle = null;
                $error->link = null;
                break;

            default:
                $error->code = $data['errcode'];
                $error->title = "Ooops. Conteúdo indisponível :/";
                $error->message = "Sentimos muito, mas o conteúdo que você tentou acessar não existe, está indisponível no momento ou foi removido :/";
                $error->linkTitle = "Continue navegando!";
                $error->link = url_back();
                break;
        }

        $head = $this->seo->render(
            "{$error->code} | {$error->title}",
            $error->message,
            url("/ops/{$error->code}"),
            theme("/assets/images/share.jpg"),
            false
        );

        echo $this->view->render("error", [
            "head" => $head,
            "error" => $error,
            "pageTitle" => (object)[
                "title" => "",
                "subtitle" => "Erro na requisição!",
                "bg" => theme("/assets/recipes/images/recipe-single.jpg"),
            ],"breadcrumb" => (object)[
                ["Erro", "#"]
            ]

        ]);
    }


}