Posted 10 октября, 20213 yr Что за скрипт отвечает за раздел "Очередь одобрения" в панеле модератора, именно который выводит сообщения ожидающих одобрения модератором?
10 октября, 20213 yr Author Все скрипты прошерстил. Не могу найти запрос в котором было бы указано выборка queued = 1 То есть задача в том, чтобы данный модуль так же выводил контент на проверку но добавить в условие выборки еще одно поле значение которого будет равно скажем 0. То есть к существующим сообщениям добавить еще сообщение по значению другого поля. Где, в какой функции это возможно поправить?
10 октября, 20213 yr 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)
10 октября, 20213 yr Author А когда одобряем, запрос отправляется в функцию public function onUnhide( $approving, $member ) Что та не вижу в ней, чтобы выполнялся запрос или что то подобное. Чтобы изменилось значение поля queued, где оно меняется на значение 0 когда модератор одобряет сообщение?
10 октября, 20213 yr 57 минут назад, Zuldek сказал: где оно меняется на значение 0 когда модератор одобряет сообщение? Нигде. Это поле существует только в базе, в движке оно называется 'hidden'. Поле меняется так (примерно): $column = $item::$databaseColumnMap['hidden']; $item->$column = 0; $item->save(); Много вы там поменять сможете? 53 минуты назад, Zuldek сказал: А когда одобряем, запрос отправляется в функцию Функции onXxxxx вызываются после каких-либо событий, в них делают что-то дополнительное (очистка, статистика). А сохранение происходит в базовых классах.
11 октября, 20213 yr Author /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 Edited 11 октября, 20213 yr by Zuldek
11 октября, 20213 yr 1 час назад, Zuldek сказал: $class::$databaseColumnMap['points'] А вы уверены, что в массиве есть такой ключ? 1 час назад, Zuldek сказал: Пол ночи покувырялся в коде, так ничего похожего не нашел 10 секунд ковырялся в коде, нашел все файлы со строкой $item::$databaseColumnMap['hidden'];
11 октября, 20213 yr 3 часа назад, Desti сказал: нашел все файлы со строкой Что за прога на скриншоте?
11 октября, 20213 yr Visual Studio Code - бесплатный IDE/редактор кода - на сегодняшний день лучший вариант редактора для некоммерческой-любительской разработки. Edited 11 октября, 20213 yr by Desti
11 октября, 20213 yr Author Не выходит найти. Я уже все коды поудалял, очистил функцию, затем одобрил пост, посмотрел в таблицу, ок, содержимое ячейки queued изменилось И так с самого утра, пытаюсь найти код, который меняет статус сообщение при клике "Одобрить". Где это самый код находится? Каждый файл на скрине перебрал...
11 октября, 20213 yr 18 минут назад, Zuldek сказал: И так с самого утра, пытаюсь найти код, который меняет статус сообщение при клике "Одобрить". Который всё это время живет в system/Content/Content.php, основная функция modAction(), которая вызывается при любых модераторских действиях, она и вызывает функцию unhide() в этом же файле.
11 октября, 20213 yr Author public static function create content/comment.php В данной функции каким образом возможно определить, когда это первый пост в теме. То есть когда создается новая тема или уже добавляется сообщение к существующей.
11 октября, 20213 yr 39 минут назад, Zuldek сказал: каким образом возможно определить Попробовать прочитать описание над функцией.
11 октября, 20213 yr Author В таблицу 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
11 октября, 20213 yr Author 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, не должно быть так. Как так сделать?
11 октября, 20213 yr Так что ли case 'points_post': $val = $first ? 0 : 1; break; case 'points_topic': $val = 1; break; Edited 11 октября, 20213 yr by ZIKURIK
12 октября, 20213 yr Author По ходу совсем не то, блин я запутался 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.