billingerp/admin/modules/users/controllers/users_management.php

201 lines
8.2 KiB
PHP

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../includes/init.php';
require_once __DIR__ . '/../models/usermodel.php';
UserModel::setDb($pdo);
$message = '';
$messageType = '';
$action = $_GET['subaction'] ?? 'list';
// POST მოთხოვნების მართვა
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$postAction = $_POST['action'] ?? '';
switch ($postAction) {
case 'add':
$data = [
'first_name' => trim($_POST['first_name'] ?? ''),
'last_name' => trim($_POST['last_name'] ?? ''),
'email' => trim($_POST['email'] ?? ''),
'password' => $_POST['password'] ?? '',
'role' => $_POST['role'] ?? 'user',
'is_active' => isset($_POST['is_active']) ? 1 : 0
];
// ვალიდაცია
$errors = [];
if (empty($data['first_name'])) $errors[] = 'სახელი სავალდებულოა';
if (empty($data['last_name'])) $errors[] = 'გვარი სავალდებულოა';
if (empty($data['email']) || !filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
$errors[] = 'ვალიდური ელ.ფოსტა სავალდებულოა';
}
if (empty($data['password']) || strlen($data['password']) < 6) {
$errors[] = 'პაროლი უნდა იყოს მინიმუმ 6 სიმბოლო';
}
if (!empty($errors)) {
$message = implode('<br>', $errors);
$messageType = 'danger';
} else {
try {
UserModel::createUser($data);
$message = 'მომხმარებელი წარმატებით დაემატა';
$messageType = 'success';
$action = 'list';
} catch (Exception $e) {
$message = 'შეცდომა: ' . $e->getMessage();
$messageType = 'danger';
}
}
break;
case 'edit':
$id = (int)($_POST['id'] ?? 0);
$data = [
'first_name' => trim($_POST['first_name'] ?? ''),
'last_name' => trim($_POST['last_name'] ?? ''),
'email' => trim($_POST['email'] ?? ''),
'password' => $_POST['password'] ?? '',
'role' => $_POST['role'] ?? 'user',
'is_active' => isset($_POST['is_active']) ? 1 : 0
];
// ვალიდაცია
$errors = [];
if (empty($data['first_name'])) $errors[] = 'სახელი სავალდებულოა';
if (empty($data['last_name'])) $errors[] = 'გვარი სავალდებულოა';
if (empty($data['email']) || !filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
$errors[] = 'ვალიდური ელ.ფოსტა სავალდებულოა';
}
if (!empty($data['password']) && strlen($data['password']) < 6) {
$errors[] = 'პაროლი უნდა იყოს მინიმუმ 6 სიმბოლო';
}
if (!empty($errors)) {
$message = implode('<br>', $errors);
$messageType = 'danger';
} else {
try {
UserModel::updateUser($id, $data);
$message = 'მომხმარებელი წარმატებით განახლდა';
$messageType = 'success';
$action = 'list';
} catch (Exception $e) {
$message = 'შეცდომა: ' . $e->getMessage();
$messageType = 'danger';
}
}
break;
case 'delete':
$id = (int)($_POST['id'] ?? 0);
if ($id > 0) {
try {
UserModel::deleteUser($id);
$message = 'მომხმარებელი წარმატებით წაიშალა';
$messageType = 'success';
} catch (Exception $e) {
$message = 'შეცდომა: ' . $e->getMessage();
$messageType = 'danger';
}
}
$action = 'list';
break;
case 'toggle_status':
$id = (int)($_POST['id'] ?? 0);
if ($id > 0) {
try {
UserModel::toggleUserStatus($id);
$message = 'მომხმარებლის სტატუსი შეიცვალა';
$messageType = 'success';
} catch (Exception $e) {
$message = 'შეცდომა: ' . $e->getMessage();
$messageType = 'danger';
}
}
$action = 'list';
break;
case 'change_password':
$id = (int)($_POST['id'] ?? 0);
$currentPassword = $_POST['current_password'] ?? '';
$newPassword = $_POST['new_password'] ?? '';
$confirmPassword = $_POST['confirm_password'] ?? '';
$errors = [];
if (empty($currentPassword)) $errors[] = 'მიმდინარე პაროლი სავალდებულოა';
if (empty($newPassword) || strlen($newPassword) < 6) {
$errors[] = 'ახალი პაროლი უნდა იყოს მინიმუმ 6 სიმბოლო';
}
if ($newPassword !== $confirmPassword) $errors[] = 'პაროლები არ ემთხვევა';
if (!empty($errors)) {
$message = implode('<br>', $errors);
$messageType = 'danger';
} else {
try {
UserModel::changePassword($id, $currentPassword, $newPassword);
$message = 'პაროლი წარმატებით შეიცვალა';
$messageType = 'success';
} catch (Exception $e) {
$message = 'შეცდომა: ' . $e->getMessage();
$messageType = 'danger';
}
}
break;
}
}
// მონაცემების მომზადება view-სთვის
switch ($action) {
case 'add':
case 'edit':
$availableRoles = UserModel::getAvailableRoles();
if ($action === 'edit') {
$editId = (int)($_GET['id'] ?? 0);
$editUser = UserModel::getUserById($editId);
if (!$editUser) {
$message = 'მომხმარებელი ვერ მოიძებნა';
$messageType = 'danger';
$action = 'list';
}
}
break;
case 'profile':
$profileId = (int)($_GET['id'] ?? $_SESSION['user_id'] ?? 0);
$profileUser = UserModel::getUserById($profileId);
if (!$profileUser) {
$message = 'მომხმარებელი ვერ მოიძებნა';
$messageType = 'danger';
$action = 'list';
}
break;
case 'list':
default:
// Search და Filter პარამეტრები
$search = $_GET['search'] ?? '';
$role = $_GET['role'] ?? '';
$status = $_GET['status'] ?? '';
if ($search || $role || $status !== '') {
$users = UserModel::searchUsers($search, $role, $status);
} else {
$users = UserModel::getAllUsers();
}
$userStats = UserModel::getUserStats();
$availableRoles = UserModel::getAvailableRoles();
break;
}
require_once __DIR__ . '/../views/users_management.php';
?>