Esempio n. 1
0
 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;
 }
Esempio n. 2
0
 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');
 }