private function processDistribution($cronjob = array())
 {
     global $dbNewsletterArchive;
     global $dbProvider;
     global $dbContact;
     global $dbNewsletterTemplates;
     global $newsletterCommands;
     global $dbNewsletterCfg;
     global $dbNewsProcess;
     if (!isset($cronjob[dbKITnewsletterProcess::field_archiv_id])) {
         // Fehler, Aufruf ohne Archiv ID
         $this->setError(sprintf('[%s -%s] %s', __METHOD__, __LINE__, 'call function without valid Newsletter Archive ID!'));
         exit($this->getError());
     }
     // Newsletter auslesen
     $where = array();
     $where[dbKITnewsletterArchive::field_id] = $cronjob[dbKITnewsletterProcess::field_archiv_id];
     $newsletter = array();
     if (!$dbNewsletterArchive->sqlSelectRecord($where, $newsletter)) {
         $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbNewsletterArchive->getError()));
         // finish newsletter process with actual status
         $this->processNewsletterStatus($cronjob[dbKITnewsletterProcess::field_archiv_id], 0);
         exit($this->getError());
     }
     if (count($newsletter) < 1) {
         $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, sprintf(kit_error_item_id, $cronjob[dbKITnewsletterProcess::field_archiv_id])));
         // finish newsletter process with actual status
         $this->processNewsletterStatus($cronjob[dbKITnewsletterProcess::field_archiv_id], 0);
         exit($this->getError());
     }
     $newsletter = $newsletter[0];
     // Provider
     $where = array();
     $where[dbKITprovider::field_id] = intval($newsletter[dbKITnewsletterArchive::field_provider]);
     $provider = array();
     if (!$dbProvider->sqlSelectRecord($where, $provider)) {
         $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbProvider->getError()));
         // finish newsletter process with actual status
         $this->processNewsletterStatus($cronjob[dbKITnewsletterProcess::field_archiv_id], 0);
         exit($this->getError());
     }
     if (count($provider) < 1) {
         $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, sprintf(kit_error_item_id, $newsletter[dbKITnewsletterArchive::field_provider])));
         // finish newsletter process with actual status
         $this->processNewsletterStatus($cronjob[dbKITnewsletterProcess::field_archiv_id], 0);
         exit($this->getError());
     }
     $provider = $provider[0];
     // Template
     $where = array();
     $where[dbKITnewsletterTemplates::field_id] = $newsletter[dbKITnewsletterArchive::field_template];
     $template = array();
     if (!$dbNewsletterTemplates->sqlSelectRecord($where, $template)) {
         $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbNewsletterTemplates->getError()));
         // finish newsletter process with actual status
         $this->processNewsletterStatus($cronjob[dbKITnewsletterProcess::field_archiv_id], 0);
         exit($this->getError());
     }
     if (count($template) < 1) {
         $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, sprintf(kit_error_item_id, $newsletter[dbKITnewsletterArchive::field_template])));
         // finish newsletter process with actual status
         $this->processNewsletterStatus($cronjob[dbKITnewsletterProcess::field_archiv_id], 0);
         exit($this->getError());
     }
     $template = $template[0];
     $worker = explode(',', $cronjob[dbKITnewsletterProcess::field_distribution_ids]);
     $in_ids = '';
     foreach ($worker as $id) {
         $in_ids .= strlen($in_ids) > 0 ? sprintf(",'%d'", $id) : sprintf("'%d'", $id);
     }
     // Empfaenger Adressen zusammenstellen
     $SQL = sprintf("SELECT * FROM %s WHERE %s IN (%s)", $dbContact->getTableName(), dbKITcontact::field_id, $in_ids);
     $addresses = array();
     if (!$dbContact->sqlExec($SQL, $addresses)) {
         $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbContact->getError()));
         // finish newsletter process with actual status
         $this->processNewsletterStatus($cronjob[dbKITnewsletterProcess::field_archiv_id], 0);
         exit($this->getError());
     }
     $transmitted = 0;
     foreach ($addresses as $address) {
         // E-Mail Programm starten
         $kitMail = new kitMail($provider[dbKITprovider::field_id]);
         // HTML body generieren
         $html = $newsletter[dbKITnewsletterArchive::field_html];
         if ($newsletterCommands->parseCommands($html, '', $address[dbKITcontact::field_id], $newsletter)) {
             $html_content = $template[dbKITnewsletterTemplates::field_html];
             if (!$newsletterCommands->parseCommands($html_content, $html, $address[dbKITcontact::field_id], $newsletter)) {
                 $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $newsletterCommands->getError()));
                 // important: dont leave on error, continue the process!
                 continue;
             }
         } else {
             $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $newsletterCommands->getError()));
             // important: dont leave on error, continue the process!
             continue;
         }
         // TEXT body generieren
         $text = $newsletter[dbKITnewsletterArchive::field_text];
         if ($newsletterCommands->parseCommands($text, '', $address[dbKITcontact::field_id], $newsletter)) {
             $text_content = $template[dbKITnewsletterTemplates::field_text];
             if (!$newsletterCommands->parseCommands($text_content, $text, $address[dbKITcontact::field_id], $newsletter)) {
                 $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $newsletterCommands->getError()));
                 // important: dont leave on error, continue the process!
                 continue;
             }
         } else {
             $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $newsletterCommands->getError()));
             // important: dont leave on error, continue the process!
             continue;
         }
         // use standard email address
         $email_address = $dbContact->getStandardEMailByID($address[dbKITcontact::field_id]);
         if ($cronjob[dbKITnewsletterProcess::field_simulate] == 1) {
             // Versand wird nur simuliert!
             $this->writeNewsletterLog($cronjob[dbKITnewsletterProcess::field_id], $email_address, $address[dbKITcontact::field_id], dbCronjobNewsletterLog::status_simulation, '');
         } else {
             // send Newsletter!
             if ($kitMail->sendNewsletter($newsletter[dbKITnewsletterArchive::field_subject], $html_content, $text_content, $provider[dbKITprovider::field_email], $provider[dbKITprovider::field_name], $email_address, '', true)) {
                 $transmitted++;
                 $protocol = sprintf(kit_protocol_send_newsletter_success, $newsletter[dbKITnewsletterArchive::field_subject], date('H:i:s'), $email_address);
                 if (!$dbContact->addSystemNotice($address[dbKITcontact::field_id], $protocol)) {
                     $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE, $dbContact->getError()));
                     // important: dont leave on error, continue the process!
                     continue;
                 }
                 $this->writeNewsletterLog($cronjob[dbKITnewsletterProcess::field_id], $email_address, $address[dbKITcontact::field_id], dbCronjobNewsletterLog::status_ok, '');
             } else {
                 if (!$dbContact->addSystemNotice($address[dbKITcontact::field_id], sprintf(kit_protocol_send_newsletter_fail, $newsletter[dbKITnewsletterArchive::field_subject], date('H:i:s'), $email_address, $kitMail->getMailError()))) {
                     $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE, $dbContact->getError()));
                     // important: dont leave on error, continue the process!
                     continue;
                 }
                 $this->writeNewsletterLog($cronjob[dbKITnewsletterProcess::field_id], $email_address, $address[dbKITcontact::field_id], dbCronjobNewsletterLog::status_error, $kitMail->getMailError());
             }
         }
         // send Newsletter
         $kitMail->__destruct();
     }
     // write newsletter process status
     $this->processNewsletterStatus($cronjob[dbKITnewsletterProcess::field_id], $transmitted);
     exit('OK');
 }
 /**
  * Subscribe a user to the newsletter
  *
  * @param $form_data array
  * @return string confirmation dialog on success or boolean false on error
  */
 protected function subscribeNewsletter($form_data = array())
 {
     global $kitContactInterface;
     global $dbContactArrayCfg;
     $use_subscribe = false;
     $subscribe = false;
     // pruefen ob kit_newsletter_subscribe verwendet wird
     if (isset($_REQUEST[kitContactInterface::kit_newsletter_subscribe])) {
         $use_subscribe = true;
         if (is_bool($_REQUEST[kitContactInterface::kit_newsletter_subscribe])) {
             $subscribe = $_REQUEST[kitContactInterface::kit_newsletter_subscribe];
         } elseif (is_numeric($_REQUEST[kitContactInterface::kit_newsletter_subscribe])) {
             $subscribe = $_REQUEST[kitContactInterface::kit_newsletter_subscribe] == 1 ? true : false;
         } else {
             $subscribe = strtolower($_REQUEST[kitContactInterface::kit_newsletter_subscribe]) == 'true' ? true : false;
         }
     }
     $newsletter = '';
     if (isset($_REQUEST[kitContactInterface::kit_newsletter]) && is_array($_REQUEST[kitContactInterface::kit_newsletter])) {
         $newsletter = implode(',', $_REQUEST[kitContactInterface::kit_newsletter]);
     } elseif (isset($_REQUEST[kitContactInterface::kit_newsletter])) {
         $newsletter = $_REQUEST[kitContactInterface::kit_newsletter];
     }
     $email = $_REQUEST[kitContactInterface::kit_email];
     $register = array();
     $contact = array();
     $send_activation = false;
     if (!$kitContactInterface->subscribeNewsletter($email, $newsletter, $subscribe, $use_subscribe, $register, $contact, $send_activation)) {
         if ($kitContactInterface->isError()) {
             $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $kitContactInterface->getError()));
             return false;
         }
         $this->setMessage($kitContactInterface->getMessage());
         return $this->showForm();
     }
     $message = $kitContactInterface->getMessage();
     // special: check contact language
     if (isset($_REQUEST[kitContactInterface::kit_contact_language]) && $_REQUEST[kitContactInterface::kit_contact_language] !== strtolower(LANGUAGE)) {
         $update = array();
         $update[kitContactInterface::kit_contact_language] = strtolower(LANGUAGE);
         if (!$kitContactInterface->updateContact($register[dbKITregister::field_contact_id], $update)) {
             $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $kitContactInterface->getError()));
             return false;
         }
     }
     if ($send_activation == false) {
         $message .= sprintf($this->lang->translate('<p>The newsletter abonnement for the email address <b>{{ email }}</b> was updated.</p>', array('email' => $email)));
         $this->setMessage($message);
         $data = array('message' => $this->getMessage());
         return $this->getTemplate('prompt.htt', $data);
     } else {
         // Aktivierungskey versenden
         $form = array('activation_link' => sprintf('%s%s%s', $this->page_link, strpos($this->page_link, '?') === false ? '?' : '&', http_build_query(array(self::request_action => self::action_activation_key, self::request_key => $register[dbKITregister::field_register_key], self::request_provider_id => $form_data[dbKITform::field_provider_id], self::request_activation_type => self::activation_type_newsletter))), 'datetime' => date(cfg_datetime_str), 'subject' => $form_data[dbKITform::field_title]);
         $newsletter_array = array();
         $na = explode(',', $newsletter);
         foreach ($na as $nl) {
             $SQL = sprintf("SELECT %s FROM %s WHERE %s='%s'", dbKITcontactArrayCfg::field_value, $dbContactArrayCfg->getTableName(), dbKITcontactArrayCfg::field_identifier, $nl);
             $result = array();
             if (!$dbContactArrayCfg->sqlExec($SQL, $result)) {
                 $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbContactArrayCfg->getError()));
                 return false;
             }
             if (count($result) > 0) {
                 $newsletter_array[] = array('name' => $nl, 'value' => $result[0][dbKITcontactArrayCfg::field_value]);
             }
         }
         $data = array('form' => $form, 'contact' => $contact, 'newsletter' => $newsletter_array);
         $provider_data = array();
         if (!$kitContactInterface->getServiceProviderByID($form_data[dbKITform::field_provider_id], $provider_data)) {
             if ($kitContactInterface->isError()) {
                 $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $kitContactInterface->getError()));
             } else {
                 $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $kitContactInterface->getMessage()));
             }
             return false;
         }
         $provider_email = $provider_data['email'];
         $provider_name = $provider_data['name'];
         $relaying = (bool) $provider_data['relaying'];
         $client_mail = $this->getTemplate('mail.client.register.newsletter.htt', $data);
         if ($form_data[dbKITform::field_email_html] == dbKITform::html_off) {
             $client_mail = strip_tags($client_mail);
         }
         $client_subject = strip_tags($this->getTemplate('mail.client.subject.htt', $data));
         $mail = new kitMail($form_data[dbKITform::field_provider_id]);
         if (!$mail->mail($client_subject, $client_mail, $provider_email, $provider_name, array($contact[kitContactInterface::kit_email] => $contact[kitContactInterface::kit_email]), $form_data[dbKITform::field_email_html] == dbKITform::html_on ? true : false)) {
             $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $this->lang->translate('Can\'t send the email to <b>{{ email }}</b>!', array('email' => $contact[kitContactInterface::kit_email]))));
             return false;
         }
         $provider_mail = $this->getTemplate('mail.provider.register.newsletter.htt', $data);
         if ($form_data[dbKITform::field_email_html] == dbKITform::html_off) {
             $provider_mail = strip_tags($provider_mail);
         }
         $provider_subject = strip_tags($this->getTemplate('mail.provider.subject.htt', $data));
         $cc_array = array();
         $ccs = explode(',', $form_data[dbKITform::field_email_cc]);
         foreach ($ccs as $cc) {
             if (!empty($cc)) {
                 $cc_array[$cc] = $cc;
             }
         }
         $mail = new kitMail($form_data[dbKITform::field_provider_id]);
         if (!$relaying) {
             $mail->AddReplyTo($contact[kitContactInterface::kit_email]);
             $from_name = $contact[kitContactInterface::kit_email];
             $from_email = $provider_email;
         } else {
             $from_name = $contact[kitContactInterface::kit_email];
             $from_email = $contact[kitContactInterface::kit_email];
         }
         if (!$mail->mail($provider_subject, $provider_mail, $from_email, $from_name, array($provider_email => $provider_name), $form_data[dbKITform::field_email_html] == dbKITform::html_on ? true : false, $cc_array)) {
             $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $this->lang->translate('Can\'t send the email to <b>{{ email }}</b>!', array('email' => SERVER_EMAIL))));
             return false;
         }
         return $this->getTemplate('confirm.register.newsletter.htt', $data);
     }
 }