MyBB Community Forums

Full Version: Tasks? How to use?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Good afternoon, everyone,

how exactly can Tasks be used? Suppose I have a plugin with settings and want to check if a setting is set at regular intervals and then execute PHP code.

Do I have to associate the plugin with the task somehow? Can someone show me an example?  Angel


Thanks,
itsmeJAY
Informations about the task system and how to setup one: Task Manager - MyBB Documentation

Every task is connected to a file in the inc/tasks directory, which name is specified in the field "Task File". In this file you will specify what to do when your task is performed inside a function named task_filename, where filename is obv the name of the file connected to the task.

How to integrate it with a plugin? As you can see, to set up a task you just need to add a new task from the task manager (that is gonna insert a new row in the mybb_tasks table) and create a file connected to the task in the tasks directory. So, for integrating it with a plugin you just need to insert a new row in the mybb_tasks table during plugin installation with the specifics of your task, something like:

require_once MYBB_ROOT . '/inc/functions_task.php';

$new_task = [
	'title'			=> 'Task Name',
	'description'	=> 'Task Description.',
	'file'			=> 'filename',
	'minute'		=> '0',
	'hour'			=> '0',
	'day'			=> '*',
	'month'			=> '*',
	'weekday'		=> '*',
	'enabled'		=> '1',
	'logging'		=> '1',
];

$new_task['nextrun'] = fetch_next_run($new_task);

$db->insert_query('tasks', $new_task);
$cache->update_tasks();

And include in your plugin files a new file in the inc/tasks directory:

<?php

function task_filename($task)
{
	global $mybb;

	/*
	 * Your task operations
	 */

	add_task_log($task, "This plugin task successfully ran.");
}
Thank you for this detailed explanation. I still have the following questions: Does the name of the function in the task file have to be defined in the plugin or can I call the function as I like? 

And why we need the Parameter $task in 

function task_filename($task)? 

To add the tasklog or why?

Thank you
itsmeJAY
(2019-06-19, 10:30 PM)itsmeJAY Wrote: [ -> ]Thank you for this detailed explanation. I still have the following questions: Does the name of the function in the task file have to be defined in the plugin or can I call the function as I like? 
As I said here:
(2019-06-19, 06:40 PM)Mipher Wrote: [ -> ]Every task is connected to a file in the inc/tasks directory, which name is specified in the field "Task File". In this file you will specify what to do when your task is performed inside a function named task_filename, where filename is obv the name of the file connected to the task.
So, the field "Task File" is the value with key file in the $new_task array that you define during your plugin installation. If you specify as value myplugin you need to create a file in the inc/tasks directory named myplugin.php with inside a function named task_myplugin. Since it is your first time, I advise you to create first the task from the task manager, then search your new task in the mybb_tasks table and finally copy your task specifications in the $new_task array.

(2019-06-19, 10:30 PM)itsmeJAY Wrote: [ -> ]And why we need the Parameter $task in 

function task_filename($task)? 

To add the tasklog or why?
In primis because the function is called by MyBB passing one argument: inc/functions_task.php#L90. But it will not give you any exception if you do not specify it, so, mainly yes, it is needed in order to call add_task_log() correctly. Also, keep in mind that $task contains all informations about your task, so it may return useful if you need to do any specific check (but I do not think you will need it for this).
Thank you! You helped me a lot.
I could use a bit of help with this too. I've created a simple php script I would like to run daily, and I put it in a simple php file in the inc/tasks folder:

forum/inc/tasks/myscript.php

I then went to ACP > Tools > Task Manager > Add New Task and selected "myscript.php" as the task to run.

When I manually tell it to "run task now" it works, but I can't get the schedule or the logging to work... I tried to understand Mipher's note above, but I don't get it. Is there a simple way to have MyBB run my script on a schedule and log the result? Thanks in advance, sorry for the novice question.