How to (Как сделать) ?

Как просмотреть профиль неактивированного юзера и запросить у него доп.инфу?

Просмотр 11 веток ответов
  • Автор
    Сообщения
    • #4235
      Ростислав
      Участник

      Добрый день! Все новые пользователи требуют активации администратором.

      1. Чтобы понять, что это за личность, хочется посмотреть его профиль ДО АКТИВАЦИИ, чтобы понять “наш это человек или нет, пускать или не пускать”. Как это сделать (такой опции на строке списка неактивированных пользователей нет).

      2. Если всё же профиль удастся посмотреть… И окажется, что пользователь не указал требуемые сведения, то:
      – как можно запросить эти сведения у него (например, отправить письмо)?
      – как дать неактивированному пользователю возможность дозаполнить поля профиля;
      – как уведомить администратора, что неактивированный пользователь внёс изменения в профиль?

    • #4236
      Ростислав
      Участник

      ++ 3. Как сделать, чтобы после активации пользователь не смог отредактировать некоторые поля своего профиля?

    • #4237
      slaFFik
      Хранитель

      1. Неудобное решение есть: на той странице отображаются логины пользователей. Скопируйте его.
      Потом, в случае моего сайта, вставляете в браузер: https://cosydale.com/users/extravert/profile/, где extravert меняете на логин того пользователя. Согласен, неудобно. Но я думаю, что успею впихнуть это в релиз 2,7, чтобы на странице неактивированных пользователей отображалась прямая ссылка.

      2. У вас его есть email – написать лично. Я не знаю, как будут работать личные сообщения в этом случае.
      Дозаполнить – ему на почту пришло письмо для активации. Пользователю надо просто перейти по ссылке, активироваться, и он сможет дальше редактировать то, что хочет.
      Уведомить админа – из коробки – никак. Если профиль активирован – появится сообщение в ленте активности (вы можете подписаться на ее RSS ленту), что был изменен профиль.

      3. Из коробки – никак. Но есть плагины :)

      BuddyPress Non Editable Profile Fields


      Или вот ветка:
      https://buddypress.org/support/topic/dont-allow-users-to-change-some-fields-after-sign-up-hide-those-fields/

    • #4238
      slaFFik
      Хранитель
      • #4239
        Ростислав
        Участник

        Спасибо за Ваши ответы и советы!

    • #4270
      Ростислав
      Участник

      В продолжение темы про кастомные поля! (Я тут уже освоился немного, “забурел”, поэтому и вопросы “покруче”):

      111. У меня такая беда: есть я – админ, есть ещё пара товарищей – “крутые модераторы” :) Они решают, пускать ли людей в закрытые группы нашего сообщества. Да вот беда: у нужных для этого кастомных полей профиля некоторые пользователи меняют видимость на “только для друзей”. И я не имею морального права запретить им это, поскольку речь идёт о персональной информации: ФИО, Телефон, Дата рождения. Так вот! Я эти поля вижу, а модераторы мои – нет. Вопрос: Как разрешить НЕадмину опцию “Видеть содержимое всех кастомных полей профилей пользователей” ?
      Варианты:
      – что-то разрешить модераторам через плагин “Редактор ролей”;
      – сделать новую кастомную вкладку в профиле BP, на которую вывести ВСЕ поля и сделать её видимой только для модеров;
      – немного “разломать” существующую вкладку “Профиль->Просмотр” так, чтобы Пользователи с ролью “Модератор” тоже видели все поля;
      – как-то ещё?

    • #4271
      slaFFik
      Хранитель

      Я не уверен, что плагин «Редактор ролей» поможет, но это самое правильное решение – попробуйте им добавить bp_xprofile_change_field_visibility capability.
      Кастомную вкладку я бы не делал. А вот подправить шаблон, чтобы модераторы тоже видели все поля – может не получиться. Надо смотреть в сторону BuddyPress фильтров.

      • #4273
        Ростислав
        Участник

        Ещё Вы пишите: “…Надо смотреть в сторону BuddyPress фильтров.”
        Понимаю о чём речь, но мне (джависту) в php-проекте пока не очень уютно…
        Не могли бы Вы дать целеуказание, где примерно смотреть?

    • #4272
      Ростислав
      Участник

      Попробовал предложенное Вами решение – “добавить bp_xprofile_change_field_visibility capability”.
      Установил для некоего пользователя через редакторо ролей это разрешение.
      Затем зашёл под его учёткой (при помощи плагина, позволяющего “Переключиться”).

      Результат отрицательный – по прежнему видны только поля публичной видимости :(

      Но вот я тут подумал, а почему Вы посоветовали выставить разрешение bp_xprofile_change_field_visibility capability?
      Ведь, судя по всему, оно разрешает пользователю именно “Изменять видимость полей”, а не “Видеть их значения без ограничений”.
      Есть ли ещё в наборе разрешений BP что-то похожее? Может быть Вы можете дать список имеющихся кодов разрешений, я поэкспериментирую…?

    • #4274
      Ростислав
      Участник

      Оххохо!
      Итак, я провёл небольшое исследование (помучал сайт echo’м, я просто не знаю других способов дебага PHP)
      и уже нашёл место, где происходит всё колдовство, вот оно:

      /**
       * Get the visibility levels that should be hidden for this user pair.
       *
       * Field visibility is determined based on the relationship between the
       * logged-in user, the displayed user, and the visibility setting for the
       * current field. (See bp_xprofile_get_hidden_fields_for_user().) This
       * utility function speeds up this matching by fetching the visibility levels
       * that should be hidden for the current user pair.
       *
       * @since 1.8.2
       *
       * @see bp_xprofile_get_hidden_fields_for_user()
       *
       * @param int $displayed_user_id The id of the user the profile fields belong to.
       * @param int $current_user_id   The id of the user viewing the profile.
       * @return array An array of visibility levels hidden to the current user.
       */
      function bp_xprofile_get_hidden_field_types_for_user( $displayed_user_id = 0, $current_user_id = 0 ) {
      
      	// Current user is logged in.
      	if ( ! empty( $current_user_id ) ) {
      
      		// Nothing's private when viewing your own profile, or when the
      		// current user is an admin.
      		if ( $displayed_user_id == $current_user_id || bp_current_user_can( 'bp_moderate' ) ) {
      			$hidden_levels = array();
      
      		// If the current user and displayed user are friends, show all.
      		} elseif ( bp_is_active( 'friends' ) && friends_check_friendship( $displayed_user_id, $current_user_id ) ) {
      			$hidden_levels = array( 'adminsonly', );
      
      		// Current user is logged in but not friends, so exclude friends-only.
      		} else {
      			$hidden_levels = array( 'friends', 'adminsonly', );
      		}
      
      	// Current user is not logged in, so exclude friends-only, loggedin, and adminsonly.
      	} else {
      		$hidden_levels = array( 'friends', 'loggedin', 'adminsonly', );
      	}
      
      	/**
      	 * Filters the visibility levels that should be hidden for this user pair.
      	 *
      	 * @since 2.0.0
      	 *
      	 * @param array $hidden_fields     Array of hidden fields for the displayed/logged in user.
      	 * @param int   $displayed_user_id ID of the displayed user.
      	 * @param int   $current_user_id   ID of the current user.
      	 */
      	return apply_filters( 'bp_xprofile_get_hidden_field_types_for_user', $hidden_levels, $displayed_user_id, $current_user_id );
      }
    • #4275
      Ростислав
      Участник

      … И моих скудных знаний даже хватает на то, чтобы понять, что мне надо поставить свой фильтр на ‘bp_xprofile_get_hidden_field_types_for_user’, в функцию которого внедрить алгоритм, опустошающий массив $hidden_levels в случае, если $current_user_id – один из моих модераторов.

      Поможете мне оформить это поприличнее? Я смутно представляю себе, что мне надо создать кастомную подтему, в ней создать папку по имени плагина “buddypress” и в ней создать файл functions.php, куда положить мою функцию и регистрацию моего фильтра. Так?

    • #4276
      Ростислав
      Участник

      Ага! Разобрался. Пока сделал так (и всё работает):
      1. Создал свою подтему и активировал её;
      2. В корне подтемы разместил файл function.php;
      3. В файл поместил такой код:

      
      function drs_bp_xprofile_reset_hidden_field_types_for_user($hidden_levels = array(), $displayed_user_id = 0, $current_user_id = 0 ) {
          if($current_user_id == 9){
              return array();
          }
          return $hidden_levels;
      }
      
      add_filter('bp_xprofile_get_hidden_fields_for_user', 'drs_bp_xprofile_reset_hidden_field_types_for_user', 10, 3);
      
    • #4277
      slaFFik
      Хранитель

      Отлично! Спасибо, что поделились решением. Я думаю, я сделаю об этом отдельный пост на сайте, чтобы больше людей узнало об этом решении.

    • #4278
      Ростислав
      Участник

      Ага, затем и подытожил :)

Просмотр 11 веток ответов
  • Для ответа в этой теме необходимо авторизоваться.