public function getUsers($fields = false, $typeID = 0, $columns = array(), $items = array(), $order = false, $limit = 15, $params = array()) { // Do we have only one user type? if (!$typeID && count(config::item('usertypes', 'core', 'keywords')) == 1) { $typeID = key(config::item('usertypes', 'core', 'keywords')); } // Do we need to count users? if (isset($params['count']) && $params['count']) { if ($typeID) { $total = $this->fields_model->countRows('profile', true, $columns, $items, array('table_type' => config::item('usertypes', 'core', 'keywords', $typeID))); } else { $total = $this->fields_model->countRows('user', false, $columns); } return $total; } $params['select_columns'] = "`f`.`service_id` AS `picture_file_service_id`, `f`.`path` AS `picture_file_path`, `f`.`name` AS `picture_file_name`, `f`.`extension` AS `picture_file_ext`, `f`.`width` AS `picture_file_width`, `f`.`height` AS `picture_file_height`,\n\t\t\t`f`.`size` AS `picture_file_size`, `f`.`post_date` AS `picture_file_post_date`, `f`.`modify_date` AS `picture_file_modify_date`"; $params['join_tables'] = "LEFT JOIN `:prefix:storage_files` AS `f` ON `u`.`picture_id`=`f`.`file_id`"; if ($typeID) { $params['select_columns'] .= ', `u`.*'; $params['type_id'] = $typeID; $params['table_type'] = config::item('usertypes', 'core', 'keywords', $typeID); $params['prefix_order'] = 'u'; } // Get users $users = $this->fields_model->getRows($typeID ? 'profile' : 'user', $typeID ? true : false, $typeID ? $fields : false, $columns, $items, $order, $limit, $params); $types = array(); // Loop through users foreach ($users as $userID => $user) { // Do we need to fetch profiles? if ($fields && !$typeID) { // Does user type ID exist already? if (!isset($types[$user['type_id']])) { $types[$user['type_id']] = array(); } // Assign user type ID and user ID $types[$user['type_id']][$user['user_id']] = true; } // Do we have any field names set? if (!config::item('usertypes', 'core', 'fields', $user['type_id'], 1)) { $user['name1'] = $user['username']; $user['name2'] = ''; } $users[$userID]['name'] = users_helper::name($user['name1'], $user['name2'], isset($params['escape']) ? $params['escape'] : true); $users[$userID]['group_name'] = config::item('usergroups', 'core', $user['group_id']); $users[$userID]['type_name'] = config::item('usertypes', 'core', 'names', $user['type_id']); if (!isset($params['escape']) || $params['escape']) { $users[$userID]['name1'] = text_helper::entities($user['name1']); $users[$userID]['name2'] = text_helper::entities($user['name2']); $users[$userID]['group_name'] = text_helper::entities($users[$userID]['group_name']); $users[$userID]['type_name'] = text_helper::entities($users[$userID]['type_name']); } $users[$userID]['slug'] = users_helper::slug($user['user_id'], $user['username']); $users[$userID]['slug_id'] = users_helper::id($user['user_id'], $user['username']); $users[$userID]['online'] = $user['visit_date'] >= date_helper::now() - 60 * 5 ? 1 : 0; } // Do we need to fetch profiles? if ($fields && !$typeID) { $profiles = array(); unset($params['select_columns'], $params['join_tables']); // Loop through user types foreach ($types as $typeID => $userIDs) { // Get user profiles $profiles = $this->getProfiles(array_keys($userIDs), $typeID, $fields, $params); // Do we have any profiles? if ($profiles) { // Loop through users foreach ($users as $userID => $user) { // Does user ID exist? if (isset($profiles[$user['user_id']])) { // Merge user and profile fields $users[$userID] = array_merge($user, $profiles[$user['user_id']]); } } } } } // Do we need to fetch configuration? if (isset($params['config']) && $params['config']) { // Get settings $settings = $this->getUsersConfig(array_keys($users)); foreach ($settings as $userID => $setting) { $users[$userID]['config'] = $setting; } } return $users; }
public function view() { // Get URI vars $slugID = urldecode(utf8::trim(uri::segment(2))); // Do we have a slug ID? if ($slugID == '') { error::show404(); } // Is this our own account? if (strcasecmp($slugID, session::item('slug_id')) == 0) { $this->manage(); return; } // Get user if (!($user = $this->users_model->getUser($slugID))) { error::show404(); } elseif ($user['user_id'] != session::item('user_id') && (!$user['active'] || !$user['verified'] || $user['group_id'] == config::item('group_cancelled_id', 'users'))) { view::setError(__('user_not_active', 'users_signup')); router::redirect(users_helper::isLoggedin() ? users_helper::slug() : ''); } // Does user have permission to view this user group/type? if (!in_array($user['group_id'], session::permission('users_groups_view', 'users')) || !in_array($user['type_id'], session::permission('users_types_view', 'users'))) { view::noAccess(); } // Do we have cached user counters? if (!($counters = $this->counters_model->getCounters('user', session::item('user_id'), $user['user_id']))) { // Filter hook $counters = hook::filter('users/profile/view/counters', array(), $user); // Save counters for 24 hours $this->counters_model->saveCounters(false, 'user', session::item('user_id'), $user['user_id'], $counters, 60 * 24); } // Merge user and counters $user = array_merge($user, $counters); // Get fields $fields = $this->fields_model->getFields('users', $user['type_id'], 'view', 'in_view'); // Delete empty sections $this->fields_model->deleteEmptySections($fields, $user); // Assign vars view::assign(array('slugID' => $slugID, 'user' => $user, 'fields' => $fields)); // Set meta tags $this->metatags_model->set('users', 'users_view', array('user' => $user), ''); // Set trail view::setTrail($user['slug'], $user['name']); // Did we block this user or did they block us? if (users_helper::isLoggedin() && config::item('blacklist_active', 'users') && ($blocked = $this->users_blocked_model->getUser($user['user_id']))) { if ($blocked['user_id'] == session::item('user_id')) { view::setError(__('user_blocked', 'users')); } else { view::setError(__('user_blocked_self', 'users')); } // Load view view::load('users/profile/preview'); return; } // Set online/last visit status if (config::item('user_last_visit', 'users')) { if (!$user['invisible']) { if ($user['online']) { view::setTrail(false, '<span class="users online">' . __('status_online', 'users') . '</span>', array('side' => true)); } else { view::setTrail(false, '<span class="users date">' . __('status_visit_date', 'users', array('%span' => utf8::strtolower(date_helper::humanSpan($user['visit_date'])))) . '</span>', array('side' => true)); } } } // Validate profile privacy if (!$this->users_model->getPrivacyAccess($user['user_id'], isset($user['config']['privacy_profile']) ? $user['config']['privacy_profile'] : 1, false)) { view::setError(__('user_profile_limited', 'users')); // Load view view::load('users/profile/preview'); return; } // Do we have views enabled? if (config::item('user_views', 'users') && $user['user_id'] != session::item('user_id')) { // Update views counter $this->users_model->updateViews($user['user_id']); } // Do we have visitors enabled? if (users_helper::isLoggedin() && config::item('visitors_active', 'users') && $user['user_id'] != session::item('user_id') && !session::permission('users_visitors_anon', 'users')) { // Load visitors model loader::model('users/visitors', array(), 'users_visitors_model'); // Update views counter $this->users_visitors_model->addVisitor($user['user_id']); } // Load view view::load('users/profile/view'); }