Example #1
0
 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;
 }
Example #4
0
 /**
  * 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'));
     }
 }