Example #1
0
$template->assign(array('users' => $users, 'all_users' => join(',', $user_ids), 'ACTIVATE_COMMENTS' => $conf['activate_comments'], 'Double_Password' => $conf['double_password_type_in_admin']));
$default_user = get_default_user_info(true);
$protected_users = array($user['id'], $conf['guest_id'], $conf['default_user_id'], $conf['webmaster_id']);
// an admin can't delete other admin/webmaster
if ('admin' == $user['status']) {
    $query = '
SELECT
    user_id
  FROM ' . USER_INFOS_TABLE . '
  WHERE status IN (\'webmaster\', \'admin\')
;';
    $protected_users = array_merge($protected_users, query2array($query, null, 'user_id'));
}
$template->assign(array('PWG_TOKEN' => get_pwg_token(), 'NB_IMAGE_PAGE' => $default_user['nb_image_page'], 'RECENT_PERIOD' => $default_user['recent_period'], 'theme_options' => get_pwg_themes(), 'theme_selected' => get_default_theme(), 'language_options' => get_languages(), 'language_selected' => get_default_language(), 'association_options' => $groups, 'protected_users' => implode(',', array_unique($protected_users)), 'guest_user' => $conf['guest_id']));
// Status options
foreach (get_enums(USER_INFOS_TABLE, 'status') as $status) {
    $label_of_status[$status] = l10n('user_status_' . $status);
}
$pref_status_options = $label_of_status;
// a simple "admin" can set/remove statuses webmaster/admin
if ('admin' == $user['status']) {
    unset($pref_status_options['webmaster']);
    unset($pref_status_options['admin']);
}
$template->assign('label_of_status', $label_of_status);
$template->assign('pref_status_options', $pref_status_options);
$template->assign('pref_status_selected', 'normal');
// user level options
foreach ($conf['available_permission_levels'] as $level) {
    $level_options[$level] = l10n(sprintf('Level %d', $level));
}
Example #2
0
/**
 * API method
 * Returns a list of users
 * @param mixed[] $params
 *    @option int[] user_id (optional)
 *    @option string username (optional)
 *    @option string[] status (optional)
 *    @option int min_level (optional)
 *    @option int[] group_id (optional)
 *    @option int per_page
 *    @option int page
 *    @option string order
 *    @option string display
 */
function ws_users_getList($params, &$service)
{
    global $conf;
    $where_clauses = array('1=1');
    if (!empty($params['user_id'])) {
        $where_clauses[] = 'u.' . $conf['user_fields']['id'] . ' IN(' . implode(',', $params['user_id']) . ')';
    }
    if (!empty($params['username'])) {
        $where_clauses[] = 'u.' . $conf['user_fields']['username'] . ' LIKE \'' . pwg_db_real_escape_string($params['username']) . '\'';
    }
    if (!empty($params['status'])) {
        $params['status'] = array_intersect($params['status'], get_enums(USER_INFOS_TABLE, 'status'));
        if (count($params['status']) > 0) {
            $where_clauses[] = 'ui.status IN("' . implode('","', $params['status']) . '")';
        }
    }
    if (!empty($params['min_level'])) {
        if (!in_array($params['min_level'], $conf['available_permission_levels'])) {
            return new PwgError(WS_ERR_INVALID_PARAM, 'Invalid level');
        }
        $where_clauses[] = 'ui.level >= ' . $params['min_level'];
    }
    if (!empty($params['group_id'])) {
        $where_clauses[] = 'ug.group_id IN(' . implode(',', $params['group_id']) . ')';
    }
    $display = array('u.' . $conf['user_fields']['id'] => 'id');
    if ($params['display'] != 'none') {
        $params['display'] = array_map('trim', explode(',', $params['display']));
        if (in_array('all', $params['display'])) {
            $params['display'] = array('username', 'email', 'status', 'level', 'groups', 'language', 'theme', 'nb_image_page', 'recent_period', 'expand', 'show_nb_comments', 'show_nb_hits', 'enabled_high', 'registration_date', 'registration_date_string', 'registration_date_since', 'last_visit', 'last_visit_string', 'last_visit_since');
        } else {
            if (in_array('basics', $params['display'])) {
                $params['display'] = array_merge($params['display'], array('username', 'email', 'status', 'level', 'groups'));
            }
        }
        $params['display'] = array_flip($params['display']);
        // if registration_date_string or registration_date_since is requested,
        // then registration_date is automatically added
        if (isset($params['display']['registration_date_string']) or isset($params['display']['registration_date_since'])) {
            $params['display']['registration_date'] = true;
        }
        // if last_visit_string or last_visit_since is requested, then
        // last_visit is automatically added
        if (isset($params['display']['last_visit_string']) or isset($params['display']['last_visit_since'])) {
            $params['display']['last_visit'] = true;
        }
        if (isset($params['display']['username'])) {
            $display['u.' . $conf['user_fields']['username']] = 'username';
        }
        if (isset($params['display']['email'])) {
            $display['u.' . $conf['user_fields']['email']] = 'email';
        }
        $ui_fields = array('status', 'level', 'language', 'theme', 'nb_image_page', 'recent_period', 'expand', 'show_nb_comments', 'show_nb_hits', 'enabled_high', 'registration_date');
        foreach ($ui_fields as $field) {
            if (isset($params['display'][$field])) {
                $display['ui.' . $field] = $field;
            }
        }
    } else {
        $params['display'] = array();
    }
    $query = '
SELECT DISTINCT ';
    $first = true;
    foreach ($display as $field => $name) {
        if (!$first) {
            $query .= ', ';
        } else {
            $first = false;
        }
        $query .= $field . ' AS ' . $name;
    }
    if (isset($params['display']['groups'])) {
        if (!$first) {
            $query .= ', ';
        }
        $query .= '"" AS groups';
    }
    $query .= '
  FROM ' . USERS_TABLE . ' AS u
    INNER JOIN ' . USER_INFOS_TABLE . ' AS ui
      ON u.' . $conf['user_fields']['id'] . ' = ui.user_id
    LEFT JOIN ' . USER_GROUP_TABLE . ' AS ug
      ON u.' . $conf['user_fields']['id'] . ' = ug.user_id
  WHERE
    ' . implode(' AND ', $where_clauses) . '
  ORDER BY ' . $params['order'] . '
  LIMIT ' . $params['per_page'] . '
  OFFSET ' . $params['per_page'] * $params['page'] . '
;';
    $users = array();
    $result = pwg_query($query);
    while ($row = pwg_db_fetch_assoc($result)) {
        $row['id'] = intval($row['id']);
        $users[$row['id']] = $row;
    }
    if (count($users) > 0) {
        if (isset($params['display']['groups'])) {
            $query = '
SELECT user_id, group_id
  FROM ' . USER_GROUP_TABLE . '
  WHERE user_id IN (' . implode(',', array_keys($users)) . ')
;';
            $result = pwg_query($query);
            while ($row = pwg_db_fetch_assoc($result)) {
                $users[$row['user_id']]['groups'][] = intval($row['group_id']);
            }
        }
        if (isset($params['display']['registration_date_string'])) {
            foreach ($users as $cur_user) {
                $users[$cur_user['id']]['registration_date_string'] = format_date($cur_user['registration_date'], array('day', 'month', 'year'));
            }
        }
        if (isset($params['display']['registration_date_since'])) {
            foreach ($users as $cur_user) {
                $users[$cur_user['id']]['registration_date_since'] = time_since($cur_user['registration_date'], 'month');
            }
        }
        if (isset($params['display']['last_visit'])) {
            $query = '
SELECT
    MAX(id) as history_id
  FROM ' . HISTORY_TABLE . '
  WHERE user_id IN (' . implode(',', array_keys($users)) . ')
  GROUP BY user_id
;';
            $history_ids = array_from_query($query, 'history_id');
            if (count($history_ids) == 0) {
                $history_ids[] = -1;
            }
            $query = '
SELECT
    user_id,
    date,
    time
  FROM ' . HISTORY_TABLE . '
  WHERE id IN (' . implode(',', $history_ids) . ')
;';
            $result = pwg_query($query);
            while ($row = pwg_db_fetch_assoc($result)) {
                $last_visit = $row['date'] . ' ' . $row['time'];
                $users[$row['user_id']]['last_visit'] = $last_visit;
                if (isset($params['display']['last_visit_string'])) {
                    $users[$row['user_id']]['last_visit_string'] = format_date($last_visit, array('day', 'month', 'year'));
                }
                if (isset($params['display']['last_visit_since'])) {
                    $users[$row['user_id']]['last_visit_since'] = time_since($last_visit, 'day');
                }
            }
        }
    }
    $users = trigger_change('ws_users_getList', $users);
    return array('paging' => new PwgNamedStruct(array('page' => $params['page'], 'per_page' => $params['per_page'], 'count' => count($users))), 'users' => new PwgNamedArray(array_values($users), 'user'));
}