newsletter_send.php

Go to the documentation of this file.
00001 <?php
00002 
00007 class Newsletter_Send extends oxAdminList
00008 {
00014     protected $_aMailErrors = array();
00015 
00023     public function render()
00024     {
00025         $myConfig  = $this->getConfig();
00026         parent::render();
00027 
00028         $iStart = oxConfig::getParameter( "iStart");
00029         $iUser  = oxConfig::getParameter( "user");
00030         $sID      = oxConfig::getParameter( "id");
00031 
00032         $oNewsletter = oxNew( "oxNewsLetter" );
00033         $oNewsletter->load( $sID );
00034         $oNewsletterGroups = $oNewsletter->getGroups();
00035 
00036         // #493A - fetching cached newsletter info
00037         $oCachedNewsletter = oxSession::getVar("_oNewsletter");
00038         if ( isset($oCachedNewsletter)) {
00039             //checking if cached session id is the same as current user session id
00040             if ($oCachedNewsletter->sID != $sID)
00041                 oxSession::deleteVar("_oNewsletter");
00042             else {
00043                 // setting cached values
00044                 $iStart = $oCachedNewsletter->iStart;
00045                 $iUser  = $oCachedNewsletter->iUser;
00046                 $sID    = $oCachedNewsletter->sID;
00047             }
00048         } else {
00049             // setting initial values
00050             $oCachedNewsletter = new oxStdClass();
00051             $oCachedNewsletter->iStart = $iStart;
00052             $oCachedNewsletter->iUser  = $iUser;
00053             $oCachedNewsletter->sID    = $sID;
00054         }
00055 
00056         // send emails....
00057         $oDB = oxDb::getDb();
00058         $sSelectGroups =  " ( oxobject2group.oxgroupsid in ( ";
00059         $blSep = false;
00060         foreach ( $oNewsletterGroups as $sInGroup) {
00061             $sSearchKey = $sInGroup->oxgroups__oxid->value;
00062             if ( $blSep)
00063                 $sSelectGroups .= ",";
00064             $sSelectGroups .= $oDB->quote( $sSearchKey );
00065             $blSep = true;
00066         }
00067         $sSelectGroups .= ") )";
00068         // no group selected
00069         if ( !$blSep)
00070             $sSelectGroups = " oxobject2group.oxobjectid is null ";
00071 
00072         $sSelect = "select oxnewssubscribed.oxuserid, oxnewssubscribed.oxemail, oxnewssubscribed.oxsal, oxnewssubscribed.oxfname, oxnewssubscribed.oxlname from oxnewssubscribed left join oxobject2group on oxobject2group.oxobjectid = oxnewssubscribed.oxuserid where ( oxobject2group.oxshopid = '".$myConfig->getShopID()."' or oxobject2group.oxshopid is null ) and $sSelectGroups and oxnewssubscribed.oxdboptin = 1 and (not (oxnewssubscribed.oxemailfailed = '1')) and (not(oxnewssubscribed.oxemailfailed = \"1\")) group by oxnewssubscribed.oxemail";
00073 
00074         $rs = $oDB->selectLimit( $sSelect, $myConfig->getConfigParam( 'iCntofMails' ), $iStart);
00075 
00076         ini_set("session.gc_maxlifetime", 36000);
00077 
00078         if ($rs != false && $rs->recordCount() > 0) {
00079             while (!$rs->EOF) {
00080                 $sUserID = $rs->fields[0];
00081 
00082                 // must check if such user is in DB
00083                 if( !$oDB->getOne("select oxid from oxuser where oxid = '$sUserID'"))
00084                     $sUserID = null;
00085 
00086                 // #559
00087                 if ( !isset( $sUserID) || !$sUserID) {
00088                      // there is no user object so we fake one
00089                     $oUser = oxNew( "oxuser" );
00090                     $oUser->oxuser__oxusername = new oxField($rs->fields[1]);
00091                     $oUser->oxuser__oxsal      = new oxField($rs->fields[2]);
00092                     $oUser->oxuser__oxfname    = new oxField($rs->fields[3]);
00093                     $oUser->oxuser__oxlname    = new oxField($rs->fields[4]);
00094                     $oNewsletter->prepare( $oUser, $myConfig->getConfigParam( 'bl_perfLoadAktion' ) );
00095                 }
00096                 else
00097                     $oNewsletter->prepare( $sUserID, $myConfig->getConfigParam( 'bl_perfLoadAktion' ) );
00098 
00099                 if ( $oNewsletter->send() ) {
00100                      // add user history
00101                     $oRemark = oxNew( "oxremark" );
00102                     $oRemark->oxremark__oxtext     = new oxField($oNewsletter->sPlainText);
00103                     $oRemark->oxremark__oxparentid = new oxField($sUserID);
00104                     $sShopID = oxSession::getVar( "actshop");
00105                     $sShopID = oxSession::setVar( "keepalive", "yes");
00106                     $oRemark->oxremark__oxshopid   = new oxField($sShopID);
00107                     $oRemark->save();
00108                 } else {
00109                     $this->_aMailErrors[] = "problem sending to : ".$rs->fields[1]."<br>";
00110                 }
00111 
00112 
00113                    $rs->moveNext();
00114             }
00115         }
00116 
00117         // adavance mail pointer and set parameter
00118         $iStart += $myConfig->getConfigParam( 'iCntofMails' );
00119 
00120         // #493A - setting new values
00121         $oCachedNewsletter->iStart = $iStart;
00122         $oCachedNewsletter->iUser  = $iUser;
00123         $oCachedNewsletter->sID    = $sID;
00124 
00125         $this->_aViewData["iStart"]     =  $iStart;
00126         $this->_aViewData["user"]     =  $iUser;
00127         $this->_aViewData["id"]         =  $sID;
00128 
00129 
00130         // end ?
00131         if ( $iStart < $iUser) {
00132                $sPage = "newsletter_send.tpl";
00133             // #493A - saving changes
00134             oxSession::setVar("_oNewsletter", $oCachedNewsletter);
00135         } else {
00136            $sPage = "newsletter_done.tpl";
00137             // #493A - deleting cache variable
00138             oxSession::deleteVar("_oNewsletter");
00139         }
00140 
00141         return $sPage;
00142     }
00143 
00149     public function getMailErrors()
00150     {
00151         return $this->_aMailErrors;
00152     }
00153 
00154     /*
00155      * Overrides parent method to pass referred id
00156      *
00157      * @param string $sId class name
00158      */
00159     protected function _setupNavigation( $sId )
00160     {
00161         parent::_setupNavigation( 'newsletter_list' );
00162     }
00163 }

Generated on Tue Sep 29 16:45:12 2009 for OXID eShop CE by  doxygen 1.5.5