Jump to content

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


Zuldek

Recommended Posts

Что за скрипт отвечает за раздел "Очередь одобрения" в панеле модератора, именно который выводит сообщения ожидающих одобрения модератором?

Link to comment
Share on other sites

Все скрипты прошерстил. Не могу найти запрос в котором было бы указано выборка 

queued = 1

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

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

Где, в какой функции это возможно поправить?

Link to comment
Share on other sites

3 минуты назад, Zuldek сказал:

Все скрипты прошерстил. Не могу найти запрос в котором было бы указано выборка

Потомучта в концепции ActiveRecord это поле называется hidden

А в описании функции create есть строчка

* @param    int|NULL                $hiddenStatus        NULL to set automatically or override: 0 = unhidden; 1 = hidden, pending moderator approval; -1 = hidden (as if hidden by a moderator)
 

Link to comment
Share on other sites

А когда одобряем, запрос отправляется в функцию

public function onUnhide( $approving, $member )

Что та не вижу в ней, чтобы выполнялся запрос или что то подобное. Чтобы изменилось значение поля queued, где оно меняется на значение 0 когда модератор одобряет сообщение?

Link to comment
Share on other sites

57 минут назад, Zuldek сказал:

где оно меняется на значение 0 когда модератор одобряет сообщение?

Нигде. Это поле существует только в базе, в движке оно называется 'hidden'. 

Поле меняется так (примерно): 

$column = $item::$databaseColumnMap['hidden'];
$item->$column = 0;
$item->save();

Много вы там поменять сможете? 

53 минуты назад, Zuldek сказал:

А когда одобряем, запрос отправляется в функцию

Функции onXxxxx вызываются после каких-либо событий, в них делают что-то дополнительное (очистка, статистика). А сохранение происходит в базовых  классах.

Link to comment
Share on other sites

/applications/core/extensions/core/ModCp/Unapproved.php

Примерная сотая строчка, прописываю

if ( isset( $class::$databaseColumnMap['points'] ) )
{                    
     $where[] = array( $class::$databaseTable . '.' . $class::$databasePrefix . $class::$databaseColumnMap['points'] . '=1 ');
}elseif

В таблице forums_posts  есть поле points в котором прописана 1. То есть данные сообщения тоже выводим в очереди даже если queued равен 0

Трудность в следующем, если это сообщение было добавлено с созданием топика (new_topic = 1), после которого queued равен 0, а поле points равно 1. Данное сообщение отображается в очереди на проверку, но кнопки они не активны.

Как в данном случаи сделать так, чтобы они были активны?

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

$column = $item::$databaseColumnMap['hidden'];
$item->$column = 0;
$item->save();

Где возможно было бы дописать код, для того чтобы значение поля points поменять на 0

dsz.png

Edited by Zuldek
Link to comment
Share on other sites

1 час назад, Zuldek сказал:
$class::$databaseColumnMap['points']

А вы уверены, что в массиве есть такой ключ? 

1 час назад, Zuldek сказал:

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

10 секунд ковырялся в коде, нашел все файлы со строкой $item::$databaseColumnMap['hidden'];

image.png.25c66b4afc2bff9623edb9e6a5409223.png

Link to comment
Share on other sites

Visual Studio Code - бесплатный IDE/редактор кода - на сегодняшний день лучший вариант редактора для некоммерческой-любительской разработки.  

Edited by Desti
Link to comment
Share on other sites

Не выходит найти. Я уже все коды поудалял, очистил функцию, затем одобрил пост, посмотрел в таблицу, ок, содержимое ячейки queued изменилось

И так с  самого утра, пытаюсь найти код, который меняет статус сообщение при клике "Одобрить". Где это самый код находится? 

Каждый файл на скрине перебрал...

Link to comment
Share on other sites

18 минут назад, Zuldek сказал:

И так с  самого утра, пытаюсь найти код, который меняет статус сообщение при клике "Одобрить".

Который всё это время живет в system/Content/Content.php, основная функция modAction(), которая вызывается при любых модераторских действиях, она и вызывает функцию unhide() в этом же файле. 

Link to comment
Share on other sites

public static function create

content/comment.php

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

Link to comment
Share on other sites

39 минут назад, Zuldek сказал:

каким образом возможно определить

Попробовать прочитать описание над функцией.

Link to comment
Share on other sites

В таблицу topic и post добавил поле points в файлах topic и пост добавил данное поле в массив со своими именами

В очереди выбарку сделал следующим образом

if($class::$databaseColumnMap['points_topic']) //Выборка топиков
                    
    $where[] = array( $class::$databaseTable.'.'.$class::$databasePrefix.$class::$databaseColumnMap['approved']. '=0 or '.$class::$databaseTable.'.'.$class::$databasePrefix.$class::$databaseColumnMap['points_topic'].' = 1' );
                
elseif($class::$databaseColumnMap['points_post']) //Выборка постов
                    
    $where[] = array( $class::$databaseTable.'.'.$class::$databasePrefix.$class::$databaseColumnMap['hidden']. '=1 or '.$class::$databaseTable.'.'.$class::$databasePrefix.$class::$databaseColumnMap['points_post'].' = 1' );


Суть в следующем, все работает как прежде. Просто если поле points содержит значение, данные записи тоже выбираем...

К примеру если запись топика approved = 1, по умолчанию данный топик не модерируем, но если поле points скажем равно 1

В данном случаи выводим запись на модерацию. Проблема в том, что кнопка одобрить заблокирована

Поскольку

$item->canUnhide()

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

В файле source/topic/topic.php

    public function canUnhide( $member=NULL )
    {

        if ( $this->isArchived() )
        {
            return FALSE;
        }
        
        return parent::canUnhide( $member );
    }

Данная функция должна отдавать значение чтобы кнопка не была деактивной. Не могу понять куда именно лезть, чтобы добавить исключение когда у топика поле points = 1

 

Link to comment
Share on other sites

2 часа назад, Desti сказал:

Попробовать прочитать описание над функцией.

Пробовал при помощи $first

В таблице topic и post, есть поле points

В таблице topic, поле points долно содержать единицу тогда, когда всего 1 пост. То есть, что получается.

При создании топика в первой и во второй таблице, ячейка содержит единицу, а необходимо чтобы в таблице с топикам она содержала 1, а с постами 0. 

 При постинге в теме все работает, points=1, а вот при создании темы и в таблице c топиками points=1 и в таблице с постами.

То есть что то одно должно быть

    public static function create( $item, $comment, $first=FALSE, $guestName=NULL, $incrementPostCount=NULL, $member=NULL, \IPS\DateTime $time=NULL, $ipAddress=NULL, $hiddenStatus=NULL, $anonymous=NULL )
    {
        if ( $member === NULL )
            $member = \IPS\Member::loggedIn();


        /* Create the object */
        $obj = new static;
        foreach ( array( 'item', 'date', 'author', 'author_name', 'content', 'ip_address', 'first', 'approved', 'hidden', 'points_post', 'points_topic' ) as $k )
        {

            if ( isset( static::$databaseColumnMap[ $k ] ) )
            {
                
                $val = NULL;
                switch ( $k )
                {

                    case 'points_post':
                    case 'points_topic':
                        $val = 1;
                    break;

 

Как только не пытался наладить, при создании темы. Запись в таблице с постами, поле points=1, не должно быть так. 

Как так сделать?

Link to comment
Share on other sites

По ходу совсем не то, блин я запутался

public static function create

Вызывается тогда когда добавляем запись в таблицу forum_post

Если же тупо прописать

$item->points =  1;

Вне switch, перед или после цикла foreach. 

Тогда тупо и в таблице постов и в таблице топиков, в обеих таблицах ячейка points будет содержать 1.

 

Мужики, хелпс...

 

$val = $first ? 0 : 1;

Работает только для постов

case 'points_topic':

Почему то не вызывается

Хотя в топиках, прописано данное поле

 

    public static $databaseColumnMap = array(
        'author'                => 'starter_id',
        'author_name'            => 'starter_name',
        'container'                => 'forum_id',
        'date'                    => 'start_date',
        'title'                    => 'title',
        'num_comments'            => 'posts',
        'unapproved_comments'    => 'topic_queuedposts',
        'hidden_comments'        => 'topic_hiddenposts',
        'first_comment_id'        => 'topic_firstpost',
        'last_comment'            => array( 'last_post', 'last_real_post' ),
        'last_comment_by'        => 'last_poster_id',
        'last_comment_name'        => 'last_poster_name',
        'views'                    => 'views',
        'approved'                => 'approved',
        'points_topic'            => 'points',
        'pinned'                => 'pinned',
        'poll'                    => 'poll_state',
        'status'                => 'state',
        'moved_to'                => 'moved_to',
        'moved_on'                => 'moved_on',
        'featured'                => 'featured',
        'state'                    => 'state',
        'updated'                => 'last_post',
        'meta_data'                => 'topic_meta_data',
        'solved_comment_id'        => 'topic_answered_pid',
        'is_anon'                => 'is_anon',
        'last_comment_anon'        => 'last_poster_anon',
        
    );

 

Link to comment
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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...