예제 #1
0
/**
 * 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;
}