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); } }