diff --git a/application/Espo/Controllers/Admin.php b/application/Espo/Controllers/Admin.php index ecc41f8d38..c8fb0362cc 100644 --- a/application/Espo/Controllers/Admin.php +++ b/application/Espo/Controllers/Admin.php @@ -63,7 +63,7 @@ class Admin extends \Espo\Core\Controllers\Base { $scheduledJob = $this->getContainer()->get('scheduledJob'); - return $scheduledJob->getAllNamesOnly(); + return $scheduledJob->getAvailableList(); } public function postActionUploadUpgradePackage($params, $data) diff --git a/application/Espo/Core/DataManager.php b/application/Espo/Core/DataManager.php index 700d72e747..66b62ee522 100644 --- a/application/Espo/Core/DataManager.php +++ b/application/Espo/Core/DataManager.php @@ -59,6 +59,8 @@ class DataManager $result &= $this->rebuildDatabase($entityList); + $this->rebuildScheduledJobs(); + return $result; } @@ -121,6 +123,40 @@ class DataManager return empty($ormData) ? false : true; } + public function rebuildScheduledJobs() + { + $metadata = $this->getContainer()->get('metadata'); + $entityManager = $this->getContainer()->get('entityManager'); + + $jobs = $metadata->get(['entityDefs', 'ScheduledJob', 'jobs'], array()); + + foreach ($jobs as $jobName => $defs) { + if ($jobName && !empty($defs['isSystem']) && !empty($defs['scheduling'])) { + if (!$entityManager->getRepository('ScheduledJob')->where(array( + 'job' => $jobName, + 'status' => 'Active', + 'scheduling' => $defs['scheduling'] + ))->findOne()) { + $job = $entityManager->getRepository('ScheduledJob')->where(array( + 'job' => $jobName + ))->findOne(); + if ($job) { + $entityManager->removeEntity($job); + } + $job = $entityManager->getEntity('ScheduledJob'); + $job->set(array( + 'job' => $jobName, + 'status' => 'Active', + 'scheduling' => $defs['scheduling'], + 'isInternal' => true, + 'name' => $jobName + )); + $entityManager->saveEntity($job); + } + } + } + } + /** * Update cache timestamp * diff --git a/application/Espo/Core/Utils/ScheduledJob.php b/application/Espo/Core/Utils/ScheduledJob.php index 025e3e2a0c..cbff7dfe09 100644 --- a/application/Espo/Core/Utils/ScheduledJob.php +++ b/application/Espo/Core/Utils/ScheduledJob.php @@ -111,6 +111,15 @@ class ScheduledJob return $this->getClassName($name); } + public function getAvailableList() + { + $data = $this->getAll(); + + $list = array_keys($data); + + return $list; + } + /** * Get list of all job names * diff --git a/client/src/views/scheduled-job/fields/job.js b/client/src/views/scheduled-job/fields/job.js index 17e6cbb7a3..3b85649bfd 100644 --- a/client/src/views/scheduled-job/fields/job.js +++ b/client/src/views/scheduled-job/fields/job.js @@ -37,7 +37,9 @@ Espo.define('views/scheduled-job/fields/job', 'views/fields/enum', function (Dep $.ajax({ url: 'Admin/jobs', success: function (data) { - this.params.options = data; + this.params.options = data.filter(function (item) { + return !this.getMetadata().get(['entityDefs', 'ScheduledJob', 'jobs', item, 'isSystem']); + }, this); this.params.options.unshift(''); this.wait(false); }.bind(this)