97 lines
2.5 KiB
PHP
97 lines
2.5 KiB
PHP
<?php
|
|
|
|
use Civi\Mailinglistsync\QueueHelper;
|
|
use CRM_Mailinglist_ExtensionUtil as E;
|
|
|
|
/**
|
|
* Mailinglistsync.Mlmmjsync API specification (optional)
|
|
* This is used for documentation and validation.
|
|
*
|
|
* @param array $spec description of fields supported by this API call
|
|
*
|
|
* @see https://docs.civicrm.org/dev/en/latest/framework/api-architecture/
|
|
*/
|
|
function _civicrm_api3_mailinglistsync_Mlmmjsync_spec(&$spec) {}
|
|
|
|
/**
|
|
* Mailinglistsync.Mlmmjsync API
|
|
*
|
|
* @param array $params
|
|
*
|
|
* @return array
|
|
* API result descriptor
|
|
*
|
|
* @see civicrm_api3_create_success
|
|
*
|
|
* @throws CRM_Core_Exception
|
|
*/
|
|
function civicrm_api3_mailinglistsync_Mlmmjsync($params) {
|
|
|
|
// 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 = [];
|
|
$continue = TRUE;
|
|
while($continue) {
|
|
$result = $groupRunner->runNext(false);
|
|
if (!$result['is_continue']) {
|
|
$continue = false;
|
|
}
|
|
$results['runners'][] = $result;
|
|
}
|
|
|
|
$groups = $qh->getGroups();
|
|
$events = $qh->getEvents();
|
|
$emails = $qh->getEmails();
|
|
|
|
// TODO: 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) {
|
|
$emailGroups = $email->getGroups();
|
|
$emailEvents = $email->getEvents();
|
|
foreach ($emailGroups as $group) {
|
|
$mailingListsToSync[$group->getId()] = $group;
|
|
}
|
|
foreach ($emailEvents as $event) {
|
|
$mailingListsToSync[$event->getId()] = $event;
|
|
}
|
|
}
|
|
|
|
foreach ($mailingListsToSync as $mailingList) {
|
|
$results['mailing_lists'][] = $mailingList->sync();
|
|
}
|
|
|
|
return civicrm_api3_create_success($results, [], 'Mailinglist', 'Mlmmjsync');
|
|
|
|
/*
|
|
throw new CRM_Core_Exception('Everyone knows that the magicword is "sesame"', 'magicword_incorrect');
|
|
*/
|
|
}
|