filterPHIDs = $phids; return $this; } public function setLimit($limit) { $this->limit = $limit; return $this; } public function setAfter($after) { $this->after = $after; return $this; } public function execute() { $ref_table = new PhabricatorFeedStoryReference(); $story_table = new PhabricatorFeedStoryData(); $conn = $story_table->establishConnection('r'); $where = array(); if ($this->filterPHIDs) { $where[] = qsprintf( $conn, 'ref.objectPHID IN (%Ls)', $this->filterPHIDs); } if ($where) { $where = 'WHERE ('.implode(') AND (', $where).')'; } else { $where = ''; } $data = queryfx_all( $conn, 'SELECT story.* FROM %T ref JOIN %T story ON ref.chronologicalKey = story.chronologicalKey %Q GROUP BY story.chronologicalKey ORDER BY story.chronologicalKey DESC LIMIT %d', $ref_table->getTableName(), $story_table->getTableName(), $where, $this->limit); $data = $story_table->loadAllFromArray($data); $stories = array(); foreach ($data as $story_data) { $class = $story_data->getStoryType(); try { if (!class_exists($class) || !is_subclass_of($class, 'PhabricatorFeedStory')) { $class = 'PhabricatorFeedStoryUnknown'; } } catch (PhutilMissingSymbolException $ex) { // If the class can't be loaded, libphutil will throw an exception. // Render the story using the unknown story view. $class = 'PhabricatorFeedStoryUnknown'; } $stories[] = newv($class, array($story_data)); } return $stories; } }