public function processRequest()
 {
     $request = $this->getRequest();
     if (!$request->isFormPost()) {
         return new Aphront400Response();
     }
     $user = $request->getUser();
     $question_id = $request->getInt('question_id');
     $question = PonderQuestionQuery::loadSingle($user, $question_id);
     if (!$question) {
         return new Aphront404Response();
     }
     $target = $request->getStr('target');
     $objects = id(new PhabricatorObjectHandleData(array($target)))->loadHandles();
     if (!$objects) {
         return new Aphront404Response();
     }
     $content = $request->getStr('content');
     if (!strlen(trim($content))) {
         $dialog = new AphrontDialogView();
         $dialog->setUser($request->getUser());
         $dialog->setTitle('Empty comment');
         $dialog->appendChild('<p>Your comment must not be empty.</p>');
         $dialog->addCancelButton('/Q' . $question_id);
         return id(new AphrontDialogResponse())->setDialog($dialog);
     }
     $res = new PonderComment();
     $res->setContent($content)->setAuthorPHID($user->getPHID())->setTargetPHID($target);
     id(new PonderCommentEditor())->setQuestion($question)->setComment($res)->setTargetPHID($target)->setUser($user)->save();
     return id(new AphrontRedirectResponse())->setURI(id(new PhutilURI('/Q' . $question->getID())));
 }
 public function execute()
 {
     $comment = new PonderComment();
     $conn_r = $comment->establishConnection('r');
     $select = qsprintf($conn_r, 'SELECT r.* FROM %T r', $comment->getTableName());
     $where = $this->buildWhereClause($conn_r);
     $order_by = $this->buildOrderByClause($conn_r);
     return $comment->loadAllFromArray(queryfx_all($conn_r, '%Q %Q %Q', $select, $where, $order_by));
 }