Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[4.1] poor man’s cron 3rd attempt #29592

Closed
wants to merge 89 commits into from
Closed
Show file tree
Hide file tree
Changes from 85 commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
e62bdd2
cli command
alikon Jun 13, 2020
73ef62b
cli command
alikon Jun 13, 2020
2c04462
joblist cli command
alikon Jun 13, 2020
9263dc6
cli scheduler command
alikon Jun 13, 2020
ab72f7a
the scheduler plugin
alikon Jun 13, 2020
a8d7666
the scheduler plugin manifest
alikon Jun 13, 2020
4b43675
sql
alikon Jun 13, 2020
d236b9c
sql
alikon Jun 13, 2020
fe1e9ae
sql
alikon Jun 13, 2020
7919c0f
sql
alikon Jun 13, 2020
8f86ce8
the jobs plugin
alikon Jun 13, 2020
3db81a9
log the run of the job plugin
alikon Jun 13, 2020
bb03509
option to log the job execution
alikon Jun 13, 2020
ca2ab32
lang
alikon Jun 13, 2020
5edf32c
lang
alikon Jun 13, 2020
1c1c740
lang
alikon Jun 13, 2020
5801238
Fix extensions table inserts in update sql, fix semicolon
richard67 Jun 13, 2020
ae1ba3d
Remove factory
wilsonge Jun 13, 2020
013b664
Update administrator/language/en-GB/plg_system_scheduler.ini
alikon Jun 13, 2020
7d32bd5
Merge pull request #69 from richard67/4.0-dev-alikon-patch-121-mod-1
alikon Jun 13, 2020
70dfb96
removed _DESC
alikon Jun 14, 2020
4b51505
removed _DESC
alikon Jun 14, 2020
a4d6de3
took and not tooks
alikon Jun 14, 2020
1580195
took and not tooks
alikon Jun 14, 2020
2ac983a
Update administrator/language/en-GB/plg_actionlog_joomla.ini
alikon Jun 14, 2020
a64ab44
Merge branch '4.0-dev' into patch-121
alikon Jun 14, 2020
c78889c
Update administrator/language/en-GB/plg_system_scheduler.ini
alikon Jun 14, 2020
aa8019f
Update plugins/system/scheduler/scheduler.xml
alikon Jun 14, 2020
506a73a
added to exetension list
alikon Jun 14, 2020
d5d517d
lang string
alikon Jun 14, 2020
55bdacd
alpha order
alikon Jun 14, 2020
733b26d
Update libraries/src/Console/SchedulerCommand.php
alikon Jun 18, 2020
c00323e
Job Logs
alikon Jun 21, 2020
b6b8fff
Alpha sort + missed lang string
alikon Jun 21, 2020
bdf0cbc
Update libraries/src/Console/SchedulerCommand.php
alikon Jun 22, 2020
c5323df
alpha sort
alikon Jun 23, 2020
4413a43
alpha sort
alikon Jun 23, 2020
5e56020
Merge branch '4.0-dev' into patch-121
alikon Aug 23, 2020
49718cf
custom_data
alikon Sep 15, 2020
6ae811d
custom_data
alikon Sep 15, 2020
8ae5e8a
custom_data
alikon Sep 15, 2020
4b78e54
custom_data
alikon Sep 15, 2020
d8db1c6
Merge branch '4.0-dev' into patch-121
alikon Sep 15, 2020
490de4f
Merge branch '4.1-dev' into patch-121
zero-24 Sep 29, 2020
78020c5
Update libraries/src/Console/SchedulerCommand.php
alikon Sep 29, 2020
4a16653
Update libraries/src/Console/SchedulerCommand.php
alikon Sep 29, 2020
47dc32f
Update libraries/src/Console/SchedulerCommand.php
alikon Sep 29, 2020
64d3243
Update libraries/src/Console/SchedulerCommand.php
alikon Sep 29, 2020
5130b62
Update libraries/src/Console/SchedulerCommand.php
alikon Sep 29, 2020
c87f904
Update libraries/src/Console/SchedulerCommand.php
alikon Sep 29, 2020
3408d79
Update libraries/src/Console/JobListCommand.php
alikon Sep 29, 2020
201144c
Update libraries/src/Console/JobListCommand.php
alikon Sep 29, 2020
346c495
Update libraries/src/Console/JobListCommand.php
alikon Sep 29, 2020
1ac46ea
Update libraries/src/Console/JobListCommand.php
alikon Sep 29, 2020
ba760f0
Update libraries/src/Console/JobListCommand.php
alikon Sep 29, 2020
6909f83
Update plugins/system/scheduler/scheduler.xml
alikon Sep 29, 2020
108d46e
Update plugins/system/scheduler/scheduler.xml
alikon Sep 29, 2020
e068b53
Update libraries/src/Console/JobListCommand.php
alikon Sep 29, 2020
c11fd8e
Update plugins/system/scheduler/scheduler.xml
alikon Sep 29, 2020
779696a
Update plugins/system/scheduler/scheduler.xml
alikon Sep 29, 2020
9041d9e
Update plugins/system/scheduler/scheduler.php
alikon Sep 29, 2020
c51b58a
Update installation/sql/postgresql/base.sql
alikon Sep 29, 2020
3006bc1
Update installation/sql/mysql/base.sql
alikon Sep 29, 2020
cfb6f33
Update administrator/components/com_admin/sql/updates/postgresql/4.0.…
alikon Sep 29, 2020
627f987
Update administrator/components/com_admin/sql/updates/mysql/4.0.0-202…
alikon Sep 29, 2020
a967089
move to the future
alikon Sep 29, 2020
7be693e
move to the future
alikon Sep 29, 2020
7f0dc8d
onAfterScheduledTask
alikon Sep 29, 2020
0bd12bc
onAfterScheduledTask
alikon Sep 29, 2020
d353708
onAfterScheduledTask
alikon Sep 29, 2020
c0fa8f9
onAfterScheduledTask
alikon Sep 29, 2020
2414996
Update administrator/components/com_plugins/src/Jobs/JobsPlugin.php
alikon Oct 1, 2020
9e00057
Update administrator/components/com_plugins/src/Jobs/JobsPlugin.php
alikon Oct 1, 2020
f9dd5d3
Update administrator/components/com_plugins/src/Jobs/JobsPlugin.php
alikon Oct 1, 2020
064b491
Update administrator/components/com_plugins/src/Jobs/JobsPlugin.php
alikon Oct 1, 2020
f3a7f0b
Update administrator/components/com_plugins/src/Jobs/JobsPlugin.php
alikon Oct 1, 2020
be4020a
Update libraries/src/Console/SchedulerCommand.php
alikon Oct 1, 2020
76f30ea
Update plugins/actionlog/joomla/joomla.php
alikon Oct 1, 2020
7b6b693
Update plugins/system/scheduler/scheduler.php
alikon Oct 1, 2020
88bfe75
Update plugins/system/scheduler/scheduler.xml
alikon Oct 1, 2020
3bb4ad2
Update administrator/language/en-GB/plg_system_scheduler.ini
alikon Oct 1, 2020
ea2d2cd
Update plugins/actionlog/joomla/joomla.php
alikon Oct 1, 2020
69a2698
Update administrator/language/en-GB/plg_system_scheduler.sys.ini
alikon Oct 1, 2020
0e5ab83
Update libraries/src/Console/JobListCommand.php
alikon Oct 1, 2020
1bbf39a
Update libraries/src/Console/JobListCommand.php
alikon Oct 1, 2020
56a5201
Merge branch '4.1-dev' into patch-121
zero-24 Oct 1, 2020
22b1179
cs
alikon Oct 1, 2020
ea573a2
cs
alikon Oct 1, 2020
776b3af
cs
alikon Oct 1, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions administrator/components/com_actionlogs/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -56,5 +56,16 @@
<option value="PUT">COM_ACTIONLOGS_FIELD_VALUE_PUT</option>
<option value="PATCH">COM_ACTIONLOGS_FIELD_VALUE_PATCH</option>
</field>
<field
name="loggable_job"
type="radio"
label="COM_ACTIONLOGS_JOB_LOGGING_LABEL"
alikon marked this conversation as resolved.
Show resolved Hide resolved
layout="joomla.form.field.radio.switcher"
default="0"
filter="integer"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
</fieldset>
</config>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

CREATE TABLE IF NOT EXISTS `#__jobs` (
`element` varchar(100) NOT NULL,
`folder` varchar(100) NOT NULL,
PRIMARY KEY (`element`, `folder`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;

INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `ordering`, `state`, `custom_data`) VALUES
(0, 'plg_system_scheduler', 'plugin', 'scheduler', 'system', 0, 1, 1, 0, 1, '', '{"timeout":"3","webcron":"0","webcronkey":"","lastrun":"0","unit":"60","taskid":"0"}', 0, 0, '');
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CREATE TABLE IF NOT EXISTS "#__jobs" (
"element" varchar(100) NOT NULL,
"folder" varchar(100) NOT NULL,
PRIMARY KEY ("element", "folder")
);

INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "ordering", "state", "custom_data") VALUES
(0, 'plg_system_scheduler', 'plugin', 'scheduler', 'system', 0, 1, 1, 0, 1, '', '{"timeout":"3","webcron":"0","webcronkey":"","lastrun":"0","unit":"60","taskid":"0"}', 0, 0, '');
270 changes: 270 additions & 0 deletions administrator/components/com_plugins/src/Jobs/JobsPlugin.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,270 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_plugins
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

namespace Joomla\Component\Plugins\Administrator\Jobs;

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Form\FormHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Log\Log;
use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Registry\Registry;

/**
* Abstract Jobs Plugin
*
* @since __DEPLOY_VERSION__
*/
abstract class JobsPlugin extends CMSPlugin
{

/**
* Exit Code For no time to run
*
* @since __DEPLOY_VERSION__
*/
public const JOB_NO_TIME = 1;

/**
* Exit Code For lock failure
*
* @since __DEPLOY_VERSION__
*/
public const JOB_NO_LOCK = 2;

/**
* Exit Code For execution failure
*
* @since __DEPLOY_VERSION__
*/
public const JOB_KO_RUN = 3;
alikon marked this conversation as resolved.
Show resolved Hide resolved

/**
* Exit Code For execution success
*
* @since __DEPLOY_VERSION__
*/
public const JOB_OK_RUN = 0;

/**
* The status of the process
*
* @var array
* @since __DEPLOY_VERSION__
*/
protected $snapshot = [];

/**
* Database object.
*
* @var DatabaseDriver
* @since __DEPLOY_VERSION__
*/
protected $db;

/**
* The Application object
*
* @var JApplicationSite
* @since __DEPLOY_VERSION__
*/
protected $app;

/**
* Get a pseudo Lock to the row.
*
* @param string $name The plugin name.
* @param string $type The plugin type, relates to the subdirectory in the plugins directory.
* @param string $params The plugin params.
* @param boolean $force Force execution.
*
* @return boolean True on success.
*
* @since __DEPLOY_VERSION__
*/
protected function acquireLock($name, $type, $params, $force = false) : bool
{
$lastrun = $params->get('lastrun', 0);

// Get the timeout for Joomla! job plugin task
$now = time();
$timeout = (int) $params->get('timeout', 1);
$unit = (int) $params->get('unit', 86400);
$timeout = ($unit * $timeout);

$eid = PluginHelper::getPlugin($type, $name);

$this->snapshot['eid'] = $eid->id;
$this->snapshot['job'] = $name;
$this->snapshot['status'] = self::JOB_NO_TIME;
$this->snapshot['duration'] = 0;

if (((abs($now - $lastrun) < $timeout)) && (!$force))
{
// It's not time to run
return false;
}

if (!$this->setLocked($name, $type))
{
$this->snapshot['status'] = self::JOB_NO_LOCK;

return false;
}

$this->snapshot['status'] = self::JOB_OK_RUN;

return true;
}

/**
* Pseudo Lock the row.
*
* @param string $name The plugin name.
* @param string $type The plugin type, relates to the subdirectory in the plugins directory.
*
* @return boolean True on success.
*
* @since __DEPLOY_VERSION__
*/
protected function setLocked($name, $type) : bool
{
$db = $this->db;

try
{
$query = $db->getQuery(true)
->insert($db->quoteName('#__jobs'))
->values(':element, :folder')
->bind(':element', $name)
->bind(':folder', $type);

$db->setQuery($query);
$db->execute();
}
catch (\RuntimeException $e)
{
// Ignore it
return false;
}

return true;
}

/**
* Pseudo unLock the row.
*
* @param string $name The plugin name.
* @param string $type The plugin type, relates to the subdirectory in the plugins directory.
*
* @return boolean True on success.
*
* @since __DEPLOY_VERSION__
*/
protected function releaseLock($name, $type) : bool
{
$db = $this->db;

try
{
$query = $db->getQuery(true)
->delete($db->quoteName('#__jobs'))
->where($db->quoteName('element') . ' = :element')
->where($db->quoteName('folder') . ' = :folder')
->bind(':element', $name)
->bind(':folder', $type);

$db->setQuery($query);
$db->execute();
}
catch (\RuntimeException $e)
{
// Ignore it
$this->snapshot['status'] = self::JOB_KO_RUN;
$this->snapshot['duration'] = 0;

return false;
}

$taskid = null;

$query = $db->getQuery(true);
$query->select($db->quoteName('params'))
->from($db->quoteName('#__extensions'))
->where($db->quoteName('element') . ' = :element')
->where($db->quoteName('folder') . ' = :folder')
->bind(':element', $name)
->bind(':folder', $type);

$db->setQuery($query);

$params = $db->loadColumn();
$query = $db->getQuery(true);
$now = Factory::getDate()->toSql();
$query->update($db->quoteName('#__extensions'));

// Update last run and taskid
$taskParams = json_decode($params[0], true);
$taskid = $taskParams['taskid'];

$taskid++;
$registry = new Registry($taskParams);
$registry->set('taskid', $taskid);
$registry->set('lastrun', time());
$jsonparam = $registry->toString('JSON');

$query->set($db->quoteName('params') . ' = :params')
->where($db->quoteName('element') . ' = :element')
->where($db->quoteName('folder') . ' = :folder')
->bind(':params', $jsonparam)
->bind(':element', $name)
->bind(':folder', $type);

try
{
// Update the plugin parameters
$result = $db->setQuery($query)->execute();
}
catch (RuntimeException $e)
{
// If we failed to execute
return false;
}

$result = (int) $db->getAffectedRows();

if ($result === 0)
{
return false;
}

if ($this->_name === 'scheduler')
{
return true;
}

$endTime = microtime(true);
$this->snapshot['duration'] = sprintf('%0.2f', $endTime - $this->snapshot['startTime']);

Log::add(
Text::sprintf('PLG_JOB_' . strtoupper($this->_name) . '_END', $this->_name) .
Text::sprintf('PLG_JOB_' . strtoupper($this->_name) . '_TASK', $taskid) .
Text::sprintf('PLG_JOB_' . strtoupper($this->_name) . '_PROCESS_RESULT', $this->snapshot['status']) .
Text::sprintf('PLG_JOB_' . strtoupper($this->_name) . '_PROCESS_COMPLETE', $this->snapshot['duration']),
Log::INFO,
'scheduler'
);

return true;
}
}
1 change: 1 addition & 0 deletions administrator/language/en-GB/com_actionlogs.ini
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ COM_ACTIONLOGS_IP_ADDRESS_ASC="IP Address ascending"
COM_ACTIONLOGS_IP_ADDRESS_DESC="IP Address descending"
COM_ACTIONLOGS_IP_INVALID="Invalid IP"
COM_ACTIONLOGS_IP_LOGGING_LABEL="IP Logging"
COM_ACTIONLOGS_JOB_LOGGING_LABEL="Job Logs"
COM_ACTIONLOGS_LOG_EXTENSIONS_LABEL="Events To Log"
COM_ACTIONLOGS_LOG_VERBS_LABEL="Verbs To Log"
COM_ACTIONLOGS_MANAGER_USERLOGS="User Actions Log"
Expand Down
1 change: 1 addition & 0 deletions administrator/language/en-GB/plg_actionlog_joomla.ini
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,4 @@ PLG_ACTIONLOG_JOOMLA_EXTENSION_INSTALLED="User <a href='{accountlink}'>{username
PLG_ACTIONLOG_JOOMLA_EXTENSION_UNINSTALLED="User <a href='{accountlink}'>{username}</a> uninstalled the {type} {extension_name}"
PLG_ACTIONLOG_JOOMLA_EXTENSION_UPDATED="User <a href='{accountlink}'>{username}</a> updated the {type} {extension_name}"
PLG_ACTIONLOG_JOOMLA_PLUGIN_INSTALLED="User <a href='{accountlink}'>{username}</a> installed the plugin <a href='index.php?option=com_plugins&task=plugin.edit&extension_id={id}'>{extension_name}</a>"
PLG_ACTIONLOG_JOOMLA_PLUGIN_JOB="Executed the <a href='index.php?option=com_plugins&task=plugin.edit&extension_id={eid}'> {job}</a> in {duration} with return code {status}"
14 changes: 14 additions & 0 deletions administrator/language/en-GB/plg_system_scheduler.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
; Joomla! Project
; Copyright (C) 2005 - 2020 Open Source Matters. All rights reserved.
; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
; Note : All ini files need to be saved as UTF-8

PLG_SYSTEM_SCHEDULER="System - Job Scheduler"
PLG_SYSTEM_SCHEDULER_END="Scheduler>stop>task#%s"
PLG_SYSTEM_SCHEDULER_LOCKED="The scheduler is locked"
PLG_SYSTEM_SCHEDULER_PROCESS_COMPLETE="Scheduler took %s seconds."
PLG_SYSTEM_SCHEDULER_START="Starting Scheduler"
PLG_SYSTEM_SCHEDULER_TIMEOUT_LABEL="Frequency (in minutes)"
PLG_SYSTEM_SCHEDULER_WEBCRON_LABEL="Webcron"
alikon marked this conversation as resolved.
Show resolved Hide resolved
PLG_SYSTEM_SCHEDULER_WEBCRONKEY_LABEL="Activation Key"
PLG_SYSTEM_SCHEDULER_XML_DESCRIPTION="This plugin looks for job plugin tasks to run."
7 changes: 7 additions & 0 deletions administrator/language/en-GB/plg_system_scheduler.sys.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
; Joomla! Project
; Copyright (C) 2005 - 2020 Open Source Matters. All rights reserved.
; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
; Note : All ini files need to be saved as UTF-8

PLG_SYSTEM_SCHEDULER="System - Job Scheduler"
PLG_SYSTEM_SCHEDULER_XML_DESCRIPTION="This plugin looks for job plugin tasks to run."
9 changes: 8 additions & 1 deletion installation/sql/mysql/base.sql
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,8 @@ INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`,
(0, 'plg_workflow_publishing', 'plugin', 'publishing', 'workflow', 0, 1, 1, 0, 1, '', '{}', '', 0, 0),
(0, 'plg_workflow_featuring', 'plugin', 'featuring', 'workflow', 0, 1, 1, 0, 1, '', '{}', '', 0, 0),
(0, 'plg_workflow_notification', 'plugin', 'notification', 'workflow', 0, 1, 1, 0, 1, '', '{}', '', 0, 0),
(0, 'plg_content_imagelazyload', 'plugin', 'imagelazyload', 'content', 0, 0, 1, 0, 1, '', '{}', '', 0, 0);
(0, 'plg_content_imagelazyload', 'plugin', 'imagelazyload', 'content', 0, 0, 1, 0, 1, '', '{}', '', 0, 0),
(0, 'plg_system_scheduler', 'plugin', 'scheduler', 'system', 0, 1, 1, 0, 1, '', '{"timeout":"3","webcron":"0","webcronkey":"","lastrun":"0","unit":"60","taskid":"0"}', '', 0, 0);

-- Templates
INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `custom_data`, `ordering`, `state`) VALUES
Expand Down Expand Up @@ -1166,3 +1167,9 @@ INSERT INTO `#__workflow_transitions` (`id`, `asset_id`, `published`, `ordering`
(5, 62, 1, 5, 1, 'Feature', '', -1, 1, '{"featuring":"1"}'),
(6, 63, 1, 6, 1, 'Unfeature', '', -1, 1, '{"featuring":"0"}'),
(7, 64, 1, 7, 1, 'Publish & Feature', '', -1, 1, '{"publishing":"1","featuring":"1"}');

CREATE TABLE IF NOT EXISTS `#__jobs` (
`element` varchar(100) NOT NULL,
`folder` varchar(100) NOT NULL,
PRIMARY KEY (`element`, `folder`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;
9 changes: 8 additions & 1 deletion installation/sql/postgresql/base.sql
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,8 @@ INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder",
(0, 'plg_workflow_publishing', 'plugin', 'publishing', 'workflow', 0, 1, 1, 0, 1, '', '{}', '', 0, 0),
(0, 'plg_workflow_featuring', 'plugin', 'featuring', 'workflow', 0, 1, 1, 0, 1, '', '{}', '', 0, 0),
(0, 'plg_workflow_notification', 'plugin', 'notification', 'workflow', 0, 1, 1, 0, 1, '', '{}', '', 0, 0),
(0, 'plg_content_imagelazyload', 'plugin', 'imagelazyload', 'content', 0, 0, 1, 0, 1, '', '{}', '', 0, 0);
(0, 'plg_content_imagelazyload', 'plugin', 'imagelazyload', 'content', 0, 0, 1, 0, 1, '', '{}', '', 0, 0),
(0, 'plg_system_scheduler', 'plugin', 'scheduler', 'system', 0, 1, 1, 0, 1, '', '{"timeout":"3","webcron":"0","webcronkey":"","lastrun":"0","unit":"60","taskid":"0"}', '', 0, 0);

-- Templates
INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "ordering", "state") VALUES
Expand Down Expand Up @@ -1187,3 +1188,9 @@ INSERT INTO "#__workflow_transitions" ("id", "asset_id", "published", "ordering"
(7, 64, 1, 7, 1, 'Publish & Feature', '', -1, 1, '{"publishing":"1","featuring":"1"}');

SELECT setval('#__workflow_transitions_id_seq', 8, false);

CREATE TABLE IF NOT EXISTS "#__jobs" (
"element" varchar(100) NOT NULL,
"folder" varchar(100) NOT NULL,
PRIMARY KEY ("element", "folder")
);
Loading