Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Trotor

Задействовать второстепенные группы

Рекомендованные сообщения

Есть один хук, который работает на основных группах. Но хотелось бы чтоб он срабатывал и на второстепенных группах.

 

Вот файл к нему:

 

class public_core_global_toggleVisibility extends ipsCommand 
{	
public function doExecute( ipsRegistry $registry )
{
	if ( ! $this->memberData['member_id'] )
	{
		$this->registry->output->showError( 'no_permission' );
	}

	if ( ! strstr( ",{$this->settings['im_toggleVisibility_groupPermission']},", ",{$this->memberData['member_group_id']}," ) )
	{
		$this->registry->output->showError( 'no_permission' );
	}


	if( $this->settings['disable_anonymous'] )
	{
		$newStatus = ( $this->memberData['login_anonymous']{ 0 } == 0 ) ? 1 : 0;
		$this->DB->update( 'members', array( 'login_anonymous' => $newStatus . '&1' ), 'member_id=' . $this->memberData['member_id'] );

		$status = $newStatus == 0 ? $this->lang->words['status_visible'] : $this->lang->words['status_anon'];

		$this->registry->output->redirectScreen( $this->lang->words['status_changed'] . $status, my_getenv( 'HTTP_REFERER' ) );
	}
}
}

 

 

И хук-файл:

 

class toggleVisibility
{
protected $registry;

public function __construct()
{
	$this->registry 	=  ipsRegistry::instance();
	$this->memberData 	=& $this->registry->member()->fetchMemberData();
	$this->lang		  	=  $this->registry->getClass('class_localization');
	$this->settings   	=& $this->registry->fetchSettings();	
}

public function getOutput()
{
	if ( ! strstr( ",{$this->settings['im_toggleVisibility_groupPermission']},", ",{$this->memberData['member_group_id']}," ) )
	{
 		return; 
	}

	$status = $this->memberData['login_anonymous']{ 0 } == 0 ? $this->lang->words['status_visible'] : $this->lang->words['status_anon'];
	return $this->registry->getClass( 'output' )->getTemplate( 'global' )->toggleVisibility( $status );
}
}

 

Что туда нужно добавить чтобы у второстепенных групп также срабатывало?

Поделиться сообщением


Ссылка на сообщение

		if ( ! strstr( ",{$this->settings['im_toggleVisibility_groupPermission']},", ",{$this->memberData['member_group_id']}," ) )

 

заменить на

	$groups   = array_filter( explode(',', $this->memberData['mgroup_others']) );
	$groups[] = $this->memberData['member_group_id'];
	$groupPermission = explode(',', $this->settings['im_toggleVisibility_groupPermission']);

	if( ! count( array_intersect($groups, $groupPermission) ) )

  • Upvote 2

Поделиться сообщением


Ссылка на сообщение

@siv1987,

При нажатии выдаёт "Bad Request"

Поделиться сообщением


Ссылка на сообщение

Поправлено. Была пропущена одна скобка.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

@siv1987,

Ура получилось - Большое Спасибо!

Поделиться сообщением


Ссылка на сообщение

И тогда ещё один маленький вопрос.

Есть:

<if test="$this->memberData['member_group_id'] == 1">{показ блока для группы 1}</else></if>

Как сделать чтоб и на доп. группу тоже действовало?

Поделиться сообщением


Ссылка на сообщение

Вообще есть стандартный вызов для этого:

	/**
 * Check to see if a member is in a group or not
 *
 * @param	mixed		Either INT (member_id) OR Array of member data [MUST at least include member_group_id and mgroup_others]
 * @param	mixed		Either INT (group ID) or array of group IDs
 * @param	boolean		TRUE (default, check secondary groups also), FALSE (check primary only)
 * @return	boolean		TRUE (is in group) - FALSE (not in group)
 */
static public function isInGroup( $member, $group, $checkSecondary=true )

 

Т.е.:

<if test="IPSMember::isInGroup($this->memberData, 1)">{показ блока для группы 1, включая второстепенные}</else></if>

 

Или так:

<if test="IPSMember::isInGroup($this->memberData, array(1,2))">{показ блока для групп 1 и 2, включая второстепенные}</else></if>

  • Upvote 3

Поделиться сообщением


Ссылка на сообщение

@Ritsuka,

Спасибо. Выручили. :)

Поделиться сообщением


Ссылка на сообщение

+1 к стандартному методу. Не знал про него.

Поделиться сообщением


Ссылка на сообщение

А есть что нибудь стандартное типа:

<if test="isGuest....">   гостям одно </else> остальным другое </if>

????

 

 

я пока использовал метод выше и проверял на принадлежность к группе 2

<if test="IPSMember::isInGroup($this->memberData, 2)">

 

Но интуиция подсказывает, что есть более грамотные варианты.

Поделиться сообщением


Ссылка на сообщение

Но интуиция подсказывает, что есть более грамотные варианты.

Этот самый грамотный вариант.

Поделиться сообщением


Ссылка на сообщение
А есть что нибудь стандартное типа:

 

гостям одно остальным другое

 

Да. Де-факто стандартом у самих IPS является конструкция:

 

<if test="$this->memberData['member_id']">пользователь<else />гость</if>

 

Посмотрите хотя бы на блок с инфо о пользователе в globalTemplate. Там именно такая проверка.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...