Example #1
0
/**
 * Enqueues JavaScript files.
 *
 * @since 2.0
 * @global object $bp BuddyPress global settings
 */
function dpa_add_js()
{
    global $bp;
    if (!bp_is_current_component($bp->achievements->slug)) {
        return;
    }
    if (DPA_SLUG_CREATE == $bp->current_action && dpa_permission_can_user_create() || DPA_SLUG_ACHIEVEMENT_EDIT == $bp->current_action && dpa_permission_can_user_edit() || DPA_SLUG_ACHIEVEMENT_CHANGE_PICTURE == $bp->current_action && dpa_permission_can_user_change_picture() || DPA_SLUG_ACHIEVEMENT_GRANT == $bp->current_action && dpa_permission_can_user_grant()) {
        nxt_enqueue_script('achievements-admin-js', plugins_url('/js/admin.js', __FILE__), array(), ACHIEVEMENTS_VERSION);
    }
    if ($bp->is_single_item) {
        nxt_enqueue_script('achievements-detail-js', plugins_url('/js/detail.js', __FILE__), array(), ACHIEVEMENTS_VERSION);
    } else {
        nxt_enqueue_script('achievements-directory-js', plugins_url('/js/directory.js', __FILE__), array(), ACHIEVEMENTS_VERSION);
    }
}
    ?>
			<span class="highlight"><?php 
    _e('Award', 'dpa');
    ?>
</span>&nbsp;
		<?php 
}
?>

		<span class="highlight"><?php 
printf(_n("%s point", "%s points", bp_core_number_format(dpa_get_achievement_points()), 'dpa'), bp_core_number_format(dpa_get_achievement_points()));
?>
</span>&nbsp;

		<?php 
if (!dpa_get_achievement_is_active() && dpa_permission_can_user_edit()) {
    ?>
			<span class="highlight"><?php 
    _e('Inactive Achievement', 'dpa');
    ?>
</span>&nbsp;
		<?php 
}
?>

		<span class="activity"><?php 
printf(_n('Only %s person has unlocked this Achievement', '%s people have unlocked this Achievement', bp_core_number_format(dpa_get_achievement_unlocked_count()), 'dpa'), bp_core_number_format(dpa_get_achievement_unlocked_count()));
?>
</span>
	</p>
/**
 * Returns the on-hover Quick Admin controls which appear for admin users on the Directory pages
 *
 * @since 2.0
 * @global object $bp BuddyPress global settings
 * @return string
 */
function dpa_get_achievements_quickadmin()
{
    global $bp;
    $items = array();
    if (!dpa_is_directory_page()) {
        return apply_filters('dpa_get_achievements_quickadmin', '', $items);
    }
    $url = dpa_get_achievement_slug_permalink();
    if (dpa_permission_can_user_change_picture()) {
        $items[] = sprintf('<a href="%1$s">%2$s</a>', $url . DPA_SLUG_ACHIEVEMENT_CHANGE_PICTURE, __('Change Picture', 'dpa'));
    }
    if (dpa_permission_can_user_delete()) {
        $items[] = sprintf('<a href="%1$s">%2$s</a>', $url . DPA_SLUG_ACHIEVEMENT_DELETE, __('Delete', 'dpa'));
    }
    if (dpa_permission_can_user_edit()) {
        $items[] = sprintf('<a href="%1$s">%2$s</a>', $url . DPA_SLUG_ACHIEVEMENT_EDIT, __('Edit', 'dpa'));
    }
    if (dpa_permission_can_user_grant()) {
        $items[] = sprintf('<a href="%1$s">%2$s</a>', $url . DPA_SLUG_ACHIEVEMENT_GRANT, __('Give', 'dpa'));
    }
    if (!$items) {
        return apply_filters('dpa_get_achievements_quickadmin', '', $items);
    }
    return apply_filters('dpa_get_achievements_quickadmin', '<span>' . implode('</span> | <span>', $items) . '</span>', $items);
}
 /**
  * Get the Achievement from the database
  *
  * @access public
  * @global object $bp BuddyPress global settings
  * @global nxtdb $nxtdb NXTClass database object
  * @param string|array $args See DPA_Achievement_Template::DPA_Achievement_Template() inline documentation for explanation of this argument
  * @return array The Achievements found matching the criteria (and the total number of, for pagination)
  * @see DPA_Achievement_Template::DPA_Achievement_Template
  * @since 2.0
  * @static
  */
 function get($args)
 {
     global $bp, $nxtdb;
     $defaults = array('skip_detail_page_result' => true, 'limit' => 0, 'page' => 1, 'per_page' => 20, 'populate_extras' => true, 'search_terms' => '', 'id' => '', 'slug' => '', 'type' => 'all', 'user_id' => 0, 'action' => '');
     $r = nxt_parse_args($args, $defaults);
     extract($r, EXTR_SKIP);
     // Single page may have already had a DB query
     if (!$skip_detail_page_result && $bp->achievements->current_achievement->id) {
         return array('total' => 1, 'achievements' => array($bp->achievements->current_achievement));
     }
     $select_vals = 'id, a.action_id, a.picture_id, a.action_count, a.name, a.description, a.points, a.is_active, a.slug, a.site_id, a.group_id';
     $extras = '';
     if ($populate_extras && $user_id && 'locked' != $type) {
         $extras .= sprintf("LEFT JOIN {$bp->achievements->table_unlocked} as u ON a.id = u.achievement_id AND u.user_id = %d ", $user_id);
         $select_vals .= ', achieved_at';
     }
     switch ($type) {
         case 'unlocked':
             $populate_extras = true;
             $sql = $nxtdb->prepare("SELECT a.{$select_vals}, achieved_at FROM {$bp->achievements->table_achievements} as a, {$bp->achievements->table_unlocked} as u WHERE a.id = u.achievement_id AND u.user_id = %d AND (is_active = 1 OR is_active = 2)", $user_id);
             $sql_total_count = $nxtdb->prepare("SELECT COUNT(a.id) FROM {$bp->achievements->table_achievements} as a, {$bp->achievements->table_unlocked} as u WHERE a.id = u.achievement_id AND u.user_id = %d AND (is_active = 1 OR is_active = 2)", $user_id);
             break;
         case 'locked':
             $populate_extras = false;
             $sql = $nxtdb->prepare("SELECT a.{$select_vals}, achieved_at FROM {$bp->achievements->table_achievements} as a LEFT JOIN {$bp->achievements->table_unlocked} as u ON a.id = u.achievement_id AND u.user_id = %d WHERE is_active = 1 AND achieved_at IS NULL", $user_id);
             $sql_total_count = $nxtdb->prepare("SELECT COUNT(a.id) FROM {$bp->achievements->table_achievements} as a LEFT JOIN {$bp->achievements->table_unlocked} as u ON a.id = u.achievement_id AND u.user_id = %d WHERE is_active = 1 AND achieved_at IS NULL", $user_id);
             break;
         case 'active_by_action':
             $sql = $nxtdb->prepare("SELECT a.{$select_vals} FROM {$bp->achievements->table_actions} as action, {$bp->achievements->table_achievements} as a {$extras}WHERE (is_active = 1 OR is_active = 2) AND action.id = a.action_id AND action.name = %s", $action);
             $sql_total_count = $nxtdb->prepare("SELECT COUNT(a.id) FROM {$bp->achievements->table_actions} as action, {$bp->achievements->table_achievements} as a {$extras}WHERE (is_active = 1 OR is_active = 2) AND action.id = a.action_id AND action.name = %s", $action);
             break;
         case 'active':
             $sql = $nxtdb->prepare("SELECT a.{$select_vals} FROM {$bp->achievements->table_achievements} as a {$extras}WHERE is_active = 1");
             $sql_total_count = $nxtdb->prepare("SELECT COUNT(a.id) FROM {$bp->achievements->table_achievements} as a {$extras}WHERE is_active = 1");
             break;
         case 'inactive':
             $sql = $nxtdb->prepare("SELECT a.{$select_vals} FROM {$bp->achievements->table_achievements} as a {$extras}WHERE is_active = 0");
             $sql_total_count = $nxtdb->prepare("SELECT COUNT(a.id) FROM {$bp->achievements->table_achievements} as a {$extras}WHERE is_active = 0");
             break;
         case 'single':
             if (!$id) {
                 $sql = $nxtdb->prepare("SELECT a.{$select_vals} FROM {$bp->achievements->table_achievements} as a {$extras}WHERE slug = %s", $slug);
             } else {
                 $sql = $nxtdb->prepare("SELECT a.{$select_vals} FROM {$bp->achievements->table_achievements} as a {$extras}WHERE id = %d", $id);
             }
             $sql_total_count = '';
             break;
         default:
         case 'all':
         case 'eventcount':
         case 'newest':
         case 'points':
             $sql = $nxtdb->prepare("SELECT a.{$select_vals} FROM {$bp->achievements->table_achievements} as a {$extras}");
             $sql_total_count = $nxtdb->prepare("SELECT COUNT(a.id) FROM {$bp->achievements->table_achievements} as a {$extras}");
             break;
     }
     $sql = apply_filters('dpa_achievement_get_type_sql', $sql, $limit, $page, $per_page, $populate_extras, $search_terms, $id, $slug, $type, $user_id, $action);
     $sql_total_count = apply_filters('dpa_achievement_get_type_count_sql', $sql_total_count, $limit, $page, $per_page, $populate_extras, $search_terms, $id, $slug, $type, $user_id, $action);
     if ($search_terms) {
         $search_terms = like_escape($nxtdb->escape($search_terms));
         if (in_array($type, array('all', 'alphabetical', 'eventcount', 'newest', 'points'))) {
             $search_sql = " WHERE";
         } else {
             $search_sql = " AND";
         }
         $search_sql .= " ( name LIKE '%%{$search_terms}%%' OR description LIKE '%%{$search_terms}%%' )";
         $sql .= $search_sql;
         $sql_total_count .= $search_sql;
     }
     // Filters
     if ('single' != $type) {
         // Only admins see inactive Achievements in the Directory.
         if (!dpa_permission_can_user_edit()) {
             if ($search_terms) {
                 $admin_sql = $nxtdb->prepare(" AND is_active=1");
                 $sql .= $admin_sql;
                 $sql_total_count .= $admin_sql;
             } elseif (in_array($type, array('all', 'alphabetical', 'eventcount', 'newest', 'points'))) {
                 $admin_sql .= " WHERE is_active=1";
                 $sql .= $admin_sql;
                 $sql_total_count .= $admin_sql;
             }
         }
         if ('unlocked' == $type && 'newest' == $action) {
             $sql .= " ORDER BY u.achieved_at DESC";
         } elseif ('newest' == $type || 'newest' == $action) {
             $sql .= " ORDER BY a.id DESC";
         } elseif ('points' == $type || 'points' == $action) {
             $sql .= " ORDER BY a.points DESC";
         } elseif ('alphabetical' == $type || 'alphabetical' == $action) {
             $sql .= " ORDER BY a.name ASC";
         } elseif ('eventcount' == $type || 'eventcount' == $action) {
             $sql .= " ORDER BY a.action_count DESC";
         } elseif ('unlocked' == $type) {
             // This must be the penultimate item
             $sql .= " ORDER BY u.achieved_at DESC";
         } else {
             // This must be the last item
             $sql .= " ORDER BY a.name ASC";
         }
         $sql = apply_filters('dpa_achievement_get_order_by_sql', $sql, $limit, $page, $per_page, $populate_extras, $search_terms, $id, $slug, $type, $user_id, $action);
     } else {
         $limit = 1;
     }
     if ('active_by_action' != $type) {
         if ($per_page && $page && !$limit) {
             $sql .= $nxtdb->prepare(" LIMIT %d, %d", intval(($page - 1) * $per_page), intval($per_page));
         } elseif ($limit) {
             $sql .= " LIMIT {$limit}";
             $sql_total_count .= " LIMIT {$limit}";
         }
     }
     $results = $nxtdb->get_results($sql);
     if ('single' == $type) {
         $total_count = 1;
     } else {
         $total_count = $nxtdb->get_var($sql_total_count);
     }
     return array('total' => $total_count, 'achievements' => $results);
 }
Example #5
0
/**
 * Set up navigation and register pages
 *
 * @global object $bp BuddyPress global settings
 * @global bool $is_member_page If we are under anything with a members slug
 * @since 2.0
 * @uses DPA_Achievement
 */
function dpa_setup_nav()
{
    global $bp, $is_member_page;
    $url = dpa_get_achievements_permalink() . '/';
    if (bp_is_current_component($bp->achievements->slug) && ($bp->achievements->current_achievement = new DPA_Achievement(array('type' => 'single', 'slug' => apply_filters('dpa_get_achievement_slug', $bp->current_action))))) {
        if (isset($bp->achievements->current_achievement->is_active) && !$bp->achievements->current_achievement->is_active && !dpa_permission_can_user_edit()) {
            // Require edit permission to view an inactive Achievement's pages
            bp_core_redirect(dpa_get_achievements_permalink());
            return;
        } else {
            if ($bp->achievements->current_achievement->id) {
                $bp->is_single_item = true;
            }
            $bp->is_item_admin = 0;
            if ($bp->loggedin_user->is_super_admin) {
                $bp->is_item_admin = 1;
            }
            // Possibly redundant since BP 1.1, but left for compatibility just in case
        }
    }
    // Add 'Achievements' to the main navigation
    bp_core_new_nav_item(array('name' => sprintf(__('Achievements <span>%s</span>', 'dpa'), dpa_get_total_achievement_count_for_user()), 'slug' => $bp->achievements->slug, 'position' => 80, 'screen_function' => 'dpa_screen_my_achievements', 'default_subnav_slug' => DPA_SLUG_MY_ACHIEVEMENTS, 'item_css_id' => $bp->achievements->id));
    $subnav_url = $bp->loggedin_user->domain . DPA_SLUG . '/';
    bp_core_new_subnav_item(array('name' => sprintf(__('My Achievements <span>%s</span>', 'dpa'), dpa_get_total_achievement_count_for_user()), 'slug' => DPA_SLUG_MY_ACHIEVEMENTS, 'parent_url' => $subnav_url, 'parent_slug' => $bp->achievements->slug, 'screen_function' => 'dpa_screen_my_achievements', 'position' => 10, 'item_css_id' => 'achievements_my'));
    if (bp_is_current_component($bp->achievements->slug)) {
        if (bp_is_my_profile() && !$bp->is_single_item) {
            $bp->bp_options_title = __('My Achievements', 'dpa');
        } elseif (!bp_is_my_profile() && !$bp->is_single_item) {
            $bp->bp_options_title = $bp->displayed_user->fullname;
        } elseif ($bp->is_single_item) {
            // When in a single listing, the first action is bumped down one because of the listing ID, so we need to adjust this and set the listing name to current_item.
            $bp->current_item = $bp->current_action;
            if (isset($bp->action_variables[0])) {
                $bp->current_action = $bp->action_variables[0];
            } else {
                $bp->current_action = '';
            }
            array_shift($bp->action_variables);
            $bp->bp_options_title = apply_filters('dpa_get_achievement_name', $bp->achievements->current_achievement->name);
            $achievement_link = $url . $bp->achievements->current_achievement->slug . '/';
            $parent_slug = $bp->achievements->current_achievement->slug;
            // Add to the main navigation
            $main_nav = array('name' => __('Home', 'dpa'), 'slug' => $bp->achievements->current_achievement->slug, 'position' => -1, 'screen_function' => 'dpa_screen_achievement_activity', 'default_subnav_slug' => DPA_SLUG_ACHIEVEMENT_ACTIVITY, 'item_css_id' => $bp->achievements->id);
            bp_core_new_nav_item($main_nav);
            /**
             * Setup the subnav items
             */
            // Add the "Home" subnav item, as this will always be present
            $sub_nav[] = array('name' => __('Home', 'dpa'), 'slug' => DPA_SLUG_ACHIEVEMENT_ACTIVITY, 'parent_url' => $achievement_link, 'parent_slug' => $parent_slug, 'screen_function' => 'dpa_screen_achievement_activity', 'position' => 20, 'item_css_id' => 'achievements_activity');
            $sub_nav[] = array('name' => sprintf(__('Unlocked By <span>%s</span>', 'dpa'), dpa_get_achievement_unlocked_count($bp->achievements->current_achievement->id)), 'slug' => DPA_SLUG_ACHIEVEMENT_UNLOCKED_BY, 'parent_url' => $achievement_link, 'parent_slug' => $parent_slug, 'screen_function' => 'dpa_screen_achievement_unlocked_by', 'position' => 40, 'item_css_id' => 'achievements_unlockedby');
            if (dpa_permission_can_user_change_picture()) {
                $sub_nav[] = array('name' => __('Change Picture', 'dpa'), 'slug' => DPA_SLUG_ACHIEVEMENT_CHANGE_PICTURE, 'parent_url' => $achievement_link, 'parent_slug' => $parent_slug, 'screen_function' => 'dpa_screen_achievement_change_picture', 'position' => 50, 'item_css_id' => 'achievements_changepicture');
            }
            if (dpa_permission_can_user_delete()) {
                $sub_nav[] = array('name' => __('Delete', 'dpa'), 'slug' => DPA_SLUG_ACHIEVEMENT_DELETE, 'parent_url' => $achievement_link, 'parent_slug' => $parent_slug, 'screen_function' => 'dpa_screen_achievement_delete', 'position' => 50, 'user_has_access' => dpa_permission_can_user_delete(), 'item_css_id' => 'achievements_delete');
            }
            if (dpa_permission_can_user_delete()) {
                $sub_nav[] = array('name' => __('Edit', 'dpa'), 'slug' => DPA_SLUG_ACHIEVEMENT_EDIT, 'parent_url' => $achievement_link, 'parent_slug' => $parent_slug, 'screen_function' => 'dpa_screen_achievement_edit', 'position' => 60, 'user_has_access' => dpa_permission_can_user_edit(), 'item_css_id' => 'achievements_edit');
            }
            if (dpa_permission_can_user_grant()) {
                $sub_nav[] = array('name' => __('Grant', 'dpa'), 'slug' => DPA_SLUG_ACHIEVEMENT_GRANT, 'parent_url' => $achievement_link, 'parent_slug' => $parent_slug, 'screen_function' => 'dpa_screen_achievement_grant', 'position' => 70, 'user_has_access' => dpa_permission_can_user_grant(), 'item_css_id' => 'achievements_grant');
            }
            // initialize the subnav items
            foreach ($sub_nav as $nav) {
                bp_core_new_subnav_item($nav);
            }
        }
    }
}