function mycred_get_users_badges($user_id = NULL)
 {
     if ($user_id === NULL) {
         return '';
     }
     global $wpdb;
     $query = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT * \n\t\t\tFROM {$wpdb->usermeta} \n\t\t\tWHERE user_id = %d \n\t\t\tAND meta_key LIKE %s", $user_id, 'mycred_badge%'));
     $badge_ids = array();
     if (!empty($query)) {
         foreach ($query as $badge) {
             $badge_id = substr($badge->meta_key, 12);
             if ($badge_id == '') {
                 continue;
             }
             $badge_id = (int) $badge_id;
             if (array_key_exists($badge_id, $badge_ids)) {
                 continue;
             }
             $requirements = mycred_get_badge_requirements($badge_id);
             if (count($requirements) > 1) {
                 $badge_ids[$badge_id] = $badge->meta_value;
             } else {
                 $badge_ids[$badge_id] = 0;
             }
         }
     }
     return apply_filters('mycred_get_users_badges', $badge_ids, $user_id);
 }
        /**
         * User Badges Admin Screen
         * @version 1.0
         */
        public function badge_user_screen()
        {
            global $mycred_manual_badges;
            $user_id = absint($_GET['user_id']);
            $user = get_userdata($user_id);
            global $bp;
            $mycred_admin = new myCRED_Admin();
            if (is_object($bp) && isset($bp->version) && version_compare($bp->version, '2.0', '>=') && bp_is_active('xprofile')) {
                $mycred_admin->using_bp = true;
            }
            $all_badges = mycred_get_badge_ids();
            $users_badges = mycred_get_users_badges($user_id);
            ?>
<div class="wrap" id="edit-badges-page">
	<h2><?php 
            _e('User Badges', 'mycred');
            ?>
</h2>
	<?php 
            if (isset($_POST['mycred_badge_manual'])) {
                echo '<div class="updated"><p>Badges successfully updated.</p></div>';
            }
            ?>
	<form id="your-profile" action="" method="post">
		<?php 
            $mycred_admin->user_nav($user, 'badges');
            ?>
		<div class="clear clearfix"></div>
		<p><?php 
            _e('Here you can view the badges this user has earned and if needed, manually give or take away a badge from a user.', 'mycred');
            ?>
</p>
		<div id="badge-wrapper">
<?php 
            if (!empty($all_badges)) {
                foreach ($all_badges as $badge_id) {
                    $badge_id = absint($badge_id);
                    $earned = $level = 0;
                    $status = '<span class="not-earned">' . __('Not earned', 'mycred') . '</span>';
                    $image = get_post_meta($badge_id, 'default_image', true);
                    $requirements = mycred_get_badge_requirements($badge_id);
                    if (array_key_exists($badge_id, $users_badges)) {
                        $earned = 1;
                        $status = '<span class="earned">' . __('Earned', 'mycred') . '</span>';
                        $level = $users_badges[$badge_id];
                        $image = get_post_meta($badge_id, 'level_image' . $level, true);
                        if ($image == '') {
                            $image = get_post_meta($badge_id, 'main_image', true);
                        }
                    }
                    if ($image != '') {
                        $image = '<img src="' . $image . '" alt="" />';
                    } else {
                        $image = '<span>' . __('No image', 'mycred') . '</span>';
                    }
                    $level_select = '<input type="hidden" name="mycred_badge_manual[badges][' . $badge_id . '][level]" value="" />';
                    if (count($requirements) > 1) {
                        $level_select = '<li><select name="mycred_badge_manual[badges][' . $badge_id . '][level]">';
                        $level_select .= '<option value=""';
                        if (!$earned) {
                            $level_select .= ' selected="selected"';
                        }
                        $level_select .= '>' . __('Select a level', 'mycred') . '</option>';
                        foreach ($requirements as $l => $needs) {
                            $level_select .= '<option value="' . $l . '"';
                            if ($earned && $level == $l) {
                                $level_select .= ' selected="selected"';
                            }
                            $level_select .= '>' . __('Level', 'mycred') . ' ' . ($l + 1) . '</option>';
                        }
                        $level_select .= '</select></li>';
                    }
                    ?>
			<div class="the-badge">
				<div class="badge-image-wrap">
					<?php 
                    echo $image;
                    ?>
				</div>
				<h4><?php 
                    echo get_the_title($badge_id);
                    ?>
</h4>
				<div class="badge-status"><label><?php 
                    _e('Status', 'mycred');
                    ?>
</label><?php 
                    echo $status;
                    ?>
</div>
				<div class="badge-actions">
					<ul>
						<li><label><input type="checkbox" name="mycred_badge_manual[badges][<?php 
                    echo $badge_id;
                    ?>
][has]" <?php 
                    checked($earned, 1);
                    ?>
 value="1" /> <?php 
                    _e('Earned', 'mycred');
                    ?>
</label></li>
						<?php 
                    echo $level_select;
                    ?>
					</ul>
				</div>
			</div>
<?php 
                }
            }
            ?>
			<div class="clear clearfix"></div>
		</div>
		<input type="hidden" name="mycred_badge_manual[token]" value="<?php 
            echo wp_create_nonce('mycred-adjust-users-badge' . $user_id);
            ?>
" />
		<p><input type="submit" class="button button-primary" value="<?php 
            _e('Save Changes', 'mycred');
            ?>
" /></p>
	</form>
</div>
<?php 
        }
 function mycred_check_if_user_gets_badge($user_id = NULL, $request = array(), $badge_ids = array())
 {
     if ($user_id === NULL || empty($badge_ids)) {
         return;
     }
     global $wpdb;
     foreach ($badge_ids as $badge_id) {
         // See if user already has badge
         if (mycred_get_user_meta($user_id, 'mycred_badge' . $badge_id, '', true) != '') {
             continue;
         }
         $requirements = mycred_get_badge_requirements($badge_id);
         $needs = $requirements[0];
         $mycred = mycred($needs['type']);
         $mycred_log = $mycred->log_table;
         if ($needs['by'] == 'count') {
             $select = 'COUNT( * )';
             $amount = $needs['amount'];
         } else {
             $select = 'SUM( creds )';
             $amount = $mycred->number($needs['amount']);
         }
         $result = $wpdb->get_var($wpdb->prepare("\n\t\t\tSELECT {$select} \n\t\t\tFROM {$mycred_log} \n\t\t\tWHERE user_id = %d \n\t\t\t\tAND ctype = %s \n\t\t\t\tAND ref = %s;", $user_id, $needs['type'], $needs['reference']));
         // If this function is used by the mycred_add filter, we need to take into
         // account the instance that we are currently being hooked into as the log entry
         // will be added after this code has executed.
         // In case we sum up, add the points the user will gain to the result
         if (!isset($request['done']) && $needs['by'] == 'sum') {
             $result = $result + $request['amount'];
         } elseif (!isset($request['done']) && $needs['by'] == 'count') {
             $result = $result + 1;
         }
         if ($needs['by'] != 'count') {
             $result = $mycred->number($result);
         }
         // Got it!
         if ($result >= $amount) {
             mycred_update_user_meta($user_id, 'mycred_badge' . $badge_id, '', apply_filters('mycred_badge_user_value', 1, $user_id, $badge_id));
         }
     }
 }
Example #4
0
        /**
         * Badge Preferences Metabox
         * @version 1.0
         */
        public function metabox_badge_requirements($post)
        {
            $requirements = mycred_get_badge_requirements($post->ID, true);
            $types = mycred_get_types();
            $references = mycred_get_all_references();
            $sums = array('count' => __('Time(s)', 'mycred'), 'sum' => __('In total', 'mycred'));
            ?>

<style type="text/css">
#mycred-remove-badge-connections { float: right; }
#mycred-badge-actions { padding-bottom: 12px; margin-bottom: 12px; border-bottom: 1px solid #ccc; }
<?php 
            if ($post->post_status != 'publish') {
                ?>
#minor-publishing-actions { padding-bottom: 12px; }
<?php 
            } else {
                ?>
#minor-publishing-actions { display: none; }
<?php 
            }
            ?>
#misc-publishing-actions { display: none; display: none !important; }
table#setup-badge-reqs { width: 100%; }
table#setup-badge-reqs td.type { width: 25%; }
table#setup-badge-reqs td.for { width: 5%; }
table#setup-badge-reqs td.reference { width: 50%; }
table#setup-badge-reqs td.amount { width: 10%; }
table#setup-badge-reqs td.sum { width: 10%; }
p.actions { text-align: right; }
</style>
<script type="text/javascript">
jQuery(function($) {
	$( '#postimagediv h3.hndle span' ).empty().text( '<?php 
            _e('Badge Image', 'mycred');
            ?>
' );
	$( '#postimagediv div.inside p a' ).attr( 'title', '<?php 
            _e('Set badge image', 'mycred');
            ?>
' ).empty().text( '<?php 
            _e('Set badge image', 'mycred');
            ?>
' );
});
</script>
<p>To earn this badge, a user must have received:</p>
<table class="table" style="width: 100%;" id="setup-badge-reqs">

	<?php 
            do_action('mycred_edit_badge_before_req', $post);
            ?>

<?php 
            foreach ($requirements as $row => $needs) {
                if (!isset($needs['by'])) {
                    $needs = array('type' => '', 'reference' => '', 'amount' => '', 'by' => '');
                }
                ?>
	<tr class="badge-requires" id="badge-requirement-<?php 
                echo $row;
                ?>
">
		<td class="type">
			<?php 
                mycred_types_select_from_dropdown('mycred_badge[req][' . $row . '][type]', '', $needs['type']);
                ?>
		</td>
		<td class="for">for</td>
		<td class="reference">
			<select name="mycred_badge[req][<?php 
                echo $row;
                ?>
][reference]" id=""><?php 
                foreach ($references as $ref => $label) {
                    echo '<option value="' . $ref . '"';
                    if ($needs['reference'] == $ref) {
                        echo ' selected="selected"';
                    }
                    echo '>' . $label . '</option>';
                }
                ?>
</select>
		</td>
		<td class="amount">
			<input type="text" size="8" name="mycred_badge[req][<?php 
                echo $row;
                ?>
][amount]" id="" value="<?php 
                echo $needs['amount'];
                ?>
" />
		</td>
		<td class="sum">
			<select name="mycred_badge[req][<?php 
                echo $row;
                ?>
][by]" id=""><?php 
                foreach ($sums as $sum => $label) {
                    echo '<option value="' . $sum . '"';
                    if ($needs['by'] == $sum) {
                        echo ' selected="selected"';
                    }
                    echo '>' . $label . '</option>';
                }
                ?>
</select>
		</td>
	</tr>
<?php 
            }
            ?>

	<?php 
            do_action('mycred_edit_badge_after_req', $post);
            ?>

</table>
<?php 
        }