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