public function onAdd() { $points = post('points'); if (!is_numeric($points)) { return; } $userExtend = new UserExtend($this->model); $userExtend->addPoints($points); return ['span.points' => $userExtend->user->points, 'span.points-today' => $userExtend->user->points_today, 'span.points-week' => $userExtend->user->points_this_week]; }
public function testCanHaveAndRemovePoints() { $incrementVal = 10; $user = FactoryMuffin::create('RainLab\\User\\Models\\User'); $points = $user->points; $points_this_week = $user->points_this_week; $userExtend = new UserExtend($user); // Add points $userExtend->addPoints($incrementVal); $points += $incrementVal; $points_this_week += $incrementVal; $this->assertEquals($user->points, $points); $this->assertEquals($user->points_this_week, $points_this_week); // Remove Points $userExtend->removePoints($incrementVal); $points -= $incrementVal; $points_this_week -= $incrementVal; $this->assertEquals($user->points, $points); $this->assertEquals($user->points_this_week, $points_this_week); }
/** * Process and determine if an award can be issued * based on a provided activity code * * @param object $user * A user model for which the activity should act upon * * @param array $params * An array of parameters for validating activities * * @return boolean * returns true if the process was successful */ public static function process(User $user, $params = []) { $activity = $params['activity']; if (self::canComplete($activity, $user)) { if ($user->activities()->save($activity)) { Event::fire('dma.friends.activity.completed', [$activity, $user]); // log an entry to the activity log FriendsLog::activity(['user' => $user, 'object' => $activity]); // Award points $userExtend = new UserExtend($user); $userExtend->addPoints($activity->points); // Hand everything off to the badges BadgeManager::applyActivityToBadges($user, $activity); $messages = Session::get('activityMessage'); if (!is_array($messages) && $messages) { $messages = [$messages]; } $message = !empty(trim(strip_tags($activity->complete_message))) ? $activity->complete_message : Lang::get('dma.friends::lang.activities.codeSuccess', ['title' => $activity->title]); $messages[] = $message; Session::put('activityMessage', $messages); return $activity; } } return false; }
/** * Complete the step and proceed to complete a badge if it can be completed * * @param Step $step * A step model * @param User $user * A user model */ private static function completeBadge(Step $step, User $user) { $badge = $step->badge; // Check badge global limit if ($badge->maximum_earnings_global > 0 && count($badge->users) > $badge->maximum_earnings_global) { return false; } // Complete step try { $user->steps()->save($step); Event::fire('dma.friends.step.completed', [$step, $user]); } catch (Exception $e) { throw new Exception(Lang::get('dma.friends::lang.exceptions.stepFailed')); } // See if the user has completed all steps for a badge foreach ($badge->steps as $step) { if (!$user->steps->contains($step->id)) { //user did not complete a step in badge so we cannot complete the badge return; } } try { // If loop completes with out returning false the user has completed all steps $user->badges()->save($badge); $userExtend = new UserExtend($user); $userExtend->addPoints($badge->points); Event::fire('dma.friends.badge.completed', [$badge, $user]); // log an entry to the activity log FriendsLog::unlocked(['user' => $user, 'object' => $badge]); if ($badge->congratulations_text) { $notificationText = $badge->congratulations_text; } else { $notificationText = Lang::get('dma.friends::lang.badges.completed', ['title' => $badge->title]); } //Flash::info($notificationText); Postman::send('simple', function (NotificationMessage $notification) use($user, $badge, $notificationText) { // Set user $notification->to($user, $user->name); // Send code and activity just in case we want to use in the template $notification->addData(['badge' => $badge]); $notification->message($notificationText); }, ['flash', 'kiosk']); } catch (Exception $e) { throw new Exception(Lang::get('dma.friends::lang.exceptions.badgeFailed')); } }