2011-04-03 22:03:27 -07:00
|
|
|
<?php
|
|
|
|
|
|
2012-03-09 15:46:25 -08:00
|
|
|
final class PhabricatorOwnersEditController
|
|
|
|
|
extends PhabricatorOwnersController {
|
2011-04-03 22:03:27 -07:00
|
|
|
|
|
|
|
|
private $id;
|
|
|
|
|
|
|
|
|
|
public function willProcessRequest(array $data) {
|
|
|
|
|
$this->id = idx($data, 'id');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function processRequest() {
|
|
|
|
|
$request = $this->getRequest();
|
|
|
|
|
$user = $request->getUser();
|
|
|
|
|
|
|
|
|
|
if ($this->id) {
|
|
|
|
|
$package = id(new PhabricatorOwnersPackage())->load($this->id);
|
|
|
|
|
if (!$package) {
|
|
|
|
|
return new Aphront404Response();
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$package = new PhabricatorOwnersPackage();
|
|
|
|
|
$package->setPrimaryOwnerPHID($user->getPHID());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$e_name = true;
|
|
|
|
|
$e_primary = true;
|
|
|
|
|
|
|
|
|
|
$errors = array();
|
|
|
|
|
|
|
|
|
|
if ($request->isFormPost()) {
|
|
|
|
|
$package->setName($request->getStr('name'));
|
|
|
|
|
$package->setDescription($request->getStr('description'));
|
Detect package change and send out email
Summary:
For package creation and deletion, send email to all the owners For
package modification, detect important fields such as owners and paths, and then
send out emails to all owners (including deleted owners and current owners)
Also start using transaction for package creation/deletion/modification.
Test Plan:
- tested mail creation and deletion
- tested modification to auditing enabled, primary owners, owners, paths
Reviewers: epriestley, nh, vrana
Reviewed By: epriestley
CC: prithvi, aran, Koolvin
Differential Revision: https://secure.phabricator.com/D2470
2012-05-07 00:19:44 -07:00
|
|
|
$old_auditing_enabled = $package->getAuditingEnabled();
|
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-04 17:06:34 -08:00
|
|
|
$package->setAuditingEnabled(
|
|
|
|
|
($request->getStr('auditing') === 'enabled')
|
|
|
|
|
? 1
|
|
|
|
|
: 0);
|
2011-04-03 22:03:27 -07:00
|
|
|
|
|
|
|
|
$primary = $request->getArr('primary');
|
|
|
|
|
$primary = reset($primary);
|
Detect package change and send out email
Summary:
For package creation and deletion, send email to all the owners For
package modification, detect important fields such as owners and paths, and then
send out emails to all owners (including deleted owners and current owners)
Also start using transaction for package creation/deletion/modification.
Test Plan:
- tested mail creation and deletion
- tested modification to auditing enabled, primary owners, owners, paths
Reviewers: epriestley, nh, vrana
Reviewed By: epriestley
CC: prithvi, aran, Koolvin
Differential Revision: https://secure.phabricator.com/D2470
2012-05-07 00:19:44 -07:00
|
|
|
$old_primary = $package->getPrimaryOwnerPHID();
|
2011-04-03 22:03:27 -07:00
|
|
|
$package->setPrimaryOwnerPHID($primary);
|
|
|
|
|
|
|
|
|
|
$owners = $request->getArr('owners');
|
|
|
|
|
if ($primary) {
|
|
|
|
|
array_unshift($owners, $primary);
|
|
|
|
|
}
|
|
|
|
|
$owners = array_unique($owners);
|
|
|
|
|
|
|
|
|
|
$paths = $request->getArr('path');
|
|
|
|
|
$repos = $request->getArr('repo');
|
2012-12-06 17:23:56 -08:00
|
|
|
$excludes = $request->getArr('exclude');
|
2011-04-03 22:03:27 -07:00
|
|
|
|
|
|
|
|
$path_refs = array();
|
|
|
|
|
for ($ii = 0; $ii < count($paths); $ii++) {
|
|
|
|
|
if (empty($paths[$ii]) || empty($repos[$ii])) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
$path_refs[] = array(
|
|
|
|
|
'repositoryPHID' => $repos[$ii],
|
|
|
|
|
'path' => $paths[$ii],
|
2012-12-06 17:23:56 -08:00
|
|
|
'excluded' => $excludes[$ii],
|
2011-04-03 22:03:27 -07:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!strlen($package->getName())) {
|
2013-05-21 15:31:24 -07:00
|
|
|
$e_name = pht('Required');
|
|
|
|
|
$errors[] = pht('Package name is required.');
|
2011-04-03 22:03:27 -07:00
|
|
|
} else {
|
|
|
|
|
$e_name = null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!$package->getPrimaryOwnerPHID()) {
|
2013-05-21 15:31:24 -07:00
|
|
|
$e_primary = pht('Required');
|
|
|
|
|
$errors[] = pht('Package must have a primary owner.');
|
2011-04-03 22:03:27 -07:00
|
|
|
} else {
|
|
|
|
|
$e_primary = null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!$path_refs) {
|
2013-05-21 15:31:24 -07:00
|
|
|
$errors[] = pht('Package must include at least one path.');
|
2011-04-03 22:03:27 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!$errors) {
|
|
|
|
|
$package->attachUnsavedOwners($owners);
|
|
|
|
|
$package->attachUnsavedPaths($path_refs);
|
Detect package change and send out email
Summary:
For package creation and deletion, send email to all the owners For
package modification, detect important fields such as owners and paths, and then
send out emails to all owners (including deleted owners and current owners)
Also start using transaction for package creation/deletion/modification.
Test Plan:
- tested mail creation and deletion
- tested modification to auditing enabled, primary owners, owners, paths
Reviewers: epriestley, nh, vrana
Reviewed By: epriestley
CC: prithvi, aran, Koolvin
Differential Revision: https://secure.phabricator.com/D2470
2012-05-07 00:19:44 -07:00
|
|
|
$package->attachOldAuditingEnabled($old_auditing_enabled);
|
|
|
|
|
$package->attachOldPrimaryOwnerPHID($old_primary);
|
|
|
|
|
$package->attachActorPHID($user->getPHID());
|
2011-04-03 22:03:27 -07:00
|
|
|
try {
|
|
|
|
|
$package->save();
|
|
|
|
|
return id(new AphrontRedirectResponse())
|
|
|
|
|
->setURI('/owners/package/'.$package->getID().'/');
|
2014-08-06 07:51:21 +10:00
|
|
|
} catch (AphrontDuplicateKeyQueryException $ex) {
|
2013-05-21 15:31:24 -07:00
|
|
|
$e_name = pht('Duplicate');
|
|
|
|
|
$errors[] = pht('Package name must be unique.');
|
2011-04-03 22:03:27 -07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$owners = $package->loadOwners();
|
|
|
|
|
$owners = mpull($owners, 'getUserPHID');
|
|
|
|
|
|
|
|
|
|
$paths = $package->loadPaths();
|
|
|
|
|
$path_refs = array();
|
|
|
|
|
foreach ($paths as $path) {
|
|
|
|
|
$path_refs[] = array(
|
|
|
|
|
'repositoryPHID' => $path->getRepositoryPHID(),
|
|
|
|
|
'path' => $path->getPath(),
|
2012-12-06 17:23:56 -08:00
|
|
|
'excluded' => $path->getExcluded(),
|
2011-04-03 22:03:27 -07:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2012-09-04 19:02:56 -07:00
|
|
|
$handles = $this->loadViewerHandles($owners);
|
2011-04-03 22:03:27 -07:00
|
|
|
|
|
|
|
|
$primary = $package->getPrimaryOwnerPHID();
|
|
|
|
|
if ($primary && isset($handles[$primary])) {
|
2013-10-07 12:51:24 -07:00
|
|
|
$handle_primary_owner = array($handles[$primary]);
|
2011-04-03 22:03:27 -07:00
|
|
|
} else {
|
2013-10-07 12:51:24 -07:00
|
|
|
$handle_primary_owner = array();
|
2011-04-03 22:03:27 -07:00
|
|
|
}
|
|
|
|
|
|
2013-10-07 12:51:24 -07:00
|
|
|
$handles_all_owners = array_select_keys($handles, $owners);
|
2011-04-03 22:03:27 -07:00
|
|
|
|
2012-01-10 11:21:49 -08:00
|
|
|
if ($package->getID()) {
|
Update form styles, implement in many places
Summary:
This creates a common form look and feel across the site. I spent a bit of time working out a number of kinks in our various renderings. Some things:
- Font Styles are correctly applied for form elements now.
- Everything lines up!
- Selects are larger, easier to read, interact.
- Inputs have been squared.
- Consistant CSS applied glow (try it!)
- Improved Mobile Responsiveness
- CSS applied to all form elements, not just Aphront
- Many other minor tweaks.
I tried to hit as many high profile forms as possible in an effort to increase consistency. Stopped for now and will follow up after this lands. I know Evan is not a super fan of the glow, but after working with it for a week, it's way cleaner and responsive than the OS controls. Give it a try.
Test Plan: Tested many applications, forms, mobile and tablet.
Reviewers: epriestley, btrahan
Reviewed By: epriestley
CC: aran, Korvin
Differential Revision: https://secure.phabricator.com/D5860
2013-05-07 14:07:06 -07:00
|
|
|
$title = pht('Edit Package');
|
2012-01-10 11:21:49 -08:00
|
|
|
$side_nav_filter = 'edit/'.$this->id;
|
|
|
|
|
} else {
|
Update form styles, implement in many places
Summary:
This creates a common form look and feel across the site. I spent a bit of time working out a number of kinks in our various renderings. Some things:
- Font Styles are correctly applied for form elements now.
- Everything lines up!
- Selects are larger, easier to read, interact.
- Inputs have been squared.
- Consistant CSS applied glow (try it!)
- Improved Mobile Responsiveness
- CSS applied to all form elements, not just Aphront
- Many other minor tweaks.
I tried to hit as many high profile forms as possible in an effort to increase consistency. Stopped for now and will follow up after this lands. I know Evan is not a super fan of the glow, but after working with it for a week, it's way cleaner and responsive than the OS controls. Give it a try.
Test Plan: Tested many applications, forms, mobile and tablet.
Reviewers: epriestley, btrahan
Reviewed By: epriestley
CC: aran, Korvin
Differential Revision: https://secure.phabricator.com/D5860
2013-05-07 14:07:06 -07:00
|
|
|
$title = pht('New Package');
|
2012-01-10 11:21:49 -08:00
|
|
|
$side_nav_filter = 'new';
|
|
|
|
|
}
|
|
|
|
|
$this->setSideNavFilter($side_nav_filter);
|
2011-04-03 22:03:27 -07:00
|
|
|
|
2013-09-25 16:54:48 -07:00
|
|
|
$repos = id(new PhabricatorRepositoryQuery())
|
|
|
|
|
->setViewer($user)
|
|
|
|
|
->execute();
|
2011-04-03 22:03:27 -07:00
|
|
|
|
|
|
|
|
$default_paths = array();
|
|
|
|
|
foreach ($repos as $repo) {
|
|
|
|
|
$default_path = $repo->getDetail('default-owners-path');
|
|
|
|
|
if ($default_path) {
|
|
|
|
|
$default_paths[$repo->getPHID()] = $default_path;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$repos = mpull($repos, 'getCallsign', 'getPHID');
|
2014-12-30 14:28:26 -08:00
|
|
|
asort($repos);
|
2011-04-03 22:03:27 -07:00
|
|
|
|
|
|
|
|
$template = new AphrontTypeaheadTemplateView();
|
|
|
|
|
$template = $template->render();
|
|
|
|
|
|
|
|
|
|
Javelin::initBehavior(
|
|
|
|
|
'owners-path-editor',
|
|
|
|
|
array(
|
|
|
|
|
'root' => 'path-editor',
|
|
|
|
|
'table' => 'paths',
|
|
|
|
|
'add_button' => 'addpath',
|
|
|
|
|
'repositories' => $repos,
|
|
|
|
|
'input_template' => $template,
|
|
|
|
|
'pathRefs' => $path_refs,
|
|
|
|
|
|
|
|
|
|
'completeURI' => '/diffusion/services/path/complete/',
|
|
|
|
|
'validateURI' => '/diffusion/services/path/validate/',
|
|
|
|
|
|
|
|
|
|
'repositoryDefaultPaths' => $default_paths,
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
require_celerity_resource('owners-path-editor-css');
|
|
|
|
|
|
|
|
|
|
$cancel_uri = $package->getID()
|
|
|
|
|
? '/owners/package/'.$package->getID().'/'
|
|
|
|
|
: '/owners/';
|
|
|
|
|
|
|
|
|
|
$form = id(new AphrontFormView())
|
|
|
|
|
->setUser($user)
|
|
|
|
|
->appendChild(
|
|
|
|
|
id(new AphrontFormTextControl())
|
2013-05-21 15:31:24 -07:00
|
|
|
->setLabel(pht('Name'))
|
2011-04-03 22:03:27 -07:00
|
|
|
->setName('name')
|
|
|
|
|
->setValue($package->getName())
|
|
|
|
|
->setError($e_name))
|
|
|
|
|
->appendChild(
|
|
|
|
|
id(new AphrontFormTokenizerControl())
|
2014-07-17 15:45:07 -07:00
|
|
|
->setDatasource(new PhabricatorProjectOrUserDatasource())
|
2013-05-21 15:31:24 -07:00
|
|
|
->setLabel(pht('Primary Owner'))
|
2011-04-03 22:03:27 -07:00
|
|
|
->setName('primary')
|
|
|
|
|
->setLimit(1)
|
2013-10-07 12:51:24 -07:00
|
|
|
->setValue($handle_primary_owner)
|
2011-04-03 22:03:27 -07:00
|
|
|
->setError($e_primary))
|
|
|
|
|
->appendChild(
|
|
|
|
|
id(new AphrontFormTokenizerControl())
|
2014-07-17 15:45:07 -07:00
|
|
|
->setDatasource(new PhabricatorProjectOrUserDatasource())
|
2013-05-21 15:31:24 -07:00
|
|
|
->setLabel(pht('Owners'))
|
2011-04-03 22:03:27 -07:00
|
|
|
->setName('owners')
|
2013-10-07 12:51:24 -07:00
|
|
|
->setValue($handles_all_owners))
|
Add Basic Auditing Functionalities
Summary:
add basic auditing functionalities. For the related commits for a
package, we detect the following conditions which might be suspicious to the
owners of the package:
* no revision specified
* revision not found
* author not match
* reviewedby not match
* owners not involved
* commit author not recognized
The owners of the package can change the status of the audit entries by
accepting it or specify concern.
The owner can turn on/off the auditing for a package.
Test Plan:
* verified that non-owner cannot see the details of the audit and cannot modify
it
* verified that all the audit reasons can be detected
* tested dropdown filtering and package search
* verified really normal change not detected
* verified accept/concern a commit
* tested enable/disable a package for auditing
* verified one audit applies to all <commit, packages> to the packages the
auditor owns
* verified that re-parsing a commit won't have effect if there exists a
relationship for <commit, package> already
Reviewers: epriestley, nh
Reviewed By: epriestley
CC: aran, benmathews, btrahan, mpodobnik, prithvi, TomL, epriestley
Differential Revision: 1242
2011-12-17 15:52:54 -08:00
|
|
|
->appendChild(
|
|
|
|
|
id(new AphrontFormSelectControl())
|
|
|
|
|
->setName('auditing')
|
2013-05-21 15:31:24 -07:00
|
|
|
->setLabel(pht('Auditing'))
|
|
|
|
|
->setCaption(
|
|
|
|
|
pht('With auditing enabled, all future commits that touch '.
|
|
|
|
|
'this package will be reviewed to make sure an owner '.
|
|
|
|
|
'of the package is involved and the commit message has '.
|
|
|
|
|
'a valid revision, reviewed by, and author.'))
|
Add Basic Auditing Functionalities
Summary:
add basic auditing functionalities. For the related commits for a
package, we detect the following conditions which might be suspicious to the
owners of the package:
* no revision specified
* revision not found
* author not match
* reviewedby not match
* owners not involved
* commit author not recognized
The owners of the package can change the status of the audit entries by
accepting it or specify concern.
The owner can turn on/off the auditing for a package.
Test Plan:
* verified that non-owner cannot see the details of the audit and cannot modify
it
* verified that all the audit reasons can be detected
* tested dropdown filtering and package search
* verified really normal change not detected
* verified accept/concern a commit
* tested enable/disable a package for auditing
* verified one audit applies to all <commit, packages> to the packages the
auditor owns
* verified that re-parsing a commit won't have effect if there exists a
relationship for <commit, package> already
Reviewers: epriestley, nh
Reviewed By: epriestley
CC: aran, benmathews, btrahan, mpodobnik, prithvi, TomL, epriestley
Differential Revision: 1242
2011-12-17 15:52:54 -08:00
|
|
|
->setOptions(array(
|
2013-05-21 15:31:24 -07:00
|
|
|
'disabled' => pht('Disabled'),
|
|
|
|
|
'enabled' => pht('Enabled'),
|
Add Basic Auditing Functionalities
Summary:
add basic auditing functionalities. For the related commits for a
package, we detect the following conditions which might be suspicious to the
owners of the package:
* no revision specified
* revision not found
* author not match
* reviewedby not match
* owners not involved
* commit author not recognized
The owners of the package can change the status of the audit entries by
accepting it or specify concern.
The owner can turn on/off the auditing for a package.
Test Plan:
* verified that non-owner cannot see the details of the audit and cannot modify
it
* verified that all the audit reasons can be detected
* tested dropdown filtering and package search
* verified really normal change not detected
* verified accept/concern a commit
* tested enable/disable a package for auditing
* verified one audit applies to all <commit, packages> to the packages the
auditor owns
* verified that re-parsing a commit won't have effect if there exists a
relationship for <commit, package> already
Reviewers: epriestley, nh
Reviewed By: epriestley
CC: aran, benmathews, btrahan, mpodobnik, prithvi, TomL, epriestley
Differential Revision: 1242
2011-12-17 15:52:54 -08:00
|
|
|
))
|
|
|
|
|
->setValue(
|
|
|
|
|
$package->getAuditingEnabled()
|
|
|
|
|
? 'enabled'
|
|
|
|
|
: 'disabled'))
|
2011-04-03 22:03:27 -07:00
|
|
|
->appendChild(
|
2014-11-07 14:16:30 -08:00
|
|
|
id(new PHUIFormInsetView())
|
2013-05-21 15:31:24 -07:00
|
|
|
->setTitle(pht('Paths'))
|
2012-03-15 17:10:19 -07:00
|
|
|
->addDivAttributes(array('id' => 'path-editor'))
|
2013-01-25 12:57:17 -08:00
|
|
|
->setRightButton(javelin_tag(
|
2011-04-03 22:03:27 -07:00
|
|
|
'a',
|
|
|
|
|
array(
|
|
|
|
|
'href' => '#',
|
|
|
|
|
'class' => 'button green',
|
|
|
|
|
'sigil' => 'addpath',
|
|
|
|
|
'mustcapture' => true,
|
|
|
|
|
),
|
2013-05-21 15:31:24 -07:00
|
|
|
pht('Add New Path')))
|
|
|
|
|
->setDescription(
|
|
|
|
|
pht('Specify the files and directories which comprise '.
|
|
|
|
|
'this package.'))
|
2013-01-25 12:57:17 -08:00
|
|
|
->setContent(javelin_tag(
|
2012-03-15 17:10:19 -07:00
|
|
|
'table',
|
|
|
|
|
array(
|
|
|
|
|
'class' => 'owners-path-editor-table',
|
|
|
|
|
'sigil' => 'paths',
|
|
|
|
|
),
|
|
|
|
|
'')))
|
2011-04-03 22:03:27 -07:00
|
|
|
->appendChild(
|
|
|
|
|
id(new AphrontFormTextAreaControl())
|
2013-05-21 15:31:24 -07:00
|
|
|
->setLabel(pht('Description'))
|
2011-04-03 22:03:27 -07:00
|
|
|
->setName('description')
|
|
|
|
|
->setValue($package->getDescription()))
|
|
|
|
|
->appendChild(
|
|
|
|
|
id(new AphrontFormSubmitControl())
|
|
|
|
|
->addCancelButton($cancel_uri)
|
2013-05-21 15:31:24 -07:00
|
|
|
->setValue(pht('Save Package')));
|
2011-04-03 22:03:27 -07:00
|
|
|
|
2013-09-25 11:23:29 -07:00
|
|
|
$form_box = id(new PHUIObjectBoxView())
|
2013-08-26 11:53:11 -07:00
|
|
|
->setHeaderText($title)
|
2014-01-10 09:17:37 -08:00
|
|
|
->setFormErrors($errors)
|
2013-08-26 11:53:11 -07:00
|
|
|
->setForm($form);
|
2011-04-03 22:03:27 -07:00
|
|
|
|
2013-05-21 15:31:24 -07:00
|
|
|
$nav = $this->buildSideNavView();
|
2013-08-26 11:53:11 -07:00
|
|
|
$nav->appendChild($form_box);
|
2013-05-21 15:31:24 -07:00
|
|
|
|
Update form styles, implement in many places
Summary:
This creates a common form look and feel across the site. I spent a bit of time working out a number of kinks in our various renderings. Some things:
- Font Styles are correctly applied for form elements now.
- Everything lines up!
- Selects are larger, easier to read, interact.
- Inputs have been squared.
- Consistant CSS applied glow (try it!)
- Improved Mobile Responsiveness
- CSS applied to all form elements, not just Aphront
- Many other minor tweaks.
I tried to hit as many high profile forms as possible in an effort to increase consistency. Stopped for now and will follow up after this lands. I know Evan is not a super fan of the glow, but after working with it for a week, it's way cleaner and responsive than the OS controls. Give it a try.
Test Plan: Tested many applications, forms, mobile and tablet.
Reviewers: epriestley, btrahan
Reviewed By: epriestley
CC: aran, Korvin
Differential Revision: https://secure.phabricator.com/D5860
2013-05-07 14:07:06 -07:00
|
|
|
return $this->buildApplicationPage(
|
|
|
|
|
array(
|
2013-05-21 15:31:24 -07:00
|
|
|
$nav,
|
Update form styles, implement in many places
Summary:
This creates a common form look and feel across the site. I spent a bit of time working out a number of kinks in our various renderings. Some things:
- Font Styles are correctly applied for form elements now.
- Everything lines up!
- Selects are larger, easier to read, interact.
- Inputs have been squared.
- Consistant CSS applied glow (try it!)
- Improved Mobile Responsiveness
- CSS applied to all form elements, not just Aphront
- Many other minor tweaks.
I tried to hit as many high profile forms as possible in an effort to increase consistency. Stopped for now and will follow up after this lands. I know Evan is not a super fan of the glow, but after working with it for a week, it's way cleaner and responsive than the OS controls. Give it a try.
Test Plan: Tested many applications, forms, mobile and tablet.
Reviewers: epriestley, btrahan
Reviewed By: epriestley
CC: aran, Korvin
Differential Revision: https://secure.phabricator.com/D5860
2013-05-07 14:07:06 -07:00
|
|
|
),
|
2011-04-03 22:03:27 -07:00
|
|
|
array(
|
|
|
|
|
'title' => $title,
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
2012-12-07 13:32:14 -08:00
|
|
|
protected function getExtraPackageViews(AphrontSideNavFilterView $view) {
|
2012-01-10 11:21:49 -08:00
|
|
|
if ($this->id) {
|
2013-05-21 15:31:24 -07:00
|
|
|
$view->addFilter('edit/'.$this->id, pht('Edit'));
|
2012-01-10 11:21:49 -08:00
|
|
|
} else {
|
2013-05-21 15:31:24 -07:00
|
|
|
$view->addFilter('new', pht('New'));
|
2012-01-10 11:21:49 -08:00
|
|
|
}
|
|
|
|
|
}
|
2011-04-03 22:03:27 -07:00
|
|
|
}
|