function _ppc_count_assigned_roles($agent_type, $args = array()) { global $wpdb; $defaults = array('query_agent_ids' => false, 'join_groups' => true); extract(array_merge($defaults, $args), EXTR_SKIP); $count = array(); if ('user' == $agent_type && $join_groups) { $agent_clause = $query_agent_ids ? "AND gm.user_id IN ('" . implode("','", array_map('intval', (array) $query_agent_ids)) . "')" : ''; $results = $wpdb->get_results("SELECT u.ID AS agent_id, r.role_name, COUNT(*) AS rolecount FROM {$wpdb->users} AS u INNER JOIN {$wpdb->pp_group_members} AS gm ON ( gm.user_id = u.ID {$agent_clause} ) INNER JOIN {$wpdb->ppc_roles} AS r ON ( ( r.agent_type = 'user' AND r.agent_id = gm.user_id ) OR ( r.agent_type = 'pp_group' AND r.agent_id = gm.group_id ) ) GROUP BY u.ID, r.role_name"); } else { $agent_clause = $query_agent_ids ? "AND agent_id IN ('" . implode("','", array_map('intval', (array) $query_agent_ids)) . "')" : ''; $results = $wpdb->get_results($wpdb->prepare("SELECT agent_id, role_name, COUNT(*) AS rolecount FROM {$wpdb->ppc_roles} WHERE agent_type = %s {$agent_clause} GROUP BY agent_id, role_name", $agent_type)); } $item_types = array_merge(pp_get_enabled_post_types(), pp_get_enabled_taxonomies()); foreach ($results as $row) { $arr_role = explode(':', $row->role_name); //$base_role_name = $arr_role[0]; //$src_name = $arr_role[1]; //$item_type = $arr_role[2]; $no_ext = !defined('PPCE_VERSION') && !defined('PPS_VERSION'); $no_custom_stati = !defined('PPS_VERSION'); if (isset($arr_role[2]) && in_array($arr_role[2], $item_types)) { // roles for these post statuses will not be applied if corresponding extensions are inactive, so do not indicate in users/groups listing or profile if ($no_ext && strpos($row->role_name, ':post_status:') && !strpos($row->role_name, ':post_status:private')) { continue; } elseif ($no_custom_stati && strpos($row->role_name, ':post_status:') && !strpos($row->role_name, ':post_status:private') && !strpos($row->role_name, ':post_status:draft')) { continue; } if ($role_title = ppc_get_role_title($row->role_name, array('slug_fallback' => false))) { $count[$row->agent_id]['roles'][$role_title] = $row->rolecount; if (!isset($count[$row->agent_id]['role_count'])) { $count[$row->agent_id]['role_count'] = 0; } $count[$row->agent_id]['role_count'] += $row->rolecount; } } } return $count; }
public static function _current_roles_ui($roles, $args = array()) { global $pp_admin, $pp_role_defs; $defaults = array('read_only' => false, 'caption' => '', 'class' => 'pp-group-roles', 'link' => '', 'agent_type' => ''); $args = array_merge($defaults, $args); extract($args); if (!$caption) { $caption = 'user' == $agent_type ? sprintf(__('Supplemental Roles %1$s(for user)%2$s', 'pp'), '<small>', '</small>') : __('Supplemental Roles', 'pp'); } $type_roles = array(); if (!$roles) { return; } // @todo: still necessary? $has_roles = false; foreach (array_keys($roles) as $key) { if (!empty($roles[$key])) { $has_roles = true; } } if (!$has_roles) { return; } $can_assign = current_user_can('pp_assign_roles') && pp_bulk_roles_enabled(); echo '<div style="clear:both;"></div>' . "<div id='pp_current_roles_header' class='pp-group-box {$class}'>" . '<h3>'; if ($link) { echo "<a href='{$link}'>{$caption}</a>"; } else { echo $caption; } echo '</h3>'; echo '<div>'; $_class = $read_only ? ' class="pp-readonly"' : ''; echo '<div id="pp_current_roles"' . $_class . '>'; foreach (array_keys($roles) as $role_name) { if (strpos($role_name, ':')) { $arr = explode(':', $role_name); //$pattern_role_name = $arr[0]; $src_name = $arr[1]; $object_type = $arr[2]; } else { $object_type = ''; $src_name = 0 === strpos($role_name, 'pp_') && strpos($role_name, '_manager') ? 'term' : 'post'; } $type_roles[$src_name][$object_type][$role_name] = true; } //ksort( $type_roles ); foreach (array_keys($type_roles) as $src_name) { ksort($type_roles[$src_name]); foreach (array_keys($type_roles[$src_name]) as $object_type) { if ($type_obj = pp_get_type_object($src_name, $object_type)) { $type_caption = $type_obj->labels->singular_name; } elseif ('term' == $src_name) { if (!defined('PPCE_VERSION')) { // term management roles will not be applied without collaborative editing extension, so do not display continue; } $type_caption = __('Term Management', 'pp'); } else { $_role_name = key($type_roles[$src_name][$object_type]); if (false === strpos($_role_name, ':')) { $type_obj = (object) array('labels' => (object) array('name' => __('objects', 'pp'), 'singular_name' => __('objects', 'pp'))); $type_caption = __('Direct-Assigned', 'pp'); } else { $type_obj = (object) array('labels' => (object) array('name' => __('objects', 'pp'), 'singular_name' => __('objects', 'pp'))); $type_caption = __('Disabled Type', 'pp'); } } echo "<div class='type-roles-wrapper'>"; echo '<h4 style="margin-bottom:0.3em">' . sprintf(__('%s Roles', 'pp'), $type_caption) . '</h4>'; echo "<div class='pp-current-type-roles'>"; // site roles if (isset($type_roles[$src_name][$object_type])) { echo "<div id='pp_current_{$src_name}_{$object_type}_site_roles' class='pp-current-roles pp-current-site-roles'>"; $inputs = array(); $_arr = $type_roles[$src_name][$object_type]; ksort($_arr); foreach (array_keys($_arr) as $role_name) { $role_title = ppc_get_role_title($role_name, array('include_warnings' => true)); if ($read_only) { $inputs[] = "<label>{$role_title}</label>"; } else { $ass_id = $roles[$role_name]; $cb_id = 'pp_edit_role_' . str_replace(',', '_', $ass_id); $inputs[] = "<label for='{$cb_id}'><input id='{$cb_id}' type='checkbox' name='pp_edit_role[]' value='{$ass_id}'> " . $role_title . '</label>'; } } $sep = $read_only ? ', ' : ' '; echo implode($sep, $inputs); echo '</div>'; } echo '</div></div>'; } // end foreach object_type } // end foreach src_name echo '<br /><div class="pp-role-bulk-edit" style="display:none">'; echo "<select><option value=''>" . __ppw('Bulk Actions', 'pp') . "</option><option value='remove'>" . __ppw('Remove', 'pp') . '</option></select>'; //submit_button( __ppw('Apply'), 'button-secondary submit-edit-item-role', '', false ); ?> <input type="submit" name="" class="button submit-edit-item-role" value="<?php _e('Apply', 'pp'); ?> " /> <?php echo '<img class="waiting" style="display:none;" src="' . esc_url(admin_url('images/wpspin_light.gif')) . '" alt="" />'; echo '</div>'; echo '</div>'; echo '</div></div>'; return true; }