Ejemplo n.º 1
0
 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');
 }
Ejemplo n.º 2
0
 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('&amp;', '&', $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('&amp;', '&', $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('&amp;', '&', $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('&amp;', '&', $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('&amp;', '&', $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;
     */
 }