Перейти к содержанию

Отправка уведомлений


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

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

Установлен плагин Hide with conditions, допиленный на разные условия. 

Суть в том, что он скрывает сообщение и показывает его только при определенных условиях, например если наступила определенная дата или если у пользователя больше N сообщений и т.д.

Проблема начинается когда пользователю подписанному на тебя приходит уведомления на почту с содержимым скрытого сообщения. И соответственно сообщение видно. Хотя должно быть скрыто.

Я нашел файл из которого отправляется уведомление о создании нового сообщения /forum/system/Notification/Notification.php

И допилил его следующим образом (Все скрытые сообщения содержат класс hideContent) и если этот текст найден в сообщении вместо него показывается текст, что сообщение скрыто.

//Скрыть содержимое хайда
if(stripos($this->emailParams[0]->post, 'hideContent') !== false) 
   $this->emailParams[0]->post = '<p style="font-style: italic; color: gray; ">'.($language == 2 ? 'Посетите сайт, чтобы прочитать скрытый текст.' : 'Visit the site to read the hidden text.').'</p>';
				

Теперь когда я в теме оставлю сообщение под хайдом все ок, на почту приходит уведомление о том, что сообщение скрыто.

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

Можете подсказать в каком месте идет отправка уведомлений при создании новой темы?

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

Что это за допиленный плагин?

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

На разные условия, во вложении скрин :) 

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

<div class="hideContent"></div>

При отправки уведомлений на почту я проверяю наличие текста hideContent и заменяю сообщение :) 

Как уже сказал, проблема в том, что при создании нового топика я не пойму откуда берется сообщение. 

Я отдебажил весь файл /forum/system/Notification/Notification.php и вижу, что уведомления формируются в функции

public function send( $sentTo = array() )

и отправляются через функцию

protected function sendEmails( $emails, $emailRecipients )

Данные об отправляемом сообщении находятся в переменной $emails

И когда я отвечаю в топике, то вижу в этой переменной текст сообщения.

Но когда я создаю топик, текста сообщения в этой переменной нет, хотя есть название топика.

В общем я не могу найти место откуда берется сообщение при создании топика. 

 

 

 

Respected 

221101204533.png

411108204906.png

311108204832.png

Собственно вот уведомления которые приходят на почту: 

  • При создании нового топика.
  • При написание сообщения в уже созданном топике.

newTopic.png

Reply_topic.png

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

Так обратись к разработчику плагина.

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

Respected вопрос немного другой. Мне нужно узнать где генерируется отправка уведомлений на Email при создании топика :) 

Наверное зря я в целом завел речь о плагине. 

Задача в том, чтобы найти файл и функцию из которой отправляется уведомление при создании нового контента)

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

/system/Notification/Notification.php

/**
	 * Send emails
	 *
	 * @param	array 	$emails				Emails to send
	 * @param	array 	$emailRecipients	Email recipients
	 * @return	void
	 */
	protected function sendEmails( $emails, $emailRecipients )
	{
		foreach ( $emails as $languageId => $email )
		{
			if ( !empty( $emailRecipients[ $languageId ] ) )
			{
				$email->mergeAndSend( $emailRecipients[ $languageId ], NULL, NULL, array(), \IPS\Lang::load( $languageId ) );
			}
		}
	}

 

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

Я создал тему в которой написал сообщение "wwwwwwwwwww". 

Потом я ответил в этой же теме, так же написал сообщение "wwwwwwwwwww".

 

/system/Notification/Notification.php

	/**
	 * Send emails
	 *
	 * @param	array 	$emails				Emails to send
	 * @param	array 	$emailRecipients	Email recipients
	 * @return	void
	 */
	protected function sendEmails( $emails, $emailRecipients )
	{
    	//Лог
		$text = print_r($emails,true);
        $text = date("d.m.Y H:i:s").' '.$_SERVER['REMOTE_ADDR'].' '.$text.PHP_EOL.PHP_EOL;
		if (!file_exists($_SERVER['DOCUMENT_ROOT']."/forum/error/")) { mkdir($_SERVER['DOCUMENT_ROOT']."/forum/error/", 0777, true); } 
        file_put_contents($_SERVER['DOCUMENT_ROOT']."/forum/error/logs.txt", $text, FILE_APPEND);
		foreach ( $emails as $languageId => $email )
		{
			if ( !empty( $emailRecipients[ $languageId ] ) )
			{
				$email->mergeAndSend( $emailRecipients[ $languageId ], NULL, NULL, array(), \IPS\Lang::load( $languageId ) );
			}
		}
	}

 

Содержимое файлов в случае ответа в топике и в случае создания нового топика отличаются. 

В случае ответа - файл Reply, видно отправляемое сообщение "wwwwwwwwwww"

[_data:protected] => Array
                                (
                                    [topic_id] => 2923
                                    [post_date] => 1636395890
                                    [author_id] => 1
                                    [author_name] => Nalik
                                    [post] => <p>
	wwwwwwwwwww
</p>
                                    [ip_address] => **.**.**.**
                                    [new_topic] => 0
                                    [queued] => 0
                                    [post_bwoptions] => 0
                                    [pid] => 18704
                                    [append_edit] => 0
                                    [edit_time] => 
                                    [edit_name] => 
                                    [post_key] => 0
                                    [post_htmlstate] => 0
                                    [post_edit_reason] => 
                                    [pdelete_time] => 0
                                    [post_field_int] => 0
                                    [post_field_t1] => 
                                    [post_field_t2] => 
                                    [nbpinned] => 0
                                )

В случае создания топика - файл NewTopic нет информации об отправляемом сообщении. 

NewTopic.txt Reply.txt

Возможно при создании топика текст сообщения подставляется из какого-то другого файла?

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

Пока нашел окончательный вид сообщения в этом файле /forum/system/Email/Email.php, функция 

	/**
	 * Merge and Send
	 *
	 * @param	array			$recipients			Array where the keys are the email addresses to send to and the values are an array of variables to replace
	 * @param	mixed			$fromEmail			The email address to send from. If NULL, default setting is used. NOTE: This should always be a site-controlled domin. Some services like Sparkpost require the domain to be validated.
	 * @param	mixed			$fromName			The name the email should appear from. If NULL, default setting is used
	 * @param	array			$additionalHeaders	Additional headers to send. Merge tags can be used like in content.
	 * @param	\IPS\Lang		$language			The language the email content should be in
	 * @return	int				Number of successful sends
	 */
	public function mergeAndSend( $recipients, $fromEmail = NULL, $fromName = NULL, $additionalHeaders = array(), \IPS\Lang $language )
	{
		$return = 0;

		/* Get the current locale, and then set the language's locale so datetime formatting in templates is correct for this language */
		$currentLocale = setlocale( LC_ALL, '0' );
		$language->setLocale();
		
		foreach ( $recipients as $address => $vars )
		{
			$member = \IPS\Member::load( $address, 'email' );
			$subject = $this->compileSubject( $member, $language );
			$htmlContent = $this->compileContent( 'html', $member, $language );
			$plaintextContent = $this->compileContent( 'plaintext', $member, $language );
			$_additionalHeaders = $additionalHeaders;
                
			foreach ( $vars as $k => $v )
			{
				$language->parseEmail( $v );

				$htmlContent = str_replace( "*|{$k}|*", $v, $htmlContent );
				$plaintextContent = str_replace( "*|{$k}|*", $v, $plaintextContent );
				$subject = str_replace( "*|{$k}|*", $v, $subject );
					
				foreach ( $_additionalHeaders as $headerKey => $headerValue )
				{
					$_additionalHeaders[ $headerKey ] = str_replace( "*|{$k}|*", $v, $headerValue );
				}
			}
						
			if ( static::buildFromContent( $subject, $htmlContent, $plaintextContent, $this->type, FALSE )->send( $address, array(), array(), $fromEmail, $fromName, $_additionalHeaders ) )
			{
				$return++;
			}
		}

		/* Now restore the locale we started with */
		\IPS\Lang::restoreLocale( $currentLocale );
		
		return $return;
	}

Но пока еще не разобрался как формируется $htmlContent, в каком месте берется само сообщение. 

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

В общем приходится в функции mergeAndSend заменять содержимое переменной $htmlContent.

Решение очень корявое, но я не знаток IPS. Нашел - написал костыль :) 

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...