Jump to content

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

Featured Replies

Posted
comment_173330

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

  • Author
comment_173336

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

queued = 1

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

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

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

comment_173337
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)
 

  • Author
comment_173338

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

public function onUnhide( $approving, $member )

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

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

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

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

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

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

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

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

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

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

  • Author
comment_173348

/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

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

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

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

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

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

image.png.25c66b4afc2bff9623edb9e6a5409223.png

comment_173352

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

Edited by Desti

  • Author
comment_173353

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

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

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

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

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

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

  • Author
comment_173368
public static function create

content/comment.php

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

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

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

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

  • Author
comment_173372

В таблицу 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

 

  • Author
comment_173374
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, не должно быть так. 

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

  • Author
comment_173376

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

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',
        
    );

 

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
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.