/** * Function to get contacts from campaign to record in send queue table * * @access private * @param arrray $data * @return void */ private static function checkEmailsToQueue($data) { $emailServiceSendingEmailsToQueue = Preference::getValue('emailServiceSendingEmailsToQueue', 5, '0'); // Comprobación para casos de errores o caídas del servidor, y no dejen bloquedo el envío de emails a la cola de proceso // si en 5 minutos no se ha liberado la variable, damos por hecho que se ha bloqueado y la liberamos $update = \DateTime::createFromFormat('Y-m-d H:i:s', $emailServiceSendingEmailsToQueue->updated_at); if ($emailServiceSendingEmailsToQueue->value_018 == '1' && date('U') - $update->getTimestamp() > 300) { Preference::setValue('emailServiceSendingEmailsToQueue', 5, '0'); } // en el caso que el estado de envio esté activo, eso siginifica que hay una petición trabajando y enviando // a la tabla de cola de envíos los contactos, cuando termine de hacerlo cambiaremos el estado de envío de emails // para poder aceptar más peticiones, de esa manera nos aseguramos que no hayan // varias peticiones concurrentes insertando mails. if ($emailServiceSendingEmailsToQueue->value_018 == '1') { exit; } else { Preference::setValue('emailServiceSendingEmailsToQueue', 5, '1'); } // START INCLUDES EMAILS IN SEND QUEUE TABLE $campaign = EmailCampaign::find($data['id']); // antes de realizar la ejecución comprobamos que la capaña aún existe, no vaya a ser que la hayan borrado en el intervalo de tiempo, // entre que se mando la petición a cola y se ejecute la petición if ($campaign == null) { exit; } $groups = $campaign->getGroups; $countries = $campaign->getCountries; $groupIds = $groups->pluck('id_040')->toArray(); $countryIds = $countries->pluck('id_002')->toArray(); // obtenemos los contactos a insertar $contacts = Contact::getContactsEmailToInsert($campaign->id_044, $groupIds, $countryIds, (int) Preference::getValue('emailServiceIntervalProcess', 5)->value_018, 0); // insert emailing into email queue if (count($contacts) > 0) { $emailSendQueue = []; foreach ($contacts as $contact) { $emailing = ['campaign_id_047' => $campaign->id_044, 'contact_id_047' => $contact->id_041, 'create_047' => date('U'), 'sorting_047' => $campaign->sorting_044, 'status_id_047' => 0]; array_push($emailSendQueue, $emailing); } EmailSendQueue::insert($emailSendQueue); Preference::setValue('emailServiceSendingEmailsToQueue', 5, '0'); } else { // marcamos la campaña como creada, ya que puede que esté creada de antemano // o si no lo estuviera por ser un envío con fecha posterior a la de su creación EmailCampaign::where('id_044', $campaign->id_044)->update(['created_044' => true]); Preference::setValue('emailServiceSendingEmailsToQueue', 5, '0'); } }