/** * 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); }
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; } }
/** * 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); } } } } }