if ($taskResult['numberOfItems'] === 0) {
$result = $this->handleEnd();
+ $this->enableBackgroundExecution();
if (!empty($result['redirect_url'])) {
CRM_Utils_System::redirect($result['redirect_url']);
}
]);
}
+ /**
+ * Ensure that background workers will not try to run this queue.
+ */
+ protected function enableBackgroundExecution(): void {
+ if (CRM_Core_Config::isUpgradeMode()) {
+ // Versions <=5.50 do not have `status` column.
+ if (!CRM_Core_DAO::checkTableExists('civicrm_queue') || !CRM_Core_BAO_SchemaHandler::checkIfFieldExists('civicrm_queue', 'status')) {
+ // The system doesn't have automatic background workers yet. Neither necessary nor possible to toggle `status`.
+ // See also: https://lab.civicrm.org/dev/core/-/issues/3653
+ return;
+ }
+ }
+
+ // If it was disabled for background processing & has not been otherwise altered then
+ // re-enable it as it might be a persistent queue.
+ CRM_Core_DAO::executeQuery('UPDATE civicrm_queue SET status = "active" WHERE name = %1 AND status IS NULL', [
+ 1 => [$this->queue->getName(), 'String'],
+ ]);
+ }
+
}