diff --git a/app/Jobs/Email.php b/app/Jobs/Email.php
new file mode 100644
index 000000000..c4d39e6bb
--- /dev/null
+++ b/app/Jobs/Email.php
@@ -0,0 +1,8 @@
+init();
+
$oPluginRegistry = PluginRegistry::loadSingleton();
$attributes = $oPluginRegistry->getAttributes();
Bootstrap::LoadTranslationPlugins(defined('SYS_LANG') ? SYS_LANG : "en", $attributes);
diff --git a/workflow/engine/bin/cron_single.php b/workflow/engine/bin/cron_single.php
index df5bb00a5..127a45e57 100644
--- a/workflow/engine/bin/cron_single.php
+++ b/workflow/engine/bin/cron_single.php
@@ -17,6 +17,7 @@ require_once __DIR__ . '/../../../gulliver/system/class.g.php';
require_once __DIR__ . '/../../../bootstrap/autoload.php';
require_once __DIR__ . '/../../../bootstrap/app.php';
+use ProcessMaker\Core\JobsManager;
use ProcessMaker\Core\System;
use ProcessMaker\Plugins\PluginRegistry;
@@ -250,6 +251,11 @@ try {
//Processing
eprintln('Processing workspace: ' . $workspace, 'green');
+
+ /**
+ * JobsManager
+ */
+ JobsManager::getSingleton()->init();
// We load plugins' pmFunctions
$oPluginRegistry = PluginRegistry::loadSingleton();
diff --git a/workflow/engine/classes/WsBase.php b/workflow/engine/classes/WsBase.php
index afedb88ec..bcf19474a 100644
--- a/workflow/engine/classes/WsBase.php
+++ b/workflow/engine/classes/WsBase.php
@@ -4,6 +4,7 @@ use ProcessMaker\BusinessModel\EmailServer;
/*----------------------------------********---------------------------------*/
use ProcessMaker\ChangeLog\ChangeLog;
/*----------------------------------********---------------------------------*/
+use ProcessMaker\Core\JobsManager;
use ProcessMaker\Core\System;
class WsBase
@@ -956,9 +957,6 @@ class WsBase
$msgError = "The default configuration wasn't defined";
}
- $spool = new SpoolRun();
- $spool->setConfig($setup);
-
$case = new Cases();
$oldFields = $case->loadCase($appUid, $delIndex);
if ($gmail == 1) {
@@ -1003,19 +1001,27 @@ class WsBase
isset($fieldsCase['PRO_ID']) ? $fieldsCase['PRO_ID'] : 0,
$this->getTaskId() ?$this->getTaskId():(isset($oldFields['TAS_ID'])? $oldFields['TAS_ID'] : 0)
);
- $spool->create($messageArray);
$result = "";
if ($gmail != 1) {
- $spool->sendMail();
-
- if ($spool->status == 'sent') {
- $result = new WsResponse(0, G::loadTranslation('ID_MESSAGE_SENT') . ": " . $to);
- } else {
- $result = new WsResponse(29, $spool->status . ' ' . $spool->error . print_r($setup, 1));
+ $closure = function() use ($setup, $messageArray, $gmail, $to) {
+ $spool = new SpoolRun();
+ $spool->setConfig($setup);
+ $spool->create($messageArray);
+ $spool->sendMail();
+ return $spool;
+ };
+ $result = new WsResponse(0, G::loadTranslation('ID_MESSAGE_SENT') . ": " . $to);
+ switch ($appMsgType) {
+ case WsBase::MESSAGE_TYPE_EMAIL_EVENT:
+ case WsBase::MESSAGE_TYPE_PM_FUNCTION:
+ JobsManager::getSingleton()->dispatch('EmailEvent', $closure);
+ break;
+ default :
+ JobsManager::getSingleton()->dispatch('Email', $closure);
+ break;
}
}
-
return $result;
} catch (Exception $e) {
return new WsResponse(100, $e->getMessage());
diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml
old mode 100644
new mode 100755
index bc138c808..eac919313
--- a/workflow/engine/config/schema.xml
+++ b/workflow/engine/config/schema.xml
@@ -5837,9 +5837,9 @@
-
-
-
+
+
+
diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql
index e20c24c05..f8ad65084 100644
--- a/workflow/engine/data/mysql/schema.sql
+++ b/workflow/engine/data/mysql/schema.sql
@@ -3257,9 +3257,9 @@ CREATE TABLE `JOBS_PENDING`
`queue` VARCHAR(255) NOT NULL,
`payload` MEDIUMTEXT NOT NULL,
`attempts` TINYINT(3) NOT NULL,
- `reserved_at` TINYINT(10),
- `available_at` TINYINT(10) NOT NULL,
- `created_at` TINYINT(10) NOT NULL,
+ `reserved_at` BIGINT(10),
+ `available_at` BIGINT(10) NOT NULL,
+ `created_at` BIGINT(10) NOT NULL,
PRIMARY KEY (`id`),
KEY `jobs_queue_index`(`queue`)
)ENGINE=InnoDB DEFAULT CHARSET='utf8';
diff --git a/workflow/engine/src/ProcessMaker/Core/System.php b/workflow/engine/src/ProcessMaker/Core/System.php
index 36e3061ed..54d98e9e9 100644
--- a/workflow/engine/src/ProcessMaker/Core/System.php
+++ b/workflow/engine/src/ProcessMaker/Core/System.php
@@ -30,7 +30,7 @@ class System
private static $config = null;
private static $debug = null;
private static $instance;
- private static $defaultConfig = array(
+ private static $defaultConfig = [
'debug' => 0,
'debug_sql' => 0,
'debug_time' => 0,
@@ -70,8 +70,11 @@ class System
'google_map_signature' => '',
'logging_level' => 'INFO',
'upload_attempts_limit_per_user' => '60,1',
- 'files_white_list' => ''
- );
+ 'files_white_list' => '',
+ 'delay' => '0',
+ 'tries' => '10',
+ 'retry_after' => '90'
+ ];
/**
* List currently installed plugins
diff --git a/workflow/public_html/sysGeneric.php b/workflow/public_html/sysGeneric.php
index d4ee8e48a..ad4359f13 100644
--- a/workflow/public_html/sysGeneric.php
+++ b/workflow/public_html/sysGeneric.php
@@ -2,6 +2,7 @@
use Illuminate\Foundation\Http\Kernel;
use ProcessMaker\Core\AppEvent;
+use ProcessMaker\Core\JobsManager;
/*----------------------------------********---------------------------------*/
use ProcessMaker\ChangeLog\ChangeLog;
/*----------------------------------********---------------------------------*/
@@ -704,6 +705,11 @@ if (defined('DEBUG_SQL_LOG') && DEBUG_SQL_LOG) {
Propel::init(PATH_CORE . "config/databases.php");
}
+/**
+ * JobsManager
+ */
+JobsManager::getSingleton()->init();
+
//here we are loading all plugins registered
//the singleton has a list of enabled plugins
$oPluginRegistry = PluginRegistry::loadSingleton();