Posted 8 ноября, 20212 yr comment_174367 Здравствуйте. Установлен плагин 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>'; Теперь когда я в теме оставлю сообщение под хайдом все ок, на почту приходит уведомление о том, что сообщение скрыто. Но когда я создаю новую тему с сообщением под хайдом, то пользователю приходит сообщение снова открытое. Можете подсказать в каком месте идет отправка уведомлений при создании новой темы? Link to comment https://ipbmafia.ru/topic/23750-otpravka-uvedomlenij/ Share on other sites Больше вариантов
8 ноября, 20212 yr comment_174369 Что это за допиленный плагин? Link to comment https://ipbmafia.ru/topic/23750-otpravka-uvedomlenij/?&do=findComment&comment=174369 Share on other sites Больше вариантов
8 ноября, 20212 yr Author comment_174370 На разные условия, во вложении скрин В сообщении можно скрывать часть текста в блок и ставить условия видимости. Скрытый блок оборачивается в <div class="hideContent"></div> При отправки уведомлений на почту я проверяю наличие текста hideContent и заменяю сообщение Как уже сказал, проблема в том, что при создании нового топика я не пойму откуда берется сообщение. Я отдебажил весь файл /forum/system/Notification/Notification.php и вижу, что уведомления формируются в функции public function send( $sentTo = array() ) и отправляются через функцию protected function sendEmails( $emails, $emailRecipients ) Данные об отправляемом сообщении находятся в переменной $emails И когда я отвечаю в топике, то вижу в этой переменной текст сообщения. Но когда я создаю топик, текста сообщения в этой переменной нет, хотя есть название топика. В общем я не могу найти место откуда берется сообщение при создании топика. Respected Собственно вот уведомления которые приходят на почту: При создании нового топика. При написание сообщения в уже созданном топике. Link to comment https://ipbmafia.ru/topic/23750-otpravka-uvedomlenij/?&do=findComment&comment=174370 Share on other sites Больше вариантов
8 ноября, 20212 yr comment_174371 Так обратись к разработчику плагина. Link to comment https://ipbmafia.ru/topic/23750-otpravka-uvedomlenij/?&do=findComment&comment=174371 Share on other sites Больше вариантов
8 ноября, 20212 yr Author comment_174372 Respected вопрос немного другой. Мне нужно узнать где генерируется отправка уведомлений на Email при создании топика Наверное зря я в целом завел речь о плагине. Задача в том, чтобы найти файл и функцию из которой отправляется уведомление при создании нового контента) Link to comment https://ipbmafia.ru/topic/23750-otpravka-uvedomlenij/?&do=findComment&comment=174372 Share on other sites Больше вариантов
8 ноября, 20212 yr comment_174373 /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 ) ); } } } Link to comment https://ipbmafia.ru/topic/23750-otpravka-uvedomlenij/?&do=findComment&comment=174373 Share on other sites Больше вариантов
8 ноября, 20212 yr Author comment_174374 Я создал тему в которой написал сообщение "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 Возможно при создании топика текст сообщения подставляется из какого-то другого файла? Link to comment https://ipbmafia.ru/topic/23750-otpravka-uvedomlenij/?&do=findComment&comment=174374 Share on other sites Больше вариантов
8 ноября, 20212 yr Author comment_174375 Пока нашел окончательный вид сообщения в этом файле /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, в каком месте берется само сообщение. Link to comment https://ipbmafia.ru/topic/23750-otpravka-uvedomlenij/?&do=findComment&comment=174375 Share on other sites Больше вариантов
8 ноября, 20212 yr Author comment_174376 В общем приходится в функции mergeAndSend заменять содержимое переменной $htmlContent. Решение очень корявое, но я не знаток IPS. Нашел - написал костыль Link to comment https://ipbmafia.ru/topic/23750-otpravka-uvedomlenij/?&do=findComment&comment=174376 Share on other sites Больше вариантов
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.