/** * Display a list of questions * * @apiMethod GET * @apiUri /answers/questions/list * @apiParameter { * "name": "limit", * "description": "Number of result to return.", * "required": false, * "default": 25 * } * @apiParameter { * "name": "start", * "description": "Number of where to start returning results.", * "required": false, * "default": 0 * } * @apiParameter { * "name": "search", * "description": "A word or phrase to search for.", * "required": false, * "default": "" * } * @apiParameter { * "name": "sort", * "description": "Field to sort results by.", * "required": false, * "default": "created", * "allowedValues": "created, title, alias, id, publish_up, publish_down, state" * } * @apiParameter { * "name": "sort_Dir", * "description": "Direction to sort results by.", * "required": false, * "default": "desc", * "allowedValues": "asc, desc" * } * @return void */ public function listTask() { $database = \App::get('db'); $model = new \Components\Answers\Tables\Question($database); $filters = array('limit' => Request::getInt('limit', 25), 'start' => Request::getInt('limitstart', 0), 'search' => Request::getVar('search', ''), 'filterby' => Request::getword('filterby', ''), 'sortby' => Request::getWord('sort', 'date'), 'sort_Dir' => strtoupper(Request::getWord('sortDir', 'DESC'))); $response = new stdClass(); $response->questions = array(); $response->total = $model->getCount($filters); if ($response->total) { $base = rtrim(Request::base(), '/'); foreach ($model->getResults($filters) as $i => $q) { $question = new \Components\Answers\Models\Question($q); $obj = new stdClass(); $obj->id = $question->get('id'); $obj->subject = $question->subject(); $obj->quesion = $question->content(); $obj->state = $question->get('state'); $obj->url = str_replace('/api', '', $base . '/' . ltrim(Route::url($question->link()), '/')); $obj->responses = $question->comments('count'); $response->questions[] = $obj; } } $response->success = true; $this->send($response); }
/** * Delete a question * * @return void */ public function deleteqTask() { // Login required if (User::isGuest()) { $this->setError(Lang::txt('COM_ANSWERS_PLEASE_LOGIN')); $this->loginTask(); return; } if (!User::authorise('core.delete', $this->_option) && !User::authorise('core.manage', $this->_option)) { throw new Exception(Lang::txt('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } // Incoming $id = Request::getInt('qid', 0); $ip = !User::isGuest() ? Request::ip() : ''; $reward = 0; if ($this->config->get('banking')) { $BT = new Transaction($this->database); $reward = $BT->getAmount('answers', 'hold', $id); } $email = 0; $question = new Question($id); // Check if user is authorized to delete if ($question->get('created_by') != User::get('id')) { App::redirect(Route::url($question->link() . '¬e=3')); return; } if ($question->get('state') == 1) { App::redirect(Route::url($question->link() . '¬e=2')); return; } $question->set('state', 2); // Deleted by user $question->set('reward', 0); // Store new content if (!$question->store(false)) { throw new Exception($question->getError(), 500); } if ($reward && $this->config->get('banking')) { // Get all the answers for this question if ($question->comments('list', array('filterby' => 'all'))) { $users = array(); foreach ($responses as $r) { $users[] = $r->creator('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') . ' #' . $id . ' ' . Lang::txt('COM_ANSWERS_WAS_REMOVED'); $message = array(); // Plain text message $eview = new \Hubzero\Mail\View(array('name' => 'emails', 'layout' => 'removed_plaintext')); $eview->option = $this->_option; $eview->sitename = Config::get('sitename'); $eview->question = $question; $eview->id = $question->get('id'); $eview->boundary = $from['multipart']; $message['plaintext'] = $eview->loadTemplate(false); $message['plaintext'] = str_replace("\n", "\r\n", $message['plaintext']); // HTML message $eview->setLayout('removed_html'); $message['multipart'] = $eview->loadTemplate(); $message['multipart'] = str_replace("\n", "\r\n", $message['multipart']); // Send the message if (!Event::trigger('xmessage.onSendMessage', array('answers_question_deleted', $subject, $message, $from, $users, $this->_option))) { $this->setError(Lang::txt('COM_ANSWERS_MESSAGE_FAILED')); } } // Remove hold $BT->deleteRecords('answers', 'hold', $id); // Make credit adjustment $BTL_Q = new Teller($this->database, User::get('id')); $adjusted = $BTL_Q->credit_summary() - $reward; $BTL_Q->credit_adjustment($adjusted); } // Redirect to the question App::redirect(Route::url('index.php?option=' . $this->_option)); }