mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-01 19:22:42 +01:00
698ec68327
Summary: **Who can delete global rules?**: I discussed this with @jungejason. The current behavior is that the rule author or any administrator can delete a global rule, but this isn't consistent with who can edit a rule (anyone) and doesn't really make much sense (it's an artifact of the global/personal split). I proposed that anyone can delete a rule but we don't actually delete them, and log the deletion. However, when it came time to actually write the code for this I backed off a bit and continued actually deleting the rules -- I think this does a reasonable job of balancing accountability with complexity. So the new impelmentation is: - Personal rules can be deleted only by their owners. - Global rules can be deleted by any user. - All deletes are logged. - Logs are more detailed. - All logged actions can be viewed in aggregate. **Minor Cleanup** - Merged `HomeController` and `AllController`. - Moved most queries to Query classes. - Use AphrontFormSelectControl::renderSelectTag() where appropriate (this is a fairly recent addition). - Use an AphrontErrorView to render the dry run notice (this didn't exist when I ported). - Reenable some transaction code (this works again now). - Removed the ability for admins to change rule authors (this was a little buggy, messy, and doesn't make tons of sense after the personal/global rule split). - Rules which depend on other rules now display the right options (all global rules, all your personal rules for personal rules). - Fix a bug in AphrontTableView where the "no data" cell would be rendered too wide if some columns are not visible. - Allow selectFilter() in AphrontNavFilterView to be called without a 'default' argument. Test Plan: - Browsed, created, edited, deleted personal and gules. - Verified generated logs. - Did some dry runs. - Verified transcript list and transcript details. - Created/edited all/any rules; created/edited once/every time rules. - Filtered admin views by users. Reviewers: jungejason, btrahan Reviewed By: btrahan CC: aran, epriestley Differential Revision: https://secure.phabricator.com/D2040
84 lines
2.3 KiB
PHP
84 lines
2.3 KiB
PHP
<?php
|
|
|
|
/*
|
|
* Copyright 2012 Facebook, Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
abstract class HeraldController extends PhabricatorController {
|
|
|
|
public function buildStandardPageResponse($view, array $data) {
|
|
$page = $this->buildStandardPageView();
|
|
|
|
$page->setApplicationName('Herald');
|
|
$page->setBaseURI('/herald/');
|
|
$page->setTitle(idx($data, 'title'));
|
|
$page->setGlyph("\xE2\x98\xBF");
|
|
|
|
$doclink = PhabricatorEnv::getDoclink('article/Herald_User_Guide.html');
|
|
|
|
$tabs = array(
|
|
'help' => array(
|
|
'href' => $doclink,
|
|
'name' => 'Help',
|
|
),
|
|
);
|
|
$page->setTabs($tabs, null);
|
|
|
|
$page->appendChild($view);
|
|
$page->setIsAdminInterface(idx($data, 'admin'));
|
|
|
|
$response = new AphrontWebpageResponse();
|
|
return $response->setContent($page->render());
|
|
}
|
|
|
|
protected function renderNav() {
|
|
$nav = id(new AphrontSideNavFilterView())
|
|
->setBaseURI(new PhutilURI('/herald/'))
|
|
->addLabel('My Rules')
|
|
->addFilter('new', 'Create Rule');
|
|
|
|
$rules_map = HeraldContentTypeConfig::getContentTypeMap();
|
|
foreach ($rules_map as $key => $value) {
|
|
$nav->addFilter("view/{$key}/personal", $value);
|
|
}
|
|
|
|
$nav
|
|
->addSpacer()
|
|
->addLabel('Global Rules');
|
|
|
|
foreach ($rules_map as $key => $value) {
|
|
$nav->addFilter("view/{$key}/global", $value);
|
|
}
|
|
|
|
$nav
|
|
->addSpacer()
|
|
->addLabel('Utilities')
|
|
->addFilter('test', 'Test Console')
|
|
->addFilter('transcript', 'Transcripts')
|
|
->addFilter('history', 'Edit Log');
|
|
|
|
if ($this->getRequest()->getUser()->getIsAdmin()) {
|
|
$nav
|
|
->addSpacer()
|
|
->addLabel('Admin');
|
|
foreach ($rules_map as $key => $value) {
|
|
$nav->addFilter("view/{$key}/all", $value);
|
|
}
|
|
}
|
|
|
|
return $nav;
|
|
}
|
|
|
|
}
|