Exemplo n.º 1
0
 /**
  * Retrieves the user's badgelist upon construction of the module object.
  * 
  * @param string $Sender
  */
 public function __construct($Sender = '')
 {
     parent::__construct($Sender);
     // default to the user object on the controller/the currently logged in user
     if (property_exists($Sender, 'User') && $Sender->User) {
         $UserID = $Sender->User->UserID;
     } else {
         $UserID = Gdn::Session()->UserID;
     }
     if (Gdn::Session()->UserID == $UserID) {
         $this->Title = T('Yaga.Badges.Mine');
     } else {
         $this->Title = T('Yaga.Badges');
     }
     $BadgeAwardModel = Yaga::BadgeAwardModel();
     $this->Data = $BadgeAwardModel->GetByUser($UserID);
 }
Exemplo n.º 2
0
 public function Award($Sender, $User, $Criteria)
 {
     $UserID = $Sender->EventArguments['UserID'];
     $Target = $Criteria->Target;
     $BadgeAwardModel = Yaga::BadgeAwardModel();
     $TargetDate = strtotime($Criteria->Duration . ' ' . $Criteria->Period . ' ago');
     $Badges = $BadgeAwardModel->GetByUser($UserID);
     $Types = array();
     foreach ($Badges as $Badge) {
         if (strtotime($Badge['DateInserted']) >= $TargetDate) {
             $Types[$Badge['RuleClass']] = TRUE;
         }
     }
     if (count($Types) >= $Target) {
         return $UserID;
     } else {
         return FALSE;
     }
 }
Exemplo n.º 3
0
 /**
  * This is the dispatcher to check badge awards
  *
  * @param mixed $Sender The sending object
  * @param string $Handler The event handler to check associated rules for awards
  * (e.g. BadgeAwardModel_AfterBadgeAward_Handler or Base_AfterConnection)
  */
 private function _AwardBadges($Sender, $Handler)
 {
     $Session = Gdn::Session();
     if (!C('Yaga.Badges.Enabled') || !$Session->IsValid()) {
         return;
     }
     // Let's us use __FUNCTION__ in the original hook
     $Hook = str_ireplace('_Handler', '', $Handler);
     $UserID = $Session->UserID;
     $User = $Session->User;
     $BadgeAwardModel = Yaga::BadgeAwardModel();
     $Badges = $BadgeAwardModel->GetUnobtained($UserID);
     $InteractionRules = RulesController::GetInteractionRules();
     $Rules = array();
     foreach ($Badges as $Badge) {
         // The badge award needs to be processed
         if ($Badge->Enabled && $Badge->UserID != $UserID || array_key_exists($Badge->RuleClass, $InteractionRules)) {
             // Create a rule object if needed
             $Class = $Badge->RuleClass;
             if (!in_array($Class, $Rules)) {
                 $Rule = new $Class();
                 $Rules[$Class] = $Rule;
             }
             $Rule = $Rules[$Class];
             // Only check awards for rules that use this hook
             if (in_array($Hook, $Rule->Hooks())) {
                 $Criteria = (object) unserialize($Badge->RuleCriteria);
                 $Result = $Rule->Award($Sender, $User, $Criteria);
                 if ($Result) {
                     if (is_numeric($Result)) {
                         $AwardedUserID = $Result;
                     } else {
                         $AwardedUserID = $UserID;
                     }
                     $BadgeAwardModel->Award($Badge->BadgeID, $AwardedUserID, $UserID);
                 }
             }
         }
     }
 }