public static function checkChangeLevel($referrerid, $newtotal) { $app = JFactory::getApplication(); $db = JFactory::getDBO(); $ok = 0; $lang = JFactory::getLanguage(); $lang->load('com_alphauserpoints', JPATH_SITE); JTable::addIncludePath(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_alphauserpoints' . DS . 'tables'); $resultChangeLevel1 = AlphaUserPointsHelper::checkRuleEnabled('sysplgaup_changelevel1', 0, $referrerid); $resultChangeLevel2 = AlphaUserPointsHelper::checkRuleEnabled('sysplgaup_changelevel2', 0, $referrerid); $resultChangeLevel3 = AlphaUserPointsHelper::checkRuleEnabled('sysplgaup_changelevel3', 0, $referrerid); if ($resultChangeLevel1) { $checkAlreadyDone1 = explode(',', $resultChangeLevel1[0]->exclude_items); } if ($resultChangeLevel2) { $checkAlreadyDone2 = explode(',', $resultChangeLevel2[0]->exclude_items); } if ($resultChangeLevel3) { $checkAlreadyDone3 = explode(',', $resultChangeLevel3[0]->exclude_items); } $userid = AlphaUserPointsHelper::getUserID($referrerid); // get actual group fot this user jimport('joomla.user.helper'); $authorizedLevels = JAccess::getAuthorisedViewLevels($userid); $result = array_keys(JUserHelper::getUserGroups($userid)); $actualgroup = end($result); if ($resultChangeLevel1 && $newtotal >= $resultChangeLevel1[0]->points2 && !in_array(intval($resultChangeLevel1[0]->content_items), $authorizedLevels) && !in_array($userid, $checkAlreadyDone1)) { // delete old group $query = "DELETE FROM `#__user_usergroup_map` WHERE `user_id`='{$userid}'"; $db->setQuery($query); $db->query(); JUserHelper::addUserToGroup($userid, intval($resultChangeLevel1[0]->content_items)); $user = JUser::getInstance((int) $userid); $ok = 1; $resultChangeLevel = $resultChangeLevel1; $result = JUserHelper::getUserGroups($userid); $actualnamegroup = end($result); // insert done for this user in this rule if ($resultChangeLevel1[0]->exclude_items != '') { $insertUserId = $resultChangeLevel1[0]->exclude_items . ',' . $userid; } else { $insertUserId = $userid; } $row = JTable::getInstance('rules'); $row->load(intval($resultChangeLevel1[0]->id)); $row->exclude_items = $insertUserId; $db->updateObject('#__alpha_userpoints_rules', $row, 'id'); } if ($resultChangeLevel2 && $newtotal >= $resultChangeLevel2[0]->points2 && !in_array(intval($resultChangeLevel2[0]->content_items), $authorizedLevels) && !in_array($userid, $checkAlreadyDone2)) { $query = "DELETE FROM `#__user_usergroup_map` WHERE `user_id`='{$userid}'"; $db->setQuery($query); $db->query(); JUserHelper::addUserToGroup($userid, intval($resultChangeLevel2[0]->content_items)); $user = JUser::getInstance((int) $userid); $ok = 1; $resultChangeLevel = $resultChangeLevel2; $result = JUserHelper::getUserGroups($userid); $actualnamegroup = end($result); $row = JTable::getInstance('rules'); $row->load(intval($resultChangeLevel2[0]->id)); $row->exclude_items = $insertUserId; $db->updateObject('#__alpha_userpoints_rules', $row, 'id'); } if ($resultChangeLevel3 && $newtotal >= $resultChangeLevel3[0]->points2 && !in_array(intval($resultChangeLevel3[0]->content_items), $authorizedLevels) && !in_array($userid, $checkAlreadyDone3)) { $query = "DELETE FROM `#__user_usergroup_map` WHERE `user_id`='{$userid}'"; $db->setQuery($query); $db->query(); JUserHelper::addUserToGroup($userid, intval($resultChangeLevel3[0]->content_items)); $user = JUser::getInstance((int) $userid); $ok = 1; $resultChangeLevel = $resultChangeLevel3; $result = JUserHelper::getUserGroups($userid); $actualnamegroup = end($result); $row = JTable::getInstance('rules'); $row->load(intval($resultChangeLevel3[0]->id)); $row->exclude_items = $insertUserId; $db->updateObject('#__alpha_userpoints_rules', $row, 'id'); } if ($ok) { // refresh session if user online $temp = JFactory::getUser((int) $userid); $temp->groups = $user->groups; $temp = JFactory::getUser((int) $userid); if ($temp->id == $userid) { $temp->groups = $user->groups; } } // show message only for current user and if frontend site if ($referrerid == @$_SESSION['referrerid'] && $app->isSite() && $ok) { // display message for the current user if ($resultChangeLevel[0]->displaymsg && $resultChangeLevel[0]->msg != '') { $msg = str_replace('{username}', $user->username, $resultChangeLevel[0]->msg); $msg = str_replace('{points}', AlphaUserPointsHelper::getFPoints($resultChangeLevel[0]->points), $msg); $msg = str_replace('{newtotal}', AlphaUserPointsHelper::getFPoints($newtotal), $msg); AlphaUserPointsHelper::displayMessageSystem($msg); } elseif ($resultChangeLevel[0]->displaymsg && $resultChangeLevel[0]->msg == '') { AlphaUserPointsHelper::displayMessageSystem(sprintf(JText::_('AUP_MSG_YOUHAVENEWUSERRIGHTS'), AlphaUserPointsHelper::getFPoints($resultChangeLevel[0]->points2), $actualnamegroup)); } } if ($ok) { // insert this new activity in database $datareference = sprintf(JText::_('AUP_DESCRIPTIONACTIVITYONCHANGELEVEL'), AlphaUserPointsHelper::getFPoints($resultChangeLevel[0]->points2), $actualnamegroup); //AlphaUserPointsHelper::insertUserPoints( $referrerid, $resultChangeLevel[0], 0, '', $datareference ); //Send notification if ($resultChangeLevel[0]->notification) { AlphaUserPointsHelper::sendnotification($referrerid, $resultChangeLevel[0]->points2, $newtotal, $resultChangeLevel[0]); // load external plugins $dispatcher = JDispatcher::getInstance(); JPluginHelper::importPlugin('alphauserpoints'); $rule_name = JText::_($resultChangeLevel[0]->rule_name); $results = $dispatcher->trigger('onSendNotificationAlphaUserPoints', array(&$resultChangeLevel[0], $rule_name, $resultChangeLevel[0]->points2, $newtotal, $referrerid, $userid)); } // load external plugins $dispatcher = JDispatcher::getInstance(); JPluginHelper::importPlugin('alphauserpoints'); $results = $dispatcher->trigger('onChangeLevelAlphaUserPoints', array(&$resultChangeLevel[0], $actualnamegroup, $userid, $referrerid)); } }