/** * Gets a user's visibility settings for special context. Valid contexts are * at the moment: * <ul> * <li><b>online</b>: Visibility in "Who is online" list</li> * <li><b>search</b>: Can the user be found via person search?</li> * <li><b>email</b>: Is user's email address shown?</li> * <li><b>homepage</b>: Visibility of all user homepage elements, stored as * JSON-serialized array</li> * </ul> * * @param string $user_id user ID to check * @param string $context local visibility in which context? * @param boolean $return_user_perm return not only visibility, but also * the user's global permission level * @return mixed Visibility flag or array with visibility and user permission * level. */ function get_local_visibility_by_id($user_id, $context, $return_user_perm=false) { global $NOT_HIDEABLE_FIELDS; $query = "SELECT a.perms, u.`{$context}` FROM auth_user_md5 AS a LEFT JOIN user_visibility AS u USING (user_id) WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($user_id)); $data = $statement->fetch(PDO::FETCH_ASSOC); if ($context === 'homepage') { $settings = User_Visibility_Settings::findByUser_id($user_id); foreach ($settings as $setting) { if ($setting['category'] == 1) { $homepage_settings[$setting['identifier']] = $setting['state']; } } if ($homepage_settings) { $data[$context] = json_encode($homepage_settings); } } if ($data[$context] === null) { $user_perm = $data['perm']; $data['perms'] = $user_perm; $data[$context] = get_config(strtoupper($context) . '_VISIBILITY_DEFAULT'); } // Valid context given. if ($data[$context]) { // Context may not be hidden per global config setting. if ($NOT_HIDEABLE_FIELDS[$data['perms']][$context]) { $result = true; } else { // Give also user's permission level. if ($return_user_perm) { $result = array( 'perms' => $data['perms'], $context => $data[$context] ); } else { $result = $data[$context]; } } } else { $result = false; } return $result; }