Changeset View
Changeset View
Standalone View
Standalone View
src/applications/transactions/draft/PhabricatorDraftEngine.php
- This file was added.
| <?php | |||||
| abstract class PhabricatorDraftEngine | |||||
| extends Phobject { | |||||
| private $viewer; | |||||
| private $object; | |||||
| private $hasVersionedDraft; | |||||
| private $versionedDraft; | |||||
| final public function setViewer(PhabricatorUser $viewer) { | |||||
| $this->viewer = $viewer; | |||||
| return $this; | |||||
| } | |||||
| final public function getViewer() { | |||||
| return $this->viewer; | |||||
| } | |||||
| final public function setObject($object) { | |||||
| $this->object = $object; | |||||
| return $this; | |||||
| } | |||||
| final public function getObject() { | |||||
| return $this->object; | |||||
| } | |||||
| final public function setVersionedDraft( | |||||
| PhabricatorVersionedDraft $draft = null) { | |||||
| $this->hasVersionedDraft = true; | |||||
| $this->versionedDraft = $draft; | |||||
| return $this; | |||||
| } | |||||
| final public function getVersionedDraft() { | |||||
| if (!$this->hasVersionedDraft) { | |||||
| $draft = PhabricatorVersionedDraft::loadDraft( | |||||
| $this->getObject()->getPHID(), | |||||
| $this->getViewer()->getPHID()); | |||||
| $this->setVersionedDraft($draft); | |||||
| } | |||||
| return $this->versionedDraft; | |||||
| } | |||||
| protected function hasVersionedDraftContent() { | |||||
| $draft = $this->getVersionedDraft(); | |||||
| if (!$draft) { | |||||
| return false; | |||||
| } | |||||
| if ($draft->getProperty('comment')) { | |||||
| return true; | |||||
| } | |||||
| if ($draft->getProperty('actions')) { | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| protected function hasCustomDraftContent() { | |||||
| return false; | |||||
| } | |||||
| final protected function hasAnyDraftContent() { | |||||
| if ($this->hasVersionedDraftContent()) { | |||||
| return true; | |||||
| } | |||||
| if ($this->hasCustomDraftContent()) { | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| final public function synchronize() { | |||||
| $object_phid = $this->getObject()->getPHID(); | |||||
| $viewer_phid = $this->getViewer()->getPHID(); | |||||
| $has_draft = $this->hasAnyDraftContent(); | |||||
| $draft_type = PhabricatorObjectHasDraftEdgeType::EDGECONST; | |||||
| $editor = id(new PhabricatorEdgeEditor()); | |||||
| if ($has_draft) { | |||||
| $editor->addEdge($object_phid, $draft_type, $viewer_phid); | |||||
| } else { | |||||
| $editor->removeEdge($object_phid, $draft_type, $viewer_phid); | |||||
| } | |||||
| $editor->save(); | |||||
| } | |||||
| } | |||||