2013-01-25 02:23:05 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
abstract class ConpherenceController extends PhabricatorController {
|
2014-07-10 00:12:48 +02:00
|
|
|
|
Conpherence - make the durable column kind of work and stuff
Summary:
Ref T7014. This hooks up the durable column such that when you open it up it loads your most recent Conpherence. You can then switch amongst the various widgets and stuff and everything works nicely.
Except...
- scroll bar does not work
- also doesn't work at HEAD when I add a ton of text to the UI with no changes? (wrapped $copy in array_fill(0, 1000, $copy))
- "widget selector" does not collapse when you select something else
- this part wasn't really specified so I used the aphlict dropdown stuff. didn't want to keep working on that if this was the wrong UI choice
- can not edit title
- do we still want that to be done by clicking on the title, which pops a dialogue?
- can not add participants or calendar events
- what should this UI be? maybe just a button on the top for "participants" and a button on the bottom for calendar? both on top?
- this is not pixel perfect to the mock or two I've seen around. Aside from generally being bad at that, I definitely didn't get the name + timestamps formatting correctly, because the standard DOM of that has timestamp FIRST which appears second due to a "float right". Seemed like a lot of special-casing for what might not even be that important in the UI so I punted. (And again, there's likely many unknown ways in which this isn't pixel perfect)
There's also code quality issues
- `ConpherenceWidgetConfigConstants` is hopefully temporary or at least gets more sleek as we keep progressing here
- copied some CSS from main Conpherence app
- DOM structure is pretty different
- there's some minor CSS tweaks too given the different width (not to mention the DOM structure being different)
- copied some JS from behavior-pontificate.js to sync threads relative to aphlict updates
- JS in general is like a better version of existing JS; these should collapse I'd hope?
- maybe the aphlict-behavior-dropdown change was badsauce?
...but all that said, this definitely feels really nice and I feel like adding stuff is going to be really easy compared to how normal Conpherence is.
Also includes a bonus bug fix - we now correctly update participation. The user would encounter this issue if they were in a conpherence that got some updates and then they went to a different page; they would have unread status for the messages that were ajax'd in. This patch fixes that by making sure we mark participation up to date with the proper transaction in all cases.
Test Plan: hit "\" to invoke the column and saw nice loading UI and my latest conpherence load. sent messages and verified they received A-OK by looking in DOM console. toggled various widges and verified they rendered correctly. opened up a second browser with a second user on the thread, sent a message, and it was received in a nice asynchronous fashion
Reviewers: chad, epriestley
Reviewed By: epriestley
Subscribers: Korvin, epriestley
Maniphest Tasks: T7014
Differential Revision: https://secure.phabricator.com/D11968
2015-03-05 19:33:39 +01:00
|
|
|
private $conpherence;
|
|
|
|
|
|
|
|
public function setConpherence(ConpherenceThread $conpherence) {
|
|
|
|
$this->conpherence = $conpherence;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
public function getConpherence() {
|
|
|
|
return $this->conpherence;
|
|
|
|
}
|
2013-01-25 02:23:05 +01:00
|
|
|
|
2015-01-15 21:41:26 +01:00
|
|
|
public function buildApplicationMenu() {
|
2013-06-05 17:41:43 +02:00
|
|
|
$nav = new PHUIListView();
|
Fix every HTML issue I could find
Summary:
I attempted to test every interface. I probably missed some stuff, but I at least have some level of confidence that the `phutil_tag` branch is fairly stable.
Fixed these issues:
[1] Fixed a Herald issue with object links in transcripts. Some actions return
links; this was previously hard-coded.
[2] DarkConsole refactoring created an issue where the "`" event handler registered too many times.
[3] Fixed a bug where `strlen($value)` was being checked, but fields may now return array(). Possibly we should implement phutil_is_empty_html() or similar.
[4] Fixed a undefined variable issue for image edit transactions.
[5] Fixed an issue with rendering participant transactions. This required phutil_safe_html() because `pht()` can't handle `array()` for `%s`.
[6] Fixed an issue where feed was entirely overescaped by reverting an overly ambitious render_tag -> tag.
[7] Fixed an issue with strict tables and inserting `''` instead of `0` into an integer column.
[8] Fixed an issue where • was shown escaped.
[9] Fixed an issue where "no data" was overescaped.
[10] Fixed an issue with strict tables and inserting `''` instead of `0` into an integer column.
[11] Fixed an issue with strict tables and inserting `''`.
[12] Fixed an issue with missing space after ":" for mini panels.
Encountered (but did not fix) these issues:
[X1] "e" works incorrectly on comments you are not allowed to edit. Did not fix.
[X2] Coverage currently interacts incorrectly with "--everything" for Phutil tests.
Test Plan:
- Viewed Differential.
- Created a diff via copy/paste.
- Viewed standalone diff.
- Jumped to diff via changeset table.
- Created a revision.
- Updated revision.
- Added a comment.
- Edited revision dependencies.
- Edited revision tasks.
- Viewed MetaMTA transcripts.
- Viewed Herald transcripts [1].
- Downloaded raw diff.
- Flagged / unflagged revision.
- Added/edited/deleted inline comment.
- Collapsed/expanded file.
- Did show raw left.
- Did show raw right.
- Checked previews for available actions.
- Clicked remarkup buttons
- Used filetree view.
- Used keyboard: F, j, k, J, K, n, p, t, h, "?" [2] [X1].
- Created a meme.
- Uploaded a file via drag and drop.
- Viewed a revision with no reviewers.
- Viewed a revision with >100 files.
- Viewed various other revisions [3].
- Viewed an image diff.
- Added image diff inline comments.
- Viewed Maniphest.
- Ran various queries.
- Created task.
- Created similar task.
- Added comments to tasks.
- Ran custom query.
- Saved custom query.
- Edited custom queries.
- Drag-reordered tasks.
- Batch edited tasks.
- Exported tasks to excel.
- Looked at reports (issue in T2311 notwithstanding).
- Viewed Diffusion.
- Browsed Git, SVN, HG repositories.
- Looked at history, browse, change, commit views.
- Viewed audit.
- Performed various audit searches.
- Viewed Paste.
- Performed paste searches.
- Created, edited, forked paste.
- Viewed Phriction.
- Edited a page.
- Viewed edit history.
- Used search typeahead to search for user / application.
- Used search to search for text.
- Viewed Phame.
- Viewed Blog, Post.
- Viewed live post.
- Published/unpublished post.
- Previewed post.
- Viewed Pholio.
- Edited/commented mock.
- Viewed ponder.
- Viewed question.
- Added answer/comment.
- Viewed Diviner.
- Viewed Conpherence [4] [5].
- Made Conpherence updates.
- Viewed calendar.
- Created status.
- Viewed status.
- Viewed Feed [6].
- Viewed Projects.
- Viewed project detail.
- Edited project.
- Viewed Owners.
- Viewed package detail.
- Edited package [7].
- Viewed flags.
- Edited flag.
- Deleted flag.
- Viewed Herald.
- Viewed rules.
- Created rule.
- Edited rule.
- Viewed edit log.
- Viewed transcripts.
- Inspected a transcript.
- Viewed People.
- Viewed list.
- Administrated user.
- Checked username/delete stuff.
- Looked at create/import LDAP/activity logs.
- Looked at a user profile.
- Looked at user about page.
- Looked at Repositories.
- Edited repository.
- Edited arcanist project.
- Looked at daemons.
- Looked at all daemons [8].
- Viewed combined log.
- Looked at configuration.
- Edited configuration.
- Looked at setup issues [9].
- Looked at current settings.
- Looked at application list.
- Installed / uninstalled applications [10].
- Looked at mailing lists.
- Created a mailing list.
- Edited a mailing list.
- Looked at sent mail.
- Looked at received mail.
- Looked at send/receive tests.
- Looked at settings.
- Clicked through all the panels.
- Looked at slowvote.
- Created a slowvote [11].
- Voted in a slowvote.
- Looked at Macro.
- Created a macro.
- Edited a macro.
- Commented on a macro.
- Looked at Countdown.
- Created a Countdown.
- Looked at it.
- Looked at Drydock.
- Poked around a bit.
- Looked at Fact.
- Poked around a bit.
- Looked at files.
- Looked at a file.
- Uploaded a file.
- Looked at Conduit.
- Made a Conduit call.
- Looked at UIExamples.
- Looked at PHPAST.
- Looked at PHIDs.
- Looked at notification menu.
- Looked at notification detail.
- Logged out.
- Logged in.
- Looked at homepage [12].
- Ran `arc unit --everything --no-coverage` [X2].
Reviewers: vrana, btrahan
Reviewed By: vrana
CC: aran
Maniphest Tasks: T2432
Differential Revision: https://secure.phabricator.com/D4807
2013-02-05 02:06:34 +01:00
|
|
|
|
2013-04-01 21:50:39 +02:00
|
|
|
$nav->newLink(
|
2015-06-25 22:14:20 +02:00
|
|
|
pht('New Room'),
|
2013-04-01 21:50:39 +02:00
|
|
|
$this->getApplicationURI('new/'));
|
2013-01-25 02:23:05 +01:00
|
|
|
|
2013-05-30 02:21:07 +02:00
|
|
|
$nav->addMenuItem(
|
2013-06-05 17:41:43 +02:00
|
|
|
id(new PHUIListItemView())
|
2013-05-30 02:21:07 +02:00
|
|
|
->setName(pht('Add Participants'))
|
2013-06-05 17:41:43 +02:00
|
|
|
->setType(PHUIListItemView::TYPE_LINK)
|
2013-05-30 02:21:07 +02:00
|
|
|
->setHref('#')
|
|
|
|
->addSigil('conpherence-widget-adder')
|
|
|
|
->setMetadata(array('widget' => 'widgets-people')));
|
|
|
|
|
|
|
|
$nav->addMenuItem(
|
2013-06-05 17:41:43 +02:00
|
|
|
id(new PHUIListItemView())
|
2013-05-30 02:21:07 +02:00
|
|
|
->setName(pht('New Calendar Item'))
|
2013-06-05 17:41:43 +02:00
|
|
|
->setType(PHUIListItemView::TYPE_LINK)
|
2014-02-06 19:10:07 +01:00
|
|
|
->setHref('/calendar/event/create/')
|
2013-05-30 02:21:07 +02:00
|
|
|
->addSigil('conpherence-widget-adder')
|
|
|
|
->setMetadata(array('widget' => 'widgets-calendar')));
|
|
|
|
|
2013-01-25 02:23:05 +01:00
|
|
|
return $nav;
|
|
|
|
}
|
|
|
|
|
2015-01-06 21:34:58 +01:00
|
|
|
protected function buildApplicationCrumbs() {
|
2015-03-24 21:04:33 +01:00
|
|
|
return $this->buildConpherenceApplicationCrumbs();
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function buildConpherenceApplicationCrumbs($is_rooms = false) {
|
2013-01-25 02:23:05 +01:00
|
|
|
$crumbs = parent::buildApplicationCrumbs();
|
2015-01-28 18:33:49 +01:00
|
|
|
$crumbs->setBorder(true);
|
2013-01-25 02:23:05 +01:00
|
|
|
|
2015-03-24 21:04:33 +01:00
|
|
|
if ($is_rooms) {
|
|
|
|
$crumbs
|
|
|
|
->addAction(
|
|
|
|
id(new PHUIListItemView())
|
|
|
|
->setName(pht('New Room'))
|
2015-06-25 22:14:20 +02:00
|
|
|
->setHref($this->getApplicationURI('new/'))
|
2015-03-24 21:04:33 +01:00
|
|
|
->setIcon('fa-plus-square')
|
|
|
|
->setWorkflow(true));
|
|
|
|
} else {
|
|
|
|
$crumbs
|
|
|
|
->addAction(
|
|
|
|
id(new PHUIListItemView())
|
2015-06-25 22:14:20 +02:00
|
|
|
->setName(pht('New Room'))
|
2015-03-24 21:04:33 +01:00
|
|
|
->setHref($this->getApplicationURI('new/'))
|
|
|
|
->setIcon('fa-plus-square')
|
|
|
|
->setWorkflow(true))
|
|
|
|
->addAction(
|
|
|
|
id(new PHUIListItemView())
|
2015-06-25 22:14:20 +02:00
|
|
|
->setName(pht('Room'))
|
2015-03-24 21:04:33 +01:00
|
|
|
->setHref('#')
|
|
|
|
->setIcon('fa-bars')
|
|
|
|
->setStyle('display: none;')
|
|
|
|
->addClass('device-widgets-selector')
|
|
|
|
->addSigil('device-widgets-selector'));
|
|
|
|
}
|
2013-01-25 02:23:05 +01:00
|
|
|
return $crumbs;
|
|
|
|
}
|
|
|
|
|
2015-03-26 20:24:29 +01:00
|
|
|
protected function buildHeaderPaneContent(
|
|
|
|
ConpherenceThread $conpherence,
|
|
|
|
array $policy_objects) {
|
|
|
|
assert_instances_of($policy_objects, 'PhabricatorPolicy');
|
|
|
|
|
2013-05-23 01:05:47 +02:00
|
|
|
$crumbs = $this->buildApplicationCrumbs();
|
2015-03-31 21:45:32 +02:00
|
|
|
$data = $conpherence->getDisplayData($this->getViewer());
|
2013-05-23 01:05:47 +02:00
|
|
|
$crumbs->addCrumb(
|
2015-01-23 20:35:09 +01:00
|
|
|
id(new PHUICrumbView())
|
2015-03-31 21:45:32 +02:00
|
|
|
->setName($data['title'])
|
2013-05-24 19:50:18 +02:00
|
|
|
->setHref($this->getApplicationURI('update/'.$conpherence->getID().'/'))
|
|
|
|
->setWorkflow(true));
|
2013-03-06 00:45:36 +01:00
|
|
|
|
2013-05-29 21:46:06 +02:00
|
|
|
return hsprintf(
|
|
|
|
'%s',
|
|
|
|
array(
|
|
|
|
phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
2014-10-07 15:01:04 +02:00
|
|
|
'class' => 'header-loading-mask',
|
2013-05-29 21:46:06 +02:00
|
|
|
),
|
|
|
|
''),
|
2014-10-07 15:01:04 +02:00
|
|
|
$crumbs,
|
|
|
|
));
|
2013-03-06 00:45:36 +01:00
|
|
|
}
|
2015-03-09 20:09:43 +01:00
|
|
|
|
2013-01-25 02:23:05 +01:00
|
|
|
}
|