/** * 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'); } }
public function previewCampaign() { // get parameters from url route $parameters = $this->request->route()->parameters(); // function to view online the campaign $emailCampaign = EmailCampaign::find(Crypt::decrypt($parameters['campaign'])); // We check that the historyId exists and is equal to 0, // It is 0 when the request comes from a campaign preview if (isset($parameters['historyId']) && $parameters['historyId'] !== '0') { $emailSendHistorical = EmailSendHistory::builder()->where('id_048', Crypt::decrypt($parameters['historyId']))->first(); } // if is a test mailing, set contactKey and historyId to 0 $data = ['email' => isset($emailSendHistorical->email_041) ? $emailSendHistorical->email_041 : null, 'html' => $emailCampaign->header_044 . $emailCampaign->body_044 . $emailCampaign->footer_044, 'subject' => $emailCampaign->subject_044, 'campaign' => Crypt::encrypt($emailCampaign->id_044), 'contactKey' => isset($emailSendHistorical->id_041) ? Crypt::encrypt($emailSendHistorical->id_041) : '0', 'company' => isset($emailSendHistorical->company_041) ? $emailSendHistorical->company_041 : null, 'name' => isset($emailSendHistorical->name_041) ? $emailSendHistorical->name_041 : null, 'surname' => isset($emailSendHistorical->surname_041) ? $emailSendHistorical->surname_041 : null, 'birthDay' => isset($emailSendHistorical->birth_date_041) ? date(config('pulsar.datePattern'), $emailSendHistorical->birth_date_041) : null, 'historyId' => isset($parameters['historyId']) ? $parameters['historyId'] : '0']; $data = EmailServices::setTemplate($data); return view('pulsar::common.views.html_display', $data); }