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'); }
protected function checkCommand() { global $dbKITformCommands; global $dbKITformData; global $dbKITformFields; global $kitContactInterface; global $dbKITform; if (!isset($_REQUEST[self::request_command])) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $this->lang->translate('This command does not exists or was already executed!'))); return false; } $where = array(dbKITformCommands::FIELD_COMMAND => $_REQUEST[self::request_command]); $command = array(); if (!$dbKITformCommands->sqlSelectRecord($where, $command)) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbKITformCommands->getError())); return false; } if (count($command) == 1) { $command = $command[0]; if ($command[dbKITformCommands::FIELD_TYPE] == dbKITformCommands::TYPE_FEEDBACK_PUBLISH || $command[dbKITformCommands::FIELD_TYPE] == dbKITformCommands::TYPE_FEEDBACK_REFUSE) { // Feedback zurueckweisen $parse = str_replace('&', '&', $command[dbKITformCommands::FIELD_PARAMS]); parse_str($parse, $params); if (isset($params['data_id'])) { $form_data = array(); $where = array(dbKITformData::field_id => $params['data_id']); if (!$dbKITformData->sqlSelectRecord($where, $form_data)) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbKITformData->getError())); return false; } if (count($form_data) == 1) { $form_data = $form_data[0]; // get the form fields $where = array(dbKITformFields::field_form_id => $form_data[dbKITformData::field_form_id]); $form_fields = array(); if (!$dbKITformFields->sqlSelectRecord($where, $form_fields)) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbKITformFields->getError())); return false; } foreach ($form_fields as $ff) { switch ($ff[dbKITformFields::field_name]) { case self::FIELD_FEEDBACK_HOMEPAGE: $fb_homepage = $ff[dbKITformFields::field_id]; break; case self::FIELD_FEEDBACK_NICKNAME: $fb_nickname = $ff[dbKITformFields::field_id]; break; case self::FIELD_FEEDBACK_PUBLISH: $fb_publish = $ff[dbKITformFields::field_id]; break; case self::FIELD_FEEDBACK_SUBJECT: $fb_subject = $ff[dbKITformFields::field_id]; break; case self::FIELD_FEEDBACK_SUBSCRIPTION: $fb_subscription = $ff[dbKITformFields::field_id]; break; case self::FIELD_FEEDBACK_TEXT: $fb_text = $ff[dbKITformFields::field_id]; break; case self::FIELD_FEEDBACK_URL: $fb_url = $ff[dbKITformFields::field_id]; break; } } if (isset($fb_publish)) { $parse = str_replace('&', '&', $form_data[dbKITformData::field_values]); parse_str($parse, $values); if (isset($values[$fb_publish])) { if ($command[dbKITformCommands::FIELD_TYPE] == dbKITformCommands::TYPE_FEEDBACK_REFUSE) { $values[$fb_publish] = self::PUBLISH_FORBIDDEN; } else { $values[$fb_publish] = self::PUBLISH_IMMEDIATE; } $where = array(dbKITformData::field_id => $params['data_id']); $data = array(dbKITformData::field_values => http_build_query($values), dbKITformData::field_timestamp => date('Y-m-d H:i:s')); if (!$dbKITformData->sqlUpdateRecord($data, $where)) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbKITformData->getError())); return false; } // delete command $where = array(dbKITformCommands::FIELD_ID => $command[dbKITformCommands::FIELD_ID]); if (!$dbKITformCommands->sqlDeleteRecord($where)) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbKITformCommands->getError())); return false; } if ($command[dbKITformCommands::FIELD_TYPE] == dbKITformCommands::TYPE_FEEDBACK_REFUSE) { // feedback is successfully refused! $this->setMessage($this->lang->translate('<p>The feedback was refused!</p>')); } else { // feedback is now published - check for // subscriber! $subscriber_emails = array(); $where = array(dbKITformData::field_form_id => $form_data[dbKITformData::field_form_id]); $sub_data = array(); if (!$dbKITformData->sqlSelectRecord($where, $sub_data)) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbKITformData->getError())); return false; } foreach ($sub_data as $sub) { $parse = str_replace('&', '&', $sub[dbKITformData::field_values]); parse_str($parse, $values); if (isset($values[$fb_subscription][0]) && $values[$fb_subscription][0] == self::SUBSCRIPE_YES) { $cont = array(); if (!$kitContactInterface->getContact($sub[dbKITformData::field_kit_id], $cont)) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $this->lang->translate('The ID {{ id }} is invalid!', array('id' => $sub[dbKITformData::field_kit_id])))); return false; } if (!in_array($cont[kitContactInterface::kit_email], $subscriber_emails) && $cont[kitContactInterface::kit_email] != $params['contact'][kitContactInterface::kit_email]) { $subscriber_emails[] = $cont[kitContactInterface::kit_email]; } } } if (count($subscriber_emails) > 0) { // prepare emails and send out... $form = array(); $where = array(dbKITform::field_id => $form_data[dbKITformData::field_form_id]); if (!$dbKITform->sqlSelectRecord($where, $form)) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbKITform->getError())); return false; } $form = $form[0]; // prepare sending emails $provider_data = array(); if (!$kitContactInterface->getServiceProviderByID($form[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']; $feedback_array = array(self::FIELD_FEEDBACK_HOMEPAGE => isset($fb_homepage) ? $values[$fb_homepage] : '', self::FIELD_FEEDBACK_NICKNAME => isset($fb_nickname) ? $values[$fb_nickname] : '', self::FIELD_FEEDBACK_PUBLISH => isset($fb_publish) ? $values[$fb_publish] : self::PUBLISH_IMMEDIATE, self::FIELD_FEEDBACK_SUBJECT => isset($fb_subject) ? $values[$fb_subject] : '', self::FIELD_FEEDBACK_SUBSCRIPTION => isset($fb_subscription) ? $values[$fb_subscription] : self::SUBSCRIPE_NO, self::FIELD_FEEDBACK_TEXT => isset($fb_text) ? $values[$fb_text] : '', self::FIELD_FEEDBACK_URL => isset($fb_url) ? $values[$fb_url] : ''); $body_data = array('feedback' => array('field' => $feedback_array, 'unsubscribe_link' => sprintf('%s?%s#%s', $this->page_link, http_build_query(array(self::request_action => self::action_feedback_unsubscribe, self::request_form_id => $form_data[dbKITformData::field_form_id])), self::FORM_ANCHOR))); $subscriber_mail = $this->getTemplate('mail.feedback.subscriber.submit.htt', $body_data); if ($form[dbKITform::field_email_html] == dbKITform::html_off) { $subscriber_mail = strip_tags($subscriber_mail); } $subscriber_subject = stripslashes($this->getTemplate('mail.feedback.subject.htt', array('subject' => $form[dbKITform::field_title]))); $bcc_array = array(); foreach ($subscriber_emails as $cc) { if (!empty($cc)) { $bcc_array[$cc] = $cc; } } $mail = new kitMail($form[dbKITform::field_provider_id]); if (!$mail->mail($subscriber_subject, $subscriber_mail, $provider_email, $provider_name, array($provider_email => $provider_name), $form[dbKITform::field_email_html] == dbKITform::html_on ? true : false, array(), $bcc_array)) { $err = $mail->getMailError(); if (empty($err)) { $err = $this->lang->translate('Can\'t send the email to <b>{{ email }}</b>!', array('email' => $provider_email)); } $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $err)); return false; } } $this->setMessage($this->lang->translate('<p>The feedback was published.</p>')); } return $this->showForm(); } } } $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $this->lang->translate('The ID {{ id }} is invalid!', array('id' => $params['data_id'])))); return false; } else { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $this->lang->translate('The command is not complete, missing parameters!'))); return false; } } elseif ($command[dbKITformCommands::FIELD_TYPE] == dbKITformCommands::TYPE_DELAYED_TRANSMISSION) { // DELAYED TRANSMISSION - load the form data and show the form // again $parse = str_replace('&', '&', $command[dbKITformCommands::FIELD_PARAMS]); parse_str($parse, $params); if (isset($params[dbKITformData::field_id])) { // read the transmitted data for this form $form_data = array(); $where = array(dbKITformData::field_id => $params[dbKITformData::field_id], dbKITformData::field_status => dbKITformData::status_delayed); if (!$dbKITformData->sqlSelectRecord($where, $form_data)) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbKITformData->getError())); return false; } if (count($form_data) < 1) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $this->lang->translate('The ID {{ id }} is invalid!', array('id' => $params['data_id'])))); return false; } $form_data = $form_data[0]; $fields = array(); $parse = str_replace('&', '&', $form_data[dbKITformData::field_values]); parse_str($parse, $fields); foreach ($fields as $key => $value) { // set $_REQUESTs for each free field $where = array(dbKITformFields::field_id => $key); $field_data = array(); if (!$dbKITformFields->sqlSelectRecord($where, $field_data)) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbKITformFields->getError())); return false; } // prompt no error, still continue on error ... if (count($field_data) < 1) { continue; } $field_data = $field_data[0]; // special: don't set the delayed transmission again! if ($field_data[dbKITformFields::field_type] == dbKITformFields::type_delayed) { continue; } $_REQUEST[$field_data[dbKITformFields::field_name]] = $value; } // get the contact data if (isset($params['kit_id'])) { $contact = array(); if (!$kitContactInterface->getContact($params['kit_id'], $contact)) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $kitContactInterface->getError())); return false; } foreach ($contact as $key => $value) { $_REQUEST[$key] = $value; } } // delete the saved form data $where = array(dbKITformData::field_id => $params[dbKITformData::field_id]); $data = array(dbKITformData::field_status => dbKITformData::status_deleted); if (!$dbKITformData->sqlUpdateRecord($data, $where)) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbKITformData->getError())); return false; } // delete the command $where = array(dbKITformCommands::FIELD_ID => $command[dbKITformCommands::FIELD_ID]); if (!$dbKITformCommands->sqlDeleteRecord($where)) { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $dbKITformCommands->getError())); return false; } // write protocol $notice = $this->lang->translate('[kitForm] The temporary saved form with the ID {{ id }} was deleted.', array('id' => $params['data_id'])); $kitContactInterface->addNotice($params['kit_id'], $notice); // message to inform the user about the deletion $this->setMessage($this->lang->translate('<p>The link to access this form is no longer valid and the temporary saved form data are now deleted.</p><p>Please submit the form or use again the option for a delayed transmission to create a new access link.</p>')); return $this->showForm(); } else { $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $this->lang->translate('The command is not complete, missing parameters!'))); return false; } } else { // unknown command $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $this->lang->translate('This command does not exists or was already executed!'))); return false; } } return $this->showForm(); /* $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $this->lang->translate('This command does not exists or was already executed!'))); return false; */ }