Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/applications/ponder/controller/PonderVoteSaveController.php b/src/applications/ponder/controller/PonderVoteSaveController.php
index 24ef3c4c55..d4169f9f4b 100644
--- a/src/applications/ponder/controller/PonderVoteSaveController.php
+++ b/src/applications/ponder/controller/PonderVoteSaveController.php
@@ -1,44 +1,44 @@
<?php
final class PonderVoteSaveController extends PonderController {
private $kind;
public function willProcessRequest(array $data) {
$this->kind = $data['kind'];
}
public function processRequest() {
$request = $this->getRequest();
$user = $request->getUser();
$newvote = $request->getInt("vote");
$phid = $request->getStr("phid");
if (1 < $newvote || $newvote < -1) {
return new Aphront400Response();
}
$target = null;
if ($this->kind == "question") {
$target = PonderQuestionQuery::loadSingleByPHID($user, $phid);
} else if ($this->kind == "answer") {
$target = id(new PonderAnswerQuery())
->setViewer($user)
- ->withPHID($phid)
+ ->withPHIDs(array($phid))
->executeOne();
}
if (!$target) {
return new Aphront404Response();
}
$editor = id(new PonderVoteEditor())
->setVotable($target)
->setActor($user)
->setVote($newvote)
->saveVote();
return id(new AphrontAjaxResponse())->setContent(".");
}
}
diff --git a/src/applications/ponder/query/PonderAnswerQuery.php b/src/applications/ponder/query/PonderAnswerQuery.php
index 608c3c62e5..ed0c6f926f 100644
--- a/src/applications/ponder/query/PonderAnswerQuery.php
+++ b/src/applications/ponder/query/PonderAnswerQuery.php
@@ -1,95 +1,104 @@
<?php
final class PonderAnswerQuery extends PhabricatorOffsetPagedQuery {
- private $id;
- private $phid;
- private $authorPHID;
- private $orderNewest;
+ private $ids;
+ private $phids;
+ private $authorPHIDs;
+ private $questionIDs;
private $viewer;
public function setViewer(PhabricatorUser $viewer) {
$this->viewer = $viewer;
return $this;
}
public function getViewer() {
return $this->viewer;
}
public function executeOne() {
return head($this->execute());
}
- public function withID($qid) {
- $this->id = $qid;
+ public function withIDs(array $ids) {
+ $this->ids = $ids;
return $this;
}
- public function withPHID($phid) {
- $this->phid = $phid;
+ public function withPHIDs(array $phids) {
+ $this->phids = $phids;
return $this;
}
- public function withAuthorPHID($phid) {
- $this->authorPHID = $phid;
+ public function withAuthorPHIDs(array $phids) {
+ $this->authorPHIDs = $phids;
return $this;
}
- public function orderByNewest($usethis) {
- $this->orderNewest = $usethis;
+ public function withQuestionIDs(array $ids) {
+ $this->questionIDs = $ids;
return $this;
}
private function buildWhereClause($conn_r) {
$where = array();
- if ($this->id) {
- $where[] = qsprintf($conn_r, '(id = %d)', $this->id);
+
+ if ($this->ids) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'id IN (%Ld)',
+ $this->ids);
}
- if ($this->phid) {
- $where[] = qsprintf($conn_r, '(phid = %s)', $this->phid);
+
+ if ($this->phids) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'phid IN (%Ls)',
+ $this->phids);
}
- if ($this->authorPHID) {
- $where[] = qsprintf($conn_r, '(authorPHID = %s)', $this->authorPHID);
+
+ if ($this->authorPHIDs) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'authorPHID IN (%Ls)',
+ $this->authorPHIDs);
}
return $this->formatWhereClause($where);
}
private function buildOrderByClause($conn_r) {
- $order = array();
- if ($this->orderNewest) {
- $order[] = qsprintf($conn_r, 'id DESC');
- }
-
- if (count($order) == 0) {
- $order[] = qsprintf($conn_r, 'id ASC');
- }
-
- return ($order ? 'ORDER BY ' . implode(', ', $order) : '');
+ return 'ORDER BY id ASC';
}
public function execute() {
$answer = new PonderAnswer();
$conn_r = $answer->establishConnection('r');
- $select = qsprintf(
+ $data = queryfx_all(
$conn_r,
- 'SELECT r.* FROM %T r',
- $answer->getTableName());
-
- $where = $this->buildWhereClause($conn_r);
- $order_by = $this->buildOrderByClause($conn_r);
- $limit = $this->buildLimitClause($conn_r);
+ 'SELECT a.* FROM %T a %Q %Q %Q',
+ $answer->getTableName(),
+ $this->buildWhereClause($conn_r),
+ $this->buildOrderByClause($conn_r),
+ $this->buildLimitClause($conn_r));
+
+ $answers = $answer->loadAllFromArray($data);
+
+ if ($answers) {
+ $questions = id(new PonderQuestionQuery())
+ ->setViewer($this->getViewer())
+ ->withIDs(mpull($answers, 'getQuestionID'))
+ ->execute();
+
+ foreach ($answers as $answer) {
+ $question = idx($questions, $answer->getQuestionID());
+ $answer->attachQuestion($question);
+ }
+ }
- return $answer->loadAllFromArray(
- queryfx_all(
- $conn_r,
- '%Q %Q %Q %Q',
- $select,
- $where,
- $order_by,
- $limit));
+ return $answers;
}
}
diff --git a/src/applications/ponder/storage/PonderAnswer.php b/src/applications/ponder/storage/PonderAnswer.php
index fd4b0ad988..ba6b1f24da 100644
--- a/src/applications/ponder/storage/PonderAnswer.php
+++ b/src/applications/ponder/storage/PonderAnswer.php
@@ -1,109 +1,114 @@
<?php
final class PonderAnswer extends PonderDAO
implements PhabricatorMarkupInterface, PonderVotableInterface {
const MARKUP_FIELD_CONTENT = 'markup:content';
protected $phid;
protected $authorPHID;
protected $questionID;
protected $content;
protected $contentSource;
protected $voteCount;
private $vote;
- private $question = null;
+ private $question = self::ATTACHABLE;
private $comments;
+ // TODO: Get rid of this method.
public function setQuestion($question) {
+ return $this->attachQuestion($question);
+ }
+
+ public function attachQuestion(PonderQuestion $question = null) {
$this->question = $question;
return $this;
}
public function getQuestion() {
- return $this->question;
+ return $this->assertAttached($this->question);
}
public function setUserVote($vote) {
$this->vote = $vote['data'];
if (!$this->vote) {
$this->vote = PonderVote::VOTE_NONE;
}
return $this;
}
public function getUserVote() {
return $this->vote;
}
public function setComments($comments) {
$this->comments = $comments;
return $this;
}
public function getComments() {
return $this->comments;
}
public function getConfiguration() {
return array(
self::CONFIG_AUX_PHID => true,
) + parent::getConfiguration();
}
public function generatePHID() {
return PhabricatorPHID::generateNewPHID(
PhabricatorPHIDConstants::PHID_TYPE_ANSW);
}
public function setContentSource(PhabricatorContentSource $content_source) {
$this->contentSource = $content_source->serialize();
return $this;
}
public function getContentSource() {
return PhabricatorContentSource::newFromSerialized($this->contentSource);
}
public function getMarkupField() {
return self::MARKUP_FIELD_CONTENT;
}
// Markup interface
public function getMarkupFieldKey($field) {
$hash = PhabricatorHash::digest($this->getMarkupText($field));
$id = $this->getID();
return "ponder:A{$id}:{$field}:{$hash}";
}
public function getMarkupText($field) {
return $this->getContent();
}
public function newMarkupEngine($field) {
return PhabricatorMarkupEngine::newPonderMarkupEngine();
}
public function didMarkupText(
$field,
$output,
PhutilMarkupEngine $engine) {
return $output;
}
public function shouldUseMarkupCache($field) {
return (bool)$this->getID();
}
// votable interface
public function getUserVoteEdgeType() {
return PhabricatorEdgeConfig::TYPE_VOTING_USER_HAS_ANSWER;
}
public function getVotablePHID() {
return $this->getPHID();
}
}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Jun 10, 10:42 AM (23 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
140349
Default Alt Text
(8 KB)

Event Timeline