🎉 initial commit

This commit is contained in:
Marc Koch 2025-03-04 10:36:47 +01:00
commit c93a06972b
Signed by untrusted user who does not match committer: marc.koch
GPG key ID: 12406554CFB028B9
27 changed files with 4189 additions and 0 deletions

View file

@ -0,0 +1,97 @@
<?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');
*/
}