. namespace tool_langimport\task; /** * Ad hoc task to install one or more language packs. * * @package tool_langimport * @category task * @copyright 2021 David Mudrák * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class install_langpacks extends \core\task\adhoc_task { /** * Execute the ad hoc task. */ public function execute(): void { $data = $this->get_custom_data(); if (empty($data->langs)) { mtrace('No language packs to install'); } get_string_manager()->reset_caches(); $controller = new \tool_langimport\controller(); \core_php_time_limit::raise(); try { $controller->install_languagepacks($data->langs); $this->notify_user_success($controller); } catch (\Throwable $e) { $this->notify_user_error($e->getMessage()); } finally { get_string_manager()->reset_caches(); } } /** * Notify user that the task finished successfully. * * @param \tool_langimport\controller $controller */ protected function notify_user_success(\tool_langimport\controller $controller): void { $message = new \core\message\message(); $message->component = 'moodle'; $message->name = 'notices'; $message->userfrom = \core_user::get_noreply_user(); $message->userto = $this->get_userid(); $message->notification = 1; $message->contexturl = (new \moodle_url('/admin/tool/langimport/index.php'))->out(false); $message->contexturlname = get_string('pluginname', 'tool_langimport'); $message->subject = get_string('installfinished', 'tool_langimport'); $message->fullmessage = '* ' . implode(PHP_EOL . '* ', $controller->info); $message->fullmessageformat = FORMAT_MARKDOWN; $message->fullmessagehtml = markdown_to_html($message->fullmessage); $message->smallmessage = get_string('installfinished', 'tool_langimport'); message_send($message); } /** * Notify user that the task failed. * * @param string $error The error text */ protected function notify_user_error(string $error): void { $message = new \core\message\message(); $message->component = 'moodle'; $message->name = 'notices'; $message->userfrom = \core_user::get_noreply_user(); $message->userto = $this->get_userid(); $message->notification = 1; $message->contexturl = (new \moodle_url('/admin/tool/langimport/index.php'))->out(false); $message->contexturlname = get_string('pluginname', 'tool_langimport'); $message->subject = get_string('installfailed', 'tool_langimport'); $message->fullmessage = $error; $message->fullmessageformat = FORMAT_PLAIN; $message->fullmessagehtml = text_to_html($message->fullmessage); $message->smallmessage = get_string('installfailed', 'tool_langimport'); message_send($message); } }