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();