mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-20 20:40:56 +01:00
Share feed building code
Summary: I pretty much copy/pasted this code; rather than do that again now that I want to add feeds to projects, share the code. This "Builder" is a little weird -- I don't want to call it a "View" because it does data access. "Builder" seemed okay. We don't really have much code that does this sort of thing right now, elsewhere. Test Plan: - Viewed public feed. - Viewed private feed. Reviewers: btrahan, jungejason Reviewed By: btrahan CC: aran, btrahan Maniphest Tasks: T681 Differential Revision: 1233
This commit is contained in:
parent
c93fc91e96
commit
0634009720
7 changed files with 94 additions and 54 deletions
|
@ -429,6 +429,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorEvent' => 'infrastructure/events/event',
|
||||
'PhabricatorEventEngine' => 'infrastructure/events/engine',
|
||||
'PhabricatorEventType' => 'infrastructure/events/constant/type',
|
||||
'PhabricatorFeedBuilder' => 'applications/feed/builder/feed',
|
||||
'PhabricatorFeedConstants' => 'applications/feed/constants/base',
|
||||
'PhabricatorFeedController' => 'applications/feed/controller/base',
|
||||
'PhabricatorFeedDAO' => 'applications/feed/storage/base',
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright 2011 Facebook, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
final class PhabricatorFeedBuilder {
|
||||
|
||||
private $stories;
|
||||
|
||||
public function __construct(array $stories) {
|
||||
$this->stories = $stories;
|
||||
}
|
||||
|
||||
public function setUser(PhabricatorUser $user) {
|
||||
$this->user = $user;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function buildView() {
|
||||
if (!$this->user) {
|
||||
throw new Exception('Call setUser() before buildView()!');
|
||||
}
|
||||
|
||||
$user = $this->user;
|
||||
$stories = $this->stories;
|
||||
|
||||
$handles = array();
|
||||
$objects = array();
|
||||
if ($stories) {
|
||||
$handle_phids = array_mergev(mpull($stories, 'getRequiredHandlePHIDs'));
|
||||
$object_phids = array_mergev(mpull($stories, 'getRequiredObjectPHIDs'));
|
||||
$handles = id(new PhabricatorObjectHandleData($handle_phids))
|
||||
->loadHandles();
|
||||
$objects = id(new PhabricatorObjectHandleData($object_phids))
|
||||
->loadObjects();
|
||||
}
|
||||
|
||||
$null_view = new AphrontNullView();
|
||||
|
||||
$views = array();
|
||||
foreach ($stories as $story) {
|
||||
$story->setHandles($handles);
|
||||
$story->setObjects($objects);
|
||||
|
||||
$view = $story->renderView();
|
||||
$view->setViewer($user);
|
||||
|
||||
$null_view->appendChild($view);
|
||||
}
|
||||
|
||||
return $null_view;
|
||||
}
|
||||
|
||||
}
|
15
src/applications/feed/builder/feed/__init__.php
Normal file
15
src/applications/feed/builder/feed/__init__.php
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is automatically generated. Lint this module to rebuild it.
|
||||
* @generated
|
||||
*/
|
||||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'applications/phid/handle/data');
|
||||
phutil_require_module('phabricator', 'view/null');
|
||||
|
||||
phutil_require_module('phutil', 'utils');
|
||||
|
||||
|
||||
phutil_require_source('PhabricatorFeedBuilder.php');
|
|
@ -36,34 +36,14 @@ final class PhabricatorFeedPublicStreamController
|
|||
$query = new PhabricatorFeedQuery();
|
||||
$stories = $query->execute();
|
||||
|
||||
$handles = array();
|
||||
$objects = array();
|
||||
if ($stories) {
|
||||
$handle_phids = array_mergev(mpull($stories, 'getRequiredHandlePHIDs'));
|
||||
$object_phids = array_mergev(mpull($stories, 'getRequiredObjectPHIDs'));
|
||||
$handles = id(new PhabricatorObjectHandleData($handle_phids))
|
||||
->loadHandles();
|
||||
$objects = id(new PhabricatorObjectHandleData($object_phids))
|
||||
->loadObjects();
|
||||
}
|
||||
$builder = new PhabricatorFeedBuilder($stories);
|
||||
$builder
|
||||
->setUser($request->getUser());
|
||||
|
||||
// TODO: We need this for timezones but should develop some more general
|
||||
// solution for logged-out pages.
|
||||
$dummy_user = new PhabricatorUser();
|
||||
|
||||
$views = array();
|
||||
foreach ($stories as $story) {
|
||||
$story->setHandles($handles);
|
||||
$story->setObjects($objects);
|
||||
|
||||
$view = $story->renderView();
|
||||
$view->setViewer($dummy_user);
|
||||
|
||||
$views[] = $view->render();
|
||||
}
|
||||
$view = $builder->buildView();
|
||||
|
||||
return $this->buildStandardPageResponse(
|
||||
$views,
|
||||
$view,
|
||||
array(
|
||||
'title' => 'Public Feed',
|
||||
'public' => true,
|
||||
|
|
|
@ -7,13 +7,10 @@
|
|||
|
||||
|
||||
phutil_require_module('phabricator', 'aphront/response/404');
|
||||
phutil_require_module('phabricator', 'applications/feed/builder/feed');
|
||||
phutil_require_module('phabricator', 'applications/feed/controller/base');
|
||||
phutil_require_module('phabricator', 'applications/feed/query');
|
||||
phutil_require_module('phabricator', 'applications/people/storage/user');
|
||||
phutil_require_module('phabricator', 'applications/phid/handle/data');
|
||||
phutil_require_module('phabricator', 'infrastructure/env');
|
||||
|
||||
phutil_require_module('phutil', 'utils');
|
||||
|
||||
|
||||
phutil_require_source('PhabricatorFeedPublicStreamController.php');
|
||||
|
|
|
@ -42,29 +42,9 @@ final class PhabricatorFeedStreamController extends PhabricatorFeedController {
|
|||
$query = new PhabricatorFeedQuery();
|
||||
$stories = $query->execute();
|
||||
|
||||
$handles = array();
|
||||
$objects = array();
|
||||
if ($stories) {
|
||||
$handle_phids = array_mergev(mpull($stories, 'getRequiredHandlePHIDs'));
|
||||
$object_phids = array_mergev(mpull($stories, 'getRequiredObjectPHIDs'));
|
||||
|
||||
$handles = id(new PhabricatorObjectHandleData($handle_phids))
|
||||
->loadHandles();
|
||||
|
||||
$objects = id(new PhabricatorObjectHandleData($object_phids))
|
||||
->loadObjects();
|
||||
}
|
||||
|
||||
$views = array();
|
||||
foreach ($stories as $story) {
|
||||
$story->setHandles($handles);
|
||||
$story->setObjects($objects);
|
||||
|
||||
$view = $story->renderView();
|
||||
$view->setViewer($viewer);
|
||||
|
||||
$views[] = $view->render();
|
||||
}
|
||||
$builder = new PhabricatorFeedBuilder($stories);
|
||||
$builder->setUser($request->getUser());
|
||||
$view = $builder->buildView();
|
||||
|
||||
$post_form = id(new AphrontFormView())
|
||||
->setUser($viewer)
|
||||
|
@ -83,7 +63,7 @@ final class PhabricatorFeedStreamController extends PhabricatorFeedController {
|
|||
|
||||
$page = array();
|
||||
$page[] = $post;
|
||||
$page[] = $views;
|
||||
$page[] = $view;
|
||||
|
||||
return $this->buildStandardPageResponse(
|
||||
$page,
|
||||
|
|
|
@ -7,11 +7,11 @@
|
|||
|
||||
|
||||
phutil_require_module('phabricator', 'aphront/response/redirect');
|
||||
phutil_require_module('phabricator', 'applications/feed/builder/feed');
|
||||
phutil_require_module('phabricator', 'applications/feed/constants/story');
|
||||
phutil_require_module('phabricator', 'applications/feed/controller/base');
|
||||
phutil_require_module('phabricator', 'applications/feed/publisher');
|
||||
phutil_require_module('phabricator', 'applications/feed/query');
|
||||
phutil_require_module('phabricator', 'applications/phid/handle/data');
|
||||
phutil_require_module('phabricator', 'view/form/base');
|
||||
phutil_require_module('phabricator', 'view/form/control/submit');
|
||||
phutil_require_module('phabricator', 'view/form/control/textarea');
|
||||
|
|
Loading…
Reference in a new issue