Esempio n. 1
0
 /**
  * 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);
 }
Esempio n. 2
0
 /**
  * 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() . '&note=3'));
         return;
     }
     if ($question->get('state') == 1) {
         App::redirect(Route::url($question->link() . '&note=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));
 }