/** * Award badges the user is eligible for * @param ElggUser $user */ public static function rewardUser($user = null) { if (!$user) { $user = elgg_get_logged_in_user_entity(); } $reward = new gmReward($user); $reward->setLog("Rewarding user with {$user->guid}"); foreach (self::$rewards as $guid => $badge) { // check if the user already has this badge if (self::isClaimed($guid, $user->guid)) { $reward->setLog("Badge {$badge->entity}->title is already claimed by the user"); continue; } // uncovering the badge requires the user to spend points // user will need to opt in and claim the badge if ($badge->entity->points_cost > 0) { $reward->setLog("Badge {$badge->entity}->title requires the user to spend {$badge->entity->points_cost} points; user's action is required"); continue; } if (!self::isEligible($guid, $user->guid)) { $reward->setLog("User does not meet criteria for badge {$badge->entity}->title"); } if (self::claimBadge($guid, $user->guid)) { $reward->setLog("User has been awarded a new badge {$badge->entity}->title"); $reward->new_user_badges[] = $badge->entity; } } return $reward; }
/** * Setup entity menu * * @param string $hook Equals 'register' * @param string $type Equals 'menu:entity' * @param array $return Current menu * @param array $params Additional params * @return array Updated menu */ function entity_menu_setup($hook, $type, $return, $params) { $entity = elgg_extract('entity', $params); if (!elgg_instanceof($entity, 'object', HYPEGAMEMECHANICS_BADGE_SUBTYPE)) { return $return; } $return = array(); if ($entity->canEdit()) { $options = array('name' => 'edit', 'text' => elgg_echo('edit'), 'title' => elgg_echo('edit:this'), 'href' => PAGEHANDLER . "/badge/edit/{$entity->guid}", 'priority' => 200); $return[] = ElggMenuItem::factory($options); $options = array('name' => 'delete', 'text' => elgg_view_icon('delete'), 'title' => elgg_echo('delete:this'), 'href' => "action/badge/delete?guid={$entity->guid}", 'confirm' => elgg_echo('deleteconfirm'), 'priority' => 300); $return[] = ElggMenuItem::factory($options); } if (!gmReward::isClaimed($entity->guid) && gmReward::isEligible($entity->guid)) { $options = array('name' => 'claim', 'text' => elgg_echo('mechanics:claim'), 'href' => "action/badge/claim?guid={$entity->guid}", 'is_action' => true, 'confirm' => $entity->points_cost > 0 ? elgg_echo('mechanics:claim:confirm', array($entity->points_cost)) : false, 'priority' => 400); $return[] = ElggMenuItem::factory($options); } return $return; }