$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)); }
/** * 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')); }