Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F17834186
D14770.id35785.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
12 KB
Referenced Files
None
Subscribers
None
D14770.id35785.diff
View Options
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -3352,6 +3352,7 @@
'PhameBlogController' => 'applications/phame/controller/blog/PhameBlogController.php',
'PhameBlogCreateCapability' => 'applications/phame/capability/PhameBlogCreateCapability.php',
'PhameBlogEditController' => 'applications/phame/controller/blog/PhameBlogEditController.php',
+ 'PhameBlogEditEngine' => 'applications/phame/editor/PhameBlogEditEngine.php',
'PhameBlogEditor' => 'applications/phame/editor/PhameBlogEditor.php',
'PhameBlogFeedController' => 'applications/phame/controller/blog/PhameBlogFeedController.php',
'PhameBlogListController' => 'applications/phame/controller/blog/PhameBlogListController.php',
@@ -7735,6 +7736,7 @@
'PhameBlogController' => 'PhameController',
'PhameBlogCreateCapability' => 'PhabricatorPolicyCapability',
'PhameBlogEditController' => 'PhameBlogController',
+ 'PhameBlogEditEngine' => 'PhabricatorEditEngine',
'PhameBlogEditor' => 'PhabricatorApplicationTransactionEditor',
'PhameBlogFeedController' => 'PhameBlogController',
'PhameBlogListController' => 'PhameBlogController',
diff --git a/src/applications/phame/controller/blog/PhameBlogEditController.php b/src/applications/phame/controller/blog/PhameBlogEditController.php
--- a/src/applications/phame/controller/blog/PhameBlogEditController.php
+++ b/src/applications/phame/controller/blog/PhameBlogEditController.php
@@ -1,196 +1,11 @@
<?php
-final class PhameBlogEditController
- extends PhameBlogController {
+final class PhameBlogEditController extends PhameBlogController {
public function handleRequest(AphrontRequest $request) {
- $viewer = $request->getViewer();
- $id = $request->getURIData('id');
-
- if ($id) {
- $blog = id(new PhameBlogQuery())
- ->setViewer($viewer)
- ->withIDs(array($id))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- if (!$blog) {
- return new Aphront404Response();
- }
-
- $submit_button = pht('Save Changes');
- $page_title = pht('Edit Blog');
- $cancel_uri = $this->getApplicationURI('blog/view/'.$blog->getID().'/');
-
- $v_projects = PhabricatorEdgeQuery::loadDestinationPHIDs(
- $blog->getPHID(),
- PhabricatorProjectObjectHasProjectEdgeType::EDGECONST);
- $v_projects = array_reverse($v_projects);
- $v_cc = PhabricatorSubscribersQuery::loadSubscribersForPHID(
- $blog->getPHID());
-
- } else {
- $this->requireApplicationCapability(
- PhameBlogCreateCapability::CAPABILITY);
-
- $blog = PhameBlog::initializeNewBlog($viewer);
-
- $submit_button = pht('Create Blog');
- $page_title = pht('Create Blog');
- $cancel_uri = $this->getApplicationURI();
- $v_projects = array();
- $v_cc = array();
- }
- $name = $blog->getName();
- $description = $blog->getDescription();
- $custom_domain = $blog->getDomain();
- $can_view = $blog->getViewPolicy();
- $can_edit = $blog->getEditPolicy();
-
- $e_name = true;
- $e_custom_domain = null;
- $e_view_policy = null;
- $validation_exception = null;
- if ($request->isFormPost()) {
- $name = $request->getStr('name');
- $description = $request->getStr('description');
- $custom_domain = nonempty($request->getStr('custom_domain'), null);
- $can_view = $request->getStr('can_view');
- $can_edit = $request->getStr('can_edit');
- $v_projects = $request->getArr('projects');
- $v_cc = $request->getArr('cc');
-
- $xactions = array(
- id(new PhameBlogTransaction())
- ->setTransactionType(PhameBlogTransaction::TYPE_NAME)
- ->setNewValue($name),
- id(new PhameBlogTransaction())
- ->setTransactionType(PhameBlogTransaction::TYPE_DESCRIPTION)
- ->setNewValue($description),
- id(new PhameBlogTransaction())
- ->setTransactionType(PhameBlogTransaction::TYPE_DOMAIN)
- ->setNewValue($custom_domain),
- id(new PhameBlogTransaction())
- ->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
- ->setNewValue($can_view),
- id(new PhameBlogTransaction())
- ->setTransactionType(PhabricatorTransactions::TYPE_EDIT_POLICY)
- ->setNewValue($can_edit),
- id(new PhameBlogTransaction())
- ->setTransactionType(PhabricatorTransactions::TYPE_SUBSCRIBERS)
- ->setNewValue(array('=' => $v_cc)),
- );
-
- $proj_edge_type = PhabricatorProjectObjectHasProjectEdgeType::EDGECONST;
- $xactions[] = id(new PhameBlogTransaction())
- ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
- ->setMetadataValue('edge:type', $proj_edge_type)
- ->setNewValue(array('=' => array_fuse($v_projects)));
-
- $editor = id(new PhameBlogEditor())
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnNoEffect(true);
-
- try {
- $editor->applyTransactions($blog, $xactions);
- return id(new AphrontRedirectResponse())
- ->setURI($this->getApplicationURI('blog/view/'.$blog->getID().'/'));
- } catch (PhabricatorApplicationTransactionValidationException $ex) {
- $validation_exception = $ex;
-
- $e_name = $validation_exception->getShortMessage(
- PhameBlogTransaction::TYPE_NAME);
- $e_custom_domain = $validation_exception->getShortMessage(
- PhameBlogTransaction::TYPE_DOMAIN);
- $e_view_policy = $validation_exception->getShortMessage(
- PhabricatorTransactions::TYPE_VIEW_POLICY);
- }
- }
-
- $policies = id(new PhabricatorPolicyQuery())
- ->setViewer($viewer)
- ->setObject($blog)
- ->execute();
-
- $form = id(new AphrontFormView())
- ->setUser($viewer)
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Name'))
- ->setName('name')
- ->setValue($name)
- ->setID('blog-name')
- ->setError($e_name))
- ->appendChild(
- id(new PhabricatorRemarkupControl())
- ->setUser($viewer)
- ->setLabel(pht('Description'))
- ->setName('description')
- ->setValue($description)
- ->setID('blog-description')
- ->setUser($viewer)
- ->setDisableMacros(true))
- ->appendControl(
- id(new AphrontFormTokenizerControl())
- ->setLabel(pht('Subscribers'))
- ->setName('cc')
- ->setValue($v_cc)
- ->setUser($viewer)
- ->setDatasource(new PhabricatorMetaMTAMailableDatasource()))
- ->appendChild(
- id(new AphrontFormPolicyControl())
- ->setUser($viewer)
- ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
- ->setPolicyObject($blog)
- ->setPolicies($policies)
- ->setError($e_view_policy)
- ->setValue($can_view)
- ->setName('can_view'))
- ->appendChild(
- id(new AphrontFormPolicyControl())
- ->setUser($viewer)
- ->setCapability(PhabricatorPolicyCapability::CAN_EDIT)
- ->setPolicyObject($blog)
- ->setPolicies($policies)
- ->setValue($can_edit)
- ->setName('can_edit'))
- ->appendControl(
- id(new AphrontFormTokenizerControl())
- ->setLabel(pht('Projects'))
- ->setName('projects')
- ->setValue($v_projects)
- ->setDatasource(new PhabricatorProjectDatasource()))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Custom Domain'))
- ->setName('custom_domain')
- ->setValue($custom_domain)
- ->setCaption(
- pht('Must include at least one dot (.), e.g. %s', 'blog.example.com'))
- ->setError($e_custom_domain))
- ->appendChild(
- id(new AphrontFormSubmitControl())
- ->addCancelButton($cancel_uri)
- ->setValue($submit_button));
-
- $form_box = id(new PHUIObjectBoxView())
- ->setHeaderText($page_title)
- ->setValidationException($validation_exception)
- ->setForm($form);
-
- $crumbs = $this->buildApplicationCrumbs();
- $crumbs->addTextCrumb(pht('Blogs'), $this->getApplicationURI('blog/'));
- $crumbs->addTextCrumb($page_title, $this->getApplicationURI('blog/new'));
-
- return $this->newPage()
- ->setTitle($page_title)
- ->setCrumbs($crumbs)
- ->appendChild(
- array(
- $form_box,
- ));
+ return id(new PhameBlogEditEngine())
+ ->setController($this)
+ ->buildResponse();
}
+
}
diff --git a/src/applications/phame/editor/PhameBlogEditEngine.php b/src/applications/phame/editor/PhameBlogEditEngine.php
new file mode 100644
--- /dev/null
+++ b/src/applications/phame/editor/PhameBlogEditEngine.php
@@ -0,0 +1,85 @@
+<?php
+
+final class PhameBlogEditEngine
+ extends PhabricatorEditEngine {
+
+ const ENGINECONST = 'phame.blog';
+
+ public function getEngineName() {
+ return pht('Blogs');
+ }
+
+ public function getEngineApplicationClass() {
+ return 'PhabricatorPhameApplication';
+ }
+
+ protected function newEditableObject() {
+ return PhameBlog::initializeNewBlog($this->getViewer());
+ }
+
+ protected function newObjectQuery() {
+ return id(new PhameBlogQuery())
+ ->needProfileImage(true);
+ }
+
+ protected function getObjectCreateTitleText($object) {
+ return pht('Create New Blog');
+ }
+
+ protected function getObjectEditTitleText($object) {
+ return pht('Edit %s', $object->getName());
+ }
+
+ protected function getObjectEditShortText($object) {
+ return $object->getName();
+ }
+
+ protected function getObjectCreateShortText() {
+ return pht('Create Blog');
+ }
+
+ protected function getObjectViewURI($object) {
+ return $object->getManageURI();
+ }
+
+ protected function buildCustomEditFields($object) {
+
+ return array(
+ id(new PhabricatorTextEditField())
+ ->setKey('name')
+ ->setLabel(pht('Name'))
+ ->setDescription(pht('Blog name.'))
+ ->setConduitDescription(pht('Retitle the blog.'))
+ ->setConduitTypeDescription(pht('New blog title.'))
+ ->setTransactionType(PhameBlogTransaction::TYPE_NAME)
+ ->setValue($object->getName()),
+ id(new PhabricatorRemarkupEditField())
+ ->setKey('description')
+ ->setLabel(pht('Description'))
+ ->setDescription(pht('Blog description.'))
+ ->setConduitDescription(pht('Change the blog description.'))
+ ->setConduitTypeDescription(pht('New blog description.'))
+ ->setTransactionType(PhameBlogTransaction::TYPE_DESCRIPTION)
+ ->setValue($object->getDescription()),
+ id(new PhabricatorTextEditField())
+ ->setKey('domain')
+ ->setLabel(pht('Custom Domain'))
+ ->setDescription(pht('Blog domain name.'))
+ ->setConduitDescription(pht('Change the blog domain.'))
+ ->setConduitTypeDescription(pht('New blog domain.'))
+ ->setValue($object->getDomain())
+ ->setTransactionType(PhameBlogTransaction::TYPE_DOMAIN),
+ id(new PhabricatorSelectEditField())
+ ->setKey('status')
+ ->setLabel(pht('Status'))
+ ->setTransactionType(PhameBlogTransaction::TYPE_STATUS)
+ ->setIsConduitOnly(true)
+ ->setOptions(PhameBlog::getStatusNameMap())
+ ->setDescription(pht('Active or archived status.'))
+ ->setConduitDescription(pht('Active or archive the blog.'))
+ ->setConduitTypeDescription(pht('New blog status constant.'))
+ ->setValue($object->getStatus()),
+ );
+ }
+
+}
diff --git a/src/applications/phame/storage/PhameBlog.php b/src/applications/phame/storage/PhameBlog.php
--- a/src/applications/phame/storage/PhameBlog.php
+++ b/src/applications/phame/storage/PhameBlog.php
@@ -193,6 +193,10 @@
return '/phame/blog/view/'.$this->getID().'/';
}
+ public function getManageURI() {
+ return '/phame/blog/manage/'.$this->getID().'/';
+ }
+
public function getProfileImageURI() {
return $this->getProfileImageFile()->getBestURI();
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Jul 27, 2:10 PM (2 w, 5 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
8568546
Default Alt Text
D14770.id35785.diff (12 KB)
Attached To
Mode
D14770: Give PhameBlog an EditEngine
Attached
Detach File
Event Timeline
Log In to Comment