Please make sure IN_MYBB is defined.");
}
require_once MYBB_ROOT."/inc/functions_task.php";
$page->add_breadcrumb_item($lang->task_manager, "index.php?module=tools-tasks");
$plugins->run_hooks("admin_tools_tasks_begin");
/**
* Validates a string or array of values
*
* @param string|array $value Comma-separated list or array of values
* @param int $min Minimum value
* @param int $max Maximum value
* @param string $return_type Set "string" to return in a comma-separated list, or "array" to return in an array
* @return string|array String or array of valid values OR false if string/array is invalid
*/
function check_time_values($value, $min, $max, $return_type)
{
// If the values aren't in an array form, make them into an array
if(!is_array($value))
{
// Empty value == *
if($value === '')
{
return ($return_type == 'string') ? '*' : array('*');
}
$implode = 1;
$value = explode(',', $value);
}
// If * is in the array, always return with * because it overrides all
if(in_array('*', $value))
{
return ($return_type == 'string') ? '*' : array('*');
}
// Validate each value in array
foreach($value as $time)
{
if($time < $min || $time > $max)
{
return false;
}
}
// Return based on return type
if($return_type == 'string')
{
$value = implode(',', $value);
}
return $value;
}
if($mybb->input['action'] == "add")
{
$plugins->run_hooks("admin_tools_tasks_add");
if($mybb->request_method == "post")
{
if(!trim($mybb->input['title']))
{
$errors[] = $lang->error_missing_title;
}
if(!trim($mybb->input['description']))
{
$errors[] = $lang->error_missing_description;
}
$file = $mybb->get_input('file');
$file = basename($file, '.php');
if(!file_exists(MYBB_ROOT."inc/tasks/".$file.".php"))
{
$errors[] = $lang->error_invalid_task_file;
}
$mybb->input['minute'] = check_time_values($mybb->input['minute'], 0, 59, 'string');
if($mybb->input['minute'] === false)
{
$errors[] = $lang->error_invalid_minute;
}
$mybb->input['hour'] = check_time_values($mybb->input['hour'], 0, 59, 'string');
if($mybb->input['hour'] === false)
{
$errors[] = $lang->error_invalid_hour;
}
if($mybb->input['day'] != "*" && $mybb->input['day'] != '')
{
$mybb->input['day'] = check_time_values($mybb->input['day'], 1, 31, 'string');
if($mybb->input['day'] === false)
{
$errors[] = $lang->error_invalid_day;
}
$mybb->input['weekday'] = array('*');
}
else
{
$mybb->input['weekday'] = check_time_values($mybb->input['weekday'], 0, 6, 'array');
if($mybb->input['weekday'] === false)
{
$errors[] = $lang->error_invalid_weekday;
}
$mybb->input['day'] = '*';
}
$mybb->input['month'] = check_time_values($mybb->get_input('month', MyBB::INPUT_ARRAY), 1, 12, 'array');
if($mybb->input['month'] === false)
{
$errors[] = $lang->error_invalid_month;
}
if(!$errors)
{
$new_task = array(
"title" => $db->escape_string($mybb->input['title']),
"description" => $db->escape_string($mybb->input['description']),
"file" => $db->escape_string($file),
"minute" => $db->escape_string($mybb->input['minute']),
"hour" => $db->escape_string($mybb->input['hour']),
"day" => $db->escape_string($mybb->input['day']),
"month" => $db->escape_string(implode(',', $mybb->input['month'])),
"weekday" => $db->escape_string(implode(',', $mybb->input['weekday'])),
"enabled" => $mybb->get_input('enabled', MyBB::INPUT_INT),
"logging" => $mybb->get_input('logging', MyBB::INPUT_INT)
);
$new_task['nextrun'] = fetch_next_run($new_task);
$tid = $db->insert_query("tasks", $new_task);
$plugins->run_hooks("admin_tools_tasks_add_commit");
$cache->update_tasks();
// Log admin action
log_admin_action($tid, $mybb->input['title']);
flash_message($lang->success_task_created, 'success');
admin_redirect("index.php?module=tools-tasks");
}
}
$page->add_breadcrumb_item($lang->add_new_task);
$page->output_header($lang->scheduled_tasks." - ".$lang->add_new_task);
$sub_tabs['scheduled_tasks'] = array(
'title' => $lang->scheduled_tasks,
'link' => "index.php?module=tools-tasks"
);
$sub_tabs['add_task'] = array(
'title' => $lang->add_new_task,
'link' => "index.php?module=tools-tasks&action=add",
'description' => $lang->add_new_task_desc
);
$sub_tabs['task_logs'] = array(
'title' => $lang->view_task_logs,
'link' => "index.php?module=tools-tasks&action=logs"
);
$page->output_nav_tabs($sub_tabs, 'add_task');
$form = new Form("index.php?module=tools-tasks&action=add", "post", "add");
if($errors)
{
$page->output_inline_error($errors);
}
else
{
$mybb->input['minute'] = '*';
$mybb->input['hour'] = '*';
$mybb->input['day'] = '*';
$mybb->input['weekday'] = '*';
$mybb->input['month'] = '*';
}
$form_container = new FormContainer($lang->add_new_task);
$form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->get_input('title'), array('id' => 'title')), 'title');
$form_container->output_row($lang->short_description." *", "", $form->generate_text_box('description', $mybb->get_input('description'), array('id' => 'description')), 'description');
$task_list = array();
$task_files = scandir(MYBB_ROOT."inc/tasks/");
foreach($task_files as $task_file)
{
if(is_file(MYBB_ROOT."inc/tasks/{$task_file}") && get_extension($task_file) == "php")
{
$file_id = preg_replace("#\.".get_extension($task_file)."$#i", "$1", $task_file);
$task_list[$file_id] = $task_file;
}
}
$form_container->output_row($lang->task_file." *", $lang->task_file_desc, $form->generate_select_box("file", $task_list, $mybb->get_input('file'), array('id' => 'file')), 'file');
$form_container->output_row($lang->time_minutes, $lang->time_minutes_desc, $form->generate_text_box('minute', $mybb->get_input('minute'), array('id' => 'minute')), 'minute');
$form_container->output_row($lang->time_hours, $lang->time_hours_desc, $form->generate_text_box('hour', $mybb->get_input('hour'), array('id' => 'hour')), 'hour');
$form_container->output_row($lang->time_days_of_month, $lang->time_days_of_month_desc, $form->generate_text_box('day', $mybb->get_input('day'), array('id' => 'day')), 'day');
$options = array(
"*" => $lang->every_weekday,
"0" => $lang->sunday,
"1" => $lang->monday,
"2" => $lang->tuesday,
"3" => $lang->wednesday,
"4" => $lang->thursday,
"5" => $lang->friday,
"6" => $lang->saturday
);
$form_container->output_row($lang->time_weekdays, $lang->time_weekdays_desc, $form->generate_select_box('weekday[]', $options, $mybb->input['weekday'], array('id' => 'weekday', 'multiple' => true, 'size' => 8)), 'weekday');
$options = array(
"*" => $lang->every_month,
"1" => $lang->january,
"2" => $lang->february,
"3" => $lang->march,
"4" => $lang->april,
"5" => $lang->may,
"6" => $lang->june,
"7" => $lang->july,
"8" => $lang->august,
"9" => $lang->september,
"10" => $lang->october,
"11" => $lang->november,
"12" => $lang->december
);
$form_container->output_row($lang->time_months, $lang->time_months_desc, $form->generate_select_box('month[]', $options, $mybb->get_input('month', MyBB::INPUT_ARRAY), array('id' => 'month', 'multiple' => true, 'size' => 13)), 'month');
$form_container->output_row($lang->enable_logging." *", "", $form->generate_yes_no_radio("logging", $mybb->get_input('logging'), true));
$form_container->output_row($lang->enabled." *", "", $form->generate_yes_no_radio("enabled", $mybb->get_input('enabled'), true));
$form_container->end();
$buttons[] = $form->generate_submit_button($lang->save_task);
$form->output_submit_wrapper($buttons);
$form->end();
$page->output_footer();
}
if($mybb->input['action'] == "edit")
{
$query = $db->simple_select("tasks", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'");
$task = $db->fetch_array($query);
// Does the task not exist?
if(!$task)
{
flash_message($lang->error_invalid_task, 'error');
admin_redirect("index.php?module=tools-tasks");
}
$plugins->run_hooks("admin_tools_tasks_edit");
if($mybb->request_method == "post")
{
if(!trim($mybb->input['title']))
{
$errors[] = $lang->error_missing_title;
}
if(!trim($mybb->input['description']))
{
$errors[] = $lang->error_missing_description;
}
$file = $mybb->get_input('file');
$file = basename($file, '.php');
if(!file_exists(MYBB_ROOT."inc/tasks/".$file.".php"))
{
$errors[] = $lang->error_invalid_task_file;
}
$mybb->input['minute'] = check_time_values($mybb->input['minute'], 0, 59, 'string');
if($mybb->input['minute'] === false)
{
$errors[] = $lang->error_invalid_minute;
}
$mybb->input['hour'] = check_time_values($mybb->input['hour'], 0, 59, 'string');
if($mybb->input['hour'] === false)
{
$errors[] = $lang->error_invalid_hour;
}
if($mybb->input['day'] != "*" && $mybb->input['day'] != '')
{
$mybb->input['day'] = check_time_values($mybb->input['day'], 1, 31, 'string');
if($mybb->input['day'] === false)
{
$errors[] = $lang->error_invalid_day;
}
$mybb->input['weekday'] = array('*');
}
else
{
$mybb->input['weekday'] = check_time_values($mybb->input['weekday'], 0, 6, 'array');
if($mybb->input['weekday'] === false)
{
$errors[] = $lang->error_invalid_weekday;
}
$mybb->input['day'] = '*';
}
$mybb->input['month'] = check_time_values($mybb->get_input('month', MyBB::INPUT_ARRAY), 1, 12, 'array');
if($mybb->input['month'] === false)
{
$errors[] = $lang->error_invalid_month;
}
if(!$errors)
{
$enable_confirmation = false;
// Check if we need to ask the user to confirm turning on the task
if(($task['file'] == "backupdb" || $task['file'] == "checktables") && $task['enabled'] == 0 && $mybb->input['enabled'] == 1)
{
$mybb->input['enabled'] = 0;
$enable_confirmation = true;
}
$updated_task = array(
"title" => $db->escape_string($mybb->input['title']),
"description" => $db->escape_string($mybb->input['description']),
"file" => $db->escape_string($file),
"minute" => $db->escape_string($mybb->input['minute']),
"hour" => $db->escape_string($mybb->input['hour']),
"day" => $db->escape_string($mybb->input['day']),
"month" => $db->escape_string(implode(',', $mybb->input['month'])),
"weekday" => $db->escape_string(implode(',', $mybb->input['weekday'])),
"enabled" => $mybb->get_input('enabled', MyBB::INPUT_INT),
"logging" => $mybb->get_input('logging', MyBB::INPUT_INT)
);
$updated_task['nextrun'] = fetch_next_run($updated_task);
$plugins->run_hooks("admin_tools_tasks_edit_commit");
$db->update_query("tasks", $updated_task, "tid='{$task['tid']}'");
$cache->update_tasks();
// Log admin action
log_admin_action($task['tid'], $mybb->input['title']);
flash_message($lang->success_task_updated, 'success');
if($enable_confirmation == true)
{
admin_redirect("index.php?module=tools-tasks&action=enable&tid={$task['tid']}&my_post_key={$mybb->post_code}");
}
else
{
admin_redirect("index.php?module=tools-tasks");
}
}
}
$page->add_breadcrumb_item($lang->edit_task);
$page->output_header($lang->scheduled_tasks." - ".$lang->edit_task);
$sub_tabs['edit_task'] = array(
'title' => $lang->edit_task,
'description' => $lang->edit_task_desc,
'link' => "index.php?module=tools-tasks&action=edit&tid={$task['tid']}"
);
$page->output_nav_tabs($sub_tabs, 'edit_task');
$form = new Form("index.php?module=tools-tasks&action=edit", "post");
if($errors)
{
$page->output_inline_error($errors);
$task_data = $mybb->input;
}
else
{
$task_data = $task;
$task_data['weekday'] = explode(',', $task['weekday']);
$task_data['month'] = explode(',', $task['month']);
}
$form_container = new FormContainer($lang->edit_task);
echo $form->generate_hidden_field("tid", $task['tid']);
$form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $task_data['title'], array('id' => 'title')), 'title');
$form_container->output_row($lang->short_description." *", "", $form->generate_text_box('description', $task_data['description'], array('id' => 'description')), 'description');
$task_list = array();
$task_files = scandir(MYBB_ROOT."inc/tasks/");
foreach($task_files as $task_file)
{
if(is_file(MYBB_ROOT."inc/tasks/{$task_file}") && get_extension($task_file) == "php")
{
$file_id = preg_replace("#\.".get_extension($task_file)."$#i", "$1", $task_file);
$task_list[$file_id] = $task_file;
}
}
$form_container->output_row($lang->task." *", $lang->task_file_desc, $form->generate_select_box("file", $task_list, $task_data['file'], array('id' => 'file')), 'file');
$form_container->output_row($lang->time_minutes, $lang->time_minutes_desc, $form->generate_text_box('minute', $task_data['minute'], array('id' => 'minute')), 'minute');
$form_container->output_row($lang->time_hours, $lang->time_hours_desc, $form->generate_text_box('hour', $task_data['hour'], array('id' => 'hour')), 'hour');
$form_container->output_row($lang->time_days_of_month, $lang->time_days_of_month_desc, $form->generate_text_box('day', $task_data['day'], array('id' => 'day')), 'day');
$options = array(
"*" => $lang->every_weekday,
"0" => $lang->sunday,
"1" => $lang->monday,
"2" => $lang->tuesday,
"3" => $lang->wednesday,
"4" => $lang->thursday,
"5" => $lang->friday,
"6" => $lang->saturday
);
$form_container->output_row($lang->time_weekdays, $lang->time_weekdays_desc, $form->generate_select_box('weekday[]', $options, $task_data['weekday'], array('id' => 'weekday', 'multiple' => true)), 'weekday');
$options = array(
"*" => $lang->every_month,
"1" => $lang->january,
"2" => $lang->february,
"3" => $lang->march,
"4" => $lang->april,
"5" => $lang->may,
"6" => $lang->june,
"7" => $lang->july,
"8" => $lang->august,
"9" => $lang->september,
"10" => $lang->october,
"11" => $lang->november,
"12" => $lang->december
);
$form_container->output_row($lang->time_months, $lang->time_months_desc, $form->generate_select_box('month[]', $options, $task_data['month'], array('id' => 'month', 'multiple' => true)), 'month');
$form_container->output_row($lang->enable_logging." *", "", $form->generate_yes_no_radio("logging", $task_data['logging'], true));
$form_container->output_row($lang->enabled." *", "", $form->generate_yes_no_radio("enabled", $task_data['enabled'], true));
$form_container->end();
$buttons[] = $form->generate_submit_button($lang->save_task);
$form->output_submit_wrapper($buttons);
$form->end();
$page->output_footer();
}
if($mybb->input['action'] == "delete")
{
$query = $db->simple_select("tasks", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'");
$task = $db->fetch_array($query);
// Does the task not exist?
if(!$task)
{
flash_message($lang->error_invalid_task, 'error');
admin_redirect("index.php?module=tools-tasks");
}
// User clicked no
if($mybb->get_input('no'))
{
admin_redirect("index.php?module=tools-tasks");
}
$plugins->run_hooks("admin_tools_tasks_delete");
if($mybb->request_method == "post")
{
// Delete the task & any associated task log entries
$db->delete_query("tasks", "tid='{$task['tid']}'");
$db->delete_query("tasklog", "tid='{$task['tid']}'");
// Fetch next task run
$plugins->run_hooks("admin_tools_tasks_delete_commit");
$cache->update_tasks();
// Log admin action
log_admin_action($task['tid'], $task['title']);
flash_message($lang->success_task_deleted, 'success');
admin_redirect("index.php?module=tools-tasks");
}
else
{
$page->output_confirm_action("index.php?module=tools-tasks&action=delete&tid={$task['tid']}", $lang->confirm_task_deletion);
}
}
if($mybb->input['action'] == "enable" || $mybb->input['action'] == "disable")
{
if(!verify_post_check($mybb->get_input('my_post_key')))
{
flash_message($lang->invalid_post_verify_key2, 'error');
admin_redirect("index.php?module=tools-tasks");
}
$query = $db->simple_select("tasks", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'");
$task = $db->fetch_array($query);
// Does the task not exist?
if(!$task)
{
flash_message($lang->error_invalid_task, 'error');
admin_redirect("index.php?module=tools-tasks");
}
if($mybb->input['action'] == "enable")
{
$plugins->run_hooks("admin_tools_tasks_enable");
}
else
{
$plugins->run_hooks("admin_tools_tasks_disable");
}
if($mybb->input['action'] == "enable")
{
if($task['file'] == "backupdb" || $task['file'] == "checktables")
{
// User clicked no
if($mybb->get_input('no'))
{
admin_redirect("index.php?module=tools-tasks");
}
if($mybb->request_method == "post")
{
$nextrun = fetch_next_run($task);
$db->update_query("tasks", array("nextrun" => $nextrun, "enabled" => 1), "tid='{$task['tid']}'");
$plugins->run_hooks("admin_tools_tasks_enable_commit");
$cache->update_tasks();
// Log admin action
log_admin_action($task['tid'], $task['title'], $mybb->input['action']);
flash_message($lang->success_task_enabled, 'success');
admin_redirect("index.php?module=tools-tasks");
}
else
{
$page->output_confirm_action("index.php?module=tools-tasks&action=enable&tid={$task['tid']}", $lang->confirm_task_enable);
}
}
else
{
$nextrun = fetch_next_run($task);
$db->update_query("tasks", array("nextrun" => $nextrun, "enabled" => 1), "tid='{$task['tid']}'");
$plugins->run_hooks("admin_tools_tasks_enable_commit");
$cache->update_tasks();
// Log admin action
log_admin_action($task['tid'], $task['title'], $mybb->input['action']);
flash_message($lang->success_task_enabled, 'success');
admin_redirect("index.php?module=tools-tasks");
}
}
else
{
$db->update_query("tasks", array("enabled" => 0), "tid='{$task['tid']}'");
$plugins->run_hooks("admin_tools_tasks_disable_commit");
$cache->update_tasks();
// Log admin action
log_admin_action($task['tid'], $task['title'], $mybb->input['action']);
flash_message($lang->success_task_disabled, 'success');
admin_redirect("index.php?module=tools-tasks");
}
}
if($mybb->input['action'] == "run")
{
if(!verify_post_check($mybb->get_input('my_post_key')))
{
flash_message($lang->invalid_post_verify_key2, 'error');
admin_redirect("index.php?module=tools-tasks");
}
ignore_user_abort(true);
@set_time_limit(0);
$plugins->run_hooks("admin_tools_tasks_run");
$query = $db->simple_select("tasks", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'");
$task = $db->fetch_array($query);
// Does the task not exist?
if(!$task)
{
flash_message($lang->error_invalid_task, 'error');
admin_redirect("index.php?module=tools-tasks");
}
run_task($task['tid']);
$plugins->run_hooks("admin_tools_tasks_run_commit");
// Log admin action
log_admin_action($task['tid'], $task['title']);
flash_message($lang->success_task_run, 'success');
admin_redirect("index.php?module=tools-tasks");
}
if($mybb->input['action'] == "logs")
{
$plugins->run_hooks("admin_tools_tasks_logs");
$page->output_header($lang->task_logs);
$sub_tabs['scheduled_tasks'] = array(
'title' => $lang->scheduled_tasks,
'link' => "index.php?module=tools-tasks"
);
$sub_tabs['add_task'] = array(
'title' => $lang->add_new_task,
'link' => "index.php?module=tools-tasks&action=add"
);
$sub_tabs['task_logs'] = array(
'title' => $lang->view_task_logs,
'link' => "index.php?module=tools-tasks&action=logs",
'description' => $lang->view_task_logs_desc
);
$page->output_nav_tabs($sub_tabs, 'task_logs');
$table = new Table;
$table->construct_header($lang->task);
$table->construct_header($lang->date, array("class" => "align_center", "width" => 200));
$table->construct_header($lang->data, array("width" => "60%"));
$query = $db->simple_select("tasklog", "COUNT(*) AS log_count");
$log_count = $db->fetch_field($query, "log_count");
$start = 0;
$per_page = 50;
$current_page = 1;
if(($mybb->get_input('page', MyBB::INPUT_INT)) > 0)
{
$current_page = $mybb->get_input('page', MyBB::INPUT_INT);
$start = ($current_page-1)*$per_page;
$pages = $log_count / $per_page;
$pages = ceil($pages);
if($current_page > $pages)
{
$start = 0;
$current_page = 1;
}
}
$pagination = draw_admin_pagination($current_page, $per_page, $log_count, "index.php?module=tools-tasks&action=logs&page={page}");
$query = $db->query("
SELECT l.*, t.title
FROM ".TABLE_PREFIX."tasklog l
LEFT JOIN ".TABLE_PREFIX."tasks t ON (t.tid=l.tid)
ORDER BY l.dateline DESC
LIMIT {$start}, {$per_page}
");
while($log_entry = $db->fetch_array($query))
{
$log_entry['title'] = htmlspecialchars_uni($log_entry['title']);
$log_entry['data'] = htmlspecialchars_uni($log_entry['data']);
$date = my_date('relative', $log_entry['dateline']);
$table->construct_cell("{$log_entry['title']}");
$table->construct_cell($date, array("class" => "align_center"));
$table->construct_cell($log_entry['data']);
$table->construct_row();
}
if($table->num_rows() == 0)
{
$table->construct_cell($lang->no_task_logs, array("colspan" => "3"));
$table->construct_row();
}
$table->output($lang->task_logs);
echo $pagination;
$page->output_footer();
}
if(!$mybb->input['action'])
{
$page->output_header($lang->task_manager);
$sub_tabs['scheduled_tasks'] = array(
'title' => $lang->scheduled_tasks,
'link' => "index.php?module=tools-tasks",
'description' => $lang->scheduled_tasks_desc
);
$sub_tabs['add_task'] = array(
'title' => $lang->add_new_task,
'link' => "index.php?module=tools-tasks&action=add"
);
$sub_tabs['task_logs'] = array(
'title' => $lang->view_task_logs,
'link' => "index.php?module=tools-tasks&action=logs"
);
$plugins->run_hooks("admin_tools_tasks_start");
$page->output_nav_tabs($sub_tabs, 'scheduled_tasks');
$table = new Table;
$table->construct_header($lang->task);
$table->construct_header($lang->next_run, array("class" => "align_center", "width" => 200));
$table->construct_header($lang->controls, array("class" => "align_center", "width" => 150));
$query = $db->simple_select("tasks", "*", "", array("order_by" => "title", "order_dir" => "asc"));
while($task = $db->fetch_array($query))
{
$task['title'] = htmlspecialchars_uni($task['title']);
$task['description'] = htmlspecialchars_uni($task['description']);
$next_run = my_date('normal', $task['nextrun'], "", 2);
if($task['enabled'] == 1)
{
$icon = "style}/images/icons/bullet_on.png\" alt=\"({$lang->alt_enabled})\" title=\"{$lang->alt_enabled}\" style=\"vertical-align: middle;\" /> ";
}
else
{
$icon = "style}/images/icons/bullet_off.png\" alt=\"({$lang->alt_disabled})\" title=\"{$lang->alt_disabled}\" style=\"vertical-align: middle;\" /> ";
}
$table->construct_cell("");
$table->construct_cell($next_run, array("class" => "align_center"));
$popup = new PopupMenu("task_{$task['tid']}", $lang->options);
$popup->add_item($lang->edit_task, "index.php?module=tools-tasks&action=edit&tid={$task['tid']}");
if($task['enabled'] == 1)
{
$popup->add_item($lang->run_task, "index.php?module=tools-tasks&action=run&tid={$task['tid']}&my_post_key={$mybb->post_code}");
$popup->add_item($lang->disable_task, "index.php?module=tools-tasks&action=disable&tid={$task['tid']}&my_post_key={$mybb->post_code}");
}
else
{
$popup->add_item($lang->enable_task, "index.php?module=tools-tasks&action=enable&tid={$task['tid']}&my_post_key={$mybb->post_code}");
}
$popup->add_item($lang->delete_task, "index.php?module=tools-tasks&action=delete&tid={$task['tid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_task_deletion}')");
$table->construct_cell($popup->fetch(), array("class" => "align_center"));
$table->construct_row();
}
if($table->num_rows() == 0)
{
$table->construct_cell($lang->no_tasks, array('colspan' => 3));
$table->construct_row();
}
$table->output($lang->scheduled_tasks);
$page->output_footer();
}