/** * Generate and return various links to the entry * Link will vary depending upon action desired, such as edit, delete, etc. * * @param string $type The type of link to return * @return string */ public function link($type = '') { if (!isset($this->base)) { if (!$this->get('question_id')) { $answer = Response::oneOrNew($this->get('item_id')); $this->set('question_id', $answer->get('question_id')); } $this->base = 'index.php?option=com_answers&task=question&id=' . $this->get('question_id'); } $link = $this->base; // If it doesn't exist or isn't published switch (strtolower($type)) { case 'edit': $link .= '&action=edit&comment=' . $this->get('id'); break; case 'delete': $link .= '&action=delete&comment=' . $this->get('id'); break; case 'reply': $link .= '&reply=' . $this->get('id') . '#c' . $this->get('id'); break; case 'report': $link = 'index.php?option=com_support&task=reportabuse&category=itemcomment&id=' . $this->get('id') . '&parent=' . $this->get('question_id'); break; case 'permalink': default: $link .= '#c' . $this->get('id'); break; } return $link; }
/** * Save an answer (reply to question) * * @return void */ public function saveaTask() { // Check for request forgeries Request::checkToken(); // Login required if (User::isGuest()) { $this->setError(Lang::txt('COM_ANSWERS_PLEASE_LOGIN')); return $this->loginTask(); } // Incoming $response = Request::getVar('response', array(), 'post', 'none', 2); // clean input array_walk($response, function (&$field, $key) { $field = \Hubzero\Utility\Sanitize::clean($field); }); // Initiate class and bind posted items to database fields $row = Response::oneOrNew($response['id'])->set($response); // Store new content if (!$row->save()) { App::abort(500, $row->getError()); } // Load the question $question = Question::oneOrFail($row->get('question_id')); // Build the "from" info $from = array('email' => Config::get('mailfrom'), 'name' => Config::get('sitename') . ' ' . Lang::txt('COM_ANSWERS_ANSWERS'), 'multipart' => md5(date('U'))); // Build the message subject $subject = Config::get('sitename') . ' ' . Lang::txt('COM_ANSWERS_ANSWERS') . ', ' . Lang::txt('COM_ANSWERS_QUESTION') . ' #' . $question->get('id') . ' ' . Lang::txt('COM_ANSWERS_RESPONSE'); $message = array(); // Plain text message $eview = new \Hubzero\Mail\View(array('name' => 'emails', 'layout' => 'response_plaintext')); $eview->option = $this->_option; $eview->sitename = Config::get('sitename'); $eview->question = $question; $eview->row = $row; $eview->id = $response['question_id']; $eview->boundary = $from['multipart']; $message['plaintext'] = $eview->loadTemplate(false); $message['plaintext'] = str_replace("\n", "\r\n", $message['plaintext']); // HTML message $eview->setLayout('response_html'); $message['multipart'] = $eview->loadTemplate(); $message['multipart'] = str_replace("\n", "\r\n", $message['multipart']); // --- $authorid = $question->get('created_by'); $receivers = $this->recipients(); // Send the message if (!in_array($authorid, $receivers) && $question->get('email')) { // Flag to mask identity of anonymous question asker // MCRN Ticket #134 if ($question->get('anonymous') == '1') { $messageType = 'answers_reply_submitted_anonymous'; } else { $messageType = 'answers_reply_submitted'; } if (!Event::trigger('xmessage.onSendMessage', array($messageType, $subject, $message, $from, array($authorid), $this->_option))) { $this->setError(Lang::txt('COM_ANSWERS_MESSAGE_FAILED')); } } // Send the answers admins message if (!empty($receivers)) { if (!Event::trigger('xmessage.onSendMessage', array('new_answer_admin', $subject, $message, $from, $receivers, $this->_option))) { $this->setError(Lang::txt('COM_ANSWERS_MESSAGE_FAILED')); } } // Log activity $recipients = array($row->get('created_by')); if ($row->get('created_by') != $question->get('created_by')) { $recipients[] = $question->get('created_by'); } $recipients = $this->recipients($recipients); Event::trigger('system.logActivity', ['activity' => ['action' => $response['id'] ? 'updated' : 'created', 'scope' => 'question.answer', 'scope_id' => $row->get('id'), 'description' => Lang::txt('COM_ANSWERS_ACTIVITY_ANSWER_SUBMITTED', '<a href="' . Route::url($question->link() . '#a' . $row->get('id')) . '">' . $question->get('subject') . '</a>'), 'details' => array('title' => $question->get('title'), 'question_id' => $question->get('id'), 'url' => $question->link())], 'recipients' => $recipients]); // Redirect to the question App::redirect(Route::url($question->link()), Lang::txt('COM_ANSWERS_NOTICE_POSTED_THANKS'), 'success'); }
/** * Save a response * * @return void */ public function saveTask() { // Check for request forgeries Request::checkToken(); if (!User::authorise('core.edit', $this->_option) && !User::authorise('core.create', $this->_option)) { App::abort(403, Lang::txt('JERROR_ALERTNOAUTHOR')); } // Incoming $fields = Request::getVar('answer', array(), 'post', 'none', 2); // Initiate extended database class $row = Response::oneOrNew(intval($fields['id']))->set($fields); // Code cleaner $row->set('state', isset($fields['state']) ? 1 : 0); $row->set('anonymous', isset($fields['anonymous']) ? 1 : 0); // Store content if (!$row->save()) { Notify::error($row->getError()); return $this->editTask($row); } Notify::success(Lang::txt('COM_ANSWERS_ANSWER_SAVED')); if ($this->getTask() == 'apply') { return $this->editTask($row); } // Redirect $this->cancelTask(); }
/** * Save a response * * @return void */ public function saveTask() { // Check for request forgeries Request::checkToken(); // Incoming $fields = Request::getVar('answer', array(), 'post', 'none', 2); // Initiate extended database class $row = Response::oneOrNew(intval($fields['id']))->set($fields); // Code cleaner $row->set('state', isset($fields['state']) ? 1 : 0); $row->set('anonymous', isset($fields['anonymous']) ? 1 : 0); // Store content if (!$row->save()) { Notify::error($row->getError()); return $this->editTask($row); } Notify::success(Lang::txt('COM_ANSWERS_ANSWER_SAVED')); if ($this->_task == 'apply') { return $this->editTask($row); } // Redirect App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller, false)); }
/** * Save an answer (reply to question) * * @return void */ public function saveaTask() { // Check for request forgeries Request::checkToken(); // Login required if (User::isGuest()) { $this->setError(Lang::txt('COM_ANSWERS_PLEASE_LOGIN')); return $this->loginTask(); } // Incoming $response = Request::getVar('response', array(), 'post', 'none', 2); // clean input array_walk($response, function (&$field, $key) { $field = \Hubzero\Utility\Sanitize::clean($field); }); // Initiate class and bind posted items to database fields $row = Response::oneOrNew($response['id'])->set($response); // Store new content if (!$row->save()) { throw new Exception($row->getError(), 500); } // Load the question $question = Question::oneOrFail($row->get('question_id')); // --- // Build the "from" info $from = array('email' => Config::get('mailfrom'), 'name' => Config::get('sitename') . ' ' . Lang::txt('COM_ANSWERS_ANSWERS'), 'multipart' => md5(date('U'))); // Build the message subject $subject = Config::get('sitename') . ' ' . Lang::txt('COM_ANSWERS_ANSWERS') . ', ' . Lang::txt('COM_ANSWERS_QUESTION') . ' #' . $question->get('id') . ' ' . Lang::txt('COM_ANSWERS_RESPONSE'); $message = array(); // Plain text message $eview = new \Hubzero\Mail\View(array('name' => 'emails', 'layout' => 'response_plaintext')); $eview->option = $this->_option; $eview->sitename = Config::get('sitename'); $eview->question = $question; $eview->row = $row; $eview->id = $response['question_id']; $eview->boundary = $from['multipart']; $message['plaintext'] = $eview->loadTemplate(false); $message['plaintext'] = str_replace("\n", "\r\n", $message['plaintext']); // HTML message $eview->setLayout('response_html'); $message['multipart'] = $eview->loadTemplate(); $message['multipart'] = str_replace("\n", "\r\n", $message['multipart']); // --- $authorid = $question->get('created_by'); $apu = $this->config->get('notify_users', ''); $apu = explode(',', $apu); $apu = array_map('trim', $apu); $receivers = array(); if (!empty($apu)) { foreach ($apu as $u) { $user = User::getInstance($u); if ($user) { $receivers[] = $user->get('id'); } } $receivers = array_unique($receivers); } // Send the message if (!in_array($authorid, $receivers) && $question->get('email')) { // Flag to mask identity of anonymous question asker // MCRN Ticket #134 if ($question->get('anonymous') == '1') { $messageType = 'answers_reply_submitted_anonymous'; } else { $messageType = 'answers_reply_submitted'; } if (!Event::trigger('xmessage.onSendMessage', array($messageType, $subject, $message, $from, array($authorid), $this->_option))) { $this->setError(Lang::txt('COM_ANSWERS_MESSAGE_FAILED')); } } // Send the answers admins message if (!empty($receivers)) { if (!Event::trigger('xmessage.onSendMessage', array('new_answer_admin', $subject, $message, $from, $receivers, $this->_option))) { $this->setError(Lang::txt('COM_ANSWERS_MESSAGE_FAILED')); } } // Redirect to the question App::redirect(Route::url($question->link()), Lang::txt('COM_ANSWERS_NOTICE_POSTED_THANKS'), 'success'); }