[ Index ]

PHP Cross Reference of phpwcms V1.4.7 _r403 (01.11.10)

title

Body

[close]

/include/inc_act/ -> act_sendnewsletter.php (source)

   1  <?php
   2  /*************************************************************************************
   3     Copyright notice
   4     
   5     (c) 2002-2010 Oliver Georgi (oliver@phpwcms.de) // All rights reserved.
   6   
   7     This script is part of PHPWCMS. The PHPWCMS web content management system is
   8     free software; you can redistribute it and/or modify it under the terms of
   9     the GNU General Public License as published by the Free Software Foundation;
  10     either version 2 of the License, or (at your option) any later version.
  11    
  12     The GNU General Public License can be found at http://www.gnu.org/copyleft/gpl.html
  13     A copy is found in the textfile GPL.txt and important notices to the license 
  14     from the author is found in LICENSE.txt distributed with these scripts.
  15    
  16     This script is distributed in the hope that it will be useful, but WITHOUT ANY 
  17     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  18     PARTICULAR PURPOSE.  See the GNU General Public License for more details.
  19   
  20     This copyright notice MUST APPEAR in all copies of the script!
  21  *************************************************************************************/
  22  
  23  session_start();
  24  $phpwcms = array();
  25  require_once ('../../config/phpwcms/conf.inc.php');
  26  require_once  ('../inc_lib/default.inc.php');
  27  require_once  (PHPWCMS_ROOT.'/include/inc_lib/dbcon.inc.php');
  28  
  29  require_once  (PHPWCMS_ROOT.'/include/inc_lib/general.inc.php');
  30  checkLogin();
  31  require_once  (PHPWCMS_ROOT.'/include/inc_ext/phpmailer/class.phpmailer.php');
  32  //load default language EN
  33  require_once  (PHPWCMS_ROOT.'/include/inc_lang/backend/en/lang.inc.php');
  34  if($_SESSION["wcs_user_lang_custom"]) { //use custom lang if available -> was set in login.php
  35      include(PHPWCMS_ROOT.'/include/inc_lang/backend/'.substr($_SESSION["wcs_user_lang"],0,2).'/lang.inc.php');
  36  }
  37  
  38  ?>
  39  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  40  <html xmlns="http://www.w3.org/1999/xhtml">
  41  <head>
  42      <title>phpwcms: Send Newsletter</title>
  43      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  44      <link href="../inc_css/newsletter.iframe.css" rel="stylesheet" type="text/css" />
  45  </head>
  46  <body>
  47  <?php
  48  
  49  $newsletter_id    = empty($_GET['newsletter_id']) ? 0 : intval($_GET['newsletter_id']);
  50  
  51  if($newsletter_id) {
  52      // read the given subscription datas from db
  53      $sql  = "SELECT *FROM ".DB_PREPEND."phpwcms_newsletter WHERE newsletter_id=".$newsletter_id." LIMIT 1";
  54      $newsletter = _dbQuery($sql);
  55      if(isset($newsletter[0]['newsletter_vars'])) {
  56          $newsletter[0]['newsletter_vars'] = unserialize($newsletter[0]['newsletter_vars']);
  57          $newsletter = $newsletter[0];
  58      } else {
  59          $newsletter = false;
  60      }
  61  } else {
  62      $newsletter    = false;
  63  }
  64  
  65  if(!$newsletter) {
  66  
  67      echo 'No valid newsletter ID given.';
  68  
  69  } elseif($_SESSION["wcs_user_admin"] == 1) {
  70  
  71      $notest        = 1;
  72      $recipient    = array();
  73      $loop        = isset($_GET['loop']) ? intval($_GET['loop']) : 0;
  74      if(!$loop && @ini_get('safe_mode') == '1') {
  75          $loop = 25;
  76      }
  77      $pause        = isset($_GET['pause']) ? intval($_GET['pause']) : 1;
  78  
  79      //check if a test email should be send
  80      if(!empty($_GET['send_testemail'])) {
  81      
  82          $notest = 0;
  83  
  84          $test_email_error = array();
  85          $test_email = clean_slweg($_GET['send_testemail']);
  86          $test_email = str_replace(array(' ', ','), ';', $test_email);
  87          $test_email = convertStringToArray($test_email, ';');
  88          
  89          foreach($test_email as $test_email_value) {
  90              if(is_valid_email($test_email_value)) {
  91                  
  92                  $recipient[] = array(    'address_name'    => 'Newsletter test recipient', 
  93                                          'address_email'    => $test_email_value, 
  94                                          'address_key'    => '', 
  95                                          'queue_id'        => 0 );
  96                  
  97                  echo '<p><strong>'.$BL['be_newsletter_testemail'].'</strong></p>';
  98                  
  99              } else {
 100                  $test_email_error[] = $test_email_value;
 101              }
 102          }
 103          
 104          if(count($test_email_error)) {
 105              echo str_replace('###TEST###', '&nbsp;&#8226; '.implode('&nbsp;&#8226; ', $test_email_error), $BL['be_newsletter_testerror']);
 106          }
 107  
 108  
 109      } elseif(isset($_GET['send_confirm']) && $_GET['send_confirm'] == 'confirmed') {
 110      
 111          // retrieve all recipients now
 112          
 113          // disable time limit
 114          if(!$loop) {
 115              set_time_limit(0);
 116          }
 117          
 118          // retrieve recipients for current loop
 119          $sql  = 'SELECT address_key, address_email, address_name, queue_id ';
 120          $sql .= 'FROM '.DB_PREPEND.'phpwcms_address ';
 121          $sql .= 'LEFT JOIN '.DB_PREPEND.'phpwcms_newsletterqueue ';
 122          $sql .= 'ON '.DB_PREPEND.'phpwcms_address.address_id = '.DB_PREPEND.'phpwcms_newsletterqueue.queue_rid ';
 123          $sql .= 'WHERE '.DB_PREPEND.'phpwcms_newsletterqueue.queue_status=0 AND ';
 124          $sql .= DB_PREPEND.'phpwcms_newsletterqueue.queue_pid='.$newsletter["newsletter_id"];
 125          if($loop) {
 126              $sql .= ' LIMIT '.$loop;
 127          }
 128          $recipient = _dbQuery($sql);
 129      
 130      
 131      } else {
 132      
 133          // do nothing
 134      
 135      }
 136      
 137      
 138      if(count($recipient)) {
 139  
 140          echo '<p><strong>'.$BL['be_newsletter_to'].': </strong><p>';
 141          
 142          // check for newsletter template
 143          if(!empty($newsletter['newsletter_vars']['template']) && ($template = @file_get_contents(PHPWCMS_TEMPLATE.'inc_newsletter/'.$newsletter['newsletter_vars']['template'].'/newsletter.tmpl'))) {
 144              $template_html = trim(get_tmpl_section('HTML', $template));
 145              $template_text = trim(get_tmpl_section('TEXT', $template));
 146              if($template_html) {
 147                  $newsletter['newsletter_vars']['html'] = str_replace('{CONTENT}', $newsletter['newsletter_vars']['html'], $template_html);
 148                  $newsletter['newsletter_vars']['html'] = preg_replace('/( src=["\'](?!http:|https:|mailto:))(.*?)/i', '$1'.PHPWCMS_URL.'$2', $newsletter['newsletter_vars']['html']);
 149              }
 150              if($template_text) {
 151                  $newsletter['newsletter_vars']['text'] = str_replace('{CONTENT}', $newsletter['newsletter_vars']['text'], $template_text);
 152              }
 153          }
 154      
 155          $mail = new PHPMailer();
 156          $mail->Mailer         = $phpwcms['SMTP_MAILER'];
 157          $mail->Host         = $phpwcms['SMTP_HOST'];
 158          $mail->Port         = $phpwcms['SMTP_PORT'];
 159          $mail->CharSet         = $phpwcms["charset"];
 160          if($phpwcms['SMTP_AUTH']) {
 161              $mail->SMTPAuth = 1;
 162              $mail->Username = $phpwcms['SMTP_USER'];
 163              $mail->Password = $phpwcms['SMTP_PASS'];
 164          }
 165          
 166          $mail->From         = $newsletter['newsletter_vars']['from_email'];
 167          $mail->FromName     = $newsletter['newsletter_vars']['from_name'];
 168          $mail->Sender         = $newsletter['newsletter_vars']['replyto'];
 169          $mail->Subject        = $newsletter['newsletter_subject'];
 170          
 171          if(!$mail->SetLanguage($phpwcms['default_lang'])) {
 172              $mail->SetLanguage('en');
 173          }
 174          
 175          $mail->SMTPKeepAlive = true;
 176          
 177          $x = 0;
 178          
 179          foreach($recipient as $value) {
 180          
 181              if($x == 20) {
 182                  $mail->SmtpClose(); // Manually close the SMTP connection
 183                  $mail->SMTPKeepAlive = true;
 184              }
 185      
 186              $mail->AddAddress($value['address_email'], $value['address_name']);
 187              
 188              if($newsletter['newsletter_vars']['html'] && $newsletter['newsletter_vars']['text']) {
 189                  //send both TEXT and HTML part
 190                  $mail->Body =     build_email_text($newsletter['newsletter_vars']['html'], $value);
 191                  $mail->AltBody = build_email_text($newsletter['newsletter_vars']['text'], $value);
 192                  $mail->IsHTML(1);
 193              }
 194              
 195              if($newsletter['newsletter_vars']['html'] && !$newsletter['newsletter_vars']['text']) {
 196                  //send HTML part
 197                  $mail->Body = build_email_text($newsletter['newsletter_vars']['html'], $value);
 198                  $mail->IsHTML(1);
 199              }
 200              
 201              if(!$newsletter['newsletter_vars']['html'] && $newsletter['newsletter_vars']['text']) {
 202                  //send TEXT part
 203                  $mail->Body = build_email_text($newsletter['newsletter_vars']['text'], $value);
 204                  $mail->IsHTML(0);
 205              }
 206              
 207              // update newsletter queue
 208              $sql  = 'UPDATE '.DB_PREPEND.'phpwcms_newsletterqueue SET ';
 209              $sql .= 'queue_changed=NOW(), ';
 210              if( ( $mailresult = $mail->Send() ) == false ) {
 211                  // save error information
 212                  $sql .= 'queue_status=2, ';
 213                  $sql .= "queue_errormsg='".aporeplace($mail->ErrorInfo)."' ";
 214              } else {
 215                  // save success
 216                  $sql .= 'queue_status=1 ';
 217              }
 218              $sql .= 'WHERE queue_id='.$value['queue_id'];
 219              @_dbQuery($sql, 'UPDATE');
 220              
 221              if($mailresult == false) {
 222                  echo '<p style="color:#CC3300">'.$value['address_email'].' ('.$mail->ErrorInfo.')</p>';
 223              } else {
 224                  echo '. ';
 225              }
 226              flush();
 227              
 228              $mail->ClearAddresses();
 229              $x++;
 230      
 231              if($loop && $loop == $x) {
 232                  $mail->SmtpClose();
 233                  updateSentDate($newsletter["newsletter_id"]);
 234                  echo '<script type="text/javascript">'.LF.SCRIPT_CDATA_START.LF;
 235                  echo 'function loopIt() { self.location.href="act_sendnewsletter.php?';
 236                  echo 'newsletter_id='.$newsletter["newsletter_id"].'&';
 237                  echo 'send_confirm=confirmed&loop='.$loop.'&pause='.$pause.'"; }'.LF;
 238                  echo 'window.setTimeout("loopIt()", '. ($pause * 1000) .')'.LF;
 239                  echo LF.SCRIPT_CDATA_END.LF.'</script></body></html>';
 240  
 241                  flush();
 242                  exit();
 243              }
 244              
 245          }
 246          
 247          $mail->SmtpClose();
 248          updateSentDate($newsletter["newsletter_id"]);
 249          echo '<br /><br />';
 250          echo $BL['be_newsletter_ready'];
 251      
 252      
 253      }
 254          
 255  } else {
 256      echo 'no permission';
 257  }
 258  
 259  function build_email_text($text, &$value) {
 260  
 261      //build right message part
 262      $refkey    = rawurlencode($value['address_key']);
 263  
 264      $text = str_replace('###RECIPIENT_NAME###', $value['address_name'], $text);
 265      $text = str_replace('###RECIPIENT_EMAIL###', $value['address_email'], $text);
 266      $text = str_replace('###SITE_URL###', PHPWCMS_URL, $text);
 267      $text = str_replace('###VERIFY_LINK###', PHPWCMS_URL.'verify.php?s='.$refkey, $text);
 268      $text = str_replace('###DELETE_LINK###', PHPWCMS_URL.'verify.php?u='.$refkey, $text);
 269      
 270      return $text;
 271  
 272  }
 273  
 274  function updateSentDate($id=0) {
 275  
 276      $sql  = "UPDATE ".DB_PREPEND."phpwcms_newsletter SET ";
 277      $sql .= "newsletter_lastsending=NOW(), ";
 278      $sql .= "newsletter_changed=newsletter_changed ";
 279      $sql .= "WHERE newsletter_id=".$id." LIMIT 1";
 280      _dbQuery($sql, 'UPDATE');
 281  
 282  }
 283  
 284  
 285  ?>
 286  </body>
 287  </html>


Generated: Tue Nov 16 22:51:00 2010 Cross-referenced by PHPXref 0.7