С 9:00 до 21:00 Без выходных

public/assets/js/task_manager.js

Вот содержимое файла public/assets/js/task_manager.js:

// Task Manager JavaScript

// Handle Task Filtering
function filterTasks() {
    let statusFilter = document.getElementById('statusFilter').value;
    let userFilter = document.getElementById('userFilter').value;
    let categoryFilter = document.getElementById('categoryFilter').value;
    let priorityFilter = document.getElementById('priorityFilter').value;
    let tagFilter = document.getElementById('tagFilter').value;

    // Prepare request data
    let data = {
        status: statusFilter,
        user: userFilter,
        category: categoryFilter,
        priority: priorityFilter,
        tag: tagFilter
    };

    // Perform AJAX request to fetch filtered tasks
    fetch('/index.php?route=extension/task_manager/filterTasks', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(data)
    })
    .then(response => response.json())
    .then(result => {
        // Update task list
        updateTaskList(result);
    })
    .catch(error => console.error('Error filtering tasks:', error));
}

// Update Task List
function updateTaskList(tasks) {
    let taskListContainer = document.getElementById('taskListContainer');
    taskListContainer.innerHTML = '';

    tasks.forEach(task => {
        let taskItem = document.createElement('div');
        taskItem.classList.add('task-item');
        taskItem.innerHTML = `
            <h3>${task.title}</h3>
            <p>${task.description}</p>
            <div class="task-status ${task.status}">${task.status}</div>
            <div class="task-priority">${task.priority}</div>
            <div class="task-due-date">${task.due_date}</div>
        `;
        taskListContainer.appendChild(taskItem);
    });
}

// Handle Task Creation
document.getElementById('createTaskForm').addEventListener('submit', function(event) {
    event.preventDefault();
    
    let title = document.getElementById('taskTitle').value;
    let description = document.getElementById('taskDescription').value;
    let user = document.getElementById('taskUser').value;
    let category = document.getElementById('taskCategory').value;
    let priority = document.getElementById('taskPriority').value;
    let dueDate = document.getElementById('taskDueDate').value;
    let tags = document.getElementById('taskTags').value;

    // Prepare task data
    let taskData = {
        title: title,
        description: description,
        user: user,
        category: category,
        priority: priority,
        due_date: dueDate,
        tags: tags
    };

    // Perform AJAX request to create task
    fetch('/index.php?route=extension/task_manager/createTask', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(taskData)
    })
    .then(response => response.json())
    .then(result => {
        if (result.success) {
            alert('Task created successfully!');
            // Clear form
            document.getElementById('createTaskForm').reset();
            // Refresh task list
            filterTasks();
        } else {
            alert('Error creating task');
        }
    })
    .catch(error => console.error('Error creating task:', error));
});

// Handle Task Editing
function editTask(taskId) {
    // Fetch task data for editing
    fetch(`/index.php?route=extension/task_manager/getTask&id=${taskId}`)
    .then(response => response.json())
    .then(task => {
        // Populate form with task data
        document.getElementById('taskTitle').value = task.title;
        document.getElementById('taskDescription').value = task.description;
        document.getElementById('taskUser').value = task.user;
        document.getElementById('taskCategory').value = task.category;
        document.getElementById('taskPriority').value = task.priority;
        document.getElementById('taskDueDate').value = task.due_date;
        document.getElementById('taskTags').value = task.tags;

        // Change form action to update task
        document.getElementById('createTaskForm').setAttribute('data-action', 'edit');
        document.getElementById('createTaskForm').setAttribute('data-task-id', taskId);
    })
    .catch(error => console.error('Error fetching task data:', error));
}

// Handle Task Update
document.getElementById('createTaskForm').addEventListener('submit', function(event) {
    event.preventDefault();
    
    let action = document.getElementById('createTaskForm').getAttribute('data-action');
    let taskId = document.getElementById('createTaskForm').getAttribute('data-task-id');
    
    let title = document.getElementById('taskTitle').value;
    let description = document.getElementById('taskDescription').value;
    let user = document.getElementById('taskUser').value;
    let category = document.getElementById('taskCategory').value;
    let priority = document.getElementById('taskPriority').value;
    let dueDate = document.getElementById('taskDueDate').value;
    let tags = document.getElementById('taskTags').value;

    let taskData = {
        title: title,
        description: description,
        user: user,
        category: category,
        priority: priority,
        due_date: dueDate,
        tags: tags
    };

    let url = action === 'edit' ? `/index.php?route=extension/task_manager/updateTask&id=${taskId}` : '/index.php?route=extension/task_manager/createTask';

    fetch(url, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(taskData)
    })
    .then(response => response.json())
    .then(result => {
        if (result.success) {
            alert(action === 'edit' ? 'Task updated successfully!' : 'Task created successfully!');
            // Clear form
            document.getElementById('createTaskForm').reset();
            document.getElementById('createTaskForm').removeAttribute('data-action');
            document.getElementById('createTaskForm').removeAttribute('data-task-id');
            // Refresh task list
            filterTasks();
        } else {
            alert('Error saving task');
        }
    })
    .catch(error => console.error('Error saving task:', error));
});

// Handle Task Deletion
function deleteTask(taskId) {
    if (confirm('Are you sure you want to delete this task?')) {
        fetch(`/index.php?route=extension/task_manager/deleteTask&id=${taskId}`, {
            method: 'GET'
        })
        .then(response => response.json())
        .then(result => {
            if (result.success) {
                alert('Task deleted successfully!');
                // Refresh task list
                filterTasks();
            } else {
                alert('Error deleting task');
            }
        })
        .catch(error => console.error('Error deleting task:', error));
    }
}

// Handle Task Sorting
function sortTasks(sortBy) {
    let sortOrder = document.getElementById('sortOrder').value;

    fetch(`/index.php?route=extension/task_manager/sortTasks&sortBy=${sortBy}&sortOrder=${sortOrder}`, {
        method: 'GET'
    })
    .then(response => response.json())
    .then(result => {
        // Update task list
        updateTaskList(result);
    })
    .catch(error => console.error('Error sorting tasks:', error));
}

// Handle Pagination
function changePage(page) {
    fetch(`/index.php?route=extension/task_manager/changePage&page=${page}`, {
        method: 'GET'
    })
    .then(response => response.json())
    .then(result => {
        // Update task list
        updateTaskList(result);
    })
    .catch(error => console.error('Error changing page:', error));
}

Объяснение:

  1. Фильтрация задач: Функция filterTasks отправляет запрос для фильтрации задач по различным критериям, таким как статус, пользователь, категория, приоритет и теги.

  2. Обновление списка задач: Функция updateTaskList обновляет HTML содержимое списка задач после фильтрации или создания/редактирования задач.

  3. Создание задачи: Форма для создания задачи с помощью события submit на форме. Данные отправляются через AJAX.

  4. Редактирование задачи: Функция editTask получает данные о задаче для редактирования, заполняет форму редактирования и изменяет действие формы на обновление.

  5. Обновление задачи: При обновлении задачи данные отправляются через AJAX для сохранения изменений.

  6. Удаление задачи: Функция deleteTask удаляет задачу по идентификатору.

  7. Сортировка задач: Функция sortTasks сортирует задачи по выбранному полю и направлению сортировки.

  8. Пагинация: Функция changePage изменяет страницу задач при изменении страницы в пагинации.

Этот файл управляет действиями и динамическим поведением на фронтенде для модуля "Менеджер задач".