View file File name : class-updraft-task-manager-commands.php Content :<?php /** * The AJAX Commands manager class */ if (!defined('ABSPATH')) die('Access denied.'); if (!defined('Updraft_Task_Manager_Commands_1_0')) : class Updraft_Task_Manager_Commands_1_0 { protected $task_manager; /** * Constructor * * @param Updraft_Task_Manager_1_4 $task_manager The task manager instance */ public function __construct($task_manager) { $this->task_manager = $task_manager; } /** * A list of allowed commands via AJAX * * @return array - List of allowed commands */ public static function get_allowed_ajax_commands() { $commands = array( 'process_task', 'get_task_status', 'end_task', 'process_queue', 'get_active_tasks', 'clean_up_old_tasks', ); return apply_filters('updraft_task_manager_allowed_ajax_commands', $commands); } /** * Process a single task in the queue * * @param array $data data passed via AJAX * @return void|WP_Error status of the operation */ public function process_task($data) { if (!isset($data['task_id'])) return new WP_Error('id_missing', 'Task ID is missing or invalid'); $task_id = (int) $data['task_id']; $response = apply_filters('updraft_task_manager_process_task_response', "Processing task: {$task_id}", $task_id); $this->close_browser_connection($response); $this->task_manager->process_task($task_id); } /** * Process a single task in the queue * * @param array $data data passed via AJAX * @return String - status of task or false if none found */ public function get_task_status($data) { if (!isset($data['task_id'])) return new WP_Error('id_missing', 'Task ID is missing or invalid'); $task_id = (int) $data['task_id']; return $this->task_manager->get_task_status($task_id); } /** * Ends a given task * * @param array $data data passed via AJAX * @return boolean - Status of the operation. */ public function end_task($data) { if (!isset($data['task_id'])) return new WP_Error('id_missing', 'Task ID is missing or invalid'); $task_id = (int) $data['task_id']; $status = $this->task_manager->end_task($task_id); if (!$status) return new WP_Error('end_task_failed', 'Task is already ended'); $response = apply_filters('updraft_task_manager_end_task_response', "Successfully ended task with id : {$task_id}", $task_id); $this->close_browser_connection($response); } /** * Fetches a list of all active tasks * * @param array $data data passed via AJAX * @return Mixed - array of UpdraftPlus_Task ojects or NULL if none found */ public function get_active_tasks($data) { if (!isset($data['type'])) return new WP_Error('type_missing', 'Task type is missing or invalid'); $type = $data['type']; $tasks = $this->task_manager->get_active_tasks($type); $ids = array(); if ($tasks) { foreach ($tasks as $task) { array_push($ids, $task->get_id()); } } $response = apply_filters('updraft_task_manager_get_active_tasks_response', $ids, $type); return $response; } /** * Cleans out all complete tasks from the DB. * * @param array $data data passed via AJAX * @return void|WP_Error status of the operation */ public function clean_up_old_tasks($data) { if (!isset($data['type'])) return new WP_Error('type_missing', 'Task type is missing or invalid'); $type = $data['type']; $status = $this->task_manager->clean_up_old_tasks($type); if (!$status) return new WP_Error('clean_up_failed', 'Queue is already empty or the task type invalid'); $response = apply_filters('updraft_task_manager_clean_up_old_tasks_response', "Cleaned up old tasks of type : $type", $type); $this->close_browser_connection($response); } /** * Processes a queue of a specific type of task * * @param array $data data passed via AJAX * @return void|WP_Error status of the operation */ public function process_queue($data) { if (!isset($data['type'])) return new WP_Error('type_missing', 'Task type is missing or invalid'); $type = $data['type']; $response = apply_filters('updraft_task_manager_process_queue_response', "Processing queue of type {$type}", $type); $this->close_browser_connection(json_encode($response)); $status = $this->task_manager->process_queue($type); if (!$status) return new WP_Error('process_queue_operation_failed', 'Failed to process the queue'); } /** * Close browser connection so that it can resume AJAX polling * * @param array $txt Response to browser * @return void */ public function close_browser_connection($txt = '') { header('Content-Length: '.((!empty($txt)) ? 5+strlen($txt) : '0')); header('Connection: close'); header('Content-Encoding: none'); if (session_id()) session_write_close(); echo "\r\n\r\n"; echo $txt; $levels = ob_get_level(); for ($i = 0; $i < $levels; $i++) { ob_end_flush(); } flush(); } } endif;