'Mailing list sync is disabled'], [], 'Mailinglist', 'Mlmmjsync' ); } $is_error = FALSE; // Get queues $qh = QueueHelper::getInstance(); $groupQueue = $qh->getGroupQueue(); $eventQueue = $qh->getEventQueue(); $emailQueue = $qh->getEmailQueue(); // Create runners $groupRunner = new CRM_Queue_Runner([ 'title' => ts('ProPeace GroupMailinglist Runner'), 'queue' => $groupQueue, 'errorMode' => CRM_Queue_Runner::ERROR_CONTINUE, ]); $eventRunner = new CRM_Queue_Runner([ 'title' => ts('ProPeace EventMailinglist Runner'), 'queue' => $eventQueue, 'errorMode' => CRM_Queue_Runner::ERROR_CONTINUE, ]); $emailRunner = new CRM_Queue_Runner([ 'title' => ts('ProPeace EmailMailinglist Runner'), 'queue' => $emailQueue, 'errorMode' => CRM_Queue_Runner::ERROR_CONTINUE, ]); // Run runners $results = []; foreach ([$groupRunner, $eventRunner, $emailRunner] as $runner) { $continue = TRUE; $count = 0; $errors = []; while ($continue) { $count++; $result = $runner->runNext(FALSE); $continue = $result['is_continue']; if ($result['is_error']) { $error = $result['exception']->getMessage(); // If the error is 'Failed to claim next task' we should stop the runner if ($error === 'Failed to claim next task') { $continue = FALSE; } else { $errors[] = $error; } } } $results['runners'][$runner->title][] = [ 'task_count' => $count, 'errors' => $errors, ]; $is_error = !empty($errors) || $is_error; } $groups = $qh->getGroups(); $events = $qh->getEvents(); $emails = $qh->getEmails(); // Sync groups and events just once and invoke syncing $mailingListsToSync = []; foreach ($groups as $group) { $mailingListsToSync[$group->getId()] = $group; } foreach ($events as $event) { $mailingListsToSync[$event->getId()] = $event; } foreach ($emails as $email) { $recipient = MailingListRecipient::getContactByEmail($email); $emailGroups = $recipient->getMailingLists(); $emailEvents = $recipient->getEventMailingLists(); foreach ($emailGroups as $group) { $mailingListsToSync[$group->getId()] = $group; } foreach ($emailEvents as $event) { $mailingListsToSync[$event->getId()] = $event; } } foreach ($mailingListsToSync as $mailingList) { /* @var \Civi\Mailinglistsync\BaseMailingList $mailingList */ $results['mailing_lists'][$mailingList->getEmailAddress()] = $mailingList->sync(); // TODO: re-add failed task to queue } if ($is_error) { return civicrm_api3_create_error('One or more errors occurred during the sync process', [ 'params' => $params, 'results' => $results, 'entity' => 'Mailinglistsync', 'action' => 'Mlmmjsync', ]); } return civicrm_api3_create_success($results, [], 'Mailinglist', 'Mlmmjsync'); } catch (Exception $e) { return civicrm_api3_create_error($e->getMessage(), [ 'params' => $params, 'entity' => 'Mailinglistsync', 'action' => 'Mlmmjsync', ]); } }