/** * Change user level to higher one. * * <code> * $context = "com_user.registration"; * * $keys = array( * "id" => 1, * "group_id" => 2 * ); * * // Create user badge object based. * $level = new Gamification\Level\Level(\JFactory::getDbo()); * $level->load($keys); * * $levelManager = new Gamification\User\Level\LevelManager(\JFactory::getDbo()); * $levelManager->setLevel($level); * * if ($levelManager->give($context, $userId, $options)) { * // ... * } * </code> * * @param string $context * @param int $userId * @param array $options * * @throws \UnexpectedValueException * @throws \RuntimeException * @throws \InvalidArgumentException * * @return null|Level */ public function levelUp($context, $userId, array $options = array()) { if (!$this->level instanceof BasicLevel) { throw new \UnexpectedValueException('It is missing user level object.'); } $keys = array('user_id' => $userId, 'group_id' => $this->level->getGroupId()); $userLevel = new Level(\JFactory::getDbo()); $userLevel->load($keys); // Implement JObservableInterface: Pre-processing by observers $this->observers->update('onBeforeLevelUp', array($context, &$userLevel, &$options)); if (!$userLevel->getId()) { $keys['level_id'] = $this->level->getId(); $userLevel->startLeveling($keys); } else { if ((int) $this->level->getId() === (int) $userLevel->getLevelId()) { return null; } // Change the current rank ID with another one. $userLevel->setLevelId($this->level->getId()); $userLevel->store(); } // Implement JObservableInterface: Post-processing by observers $this->observers->update('onAfterLevelUp', array($context, &$userLevel, &$options)); return $userLevel; }
public function isLevelAchieved(Level $level, $userId = 0) { if (!$userId and $this->id > 0) { $userId = $this->id; } $query = $this->db->getQuery(true); $query->select('COUNT(*)')->from($this->db->quoteName('#__gfy_userlevels', 'a'))->where('a.user_id = ' . (int) $userId)->where('a.group_id = ' . (int) $level->getGroupId())->where('a.level_id = ' . (int) $level->getId()); $this->db->setQuery($query, 0, 1); return (bool) $this->db->loadResult(); }