File: /home/artinside/www/finance/source/App/Admin/Users.php
<?php
namespace Source\App\Admin;
use Source\Models\Auth;
use Source\Models\User;
use Source\Support\Pager;
use Source\Support\Thumb;
use Source\Support\Upload;
/**
* Class Users
* @package Source\App\Admin
*/
class Users extends Admin
{
/**
* Users 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/users/home/{$s}/1")]);
return;
}
$search = null;
if(Auth::user()->document == "28793673876"){
$users = (new User())->find();
}else{
$users = (new User())->find("document != '28793673876'");
}
if (!empty($data["search"]) && str_search($data["search"]) != "all") {
$search = str_search($data["search"]);
$users = (new User())->find("MATCH(first_name, last_name, email) AGAINST(:s)", "s={$search}");
if (!$users->count()) {
$this->message->info("Sua pesquisa não retornou resultados")->flash();
redirect("/admin/users/home");
}
}
$all = ($search ?? "all");
$pager = new Pager(url("/admin/users/home/{$all}/"));
$pager->pager($users->count(), 12, (!empty($data["page"]) ? $data["page"] : 1));
$head = $this->seo->render(
CONF_SITE_NAME . " | Usuários",
CONF_SITE_DESC,
url("/admin"),
url("/admin/assets/images/image.jpg"),
false
);
echo $this->view->render("widgets/users/home", [
"app" => "users/home",
"head" => $head,
"search" => $search,
"users" => $users->order("first_name, last_name")->limit($pager->limit())->offset($pager->offset())->fetch(true),
"paginator" => $pager->render(),
"count" => $users->count()
]);
}
/**
* @param array|null $data
* @throws \Exception
*/
public function user(?array $data): void
{
//create
if (!empty($data["action"]) && $data["action"] == "create") {
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$userCreate = new User();
$userCreate->first_name = $data["first_name"];
$userCreate->last_name = $data["last_name"];
$userCreate->email = $data["email"];
$userCreate->password = $data["password"];
$userCreate->level = $data["level"];
$userCreate->genre = $data["genre"];
$userCreate->datebirth = date_fmt_back($data["datebirth"]);
$userCreate->document = preg_replace("/[^0-9]/", "", $data["document"]);
$userCreate->status = $data["status"];
$userCreate->about = $data["about"];
$userCreate->phone = $data["phone"];
$userCreate->celular = $data["celular"];
//upload photo
if (!empty($_FILES["photo"])) {
$files = $_FILES["photo"];
$upload = new Upload();
$image = $upload->image($files, $userCreate->fullName(), 600);
if (!$image) {
$json["message"] = $upload->message()->render();
echo json_encode($json);
return;
}
$userCreate->photo = $image;
}
if (!$userCreate->save()) {
$json["message"] = $userCreate->message()->render();
echo json_encode($json);
return;
}
$this->message->success("Usuário cadastrado com sucesso...")->flash();
$json["redirect"] = url("/admin/users/user/{$userCreate->id}");
echo json_encode($json);
return;
}
//update
if (!empty($data["action"]) && $data["action"] == "update") {
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$userUpdate = (new User())->findById($data["user_id"]);
if (!$userUpdate) {
$this->message->error("Você tentou gerenciar um usuário que não existe")->flash();
echo json_encode(["redirect" => url("/admin/users/home")]);
return;
}
$userUpdate->first_name = $data["first_name"];
$userUpdate->last_name = $data["last_name"];
$userUpdate->email = $data["email"];
$userUpdate->password = (!empty($data["password"]) ? $data["password"] : $userUpdate->password);
$userUpdate->level = $data["level"];
$userUpdate->genre = $data["genre"];
$userUpdate->datebirth = date_fmt_back($data["datebirth"]);
$userUpdate->document = preg_replace("/[^0-9]/", "", $data["document"]);
$userUpdate->status = $data["status"];
$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("/admin/users/home")]);
return;
}
//delete
if (!empty($data["action"]) && $data["action"] == "delete") {
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$userDelete = (new User())->findById($data["user_id"]);
if (!$userDelete) {
$this->message->error("Você tentnou deletar um usuário que não existe")->flash();
echo json_encode(["redirect" => url("/admin/users/home")]);
return;
}
if ($userDelete->photo && file_exists(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$userDelete->photo}")) {
unlink(__DIR__ . "/../../../" . CONF_UPLOAD_DIR . "/{$userDelete->photo}");
(new Thumb())->flush($userDelete->photo);
}
$userDelete->destroy();
$this->message->success("O usuário foi excluído com sucesso...")->flash();
echo json_encode(["redirect" => url("/admin/users/home")]);
return;
}
$userEdit = null;
if (!empty($data["user_id"])) {
$userId = filter_var($data["user_id"], FILTER_VALIDATE_INT);
$userEdit = (new User())->findById($userId);
}
$head = $this->seo->render(
CONF_SITE_NAME . " | " . ($userEdit ? "Perfil de {$userEdit->fullName()}" : "Novo Usuário"),
CONF_SITE_DESC,
url("/admin"),
url("/admin/assets/images/image.jpg"),
false
);
echo $this->view->render("widgets/users/user", [
"app" => "users/user",
"head" => $head,
"user" => $userEdit
]);
}
}