public function viewUserFeedbackAction() { // Trigger an error if user does not have view feedback permissions if (!$this->manager->hasViewFeedbackPermission()) { trigger_error($this->user->lang('E_CANNOT_VIEW_FEEDBACK')); } $user_id = $this->request->variable('u', 0); $tab = $this->request->variable('tab', 'all'); $start = $this->request->variable('start', 0); $is_edit_mod = $this->isEditMod(); $action = $this->request->variable('action', 'list'); if ($action == 'list') { $valid_tabs = array('all' => RatingsManager::TAB_TYPE_ALL, 'buy' => RatingsManager::TOPIC_TYPE_BUY, 'sell' => RatingsManager::TOPIC_TYPE_SELL, 'trade' => RatingsManager::TOPIC_TYPE_TRADE, 'left' => RatingsManager::TAB_TYPE_LEFT); if (!isset($valid_tabs[$tab])) { $tab = 'all'; } if (!$user_id) { trigger_error("No user provided - cannot display Trader Feedback"); } $user_page_row = $this->fetch_user_row($this->db, $user_id); if (!$user_page_row) { trigger_error("Could not find specified user!"); } $trader_stats = $this->manager->getUserFeedbackStats($user_id, true); if (!$trader_stats) { trigger_error("Feedback Statistics could not be retrieved"); } if ($tab == 'buy') { $filter = $valid_tabs['sell']; } else { if ($tab == 'sell') { $filter = $valid_tabs['buy']; } else { $filter = $valid_tabs[$tab]; } } // stores the number of total feedbacks that are filtered on a given tab - for pagination purposes // this number is updated by reference by the call to the manager $num_feedbacks = 0; $feedbacks = $this->manager->get_users_feedback($start, self::NUM_PER_PAGE, $user_id, $filter, $is_edit_mod, $num_feedbacks); if ($this->user->data['user_timezone']) { $timezone = new \DateTimeZone($this->user->data['user_timezone']); } else { $timezone = new \DateTimeZone($this->config['board_timezone']); } foreach ($feedbacks as $key => $feedback) { // fetch the appropriate user's information based on the selected tab // if the tab is 'Left for Others' we need to use the to_user_id (the recipient) if ($tab == "left") { $user_row = $this->fetch_user_row($this->db, $feedback['to_user_id']); $view_feedback_url = $this->helper->route('rfd_trader_view', array('u' => $feedback['to_user_id'])); } else { $user_row = $this->fetch_user_row($this->db, $feedback['from_user_id']); $view_feedback_url = $this->helper->route('rfd_trader_view', array('u' => $feedback['from_user_id'])); } $feedback['U_VIEW_FEEDBACK'] = $view_feedback_url; $feedback['table_username'] = $user_row['username']; $feedback['table_user_trader_rating'] = $user_row['user_trader_positive'] - $user_row['user_trader_negative']; $feedback['show_left_for_others'] = $tab == "left"; $comments = $this->manager->getLatestFeedbackComment($feedback['feedback_id']); if ($comments) { $feedback['short_comment'] = $comments['short_comment']; if ($is_edit_mod || $feedback['from_user_id'] == $this->user->data['user_id'] || $feedback['to_user_id'] == $this->user->data['user_id']) { $feedback['long_comment'] = $comments['long_comment']; } } if ($is_edit_mod || $this->canEditFeedback($feedback['date_created'], $feedback['from_user_id'])) { $edit_feedback_url = $this->helper->route('rfd_trader_edit_feedback', array('feedback_id' => $feedback['feedback_id'], 'u' => $user_id)); $feedback['U_EDIT_FEEDBACK'] = $edit_feedback_url; } if ($this->canReplyToFeedback($feedback['from_user_id'], $feedback['to_user_id'], $feedback['topic_id'])) { $feedback['U_REPLY_FEEDBACK'] = $this->helper->route('rfd_trader_feedback', array('reply_id' => $feedback['feedback_id'], 'u' => $user_id)); } $has_open_report = $this->manager->has_open_report($feedback['feedback_id']); // Show report button if the feedback is for the current user viewing the page if ($feedback['to_user_id'] == $this->user->data['user_id'] && !$has_open_report) { $feedback['U_REPORT_FEEDBACK'] = append_sid(generate_board_url() . '/trader/view-feedback/?action=report&id=' . $feedback['feedback_id']); } $feedback['topic_url'] = append_sid(generate_board_url() . "/viewtopic.php?t=" . $feedback['topic_id']); $feedback['date_created'] = new \DateTime('@' . $feedback['date_created']); $feedback['date_created']->setTimezone($timezone); $feedbacks[$key] = $feedback; } $trader_username_full = get_username_string('full', $user_page_row['user_id'], $user_page_row['username'], $user_page_row['user_colour']); $this->template->assign_vars(array('TRADER_USERNAME_FULL' => $trader_username_full, 'TRADER_USERNAME' => $user_page_row['username'], 'U_TRADER_PROFILE' => append_sid("{$this->phpbb_root_path}memberlist.{$this->phpEx}", 'mode=viewprofile&u=' . $user_page_row['user_id']), 'trader_stats' => $trader_stats, 'recent_feedback' => $this->manager->getRecentUserFeedbackCounts($user_id), 'U_ACTION_TAB_ALL' => $this->helper->route("rfd_trader_view", array('u' => $user_id, 'tab' => 'all')), 'U_ACTION_TAB_BUY' => $this->helper->route("rfd_trader_view", array('u' => $user_id, 'tab' => 'buy')), 'U_ACTION_TAB_SELL' => $this->helper->route("rfd_trader_view", array('u' => $user_id, 'tab' => 'sell')), 'U_ACTION_TAB_TRADE' => $this->helper->route("rfd_trader_view", array('u' => $user_id, 'tab' => 'trade')), 'U_ACTION_TAB_LEFT' => $this->helper->route("rfd_trader_view", array('u' => $user_id, 'tab' => 'left')), 'CURRENT_TAB' => $tab, 'feedbacks' => $feedbacks, 'TOTAL_FEEDBACKS' => $num_feedbacks)); $base_url = $this->helper->route('rfd_trader_view', array('u' => $user_id)); $this->pagination->generate_template_pagination($base_url, 'pagination', 'start', $num_feedbacks, self::NUM_PER_PAGE, $start); } else { if ($action == 'report') { $this->report_feedback_action($this->request, $this->user); } else { trigger_error("Unknown Action!"); } } return $this->helper->render('view_user_feedback.html', $this->user->lang['TRADER_FEEDBACK_FOR'] . ' ' . $user_page_row['username']); }