<?php
/**
* @copyright Copyright (C) 2009-2011 ACYBA SARL - All rights reserved.
* @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
*/
defined('_JEXEC') or die('Restricted access');
?>
<?php
class plgSystemRegacymailing extends JPlugin
{
function plgSystemRegacymailing(&$subject, $config){
parent::__construct($subject, $config);
}
function onAfterRoute(){
if(empty($_POST['option']) OR empty($_POST['func']) OR $_POST['option'] != 'com_virtuemart' OR $_POST['func'] != 'shopperupdate') return;
$user =& JFactory::getUser();
if(empty($user->id)) return;
$acylistsdisplayed = JRequest::getString('acylistsdisplayed_dispall').','.JRequest::getString('acylistsdisplayed_onecheck');
if(strlen($acylistsdisplayed) < 2) return;
$listsDisplayed = explode(',',$acylistsdisplayed);
JArrayHelper::toInteger($listsDisplayed);
if(empty($listsDisplayed)) return;
if(!include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_acymailing'.DS.'helpers'.DS.'helper.php')) return;
$userClass = acymailing::get('class.subscriber');
$subid = $userClass->subid($user->id);
if(empty($subid)) return; //The user should already be there
$visiblelistschecked = JRequest::getVar( 'acysub', array(), '', 'array' );
$acySubHidden = JRequest::getString( 'acysubhidden');
if(!empty($acySubHidden)){
$visiblelistschecked = array_merge($visiblelistschecked,explode(',',$acySubHidden));
}
$listsClass = acymailing::get('class.list');
$allLists = $listsClass->getLists('listid');
if(acymailing::level(1)){
$allLists = $listsClass->onlyCurrentLanguage($allLists);
}
$formLists = array();
foreach($listsDisplayed as $listidDisplayed){
$newlists = null;
$newlists['status'] = in_array($listidDisplayed,$visiblelistschecked) ? '1' : '-1';
$formLists[$listidDisplayed] = $newlists;
}
$userClass->saveSubscription($subid,$formLists);
}
function onAfterRender(){
$option = JRequest::getString('option');
if(empty($option)) return;
$components = array();
$components['com_user'] = array('view' => array('register'),'lengthafter' => 200);
$components['com_users'] = array('view' => array('registration'),'lengthafter' => 200, 'email' => 'jform\[email2\]', 'password' => 'jform\[password2\]');
$components['com_alpharegistration'] = array('view' => array('register'),'lengthafter' => 250);
$components['com_ccusers'] = array('view' => array('register'),'lengthafter' => 500);
$components['com_virtuemart'] = array('view' => array('shop.registration','account.billing','checkout.index'),'viewvar' => 'page','lengthafter' => 500, 'acysubscribestyle' => 'style="clear:both"');
$components['com_hikashop'] = array('view' => array('checkout'),'viewvar' => 'ctrl', 'lengthafter' => 500 , 'tdclass' => 'key', 'email' => 'data\[register\]\[email\]','password' => 'data\[register\]\[password2\]');
$components['com_tienda'] = array('view' => array('checkout'),'lengthafter' => 500 , 'email' => 'email_address','password' => 'password2');
$components['com_osemsc'] = array('view' => array('register'),'lengthafter' => 200,'email' => 'oseemail','password' => 'osepassword2');
if(!isset($components[$option])) return;
$viewVar = (isset($components[$option]['viewvar']) ? $components[$option]['viewvar'] : 'view');
if(!in_array(JRequest::getString($viewVar,JRequest::getString('task')),$components[$option]['view'])) return;
if(!include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_acymailing'.DS.'helpers'.DS.'helper.php')) return;
if(!isset($this->params)){
$plugin =& JPluginHelper::getPlugin('system', 'regacymailing');
$this->params = new JParameter( $plugin->params );
}
$visibleLists = $this->params->get('lists','None');
if($visibleLists == 'None') return;
$visibleListsArray = array();
$listsClass = acymailing::get('class.list');
$allLists = $listsClass->getLists('listid');
if(acymailing::level(1)){
$allLists = $listsClass->onlyCurrentLanguage($allLists);
}
if(strpos($visibleLists,',') OR is_numeric($visibleLists)){
$allvisiblelists = explode(',',$visibleLists);
foreach($allLists as $oneList){
if($oneList->published AND in_array($oneList->listid,$allvisiblelists)) $visibleListsArray[] = $oneList->listid;
}
}elseif(strtolower($visibleLists) == 'all'){
foreach($allLists as $oneList){
if($oneList->published){$visibleListsArray[] = $oneList->listid;}
}
}
if(empty($visibleListsArray)) return;
$checkedLists = $this->params->get('listschecked','All');
$userClass = acymailing::get('class.subscriber');
$loggedinUser = JFactory::getUser();
if(!empty($loggedinUser->id)){
$currentSubid = $userClass->subid($loggedinUser->id);
if(!empty($currentSubid)){
$currentSubscription = $userClass->getSubscriptionStatus($currentSubid,$visibleListsArray);
$checkedLists = '';
foreach($currentSubscription as $listid => $oneSubsciption){
if($oneSubsciption->status == '1') $checkedLists .= $listid.',';
}
}
}
if(strtolower($checkedLists) == 'all'){ $checkedListsArray = $visibleListsArray;}
elseif(strpos($checkedLists,',') OR is_numeric($checkedLists)){ $checkedListsArray = explode(',',$checkedLists);}
else{ $checkedListsArray = array();}
$subText = $this->params->get('subscribetext');
if(empty($subText)){
$lang =& JFactory::getLanguage();
$lang->load(ACYMAILING_COMPONENT,JPATH_SITE);
if($this->params->get('displaymode','dispall') == 'dispall'){
$subText = JText::_('SUBSCRIPTION').':';
}else{
$subText = JText::_('YES_SUBSCRIBE_ME');
}
}
$body = JResponse::getBody();
if(!empty($components[$option][$this->params->get('fieldafter','password')])){
$after = $components[$option][$this->params->get('fieldafter','password')];
}else{
if($this->params->get('fieldafter','password') == 'custom'){ $after = $this->params->get('fieldaftercustom'); }
else{ $after = ($this->params->get('fieldafter','password') == 'email') ? 'email' : 'password2'; }
}
$listsDisplayed = '<input type="hidden" value="'.implode(',',$visibleListsArray).'" name="acylistsdisplayed_'.$this->params->get('displaymode','dispall').'" />';
$return = '';
if($this->params->get('displaymode','dispall') == 'dispall'){
foreach($visibleListsArray as $oneList){
$check = in_array($oneList,$checkedListsArray) ? 'checked="checked"' : '';
$return .= '<tr><td><input type="checkbox" id="acy_list_'.$oneList.'" class="acymailing_checkbox" name="acysub[]" '.$check.' value="'.$oneList.'"/></td><td nowrap="nowrap"><label for="acy_list_'.$oneList.'" class="acylabellist">';
$return .= $allLists[$oneList]->name;
$return .= '</label></td></tr>';
}
}else{
$check = '';
foreach($visibleListsArray as $oneList){
if(in_array($oneList,$checkedListsArray)){ $check = 'checked="checked"'; break; };
}
$return = '<span class="acysubscribe_span"><input type="checkbox" id="acysubhidden" name="acysubhidden" value="'.implode(',',$visibleListsArray).'" '.$check.' /> <label for="acysubhidden">'.$subText.'</label>'.$listsDisplayed.'</span>';
}
$tdclass = '';
if(!empty($components[$option]['tdclass'])) $tdclass = 'class="'.$components[$option]['tdclass'].'"';
if(preg_match('#(name="'.$after.'".{0,'.$components[$option]['lengthafter'].'}</tr>)#Uis',$body)){
if($this->params->get('displaymode','dispall') == 'dispall'){
$return = '<tr class="acysubscribe"><td '.$tdclass.' style="padding-top:5px" valign="top">'.$subText.$listsDisplayed.'</td><td><table>'.$return.'</table></td></tr>';
}else{
$return = '<tr class="acysubscribe"><td colspan="2">'.$return.'</td></tr>';
}
$body = preg_replace('#(name="'.$after.'".{0,'.$components[$option]['lengthafter'].'}</tr>)#Uis','$1'.$return,$body,1);
JResponse::setBody($body);
return;
}
if(preg_match('#(name="'.$after.'".{0,'.$components[$option]['lengthafter'].'}</div>)#Uis',$body)){
if($this->params->get('displaymode','dispall') == 'dispall'){
$return = '<div class="acysubscribe"><label class="labelacysubscribe">'.$subText.$listsDisplayed.'</label><table>'.$return.'</table></div>';
}else{
$return = '<div class="acysubscribe" '.@$components[$option]['acysubscribestyle'].' >'.$return.'</div>';
}
$body = preg_replace('#(name="'.$after.'".{0,'.$components[$option]['lengthafter'].'}</div>)#Uis','$1'.$return,$body,1);
JResponse::setBody($body);
return;
}
if(preg_match('#(name="'.$after.'".{0,'.$components[$option]['lengthafter'].'}</p>)#Uis',$body)){
if($this->params->get('displaymode','dispall') == 'dispall'){
$return = '<div class="acysubscribe"><label class="labelacysubscribe">'.$subText.$listsDisplayed.'</label><table>'.$return.'</table></div>';
}else{
$return = '<div class="acysubscribe">'.$return.'</div>';
}
$body = preg_replace('#(name="'.$after.'".{0,'.$components[$option]['lengthafter'].'}</p>)#Uis','$1'.$return,$body,1);
JResponse::setBody($body);
return;
}
if(preg_match('#(name="'.$after.'".{0,'.$components[$option]['lengthafter'].'}</dd>)#Uis',$body)){
if($this->params->get('displaymode','dispall') == 'dispall'){
$return = '<dt class="acysubscribe"><label class="labelacysubscribe">'.$subText.$listsDisplayed.'</label></dt><dd><table>'.$return.'</table></dd>';
}else{
$return = '<div class="acysubscribe">'.$return.'</div>';
}
$body = preg_replace('#(name="'.$after.'".{0,'.$components[$option]['lengthafter'].'}</dd>)#Uis','$1'.$return,$body,1);
JResponse::setBody($body);
return;
}
}
function onUserBeforeSave($user, $isnew, $new){
return $this->onBeforeStoreUser($user, $isnew);
}
function onBeforeStoreUser($user, $isnew){
$this->oldUser = $user;
return true;
}
function onUserAfterSave($user, $isnew, $success, $msg){
return $this->onAfterStoreUser($user,$isnew,$success,$msg);
}
function onAfterStoreUser($user, $isnew, $success, $msg){
if($success===false OR empty($user['email'])) return false;
if(!include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_acymailing'.DS.'helpers'.DS.'helper.php')) return true;
if(!isset($this->params)){
$plugin =& JPluginHelper::getPlugin('system', 'regacymailing');
$this->params = new JParameter( $plugin->params );
}
$config = acymailing::config();
$joomUser = null;
$joomUser->email = trim(strip_tags($user['email']));
if(!empty($user['name'])) $joomUser->name = trim(strip_tags($user['name']));
if(empty($user['block'])) $joomUser->confirmed = 1;
$joomUser->enabled = 1 - (int)$user['block'];
$joomUser->userid = $user['id'];
$userClass = acymailing::get('class.subscriber');
if(!$isnew AND !empty($this->oldUser['email']) AND $user['email'] != $this->oldUser['email']){
$joomUser->subid = $userClass->subid($this->oldUser['email']);
}
if(empty($joomUser->subid)){
$joomUser->subid = $userClass->subid($joomUser->userid);
}
$userClass->checkVisitor = false;
$userClass->sendConf = false;
if(isset($joomUser->email)){
$userHelper = acymailing::get('helper.user');
if(!$userHelper->validEmail($joomUser->email)) return true;
}
$subid = $userClass->save($joomUser);
if($isnew || empty($joomUser->subid)){
$listsToSubscribe = $config->get('autosub','None');
$currentSubscription = $userClass->getSubscriptionStatus($subid);
$config = acymailing::config();
$listsClass = acymailing::get('class.list');
$allLists = $listsClass->getLists('listid');
if(acymailing::level(1)){
$allLists = $listsClass->onlyCurrentLanguage($allLists);
}
$visiblelistschecked = JRequest::getVar( 'acysub', array(), '', 'array' );
$acySubHidden = JRequest::getString( 'acysubhidden');
if(!empty($acySubHidden)){
$visiblelistschecked = array_merge($visiblelistschecked,explode(',',$acySubHidden));
}
if(empty($visiblelistschecked) AND !empty($_SESSION['acysub'])){
$visiblelistschecked = $_SESSION['acysub'];
unset($_SESSION['acysub']);
}
$listsArray = array();
if(strpos($listsToSubscribe,',') OR is_numeric($listsToSubscribe)){
$listsArrayParam = explode(',',$listsToSubscribe);
foreach($allLists as $oneList){
if($oneList->published AND (in_array($oneList->listid,$visiblelistschecked) || in_array($oneList->listid,$listsArrayParam))){$listsArray[] = $oneList->listid;}
}
}elseif(strtolower($listsToSubscribe) == 'all'){
foreach($allLists as $oneList){
if($oneList->published){$listsArray[] = $oneList->listid;}
}
}elseif(!empty($visiblelistschecked)){
foreach($allLists as $oneList){
if($oneList->published AND in_array($oneList->listid,$visiblelistschecked)){$listsArray[] = $oneList->listid;}
}
}
$statusAdd = (empty($joomUser->enabled) OR (empty($joomUser->confirmed) AND $config->get('require_confirmation',false))) ? 2 : 1;
$addlists = array();
if(!empty($listsArray)){
foreach($listsArray as $idOneList){
if(!isset($currentSubscription[$idOneList])){
$addlists[$statusAdd][] = $idOneList;
}
}
}
if(!empty($addlists)) {
$listsubClass = acymailing::get('class.listsub');
if(!empty($user['gid'])) $listsubClass->gid = $user['gid'];
if(!empty($user['groups'])) $listsubClass->gid = $user['groups'];
$listsubClass->addSubscription($subid,$addlists);
}
}else{
if(!empty($this->oldUser['block']) AND !empty($joomUser->confirmed)){
$userClass->confirmSubscription($subid);
}
}
return true;
}
function onUserAfterDelete($user,$success,$msg){
return $this->onAfterDeleteUser($user, $success, $msg);
}
function onAfterDeleteUser($user, $success, $msg){
if($success===false) return false;
if(!include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_acymailing'.DS.'helpers'.DS.'helper.php')) return true;
$userClass = acymailing::get('class.subscriber');
$subid = $userClass->subid($user['email']);
if(!empty($subid)){
$userClass->delete($subid);
}
return true;
}
}//endclass