Палата №6: Модификация IPB3 - Палата №6

Перейти к содержимому

  • 5 Страниц +
  • « Первая
  • 3
  • 4
  • 5

Модификация IPB3 php и т.д.

#81 Пользователь офлайн   Not 

  • ветер перемен
  • Группа: Постоянные участники
  • Сообщений: 510
  • Регистрация: 29 Ноябрь 19

Отправлено 26 Ноябрь 2021 - 07:10

Просмотр сообщенияSilencio Muerto (23 Ноябрь 2021 - 16:16) писал:

Не знаю, что ты себе представляешь под словами "мы" и с кем "ты сотрудничала", но с 2008 года, если быть точным, я работаю одна. Вообще, совсем, полностью. Переходов было много, не один и не два точно. Считаю, что если никто ничего не заметил - это неплохая работа.

Сайт хороший, как и его стиль, содержание. Если честно, для меня удобный формат и я рада, что есть такой информативный форум.

#82 Пользователь офлайн   offcast 

  • ветер перемен
  • Группа: Модераторы
  • Сообщений: 1 074
  • Регистрация: 27 Январь 10

Отправлено 26 Ноябрь 2021 - 13:18

Просмотр сообщенияSilencio Muerto (23 Ноябрь 2021 - 13:10) писал:

Спасибо Макс, я тебе искреннее благодарна. За твою способность конструктивно мыслить даже в самых патовых ситуациях, за способность слышать и чувствовать других, за надёжность и внутренний стержень, несмотря на собственные невзгоды и проблемы. И, конечно, за твою неоценимую помощь, которую ты оказываешь здесь на форуме. Я правда этим очень дорожу.

И тебе спасибо за теплые слова. Я ничего особенного не делаю, но рад, если это кому-то приносит пользу.

#83 Пользователь офлайн   xfate 

  • Перейти к блогу
  • Группа: Постоянные участники
  • Сообщений: 4 765
  • Регистрация: 06 Февраль 10

Отправлено 28 Ноябрь 2021 - 00:08

Сделал, скоро выложу.

#84 Пользователь офлайн   xfate 

  • Перейти к блогу
  • Группа: Постоянные участники
  • Сообщений: 4 765
  • Регистрация: 06 Февраль 10

Отправлено 28 Ноябрь 2021 - 00:52

Просмотр сообщенияoffcast (26 Ноябрь 2021 - 13:18) писал:

...Я ничего особенного не делаю, но рад, если это кому-то приносит пользу.

Однозначно, гору спама вычистил.

#85 Пользователь офлайн   xfate 

  • Перейти к блогу
  • Группа: Постоянные участники
  • Сообщений: 4 765
  • Регистрация: 06 Февраль 10

Отправлено 28 Ноябрь 2021 - 23:32

Вставка в БД

В таблицу ignored_users добавить Новый столбец
ignore_topics_remove_trails
тип INT
длина значения 1
по умолчанию 0

Изображение

-
-


Вставки в *.php файлах

- admin/sources/base/core.php
- admin/applications/forums/modules_public/forums/topics.php
- admin/applications/members/extensions/usercpForms.php

места вставок начинаются с - "мое..."

сигнатура поиска
файл > класс > метод / функция > участок кода где вставка


-
-


admin/sources/base/core.php
IPSMember
static public function fetchIgnoredUsers( $memberData )

foreach( $_data as $id )
{
       
if ( $id )
       
{
                $ignore_users
[ $id ] = array( 'ignore_ignore_id' => $id,
                                                                         
'ignore_messages'  => 0,
                                                                         
'ignore_topics'    => 1,
                                     
// мое... - начало
                                     
//
                                     
'ignore_topics_remove_trails' => 0
                                     
//
                                     
// мое... - конец



-
-


admin/sources/base/core.php
IPSMember
static public function fetchIgnoredUsers( $memberData )

while( $r = ipsRegistry::DB()->fetch() )
{
        $ignore_users
[ $r['ignore_ignore_id'] ] = array( 'ignore_ignore_id' => $r['ignore_ignore_id'],
                                                                                                         
'ignore_messages'  => $r['ignore_messages'],
                                                                                                         
'ignore_topics'    => $r['ignore_topics'],
                                                     
// мое... - начало
                                                     
//
                                                     
'ignore_topics_remove_trails' => $r['ignore_topics_remove_trails'] );
                                                     
//
                                                     
// мое... - конец



-
-


admin/sources/base/core.php
IPSMember
static public function rebuildIgnoredUsersCache( $member )

while( $r = ipsRegistry::DB()->fetch() )
{
        $ignore_users
[ $r['ignore_ignore_id'] ] = array( 'ignore_ignore_id' => $r['ignore_ignore_id'],
                                                                                                         
'ignore_messages'  => $r['ignore_messages'],
                                                                                                         
'ignore_topics'    => $r['ignore_topics'],
                                                     
// мое... - начало
                                                     
//
                                                     
'ignore_topics_remove_trails'    => $r['ignore_topics_remove_trails'] );
                                                     
//
                                                     
// мое... - конец



-
-


admin/applications/forums/modules_public/forums/topics.php
public_forums_forums_topics
public function _getTopicDataLinear()

/* Ignored Users */
$ignored_users
= array();
// мое... - начало
//
$ignored_users_trails
= array();
//
// мое... - конец

foreach( $this->member->ignored_users as $_i )
{
       
if( $_i['ignore_topics'] )
       
{
        $ignored_users
[] = $_i['ignore_ignore_id'];
       
// мое... - начало
       
//
        $ignored_users_trails
[ $_i['ignore_ignore_id'] ] = $_i['ignore_topics_remove_trails'];
       
//
       
// мое... - конец



-
-


admin/applications/forums/modules_public/forums/topics.php
public_forums_forums_topics
public function _getTopicDataLinear()

//-----------------------------------------
// Are we giving this bloke a good ignoring?
//-----------------------------------------
if( isset( $ignored_users ) && is_array( $ignored_users ) && count( $ignored_users ) )
{
       
if( in_array( $poster['member_id'], $ignored_users ) )
       
{
               
if ( ! strstr( $this->settings['cannot_ignore_groups'], ','.$poster['member_group_id'].',' ) )
               
{

                        $post_data
[ $row['pid'] ]['post']['_ignored'] = 1;
           
// мое... - начало
           
//
            $post_data
[ $row['pid'] ]['post']['_ignored_remove_trails'] =
                $ignored_users_trails
[ $poster['member_id'] ];
           
//
           
// мое... - конец



-
-


admin/applications/members/extensions/usercpForms.php
usercpForms_members
public function customEvent_toggleIgnoredUser()

if ( $ignoredUser['ignore_id'] )
{
       
switch( $field )
       
{
               
default:
               
case 'topics':
                        $update
= array( 'ignore_topics' => ( $ignoredUser['ignore_topics'] == 1 ) ? 0 : 1 );
               
break;
       
// мое... - начало
       
//
       
case 'topics_remove_trails':
            $update
= array( 'ignore_topics_remove_trails' => ( $ignoredUser['ignore_topics_remove_trails'] == 1 ) ? 0 : 1 );
       
break;
       
//
       
// мое... - конец



-
-


admin/applications/members/extensions/usercpForms.php
usercpForms_members
public function saveIgnoredUsers()

//-----------------------------------------
// Add it
//-----------------------------------------

$this
->DB->insert( 'ignored_users', array(
                                                                                       
'ignore_owner_id'  => $this->memberData['member_id'],
                                                                                       
'ignore_ignore_id' => $member['member_id'],
                                                                                       
'ignore_messages'  => isset( $this->request['ignore_messages'] ) && $this->request['ignore_messages'] ? 1 : 0,
                                                                                       
'ignore_topics'    => isset( $this->request['ignore_topics'] ) && $this->request['ignore_topics'] ? 1 : 0,
                                           
// мое... - начало
                                           
//
                                           
'ignore_topics_remove_trails'    => isset( $this->request['ignore_topics_remove_trails'] ) && $this->request['ignore_topics_remove_trails'] ? 1 : 0
                                           
//
                                           
// мое... - конец



-
-


Админка вставки в шаблоны

Внешний вид - Управление стилями

места вставок начинаются с - "мое..."

сигнатура поиска
однозначная строка поиска на место > блок кода


-
-


IP.Board - Шаблоны - Темы - topicViewTemplate

initIgnoredPost

<if test="initIgnoredPost:|:$post['post']['_repignored'] == 1 || $post['post']['_ignored']">
       
<script type='text/javascript'>
                ipb.topic.setPostHidden( {$post['post']['pid']} );
                $('unhide_post_{$post['post']['pid']}').show();
// мое... - начало
//
if( {$post['post']['_ignored_remove_trails']} )
{
  var id_select = 'post_id_' + {$post['post']['pid']}
  var elem = document.getElementById(id_select)
  elem.style.display = 'none'
}
//
// мое... - конец



-
-


IP.Board - Шаблоны - Панель пользователя - membersIgnoredUsersForm

<fieldset class='row1'>

<fieldset class='row1'>
       
<h3 class='maintitle'>{$this->lang->words['mi5_title']}</h3>
       
<table class='ipb_table' summary="{$this->lang->words['ucp_ignored_users']}">
               
<tr class='header'>
                       
<th scope='col' width="30%">{$this->lang->words['mi5_name']}</th>
<!-- мое... правка - начало
значение width с 30 на 20
-->

                       
<th scope='col' width="20%">{$this->lang->words['mi5_group']}</th>
<!--
мое... правка - конец -->

                       
<th scope='col' width="10%">{$this->lang->words['mi5_posts']}</th>
                       
<th scope='col' width="10%">{$this->lang->words['ucp_ignore_posts']}</th>
<!-- мое... - начало
-->

                       
<th scope='col' width="10%">Удалять следы сообщений</th>
<!--
мое... - конец -->



-
-


IP.Board - Шаблоны - Панель пользователя - membersIgnoredUsersForm

ignoreMemberTopics

                                <td>
                                       
<if test="ignoreMemberTopics:|:$member['ignoreData']['ignore_topics'] == 1">
                                               
<a href="{parse url="app=core&amp;module=usercp&amp;tab=members&amp;area=toggleIgnoredUser&amp;do=saveIt&amp;id={$member['member_id']}&amp;field=topics" base="public"}" title="{$this->lang->words['click_toggle']}">{$this->lang->words['yes']}</a>
                                       
<else />
                                               
<a href="{parse url="app=core&amp;module=usercp&amp;tab=members&amp;area=toggleIgnoredUser&amp;do=saveIt&amp;id={$member['member_id']}&amp;field=topics" base="public"}" title="{$this->lang->words['click_toggle']}">{$this->lang->words['no']}</a>
                                       
</if>
                               
</td>
<!-- мое... - начало
-->

<td>
<if test="ignoreMemberTopicsRemoveTrails:|:$member['ignoreData']['ignore_topics_remove_trails'] == 1">
       
<a href="{parse url="app=core&amp;module=usercp&amp;tab=members&amp;area=toggleIgnoredUser&amp;do=saveIt&amp;id={$member['member_id']}&amp;field=topics_remove_trails" base="public"}" title="{$this->lang->words['click_toggle']}">{$this->lang->words['yes']}</a>
<else />
       
<a href="{parse url="app=core&amp;module=usercp&amp;tab=members&amp;area=toggleIgnoredUser&amp;do=saveIt&amp;id={$member['member_id']}&amp;field=topics_remove_trails" base="public"}" title="{$this->lang->words['click_toggle']}">{$this->lang->words['no']}</a>
</if>
</td>
<!--
мое... - конец -->



-
-


IP.Board - Шаблоны - Панель пользователя - membersIgnoredUsersForm

<input type='checkbox' class='input_check' name='ignore_topics'

                                        <input type='checkbox' class='input_check' name='ignore_topics' value='1' checked='checked' />
                                        {$this->lang->words['ucp_ignore_posts']}
                               
</li>
<!-- мое... - начало -->
<li class='field checkbox'>
 
<input type='checkbox' class='input_check' name='ignore_topics_remove_trails' value='1' />
  Удалять следы сообщений
</li>
<!-- мое... - конец -->



-
-


IP.Board Mobile - Шаблоны - Темы - topicViewTemplate

userIgnoredLangTwo

                                                        <if test="userIgnoredLangTwo:|:$this->settings['reputation_enabled'] AND $post['post']['_repignored'] == 1"><div><a href="{parse url="showtopic={$post['post']['topic_id']}&amp;st={$this->request['st']}&amp;rep_filter_set=*&amp;rep_filter=update" template="showtopic" seotitle="{$topic['title_seo']}" base="public"}">{$this->lang->words['post_ignore_reset_rep']}</a></div></if>
                                               
</div>
<!-- мое... - начало
-->

<script type='text/javascript'>
if( {$post['post']['_ignored_remove_trails']} )
{
 
var id_select = 'entry' + {$post['post']['pid']}
 
var elem = document.getElementById(id_select)
  elem
.style.display = 'none'
}
</script>
<!--
мое... - конец -->



-
-


IP.Board Mobile - Шаблоны - Панель пользователя - membersIgnoredUsersForm

<fieldset class='row1'>

<fieldset class='row1'>
       
<h3 class='maintitle'>{$this->lang->words['mi5_title']}</h3>
       
<table class='ipb_table' summary="{$this->lang->words['ucp_ignored_users']}">
               
<tr class='header'>
                       
<th scope='col' width="30%">{$this->lang->words['mi5_name']}</th>
<!-- мое... правка - начало
значение width с 30 на 20
-->

                       
<th scope='col' width="20%">{$this->lang->words['mi5_group']}</th>
<!--
мое... правка - конец -->

                       
<th scope='col' width="10%">{$this->lang->words['mi5_posts']}</th>
                       
<th scope='col' width="10%">{$this->lang->words['ucp_ignore_posts']}</th>
<!-- мое... - начало
-->

                       
<th scope='col' width="10%">Удалять следы сообщений</th>
<!--
мое... - конец -->



-
-


IP.Board Mobile - Шаблоны - Панель пользователя - membersIgnoredUsersForm

ignoreMemberTopics

                                        <if test="ignoreMemberTopics:|:$member['ignoreData']['ignore_topics'] == 1">
                                               
<a href="{parse url="app=core&amp;module=usercp&amp;tab=members&amp;area=toggleIgnoredUser&amp;do=saveIt&amp;id={$member['member_id']}&amp;field=topics" base="public"}" title="{$this->lang->words['click_toggle']}">{$this->lang->words['yes']}</a>
                                       
<else />
                                               
<a href="{parse url="app=core&amp;module=usercp&amp;tab=members&amp;area=toggleIgnoredUser&amp;do=saveIt&amp;id={$member['member_id']}&amp;field=topics" base="public"}" title="{$this->lang->words['click_toggle']}">{$this->lang->words['no']}</a>
                                       
</if>
                               
</td>
<!-- мое... - начало
-->

<td>
<if test="ignoreMemberTopicsRemoveTrails:|:$member['ignoreData']['ignore_topics_remove_trails'] == 1">
       
<a href="{parse url="app=core&amp;module=usercp&amp;tab=members&amp;area=toggleIgnoredUser&amp;do=saveIt&amp;id={$member['member_id']}&amp;field=topics_remove_trails" base="public"}" title="{$this->lang->words['click_toggle']}">{$this->lang->words['yes']}</a>
<else />
       
<a href="{parse url="app=core&amp;module=usercp&amp;tab=members&amp;area=toggleIgnoredUser&amp;do=saveIt&amp;id={$member['member_id']}&amp;field=topics_remove_trails" base="public"}" title="{$this->lang->words['click_toggle']}">{$this->lang->words['no']}</a>
</if>
</td>
<!--
мое... - конец -->



-
-


IP.Board Mobile - Шаблоны - Панель пользователя - membersIgnoredUsersForm

<input type='checkbox' class='input_check' name='ignore_topics'

                                        <input type='checkbox' class='input_check' name='ignore_topics' value='1' checked='checked' />
                                        {$this->lang->words['ucp_ignore_posts']}
                               
</li>
<!-- мое... - начало -->
<li class='field checkbox'>
 
<input type='checkbox' class='input_check' name='ignore_topics_remove_trails' value='1' />
  Удалять следы сообщений
</li>
<!-- мое... - конец -->

Сообщение отредактировал xfate: 28 Ноябрь 2021 - 23:40


#86 Пользователь офлайн   xfate 

  • Перейти к блогу
  • Группа: Постоянные участники
  • Сообщений: 4 765
  • Регистрация: 06 Февраль 10

Отправлено 29 Ноябрь 2021 - 01:10

Ещё заметил, надо поменять в Расширенной форме ответа, походу пара вставок в Шаблонах....

Сообщение отредактировал xfate: 29 Ноябрь 2021 - 01:13


#87 Пользователь офлайн   xfate 

  • Перейти к блогу
  • Группа: Постоянные участники
  • Сообщений: 4 765
  • Регистрация: 06 Февраль 10

Отправлено 29 Ноябрь 2021 - 01:49

З.ы. Ранее был вопрос себе - можно ли докопаться до решения, оказывается да и опыта хватило.

Был конечно момент что хотелось бросить, но чисто из спортивного интереса продолжил.

Я понимаю что потратил время, но с пользой.

Завтра скорее всего выложу добавки в шаблоне расширенной формы ответа.

З.ы.ы. по поводу Адаптации кода - напрашивается вопрос как будут отрабатывать Старого формата игнор данные - после ДеСериализации с таблицы members, ячейки ignored_users, будет пытаться прочитать "ignore_topics_remove_trails" и Не найдя присвоит ноль в целевой массив.

#88 Пользователь офлайн   xfate 

  • Перейти к блогу
  • Группа: Постоянные участники
  • Сообщений: 4 765
  • Регистрация: 06 Февраль 10

Отправлено 29 Ноябрь 2021 - 02:10

Кстати по поводу момента с какой таблицы Читает данные на игнор стало понятно когда Вручную менял значения в другой таблице... и они Не схватились при отображении темы.

То есть ignored_users основная таблица, после новых добавок или смены Сериализирует данные и обновляет уже members - ignored_users.

При чтении ДеСериализирует с members - ignored_users.

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

#89 Пользователь офлайн   xfate 

  • Перейти к блогу
  • Группа: Постоянные участники
  • Сообщений: 4 765
  • Регистрация: 06 Февраль 10

Отправлено 29 Ноябрь 2021 - 02:57

-

Да и еще - мод "as is" - если Не хочется заморачиваться, можно и Не внедрять.

Но поотслеживая разные состояния исполнения ошибок никаких Не наблюдалось - отрабатывало как положено.

Жестких зависимостей на алгоритмы также нет.

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

Так что до завтрашних добавок и все на этом.
Я результатом доволен - была не тривиальная задача как для не вебщика, далеко не с первого раза стало понятно устройство этого функционала движка.

#90 Пользователь офлайн   xfate 

  • Перейти к блогу
  • Группа: Постоянные участники
  • Сообщений: 4 765
  • Регистрация: 06 Февраль 10

Отправлено 29 Ноябрь 2021 - 22:13

Вставка в *.php файл

admin/applications/forums/sources/classes/post/classPostForms.php

classPostForms
protected function _generateTopicSummary( $topicID )

//-----------------------------------------
// Are we giving this bloke a good ignoring?
//-----------------------------------------
if ( $this->getAuthor('ignored_users') )
{
       
if ( in_array( $row['author_id'], $this->getAuthor('ignored_users') ) and $this->request['qpid'] != $row['pid'] )
       
{
               
if ( ! strstr( $this->settings['cannot_ignore_groups'], ','.$row['member_group_id'].',' ) )
               
{
                        $posts
[ $row['pid'] ]['_ignored'] = 1;
                       
// мое... - начало
                       
//
                        $posts
[ $row['pid'] ]['_ignored_remove_trails'] =
                            $this
->member->ignored_users[ $row['author_id'] ]['ignore_topics_remove_trails'];
                       
//
                       
// мое... - конец


-
-

Админка вставка в шаблон

IP.Board - Шаблоны - Страница отправки тем/сообщений - topicSummary

ignoringpost

                                <if test="ignoringpost:|:isset( $data['_ignored'] ) && $data['_ignored'] == 1">
                                       
<div class='post'>{$this->lang->words['ignore_first_line']} {$data['members_display_name']}.</div>
<!-- мое... - начало
-->

<script type='text/javascript'>
if( {$data['_ignored_remove_trails']} )
{
 
var elem = document.currentScript
  elem
.parentNode.parentNode.style.display = 'none'
}
</script>
<!--
мое... - конец -->


#91 Пользователь офлайн   xfate 

  • Перейти к блогу
  • Группа: Постоянные участники
  • Сообщений: 4 765
  • Регистрация: 06 Февраль 10

Отправлено 29 Ноябрь 2021 - 22:37

Изображение


Изображение


Изображение


Изображение

#92 Пользователь офлайн   xfate 

  • Перейти к блогу
  • Группа: Постоянные участники
  • Сообщений: 4 765
  • Регистрация: 06 Февраль 10

Отправлено 30 Ноябрь 2021 - 04:06

Данный мод "as is".
Лог завершен.
Теперь точно все.
Пошел своим заниматься.
Удачи.

Поделиться темой:


  • 5 Страниц +
  • « Первая
  • 3
  • 4
  • 5


Быстрый ответ

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

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей