1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-29 18:22:41 +01:00

allow arcanist projects to be deleted via the ui

Summary: tricky part is purging symbols at that time too. override "delete" method to get there, use transactions, etc.

Test Plan: deleted an arcanist project - it worked!

Reviewers: epriestley

Reviewed By: epriestley

CC: aran, Korvin, mbishopim3

Maniphest Tasks: T1738

Differential Revision: https://secure.phabricator.com/D3613
This commit is contained in:
Bob Trahan 2012-10-04 13:25:58 -07:00
parent 36d02b6c79
commit 4c86893108
5 changed files with 92 additions and 2 deletions

View file

@ -975,6 +975,7 @@ phutil_register_library_map(array(
'PhabricatorRemarkupRuleYoutube' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleYoutube.php', 'PhabricatorRemarkupRuleYoutube' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleYoutube.php',
'PhabricatorRepository' => 'applications/repository/storage/PhabricatorRepository.php', 'PhabricatorRepository' => 'applications/repository/storage/PhabricatorRepository.php',
'PhabricatorRepositoryArcanistProject' => 'applications/repository/storage/PhabricatorRepositoryArcanistProject.php', 'PhabricatorRepositoryArcanistProject' => 'applications/repository/storage/PhabricatorRepositoryArcanistProject.php',
'PhabricatorRepositoryArcanistProjectDeleteController' => 'applications/repository/controller/PhabricatorRepositoryArcanistProjectDeleteController.php',
'PhabricatorRepositoryArcanistProjectEditController' => 'applications/repository/controller/PhabricatorRepositoryArcanistProjectEditController.php', 'PhabricatorRepositoryArcanistProjectEditController' => 'applications/repository/controller/PhabricatorRepositoryArcanistProjectEditController.php',
'PhabricatorRepositoryAuditRequest' => 'applications/repository/storage/PhabricatorRepositoryAuditRequest.php', 'PhabricatorRepositoryAuditRequest' => 'applications/repository/storage/PhabricatorRepositoryAuditRequest.php',
'PhabricatorRepositoryCommit' => 'applications/repository/storage/PhabricatorRepositoryCommit.php', 'PhabricatorRepositoryCommit' => 'applications/repository/storage/PhabricatorRepositoryCommit.php',
@ -2099,6 +2100,7 @@ phutil_register_library_map(array(
'PhabricatorRemarkupRuleYoutube' => 'PhutilRemarkupRule', 'PhabricatorRemarkupRuleYoutube' => 'PhutilRemarkupRule',
'PhabricatorRepository' => 'PhabricatorRepositoryDAO', 'PhabricatorRepository' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryArcanistProject' => 'PhabricatorRepositoryDAO', 'PhabricatorRepositoryArcanistProject' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryArcanistProjectDeleteController' => 'PhabricatorRepositoryController',
'PhabricatorRepositoryArcanistProjectEditController' => 'PhabricatorRepositoryController', 'PhabricatorRepositoryArcanistProjectEditController' => 'PhabricatorRepositoryController',
'PhabricatorRepositoryAuditRequest' => 'PhabricatorRepositoryDAO', 'PhabricatorRepositoryAuditRequest' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryCommit' => 'PhabricatorRepositoryDAO', 'PhabricatorRepositoryCommit' => 'PhabricatorRepositoryDAO',

View file

@ -46,8 +46,10 @@ final class PhabricatorApplicationRepositories extends PhabricatorApplication {
'edit/(?P<id>\d+)/(?:(?P<view>\w+)?/)?' => 'edit/(?P<id>\d+)/(?:(?P<view>\w+)?/)?' =>
'PhabricatorRepositoryEditController', 'PhabricatorRepositoryEditController',
'delete/(?P<id>\d+)/' => 'PhabricatorRepositoryDeleteController', 'delete/(?P<id>\d+)/' => 'PhabricatorRepositoryDeleteController',
'project/(?P<id>\d+)/' => 'project/edit/(?P<id>\d+)/' =>
'PhabricatorRepositoryArcanistProjectEditController', 'PhabricatorRepositoryArcanistProjectEditController',
'project/delete/(?P<id>\d+)/' =>
'PhabricatorRepositoryArcanistProjectDeleteController',
), ),
); );
} }

View file

@ -0,0 +1,57 @@
<?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.
*/
final class PhabricatorRepositoryArcanistProjectDeleteController
extends PhabricatorRepositoryController {
private $id;
public function willProcessRequest(array $data) {
$this->id = $data['id'];
}
public function processRequest() {
$arc_project =
id(new PhabricatorRepositoryArcanistProject())->load($this->id);
if (!$arc_project) {
return new Aphront404Response();
}
$request = $this->getRequest();
if ($request->isDialogFormPost()) {
$arc_project->delete();
return id(new AphrontRedirectResponse())->setURI('/repository/');
}
$dialog = new AphrontDialogView();
$dialog
->setUser($request->getUser())
->setTitle('Really delete this arcanist project?')
->appendChild(
'<p>Really delete the "'.phutil_escape_html($arc_project->getName()).
'" arcanist project? '.
'This operation can not be undone.</p>')
->setSubmitURI('/repository/project/delete/'.$this->id.'/')
->addSubmitButton('Delete Arcanist Project')
->addCancelButton('/repository/');
return id(new AphrontDialogResponse())->setDialog($dialog);
}
}

View file

@ -123,11 +123,20 @@ final class PhabricatorRepositoryListController
phutil_render_tag( phutil_render_tag(
'a', 'a',
array( array(
'href' => '/repository/project/'.$project->getID().'/', 'href' => '/repository/project/edit/'.$project->getID().'/',
'class' => 'button grey small', 'class' => 'button grey small',
), ),
'Edit'), 'Edit'),
javelin_render_tag(
'a',
array(
'href' => '/repository/project/delete/'.$project->getID().'/',
'class' => 'button grey small',
'sigil' => 'workflow',
),
'Delete'),
); );
} }
$project_table = new AphrontTableView($rows); $project_table = new AphrontTableView($rows);
@ -136,12 +145,14 @@ final class PhabricatorRepositoryListController
'Project ID', 'Project ID',
'Repository', 'Repository',
'', '',
'',
)); ));
$project_table->setColumnClasses( $project_table->setColumnClasses(
array( array(
'', '',
'wide', 'wide',
'action', 'action',
'action',
)); ));
$project_table->setColumnVisibility( $project_table->setColumnVisibility(
@ -149,6 +160,7 @@ final class PhabricatorRepositoryListController
true, true,
true, true,
$is_admin, $is_admin,
$is_admin,
)); ));
$project_panel = new AphrontPanelView(); $project_panel = new AphrontPanelView();

View file

@ -48,4 +48,21 @@ final class PhabricatorRepositoryArcanistProject
return id(new PhabricatorRepository())->load($this->getRepositoryID()); return id(new PhabricatorRepository())->load($this->getRepositoryID());
} }
public function delete() {
$this->openTransaction();
$conn_w = $this->establishConnection('w');
$symbols = id(new PhabricatorRepositorySymbol())->loadAllWhere(
'arcanistProjectID = %d',
$this->getID()
);
foreach ($symbols as $symbol) {
$symbol->delete();
}
$result = parent::delete();
$this->saveTransaction();
return $result;
}
} }