예제 #1
0
파일: send.php 프로젝트: rodhoff/MNW
 public function ajax_sync_hotness()
 {
     $listId = JRequest::getVar('listId', '', 'post', 'string');
     $total = JRequest::getVar('total', '', 'post', 'string');
     $step = JRequest::getVar('step', '', 'post', 'string');
     $done = JRequest::getVar('done', '', 'post', 'string');
     $errors = JRequest::getVar('errors', '', 'post', 'string');
     $errorMsg = JRequest::getVar('errorMsg', '', 'post', 'string');
     $addedUsers = JRequest::getVar('addedUsers', '', 'post', 'string');
     $failed = JRequest::getVar('failed', array(), 'post', 'string');
     $offset = JRequest::getVar('offset', '', 'post', 'string');
     if ($done == 0) {
         $_SESSION['abortAJAX'] = 0;
         unset($_SESSION['addedUsers']);
         unset($_SESSION['HotnessExists']);
     }
     if ($_SESSION['abortAJAX'] == 1) {
         unset($_SESSION['addedUsers']);
         $response['addedUsers'] = '';
         $response['finished'] = 1;
         $response['abortAJAX'] = 1;
         echo json_encode($response);
         return;
     }
     $db = JFactory::getDBO();
     $MCerrorHandler = new MCerrorHandler();
     // retrieve hotness rating
     require_once JPATH_COMPONENT_ADMINISTRATOR . DS . '/libraries/joomailer/hotActivityComposite.php';
     $composite = new hotActivityComposite();
     $hotnessRating = $composite->getAllUserHotnessValue($listId);
     $exclude = isset($_SESSION['addedUsers']) ? $_SESSION['addedUsers'] : array();
     if (count($exclude)) {
         $failed = array_merge($exclude, $failed);
         $exclude = 'AND j.userid NOT IN ("' . implode('","', $failed) . '") ';
     } else {
         $exclude = '';
     }
     $data = $this->getModel('send')->getMcObject()->listMembers($listId, '', '', $offset, $step);
     if (count($data) > 0) {
         // determine if the interest group Hotness already exists, if not: create it
         if (!isset($_SESSION['HotnessExists'])) {
             $query = $db->getQuery(true)->select($db->qn('value'))->from('#__joomailermailchimpintegration_misc')->where($db->qn('type') . ' = ' . $db->q('hotness'))->where($db->qn('listid') . ' = ' . $db->q($listId));
             $db->setQuery($query);
             $hotnessId = $db->loadResult();
             if ($hotnessId == NULL) {
                 $result = $this->getModel('send')->getMcObject()->listInterestGroupingAdd($listId, JText::_('JM_HOTNESS_RATING'), 'hidden', array(1, 2, 3, 4, 5));
                 if (is_int($result)) {
                     $query = $db->getQuery(true)->insert('#__joomailermailchimpintegration_misc')->set($db->qn('type') . ' = ' . $db->q('hotness'))->set($db->qn('listid') . ' = ' . $db->q($listId))->set($db->qn('value') . ' = ' . $db->q($result));
                     $db->setQuery($query);
                     $db->execute();
                     $_SESSION['HotnessExists'] = $result;
                 }
             } else {
                 $_SESSION['HotnessExists'] = $hotnessId;
             }
         }
         $successCount = 0;
         for ($x = 0; $x < count($data); $x += $step) {
             if ($_SESSION['abortAJAX'] == 1) {
                 unset($_SESSION['addedUsers']);
                 break;
             }
             $k = 0;
             $batch = array();
             for ($y = $x; $y < $x + $step; $y++) {
                 if ($_SESSION['abortAJAX'] == 1) {
                     unset($_SESSION['addedUsers']);
                     break;
                 }
                 $dat = isset($data[$y]) ? $data[$y] : false;
                 if ($dat) {
                     $addedUsers[] = $dat['email'];
                     $batch[$k]['EMAIL'] = $dat['email'];
                     if (!isset($hotnessRating[$dat['email']])) {
                         $hotnessRating[$dat['email']] = 2;
                     }
                     $batch[$k]['GROUPINGS'][] = array('id' => $_SESSION['HotnessExists'], 'groups' => $hotnessRating[$dat['email']]);
                     $k++;
                 } else {
                     break;
                 }
             }
             if ($batch) {
                 $optin = false;
                 //yes, send optin emails
                 $up_exist = true;
                 // yes, update currently subscribed users
                 $replace_int = true;
                 // false = add interest, don't replace
                 $result = $this->getModel('send')->getMcObject()->listBatchSubscribe($listId, $batch, $optin, $up_exist, $replace_int);
                 $successCount += $result['success_count'];
                 if ($result['error_count']) {
                     foreach ($result['errors'] as $e) {
                         $tmp = new stdClass();
                         $tmp->errorCode = $e['code'];
                         $tmp->errorMessage = $e['message'];
                         $errorMsg .= '"' . $MCerrorHandler->getErrorMsg($tmp) . ' => ' . $e['row']['EMAIL'] . '", ';
                     }
                 }
             }
         }
         $addedUsers = array_unique($addedUsers);
         if (!count($data)) {
             $done = $total;
             unset($_SESSION['addedUsers']);
             $percent = 100;
         } else {
             $done = count($addedUsers);
             $_SESSION['addedUsers'] = $addedUsers;
             $percent = $done / $total * 100;
         }
         $response['msg'] = '<div id="bg"></div>' . '<div style="background:#FFFFFF none repeat scroll 0 0;border:10px solid #000000;height:100px;left:37%;position:relative;text-align:center;top:37%;width:300px; ">' . '<div style="margin: 35px auto 3px; width: 300px; text-align: center;">' . JText::_('adding users') . ' (' . $done . '/' . $total . ' ' . JText::_('done') . ')</div>' . '<div style="margin: auto; background: transparent url(' . JURI::root() . 'media/com_joomailermailchimpintegration/backend/images/progress_bar_grey.gif) repeat scroll 0% 0%; width: 190px; height: 14px; display: block;">' . '<div style="width: ' . $percent . '%; overflow: hidden;">' . '<img src="' . JURI::root() . 'media/com_joomailermailchimpintegration/backend/images/progress_bar.gif" style="margin: 0 5px 0 0;"/>' . '</div>' . '<div style="width: 190px; text-align: center; position: relative;top:-13px; font-weight:bold;">' . round($percent, 0) . ' %</div>' . '</div>' . '<a id="sbox-btn-close" style="text-indent:-5000px;right:-20px;top:-18px;outline:none;" href="javascript:void(0);joomlamailerJS.sync.abortAJAX(true);">abort</a>' . '</div>';
         $response['done'] = $done;
         $response['errors'] = count($failed);
         $response['errorMsg'] = $errorMsg;
         $response['addedUsers'] = array_values(array_unique($addedUsers));
         if ($done + count($failed) + $errors >= $total) {
             $response['finished'] = 1;
             $msg = $done . ' ' . JText::_('JM_USERS_SYNCHRONIZED') . '.';
             if ($errorMsg) {
                 $errorMsg = substr($errorMsg, 0, -2);
                 $msg .= ' (' . count($failed) . ' ' . JText::_('Errors') . ': ' . $errorMsg . ')';
             }
             $response['finalMessage'] = $msg;
         } else {
             $response['finished'] = 0;
             $response['finalMessage'] = '';
         }
         $response['abortAJAX'] = $_SESSION['abortAJAX'];
     } else {
         unset($_SESSION['addedUsers']);
         $response['addedUsers'] = '';
         $response['finalMessage'] = JText::_('JM_NO_USERS_FOUND');
         $response['finished'] = 1;
         $response['abortAJAX'] = $_SESSION['abortAJAX'];
     }
     echo json_encode($response);
 }
예제 #2
0
파일: view.html.php 프로젝트: rodhoff/MNW
 public function display($tpl = null)
 {
     $document = JFactory::getDocument();
     $document->addStyleSheet(JURI::root(true) . '/media/com_joomailermailchimpintegration/backend/css/subscriber.css');
     JToolBarHelper::title(JText::_('JM_NEWSLETTER_SUBSCRIBERS'), $this->getPageTitleClass());
     $mainframe = JFactory::getApplication();
     $option = JRequest::getCmd('option');
     $limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int');
     $limitstart = $mainframe->getUserStateFromRequest($option . '.limitstart', 'limitstart', 0, 'int');
     $params = JComponentHelper::getParams('com_joomailermailchimpintegration');
     $MCapi = $params->get('params.MCapi');
     $JoomlamailerMC = new JoomlamailerMC();
     $AIM = true;
     $clientDetails = $this->getModel()->getClientDetails();
     if ($MCapi && $JoomlamailerMC->pingMC()) {
         JToolBarHelper::custom('goToLists', 'lists', 'lists', 'Lists', false, false);
         JToolBarHelper::spacer();
         if (JRequest::getVar('type') == 's') {
             JToolBarHelper::custom('unsubscribe', 'unsubscribe', 'unsubscribe', 'Unsubscribe', true, false);
             JToolBarHelper::spacer();
             JToolBarHelper::custom('delete', 'unsubscribe', 'unsubscribe', 'Delete', true, false);
             JToolBarHelper::spacer();
         } else {
             if (JRequest::getVar('type') == 'u') {
                 //JToolBarHelper::custom('resubscribe', 'resubscribe', 'resubscribe', 'Resubscribe', false, false);
             }
         }
     }
     $userid = JRequest::getVar('uid', 0, 'get', 'string');
     $email = JRequest::getVar('email', 0, '', 'string', JREQUEST_ALLOWRAW);
     $memberInfo = $this->getModel()->getListsForEmail();
     foreach ($memberInfo['lists'] as $key => $list) {
         $member_rating = $memberInfo['lists'][$key]['member_rating'];
         break;
     }
     if ($userid) {
         $user = JFactory::getUser($userid);
     }
     //TODO convert $start to GMT using JConfig and tzoffset
     $start = $user->registerDate;
     //$listid = JRequest::getVar('listid', 0, 'get', 'string');
     //$campaigns = $this->getModel()->MC_object()->campaigns(array('sendtime_start'=>$start, 'list_id'=>$listid));
     $campaigns = $this->getModel()->getCampaignsSince($start);
     //$lists = $this->getModel()->MC_object()->listsForEmail($email);
     $stats = array();
     foreach ($campaigns as $campaign) {
         $listmemberinfo = $this->getModel()->getListMemberInfo($campaign['list_id'], $email);
         //Check if this email was ever subscribed to this list
         if ($listmemberinfo) {
             //if (in_array($campaign['list_id'], $lists)) {
             $clicks = 0;
             if ($AIM) {
                 $clickStats = $this->getModel()->campaignEmailStatsAIM($campaign['id'], $user->email);
                 if (isset($clickStats[0])) {
                     foreach ($clickStats as $cs) {
                         if ($cs['action'] == 'click') {
                             $clicks++;
                         }
                     }
                 }
             }
             $stats[$campaign['id']]['clicks'] = $clicks;
             $opens = $this->getModel()->campaignOpenedAIM($campaign['id']);
             if ($opens) {
                 foreach ($opens as $o) {
                     if ($o['email'] == $email) {
                         $stats[$campaign['id']]['opens'] = $o['open_count'];
                         $stats[$campaign['id']]['received'] = true;
                     } else {
                         $stats[$campaign['id']]['opens'] = 0;
                         $softbounces = $this->getModel()->getSoftBounces($campaign['id']);
                         $hardbounces = $this->getModel()->getHardBounces($campaign['id']);
                         $bounces = array_merge($softbounces, $hardbounces);
                         $stats[$campaign['id']]['received'] = in_array($email, $bounces) ? 0 : 1;
                     }
                 }
             }
             $stats[$campaign['id']]['title'] = $campaign['title'];
             $stats[$campaign['id']]['date'] = $campaign['send_time'];
             $stats[$campaign['id']]['segment_text'] = $campaign['segment_text'];
             $stats[$campaign['id']]['list_sub'] = $listmemberinfo['timestamp'];
         }
     }
     $cbpath = JPATH_ADMINISTRATOR . '/components/com_comprofiler/admin.comprofiler.php';
     $jspath = JPATH_ADMINISTRATOR . '/components/com_community/admin.community.php';
     $db = JFactory::getDBO();
     $avatar = JURI::root() . 'media/com_joomailermailchimpintegration/backend/images/mailchimp_avatar.jpg';
     $gravatar_default = $avatar;
     if (JFile::exists($cbpath)) {
         //community builder is being used
         $query = 'SELECT avatar FROM #__comprofiler WHERE id=' . $userid;
         $db->setQuery($query);
         $avatarPath = $db->loadResult();
         if ($avatarPath) {
             $avatar = JURI::root() . 'images/comprofiler/' . $avatarPath;
         }
     } else {
         if (JFile::exists($jspath)) {
             //jomsocial is being used
             $query = 'SELECT avatar FROM #__community_users WHERE userid=' . $userid;
             $db->setQuery($query);
             $avatarPath = $db->loadResult();
             if ($avatarPath) {
                 $avatar = JURI::root() . $avatarPath;
             }
         }
     }
     if ($gravatar_default == $avatar) {
         $avatar = $this->getModel()->getGravatar($gravatar_default);
     }
     $twitterName = $this->getModel()->getTwitterName();
     $kloutScore = $this->getModel()->getKloutScore();
     $this->assignRef('kloutScore', $kloutScore);
     $this->assignRef('twitterName', $twitterName);
     $facebookName = $this->getModel()->getFacebookName();
     $this->assignRef('facebookName', $facebookName);
     $composite = new hotActivityComposite();
     $hotActivity = $composite->getActivity();
     $hotnessRating = $composite->getHotnessValue();
     $this->assignRef('hotnessRating', $hotnessRating);
     $this->assignRef('hotActivity', $hotActivity);
     $jomSocialGroups = $this->getModel()->getJomSocialGroups();
     $totalDiscussionsOfUser = $this->getModel()->getTotalJomSocialDiscussionsOfUser();
     $jomSocialDiscussions = $this->getModel()->getRecentJomSocialDiscussions();
     jimport('joomla.html.pagination');
     $pagination = new JPagination(count($stats), $limitstart, $limit);
     $this->assignRef('memberRating', $member_rating);
     $this->assignRef('jomSocialGroups', $jomSocialGroups);
     $this->assignRef('jomSocialDiscussions', $jomSocialDiscussions);
     $this->assignRef('totalDiscussionsOfUser', $totalDiscussionsOfUser);
     $this->assignRef('pagination', $pagination);
     $this->assignRef('email', $email);
     $this->assignRef('stats', $stats);
     $this->assignRef('limitstart', $limitstart);
     $this->assignRef('subscribed', $subscribed);
     $this->assignRef('user', $user);
     $this->assignRef('avatar', $avatar);
     parent::display($tpl);
     require_once JPATH_COMPONENT . '/helpers/jmFooter.php';
 }
예제 #3
0
 function ajax_sync_hotness()
 {
     $elements = JRequest::getVar('elements', '', 'request', 'string');
     $elements = json_decode($elements);
     if ($elements->done == 0) {
         $_SESSION['abortAJAX'] = 0;
         unset($_SESSION['addedUsers']);
         unset($_SESSION['HotnessExists']);
     }
     if ($_SESSION['abortAJAX'] != 1) {
         $db =& JFactory::getDBO();
         $model =& $this->getModel('sync');
         $params =& JComponentHelper::getParams('com_joomailermailchimpintegration');
         $paramsPrefix = version_compare(JVERSION, '1.6.0', 'ge') ? 'params.' : '';
         $MCapi = $params->get($paramsPrefix . 'MCapi');
         $MC = new joomlamailerMCAPI($MCapi);
         $MCerrorHandler = new MCerrorHandler();
         $list_id = $elements->listid;
         $step = $elements->step;
         $offset = $elements->offset;
         // retrieve hotness rating
         require_once JPATH_COMPONENT_ADMINISTRATOR . DS . '/libraries/joomailer/hotActivityComposite.php';
         $composite = new hotActivityComposite();
         $hotnessRating = $composite->getAllUserHotnessValue($list_id);
         if (isset($_SESSION['addedUsers'])) {
             $exclude = $_SESSION['addedUsers'];
         } else {
             $exclude = array();
         }
         if (!$elements->failed) {
             $elements->failed = array();
         }
         $exclude = array_merge($exclude, $elements->failed);
         $exclude = implode('","', $exclude);
         $exclude = '"' . $exclude . '"';
         if (isset($exclude[0])) {
             $exclude = 'AND j.userid NOT IN (' . $exclude . ') ';
         } else {
             $exclude = '';
         }
         //		$data = array();
         //		$run = true;
         //		$page = 0;
         //		while($run){
         //		    $result = $MC->listMembers( $list_id, '', '', $page, '15000');
         //		    $page++;
         //		    if($result){
         //			$run = true;
         //			$data = array_merge($data, $result);
         //		    } else {
         //			$run = false;
         //		    }
         //		}
         $data = $MC->listMembers($list_id, '', '', $offset, $step);
         if (count($data) > 0) {
             // determine if the interest group Hotness already exists, if not: create it
             if (!isset($_SESSION['HotnessExists'])) {
                 $query = "SELECT value FROM #__joomailermailchimpintegration_misc WHERE type = 'hotness' AND listid = '" . $list_id . "' ";
                 $db->setQuery($query);
                 $hotnessId = $db->loadResult();
                 if ($hotnessId == NULL) {
                     $result = $MC->listInterestGroupingAdd($list_id, JText::_('JM_HOTNESS_RATING'), 'hidden', array(1, 2, 3, 4, 5));
                     if (is_int($result)) {
                         $query = "INSERT INTO #__joomailermailchimpintegration_misc (type, listid, value) VALUES ('hotness', '" . $list_id . "', '" . $result . "') ";
                         $db->setQuery($query);
                         $db->query();
                         $_SESSION['HotnessExists'] = $result;
                     }
                 } else {
                     $_SESSION['HotnessExists'] = $hotnessId;
                 }
             }
             /*
             		    $userIds = array();
             		    foreach($data as $dat){
             			$userIds[$dat->email] = $dat->id;
             		    }
             */
             $addedUsers = $elements->addedUsers;
             $m = 0;
             $successCount = 0;
             $errorcount = $msgErrorsCount = 0;
             $msg = $msgErrors = false;
             $counter = 0;
             $ids = '';
             $errorMsg = $elements->errorMsg;
             for ($x = 0; $x < count($data); $x += $step) {
                 if ($_SESSION['abortAJAX'] == 1) {
                     unset($_SESSION['addedUsers']);
                     break;
                 }
                 $k = 0;
                 $batch = array();
                 $errorcount = $msgErrorsCount = 0;
                 for ($y = $x; $y < $x + $step; $y++) {
                     if ($_SESSION['abortAJAX'] == 1) {
                         unset($_SESSION['addedUsers']);
                         break;
                     }
                     if (isset($data[$y])) {
                         $dat = $data[$y];
                     } else {
                         $dat = false;
                     }
                     if ($dat) {
                         $addedUsers[] = $dat['email'];
                         $batch[$k]['EMAIL'] = $dat['email'];
                         if (!isset($hotnessRating[$dat['email']])) {
                             $hotnessRating[$dat['email']] = 2;
                         }
                         $batch[$k]['GROUPINGS'][] = array('id' => $_SESSION['HotnessExists'], 'groups' => $hotnessRating[$dat['email']]);
                         $k++;
                     } else {
                         break;
                     }
                 }
                 if ($batch) {
                     $optin = false;
                     //yes, send optin emails
                     $up_exist = true;
                     // yes, update currently subscribed users
                     $replace_int = true;
                     // false = add interest, don't replace
                     $result = $MC->listBatchSubscribe($list_id, $batch, $optin, $up_exist, $replace_int);
                     $successCount = $successCount + $result['success_count'];
                     if ($result['error_count']) {
                         foreach ($result['errors'] as $e) {
                             $tmp = new stdClass();
                             $tmp->errorCode = $e['code'];
                             $tmp->errorMessage = $e['message'];
                             $errorMsg .= '"' . $MCerrorHandler->getErrorMsg($tmp) . ' => ' . $e['row']['EMAIL'] . '", ';
                             //  $addedUsers = array_diff($addedUsers, array($userIds[$e['row']['EMAIL']]));
                             //  $elements->failed[] = $userIds[$e['row']['EMAIL']];
                             $errorcount++;
                         }
                         $msgErrorsCount += $result['error_count'];
                     }
                 }
             }
             $addedUsers = array_unique($addedUsers);
             if (!count($data)) {
                 $done = $elements->total;
                 unset($_SESSION['addedUsers']);
                 $percent = 100;
             } else {
                 $done = count($addedUsers);
                 $_SESSION['addedUsers'] = $addedUsers;
                 $percent = $done / $elements->total * 100;
             }
             $response['msg'] = '<div id="bg"></div>' . '<div style="background:#FFFFFF none repeat scroll 0 0;border:10px solid #000000;height:100px;left:37%;position:relative;text-align:center;top:37%;width:300px; ">' . '<div style="margin: 35px auto 3px; width: 300px; text-align: center;">' . JText::_('adding users') . ' ( ' . $done . '/' . $elements->total . ' ' . JText::_('done') . ' )</div>' . '<div style="margin: auto; background: transparent url(' . JURI::root() . 'administrator/components/com_joomailermailchimpintegration/assets/images/progress_bar_grey.gif) repeat scroll 0% 0%; width: 190px; height: 14px; display: block;">' . '<div style="width: ' . $percent . '%; overflow: hidden;">' . '<img src="' . JURI::root() . 'administrator/components/com_joomailermailchimpintegration/assets/images/progress_bar.gif" style="margin: 0 5px 0 0;"/>' . '</div>' . '<div style="width: 190px; text-align: center; position: relative;top:-13px; font-weight:bold;">' . round($percent, 0) . ' %</div>' . '</div>' . '<a id="sbox-btn-close" style="text-indent:-5000px;right:-20px;top:-18px;outline:none;" href="javascript:abortAJAXnoRefresh();">abort</a>' . '</div>';
             $response['done'] = $done;
             $response['errors'] = count($elements->failed);
             $response['errorMsg'] = $errorMsg;
             $response['addedUsers'] = array_values(array_unique($addedUsers));
             //	    $response['failed']	    = $elements->failed;
             if ($done + count($elements->failed) + $elements->errors >= $elements->total) {
                 $response['finished'] = 1;
                 if ($errorMsg) {
                     $errorMsg = substr($errorMsg, 0, -2);
                     $msgErrors = ' ( ' . count($elements->failed) . ' ' . JText::_('Errors') . ': ' . $errorMsg . ' )';
                 }
                 if (!$msg) {
                     $msg = $done . ' ' . JText::_('JM_USERS_SYNCHRONIZED') . '.';
                 }
                 if ($msgErrors) {
                     $msg .= $msgErrors;
                 }
                 $response['finalMessage'] = $msg;
             } else {
                 $response['finished'] = 0;
                 $response['finalMessage'] = '';
             }
             $response['abortAJAX'] = $_SESSION['abortAJAX'];
         } else {
             unset($_SESSION['addedUsers']);
             $response['addedUsers'] = '';
             $response['finalMessage'] = JText::_('JM_NO_USERS_FOUND');
             $response['finished'] = 1;
             $response['abortAJAX'] = $_SESSION['abortAJAX'];
         }
         echo json_encode($response);
     } else {
         unset($_SESSION['addedUsers']);
         $response['addedUsers'] = '';
         $response['finished'] = 1;
         $response['abortAJAX'] = $_SESSION['abortAJAX'];
         echo json_encode($response);
     }
 }