Esempio n. 1
0
         }
         if ($val) {
             $where .= " AND um_{$um_keys[$i]}.meta_value LIKE '%{$val}%'";
         } else {
             $where .= " AND um_{$um_keys[$i]}.meta_value = '{$val}'";
         }
     }
 }
 $results = $wpdb->get_results("SELECT ID, user_login, display_name FROM {$wpdb->users} {$join} {$where} ORDER BY {$orderby} LIMIT 1000");
 if ($results) {
     $omit_users = array();
     // determine all current users for group in question
     if (!empty($agent_id)) {
         $topic = isset($topic) ? $topic : '';
         $group_type = $context && pp_group_type_exists($context) ? $context : 'pp_group';
         $omit_users = pp_get_group_members($agent_id, $group_type, 'id', array('member_type' => $topic, 'status' => 'any'));
     } elseif ($omit_admins) {
         if ($admin_roles = ppc_administrator_roles()) {
             // Administrators can't be excluded; no need to include or enable them
             global $wpdb;
             $role_csv = implode("','", array_keys($admin_roles));
             $omit_users = $wpdb->get_col("SELECT u.ID FROM {$wpdb->users} AS u INNER JOIN {$wpdb->pp_group_members} AS gm ON u.ID = gm.user_id INNER JOIN {$wpdb->pp_groups} AS g ON gm.group_id = g.ID WHERE g.metagroup_type = 'wp_role' AND g.metagroup_id IN ('{$role_csv}')");
         }
     }
     foreach ($results as $row) {
         if (!in_array($row->ID, $omit_users)) {
             if (defined('PP_USER_RESULTS_DISPLAY_NAME')) {
                 $title = $row->user_login != $row->display_name ? " title='" . esc_attr($row->user_login) . "'" : '';
                 echo "<option value='{$row->ID}' class='pp-new-selection'{$title}>{$row->display_name}</option>";
             } else {
                 $title = $row->user_login != $row->display_name ? " title='" . esc_attr($row->display_name) . "'" : '';
 /**
  * Generate HTML for a single row on the PP Role Groups admin panel.
  *
  * @param object $user_object
  * @param string $style Optional. Attributes added to the TR element.  Must be sanitized.
  * @param int $num_users Optional. User count to display for this group.
  * @return string
  */
 function single_row($group_object, $style = '')
 {
     //$group_object = sanitize_user_object( $group_object, 'display' );
     global $pp_admin;
     static $base_url;
     static $members_cap;
     static $is_administrator;
     if (!isset($base_url)) {
         $base_url = apply_filters('pp_groups_base_url', 'admin.php');
         // @todo: filter based on menu usage
         $is_administrator = pp_is_user_administrator();
     }
     /*
     if ( ! $is_administrator ) {
     	$members_cap = apply_filters( 'pp_edit_groups_reqd_caps', array('pp_manage_members'), 'edit-members' );
     }
     */
     $group_id = $group_object->ID;
     if ($group_object->metagroup_id) {
         if ('rvy_notice' == $group_object->metagroup_type && !defined('RVY_VERSION')) {
             return;
         }
         require_once PPC_ABSPATH . '/groups-retrieval_pp.php';
         $group_object->group_name = PP_GroupRetrieval::get_metagroup_name($group_object->metagroup_type, $group_object->metagroup_id, $group_object->group_name);
         $group_object->group_description = PP_GroupRetrieval::get_metagroup_descript($group_object->metagroup_type, $group_object->metagroup_id, $group_object->group_description);
     }
     $group_object->group_name = stripslashes($group_object->group_name);
     $group_object->group_description = stripslashes($group_object->group_description);
     // Set up the hover actions for this user
     $actions = array();
     $checkbox = '';
     $can_manage_group = $is_administrator || pp_has_group_cap('pp_edit_groups', $group_id, $this->agent_type);
     $agent_type_clause = $this->agent_type && 'pp_group' != $this->agent_type ? "&amp;agent_type={$this->agent_type}" : '';
     // Check if the group for this row is editable
     if ($can_manage_group) {
         $edit_link = $base_url . "?page=pp-edit-permissions&amp;action=edit{$agent_type_clause}&amp;agent_id={$group_id}";
         $edit = "<strong><a href=\"{$edit_link}\">{$group_object->group_name}</a></strong><br />";
         $actions['edit'] = '<a href="' . $edit_link . '">' . __ppw('Edit') . '</a>';
     } else {
         $edit_link = '';
         $edit = '<strong>' . $group_object->group_name . '</strong>';
     }
     $can_delete_group = $is_administrator || current_user_can('pp_delete_groups', $group_id);
     if ($can_delete_group && !$group_object->metagroup_id) {
         $actions['delete'] = "<a class='submitdelete' href='" . wp_nonce_url($base_url . "?page=pp-groups&amp;pp_action=delete{$agent_type_clause}&amp;group={$group_id}", 'bulk-groups') . "'>" . __('Delete') . "</a>";
     }
     $actions = apply_filters('pp_group_row_actions', $actions, $group_object);
     $edit .= $this->row_actions($actions);
     // Set up the checkbox ( because the group or group members are editable, otherwise it's empty )
     if ($actions && !$group_object->metagroup_id) {
         $checkbox = "<input type='checkbox' name='groups[]' id='group_{$group_id}' value='{$group_id}' />";
     } else {
         $checkbox = '';
     }
     //$avatar = get_avatar( $user_object->ID, 32 );
     $r = "<tr id='group-{$group_id}'{$style}>";
     list($columns, $hidden) = $this->get_column_info();
     foreach ($columns as $column_name => $column_display_name) {
         $class = "class=\"{$column_name} column-{$column_name}\"";
         $style = '';
         if (in_array($column_name, $hidden)) {
             $style = ' style="display:none;"';
         }
         $attributes = "{$class}{$style}";
         switch ($column_name) {
             case 'cb':
                 $r .= "<th scope='row' class='check-column'>{$checkbox}</th>";
                 break;
             case 'ID':
                 $r .= "<td {$attributes}>{$group_id}</td>";
                 break;
             case 'group_name':
                 $r .= "<td {$attributes}>{$edit}</td>";
                 break;
             case 'num_users':
                 if ('wp_role' == $group_object->metagroup_type) {
                     $num_users = pp_count_role_users($group_object->metagroup_id);
                 } else {
                     $num_users = pp_get_group_members($group_id, $this->agent_type, 'count');
                 }
                 $attributes = 'class="posts column-num_users num"' . $style;
                 $r .= "<td {$attributes}>";
                 /*
                 if ( $members_link )
                 	$r .= "<a href='$members_link'>$num_users</a>";
                 else
                 */
                 if ('wp_role' == $group_object->metagroup_type) {
                     if (in_array($group_object->metagroup_id, array('wp_anon', 'wp_all', 'wp_auth'))) {
                         $r .= '';
                     } else {
                         $user_url = admin_url("users.php?role={$group_object->metagroup_id}");
                         $r .= "<a href='{$user_url}'>{$num_users}</a>";
                     }
                 } else {
                     $r .= $num_users;
                 }
                 $r .= "</td>";
                 break;
             case 'roles':
             case 'exceptions':
                 $r .= $this->single_row_role_column($column_name, $group_id, $can_manage_group, $edit_link, $attributes);
                 break;
             case 'description':
                 $r .= "<td {$attributes}>{$group_object->group_description}</td>";
                 break;
             default:
                 $r .= "<td {$attributes}>";
                 $r .= apply_filters('pp_manage_pp_groups_custom_column', '', $column_name, $group_id);
                 $r .= "</td>";
         }
     }
     $r .= '</tr>';
     return $r;
 }
Esempio n. 3
0
/**
 * Edit group settings based on contents of $_POST
 *
 * @param int $group_id Optional. Group ID.
 * @return int group id of the updated group
 */
function _pp_edit_group($group_id = 0, $agent_type = 'pp_group', $members_only = false)
{
    global $wpdb;
    if ($group_id) {
        $update = true;
        $group = pp_get_group($group_id, $agent_type);
    } else {
        $update = false;
        $group = (object) array();
    }
    if (!$members_only) {
        if (isset($_REQUEST['group_name'])) {
            $group->group_name = sanitize_text_field($_REQUEST['group_name']);
        }
        if (isset($_REQUEST['description'])) {
            $group->group_description = sanitize_text_field($_REQUEST['description']);
        }
        $errors = new WP_Error();
        /* checking that username has been typed */
        if (!$group->group_name) {
            $errors->add('group_name', __('<strong>ERROR</strong>: Please enter a group name.', 'pp'));
        } elseif (!$update && !PP_GroupsUpdate::group_name_available($group->group_name, $agent_type)) {
            $errors->add('user_login', __('<strong>ERROR</strong>: This group name is already registered. Please choose another one.', 'pp'));
        }
        // Allow plugins to return their own errors.
        do_action_ref_array('pp_group_profile_update_errors', array(&$errors, $update, &$group));
        if ($errors->get_error_codes()) {
            return $errors;
        }
        if ($update) {
            PP_GroupsUpdate::update_group($group_id, $group, $agent_type);
        } else {
            $group_id = PP_GroupsUpdate::create_group($group, $agent_type);
        }
    }
    if ($group_id) {
        $member_types = array();
        if (pp_has_group_cap('pp_manage_members', $group_id, $agent_type)) {
            $member_types[] = 'member';
        }
        foreach ($member_types as $member_type) {
            if (isset($_REQUEST["{$member_type}_csv"]) && $_REQUEST["{$member_type}_csv"] != -1) {
                // handle member changes
                $current = pp_get_group_members($group_id, $agent_type, 'id', compact('member_type'));
                $selected = isset($_REQUEST["{$member_type}_csv"]) ? explode(",", pp_sanitize_csv($_REQUEST["{$member_type}_csv"])) : array();
                if ('member' != $member_type || !apply_filters('pp_custom_agent_update', false, $agent_type, $group_id, $selected)) {
                    if ($add_users = array_diff($selected, $current)) {
                        pp_add_group_user($group_id, $add_users, compact('agent_type', 'member_type'));
                    }
                    if ($remove_users = array_diff($current, $selected)) {
                        pp_remove_group_user($group_id, $remove_users, compact('agent_type', 'member_type'));
                    }
                }
            }
        }
        // end foreach member_types
        do_action('pp_edited_group', $agent_type, $group_id, $update);
    }
    return $group_id;
}
Esempio n. 4
0
 public static function user_selection_ui($group_id = 0, $agent_type, $user_class = 'member', $all_users = '')
 {
     global $pp;
     // This is only needed for checkbox selection
     if (!$all_users) {
         $all_users = self::get_all_users('id_name');
     }
     $current_users = $group_id ? pp_get_group_members($group_id, $agent_type, 'all', array('member_type' => $user_class, 'status' => 'any')) : array();
     $args = array('suppress_extra_prefix' => true, 'ajax_selection' => true, 'agent_id' => $group_id);
     echo '<div>';
     echo '<div class="pp-agent-select">';
     $pp_agents_ui = pp_init_agents_ui();
     $pp_agents_ui->agents_ui('user', $all_users, $user_class, $current_users, $args);
     echo '</div>';
     echo '</div>';
 }