Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
    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}'>&nbsp;" . $role_title . '</label>';
                        }
                    }
                    $sep = $read_only ? ',&nbsp; ' : ' ';
                    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;
    }