File: //home/artinside/sites.artinside.com.br/festival/source/App/Admin/Speaker.php
<?php
namespace Source\App\Admin;
use Source\Models\Speakers;
use Source\Support\Pager;
use Source\Support\Thumb;
use Source\Support\Upload;
/**
* Class Speaker
* @package Source\App\Admin
*/
class Speaker extends Admin
{
/**
* Speaker 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("/admin/speakers/home/{$s}/1")]);
return;
}
$search = null;
$speakers = (new Speakers())->find();
if (!empty($data["search"]) && str_search($data["search"]) != "all") {
$search = str_search($data["search"]);
$speakers = (new Speakers())->find("MATCH(first_name, last_name, email) AGAINST(:s)", "s={$search}");
if (!$speakers->count()) {
$this->message->info("Sua pesquisa não retornou resultados")->flash();
redirect("/admin/speakers/home");
}
}
$all = ($search ?? "all");
$pager = new Pager(url("/admin/speakers/home/{$all}/"));
$pager->pager($speakers->count(), 12, (!empty($data["page"]) ? $data["page"] : 1));
$head = $this->seo->render(
CONF_SITE_NAME . " | Palestrantes",
CONF_SITE_DESC,
url("/admin"),
url("/admin/assets/images/image.jpg"),
false
);
echo $this->view->render("widgets/speakers/home", [
"app" => "speakers/home",
"head" => $head,
"search" => $search,
"speakers" => $speakers->order("name")->limit($pager->limit())->offset($pager->offset())->fetch(true),
"paginator" => $pager->render()
]);
}
/**
* @param array|null $data
* @throws \Exception
*/
public function speaker(?array $data): void
{
//create
if (!empty($data["action"]) && $data["action"] == "create") {
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$speakerCreate = new Speakers();
$speakerCreate->name = $data["name"];
$speakerCreate->profession = $data["profession"];
$speakerCreate->company = $data["company"];
$speakerCreate->mundo = $data["mundo"];
$speakerCreate->uri = str_slug($speakerCreate->name);
$speakerCreate->bio = $data["bio"];
//upload cover
if (!empty($_FILES["cover"])) {
$files = $_FILES["cover"];
$upload = new Upload();
$image = $upload->image($files, $speakerCreate->name, 600);
if (!$image) {
$json["message"] = $upload->message()->render();
echo json_encode($json);
return;
}
$speakerCreate->cover = $image;
}
if (!$speakerCreate->save()) {
$json["message"] = $speakerCreate->message()->render();
echo json_encode($json);
return;
}
$this->message->success("Palestrante cadastrado com sucesso...")->flash();
$json["redirect"] = url("/admin/speakers/speaker/{$speakerCreate->id}");
echo json_encode($json);
return;
}
//update
if (!empty($data["action"]) && $data["action"] == "update") {
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$speakerUpdate = (new Speakers())->findById($data["speaker_id"]);
if (!$speakerUpdate) {
$this->message->error("Você tentou gerenciar um palestrante que não existe")->flash();
echo json_encode(["redirect" => url("/admin/speakers/home")]);
return;
}
$speakerUpdate->name = $data["name"];
$speakerUpdate->profession = $data["profession"];
$speakerUpdate->company = $data["company"];
$speakerUpdate->mundo = $data["mundo"];
$speakerUpdate->uri = str_slug($speakerUpdate->name);
$speakerUpdate->bio = $data["bio"];
//upload cover
if (!empty($_FILES["cover"])) {
if ($speakerUpdate->cover && file_exists(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$speakerUpdate->cover}")) {
unlink(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$speakerUpdate->cover}");
(new Thumb())->flush($speakerUpdate->cover);
}
$files = $_FILES["cover"];
$upload = new Upload();
$image = $upload->image($files, $speakerUpdate->name, 600);
if (!$image) {
$json["message"] = $upload->message()->render();
echo json_encode($json);
return;
}
$speakerUpdate->cover = $image;
}
if (!$speakerUpdate->save()) {
$json["message"] = $speakerUpdate->message()->render();
echo json_encode($json);
return;
}
$this->message->success("Palestrante atualizado com sucesso...")->flash();
echo json_encode(["redirect" => url("/admin/speakers/home")]);
return;
}
//delete
if (!empty($data["action"]) && $data["action"] == "delete") {
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$speakerDelete = (new Speakers())->findById($data["speaker_id"]);
if (!$speakerDelete) {
$this->message->error("Você tentnou deletar um palestrante que não existe")->flash();
echo json_encode(["redirect" => url("/admin/speakers/home")]);
return;
}
if ($speakerDelete->cover && file_exists(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$speakerDelete->cover}")) {
unlink(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$speakerDelete->cover}");
(new Thumb())->flush($speakerDelete->cover);
}
$speakerDelete->destroy();
$this->message->success("O palestrante foi excluído com sucesso...")->flash();
echo json_encode(["redirect" => url("/admin/speakers/home")]);
return;
}
$speakerEdit = null;
if (!empty($data["speaker_id"])) {
$speakerId = filter_var($data["speaker_id"], FILTER_VALIDATE_INT);
$speakerEdit = (new Speakers())->findById($speakerId);
}
$head = $this->seo->render(
CONF_SITE_NAME . " | " . ($speakerEdit ? "Perfil de {$speakerEdit->name}" : "Novo palestrante"),
CONF_SITE_DESC,
url("/admin"),
url("/admin/assets/images/image.jpg"),
false
);
echo $this->view->render("widgets/speakers/speaker", [
"app" => "speakers/speaker",
"head" => $head,
"speaker" => $speakerEdit
]);
}
}