Exemplo n.º 1
0
 function send()
 {
     $db =& JFactory::getDBO();
     $msg = false;
     $error = '';
     $list_error = false;
     $params =& JComponentHelper::getParams('com_joomailermailchimpintegration');
     $paramsPrefix = version_compare(JVERSION, '1.6.0', 'ge') ? 'params.' : '';
     $archiveDir = $params->get($paramsPrefix . 'archiveDir', '/administrator/components/com_joomailermailchimpintegration/archive');
     $model =& $this->getModel('send');
     $clientDetails = $model->getClientDetails();
     $MCapi = $params->get($paramsPrefix . 'MCapi');
     $MC = new joomlamailerMCAPI($MCapi);
     //	$MCSTS = new jmsts($MCapi);
     $time = JRequest::getVar('time', 0, '', 'string');
     $listId = JRequest::getVar('listId', '', 'post', 'string');
     $test = JRequest::getVar('test', 0, 'post', 'int');
     $trackOpens = (bool) JRequest::getBool('trackOpens', false, 'post');
     $trackHTML = (bool) JRequest::getBool('trackHTML', false, 'post');
     $trackText = (bool) JRequest::getBool('trackText', false, 'post');
     $ecomm360 = (bool) JRequest::getBool('ecomm360', false, 'post');
     $campaignType = JRequest::getVar('campaignType', 0, 'post');
     $offsetTime = JRequest::getVar('offset-time', 0, 'post');
     $offsetUnits = JRequest::getVar('offset-units', 0, 'post');
     $offsetDir = JRequest::getVar('offset-dir', 0, 'post');
     $event = JRequest::getVar('event', 0, 'post');
     $mergefield = JRequest::getVar('mergefield', 0, 'post');
     $emails = JRequest::getVar('email', '', '', 'array');
     $noGos = array('Email 1', 'Email 2', 'Email 3', 'Email 4', 'Email 5');
     foreach ($emails as $key => $value) {
         if ($value == "" || in_array($value, $noGos)) {
             unset($emails[$key]);
         }
     }
     $emails = array_values($emails);
     $timewarp = JRequest::getVar('timewarp', 0, '', 'int');
     $schedule = JRequest::getVar('schedule', 0, '', 'int');
     if (!$schedule) {
         $delivery = 'Immediately';
     } else {
         $deliveryDate = JRequest::getVar('deliveryDate', 'Immediately', '', 'string');
         $deliveryTime = JRequest::getVar('deliveryTime', '', '', 'string');
         //		if($test) { $delivery = 'Immediately'; }
         //		else
         if ($deliveryDate != 'Immediately') {
             $delivery = $deliveryDate . ' ' . $deliveryTime . ':00';
             // convert time to GMT
             setlocale(LC_TIME, 'en_GB');
             $delivery = gmstrftime("%Y-%m-%d %H:%M:%S", strtotime($delivery));
         } else {
             $delivery = 'Immediately';
         }
     }
     $useSegments = JRequest::getVar('useSegments', 0, '', 'int');
     if ($useSegments) {
         $type = $condition = $conditionDetailValue = array();
         for ($i = 1; $i < 11; $i++) {
             $type[] = JRequest::getVar('segmenttype' . $i, '');
             $condition[] = JRequest::getVar('segmentTypeCondition_' . $i, '');
             $conditionDetailValue[] = JRequest::getVar('segmentTypeConditionDetailValue_' . $i, '');
         }
         // remove empty values
         $type = array_values(array_filter($type));
         $condition = array_values(array_filter($condition));
         $conditionDetailValue = array_values(array_filter($conditionDetailValue));
         $conditions = array();
         for ($i = 0; $i < count($type); $i++) {
             if (is_numeric($type[$i])) {
                 $type[$i] = 'interests-' . $type[$i];
             }
             $conditions[] = array('field' => $type[$i], 'op' => $condition[$i], 'value' => $conditionDetailValue[$i]);
         }
         $segment_opts = array('match' => JRequest::getVar('match', 'any', 'post', 'string'), 'conditions' => $conditions);
     } else {
         $segment_opts = '';
     }
     $query = "SELECT * FROM #__joomailermailchimpintegration_campaigns WHERE creation_date = '" . $time . "'";
     $db->setQuery($query);
     $cDetails = $db->loadObjectList();
     $cDetails = $cDetails[0];
     $campaign_name_ent = htmlentities($cDetails->name);
     $campaign_name_ent = str_replace(' ', '_', $campaign_name_ent);
     $html_file = JURI::root() . substr($archiveDir, 1) . "/" . $campaign_name_ent . ".html";
     $content = array('url' => $html_file);
     // remove cache-preventing meta tags from campaign to avoid rendering issues in email clients
     $metaData = array("<meta http-Equiv=\"Cache-Control\" Content=\"no-cache\">\n", "<meta http-Equiv=\"Pragma\" Content=\"no-cache\">\n", "<meta http-Equiv=\"Expires\" Content=\"0\">\n");
     $filename = JPATH_SITE . $archiveDir . '/' . $campaign_name_ent . ".html";
     $template = JFile::read($filename);
     $template = str_replace($metaData, '', $template);
     $handle = JFile::write($filename, $template);
     if (!$msg) {
         $lists = $MC->lists();
         if (!$listId) {
             $i = 0;
             if ($clientDetails['plan_type'] == 'free') {
                 for ($i = 0; $i < count($lists); $i++) {
                     if ($lists[$i]['member_count'] <= 2000) {
                         $listId = $lists[$i]['id'];
                         $memberCount = $lists[$i]['member_count'];
                         break;
                     }
                 }
                 if (!$listId) {
                     $error = 'error';
                     $msg = JText::_('JM_TO_MANY_RECIPIENTS');
                     $link = 'index.php?option=com_joomailermailchimpintegration&view=send&campaign=' . $time;
                     $this->setRedirect($link, $msg);
                 }
             } else {
                 $listId = $lists[$i]['id'];
             }
         } else {
             foreach ($lists as $list) {
                 if ($list['id'] == $listId) {
                     $memberCount = $list['member_count'];
                     break;
                 }
             }
         }
         if (!$test && $clientDetails['plan_type'] == 'free' && $memberCount > 2000) {
             $error = 'error';
             $msg = JText::_('JM_TO_MANY_RECIPIENTS');
             $link = 'index.php?option=com_joomailermailchimpintegration&view=send&campaign=' . $time;
         } else {
             // submit to MC
             $type = 'regular';
             //		$opts['list_id']	= $cDetails->list_id;
             $opts['list_id'] = $listId;
             $opts['title'] = $cDetails->name;
             if ($test) {
                 $opts['subject'] = JText::_('JM_CAMPAIGN_TEST') . ': ' . $cDetails->subject;
             } else {
                 $opts['subject'] = $cDetails->subject;
                 if ($timewarp) {
                     $opts['timewarp'] = true;
                 }
             }
             $opts['from_email'] = $cDetails->from_email;
             $opts['from_name'] = $cDetails->from_name;
             $opts['tracking'] = array('opens' => $trackOpens, 'html_clicks' => $trackHTML, 'text_clicks' => $trackText);
             $opts['ecomm360'] = $ecomm360;
             $opts['authenticate'] = true;
             //		$opts['analytics'] = array('google'=>'my_google_analytics_key');
             $opts['inline_css'] = true;
             $opts['generate_text'] = true;
             $opts['auto_footer'] = false;
             $opts['folder_id'] = $cDetails->folder_id;
             //Check for auto_tweet
             $tweet = JRequest::getVar('useTwitter');
             if ($tweet) {
                 $opts['auto_tweet'] = true;
             }
             //Check for autoresponder
             $type_opts = array();
             if ($campaignType == 1) {
                 $type = 'auto';
                 $type_opts['offset-units'] = $offsetUnits;
                 $type_opts['offset-time'] = $offsetTime;
                 $type_opts['offset-dir'] = $offsetDir;
                 $type_opts['event'] = $event;
                 $type_opts['event-datemerge'] = $mergefield;
                 // TODO: implement autoresponder folders
                 unset($opts['folder_id']);
             }
             $c_id = $MC->campaignCreate($type, $opts, $content, $segment_opts, $type_opts);
             if (!$MC->errorCode) {
                 if ($test) {
                     $send = $MC->campaignSendTest($c_id, $emails);
                     if ($c_id) {
                         // wait 5 seconds for the campaign to be sent
                         sleep(5);
                         $MC->campaignDelete($c_id);
                     }
                 } else {
                     if (!$schedule) {
                         $send = $MC->campaignSendNow($c_id);
                     } else {
                         $send = $MC->campaignSchedule($c_id, $delivery);
                     }
                 }
             }
             if ($MC->errorCode) {
                 $msg = MCerrorHandler::getErrorMsg($MC);
                 $link = 'index.php?option=com_joomailermailchimpintegration&view=send&campaign=' . $time;
             } else {
                 if ($test) {
                     $msg = JText::_('JM_TEST_CAMPAIGN_SENT');
                     $link = 'index.php?option=com_joomailermailchimpintegration&view=send&campaign=' . $time;
                 } else {
                     if ($schedule) {
                         $query = "UPDATE #__joomailermailchimpintegration_campaigns SET `sent`=1, `cid`='" . $c_id . "' WHERE creation_date = '" . $time . "'";
                         $db->setQuery($query);
                         $db->query();
                         $msg = JText::_('JM_CAMPAIGN_SCHEDULED');
                         $link = 'index.php?option=com_joomailermailchimpintegration&view=main';
                     } else {
                         $query = "UPDATE #__joomailermailchimpintegration_campaigns SET `sent`=2, `cid`='" . $c_id . "' WHERE creation_date = '" . $time . "'";
                         $db->setQuery($query);
                         $db->query();
                         if ($campaignType == 1) {
                             $msg = JText::_('JM_AUTORESPONDER_CREATED');
                         } else {
                             $msg = JText::_('JM_CAMPAIGN_SENT');
                             // clear reports cache
                             require_once JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_joomailermailchimpintegration' . DS . 'controllers' . DS . 'campaigns.php';
                             joomailermailchimpintegrationsControllerCampaigns::clearReportsCache();
                         }
                         $link = 'index.php?option=com_joomailermailchimpintegration&view=campaigns';
                     }
                 }
             }
         }
     }
     $this->setRedirect($link, $msg, $error);
 }