File: /home/artinside/www/finance/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", "#"]
]
]);
}
}