File: //home/artinside/sites.artinside.com.br/paliar/sourcebackup/App/Web.php
<?php
namespace Source\App;
use Anam\Phpcart\Cart;
use FlyingLuscas\ViaCEP\ViaCEP;
use Source\Core\Controller;
use Source\Core\Session;
use Source\Core\View;
use Source\Models\Address;
use Source\Models\Auth;
use Source\Models\Batch;
use Source\Models\Category;
use Source\Models\Company;
use Source\Models\Config;
use Source\Models\Ecommerce\CreditCard;
use Source\Models\Ecommerce\OrderItens;
use Source\Models\Ecommerce\Orders;
use Source\Models\Ecommerce\Product;
use Source\Models\Ecommerce\ProductVariations;
use Source\Models\Files;
use Source\Models\Gallery;
use Source\Models\Newsletter;
use Source\Models\Post;
use Source\Models\Report\Access;
use Source\Models\Report\Online;
use Source\Models\Service;
use Source\Models\User;
use Source\Support\Email;
use Source\Support\Frete;
use Source\Support\Pager;
/**
* Web Controller
* @package Source\App
*/
class Web extends Controller
{
/** @var User */
private $user;
/**
* Web constructor.
*/
public function __construct($router)
{
parent::__construct(__DIR__ . "/../../themes/" . CONF_VIEW_THEME . "/");
(new Access())->report();
(new Online())->report();
$this->view->addData("router", $router);
$Config = (new Config())->findById(1);
$company = (new Company())->findById(1);
$this->view->addData("company", true);
if($Config->data()->maintenance == 1){
if (!Auth::user() OR !Auth::userLevel(Auth::user(), 5)){
get_url(1) != "manutencao" ? redirect("manutencao") : null;
}else{
$this->view->addData("maintenance", true);
}
}
}
/**
* SITE HOME
*/
public function home(): void
{
$head = $this->seo->render(
CONF_SITE_NAME . " - " . CONF_SITE_TITLE,
CONF_SITE_DESC,
url(),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("home", [
"head" => $head,
"video" => "lDZGl9Wdc7Y",
"categories" => (new Category())
->find()
->offset(1)
->limit(2)
->fetch(true),
"posts" => (new Post())
->findPost()
->limit(3)
->order("post_at DESC")
->fetch(true),
"services" => (new Service())
->find()
->limit(4)
->order("post_at DESC")
->fetch(true),
"company" => (new Company())->findById(1),
]);
}
/**
* SITE SERVICES
* @param array|null $data
*/
public function services(?array $data): void
{
$head = $this->seo->render(
"Nossos Serviços - " . CONF_SITE_NAME,
"Confira os serviços de Administração de Condomínios que a Neocond oferece para você",
url("/services"),
theme("/assets/images/share.jpg")
);
$services = (new Service())->find();
$pager = new Pager(url("/servicos/p/"));
$pager->pager($services->count(), 12, ($data['page'] ?? 1));
echo $this->view->render("services", [
"head" => $head,
"services" => $services->order("title ASC")->limit($pager->limit())->offset($pager->offset())->fetch(true),
"pageTitle" => (object)[
"title" => "Nossos Serviços",
"subtitle" => "Conheça nossos Serviços",
"image" => url("images/slide-bg.jpg"),
],
"breadcrumb" => (object)[
["Serviços", "#"]
],
"paginator" => $pager->render()
]);
}
/**
* SITE PRODUCT SINGLE
*/
public function service(array $data): void
{
$service = (new Service())->findByUri($data["uri"]);
if (!$service) {
redirect("/404");
}
$service->views += 1;
$service->save();
$head = $this->seo->render(
"{$service->title} - " . CONF_SITE_NAME,
$service->title,
url("/servicos/{$service->uri}"),
($service->cover ? image($service->cover, 1200, 628) : theme("/assets/images/share.jpg"))
);
echo $this->view->render("service", [
"head" => $head,
"service" => $service,
"pageTitle" => (object)[
"title" => "$service->title",
"subtitle" => "Nossos Serviços",
"image" => url("images/slide-bg.jpg"),
],
"breadcrumb" => (object)[
[$service->title]]
]);
}
/**
*
*/
public function maintenance():void
{
echo $this->view->render("maintenance", []);
}
/**
*
*/
public function atuacao():void
{
$head = $this->seo->render(
"SH Wrapping - " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/atuacao"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("atuacao", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Atuação",
"subtitle" => "Especializada em Direito empresarial",
"image" => url("images/slide-bg.jpg"),
]
]);
}
/**
*
*/
public function lp1():void
{
echo $this->view->render("lp1", []);
}
/**
*
*/
public function typ1():void
{
echo $this->view->render("typ1", []);
}
/**
* SITE HOME
*/
public function lp4ever(): void
{
$head = $this->seo->render(
CONF_SITE_NAME . " - " . CONF_SITE_TITLE,
CONF_SITE_DESC,
url(),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("lp4ever", [
"head" => $head,
"video" => "lDZGl9Wdc7Y",
"categories" => (new Category())
->find()
->offset(1)
->limit(2)
->fetch(true),
"posts" => (new Post())
->findPost()
->limit(3)
->order("post_at DESC")
->fetch(true)
]);
}
/**
* SITE ABOUT
*/
public function about(): void
{
$company = (new Company())->findById(1);
$head = $this->seo->render(
"Sobre a " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/sobre"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("about", [
"head" => $head,
"company" => $company,
"pageTitle" => (object)[
"title" => "À PROPOS ",
"subtitle" => "",
"image" => url("images/slide-bg.jpg"),
],"breadcrumb" => (object)[
["A ".CONF_SITE_NAME, "#"]
]
]);
}
/**
* SITE SH WRAPPING
*/
public function shWrapping(): void
{
$head = $this->seo->render(
"SH Wrapping - " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/sh-wrapping"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("sh-wrapping", [
"head" => $head,
"pageTitle" => (object)[
"title" => "SH Wrapping",
"subtitle" => "Conserve a pintura original do seu veículo",
"image" => url("images/sh-wrapping.jpg"),
]
]);
}
/**
* SITE Nar PPF
*/
public function narPPF(): void
{
$head = $this->seo->render(
"NAR PPF - " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/nar-ppf"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("nar-ppf", [
"head" => $head,
"pageTitle" => (object)[
"title" => "NAR PPF",
"subtitle" => "Desenvolvido para proteger",
"image" => url("images/nar-ppf.jpg"),
]
]);
}
/**
* SITE SH Decor
*/
public function shDecor(): void
{
$head = $this->seo->render(
"shdecor - " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/sh-decor"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("sh-decor", [
"head" => $head,
"pageTitle" => (object)[
"title" => "shdecor",
"subtitle" => "Revestimento autoadesivo decorativo",
"image" => url("images/shdecor.jpg"),
]
]);
}
/**
* SITE ABOUT
*/
public function batch(array $data): void
{
if($data){
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$Batch = new Batch();
$b = $Batch->find("batch_number = :b", "b={$data["batch_number"]}")->fetch();
if($Batch->count()){
$json["callback"] = $this->view->render("views/valid", ["data"=>$b]);
$json["target"] = ".ajax_fragment";
echo json_encode($json);
return;
}
else{
$json['message'] = $this->message->warning("Número de lote não encontrado, favor entrar em contato com nossa equipe")->render();
$json["target"] = ".ajax_fragment";
$json["clear"] = true;
echo json_encode($json);
return;
}
}
$head = $this->seo->render(
"Pesquisa de Lote " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/lote"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("batch", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Consulta de Lote de Produtos",
"subtitle" => "Veja a validade através do número do lote",
],"breadcrumb" => (object)[
["A ".CONF_SITE_NAME, "#"]
]
]);
}
/**
* SITE Time
*/
public function experiences(): void
{
$head = $this->seo->render(
"ÉXPERIENCES " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/experiences"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("experiences", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Expériences",
"subtitle" => "Vivez l’expérience Ultime ",
"image" => url("images/slide-bg.jpg"),
],
// "team" => (new User())->find("team = 'on'")->order("created_at ASC")->fetch(true)
]);
}
/**
* SITE Time
*/
public function teams1(): void
{
$head = $this->seo->render(
"Nome da Advogada 1 " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/team"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("team-s1", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Nome da Advogada 1 ",
"subtitle" => "Profissionais " . CONF_SITE_NAME,
"image" => url("images/slide-bg.jpg"),
],
// "team" => (new User())->find("team = 'on'")->order("created_at ASC")->fetch(true)
]);
}
/**
* SITE Time
*/
public function teams2(): void
{
$head = $this->seo->render(
"Nome da Advogada 2 " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/team"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("team-s2", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Nome da Advogada 2 ",
"subtitle" => "Profissionais " . CONF_SITE_NAME,
"image" => url("images/slide-bg.jpg"),
],
// "team" => (new User())->find("team = 'on'")->order("created_at ASC")->fetch(true)
]);
}
/**
*CONTACT PAGE SITE
*/
public function contact(): void
{
$head = $this->seo->render(
"Contato " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/contato"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("contact", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Fale Conosco",
"subtitle" => CONF_SITE_NAME,
"image" => url("images/slide-bg.jpg"),
],"breadcrumb" => (object)[
["Contact", "#"]
]
]);
}
/**
*Form de Contato do site
*/
public function contactForm(array $data): void
{
if(isset($data)){
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
// if (request_limit("weblogin", 5, 60 * 3)) {
// $json['message'] = $this->message->error("Você já efetuou 5 tentativas, esse é o limite. Por favor, aguarde 3 minutos para tentar novamente!")->render();
// echo json_encode($json);
// return;
// }
if ((!isset($data["action"])) AND (empty($data['email']) || empty($data['name']) || empty($data['message']) || empty($data['phone']))) {
$json['message'] = $this->message->warning("Campos com * são de preenchimento obrigatório")->render();
echo json_encode($json);
return;
}
//
// if ((isset($data["action"]) AND $data["action"] == "orcamento") AND (empty($data['email']) || empty($data['name']) || empty($data['phone']))) {
// $json['message'] = $this->message->warning("Campos com * são de preenchimento obrigatório")->render();
// echo json_encode($json);
// return;
// }
$contact = new \stdClass();
$contact->name = $data["name"];
$contact->email = $data["email"];
$contact->phone = $data["phone"];
$contact->subject = $data["subject"];
// $contact->product = $data["product"] ? $data["product"] : "";
$contact->message = $data["message"];
$template = "contact";
// if(isset($data["action"]) AND $data["action"] == "orcamento"){
// $template = "orcamento";
// }
$view = new View(__DIR__ . "/../../shared/views/email");
$message = $view->render($template, [
"contact" => $contact
]);
(new Email())->bootstrap(
"Email do site " . CONF_SITE_NAME . " [{$contact->subject}]",
$message,
CONF_EMAIL, $contact->name
)->send($contact->email, $contact->name);
// $newsletter = (new Newsletter())->findByEmail($data["email"]);
//
// if(!$newsletter){
// $newsCreate = new Newsletter();
// $newsCreate->email = $data["email"];
// $newsCreate->origin = "Orçamento";
// $newsCreate->save();
// }
$json['message'] = $this->message->success("Solicitação efetuada com sucesso")->render();
$json['modal'] = true;
$json['reset'] = true;
echo json_encode($json);
return;
}
$json['message'] = $this->message->error("Erro ao enviar, favor entrar em contato com nosso suporte")->render();
echo json_encode($json);
return;
}
/**
*Form de Contato do site
*/
public function contact4ever(array $data): void
{
if(isset($data)){
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
if (request_limit("weblogin", 5, 60 * 3)) {
$json['message'] = $this->message->error("Você já efetuou 5 tentativas, esse é o limite. Por favor, aguarde 3 minutos para tentar novamente!")->render();
echo json_encode($json);
return;
}
if ((!isset($data["action"])) AND (empty($data['email']) || empty($data['name']) || empty($data['message']) || empty($data['phone']))) {
$json['message'] = $this->message->warning("Campos com * são de preenchimento obrigatório")->render();
echo json_encode($json);
return;
}
$contact = new \stdClass();
$contact->name = $data["name"];
$contact->email = $data["email"];
$contact->phone = $data["phone"];
$contact->subject = $data["subject"];
$contact->product = $data["product"];
$view = new View(__DIR__ . "/../../shared/views/email");
$message = $view->render("4ever", [
"contact" => $contact
]);
(new Email())->bootstrap(
"Email do site " . CONF_SITE_NAME . " [{$contact->subject}]",
$message,
CONF_EMAIL, $contact->name
)->send($contact->email, $contact->name);
$newsletter = (new Newsletter())->findByEmail($data["email"]);
if(!$newsletter){
$newsCreate = new Newsletter();
$newsCreate->email = $data["email"];
$newsCreate->origin = "Orçamento";
$newsCreate->save();
}
$json['message'] = $this->message->success("Solicitação efetuada com sucesso")->render();
$json['modal'] = true;
$json['reset'] = true;
echo json_encode($json);
return;
}
$json['message'] = $this->message->error("Erro ao enviar, favor entrar em contato com nosso suporte")->render();
echo json_encode($json);
return;
}
/**
* SITE PRODUCT SINGLE
*/
public function allProducts(array $data): void
{
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$head = $this->seo->render(
"Orafol - " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/products"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("products", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Orafol",
"subtitle" => "tradição e confiabilidade em todos os seus produtos",
"image" => url("/images/orafol.jpg")
],
"products" => (new Product())->findProduct("type = 'product'")->order("id ASC")->fetch(true),
]);
}
/**
* SITE PRODUCT SINGLE
*/
public function products(array $data): void
{
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$head = $this->seo->render(
"Máquinas " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/products"),
theme("/assets/images/sharer.jpg")
);
switch ($data["category"]):
case 1:
$title = "Impressoras Sublimáticas";
break;
case 2:
$title = "Impressoras Solventes";
break;
default:
$title = "Erro ao selecionar";
endswitch;
echo $this->view->render("products", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Nossas Máquinas",
"subtitle" => $title,
"breadcrumb" => ""
],
"products" => (new Product())->findProduct("type = 'product' AND category = :category", "category={$data["category"]}")->order("post_at DESC")->fetch(true),
"category" => $title
]);
}
/**
* SITE PRODUCT SINGLE
*/
public function product(array $data): void
{
$product = (new Product())->findByUri($data["uri"]);
if (!$product) {
redirect("/404");
}
$product->views += 1;
$product->save();
$head = $this->seo->render(
"{$product->title} - " . CONF_SITE_NAME,
$product->title,
url("/produto/maquinas/{$product->uri}"),
($product->cover ? image($product->cover, 1200, 628) : theme("/assets/images/sharer.jpg"))
);
echo $this->view->render("product", [
"head" => $head,
"product" => $product,
"pageTitle" => (object)["subtitle"=>$product->subtitle, "title"=>$product->title, "breadcrumb" => "", "image" => url("/images/slide-bg.jpg")
],
"gallery" => (new Gallery())
->find("gallery_link = :g", "g={$product->gallery_link}")
->fetch(true),
"related" => (new Product())->findProduct("type = 'product' AND id != :i", "i={$product->id}")
->order("post_at DESC")
->limit(6)
->fetch(true),
"variations" => (new ProductVariations())->find("product_id = :pid", "pid={$product->gallery_link}")->fetch(true),
"files"=> (new Files())->find("unique_id = :uid", "uid={$product->gallery_link}")->fetch(true)
]);
}
/**
* SITE Tintas SINGLE
*/
public function inks(): void
{
$head = $this->seo->render(
"Serviços " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/inks"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("inks", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Nossos Serviços",
"subtitle" => "Assistência Técnica Especializada para Gráficas ",
],
"products" => (new Product())->findProduct("type = 'ink'")->fetch(true)
]);
}
/**
* SITE INK SINGLE
*/
public function ink(array $data): void
{
$product = (new Product())->findByUri($data["uri"]);
if (!$product) {
redirect("/404");
}
$product->views += 1;
$product->save();
$head = $this->seo->render(
"{$product->title} - " . CONF_SITE_NAME,
$product->title,
url("/produto/tintas/{$product->uri}"),
($product->cover ? image($product->cover, 1200, 628) : theme("/assets/images/sharer.jpg"))
);
echo $this->view->render("ink", [
"head" => $head,
"product" => $product,
"pageTitle" => (object)["subtitle"=>$product->title, "title"=>"Tintas para Sublimação"],
"gallery" => (new Gallery())
->find("gallery_link = :g", "g={$product->gallery_link}")
->fetch(true),
"related" => (new Product())->findProduct("type = 'ink' AND id != :i", "i={$product->id}")
->order("post_at DESC")
->limit(6)
->fetch(true)
]);
}
/**
* SITE PRODUCT SINGLE
*/
public function parts(): void
{
$head = $this->seo->render(
"Peças de reposição para impressoras de têxteis " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/product"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("parts", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Peças de reposição",
"subtitle" => "Peças para Impressoras sublimáticas",
]
]);
}
/**
* SITE PRODUCT SINGLE
*/
public function assistance(): void
{
$head = $this->seo->render(
"Assistência Técnica Especializada " . CONF_SITE_NAME . " - " . CONF_SITE_DESC,
CONF_SITE_DESC,
url("/product"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("assistance", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Assistência especializadas",
"subtitle" => "Impressoras sublimáticas",
],
"products" => (new Product())->find("type = 'product'")->fetch(true)
]);
}
/**
* SITE BLOG SEARCH
* @param array $data
*/
public function productSearch(array $data): void
{
if (!empty($data['s'])) {
$search = str_search($data['s']);
echo json_encode(["redirect" => url("/produto/buscar/{$search}/1")]);
return;
}
$search = str_search($data['search']);
$page = (filter_var($data['page'], FILTER_VALIDATE_INT) >= 1 ? $data['page'] : 1);
if ($search == "all") {
redirect("/");
}
$head = $this->seo->render(
"Pesquisa por {$search} - " . CONF_SITE_NAME,
"Confira os resultados de sua pesquisa para {$search}",
url("/produto/buscar/{$search}/{$page}"),
theme("/assets/images/sharer.jpg")
);
$productSearch = (new Product())->findProduct("MATCH(title, subtitle) AGAINST(:s)", "s={$search}");
if (!$productSearch->count()) {
echo $this->view->render("search", [
"head" => $head,
"pageTitle" => (object)[
"title" => "PESQUISA POR: <b>{$search}</b>",
"subtitle" => "Não encontramos itens para sua busca",
],"breadcrumb" => (object)[
["Busca por {$search}", "#"]
],
]);
return;
}
$pager = new Pager(url("/produto/buscar/{$search}/"));
$pager->pager($productSearch->count(), 12, $page);
echo $this->view->render("search", [
"head" => $head,
"pageTitle" => (object)[
"title" => "PESQUISA POR: <b>{$search}</b>",
"subtitle" => "Encontramos <b>{$productSearch->count()}</b> itens",
],"breadcrumb" => (object)[
["Busca por {$search}", "#"]
],
"products" => $productSearch->limit($pager->limit())->offset($pager->offset())->fetch(true),
"paginator" => $pager->render()
]);
}
/**
* SITE PRODUCT CATEGORY
* @param array $data
*/
public function productCategory(array $data): void
{
$categoryUri = filter_var($data["category"], FILTER_SANITIZE_STRIPPED);
$category = (new Category())->findByUri($categoryUri);
if (!$category) {
redirect("/");
}
$productCategory = (new Product())->findProduct("category = :c", "c={$category->id}");
$page = (!empty($data['page']) && filter_var($data['page'], FILTER_VALIDATE_INT) >= 1 ? $data['page'] : 1);
$pager = new Pager(url("/produto/em/{$category->uri}/"));
$pager->pager($productCategory->count(), 12, $page);
$head = $this->seo->render(
"Nossos {$category->title} - " . CONF_SITE_NAME,
$category->description,
url("/produto/em/{$category->uri}/{$page}"),
($category->cover ? image($category->cover, 1200, 628) : theme("/assets/images/sharer.jpg"))
);
echo $this->view->render("product-category", [
"head" => $head,
"products" => $productCategory
->limit($pager->limit())
->offset($pager->offset())
->order("post_at DESC")
->fetch(true),
"pageTitle" => (object)[
"title" => "Produtos em {$category->title}",
"subtitle" => "Confira nossos produtos",
],"breadcrumb" => (object)[
[$category->title, "#"]
],
"paginator" => $pager->render()
]);
}
/**
* SITE BLOG
* @param array|null $data
*/
public function blog(?array $data): void
{
$head = $this->seo->render(
"Blog - " . CONF_SITE_NAME,
"Confira em nosso blog dicas e sacadas de como controlar melhorar suas contas. Vamos tomar um café?",
url("/blog"),
theme("/assets/images/sharer.jpg")
);
$blog = (new Post())->findPost();
$pager = new Pager(url("/blog/p/"));
$pager->pager($blog->count(), 12, ($data['page'] ?? 1));
echo $this->view->render("blog", [
"head" => $head,
"blog" => $blog->order("post_at DESC")->limit($pager->limit())->offset($pager->offset())->fetch(true),
"pageTitle" => (object)[
"title" => "Blog",
"subtitle" => "News Paliar ",
"image" => url("images/slide-bg.jpg"),
],
"breadcrumb" => (object)[
["Blog", "#"]
],
"paginator" => $pager->render()
]);
}
/**
* SITE BLOG CATEGORY
* @param array $data
*/
public function blogCategory(array $data): void
{
$categoryUri = filter_var($data["category"], FILTER_SANITIZE_STRIPPED);
$category = (new Category())->findByUri($categoryUri);
if (!$category) {
redirect("/blog");
}
$blogCategory = (new Post())->findPost("category = :c", "c={$category->id}");
$page = (!empty($data['page']) && filter_var($data['page'], FILTER_VALIDATE_INT) >= 1 ? $data['page'] : 1);
$pager = new Pager(url("/blog/em/{$category->uri}/"));
$pager->pager($blogCategory->count(), 9, $page);
$head = $this->seo->render(
"Artigos em {$category->title} - " . CONF_SITE_NAME,
$category->description,
url("/blog/em/{$category->uri}/{$page}"),
($category->cover ? image($category->cover, 1200, 628) : theme("/assets/images/sharer.jpg"))
);
echo $this->view->render("blog", [
"head" => $head,
"title" => "Artigos em {$category->title}",
"desc" => $category->description,
"blog" => $blogCategory
->limit($pager->limit())
->offset($pager->offset())
->order("post_at DESC")
->fetch(true),
"paginator" => $pager->render()
]);
}
/**
* SITE BLOG SEARCH
* @param array $data
*/
public function blogSearch(array $data): void
{
if (!empty($data['s'])) {
$search = str_search($data['s']);
echo json_encode(["redirect" => url("/blog/buscar/{$search}/1")]);
return;
}
$search = str_search($data['search']);
$page = (filter_var($data['page'], FILTER_VALIDATE_INT) >= 1 ? $data['page'] : 1);
if ($search == "all") {
redirect("/blog");
}
$head = $this->seo->render(
"Pesquisa por {$search} - " . CONF_SITE_NAME,
"Confira os resultados de sua pesquisa para {$search}",
url("/blog/buscar/{$search}/{$page}"),
theme("/assets/images/sharer.jpg")
);
$blogSearch = (new Post())->findPost("MATCH(title, subtitle) AGAINST(:s)", "s={$search}");
if (!$blogSearch->count()) {
echo $this->view->render("blog", [
"head" => $head,
"title" => "PESQUISA POR:",
"search" => $search
]);
return;
}
$pager = new Pager(url("/blog/buscar/{$search}/"));
$pager->pager($blogSearch->count(), 9, $page);
echo $this->view->render("blog", [
"head" => $head,
"title" => "PESQUISA POR:",
"search" => $search,
"blog" => $blogSearch->limit($pager->limit())->offset($pager->offset())->fetch(true),
"paginator" => $pager->render()
]);
}
/**
* SITE BLOG POST
* @param array $data
*/
public function blogPost(array $data): void
{
$post = (new Post())->findByUri($data['uri']);
if (!$post) {
redirect("/404");
}
$user = Auth::user();
if (!$user || $user->level < 5) {
$post->views += 1;
$post->save();
}
$head = $this->seo->render(
"{$post->title} - " . CONF_SITE_NAME,
$post->subtitle,
url("/blog/{$post->uri}"),
($post->cover ? image($post->cover, 1200, 628) : theme("/assets/images/sharer.jpg"))
);
echo $this->view->render("blog-post", [
"head" => $head,
"post" => $post,
"category" => (new Category())->find("id >= :id", "id={$post->category}")->fetch(),
"author" => (new User())->find("id >= :id", "id={$post->author}")->fetch(),
"pageTitle" => (object)[
"title" => $post->title,
"subtitle" => $post->subtitle,
"image" => url("images/slide-bg.jpg"),
],"breadcrumb" => (object)[
[$post->category()->title, "#"],[$post->title,"#"]
],
"relatedA" => (new Post())
->findPost("category = :c AND id != :i", "c={$post->category}&i={$post->id}")
->order("post_at DESC")
->limit(3)->offset(0)
->fetch(true),
"relatedB" => (new Post())
->findPost("category = :c AND id != :i", "c={$post->category}&i={$post->id}")
->order("post_at DESC")
->limit(2)->offset(2)
->fetch(true),
"gallery" => (new Gallery())
->find("gallery_link = :g", "g={$post->gallery_link}")
->fetch(true),
]);
}
/**
* SITE LOGIN
* @param null|array $data
*/
public function login(?array $data): void
{
// if (!csrf_verify_alt($data)) {
// $json['message'] = $this->message->error("Erro ao enviar, favor use o formulário")->render();
// echo json_encode($json);
// return;
// }
if (request_limit("weblogin", 5, 60 * 3)) {
$json['message'] = $this->message->error("Você já efetuou 5 tentativas, esse é o limite. Por favor, aguarde 3 minutos para tentar novamente!")->render();
echo json_encode($json);
return;
}
if (empty($data['email']) || empty($data['password'])) {
$json['message'] = $this->message->warning("Informe seu email e senha para entrar")->render();
echo json_encode($json);
return;
}
$save = (!empty($data['save']) ? true : false);
$auth = new Auth();
$login = $auth->login($data['email'], $data['password'], $save);
if ($login) {
$this->message->success("Seja bem-vindo(a) de volta " . Auth::user()->first_name . "!")->flash();
$json['redirect'] = $data['destino'] ? url($data['destino']) : url("/restrito");
} else {
$json['message'] = $auth->message()->before("Ooops! ")->render();
}
echo json_encode($json);
return;
}
/**
* SITE PASSWORD FORGET
* @param null|array $data
*/
public function forget(?array $data)
{
if (Auth::user()) {
redirect("/");
}
if (!empty($data['csrf'])) {
if (!csrf_verify($data)) {
$json['message'] = $this->message->error("Erro ao enviar, favor use o formulário")->render();
echo json_encode($json);
return;
}
if (empty($data["email"])) {
$json['message'] = $this->message->info("Informe seu e-mail para continuar")->render();
echo json_encode($json);
return;
}
if (request_repeat("webforget", $data["email"])) {
$json['message'] = $this->message->error("Ooops! Você já tentou este e-mail antes")->render();
echo json_encode($json);
return;
}
$auth = new Auth();
if ($auth->forget($data["email"])) {
$json["message"] = $this->message->success("Acesse seu e-mail para recuperar a senha")->render();
} else {
$json["message"] = $auth->message()->before("Ooops! ")->render();
}
echo json_encode($json);
return;
}
$head = $this->seo->render(
"Recuperar Senha - " . CONF_SITE_NAME,
CONF_SITE_DESC,
url("/recuperar"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("auth-forget", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Recuperar Senha",
"subtitle" => "Qual seu email cadastrado?",
],"breadcrumb" => (object)[
["Recuperar Senha", "#"]
]
]);
}
/**
* SITE FORGET RESET
* @param array $data
*/
public function reset(array $data): void
{
if (Auth::user()) {
redirect("/app");
}
if (!empty($data['csrf'])) {
if (!csrf_verify($data)) {
$json['message'] = $this->message->error("Erro ao enviar, favor use o formulário")->render();
echo json_encode($json);
return;
}
if (empty($data["password"]) || empty($data["password_re"])) {
$json["message"] = $this->message->info("Informe e repita a senha para continuar")->render();
echo json_encode($json);
return;
}
list($email, $code) = explode("|", $data["code"]);
$auth = new Auth();
if ($auth->reset($email, $code, $data["password"], $data["password_re"])) {
$this->message->success("Senha alterada com sucesso. Vamos controlar?")->flash();
$json["reload"] = true;
} else {
$json["message"] = $auth->message()->before("Ooops! ")->render();
}
echo json_encode($json);
return;
}
$head = $this->seo->render(
"Crie sua nova senha no " . CONF_SITE_NAME,
CONF_SITE_DESC,
url("/recuperar"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("auth-reset", [
"head" => $head,
"code" => $data["code"],
"pageTitle" => (object)[
"title" => "Nova Senha",
"subtitle" => "Cadastre uma nova senha",
],"breadcrumb" => (object)[
["Nova Senha", "#"]
]
]);
}
/**
* SITE REGISTER
* @param null|array $data
*/
public function register(?array $data): void
{
if (Auth::user()) {
redirect("/");
}
if (!empty($data['csrf'])) {
if (!csrf_verify($data)) {
$json['message'] = $this->message->error("Erro ao enviar, favor use o formulário")->render();
echo json_encode($json);
return;
}
if ($data["password"] != $data["verify_password"]) {
$json['message'] = $this->message->warning("Senhas devem ser iguais")->render();
echo json_encode($json);
return;
}
$auth = new Auth();
$user = new User();
$user->bootstrap($data["first_name"], $data["last_name"], $data["email"],$data["password"],$data["document"],$data["phone"],$data["datebirth"],$data["celular"]);
if ($auth->register($user)) {
$login = $auth->login($data['email'], $data['password'], false);
if ($login) {
$this->message->success("Seja bem-vindo " . Auth::user()->first_name . "!")->flash();
$json['redirect'] = url($data["destino"]);
} else {
$json['message'] = $auth->message()->before("Ooops! ")->render();
}
echo json_encode($json);
return;
} else {
$json['message'] = $auth->message()->before("Ooops! ")->render();
}
echo json_encode($json);
return;
}
$head = $this->seo->render(
"Criar Conta - " . CONF_SITE_NAME,
CONF_SITE_DESC,
url("/cadastrar"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("auth-register", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Cadastrar",
"subtitle" => "Faça seu cadastro",
],"breadcrumb" => (object)[
["Cadastro", "#"]
]
]);
}
/**
* SITE RESTRICTED
* @param null|array $data
*/
public function restricted(?array $data): void
{
if (!Auth::user()) {
redirect("/");
}
$variableData = null;
$page = filter_var($data["page"], FILTER_SANITIZE_STRIPPED);
if($page == ""){
$render = "views/restricted/home";
$title = "Bem Vinda(o) ".user()->fullName();
$breadcrumb = (object)[["Minha Conta", "#"]];
$selected = "restrito/";
}
if($page == "perfil"){
$render = "views/restricted/profile";
$title = "Seu Perfil";
$breadcrumb = (object)[["Minha Conta", url("restrito")], ["Perfil", "#"]];
$selected = "restrito/perfil";
}
if($page == "login"){
$render = "views/restricted/login";
$title = "Dados de Login";
$breadcrumb = (object)[["Minha Conta", url("restrito")], ["Segurança", "#"]];
$selected = "restrito/login";
}
if($page == "enderecos"){
$render = "views/restricted/adress";
$title = "Meus Endereços";
$breadcrumb = (object)[["Minha Conta", url("restrito")], ["Endereços", "#"]];
$selected = "restrito/enderecos";
$variableData = new Address();
$uid = \user()->data()->id;
$variableData = $variableData->find("user_id = :uid", "uid={$uid}")->fetch(true);
}
if($page == "pedidos"){
$render = "views/restricted/invoices";
$title = "Meus Pedidos";
$breadcrumb = (object)[["Minha Conta", url("restrito")], ["Pedidos", "#"]];
$variableData = new Orders();
$uid = \user()->data()->id;
$variableData = $variableData->find("user_id = :uid", "uid={$uid}")->fetch(true);
$selected = "restrito/pedidos";
}
if($page == "cartoes"){
$render = "views/restricted/billing";
$title = "Cartões";
$breadcrumb = (object)[["Minha Conta", url("restrito")], ["Cartões", "#"]];
$selected = "restrito/cartoes";
$variableData = new CreditCard();
$uid = \user()->data()->id;
$variableData = $variableData->find("user_id = :uid", "uid={$uid}")->fetch(true);
}
$head = $this->seo->render(
"Meu Perfil - " . CONF_SITE_NAME,
CONF_SITE_DESC,
url("/restrito"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("user-area", [
"head" => $head,
"selected" => $selected,
"render" => $render,
"variableData" => $variableData,
"pageTitle" => (object)[
"title" => $title,
"subtitle" => user()->fullName(),
],"breadcrumb" => $breadcrumb
]);
}
/**
* @param array $data
*/
public function order(array $data) : void
{
if (!Auth::user()) {
redirect("/");
}
$order_id = filter_var($data["order_id"], FILTER_SANITIZE_STRIPPED);
$order = (new Orders())->findById($order_id);
$itens = (new OrderItens())->find("order_id = :order_id", "order_id={$order->id}")->fetch(true);
$head = $this->seo->render(
"Pedido - [#" . order_id($order->id) . "] | " . CONF_SITE_NAME,
CONF_SITE_DESC,
url("/restrito/"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("order", [
"head" => $head,
"selected" => "restrito/pedidos",
"itens" => $itens,
"order" => $order,
"pageTitle" => (object)[
"title" => "Pedido",
"subtitle" => user()->fullName(),
],"breadcrumb" => (object)[["Minha Conta", url("restrito")], ["Pedidos", "#"]]
]);
}
/**
* @param array $data
*/
public function profile(array $data) : void
{
if (!empty($data['csrf'])) {
if (!csrf_verify($data)) {
$json['message'] = $this->message->error("Erro ao enviar, favor use o formulário")->render();
echo json_encode($json);
return;
}
if (isset($data) AND $data["action"] == "profile") {
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$userUpdate = (new User())->findById($data["id"]);
if (!$userUpdate) {
$this->message->error("Você tentou gerenciar um usuário que não existe")->flash();
echo json_encode(["redirect" => url("/")]);
return;
}
$userUpdate->first_name = $data["first_name"];
$userUpdate->last_name = $data["last_name"];
$userUpdate->email = $userUpdate->email;
$userUpdate->password = (!empty($data["password"]) ? $data["password"] : $userUpdate->password);
//$userUpdate->genre = $data["genre"];
$userUpdate->datebirth = date_fmt_back($data["datebirth"]);
$userUpdate->document = preg_replace("/[^0-9]/", "", $data["document"]);
$userUpdate->about = $data["about"];
$userUpdate->phone = $data["phone"];
$userUpdate->celular = $data["celular"];
//upload photo
if (!empty($_FILES["photo"])) {
if ($userUpdate->photo && file_exists(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$userUpdate->photo}")) {
unlink(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$userUpdate->photo}");
(new Thumb())->flush($userUpdate->photo);
}
$files = $_FILES["photo"];
$upload = new Upload();
$image = $upload->image($files, $userUpdate->fullName(), 600);
if (!$image) {
$json["message"] = $upload->message()->render();
echo json_encode($json);
return;
}
$userUpdate->photo = $image;
}
if (!$userUpdate->save()) {
$json["message"] = $userUpdate->message()->render();
echo json_encode($json);
return;
}
$this->message->success("Usuário atualizado com sucesso...")->flash();
echo json_encode(["redirect" => url("restrito/perfil")]);
return;
}
if (isset($data) AND $data["action"] == "login") {
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$userUpdate = (new User())->findById($data["id"]);
if (!$userUpdate) {
$this->message->error("Você tentou gerenciar um usuário que não existe")->flash();
echo json_encode(["redirect" => url("/")]);
return;
}
if(!isset($data["password"]) OR $data["password"] == "" OR !isset($data["re_password"]) OR $data["re_password"] == ""){
$json['message'] = $this->message->error("Você Precisa digitar uma senha e confirmar a mesma")->render();
echo json_encode($json);
return;
}
if($data["re_password"] != $data["password"]){
$json['message'] = $this->message->error("As senha digitadas não são iguais")->render();
echo json_encode($json);
return;
}
$userUpdate->first_name = $userUpdate->first_name;
$userUpdate->last_name = $userUpdate->last_name;
$userUpdate->email = $userUpdate->email;
$userUpdate->password = $data["password"];
$userUpdate->datebirth = $userUpdate->datebirth;
$userUpdate->document = $userUpdate->document;
$userUpdate->phone = $userUpdate->phone;
//upload photo
if (!$userUpdate->save()) {
$json["message"] = $userUpdate->message()->render();
echo json_encode($json);
return;
}
$this->message->success("Usuário atualizado com sucesso...")->flash();
echo json_encode(["redirect" => url("restrito")]);
return;
}
}
return;
}
/**
* @param $data
*/
public function address($data) : void
{
if(isset($data) AND $data["action"] == "search"){
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$zipcode = new ViaCEP();
$json["callback"] = (object)$zipcode->findByZipCode($data['zipcode'])->toArray();
echo json_encode($json);
return;
}
if(isset($data) AND $data["action"] == "complete"){
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$complete = (new Address())->findById($data['id']);
$json["zipcode"] = $complete->zipcode;
$json["street"] = $complete->street;
$json["number"] = $complete->number;
$json["complement"] = $complete->complement;
$json["neighborhood"] = $complete->neighborhood;
$json["city"] = $complete->city;
$json["state"] = $complete->state;
$json["type"] = $complete->type;
echo json_encode($json);
return;
}
if(isset($data) AND $data["action"] == "add"){
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
if (!csrf_verify($data)) {
$json['message'] = $this->message->error("Erro ao enviar, favor use o formulário")->render();
echo json_encode($json);
return;
}
$addressCreate = new Address();
$addressCreate->user_id = $data["user_id"];
$addressCreate->zipcode = $data["zipcode"];
$addressCreate->street = $data["street"];
$addressCreate->number = $data["number"];
$addressCreate->complement = $data["complement"] ? $data["complement"] : "";
$addressCreate->neighborhood = $data["neighborhood"];
$addressCreate->city = $data["city"];
$addressCreate->state = $data["state"];
$addressCreate->type = $data["type"];
$addressCreate->ibge = $data["ibge"] ? $data["ibge"] : "vazio";
if (!$addressCreate->save()) {
$json["message"] = $addressCreate->message()->render();
echo json_encode($json);
return;
}
if(isset($data["destino"])){
$json['message'] = $this->message->success("Endereço Cadastrado com Sucesso")->flash();
echo json_encode(["redirect" => url($data["destino"])]);
$session = new Session();
$session->set("cep",
[ "cep"=>$data["zipcode"],
"endereco" => $addressCreate->data()->street,
"numero" => $addressCreate->data()->number,
"bairro"=>$addressCreate->neighborhood,
"complemento"=>$addressCreate->complement,
"cidade"=>$addressCreate->city,
"estado"=>$addressCreate->state
]);
return;
}
$json['message'] = $this->message->success("Endereço Cadastrado com Sucesso")->flash();
echo json_encode(["redirect" => url("restrito/enderecos")]);
return;
}
if(isset($data) AND $data["action"] == "update"){
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
if (!csrf_verify_alt($data)) {
$json['message'] = $this->message->error("Erro ao enviar, favor use o formulário")->render();
echo json_encode($json);
return;
}
$addressUpdate = (new Address())->findById($data["id"]);
if (!$addressUpdate) {
$this->message->error("Você tentou atualizar um endereço que não existe ou foi removido")->flash();
echo json_encode(["redirect" => url("/restrito")]);
return;
}
$addressUpdate->user_id = $data["user_id"];
$addressUpdate->zipcode = $data["zipcode"];
$addressUpdate->street = $data["street"];
$addressUpdate->number = $data["number"];
$addressUpdate->complement = $data["complement"] ? $data["complement"] : "";
$addressUpdate->neighborhood = $data["neighborhood"];
$addressUpdate->city = $data["city"];
$addressUpdate->state = $data["state"];
$addressUpdate->type = $data["type"];
$addressUpdate->ibge = $data["ibge"] ? $data["ibge"] : "";
if (!$addressUpdate->save()) {
$json["message"] = $addressUpdate->message()->render();
echo json_encode($json);
return;
}
$json['message'] = $this->message->success("Endereço Atualizado com Sucesso")->flash();
echo json_encode(["redirect" => url("restrito/enderecos")]);
return;
}
if(isset($data) AND $data["action"] == "delete"){
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$addressDelete = (new Address())->findById($data["id"]);
if (!$addressDelete) {
$this->message->error("Você tentou excluir um endereço que não existe ou já foi removido")->flash();
echo json_encode(["reload" => true]);
return;
}
$addressDelete->destroy();
$json['message'] = $this->message->success("Endereço Deletado com Sucesso")->flash();
echo json_encode(["redirect" => url("restrito/enderecos")]);
return;
}
}
/**
* @param array $data
*/
public function cart(array $data) : void
{
if(verifyAddress()){
$frete = new \stdClass();
$calcula = new Frete();
$frete->pac = $calcula->pac();
$frete->sedex = $calcula->sedex();
}
$head = $this->seo->render(
"Carrinho de produtos - " . CONF_SITE_NAME,
CONF_SITE_DESC,
url("/produtos/carrinho"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("cart", [
"active" => "carrinho",
"head" => $head,
"frete" => $frete,
"pageTitle" => (object)[
"title" => "Carrinho",
"subtitle" => "Carrinho de Produtos",
],"breadcrumb" => (object)[
["Carrinho", "#"]
]
]);
}
/**
* @param array|null $data
*/
public function checkOut(?array $data) : void
{
$shipping = null;
$frete = new Session();
$cart = new Cart(CARRINHO);
$variableData = null;
$cCard = null;
if($cart->count() < 1){
redirect("/carrinho");
}
$page = filter_var($data["page"], FILTER_SANITIZE_STRIPPED);
if($page == "entrar"){
if (Auth::user() AND $cart->count() >= 1) {
redirect("/fechar/endereco");
}
$active = "fechar/entrar";
$render = "views/checkout-login";
$title = "Login";
$subtitle = "Efetue o Login";
$breadcrumb = (object)[["Fechar Pedido", "#"]];
}
if($page == "endereco"){
if(!Auth::user()){
redirect("/fechar/entrar");
}
if($cart->count() < 1){
redirect("/carrinho");
}
$frete->unset("frete");
if(verifyAddress()){
$shipping = new \stdClass();
$calcula = new Frete();
$shipping->pac = $calcula->pac();
$shipping->sedex = $calcula->sedex();
}
$active = "fechar/endereco";
$render = "views/checkout-address";
$title = "Finalize o Pedido";
$subtitle = "Confira seus dados";
$variableData = new Address();
$uid = \user()->data()->id;
$variableData = $variableData->find("user_id = :uid", "uid={$uid}")->fetch(true);
$breadcrumb = (object)[["Fechar Pedido", url("fechar")], ["Endereço", "#"]];
}
// INCLUI PAGINA DE PAGAR
if($page == "pagar"){
if(!Auth::user()){
redirect("/fechar/entrar");
}
if($cart->count() < 1){
redirect("/carrinho");
}
if(!$frete->has("frete")){
redirect("/fechar/endereco");
}
$active = "fechar/pagar";
$render = "views/checkout-payment";
$title = "Pagamento";
$subtitle = "Confira os dados do Pedido";
$variableData = $frete;
$breadcrumb = (object)[["Fechar pedido", url("fechar")], ["Pagar", "#"]];
$card = new CreditCard();
$uid = \user()->data()->id;
$cCard = $card->find("user_id = :uid", "uid={$uid}")->fetch(true);
}
//CONTROLA VIA POST O CONTROLE DE FRETE
if($data['action'] == "frete"){
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
if(!isset($data["type"])){
$json['message'] = $this->message->error("Frete não selecionado")->flash();
$json['redirect'] = url("fechar/endereco");
echo json_encode($json);
return;
}
if($frete->has("frete")){
$frete->unset("frete");
}
if($data["type"] == "Retirada"){
$frete->set("frete", ["type"=>$data["type"], "price"=>0.00]);
$json['redirect'] = url("fechar/pagar");
echo json_encode($json);
return;
}
if($data["type"] == "Sedex"){
$frete->set("frete", ["type"=>$data["type"], "price"=>(new Frete())->sedex()->price]);
$json['redirect'] = url("fechar/pagar");
echo json_encode($json);
return;
}
if($data["type"] == "PAC"){
$frete->set("frete", ["type"=>$data["type"], "price"=>(new Frete())->pac()->price]);
$json['redirect'] = url("fechar/pagar");
echo json_encode($json);
return;
}
$json['message'] = $this->message->error("Não conseguimos calcular seu pedido, favor entrar em contato com nossa equipe")->flash();
$json['redirect'] = url("carrinho");
echo json_encode($json);
return;
}
if($page == "deslogar"){
Auth::logout();
redirect("/fechar/entrar");
}
$head = $this->seo->render(
"Finalizar Compras - " . CONF_SITE_NAME,
CONF_SITE_DESC,
url("/checkout"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("checkout", [
"active" => $active,
"head" => $head,
"shipping" => $shipping,
"variableData" => $variableData,
"cCard" => $cCard,
"render" => $render,
"pageTitle" => (object)[
"title" => $title,
"subtitle" => $subtitle,
],"breadcrumb" => $breadcrumb
]);
}
/**
* FINALIZAÇÃO DO PEDIDO
*/
public function receipt(array $data): void
{
$order = (new Orders())->findByIntegrationOrder($data["order_id"]);
if(\user()->data()->id != $order->user_id ){
redirect("/");
}
$sesion = new Session();
$sesion->unset("frete");
$cart = new Cart(CARRINHO);
$cart->clear();
$head = $this->seo->render(
"Pedido Concluído - " . CONF_SITE_NAME,
CONF_SITE_DESC,
url("/finalizar/$order->id"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("checkout-end", [
"head" => $head,
"order" => $order,
"active" => "finalizar",
"pageTitle" => (object)[
"title" => "Obrigado por comprar conosco",
"subtitle" => "Pedido [#" . order_id($order->id)."]",
],"breadcrumb" => (object)[
["Obrigado", "#"]
]
]);
}
/**
* SITE OPT-IN CONFIRM
*/
public function confirm(): void
{
$head = $this->seo->render(
"Confirme Seu Cadastro - " . CONF_SITE_NAME,
CONF_SITE_DESC,
url("/confirma"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("optin", [
"head" => $head,
"data" => (object)[
"title" => "Falta pouco! Confirme seu cadastro.",
"desc" => "Enviamos um link de confirmação para seu e-mail. Acesse e siga as instruções para concluir seu cadastro e comece a controlar com o CaféControl",
"image" => theme("/assets/images/optin-confirm.jpg")
]
]);
}
/**
* SITE OPT-IN SUCCESS
* @param array $data
*/
public function success(array $data): void
{
$email = base64_decode($data["email"]);
$user = (new User())->findByEmail($email);
if ($user && $user->status != "confirmed") {
$user->status = "confirmed";
$user->save();
}
$head = $this->seo->render(
"Bem-vindo(a) ao " . CONF_SITE_NAME,
CONF_SITE_DESC,
url("/obrigado"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("optin", [
"head" => $head,
"data" => (object)[
"title" => "Tudo pronto. Você já pode controlar :)",
"desc" => "Bem-vindo(a) ao seu controle de contas, vamos tomar um café?",
"image" => theme("/assets/images/optin-success.jpg"),
"link" => url("/entrar"),
"linkTitle" => "Fazer Login"
],
"track" => (object)[
"fb" => "Lead",
"aw" => "AW-953362805/yAFTCKuakIwBEPXSzMYD"
]
]);
}
/**
* SITE TERMS
*/
public function terms(): void
{
$head = $this->seo->render(
CONF_SITE_NAME . " - Termos de uso",
CONF_SITE_DESC,
url("/termos"),
theme("/assets/images/sharer.jpg")
);
echo $this->view->render("terms", [
"head" => $head,
"pageTitle" => (object)[
"title" => "Termos e condições",
"subtitle" => "Confira nossos termos e condições"],
"breadcrumb" => (object)[
["Termos e Condições", "#"]]
]);
}
/**
* SITE TERMS
*/
public function newsletter(array $data): void
{
if(isset($data["action"]) AND $data["action"] == "newsletter"){
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
if (request_limit("newsletter", 5, 60*3)) {
$json['message'] = $this->message->error("Você já efetuou 5 tentativas de cadastro, esse é o limite. Por favor, aguarde 3 minutos para tentar novamente!")->render();
echo json_encode($json);
return;
}
if(in_array("", $data)){
$json['message'] = $this->message->warning("Você deve preencher seu email")->render();
echo json_encode($json);
return;
}
if(!is_email($data['email'])){
$json['message'] = $this->message->info("Formato de email inválido")->render();
echo json_encode($json);
return;
}
$newsletter = (new Newsletter())->findByEmail($data["email"]);
if($newsletter){
$json['message'] = $this->message->info("Seu email já está em nossa newsletter")->render();
echo json_encode($json);
return;
}
$newsCreate = new Newsletter();
$newsCreate->email = $data["email"];
$newsCreate->save();
$json['message'] = $this->message->success("Inscrição Efetuada com sucesso {$newsletter->email}")->render();
echo json_encode($json);
return;
}
}
/**
*
*/
public function logout(): void
{
$this->message->info("Você saiu com sucesso " . Auth::user()->first_name . ". Volte logo :)")->flash();
Auth::logout();
redirect("/");
}
public function ctaDownload(array $data) : void
{
if(isset($data["action"]) AND ($data["action"] == "catalogo" OR $data["action"] == "perfil")){
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
if (request_limit("cta", 5, 60*3)) {
$json['message'] = $this->message->error("Você já efetuou 5 tentativas, esse é o limite. Por favor, aguarde 3 minutos para tentar novamente!")->render();
echo json_encode($json);
return;
}
if(in_array("", $data)){
$json['message'] = $this->message->warning("Você deve preencher seu email")->render();
echo json_encode($json);
return;
}
if(!is_email($data['email'])){
$json['message'] = $this->message->info("Formato de email inválido")->render();
echo json_encode($json);
return;
}
$prod = (new Product())->findById($data["id"]);
$cta = new \stdClass();
$cta->url = $data["action"] == "catalogo" ? url("storage/".$prod->manual) : url("storage/".$prod->perfil);
$cta->text = $data["action"] == "catalogo" ? "Catálogo <b>{$prod->title}</b>" : "Perfil <b>{$prod->title}</b>";
$view = new View(__DIR__ . "/../../shared/views/email");
$message = $view->render("cta-download", [
"cta" => $cta
]);
(new Email())->bootstrap(
"Seu arquivo está pronto para download! " . CONF_SITE_NAME,
$message,
$data["email"], $data["email"]
)->send(CONF_EMAIL, CONF_SITE_NAME);
$newsletter = (new Newsletter())->findByEmail($data["email"]);
if($newsletter){
$json['message'] = $this->message->success("Arquivo enviado com sucesso para {$data["email"]}! Caso não receba verifique seu SPAM")->render();
echo json_encode($json);
return;
}
$newsCreate = new Newsletter();
$newsCreate->email = $data["email"];
$newsCreate->origin = "Arquivos";
$newsCreate->save();
$json['message'] = $this->message->success("Arquivo enviado com sucesso para {$data["email"]}! Caso não receba verifique seu SPAM")->render();
echo json_encode($json);
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/sharer.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", "#"]
]
]);
}
}