Page MenuHomePhabricator

D13351.diff
No OneTemporary

D13351.diff

diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -342,7 +342,7 @@
'rsrc/js/application/conpherence/behavior-menu.js' => 'd3782c93',
'rsrc/js/application/conpherence/behavior-pontificate.js' => '21ba5861',
'rsrc/js/application/conpherence/behavior-quicksand-blacklist.js' => '7927a7d3',
- 'rsrc/js/application/conpherence/behavior-widget-pane.js' => '93568464',
+ 'rsrc/js/application/conpherence/behavior-widget-pane.js' => 'cafc59ab',
'rsrc/js/application/countdown/timer.js' => 'e4cc26b3',
'rsrc/js/application/daemon/behavior-bulk-job-reload.js' => 'edf8a145',
'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => '469c0d9e',
@@ -550,7 +550,7 @@
'javelin-behavior-conpherence-drag-and-drop-photo' => 'cf86d16a',
'javelin-behavior-conpherence-menu' => 'd3782c93',
'javelin-behavior-conpherence-pontificate' => '21ba5861',
- 'javelin-behavior-conpherence-widget-pane' => '93568464',
+ 'javelin-behavior-conpherence-widget-pane' => 'cafc59ab',
'javelin-behavior-countdown-timer' => 'e4cc26b3',
'javelin-behavior-dark-console' => 'f411b6ae',
'javelin-behavior-dashboard-async-panel' => '469c0d9e',
@@ -1501,19 +1501,6 @@
'javelin-dom',
'javelin-stratcom',
),
- 93568464 => array(
- 'javelin-behavior',
- 'javelin-dom',
- 'javelin-stratcom',
- 'javelin-workflow',
- 'javelin-util',
- 'phabricator-notification',
- 'javelin-behavior-device',
- 'phuix-dropdown-menu',
- 'phuix-action-list-view',
- 'phuix-action-view',
- 'conpherence-thread-manager',
- ),
'93d0c9e3' => array(
'javelin-behavior',
'javelin-stratcom',
@@ -1768,6 +1755,19 @@
'javelin-stratcom',
'phabricator-phtize',
),
+ 'cafc59ab' => array(
+ 'javelin-behavior',
+ 'javelin-dom',
+ 'javelin-stratcom',
+ 'javelin-workflow',
+ 'javelin-util',
+ 'phabricator-notification',
+ 'javelin-behavior-device',
+ 'phuix-dropdown-menu',
+ 'phuix-action-list-view',
+ 'phuix-action-view',
+ 'conpherence-thread-manager',
+ ),
'ccf1cbf8' => array(
'javelin-install',
'javelin-dom',
diff --git a/resources/sql/autopatches/20150619.conpherencerooms.1.sql b/resources/sql/autopatches/20150619.conpherencerooms.1.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20150619.conpherencerooms.1.sql
@@ -0,0 +1,6 @@
+UPDATE {$NAMESPACE}_conpherence.conpherence_thread
+ SET
+ viewPolicy = 'obj.conpherence.members',
+ editPolicy = 'obj.conpherence.members',
+ joinPolicy = 'obj.conpherence.members'
+ WHERE isRoom = 0;
diff --git a/resources/sql/autopatches/20150619.conpherencerooms.2.sql b/resources/sql/autopatches/20150619.conpherencerooms.2.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20150619.conpherencerooms.2.sql
@@ -0,0 +1,2 @@
+ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread
+ DROP KEY `key_room`;
diff --git a/resources/sql/autopatches/20150619.conpherencerooms.3.sql b/resources/sql/autopatches/20150619.conpherencerooms.3.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20150619.conpherencerooms.3.sql
@@ -0,0 +1,2 @@
+ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread
+ DROP COLUMN isRoom;
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -238,7 +238,6 @@
'ConpherenceLayoutView' => 'applications/conpherence/view/ConpherenceLayoutView.php',
'ConpherenceListController' => 'applications/conpherence/controller/ConpherenceListController.php',
'ConpherenceMenuItemView' => 'applications/conpherence/view/ConpherenceMenuItemView.php',
- 'ConpherenceNewController' => 'applications/conpherence/controller/ConpherenceNewController.php',
'ConpherenceNewRoomController' => 'applications/conpherence/controller/ConpherenceNewRoomController.php',
'ConpherenceNotificationPanelController' => 'applications/conpherence/controller/ConpherenceNotificationPanelController.php',
'ConpherenceParticipant' => 'applications/conpherence/storage/ConpherenceParticipant.php',
@@ -263,7 +262,6 @@
'ConpherenceThreadQuery' => 'applications/conpherence/query/ConpherenceThreadQuery.php',
'ConpherenceThreadRemarkupRule' => 'applications/conpherence/remarkup/ConpherenceThreadRemarkupRule.php',
'ConpherenceThreadSearchEngine' => 'applications/conpherence/query/ConpherenceThreadSearchEngine.php',
- 'ConpherenceThreadTestCase' => 'applications/conpherence/__tests__/ConpherenceThreadTestCase.php',
'ConpherenceTransaction' => 'applications/conpherence/storage/ConpherenceTransaction.php',
'ConpherenceTransactionComment' => 'applications/conpherence/storage/ConpherenceTransactionComment.php',
'ConpherenceTransactionQuery' => 'applications/conpherence/query/ConpherenceTransactionQuery.php',
@@ -3609,7 +3607,6 @@
'ConpherenceLayoutView' => 'AphrontView',
'ConpherenceListController' => 'ConpherenceController',
'ConpherenceMenuItemView' => 'AphrontTagView',
- 'ConpherenceNewController' => 'ConpherenceController',
'ConpherenceNewRoomController' => 'ConpherenceController',
'ConpherenceNotificationPanelController' => 'ConpherenceController',
'ConpherenceParticipant' => 'ConpherenceDAO',
@@ -3640,7 +3637,6 @@
'ConpherenceThreadQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'ConpherenceThreadRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'ConpherenceThreadSearchEngine' => 'PhabricatorApplicationSearchEngine',
- 'ConpherenceThreadTestCase' => 'ConpherenceTestCase',
'ConpherenceTransaction' => 'PhabricatorApplicationTransaction',
'ConpherenceTransactionComment' => 'PhabricatorApplicationTransactionComment',
'ConpherenceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
diff --git a/src/applications/conpherence/__tests__/ConpherenceRoomTestCase.php b/src/applications/conpherence/__tests__/ConpherenceRoomTestCase.php
--- a/src/applications/conpherence/__tests__/ConpherenceRoomTestCase.php
+++ b/src/applications/conpherence/__tests__/ConpherenceRoomTestCase.php
@@ -69,20 +69,6 @@
$participant_phids,
$conpherence->getRecentParticipantPHIDs());
- // test policy error as another user tries to add
- $caught = null;
- try {
- $this->addParticipants(
- $friend_2,
- $conpherence,
- array($friend_3->getPHID()));
- } catch (PhabricatorPolicyException $ex) {
- $caught = $ex;
- }
- $this->assertTrue($caught instanceof PhabricatorPolicyException);
-
- // update edit policy so user has a chance
- $this->changeEditPolicy($creator, $conpherence, 'users');
// test add by other participant, so recent participation should
// meaningfully change
$participant_phids = array(
@@ -129,7 +115,6 @@
public function testAddMessageWithFileAttachments() {
$creator = $this->generateNewTestUser();
$friend_1 = $this->generateNewTestUser();
- $join_via_add = $this->generateNewTestUser();
$participant_map = array(
$creator->getPHID() => $creator,
@@ -144,9 +129,6 @@
$xactions = $this->addMessageWithFile($user, $conpherence);
$this->assertEqual(2, count($xactions));
}
-
- $xactions = $this->addMessageWithFile($join_via_add, $conpherence);
- $this->assertEqual(2, count($xactions));
}
private function createRoom(
diff --git a/src/applications/conpherence/__tests__/ConpherenceThreadTestCase.php b/src/applications/conpherence/__tests__/ConpherenceThreadTestCase.php
deleted file mode 100644
--- a/src/applications/conpherence/__tests__/ConpherenceThreadTestCase.php
+++ /dev/null
@@ -1,169 +0,0 @@
-<?php
-
-final class ConpherenceThreadTestCase extends ConpherenceTestCase {
-
- protected function getPhabricatorTestCaseConfiguration() {
- return array(
- self::PHABRICATOR_TESTCONFIG_BUILD_STORAGE_FIXTURES => true,
- );
- }
-
- public function testOneUserThreadCreate() {
- $creator = $this->generateNewTestUser();
- $participant_phids = array($creator->getPHID());
-
- $conpherence = $this->createThread($creator, $participant_phids);
-
- $this->assertTrue((bool)$conpherence->getID());
- $this->assertEqual(1, count($conpherence->getParticipants()));
- $this->assertEqual(
- $participant_phids,
- $conpherence->getRecentParticipantPHIDs());
- }
-
- public function testNUserThreadCreate() {
- $creator = $this->generateNewTestUser();
- $friend_1 = $this->generateNewTestUser();
- $friend_2 = $this->generateNewTestUser();
- $friend_3 = $this->generateNewTestUser();
-
- $participant_phids = array(
- $creator->getPHID(),
- $friend_1->getPHID(),
- $friend_2->getPHID(),
- $friend_3->getPHID(),
- );
-
- $conpherence = $this->createThread($creator, $participant_phids);
-
- $this->assertTrue((bool)$conpherence->getID());
- $this->assertEqual(4, count($conpherence->getParticipants()));
- $this->assertEqual(
- $participant_phids,
- $conpherence->getRecentParticipantPHIDs());
- }
-
- public function testThreadParticipantAddition() {
- $creator = $this->generateNewTestUser();
- $friend_1 = $this->generateNewTestUser();
- $friend_2 = $this->generateNewTestUser();
- $friend_3 = $this->generateNewTestUser();
-
- $participant_phids = array(
- $creator->getPHID(),
- $friend_1->getPHID(),
- );
-
- $conpherence = $this->createThread($creator, $participant_phids);
-
- $this->assertTrue((bool)$conpherence->getID());
- $this->assertEqual(2, count($conpherence->getParticipants()));
- $this->assertEqual(
- $participant_phids,
- $conpherence->getRecentParticipantPHIDs());
-
- // test add by creator
- $participant_phids[] = $friend_2->getPHID();
- $this->addParticipants($creator, $conpherence, array($friend_2->getPHID()));
- $this->assertEqual(
- $participant_phids,
- $conpherence->getRecentParticipantPHIDs());
-
- // test add by other participant, so recent participation should
- // meaningfully change
- $participant_phids = array(
- $friend_2->getPHID(), // actor
- $creator->getPHID(), // last actor
- $friend_1->getPHID(),
- $friend_3->getPHID(), // new addition
- );
- $this->addParticipants(
- $friend_2,
- $conpherence,
- array($friend_3->getPHID()));
- $this->assertEqual(
- $participant_phids,
- $conpherence->getRecentParticipantPHIDs());
- }
-
- public function testThreadParticipantDeletion() {
- $creator = $this->generateNewTestUser();
- $friend_1 = $this->generateNewTestUser();
- $friend_2 = $this->generateNewTestUser();
- $friend_3 = $this->generateNewTestUser();
-
- $participant_map = array(
- $creator->getPHID() => $creator,
- $friend_1->getPHID() => $friend_1,
- $friend_2->getPHID() => $friend_2,
- $friend_3->getPHID() => $friend_3,
- );
-
- $conpherence = $this->createThread(
- $creator,
- array_keys($participant_map));
-
- foreach ($participant_map as $phid => $user) {
- $this->removeParticipants($user, $conpherence, array($phid));
- unset($participant_map[$phid]);
- $this->assertEqual(
- count($participant_map),
- count($conpherence->getParticipants()));
- }
- }
-
- public function testAddMessageWithFileAttachments() {
- $creator = $this->generateNewTestUser();
- $friend_1 = $this->generateNewTestUser();
- $policy_exception_user = $this->generateNewTestUser();
-
- $participant_map = array(
- $creator->getPHID() => $creator,
- $friend_1->getPHID() => $friend_1,
- );
-
- $conpherence = $this->createThread(
- $creator,
- array_keys($participant_map));
-
- foreach ($participant_map as $phid => $user) {
- $xactions = $this->addMessageWithFile($user, $conpherence);
- $this->assertEqual(2, count($xactions), pht('hi'));
- }
-
- $caught = null;
- try {
- $xactions = $this->addMessageWithFile(
- $policy_exception_user,
- $conpherence);
- } catch (PhabricatorPolicyException $ex) {
- $caught = $ex;
- }
- $this->assertTrue(
- $caught instanceof PhabricatorPolicyException,
- pht(
- 'User not participating in thread should get policy exception '.
- 'trying to add message.'));
- $this->assertTrue(
- $conpherence->establishConnection('w')->isReadLocking(),
- pht(
- 'Conpherence object should still be read locked from policy '.
- 'exception.'));
- $conpherence->endReadLocking();
- $conpherence->killTransaction();
- }
-
- private function createThread(
- PhabricatorUser $creator,
- array $participant_phids) {
-
- list($errors, $conpherence) = ConpherenceEditor::createThread(
- $creator,
- $participant_phids,
- pht('Test'),
- pht('Test'),
- PhabricatorContentSource::newConsoleSource());
- return $conpherence;
- }
-
-}
diff --git a/src/applications/conpherence/application/PhabricatorConpherenceApplication.php b/src/applications/conpherence/application/PhabricatorConpherenceApplication.php
--- a/src/applications/conpherence/application/PhabricatorConpherenceApplication.php
+++ b/src/applications/conpherence/application/PhabricatorConpherenceApplication.php
@@ -11,7 +11,7 @@
}
public function getShortDescription() {
- return pht('Send Messages');
+ return pht('Chat with Others');
}
public function getFontIcon() {
@@ -44,8 +44,7 @@
'(?P<id>[1-9]\d*)/(?P<messageID>[1-9]\d*)/'
=> 'ConpherenceViewController',
'columnview/' => 'ConpherenceColumnViewController',
- 'new/' => 'ConpherenceNewController',
- 'room/new/' => 'ConpherenceNewRoomController',
+ 'new/' => 'ConpherenceNewRoomController',
'search/(?:query/(?P<queryKey>[^/]+)/)?'
=> 'ConpherenceRoomListController',
'panel/' => 'ConpherenceNotificationPanelController',
@@ -59,7 +58,7 @@
$items = array();
$item = id(new PHUIListItemView())
- ->setName(pht('Conpherence Thread'))
+ ->setName(pht('Conpherence Room'))
->setIcon('fa-comments')
->setWorkflow(true)
->setHref($this->getBaseURI().'new/');
diff --git a/src/applications/conpherence/conduit/ConpherenceQueryTransactionConduitAPIMethod.php b/src/applications/conpherence/conduit/ConpherenceQueryTransactionConduitAPIMethod.php
--- a/src/applications/conpherence/conduit/ConpherenceQueryTransactionConduitAPIMethod.php
+++ b/src/applications/conpherence/conduit/ConpherenceQueryTransactionConduitAPIMethod.php
@@ -10,15 +10,15 @@
public function getMethodDescription() {
return pht(
'Query for transactions for the logged in user within a specific '.
- 'Conpherence thread. You can specify the thread by ID or PHID. '.
+ 'Conpherence room. You can specify the room by ID or PHID. '.
'Otherwise, specify limit and offset to query the most recent '.
- 'transactions within the Conpherence for the logged in user.');
+ 'transactions within the Conpherence room for the logged in user.');
}
protected function defineParamTypes() {
return array(
- 'threadID' => 'optional int',
- 'threadPHID' => 'optional phid',
+ 'roomID' => 'optional int',
+ 'roomPHID' => 'optional phid',
'limit' => 'optional int',
'offset' => 'optional int',
);
@@ -30,28 +30,28 @@
protected function defineErrorTypes() {
return array(
- 'ERR_USAGE_NO_THREAD_ID' => pht(
- 'You must specify a thread id or thread PHID to query transactions '.
+ 'ERR_USAGE_NO_ROOM_ID' => pht(
+ 'You must specify a room id or room PHID to query transactions '.
'from.'),
);
}
protected function execute(ConduitAPIRequest $request) {
$user = $request->getUser();
- $thread_id = $request->getValue('threadID');
- $thread_phid = $request->getValue('threadPHID');
+ $room_id = $request->getValue('roomID');
+ $room_phid = $request->getValue('roomPHID');
$limit = $request->getValue('limit');
$offset = $request->getValue('offset');
$query = id(new ConpherenceThreadQuery())
->setViewer($user);
- if ($thread_id) {
- $query->withIDs(array($thread_id));
- } else if ($thread_phid) {
- $query->withPHIDs(array($thread_phid));
+ if ($room_id) {
+ $query->withIDs(array($room_id));
+ } else if ($room_phid) {
+ $query->withPHIDs(array($room_phid));
} else {
- throw new ConduitException('ERR_USAGE_NO_THREAD_ID');
+ throw new ConduitException('ERR_USAGE_NO_ROOM_ID');
}
$conpherence = $query->executeOne();
@@ -87,8 +87,8 @@
'transactionMetadata' => $transaction->getMetadata(),
'authorPHID' => $transaction->getAuthorPHID(),
'dateCreated' => $transaction->getDateCreated(),
- 'conpherenceID' => $conpherence->getID(),
- 'conpherencePHID' => $conpherence->getPHID(),
+ 'roomID' => $conpherence->getID(),
+ 'roomPHID' => $conpherence->getPHID(),
);
}
return $data;
diff --git a/src/applications/conpherence/conduit/ConpherenceUpdateThreadConduitAPIMethod.php b/src/applications/conpherence/conduit/ConpherenceUpdateThreadConduitAPIMethod.php
--- a/src/applications/conpherence/conduit/ConpherenceUpdateThreadConduitAPIMethod.php
+++ b/src/applications/conpherence/conduit/ConpherenceUpdateThreadConduitAPIMethod.php
@@ -8,7 +8,7 @@
}
public function getMethodDescription() {
- return pht('Update an existing conpherence thread.');
+ return pht('Update an existing conpherence room.');
}
protected function defineParamTypes() {
@@ -28,13 +28,13 @@
protected function defineErrorTypes() {
return array(
- 'ERR_USAGE_NO_THREAD_ID' => pht(
- 'You must specify a thread id or thread phid to query transactions '.
+ 'ERR_USAGE_NO_ROOM_ID' => pht(
+ 'You must specify a room id or room phid to query transactions '.
'from.'),
- 'ERR_USAGE_THREAD_NOT_FOUND' => pht(
- 'Thread does not exist or logged in user can not see it.'),
+ 'ERR_USAGE_ROOM_NOT_FOUND' => pht(
+ 'room does not exist or logged in user can not see it.'),
'ERR_USAGE_ONLY_SELF_REMOVE' => pht(
- 'Only a user can remove themselves from a thread.'),
+ 'Only a user can remove themselves from a room.'),
'ERR_USAGE_NO_UPDATES' => pht(
'You must specify data that actually updates the conpherence.'),
);
@@ -52,11 +52,11 @@
} else if ($phid) {
$query->withPHIDs(array($phid));
} else {
- throw new ConduitException('ERR_USAGE_NO_THREAD_ID');
+ throw new ConduitException('ERR_USAGE_NO_ROOM_ID');
}
$conpherence = $query->executeOne();
if (!$conpherence) {
- throw new ConduitException('ERR_USAGE_THREAD_NOT_FOUND');
+ throw new ConduitException('ERR_USAGE_ROOM_NOT_FOUND');
}
$source = PhabricatorContentSource::newFromConduitRequest($request);
diff --git a/src/applications/conpherence/controller/ConpherenceController.php b/src/applications/conpherence/controller/ConpherenceController.php
--- a/src/applications/conpherence/controller/ConpherenceController.php
+++ b/src/applications/conpherence/controller/ConpherenceController.php
@@ -16,7 +16,7 @@
$nav = new PHUIListView();
$nav->newLink(
- pht('New Message'),
+ pht('New Room'),
$this->getApplicationURI('new/'));
$nav->addMenuItem(
@@ -51,20 +51,20 @@
->addAction(
id(new PHUIListItemView())
->setName(pht('New Room'))
- ->setHref($this->getApplicationURI('room/new/'))
+ ->setHref($this->getApplicationURI('new/'))
->setIcon('fa-plus-square')
->setWorkflow(true));
} else {
$crumbs
->addAction(
id(new PHUIListItemView())
- ->setName(pht('New Message'))
+ ->setName(pht('New Room'))
->setHref($this->getApplicationURI('new/'))
->setIcon('fa-plus-square')
->setWorkflow(true))
->addAction(
id(new PHUIListItemView())
- ->setName(pht('Thread'))
+ ->setName(pht('Room'))
->setHref('#')
->setIcon('fa-bars')
->setStyle('display: none;')
@@ -81,14 +81,8 @@
$crumbs = $this->buildApplicationCrumbs();
$data = $conpherence->getDisplayData($this->getViewer());
- if ($conpherence->getID() && $conpherence->getIsRoom()) {
- $icon = $conpherence->getPolicyIconName($policy_objects);
- } else {
- $icon = null;
- }
$crumbs->addCrumb(
id(new PHUICrumbView())
- ->setIcon($icon)
->setName($data['title'])
->setHref($this->getApplicationURI('update/'.$conpherence->getID().'/'))
->setWorkflow(true));
diff --git a/src/applications/conpherence/controller/ConpherenceListController.php b/src/applications/conpherence/controller/ConpherenceListController.php
--- a/src/applications/conpherence/controller/ConpherenceListController.php
+++ b/src/applications/conpherence/controller/ConpherenceListController.php
@@ -34,7 +34,7 @@
$title = pht('Conpherence');
$conpherence = null;
- $limit = ConpherenceThreadListView::SEE_MORE_LIMIT * 5;
+ $limit = (ConpherenceThreadListView::SEE_MORE_LIMIT * 2) + 1;
$all_participation = array();
$mode = $this->determineMode();
@@ -62,9 +62,28 @@
} else {
$menu_participation = $cursor;
}
- $all_participation =
- array($conpherence->getPHID() => $menu_participation) +
- $all_participation;
+
+ // check to see if the loaded conpherence is going to show up
+ // within the SEE_MORE_LIMIT amount of conpherences.
+ // If its not there, then we just pre-pend it as the "first"
+ // conpherence so folks have a navigation item in the menu.
+ $count = 0;
+ $found = false;
+ foreach ($all_participation as $phid => $curr_participation) {
+ if ($conpherence->getPHID() == $phid) {
+ $found = true;
+ break;
+ }
+ $count++;
+ if ($count > ConpherenceThreadListView::SEE_MORE_LIMIT) {
+ break;
+ }
+ }
+ if (!$found) {
+ $all_participation =
+ array($conpherence->getPHID() => $menu_participation) +
+ $all_participation;
+ }
break;
case self::UNSELECTED_MODE:
default:
@@ -93,22 +112,21 @@
->setThreadView($thread_view)
->setRole('list');
if ($conpherence) {
- $policy_objects = id(new PhabricatorPolicyQuery())
- ->setViewer($user)
- ->setObject($conpherence)
- ->execute();
- $layout->setHeader($this->buildHeaderPaneContent(
- $conpherence,
- $policy_objects));
$layout->setThread($conpherence);
} else {
- $thread = ConpherenceThread::initializeNewThread($user);
- $thread->attachHandles(array());
- $thread->attachTransactions(array());
- $thread->makeEphemeral();
- $layout->setHeader(
- $this->buildHeaderPaneContent($thread, array()));
+ // make a dummy conpherence so we can render something
+ $conpherence = ConpherenceThread::initializeNewRoom($user);
+ $conpherence->attachHandles(array());
+ $conpherence->attachTransactions(array());
+ $conpherence->makeEphemeral();
}
+ $policy_objects = id(new PhabricatorPolicyQuery())
+ ->setViewer($user)
+ ->setObject($conpherence)
+ ->execute();
+ $layout->setHeader($this->buildHeaderPaneContent(
+ $conpherence,
+ $policy_objects));
$response = $this->buildApplicationPage(
$layout,
array(
diff --git a/src/applications/conpherence/controller/ConpherenceNewController.php b/src/applications/conpherence/controller/ConpherenceNewController.php
deleted file mode 100644
--- a/src/applications/conpherence/controller/ConpherenceNewController.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-final class ConpherenceNewController extends ConpherenceController {
-
- public function handleRequest(AphrontRequest $request) {
- $user = $request->getUser();
-
- $title = pht('New Message');
- $participants = array();
- $participant_prefill = null;
- $message = '';
- $e_participants = null;
- $e_message = null;
- $errors = array();
-
- // this comes from ajax requests from all over. should be a single phid.
-
- if ($request->isFormPost()) {
- $participants = $request->getArr('participants');
- $message = $request->getStr('message');
- list($error_codes, $conpherence) = ConpherenceEditor::createThread(
- $user,
- $participants,
- $conpherence_title = null,
- $message,
- PhabricatorContentSource::newFromRequest($request));
-
- if ($error_codes) {
- foreach ($error_codes as $error_code) {
- switch ($error_code) {
- case ConpherenceEditor::ERROR_EMPTY_MESSAGE:
- $e_message = pht('Required');
- $errors[] = pht(
- 'You can not send an empty message.');
- break;
- case ConpherenceEditor::ERROR_EMPTY_PARTICIPANTS:
- $e_participants = pht('Required');
- $errors[] = pht(
- 'You must choose at least one recipient for your '.
- 'message.');
- break;
- }
- }
- } else {
- return id(new AphrontRedirectResponse())
- ->setURI('/'.$conpherence->getMonogram());
- }
- } else {
- $participant_prefill = $request->getStr('participant');
- if ($participant_prefill) {
- $participants[] = $participant_prefill;
- }
- }
-
- $submit_uri = $this->getApplicationURI('new/');
- $cancel_uri = $this->getApplicationURI();
-
- $dialog = id(new AphrontDialogView())
- ->setWidth(AphrontDialogView::WIDTH_FORM)
- ->setErrors($errors)
- ->setUser($user)
- ->setTitle($title)
- ->addCancelButton($cancel_uri)
- ->addSubmitButton(pht('Send Message'));
-
- $form = id(new AphrontFormView())
- ->setUser($user)
- ->setFullWidth(true)
- ->appendControl(
- id(new AphrontFormTokenizerControl())
- ->setName('participants')
- ->setValue($participants)
- ->setUser($user)
- ->setDatasource(new PhabricatorPeopleDatasource())
- ->setLabel(pht('To'))
- ->setError($e_participants))
- ->appendChild(
- id(new PhabricatorRemarkupControl())
- ->setUser($user)
- ->setName('message')
- ->setValue($message)
- ->setLabel(pht('Message'))
- ->setError($e_message));
-
- $dialog->appendForm($form);
-
- return id(new AphrontDialogResponse())->setDialog($dialog);
- }
-
-}
diff --git a/src/applications/conpherence/controller/ConpherenceNewRoomController.php b/src/applications/conpherence/controller/ConpherenceNewRoomController.php
--- a/src/applications/conpherence/controller/ConpherenceNewRoomController.php
+++ b/src/applications/conpherence/controller/ConpherenceNewRoomController.php
@@ -10,12 +10,18 @@
$validation_exception = null;
$conpherence = ConpherenceThread::initializeNewRoom($user);
+ $participants = array();
if ($request->isFormPost()) {
-
+ $editor = new ConpherenceEditor();
$xactions = array();
+
+ $participants = $request->getArr('participants');
+ $participants[] = $user->getPHID();
+ $participants = array_unique($participants);
$xactions[] = id(new ConpherenceTransaction())
->setTransactionType(ConpherenceTransaction::TYPE_PARTICIPANTS)
- ->setNewValue(array('+' => array($user->getPHID())));
+ ->setNewValue(array('+' => $participants));
+
$xactions[] = id(new ConpherenceTransaction())
->setTransactionType(ConpherenceTransaction::TYPE_TITLE)
->setNewValue($request->getStr('title'));
@@ -29,8 +35,17 @@
->setTransactionType(PhabricatorTransactions::TYPE_JOIN_POLICY)
->setNewValue($request->getStr('joinPolicy'));
+ $message = $request->getStr('message');
+ if ($message) {
+ $message_xactions = $editor->generateTransactionsFromText(
+ $user,
+ $conpherence,
+ $message);
+ $xactions = array_merge($xactions, $message_xactions);
+ }
+
try {
- id(new ConpherenceEditor())
+ $editor
->setContentSourceFromRequest($request)
->setContinueOnNoEffect(true)
->setActor($user)
@@ -47,6 +62,10 @@
$conpherence->setEditPolicy($request->getStr('editPolicy'));
$conpherence->setJoinPolicy($request->getStr('joinPolicy'));
}
+ } else {
+ if ($request->getStr('participant')) {
+ $participants[] = $request->getStr('participant');
+ }
}
$policies = id(new PhabricatorPolicyQuery())
@@ -54,7 +73,7 @@
->setObject($conpherence)
->execute();
- $submit_uri = $this->getApplicationURI('room/new/');
+ $submit_uri = $this->getApplicationURI('new/');
$cancel_uri = $this->getApplicationURI('search/');
$dialog = $this->newDialog()
@@ -67,14 +86,20 @@
$form = id(new PHUIFormLayoutView())
->setUser($user)
- ->setFullWidth(true)
->appendChild(
id(new AphrontFormTextControl())
->setError($e_title)
- ->setLabel(pht('Title'))
+ ->setLabel(pht('Name'))
->setName('title')
->setValue($request->getStr('title')))
->appendChild(
+ id(new AphrontFormTokenizerControl())
+ ->setName('participants')
+ ->setUser($user)
+ ->setDatasource(new PhabricatorPeopleDatasource())
+ ->setValue($participants)
+ ->setLabel(pht('Other Participants')))
+ ->appendChild(
id(new AphrontFormPolicyControl())
->setName('viewPolicy')
->setPolicyObject($conpherence)
@@ -91,7 +116,12 @@
->setName('joinPolicy')
->setPolicyObject($conpherence)
->setCapability(PhabricatorPolicyCapability::CAN_JOIN)
- ->setPolicies($policies));
+ ->setPolicies($policies))
+ ->appendChild(
+ id(new PhabricatorRemarkupControl())
+ ->setUser($user)
+ ->setName('message')
+ ->setLabel(pht('First Message')));
$dialog->appendChild($form);
diff --git a/src/applications/conpherence/controller/ConpherenceNotificationPanelController.php b/src/applications/conpherence/controller/ConpherenceNotificationPanelController.php
--- a/src/applications/conpherence/controller/ConpherenceNotificationPanelController.php
+++ b/src/applications/conpherence/controller/ConpherenceNotificationPanelController.php
@@ -83,7 +83,7 @@
array(
'href' => '/conpherence/',
),
- pht('Messages')),
+ pht('Rooms')),
$content);
$unread = id(new ConpherenceParticipantCountQuery())
diff --git a/src/applications/conpherence/controller/ConpherenceRoomListController.php b/src/applications/conpherence/controller/ConpherenceRoomListController.php
--- a/src/applications/conpherence/controller/ConpherenceRoomListController.php
+++ b/src/applications/conpherence/controller/ConpherenceRoomListController.php
@@ -33,7 +33,7 @@
$nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
if ($for_app) {
- $nav->addFilter('room/new/', pht('Create Room'));
+ $nav->addFilter('new/', pht('Create Room'));
}
id(new ConpherenceThreadSearchEngine())
diff --git a/src/applications/conpherence/controller/ConpherenceUpdateController.php b/src/applications/conpherence/controller/ConpherenceUpdateController.php
--- a/src/applications/conpherence/controller/ConpherenceUpdateController.php
+++ b/src/applications/conpherence/controller/ConpherenceUpdateController.php
@@ -188,17 +188,15 @@
$xactions[] = id(new ConpherenceTransaction())
->setTransactionType(ConpherenceTransaction::TYPE_TITLE)
->setNewValue($title);
- if ($conpherence->getIsRoom()) {
- $xactions[] = id(new ConpherenceTransaction())
- ->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
- ->setNewValue($request->getStr('viewPolicy'));
- $xactions[] = id(new ConpherenceTransaction())
- ->setTransactionType(PhabricatorTransactions::TYPE_EDIT_POLICY)
- ->setNewValue($request->getStr('editPolicy'));
- $xactions[] = id(new ConpherenceTransaction())
- ->setTransactionType(PhabricatorTransactions::TYPE_JOIN_POLICY)
- ->setNewValue($request->getStr('joinPolicy'));
- }
+ $xactions[] = id(new ConpherenceTransaction())
+ ->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
+ ->setNewValue($request->getStr('viewPolicy'));
+ $xactions[] = id(new ConpherenceTransaction())
+ ->setTransactionType(PhabricatorTransactions::TYPE_EDIT_POLICY)
+ ->setNewValue($request->getStr('editPolicy'));
+ $xactions[] = id(new ConpherenceTransaction())
+ ->setTransactionType(PhabricatorTransactions::TYPE_JOIN_POLICY)
+ ->setNewValue($request->getStr('joinPolicy'));
if (!$request->getExists('force_ajax')) {
$response_mode = 'redirect';
}
@@ -245,8 +243,11 @@
->setContent($content);
break;
case 'go-home':
- return id(new AphrontRedirectResponse())
- ->setURI($this->getApplicationURI());
+ $content = array(
+ 'href' => $this->getApplicationURI(),
+ );
+ return id(new AphrontAjaxResponse())
+ ->setContent($content);
break;
case 'redirect':
default:
@@ -323,18 +324,21 @@
$user = $request->getUser();
$remove_person = $request->getStr('remove_person');
$participants = $conpherence->getParticipants();
- if ($conpherence->getIsRoom()) {
- $message = pht(
- 'Are you sure you want to remove yourself from this room?');
- } else {
- $message = pht(
- 'Are you sure you want to remove yourself from this thread?');
+
+ $message = pht(
+ 'Are you sure you want to leave this room?');
+ $test_conpherence = clone $conpherence;
+ $test_conpherence->attachParticipants(array());
+ if (!PhabricatorPolicyFilter::hasCapability(
+ $user,
+ $test_conpherence,
+ PhabricatorPolicyCapability::CAN_VIEW)) {
if (count($participants) == 1) {
$message .= pht(
- 'The thread will be inaccessible forever and ever.');
+ ' The room will be inaccessible forever and ever.');
} else {
$message .= pht(
- 'Someone else in the thread can add you back later.');
+ ' Someone else in the room can add you back later.');
}
}
$body = phutil_tag(
@@ -345,7 +349,7 @@
require_celerity_resource('conpherence-update-css');
return id(new AphrontDialogView())
- ->setTitle(pht('Remove Participants'))
+ ->setTitle(pht('Leave Room'))
->addHiddenInput('action', 'remove_person')
->addHiddenInput('remove_person', $remove_person)
->addHiddenInput(
@@ -362,6 +366,7 @@
$request = $this->getRequest();
$user = $request->getUser();
+ $title = pht('Update Room');
$form = id(new PHUIFormLayoutView())
->appendChild($error_view)
->appendChild(
@@ -399,14 +404,13 @@
->setLabel(pht('Image')));
}
- if ($conpherence->getIsRoom()) {
- $title = pht('Update Room');
- $policies = id(new PhabricatorPolicyQuery())
- ->setViewer($user)
- ->setObject($conpherence)
- ->execute();
+ $policies = id(new PhabricatorPolicyQuery())
+ ->setViewer($user)
+ ->setObject($conpherence)
+ ->execute();
- $form->appendChild(
+ $form
+ ->appendChild(
id(new AphrontFormPolicyControl())
->setName('viewPolicy')
->setPolicyObject($conpherence)
@@ -424,9 +428,6 @@
->setPolicyObject($conpherence)
->setCapability(PhabricatorPolicyCapability::CAN_JOIN)
->setPolicies($policies));
- } else {
- $title = pht('Update Thread');
- }
require_celerity_resource('conpherence-update-css');
$view = id(new AphrontDialogView())
@@ -520,7 +521,7 @@
$nav_item = id(new ConpherenceThreadListView())
->setUser($user)
->setBaseURI($this->getApplicationURI())
- ->renderSingleThread($conpherence);
+ ->renderSingleThread($conpherence, $policy_objects);
$nav_item = hsprintf('%s', $nav_item);
break;
case ConpherenceUpdateActions::MESSAGE:
diff --git a/src/applications/conpherence/editor/ConpherenceEditor.php b/src/applications/conpherence/editor/ConpherenceEditor.php
--- a/src/applications/conpherence/editor/ConpherenceEditor.php
+++ b/src/applications/conpherence/editor/ConpherenceEditor.php
@@ -10,7 +10,7 @@
}
public function getEditorObjectsDescription() {
- return pht('Conpherence Threads');
+ return pht('Conpherence Rooms');
}
public static function createThread(
@@ -20,7 +20,7 @@
$message,
PhabricatorContentSource $source) {
- $conpherence = ConpherenceThread::initializeNewThread($creator);
+ $conpherence = ConpherenceThread::initializeNewRoom($creator);
$files = array();
$errors = array();
if (empty($participant_phids)) {
@@ -456,7 +456,7 @@
$is_leave = (($rem === array($actor_phid)) && !$add);
if ($is_join) {
- // You need CAN_JOIN to join a thread / room.
+ // You need CAN_JOIN to join a room.
PhabricatorPolicyFilter::requireCapability(
$this->requireActor(),
$object,
@@ -583,11 +583,7 @@
$href = PhabricatorEnv::getProductionURI(
'/'.$object->getMonogram().'?settings');
- if ($object->getIsRoom()) {
- $label = pht('EMAIL PREFERENCES FOR THIS ROOM');
- } else {
- $label = pht('EMAIL PREFERENCES FOR THIS MESSAGE');
- }
+ $label = pht('EMAIL PREFERENCES FOR THIS ROOM');
$body->addLinkSection($label, $href);
}
@@ -644,19 +640,15 @@
switch ($type) {
case ConpherenceTransaction::TYPE_TITLE:
- if (!$object->getIsRoom()) {
- continue;
+ if (empty($xactions)) {
+ break;
}
$missing = $this->validateIsEmptyTextField(
$object->getTitle(),
$xactions);
if ($missing) {
- if ($object->getIsRoom()) {
- $detail = pht('Room title is required.');
- } else {
- $detail = pht('Thread title can not be blank.');
- }
+ $detail = pht('Room title is required.');
$error = new PhabricatorApplicationTransactionValidationError(
$type,
pht('Required'),
@@ -704,7 +696,7 @@
$errors[] = new PhabricatorApplicationTransactionValidationError(
$type,
pht('Invalid'),
- pht('New thread member "%s" is not a valid user.', $phid),
+ pht('New room participant "%s" is not a valid user.', $phid),
$xaction);
}
}
diff --git a/src/applications/conpherence/events/ConpherenceHovercardEventListener.php b/src/applications/conpherence/events/ConpherenceHovercardEventListener.php
--- a/src/applications/conpherence/events/ConpherenceHovercardEventListener.php
+++ b/src/applications/conpherence/events/ConpherenceHovercardEventListener.php
@@ -30,8 +30,8 @@
return;
}
- $conpherence_uri = new PhutilURI(
- '/conpherence/new/?participant='.$user->getPHID());
+ $conpherence_uri = id(new PhutilURI('/conpherence/new/'))
+ ->setQueryParam('participant', $user->getPHID());
$name = pht('Send a Message');
$hovercard->addAction($name, $conpherence_uri, true);
diff --git a/src/applications/conpherence/mail/ConpherenceCreateThreadMailReceiver.php b/src/applications/conpherence/mail/ConpherenceCreateThreadMailReceiver.php
--- a/src/applications/conpherence/mail/ConpherenceCreateThreadMailReceiver.php
+++ b/src/applications/conpherence/mail/ConpherenceCreateThreadMailReceiver.php
@@ -53,7 +53,7 @@
$phids = mpull($users, 'getPHID');
$conpherence = id(new ConpherenceReplyHandler())
- ->setMailReceiver(ConpherenceThread::initializeNewThread($sender))
+ ->setMailReceiver(ConpherenceThread::initializeNewRoom($sender))
->setMailAddedParticipantPHIDs($phids)
->setActor($sender)
->setExcludeMailRecipientPHIDs($mail->loadExcludeMailRecipientPHIDs())
diff --git a/src/applications/conpherence/phid/PhabricatorConpherenceThreadPHIDType.php b/src/applications/conpherence/phid/PhabricatorConpherenceThreadPHIDType.php
--- a/src/applications/conpherence/phid/PhabricatorConpherenceThreadPHIDType.php
+++ b/src/applications/conpherence/phid/PhabricatorConpherenceThreadPHIDType.php
@@ -5,7 +5,7 @@
const TYPECONST = 'CONP';
public function getTypeName() {
- return pht('Conpherence Thread');
+ return pht('Conpherence Room');
}
public function newObject() {
diff --git a/src/applications/conpherence/policyrule/ConpherenceThreadMembersPolicyRule.php b/src/applications/conpherence/policyrule/ConpherenceThreadMembersPolicyRule.php
--- a/src/applications/conpherence/policyrule/ConpherenceThreadMembersPolicyRule.php
+++ b/src/applications/conpherence/policyrule/ConpherenceThreadMembersPolicyRule.php
@@ -8,15 +8,19 @@
}
public function getObjectPolicyName() {
- return pht('Thread Members');
+ return pht('Room Participants');
}
public function getPolicyExplanation() {
- return pht('Members of this thread can take this action.');
+ return pht('Participants in this room can take this action.');
}
public function getRuleDescription() {
- return pht('thread members');
+ return pht('room participants');
+ }
+
+ public function getObjectPolicyIcon() {
+ return 'fa-comments';
}
public function canApplyToObject(PhabricatorPolicyInterface $object) {
diff --git a/src/applications/conpherence/query/ConpherenceThreadQuery.php b/src/applications/conpherence/query/ConpherenceThreadQuery.php
--- a/src/applications/conpherence/query/ConpherenceThreadQuery.php
+++ b/src/applications/conpherence/query/ConpherenceThreadQuery.php
@@ -8,7 +8,6 @@
private $phids;
private $ids;
private $participantPHIDs;
- private $isRoom;
private $needParticipants;
private $needWidgetData;
private $needCropPics;
@@ -71,11 +70,6 @@
return $this;
}
- public function withIsRoom($bool) {
- $this->isRoom = $bool;
- return $this;
- }
-
public function setAfterTransactionID($id) {
$this->afterTransactionID = $id;
return $this;
@@ -166,16 +160,6 @@
id(new ConpherenceParticipant())->getTableName());
}
- $viewer = $this->getViewer();
- if ($this->shouldJoinForViewer($viewer)) {
- $joins[] = qsprintf(
- $conn_r,
- 'LEFT JOIN %T v ON v.conpherencePHID = conpherence_thread.phid '.
- 'AND v.participantPHID = %s',
- id(new ConpherenceParticipant())->getTableName(),
- $viewer->getPHID());
- }
-
if (strlen($this->fulltext)) {
$joins[] = qsprintf(
$conn_r,
@@ -187,15 +171,6 @@
return implode(' ', $joins);
}
- private function shouldJoinForViewer(PhabricatorUser $viewer) {
- if ($viewer->isLoggedIn() &&
- $this->ids === null &&
- $this->phids === null) {
- return true;
- }
- return false;
- }
-
protected function buildWhereClause(AphrontDatabaseConnection $conn_r) {
$where = array();
@@ -222,13 +197,6 @@
$this->participantPHIDs);
}
- if ($this->isRoom !== null) {
- $where[] = qsprintf(
- $conn_r,
- 'conpherence_thread.isRoom = %d',
- (int)$this->isRoom);
- }
-
if (strlen($this->fulltext)) {
$where[] = qsprintf(
$conn_r,
@@ -236,17 +204,6 @@
$this->fulltext);
}
- $viewer = $this->getViewer();
- if ($this->shouldJoinForViewer($viewer)) {
- $where[] = qsprintf(
- $conn_r,
- 'conpherence_thread.isRoom = 1 OR v.participantPHID IS NOT NULL');
- } else if ($this->phids === null && $this->ids === null) {
- $where[] = qsprintf(
- $conn_r,
- 'conpherence_thread.isRoom = 1');
- }
-
return $this->formatWhereClause($where);
}
diff --git a/src/applications/conpherence/query/ConpherenceThreadSearchEngine.php b/src/applications/conpherence/query/ConpherenceThreadSearchEngine.php
--- a/src/applications/conpherence/query/ConpherenceThreadSearchEngine.php
+++ b/src/applications/conpherence/query/ConpherenceThreadSearchEngine.php
@@ -4,7 +4,7 @@
extends PhabricatorApplicationSearchEngine {
public function getResultTypeDescription() {
- return pht('Threads');
+ return pht('Rooms');
}
public function getApplicationClassName() {
@@ -20,10 +20,6 @@
$saved->setParameter('fulltext', $request->getStr('fulltext'));
- $saved->setParameter(
- 'threadType',
- $request->getStr('threadType'));
-
return $saved;
}
@@ -41,21 +37,6 @@
$query->withFulltext($fulltext);
}
- $thread_type = $saved->getParameter('threadType');
- if (idx($this->getTypeOptions(), $thread_type)) {
- switch ($thread_type) {
- case 'rooms':
- $query->withIsRoom(true);
- break;
- case 'messages':
- $query->withIsRoom(false);
- break;
- case 'both':
- $query->withIsRoom(null);
- break;
- }
- }
-
return $query;
}
@@ -77,13 +58,7 @@
id(new AphrontFormTextControl())
->setName('fulltext')
->setLabel(pht('Contains Words'))
- ->setValue($fulltext))
- ->appendControl(
- id(new AphrontFormSelectControl())
- ->setLabel(pht('Type'))
- ->setName('threadType')
- ->setOptions($this->getTypeOptions())
- ->setValue($saved->getParameter('threadType')));
+ ->setValue($fulltext));
}
protected function getURI($path) {
@@ -99,7 +74,6 @@
if ($this->requireViewer()->isLoggedIn()) {
$names['participant'] = pht('Joined Rooms');
- $names['messages'] = pht('All Messages');
}
return $names;
@@ -112,15 +86,8 @@
switch ($query_key) {
case 'all':
- $query->setParameter('threadType', 'rooms');
return $query;
case 'participant':
- $query->setParameter('threadType', 'rooms');
- return $query->setParameter(
- 'participantPHIDs',
- array($this->requireViewer()->getPHID()));
- case 'messages':
- $query->setParameter('threadType', 'messages');
return $query->setParameter(
'participantPHIDs',
array($this->requireViewer()->getPHID()));
@@ -145,7 +112,7 @@
$viewer = $this->requireViewer();
- $policy_objects = ConpherenceThread::loadPolicyObjects(
+ $policy_objects = ConpherenceThread::loadViewPolicyObjects(
$viewer,
$conpherences);
@@ -192,11 +159,7 @@
$title = $conpherence->getDisplayTitle($viewer);
$monogram = $conpherence->getMonogram();
- if ($conpherence->getIsRoom()) {
- $icon_name = $conpherence->getPolicyIconName($policy_objects);
- } else {
- $icon_name = 'fa-envelope-o';
- }
+ $icon_name = $conpherence->getPolicyIconName($policy_objects);
$icon = id(new PHUIIconView())
->setIconFont($icon_name);
$item = id(new PHUIObjectItemView())
@@ -256,14 +219,6 @@
return $list;
}
- private function getTypeOptions() {
- return array(
- 'rooms' => pht('Rooms'),
- 'messages' => pht('Messages'),
- 'both' => pht('Both'),
- );
- }
-
private function loadContextMessages(array $threads, $fulltext) {
$phids = mpull($threads, 'getPHID');
diff --git a/src/applications/conpherence/storage/ConpherenceThread.php b/src/applications/conpherence/storage/ConpherenceThread.php
--- a/src/applications/conpherence/storage/ConpherenceThread.php
+++ b/src/applications/conpherence/storage/ConpherenceThread.php
@@ -9,7 +9,6 @@
protected $title;
protected $imagePHIDs = array();
- protected $isRoom = 0;
protected $messageCount;
protected $recentParticipantPHIDs = array();
protected $mailKey;
@@ -24,30 +23,18 @@
private $widgetData = self::ATTACHABLE;
private $images = self::ATTACHABLE;
- public static function initializeNewThread(PhabricatorUser $sender) {
+ public static function initializeNewRoom(PhabricatorUser $sender) {
+ $default_policy = id(new ConpherenceThreadMembersPolicyRule())
+ ->getObjectPolicyFullKey();
return id(new ConpherenceThread())
->setMessageCount(0)
->setTitle('')
->attachParticipants(array())
->attachFilePHIDs(array())
->attachImages(array())
- ->setViewPolicy(PhabricatorPolicies::POLICY_USER)
- ->setEditPolicy(PhabricatorPolicies::POLICY_USER)
- ->setJoinPolicy(PhabricatorPolicies::POLICY_USER);
- }
-
- public static function initializeNewRoom(PhabricatorUser $creator) {
-
- return id(new ConpherenceThread())
- ->setIsRoom(1)
- ->setMessageCount(0)
- ->setTitle('')
- ->attachParticipants(array())
- ->attachFilePHIDs(array())
- ->attachImages(array())
- ->setViewPolicy(PhabricatorPolicies::POLICY_USER)
- ->setEditPolicy($creator->getPHID())
- ->setJoinPolicy(PhabricatorPolicies::POLICY_USER);
+ ->setViewPolicy($default_policy)
+ ->setEditPolicy($default_policy)
+ ->setJoinPolicy($default_policy);
}
protected function getConfiguration() {
@@ -59,15 +46,11 @@
),
self::CONFIG_COLUMN_SCHEMA => array(
'title' => 'text255?',
- 'isRoom' => 'bool',
'messageCount' => 'uint64',
'mailKey' => 'text20',
'joinPolicy' => 'policy',
),
self::CONFIG_KEY_SCHEMA => array(
- 'key_room' => array(
- 'columns' => array('isRoom', 'dateModified'),
- ),
'key_phid' => null,
'phid' => array(
'columns' => array('phid'),
@@ -214,7 +197,7 @@
return $title;
}
- return pht('Private Correspondence');
+ return pht('Private Room');
}
/**
@@ -382,15 +365,13 @@
}
public function getPolicy($capability) {
- if ($this->getIsRoom()) {
- switch ($capability) {
- case PhabricatorPolicyCapability::CAN_VIEW:
- return $this->getViewPolicy();
- case PhabricatorPolicyCapability::CAN_EDIT:
- return $this->getEditPolicy();
- case PhabricatorPolicyCapability::CAN_JOIN:
- return $this->getJoinPolicy();
- }
+ switch ($capability) {
+ case PhabricatorPolicyCapability::CAN_VIEW:
+ return $this->getViewPolicy();
+ case PhabricatorPolicyCapability::CAN_EDIT:
+ return $this->getEditPolicy();
+ case PhabricatorPolicyCapability::CAN_JOIN:
+ return $this->getJoinPolicy();
}
return PhabricatorPolicies::POLICY_NOONE;
}
@@ -401,12 +382,10 @@
return true;
}
- if ($this->getIsRoom()) {
- switch ($capability) {
- case PhabricatorPolicyCapability::CAN_EDIT:
- case PhabricatorPolicyCapability::CAN_JOIN:
- return false;
- }
+ switch ($capability) {
+ case PhabricatorPolicyCapability::CAN_EDIT:
+ case PhabricatorPolicyCapability::CAN_JOIN:
+ return false;
}
$participants = $this->getParticipants();
@@ -414,35 +393,28 @@
}
public function describeAutomaticCapability($capability) {
- if ($this->getIsRoom()) {
- switch ($capability) {
- case PhabricatorPolicyCapability::CAN_VIEW:
- return pht('Participants in a room can always view it.');
- break;
- }
- } else {
- return pht('Participants in a thread can always view and edit it.');
+ switch ($capability) {
+ case PhabricatorPolicyCapability::CAN_VIEW:
+ return pht('Participants in a room can always view it.');
+ break;
}
}
- public static function loadPolicyObjects(
+ public static function loadViewPolicyObjects(
PhabricatorUser $viewer,
array $conpherences) {
assert_instances_of($conpherences, __CLASS__);
- $grouped = mgroup($conpherences, 'getIsRoom');
- $rooms = idx($grouped, 1, array());
-
$policies = array();
- foreach ($rooms as $room) {
- $policies[] = $room->getViewPolicy();
+ foreach ($conpherences as $room) {
+ $policies[$room->getViewPolicy()] = 1;
}
$policy_objects = array();
if ($policies) {
$policy_objects = id(new PhabricatorPolicyQuery())
->setViewer($viewer)
- ->withPHIDs($policies)
+ ->withPHIDs(array_keys($policies))
->execute();
}
@@ -452,13 +424,7 @@
public function getPolicyIconName(array $policy_objects) {
assert_instances_of($policy_objects, 'PhabricatorPolicy');
- if ($this->getIsRoom()) {
- $icon = $policy_objects[$this->getViewPolicy()]->getIcon();
- } else if (count($this->getRecentParticipantPHIDs()) > 2) {
- $icon = 'fa-users';
- } else {
- $icon = 'fa-user';
- }
+ $icon = $policy_objects[$this->getViewPolicy()]->getIcon();
return $icon;
}
diff --git a/src/applications/conpherence/storage/ConpherenceTransaction.php b/src/applications/conpherence/storage/ConpherenceTransaction.php
--- a/src/applications/conpherence/storage/ConpherenceTransaction.php
+++ b/src/applications/conpherence/storage/ConpherenceTransaction.php
@@ -63,11 +63,7 @@
case PhabricatorTransactions::TYPE_EDIT_POLICY:
case PhabricatorTransactions::TYPE_JOIN_POLICY:
case self::TYPE_PICTURE:
- if ($this->getObject()->getIsRoom()) {
- return $this->getRoomTitle();
- } else {
- return $this->getThreadTitle();
- }
+ return $this->getRoomTitle();
break;
case self::TYPE_FILES:
$add = array_diff($new, $old);
@@ -180,62 +176,6 @@
}
}
- private function getThreadTitle() {
- $author_phid = $this->getAuthorPHID();
-
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- switch ($this->getTransactionType()) {
- case self::TYPE_TITLE:
- if ($old && $new) {
- $title = pht(
- '%s renamed this thread from "%s" to "%s".',
- $this->renderHandleLink($author_phid),
- $old,
- $new);
- } else if ($old) {
- $title = pht(
- '%s deleted the thread name "%s".',
- $this->renderHandleLink($author_phid),
- $old);
- } else {
- $title = pht(
- '%s named this thread "%s".',
- $this->renderHandleLink($author_phid),
- $new);
- }
- return $title;
- break;
- case self::TYPE_PICTURE:
- return pht(
- '%s updated the room image.',
- $this->renderHandleLink($author_phid));
- break;
- case PhabricatorTransactions::TYPE_VIEW_POLICY:
- return pht(
- '%s changed the visibility of this thread from "%s" to "%s".',
- $this->renderHandleLink($author_phid),
- $this->renderPolicyName($old, 'old'),
- $this->renderPolicyName($new, 'new'));
- break;
- case PhabricatorTransactions::TYPE_EDIT_POLICY:
- return pht(
- '%s changed the edit policy of this thread from "%s" to "%s".',
- $this->renderHandleLink($author_phid),
- $this->renderPolicyName($old, 'old'),
- $this->renderPolicyName($new, 'new'));
- break;
- case PhabricatorTransactions::TYPE_JOIN_POLICY:
- return pht(
- '%s changed the join policy of this thread from "%s" to "%s".',
- $this->renderHandleLink($author_phid),
- $this->renderPolicyName($old, 'old'),
- $this->renderPolicyName($new, 'new'));
- break;
- }
- }
-
public function getRequiredHandlePHIDs() {
$phids = parent::getRequiredHandlePHIDs();
diff --git a/src/applications/conpherence/view/ConpherenceDurableColumnView.php b/src/applications/conpherence/view/ConpherenceDurableColumnView.php
--- a/src/applications/conpherence/view/ConpherenceDurableColumnView.php
+++ b/src/applications/conpherence/view/ConpherenceDurableColumnView.php
@@ -119,21 +119,9 @@
'quicksandConfig' => $this->getQuicksandConfig(),
));
- $policies = array();
- $conpherences = $this->getConpherences();
- foreach ($conpherences as $conpherence) {
- if (!$conpherence->getIsRoom()) {
- continue;
- }
- $policies[] = $conpherence->getViewPolicy();
- }
- $policy_objects = array();
- if ($policies) {
- $policy_objects = id(new PhabricatorPolicyQuery())
- ->setViewer($this->getUser())
- ->withPHIDs($policies)
- ->execute();
- }
+ $policy_objects = ConpherenceThread::loadViewPolicyObjects(
+ $this->getUser(),
+ $this->getConpherences());
$this->setPolicyObjects($policy_objects);
$classes = array();
@@ -224,13 +212,10 @@
assert_instances_of($policy_objects, 'PhabricatorPolicy');
- $icon = null;
- if ($conpherence->getIsRoom()) {
- $icon = $conpherence->getPolicyIconName($policy_objects);
- $icon = id(new PHUIIconView())
- ->addClass('mmr')
- ->setIconFont($icon);
- }
+ $icon = $conpherence->getPolicyIconName($policy_objects);
+ $icon = id(new PHUIIconView())
+ ->addClass('mmr')
+ ->setIconFont($icon);
return $icon;
}
@@ -391,11 +376,6 @@
}
private function getHeaderActionsConfig(ConpherenceThread $conpherence) {
- if ($conpherence->getIsRoom()) {
- $rename_label = pht('Edit Room');
- } else {
- $rename_label = pht('Rename Thread');
- }
$can_edit = PhabricatorPolicyFilter::hasCapability(
$this->getUser(),
$conpherence,
@@ -410,7 +390,7 @@
'key' => ConpherenceUpdateActions::ADD_PERSON,
),
array(
- 'name' => $rename_label,
+ 'name' => pht('Edit Room'),
'disabled' => !$can_edit,
'href' => '/conpherence/update/'.$conpherence->getID().'/?nopic',
'icon' => 'fa-pencil',
@@ -445,7 +425,7 @@
array(
'class' => 'mmb',
),
- pht('You do not have any messages yet.')),
+ pht('You are not in any rooms yet.')),
javelin_tag(
'a',
array(
@@ -453,7 +433,7 @@
'class' => 'button grey',
'sigil' => 'workflow',
),
- pht('Send a Message')),
+ pht('Create a Room')),
);
}
diff --git a/src/applications/conpherence/view/ConpherenceLayoutView.php b/src/applications/conpherence/view/ConpherenceLayoutView.php
--- a/src/applications/conpherence/view/ConpherenceLayoutView.php
+++ b/src/applications/conpherence/view/ConpherenceLayoutView.php
@@ -147,7 +147,7 @@
array(
'class' => 'text',
),
- pht('You do not have any messages yet.')),
+ pht('You are not in any rooms yet.')),
javelin_tag(
'a',
array(
@@ -155,7 +155,7 @@
'class' => 'button grey',
'sigil' => 'workflow',
),
- pht('Send a Message')),
+ pht('Create a Room')),
)),
javelin_tag(
'div',
diff --git a/src/applications/conpherence/view/ConpherenceThreadListView.php b/src/applications/conpherence/view/ConpherenceThreadListView.php
--- a/src/applications/conpherence/view/ConpherenceThreadListView.php
+++ b/src/applications/conpherence/view/ConpherenceThreadListView.php
@@ -2,7 +2,7 @@
final class ConpherenceThreadListView extends AphrontView {
- const SEE_MORE_LIMIT = 5;
+ const SEE_MORE_LIMIT = 15;
private $baseURI;
private $threads;
@@ -25,40 +25,25 @@
->addClass('conpherence-menu')
->setID('conpherence-menu');
- $policy_objects = ConpherenceThread::loadPolicyObjects(
+ $policy_objects = ConpherenceThread::loadViewPolicyObjects(
$this->getUser(),
$this->threads);
- $grouped = mgroup($this->threads, 'getIsRoom');
- $rooms = idx($grouped, 1, array());
- $this->addRoomsToMenu($menu, $rooms, $policy_objects);
- $messages = idx($grouped, 0, array());
- $this->addMessagesToMenu($menu, $messages);
+ $this->addRoomsToMenu($menu, $this->threads, $policy_objects);
return $menu;
}
- public function renderSingleThread(ConpherenceThread $thread) {
- $policy_objects = id(new PhabricatorPolicyQuery())
- ->setViewer($this->getUser())
- ->setObject($thread)
- ->execute();
+ public function renderSingleThread(
+ ConpherenceThread $thread,
+ array $policy_objects) {
+ assert_instances_of($policy_objects, 'PhabricatorPolicy');
return $this->renderThread($thread, $policy_objects);
}
- public function renderThreadsHTML() {
- $thread_html = array();
-
- foreach ($this->threads as $thread) {
- $thread_html[] = $this->renderSingleThread($thread);
- }
-
- return phutil_implode_html('', $thread_html);
- }
-
private function renderThreadItem(
ConpherenceThread $thread,
- $policy_objects = array()) {
+ array $policy_objects) {
return id(new PHUIListItemView())
->setType(PHUIListItemView::TYPE_CUSTOM)
->setName($this->renderThread($thread, $policy_objects));
@@ -72,12 +57,9 @@
$uri = '/'.$thread->getMonogram();
$data = $thread->getDisplayData($user);
- $icon = null;
- if ($thread->getIsRoom()) {
- $icon = id(new PHUIIconView())
- ->addClass('msr')
- ->setIconFont($thread->getPolicyIconName($policy_objects));
- }
+ $icon = id(new PHUIIconView())
+ ->addClass('msr')
+ ->setIconFont($thread->getPolicyIconName($policy_objects));
$title = phutil_tag(
'span',
array(),
@@ -141,7 +123,7 @@
$create_item = id(new PHUIListItemView())
->setType(PHUIListItemView::TYPE_LINK)
- ->setHref('/conpherence/room/new/')
+ ->setHref('/conpherence/new/')
->setWorkflow(true)
->setName(pht('Create a Room'));
$menu->addMenuItem($create_item);
@@ -153,25 +135,6 @@
return $menu;
}
- private function addMessagesToMenu(
- PHUIListView $menu,
- array $conpherences) {
-
- $header = $this->renderMenuItemHeader(
- pht('Messages'),
- 'conpherence-message-list-header');
- $menu->addMenuItem($header);
-
- if (empty($conpherences)) {
- $menu->addMenuItem($this->getNoMessagesMenuItem());
- return $menu;
- }
-
- $this->addThreadsToMenu($menu, $conpherences, array());
-
- return $menu;
- }
-
private function addThreadsToMenu(
PHUIListView $menu,
array $threads,
@@ -187,21 +150,14 @@
$more_threads = array_slice($threads, self::SEE_MORE_LIMIT);
}
- $is_room = false;
foreach ($show_threads as $thread) {
$item = $this->renderThreadItem($thread, $policy_objects);
$menu->addMenuItem($item);
- $is_room = $thread->getIsRoom();
}
if ($more_threads) {
- if ($is_room) {
- $search_uri = '/conpherence/search/query/participant/';
- $sigil = 'more-room';
- } else {
- $search_uri = '/conpherence/search/query/messages/';
- $sigil = 'more-message';
- }
+ $search_uri = '/conpherence/search/query/participant/';
+ $sigil = 'more-room';
$more_item = id(new PHUIListItemView())
->setType(PHUIListItemView::TYPE_LINK)
@@ -251,19 +207,6 @@
return $item;
}
- private function getNoMessagesMenuItem() {
- $message = phutil_tag(
- 'div',
- array(
- 'class' => 'no-conpherences-menu-item',
- ),
- pht('No Messages'));
-
- return id(new PHUIListItemView())
- ->setType(PHUIListItemView::TYPE_CUSTOM)
- ->setName($message);
- }
-
private function getNoRoomsMenuItem() {
$message = phutil_tag(
'div',
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileController.php b/src/applications/people/controller/PhabricatorPeopleProfileController.php
--- a/src/applications/people/controller/PhabricatorPeopleProfileController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileController.php
@@ -136,7 +136,8 @@
$class = 'PhabricatorConpherenceApplication';
if (PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) {
- $href = '/conpherence/new/?participant='.$user->getPHID();
+ $href = id(new PhutilURI('/conpherence/new/'))
+ ->setQueryParam('participant', $user->getPHID());
$image = id(new PHUIIconView())
->setIconFont('fa-comments');
$button = id(new PHUIButtonView())
diff --git a/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js b/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js
--- a/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js
+++ b/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js
@@ -321,6 +321,7 @@
});
}
});
+
threadManager.syncWorkflow(workflow, 'submit');
}
);
@@ -331,9 +332,25 @@
function (e) {
var href = config.widgetBaseUpdateURI + _loadedWidgetsID + '/';
var data = e.getNodeData('remove-person');
- // we end up re-directing to conpherence home
+
+ // While the user is removing themselves, disable the notification
+ // update behavior. If we don't do this, the user can get an error
+ // when they remove themselves about permissions as the notification
+ // code tries to load what jist happened.
+ var threadManager = JX.ConpherenceThreadManager.getInstance();
+ var loadedPhid = threadManager.getLoadedThreadPHID();
+ threadManager.setLoadedThreadPHID(null);
+
new JX.Workflow(href, data)
- .start();
+ .setCloseHandler(function() {
+ threadManager.setLoadedThreadPHID(loadedPhid);
+ })
+ // we re-direct to conpherence home so the thread manager will
+ // fix itself there
+ .setHandler(function(r) {
+ JX.$U(r.href).go();
+ })
+ .start();
}
);

File Metadata

Mime Type
text/plain
Expires
Thu, May 9, 7:41 PM (3 w, 3 d ago)
Storage Engine
amazon-s3
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
phabricator/secure/cg/xu/zk3gqqqzurelksjf
Default Alt Text
D13351.diff (65 KB)

Event Timeline