File: /home/artinside/sites.artinside.com.br/mainpro/source/App/Admin/Courses.php
<?php
namespace Source\App\Admin;
use Source\Models\Category;
use Source\Models\Course;
use Source\Models\CourseDocuments;
use Source\Models\Documents;
use Source\Models\Service;
use Source\Support\Pager;
use Source\Support\Thumb;
use Source\Support\Upload;
/**
* Class Courses
* @package Source\App\Admin
*/
class Courses extends Admin
{
/**
* Services 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/courses/home/{$s}/1")]);
return;
}
$search = null;
$courses = (new Course())->find();
if (!empty($data["search"]) && str_search($data["search"]) != "all") {
$search = str_search($data["search"]);
$courses = (new Course())->find("title LIKE '%{$search}%'");
if (!$courses->count()) {
$this->message->info("Sua pesquisa não retornou resultados")->flash();
redirect("/admin/courses/home");
}
}
$all = ($search ?? "all");
$pager = new Pager(url("/admin/courses/home/{$all}/"));
$pager->pager($courses->count(), 12, (!empty($data["page"]) ? $data["page"] : 1));
$head = $this->seo->render(
CONF_SITE_NAME . " | Cursos",
CONF_SITE_DESC,
url("/admin"),
url("/admin/assets/images/image.jpg"),
false
);
echo $this->view->render("widgets/courses/home", [
"app" => "courses",
"head" => $head,
"courses" => $courses->limit($pager->limit())->offset($pager->offset())->order("created_at DESC")->fetch(true),
"paginator" => $pager->render(),
"search" => $search
]);
}
/**
* @param array|null $data
* @throws \Exception
*/
public function course(?array $data): void
{
//MCE Upload
if (!empty($data["upload"]) && !empty($_FILES["image"])) {
$files = $_FILES["image"];
$upload = new Upload();
$image = $upload->image($files, "services-" . time());
if (!$image) {
$json["message"] = $upload->message()->render();
echo json_encode($json);
return;
}
$json["mce_image"] = '<img style="width: 100%;" src="' . url("/storage/{$image}") . '" alt="{title}" title="{title}">';
echo json_encode($json);
return;
}
//create
if (!empty($data["action"]) && $data["action"] == "create") {
$create = new Course();
$create->title = $data["title"];
$create->uri = str_slug($create->title);
$create->subtitle = $data["subtitle"];
$create->date = $data["date"];
$create->time = $data["time"];
$create->duration = $data["duration"];
$create->about = $data["about"];
$create->requirements = $data["requirements"];
$create->diferentials = $data["diferentials"];
$create->area = $data["area"];
$create->grade = $data["grade"];
$create->video = $data["video"];
$create->workload = $data["workload"];
$create->aspas = $data["aspas"];
$create->coordenador = $data["coordenador"];
$create->price = ((float)$data["price"]);
$create->discount = ((float)$data["discount"]);
$create->max_installment = ((int)$data["max_installment"]);
$create->class_start = date_fmt_back($data["class_start"]);
$create->limit_enrolment = date_fmt_back($data["limit_enrolment"]);
$create->status = ((int)$data["status"]);
// $create->first_installment = date_fmt_back($data["first_installment"]);
// $create->limit_installment = ((int)$data["limit_installment"]);
// $create->special_price = $data["special_price"];
// $create->objective = $data["objective"];
// $create->metodology = $data["metodology"];
// $create->period = $data["period"];
// $create->enrolment = ((int)$data["enrolment"]);
//upload cover
if (!empty($_FILES["cover"])) {
$files = $_FILES["cover"];
$upload = new Upload();
$image = $upload->image($files, $create->title);
if (!$image) {
$json["message"] = $upload->message()->render();
echo json_encode($json);
return;
}
$create->cover = $image;
}
if (!$create->save()) {
$json["message"] = $create->message()->render();
echo json_encode($json);
return;
}
$this->message->success("Curso publicado com sucesso...")->flash();
$json["redirect"] = url("/admin/courses/course/{$create->id}");
echo json_encode($json);
return;
}
//update
if (!empty($data["action"]) && $data["action"] == "update") {
// $content = $data["content"];
$edit = (new Course())->findById($data["service_id"]);
if (!$edit) {
$this->message->error("Você tentou atualizar um Curso que não existe ou foi removido")->flash();
echo json_encode(["redirect" => url("/admin/courses/home")]);
return;
}
// if(isset($data["documents"]) AND $data["documents"] != ""){
//
// $courseDocuments = (new CourseDocuments())->find("course_id = :cid", "cid={$data["service_id"]}");
// if($courseDocuments->count() != 0){
// foreach ($courseDocuments->fetch(true) as $item) {
// $delete = (new CourseDocuments())->findById($item->id);
// $delete->destroy();
// }
// }
// foreach ($data["documents"] as $document) {
// $cDoc = (new CourseDocuments());
// $cDoc->course_id = $data["service_id"];
// $cDoc->document_id = $document;
//
// $cDoc->save();
// }
// }else{
// $courseDocuments = (new CourseDocuments())->find("course_id = :cid", "cid={$data["service_id"]}");
// if($courseDocuments->count() != 0){
// foreach ($courseDocuments->fetch(true) as $item) {
// $delete = (new CourseDocuments())->findById($item->id);
// $delete->destroy();
// }
// }
// }
$edit->title = $data["title"];
$edit->uri = str_slug($edit->title);
$edit->subtitle = $data["subtitle"];
$edit->date = $data["date"];
$edit->time = $data["time"];
$edit->duration = $data["duration"];
$edit->about = $data["about"];
$edit->video = $data["video"];
$edit->requirements = $data["requirements"];
$edit->diferentials = $data["diferentials"];
$edit->area = $data["area"];
$edit->grade = $data["grade"];
$edit->workload = $data["workload"];
$edit->aspas = $data["aspas"];
$edit->coordenador = $data["coordenador"];
$edit->price = ((float)$data["price"]);
$edit->discount = ((float)$data["discount"]);
$edit->max_installment = ((int)$data["max_installment"]);
$edit->class_start = date_fmt_back($data["class_start"]);
$edit->limit_enrolment = date_fmt_back($data["limit_enrolment"]);
$edit->status = ((int)$data["status"]);
// $edit->enrolment = ((int)$data["enrolment"]);
// $edit->objective = $data["objective"];
// $edit->metodology = $data["metodology"];
// $edit->period = $data["period"];
// $edit->special_price = $data["special_price"];
// $edit->limit_installment = ((int)$data["limit_installment"]);
// $edit->first_installment = date_fmt_back($data["first_installment"]);
//upload cover
if (!empty($_FILES["cover"])) {
if ($edit->cover && file_exists(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$edit->cover}")) {
unlink(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$edit->cover}");
(new Thumb())->flush($edit->cover);
}
$files = $_FILES["cover"];
$upload = new Upload();
$image = $upload->image($files, $edit->title);
if (!$image) {
$json["message"] = $upload->message()->render();
echo json_encode($json);
return;
}
$edit->cover = $image;
}
if (!$edit->save()) {
$json["message"] = $edit->message()->render();
echo json_encode($json);
return;
}
$this->message->success("Curso atualizado com sucesso...")->flash();
echo json_encode(["redirect" => url("/admin/courses/home")]);
return;
}
//delete
if (!empty($data["action"]) && $data["action"] == "delete") {
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$delete = (new Course())->findById($data["service_id"]);
if (!$delete) {
$this->message->error("Você tentou excluir um Curso que não existe ou já foi removido")->flash();
echo json_encode(["reload" => true]);
return;
}
if ($delete->cover && file_exists(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$delete->cover}")) {
unlink(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$delete->cover}");
(new Thumb())->flush($delete->cover);
}
$delete->destroy();
$this->message->success("O Curso foi excluído com sucesso...")->flash();
echo json_encode(["reload" => true]);
return;
}
$edit = null;
if (!empty($data["service_id"])) {
$serviceId = filter_var($data["service_id"], FILTER_VALIDATE_INT);
$edit = (new Course())->findById($serviceId);
}
$head = $this->seo->render(
CONF_SITE_NAME . " | " . ($edit->title ?? "Novo Curso"),
CONF_SITE_DESC,
url("/admin"),
url("/admin/assets/images/image.jpg"),
false
);
echo $this->view->render("widgets/courses/course", [
"app" => "courses",
"head" => $head,
"courses" => $edit,
]);
}
}