コード例 #1
0
ファイル: Cron.php プロジェクト: syscover/comunik
 /**
  * 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');
     }
 }