config = $config; $this->items_manager = $items_manager; $this->language = $language; $this->log = $log; $this->log_phpbb = $log_phpbb; $this->operator_cat = $operator_cat; $this->operator_item = $operator_item; $this->pagination = $pagination; $this->request = $request; $this->template = $template; $this->user = $user; } /** * Handle and display the "Logs" ACP mode. * * @return void * @access public */ public function logs() { $this->language->add_lang(['ass_acp_common', 'ass_common'], 'phpbbstudio/ass'); $show_array = [ 'all' => ['title' => 'ASS_ALL', 'sql' => ''], 'use' => ['title' => 'ASS_USAGES', 'sql' => 'l.item_purchase = 0'], 'buy' => ['title' => 'ASS_PURCHASES', 'sql' => 'l.item_purchase = 1 AND l.recipient_id = 0'], 'given' => ['title' => 'ASS_GIFTS_GIVEN', 'sql' => 'l.item_purchase = 1 AND l.recipient_id <> 0'], ]; $sort_array = [ 'time' => ['title' => 'TIME', 'sql' => 'l.log_time'], 'price' => ['title' => 'ASS_ITEM_PRICE', 'sql' => 'l.points_sum'], 'item' => ['title' => 'ASS_ITEM_TITLE', 'sql' => 'i.item_title'], 'category' => ['title' => 'ASS_CATEGORY_TITLE', 'sql' => 'c.category_title'], 'recipient' => ['title' => 'ASS_RECIPIENT_NAME', 'sql' => 'recipient_name'], ]; $dir_array = [ 'desc' => ['title' => 'DESCENDING', 'sql' => 'DESC'], 'asc' => ['title' => 'ASCENDING', 'sql' => 'ASC'], ]; $page = $this->request->variable('page', 1); $show = $this->request->variable('display', 'all', true); $sort = $this->request->variable('sort', 'time', true); $dir = $this->request->variable('direction', 'desc', true); $show = in_array($show, array_keys($show_array)) ? $show : 'all'; $sort = in_array($sort, array_keys($sort_array)) ? $sort : 'time'; $dir = in_array($dir, array_keys($dir_array)) ? $dir : 'desc'; $delete_mark = $this->request->variable('del_marked', false, false, \phpbb\request\request_interface::POST); $delete_all = $this->request->variable('del_all', false, false, \phpbb\request\request_interface::POST); $marked = $this->request->variable('mark', [0]); $log_action = $this->u_action . "&display={$show}&sort={$sort}&direction={$dir}"; if (($delete_mark || $delete_all)) { if (confirm_box(true)) { $this->log->delete($delete_all, $marked); $l_delete = $delete_all ? 'ALL' : (count($marked) > 1 ? 'ENTRIES' : 'ENTRY'); $this->log_phpbb->add('admin', $this->user->data['user_id'], $this->user->ip, "LOG_ACP_ASS_LOG_DELETED_{$l_delete}"); trigger_error($this->language->lang("ACP_ASS_LOG_DELETED_{$l_delete}") . adm_back_link($log_action . "&page{$page}")); } else { confirm_box(false, $this->language->lang('CONFIRM_OPERATION'), build_hidden_fields([ 'del_marked' => $delete_mark, 'del_all' => $delete_all, 'mark' => $marked, ])); redirect($log_action . "&page{$page}"); } } $sql_where = $show_array[$show]['sql']; $sql_order = $sort_array[$sort]['sql']; $sql_dir = $dir_array[$dir]['sql']; $limit = (int) $this->config['ass_logs_per_page']; $start = ($page - 1) * $limit; $total = $this->log->get_user_logs_count($sql_where); $rowset = $this->log->get_user_logs($sql_where, $sql_order, $sql_dir, $limit, $start); $categories = $this->operator_cat->get_categories_by_id(array_column($rowset, 'category_id')); $items = $this->operator_item->get_items_by_id(array_column($rowset, 'item_id')); foreach ($rowset as $row) { $category_id = (int) $row['category_id']; $item_id = (int) $row['item_id']; /** @var category $category */ $category = !empty($categories[$category_id]) ? $categories[$category_id] : null; /** @var item $item */ $item = !empty($items[$item_id]) ? $items[$item_id] : null; /** @var item_type $type */ $type = $item ? $this->items_manager->get_type($item->get_type()) : null; $this->template->assign_block_vars('ass_logs', [ 'CATEGORY_TITLE' => $category ? $category->get_title() : $this->language->lang('ASS_UNAVAILABLE_CATEGORY'), 'ITEM_TITLE' => $item ? $item->get_title() : $this->language->lang('ASS_UNAVAILABLE_ITEM'), 'LOG_ACTION' => $type ? $this->language->lang($type->get_language('log')) : $this->language->lang('ASS_UNAVAILABLE_' . (!$item ? 'ITEM' : 'TYPE')), 'LOG_ID' => $row['log_id'], 'LOG_IP' => $row['log_ip'], 'LOG_TIME' => $this->user->format_date($row['log_time']), 'POINTS_NEW' => $row['points_new'], 'POINTS_OLD' => $row['points_old'], 'POINTS_SUM' => -$row['points_sum'], 'RECIPIENT' => $row['recipient_id'] ? get_username_string('full', $row['recipient_id'], $row['recipient_name'], $row['recipient_colour']) : '', 'USER' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']), 'S_PURCHASE' => $row['item_purchase'], 'S_GIFT_RECEIVE' => $row['recipient_id'] != 0, ]); } $this->pagination->generate_template_pagination($log_action, 'pagination', 'page', $total, $limit, $start); $this->template->assign_vars([ 'SORT_DISPLAY' => $show, 'SORT_DISPLAY_ARRAY' => $show_array, 'SORT_SORT' => $sort, 'SORT_SORT_ARRAY' => $sort_array, 'SORT_DIR' => $dir, 'SORT_DIR_ARRAY' => $dir_array, 'TOTAL_LOGS' => $this->language->lang('TOTAL_LOGS', $total), 'U_ACTION' => $this->u_action, ]); } /** * Set custom form action. * * @param string $u_action Custom form action * @return self $this This controller for chaining calls * @access public */ public function set_page_url($u_action) { $this->u_action = $u_action; return $this; } }