diff --git a/src/applications/phortune/editor/PhortuneMerchantEditor.php b/src/applications/phortune/editor/PhortuneMerchantEditor.php index e2db3688e7..53fc7c94f2 100644 --- a/src/applications/phortune/editor/PhortuneMerchantEditor.php +++ b/src/applications/phortune/editor/PhortuneMerchantEditor.php @@ -1,164 +1,165 @@ getTransactionType()) { case PhortuneMerchantTransaction::TYPE_NAME: return $object->getName(); case PhortuneMerchantTransaction::TYPE_DESCRIPTION: return $object->getDescription(); case PhortuneMerchantTransaction::TYPE_CONTACTINFO: return $object->getContactInfo(); case PhortuneMerchantTransaction::TYPE_INVOICEEMAIL: return $object->getInvoiceEmail(); case PhortuneMerchantTransaction::TYPE_INVOICEFOOTER: return $object->getInvoiceFooter(); case PhortuneMerchantTransaction::TYPE_PICTURE: return $object->getProfileImagePHID(); } return parent::getCustomTransactionOldValue($object, $xaction); } protected function getCustomTransactionNewValue( PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction) { switch ($xaction->getTransactionType()) { case PhortuneMerchantTransaction::TYPE_NAME: case PhortuneMerchantTransaction::TYPE_DESCRIPTION: case PhortuneMerchantTransaction::TYPE_CONTACTINFO: case PhortuneMerchantTransaction::TYPE_INVOICEEMAIL: case PhortuneMerchantTransaction::TYPE_INVOICEFOOTER: case PhortuneMerchantTransaction::TYPE_PICTURE: return $xaction->getNewValue(); } return parent::getCustomTransactionNewValue($object, $xaction); } protected function applyCustomInternalTransaction( PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction) { switch ($xaction->getTransactionType()) { case PhortuneMerchantTransaction::TYPE_NAME: $object->setName($xaction->getNewValue()); return; case PhortuneMerchantTransaction::TYPE_DESCRIPTION: $object->setDescription($xaction->getNewValue()); return; case PhortuneMerchantTransaction::TYPE_CONTACTINFO: $object->setContactInfo($xaction->getNewValue()); return; case PhortuneMerchantTransaction::TYPE_INVOICEEMAIL: $object->setInvoiceEmail($xaction->getNewValue()); return; case PhortuneMerchantTransaction::TYPE_INVOICEFOOTER: $object->setInvoiceFooter($xaction->getNewValue()); return; case PhortuneMerchantTransaction::TYPE_PICTURE: $object->setProfileImagePHID($xaction->getNewValue()); return; } return parent::applyCustomInternalTransaction($object, $xaction); } protected function applyCustomExternalTransaction( PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction) { switch ($xaction->getTransactionType()) { case PhortuneMerchantTransaction::TYPE_NAME: case PhortuneMerchantTransaction::TYPE_DESCRIPTION: case PhortuneMerchantTransaction::TYPE_CONTACTINFO: case PhortuneMerchantTransaction::TYPE_INVOICEEMAIL: case PhortuneMerchantTransaction::TYPE_INVOICEFOOTER: case PhortuneMerchantTransaction::TYPE_PICTURE: return; } return parent::applyCustomExternalTransaction($object, $xaction); } protected function validateTransaction( PhabricatorLiskDAO $object, $type, array $xactions) { $errors = parent::validateTransaction($object, $type, $xactions); switch ($type) { case PhortuneMerchantTransaction::TYPE_NAME: $missing = $this->validateIsEmptyTextField( $object->getName(), $xactions); if ($missing) { $error = new PhabricatorApplicationTransactionValidationError( $type, pht('Required'), pht('Merchant name is required.'), nonempty(last($xactions), null)); $error->setIsMissingFieldError(true); $errors[] = $error; } break; case PhortuneMerchantTransaction::TYPE_INVOICEEMAIL: + $new_email = null; foreach ($xactions as $xaction) { switch ($xaction->getTransactionType()) { case PhortuneMerchantTransaction::TYPE_INVOICEEMAIL: $new_email = $xaction->getNewValue(); break; } } if (strlen($new_email)) { $email = new PhutilEmailAddress($new_email); $domain = $email->getDomainName(); if (!$domain) { $error = new PhabricatorApplicationTransactionValidationError( $type, pht('Invalid'), pht('%s is not a valid email.', $new_email), nonempty(last($xactions), null)); $errors[] = $error; } } break; } return $errors; } } diff --git a/src/applications/phortune/storage/PhortuneMerchant.php b/src/applications/phortune/storage/PhortuneMerchant.php index a57e5bd69e..69675c2ebc 100644 --- a/src/applications/phortune/storage/PhortuneMerchant.php +++ b/src/applications/phortune/storage/PhortuneMerchant.php @@ -1,125 +1,128 @@ setViewPolicy(PhabricatorPolicies::getMostOpenPolicy()) - ->attachMemberPHIDs(array()); + ->attachMemberPHIDs(array()) + ->setContactInfo('') + ->setInvoiceEmail('') + ->setInvoiceFooter(''); } protected function getConfiguration() { return array( self::CONFIG_AUX_PHID => true, self::CONFIG_COLUMN_SCHEMA => array( 'name' => 'text255', 'description' => 'text', 'contactInfo' => 'text', 'invoiceEmail' => 'text255', 'invoiceFooter' => 'text', 'profileImagePHID' => 'phid?', ), ) + parent::getConfiguration(); } public function generatePHID() { return PhabricatorPHID::generateNewPHID( PhortuneMerchantPHIDType::TYPECONST); } public function getMemberPHIDs() { return $this->assertAttached($this->memberPHIDs); } public function attachMemberPHIDs(array $member_phids) { $this->memberPHIDs = $member_phids; return $this; } public function getViewURI() { return '/phortune/merchant/'.$this->getID().'/'; } public function getProfileImageURI() { return $this->getProfileImageFile()->getBestURI(); } public function attachProfileImageFile(PhabricatorFile $file) { $this->profileImageFile = $file; return $this; } public function getProfileImageFile() { return $this->assertAttached($this->profileImageFile); } /* -( PhabricatorApplicationTransactionInterface )------------------------- */ public function getApplicationTransactionEditor() { return new PhortuneMerchantEditor(); } public function getApplicationTransactionObject() { return $this; } public function getApplicationTransactionTemplate() { return new PhortuneMerchantTransaction(); } public function willRenderTimeline( PhabricatorApplicationTransactionView $timeline, AphrontRequest $request) { return $timeline; } /* -( PhabricatorPolicyInterface )----------------------------------------- */ public function getCapabilities() { return array( PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT, ); } public function getPolicy($capability) { switch ($capability) { case PhabricatorPolicyCapability::CAN_VIEW: return $this->getViewPolicy(); case PhabricatorPolicyCapability::CAN_EDIT: return PhabricatorPolicies::POLICY_NOONE; } } public function hasAutomaticCapability($capability, PhabricatorUser $viewer) { $members = array_fuse($this->getMemberPHIDs()); if (isset($members[$viewer->getPHID()])) { return true; } return false; } public function describeAutomaticCapability($capability) { return pht("A merchant's members an always view and edit it."); } }