registerFunction( 'onUserActive', 'userActivated','getNewslettersTab' ); $_PLUGINS->registerFunction( 'onAfterDeleteUser', 'userDeleteTab','getNewslettersTab' ); DEFINE('_NEWSLETTERFILE','/administrator/components/com_yanc/classes/class.yancsubscription.php'); class getNewslettersTab extends cbTabHandler { /** * Constructor */ function getNewslettersTab() { $this->cbTabHandler(); } // function getDisplayTab($tab,$user,$ui) { // } /** * Generates the HTML to display the user edit tab * @param moscomprofilerTab $tab the tab database entry * @param moscomprofilerUser $user the user being displayed * @param int $ui 1 for front-end, 2 for back-end * @return mixed either string HTML for tab content, or false if ErrorMSG generated */ function getEditTab( $tab, $user, $ui) { global $my, $_CB_framework, $_POST, $mainframe; // $mainframe needed by the require if( intval( $_CB_framework->myId() ) < 1 ) { cbNotAuth(); return false; } if(!$this->_CheckYancInstalled()) { return _UE_NEWSLETTERNOTINSTALLED; } require_once( $_CB_framework->getCfg('absolute_path') . _NEWSLETTERFILE ); $newslettersSubscriptions = new YancSubscription(); $return=""; if ($user->id) { $rows = $newslettersSubscriptions->getSubscriberLists($user); if (isset($_POST['newsLhtml'])) { $postedLists = cbGetParam($_POST, 'newsLitems', array(0)); $postedHtml = cbGetParam($_POST, 'newsLhtml', 1); for ($i = 0, $n=count($rows); $i < $n; $i++) { $rows[$i]->subscribed = in_array($rows[$i]->id,$postedLists); $rows[$i]->receive_html = $postedHtml; } } } else { $params=$this->params; $newslettersRegList=$params->get('newslettersRegList'); $listsArray = (isset($newslettersRegList)) ? explode("|*|", $newslettersRegList) : null; $rows = $newslettersSubscriptions->getLists($my, $listsArray); $postedLists = cbGetParam($_POST, 'newsLitems', array(0)); $postedHtml = cbGetParam($_POST, 'newsLhtml', 1); for ($i = 0, $n=count($rows); $i < $n; $i++) { $rows[$i]->subscribed = in_array($rows[$i]->id,$postedLists); $rows[$i]->receive_html = $postedHtml; } } if(count($rows)==0) { $return = _UE_NONEWSLETTERS; } else { if($tab->description != null) $return .= "\t\t
".unHtmlspecialchars(getLangDefinition($tab->description))."
\n"; $return .= $this->_getFormattedNewsletters($rows, false, _UE_NEWSLETTER_NAME, _UE_NEWSLETTER_DESCRIPTION); } return $return; } //private method: function _getFormattedNewsletters($rows, $linesStyle, $name=_UE_NEWSLETTER_NAME, $desc=_UE_NEWSLETTER_DESCRIPTION) { $htmltext = array(); $htmltext[] = moscomprofilerHTML::makeOption( '1', _UE_NEWSLETTER_HTML."   " ); $htmltext[] = moscomprofilerHTML::makeOption( '0', _UE_NEWSLETTER_TEXT ); $return = "
" . "\n"; if (!$linesStyle) $return .= "\t\n" . "\t\t\n" . "\t\t\n" . "\t\n"; foreach ($rows AS $row) { $return .= "\t\n"; $return .= "\t\t\n\t\t\n\t\t\n"; $return .= "\t\n"; } $return .= "\t\n\t\t\n\t\n"; $return .= "\t\n\t\t\n\t\t\n"; $return .= "\t\n"; $return .= "
".$name."".$desc."
"; $return .= "id."\" "; if ($row->subscribed) $return .= 'checked="checked" '; $return .= "/> "; if ($linesStyle) $return .= ""; $return .= "".getLangDefinition($row->list_name).""; if ($row->subscribed && (!$row->confirmed)) $return .= "
("._UE_NEWSLETTER_NOT_CONFIRMED.")"; if ($linesStyle) $return .= "
"; else $return .= "
"; $return .= "".getLangDefinition($row->list_desc).""."
" . ""._UE_NEWSLETTER_FORMAT_TITLE . ":"."" . "
"; $return .= ""._UE_NEWSLETTER_FORMAT_FIELD.""; if ($linesStyle) $return .= "  "; else $return .= ""; $return .= moscomprofilerHTML::radioList($htmltext, 'newsLhtml','class="inputbox" size="1"', 'value', 'text', $rows[0]->receive_html ); $return .= "
"; $return .= "
"; return $return; } /** * Saves the user edit tab postdata into the tab's permanent storage * @param moscomprofilerTab $tab the tab database entry * @param moscomprofilerUser $user the user being displayed * @param int $ui 1 for front-end, 2 for back-end * @param array $postdata _POST data for saving edited tab content as generated with getEditTab * @return mixed either string HTML for tab content, or false if ErrorMSG generated */ function saveEditTab($tab, &$user, $ui, $postdata) { global $my, $_CB_framework, $_POST, $mainframe; // $mainframe needed by the require if( intval( $_CB_framework->myId() ) < 1 ) { cbNotAuth(); return; } if(!$this->_CheckYancInstalled()) { return; } require_once( $_CB_framework->getCfg('absolute_path') . _NEWSLETTERFILE ); $newslettersSubscriptions = new YancSubscription(); $lists = cbGetParam($_POST, 'newsLitems', array(0)); $html = cbGetParam($_POST, 'newsLhtml', 0); $subscribemessage = !($ui==2 && $user->approved && $user->confirmed); $result = $newslettersSubscriptions->saveMassSubscribe($user, $lists, $html, $subscribemessage); if ($result) { $this->_setErrorMSG($result); } } /** * Generates the HTML to display the registration tab/area * @param moscomprofilerTab $tab the tab database entry * @param moscomprofilerUser $user the user being displayed * @param int $ui 1 for front-end, 2 for back-end * @param array $postdata _POST data for saving edited tab content as generated with getEditTab * @return mixed either string HTML for tab content, or false if ErrorMSG generated */ function getDisplayRegistration($tab, $user, $ui) { global $my, $_CB_framework, $_POST, $mainframe; // $mainframe needed by the require $return = null; if( $this->_CheckYancInstalled() ) { require_once( $_CB_framework->getCfg('absolute_path') . _NEWSLETTERFILE ); $newslettersSubscriptions = new YancSubscription(); $params=$this->params; $newslettersRegList=$params->get('newslettersRegList'); $listsArray = (isset($newslettersRegList)) ? explode("|*|", $newslettersRegList) : null; $lists = $newslettersSubscriptions->getLists($my, $listsArray); if (count($lists) > 0){ $postedLists = cbGetParam($_POST, 'newsLitems', array(0)); $postedHtml = cbGetParam($_POST, 'newsLhtml', 1); $lists[0]->receive_html = $postedHtml; for ($i = 0, $n=count($lists); $i < $n; $i++) { $lists[$i]->subscribed = in_array($lists[$i]->id,$postedLists); $lists[$i]->confirmed = $lists[$i]->subscribed; // avoid display "not confirmed" on registration server-validation error. } global $_CB_OneTwoRowsStyleToggle; $class = 'sectiontableentry' . $_CB_OneTwoRowsStyleToggle; $_CB_OneTwoRowsStyleToggle = ( $_CB_OneTwoRowsStyleToggle == 1 ? 2 : 1 ); $return .= "\t\n"; $return .= "\t\t" . _UE_NEWSLETTER_SUBSCRIBE . "\n"; $return .= "\t\t"; $return .= $this->_getFormattedNewsletters($lists, true, _UE_NEWSLETTER_NAME_REG, _UE_NEWSLETTER_DESCRIPTION_REG); $return .= ""; $return .= "\t\n"; $return .= "\t  \n"; } } return $return; } /** * Saves the registration tab/area postdata into the tab's permanent storage * @param moscomprofilerTab $tab the tab database entry * @param moscomprofilerUser $user the user being displayed * @param int $ui 1 for front-end, 2 for back-end * @param array $postdata _POST data for saving edited tab content as generated with getEditTab * @return mixed either string HTML for tab content, or false if ErrorMSG generated */ function saveRegistrationTab($tab, &$user, $ui, $postdata) { global $ueConfig, $_CB_framework, $mainframe; // $mainframe needed by the require if(!$this->_CheckYancInstalled()) { return null; } $ret = null; if (true) { require_once( $_CB_framework->getCfg('absolute_path') . _NEWSLETTERFILE ); $newslettersSubscriptions = new YancSubscription(); $lists = cbGetParam($postdata, 'newsLitems', array(0)); $html = cbGetParam($postdata, 'newsLhtml', 1); $sendEmail = (($ueConfig['reg_confirmation']!="1") and ($ueConfig['reg_admin_approval']!="1")); // $result = $newslettersSubscriptions->saveMassSubscribe($user, $lists, $html, $sendEmail); foreach ( $lists as $li ) { $result = $newslettersSubscriptions->saveSubscription( $user, $li, $html, $sendEmail ); if ( $result !== true ) { $this->_setErrorMSG($result); $ret = false; } } } return $ret; } /** * Called once ConfirmationCode verified and user found and approved by moderator if needed * @param moscomprofilerUser $user reflecting the user being displayed * @param boolean $success TRUE if user activated successfully * @return boolean FALSE if error */ function userActivated($user, $success) { global $ueConfig, $_CB_framework, $mainframe; // $mainframe needed by the require if(!$this->_CheckYancInstalled()) { return true; } if ($success) { require_once( $_CB_framework->getCfg('absolute_path') . _NEWSLETTERFILE ); $newslettersSubscriptions = new YancSubscription(); if ( $_CB_framework->getCfg( 'uniquemail' ) == '1' ) { $newslettersSubscriptions->updateUnregisteredSubscriber($user); } $confirmCode = md5( $user->id ); $result = $newslettersSubscriptions->confirmSubscriber( $confirmCode, $user->id ); if ($result !== NULL) { $this->_setErrorMSG($result); return false; } } else { //MJ: what to do else here ? return true; } return true; } /** * Called when a user is deleted from backend (prepare future unregistration) * @param moscomprofilerUser $user reflecting the user being displayed * @param boolean $success TRUE if user activated successfully */ function userDeleteTab($user, $success) { global $ueConfig, $_CB_framework, $mainframe; // $mainframe needed by the require if(!$this->_CheckYancInstalled()) { return; } require_once( $_CB_framework->getCfg('absolute_path') . _NEWSLETTERFILE ); $newslettersSubscriptions = new YancSubscription(); $newslettersSubscriptions->deleteSubscriber($user); } // Additional public method: /** * Returns list of all newsletters available * @return array of newsletter objects */ function getNewslettersList() { global $my, $_CB_framework, $mainframe; // $mainframe needed by the require if(!$this->_CheckYancInstalled()) { return false; } require_once( $_CB_framework->getCfg('absolute_path') . _NEWSLETTERFILE ); $newslettersSubscriptions = new YancSubscription(); return $newslettersSubscriptions->getLists($my); } // Private Method: /** * Checks if newsletters component installed * @return boolean true =installed, false = not */ function _CheckYancInstalled() { global $_CB_database, $_CB_framework, $mainframe; // $mainframe needed by the require if(!file_exists($_CB_framework->getCfg('absolute_path') . _NEWSLETTERFILE)) { return false; } $query = "SELECT COUNT( * ) FROM #__components WHERE link LIKE '%com_yanc%'"; $_CB_database->setQuery( $query ); if ($_CB_database->LoadResult() < 1) { return false; } return true; } function loadNewslettersList($name,$value,$control_name) { $newslettersList = $this->getNewslettersList(); $newslettersRegList = array(); if ($newslettersList !== false) { foreach ($newslettersList AS $nl) { $newslettersRegList[] = moscomprofilerHTML::makeOption( $nl->id, $nl->list_name); } } $valAsObj = (isset($value)) ? array_map(create_function('$v', '$o=new stdClass(); $o->value=$v; return $o;'), explode("|*|", $value )) : null; return moscomprofilerHTML::selectList( $newslettersRegList, $control_name .'['. $name .'][]', 'size="4" multiple="multiple"', 'value', 'text', $valAsObj, true ); } } // end class getNewslettersTab. ?>