Page MenuHomePhabricator

D7925.diff
No OneTemporary

D7925.diff

Index: resources/sql/autopatches/20140109.projectcolumnsdates.sql
===================================================================
--- /dev/null
+++ resources/sql/autopatches/20140109.projectcolumnsdates.sql
@@ -0,0 +1,5 @@
+ALTER TABLE {$NAMESPACE}_project.project_column
+ ADD dateCreated INT UNSIGNED NOT NULL;
+
+ALTER TABLE {$NAMESPACE}_project.project_column
+ ADD dateModified INT UNSIGNED NOT NULL;
Index: src/__phutil_library_map__.php
===================================================================
--- src/__phutil_library_map__.php
+++ src/__phutil_library_map__.php
@@ -1753,6 +1753,7 @@
'PhabricatorPolicyType' => 'applications/policy/constants/PhabricatorPolicyType.php',
'PhabricatorProject' => 'applications/project/storage/PhabricatorProject.php',
'PhabricatorProjectBoardController' => 'applications/project/controller/PhabricatorProjectBoardController.php',
+ 'PhabricatorProjectBoardEditController' => 'applications/project/controller/PhabricatorProjectBoardEditController.php',
'PhabricatorProjectColumn' => 'applications/project/storage/PhabricatorProjectColumn.php',
'PhabricatorProjectColumnQuery' => 'applications/project/query/PhabricatorProjectColumnQuery.php',
'PhabricatorProjectConstants' => 'applications/project/constants/PhabricatorProjectConstants.php',
@@ -4362,6 +4363,7 @@
2 => 'PhabricatorPolicyInterface',
),
'PhabricatorProjectBoardController' => 'PhabricatorProjectController',
+ 'PhabricatorProjectBoardEditController' => 'PhabricatorProjectController',
'PhabricatorProjectColumn' =>
array(
0 => 'PhabricatorProjectDAO',
Index: src/applications/project/application/PhabricatorApplicationProject.php
===================================================================
--- src/applications/project/application/PhabricatorApplicationProject.php
+++ src/applications/project/application/PhabricatorApplicationProject.php
@@ -46,6 +46,8 @@
'PhabricatorProjectProfilePictureController',
'create/' => 'PhabricatorProjectCreateController',
'board/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectBoardController',
+ 'board/(?P<projectID>[1-9]\d*)/edit/(?:(?P<id>\d+)/)?'
+ => 'PhabricatorProjectBoardEditController',
'update/(?P<id>[1-9]\d*)/(?P<action>[^/]+)/'
=> 'PhabricatorProjectUpdateController',
'history/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectHistoryController',
Index: src/applications/project/controller/PhabricatorProjectBoardEditController.php
===================================================================
--- /dev/null
+++ src/applications/project/controller/PhabricatorProjectBoardEditController.php
@@ -0,0 +1,114 @@
+<?php
+
+final class PhabricatorProjectBoardEditController
+ extends PhabricatorProjectController {
+
+ private $id;
+ private $projectID;
+
+ public function willProcessRequest(array $data) {
+ $this->projectID = $data['projectID'];
+ $this->id = idx($data, 'id');
+ }
+
+ public function processRequest() {
+ $request = $this->getRequest();
+ $viewer = $request->getUser();
+
+ $project = id(new PhabricatorProjectQuery())
+ ->setViewer($viewer)
+ ->requireCapabilities(
+ array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ PhabricatorPolicyCapability::CAN_EDIT,
+ ))
+ ->withIDs(array($this->projectID))
+ ->executeOne();
+
+ if (!$project) {
+ return new Aphront404Response();
+ }
+
+ $is_new = ($this->id ? false : true);
+
+ if (!$is_new) {
+ // TODO: LATER!
+ throw new Exception("When I'm ready!");
+ } else {
+ $column = new PhabricatorProjectColumn();
+ }
+
+ $errors = array();
+ $e_name = true;
+ $error_view = null;
+ $view_uri = $this->getApplicationURI('/board/'.$this->projectID.'/');
+
+ if ($request->isFormPost()) {
+ $new_name = $request->getStr('name');
+ $column->setName($new_name);
+
+ if (!strlen($column->getName())) {
+ $errors[] = pht('Column name is required.');
+ $e_name = pht('Required');
+ } else {
+ $e_name = null;
+ }
+
+ $column->setProjectPHID($project->getPHID());
+ $column->attachProject($project);
+ $column->setSequence(0);
+
+ if (!$errors) {
+ $column->save();
+ return id(new AphrontRedirectResponse())->setURI($view_uri);
+ }
+ }
+ if ($errors) {
+ $error_view = new AphrontErrorView();
+ $error_view->setTitle(pht('Form Errors'));
+ $error_view->setErrors($errors);
+ }
+
+ $form = new AphrontFormView();
+ $form->setUser($request->getUser())
+ ->appendChild(
+ id(new AphrontFormTextControl())
+ ->setValue($column->getName())
+ ->setLabel(pht('Name'))
+ ->setName('name')
+ ->setError($e_name)
+ ->setCaption(
+ pht('This will be displayed as the header of the column.')));
+
+ if ($is_new) {
+ $title = pht('Create Column');
+ $submit = pht('Create Column');
+ } else {
+ $title = pht('Edit %s', $column->getName());
+ $submit = pht('Save Column');
+ }
+
+ $form->appendChild(
+ id(new AphrontFormSubmitControl())
+ ->setValue($submit)
+ ->addCancelButton($view_uri));
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $crumbs->addTextCrumb($title);
+
+ $form_box = id(new PHUIObjectBoxView())
+ ->setHeaderText($title)
+ ->setFormError($errors)
+ ->setForm($form);
+
+ return $this->buildApplicationPage(
+ array(
+ $crumbs,
+ $form_box,
+ ),
+ array(
+ 'title' => $title,
+ 'device' => true,
+ ));
+ }
+}

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 29, 3:28 PM (10 h, 5 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6942737
Default Alt Text
D7925.diff (5 KB)

Event Timeline