Перейти к контенту

[2.3.x]Скрытый текст v3b (WildRAID)


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

index.php?app=downloads&module=display&section=screenshot&id=541

Название: Скрытый текст v3b (WildRAID)

Добавил: WildRAID

Добавлен: 03 Май 2008

Обновлен: 09 Ноя 2008

Категория: IP.Board 2.3.x

 

Новая версия скрытого текста, улучшенная и дополненная.

 

Изменения:

1. Расширены возможности по созданию условий для отображения скрытого текста. Можно указывать несколько условий, каждое из которых должно быть выполнено.

2. Проверка условий скрытого текста на корректность перед публикацией сообщения.

3. Добавлена поддержка "склейки" сообщений, следующих друг за другом.

4. "Правильная" кнопка в редакторе.

5. Наглядная система отображения выполненных и невыполненных условий. Пример.

6. Улучшена работа с простыми модераторами.

 

Нажмите здесь, чтобы скачать файл

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 522
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

Загружено фотографий

Как добавить отображение скрытого текста в профиль, в RSS-экспорт, в другую модификацию?

 

Вызвать функцию add_private_data, которая находится в ipsclass, передав ей в качестве аргумента массив с информацией о сообщении. Возвращается текст сообщения с добавленным приватным текстом, либо с указанием условий его отображения (в зависимости от настроек в админке).

 

В этот массив должны входить как минимум следующие элементы:

 

'post' - сам текст сообщения с указателями на скрытый текст;

'private_data' - скрытый текст в виде сериализованного массива;

 

Например:

 

$row['post'] = $this->ipsclass->add_private_data($row);

 

Как добавить своё условие?

 

За работу с условиями отвечает функция pd_check_condition, находящаяся в ipsclass. В качестве аргумента она принимает одно базовое условие, проверяет его и возвращает массив, состоящий из трех элементов:

 

'passed' - 1 или 0. Соответсвенно, условие выполнено и условие не выполнено;

'reason' - текст с описанием условия;

'error' - произошли ли какие-нибудь ошибки при проверке условия;

 

Разберём стандартное условие на примере проврки кол-ва постов пользователя (p=20):

 

	#Posts
case 'p': 			//Сочетание символов, обозначающее условие
	#Error?
	if(!$match[2])		//Здесь мы проверяем, есть ли аргумент в условии,
	{				//записанный через знак =,
		$error = 2;	//т.к. очевидно, что просто 'p' является
		break;		//бессмысленным условием
	}

	if($this->member['posts'] >= $match[2])		//Непосредственно проверка
	{
		$passed = 1;
	}
	else						//Если проверка дала отрицательный результат, то
	{						//посчитать, сколько постов еще "осталось".
		$remains = sprintf($this->lang['priv_remains'], $match[2] - $this->member['posts']);
	}

	$reason = sprintf($this->lang['priv_reason_posts'], $match[2]) . $remains; //Собираем полный текст условия
break;

 

Обратите внимание на то, что $reason всегда должно определяться вне зависимости от того, выполнено условие или нет.

 

Ошибки на данный момент бывают двух типов.

1 - общая ошибка без указания конкретной причины. Сейчас используется в тех случаях, когда пользователь написал что-нибудь вроде 'g=Пользователи+p=20+', т.е. оставил "повисшие в воздухе" разделители.

2 - ошибка пропущенного обязательного аргумента. Очевидно, что условиях вроде g, p и tp бесполезны без аргумента.

 

Добавлять свои условия можно в место, помеченное как:

 

//add custom case here

 

Как поменять отображение приватного текста в сообщении?

 

Весь текст находится в lang_wr_private_data.php.

 

Шаблоны располагаются в отдельной группе skin_private_data.

 

  • private_data - скрытый текст, который разрешено видеть пользователю;
  • private_data_hidden - скрытый текст, который видеть НЕ разрешено. Показывает условия его отображения;
  • condition_success - отдельное условие, которое выполнено пользователем;
  • condition_false - отдельное условие, которе НЕ выполнено пользователем;
  • condition_or_separator - разделитель "-ИЛИ-", использующийся между группами условий;

 

Обратите внимание на то, что для LOFI версии шаблоны находятся в lofi_skin.php.

 

При редактировании шаблонов результаты видны для всего скрытого текста, а не только того, который создан ранее. Никакой rebuild постов не требуется.

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

http://www.ibresource.ru/forums/index.php?...t=0&start=0 - А можно сделать так, чтобы он работал с этим модом? У меня очень много "Спасибо" уже сказано, не хочется их терять.
Ссылка на комментарий
Поделиться на других сайтах

С ним и работает.)

 

Попозже выложу инструкцию, как добавлять свои условия для совместимости вообще с любыми другими модификациями.

 

P.S. Только перед установокой резревную копию сделайте.) На всякий случай... пока кто-нибудь не подтвердит, что все устанавливается без проблем.

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

WildRAID, это видимо

$raw_post = $this->post->post['post'] . "\n" . '<!--IBF.ATTACHMENT_'. $pid . '-->';

?

Ссылка на комментарий
Поделиться на других сайтах

У меня вот так это место было написано:

 

		//-----------------------------------------
	// Prep for display
	//-----------------------------------------	

	//$raw_post = $this->post->show_post_preview( $this->post->post['post'] ) . "\n" . '<!--IBF.ATTACHMENT_'. $pid . '-->';
	$raw_post = $this->post->post['post'];

 

O_o

 

Можно искать по началу строки:

 

$raw_post = $this->post->post['post']

 

И добавлять следующей строкой:

 

		//PRIVATE_DATA_MOD
	$raw_post = $this->ipsclass->add_private_data($this->post->post);

Ссылка на комментарий
Поделиться на других сайтах

Нет.) Но можно сделать в индивидуальном порядке.

 

Модераторам: просьба удалить\перенести второй пост в теме, чтобы два моих поста следовали подряд. Во второй буду выкладывать всякие технические моменты. В первом - общее описание.

Изменено пользователем Arhar
типа того?
Ссылка на комментарий
Поделиться на других сайтах

Спасибо за мод, всё работает ;)

 

У меня вот так это место было написано:

 

		//-----------------------------------------
	// Prep for display
	//-----------------------------------------	

	//$raw_post = $this->post->show_post_preview( $this->post->post['post'] ) . "\n" . '<!--IBF.ATTACHMENT_'. $pid . '-->';
	$raw_post = $this->post->post['post'];

 

а у меня строчки

$raw_post = $this->post->post['post'];

нету :D

Ссылка на комментарий
Поделиться на других сайтах

Здравствуйте!

Возникает ошибка при добавлении и редактировании сообщения с приватным текстом:

 

 Время: Sun, 04 May 2008 10:02:09 +0400
Код ошибки: 1054
Сообщение сервера: Unknown column 'private_data' in 'field list'
IP-адрес клиента: 10.21.23.176
Страница: /index.php?
Запрос: INSERT INTO ibf_posts (author_id,use_sig,use_emo,ip_address,post_date,icon_id,post,author_name,topi
c_id,queued,post_htmlstate,c_music,private_data,post_key,post_parent) VALUES(13,1,1,'10.21.23.176',1209880929,0,'<!--private_data=0-->','Dammian',8404,0,0,0,'a:1:{i:0;a:2:{s:11:\\\"permissions\\\";s:8:\\\"reg, g=7\\\";s:4:\\\"text\\\";s:23:\\\"Скрываемый текст - тест\\\";}}','14053f91efbdac43d5dd5c9203170eaf',0)

Ссылка на комментарий
Поделиться на других сайтах

Запускали. Однако, в данном окне:

 

Выполняются запросы к БД...

 

Для продолжения нажмите далее

 

Я нажал на далее и поле private_data добавлено не было.

 

Сделал запрос в ручную:

 

ALTER TABLE `ibf_posts` ADD `private_data` text NULL

Ошибка пропала.

 

Появилась другая проблема. Когда я выбираю:

 

Как отображать скрытый от пользователя приватный текст. Выводить сообщение с указанием условий отображения.

 

то вместо условий, я получаю просто пустое сообщение.

 

Видимо, нужно делать какие-то изменения в скинах ручным способом. Но какие именно изменения?

Ссылка на комментарий
Поделиться на других сайтах

Нет, так тоже почему-то не работает.

 

Проверял данную комбинацию:

[priv="reg"]Некий текст[/priv]

 

и те, которые указаны в первом сообщении темы, как пример.

 

http://forum.wow-russian.ru/1.jpg

http://forum.wow-russian.ru/2.jpg

Изменено пользователем Dammian
Ссылка на комментарий
Поделиться на других сайтах

При редактировании приватный текст виден? После полного редактирования?

Да, но при обновлении страницы опять пропадает.

 

 

http://forum.wow-russian.ru/3.jpg

 

Так, вроде всё заработало. Я так понял, что свой созданный скрытый текст я могу видеть!?

 

P.s Создал тестового пользователя в группу Рут Админов. Почему-то могу видеть скрытый текст, cозданный с другова аккаунта. Так и должно быть? Текст видят те, кто обладает правами супер модератора?

Просто сделал

[priv="p=2000"]Некий текст[/priv]

, условие как бы не соблюдено, но скрытый текст отображается всё-равно. Как быть?

Изменено пользователем Dammian
Ссылка на комментарий
Поделиться на других сайтах

Именно.

 

1. Супермодераторы могут видеть всё.

2. Пользователи могут видеть свой скрытый текст.

 

Для обычных модераторов предусмотрено два режима.

 

1. (По умолчанию) Модераторы не видят скрытый текст, если не выполнены указанные при его создании условия. При редактировании сообщений других пользователей, содержащих скрытый текст, модераторы этот текст не увидят, а после редактирования он будет помещен в конец сообщения. Также они не смогут добавить новый скрытый текст в чужое сообщение.

 

2. Они могут видеть всё и редактировать всё, как супермодераторы.

 

+++++++

 

Добавлено попозже.

 

В принципе, это все настраивается в коде. В add_private_data:

 

			//-----------------------------------------
		// General conditions check
		//-----------------------------------------

		#Moderator's all-seeing eye?
		if( $this->member['g_is_supmod'] or (!$this->vars['priv_restrict_mods'] and $this->member['is_mod']) )
		{
			$passed = 1;
		}
		#Watching our own private data?
		elseif( $this->member['id'] and ($this->member['id'] == $row['author_id']) )
		{
			$passed = 1;
		}

 

Убираем условия - и вот мы уже можем спрятать текст от самого себя. И от админов.

 

В pre_edit_private_data

 

				if( $this->member['g_is_supmod'] or (!$this->vars['priv_restrict_mods'] and $this->member['is_mod']) )
			{
				$passed = 1;
			}

 

Убрать это к лешему.)

 

И еще в class_post.php одну маленькую правку.

 

Но зачем всё это?)

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

1. в инсталляторе все-таки лажа с SQL запросом, подтверждаю, пришлось делать вручную

2. к тому, что не работает у Dammian - надо зайти в настройки текста и нажать "сохранить" (в кеш настройки не записываются автоматически, следовательно тег (priv) не распознается)

кроме этих 2 недочетов все нормально

Ссылка на комментарий
Поделиться на других сайтах

Спасибо, fixed.

 

а с в2 перейти на в3 лучше откатом в2, и потом установкой в3???

 

Лучше откатом. Для надеждности.

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах


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

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.