Differential D16751 Diff 40373 src/applications/phortune/controller/PhortuneMerchantPictureController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/phortune/controller/PhortuneMerchantPictureController.php
- This file was added.
<?php | |||||
final class PhortuneMerchantPictureController | |||||
extends PhortuneMerchantController { | |||||
public function handleRequest(AphrontRequest $request) { | |||||
$viewer = $request->getViewer(); | |||||
$id = $request->getURIData('id'); | |||||
$merchant = id(new PhortuneMerchantQuery()) | |||||
->setViewer($viewer) | |||||
->withIDs(array($id)) | |||||
->needProfileImage(true) | |||||
->requireCapabilities( | |||||
array( | |||||
PhabricatorPolicyCapability::CAN_VIEW, | |||||
PhabricatorPolicyCapability::CAN_EDIT, | |||||
)) | |||||
->executeOne(); | |||||
if (!$merchant) { | |||||
return new Aphront404Response(); | |||||
} | |||||
$uri = $merchant->getViewURI(); | |||||
$supported_formats = PhabricatorFile::getTransformableImageFormats(); | |||||
$e_file = true; | |||||
$errors = array(); | |||||
if ($request->isFormPost()) { | |||||
$phid = $request->getStr('phid'); | |||||
$is_default = false; | |||||
if ($phid == PhabricatorPHIDConstants::PHID_VOID) { | |||||
$phid = null; | |||||
$is_default = true; | |||||
} else if ($phid) { | |||||
$file = id(new PhabricatorFileQuery()) | |||||
->setViewer($viewer) | |||||
->withPHIDs(array($phid)) | |||||
->executeOne(); | |||||
} else { | |||||
if ($request->getFileExists('picture')) { | |||||
$file = PhabricatorFile::newFromPHPUpload( | |||||
$_FILES['picture'], | |||||
array( | |||||
'authorPHID' => $viewer->getPHID(), | |||||
'canCDN' => true, | |||||
)); | |||||
} else { | |||||
$e_file = pht('Required'); | |||||
$errors[] = pht( | |||||
'You must choose a file when uploading a merchant logo.'); | |||||
} | |||||
} | |||||
if (!$errors && !$is_default) { | |||||
if (!$file->isTransformableImage()) { | |||||
$e_file = pht('Not Supported'); | |||||
$errors[] = pht( | |||||
'This server only supports these image formats: %s.', | |||||
implode(', ', $supported_formats)); | |||||
} else { | |||||
$xform = PhabricatorFileTransform::getTransformByKey( | |||||
PhabricatorFileThumbnailTransform::TRANSFORM_PROFILE); | |||||
$xformed = $xform->executeTransform($file); | |||||
} | |||||
} | |||||
if (!$errors) { | |||||
if ($is_default) { | |||||
$new_value = null; | |||||
} else { | |||||
$xformed->attachToObject($merchant->getPHID()); | |||||
$new_value = $xformed->getPHID(); | |||||
} | |||||
$xactions = array(); | |||||
$xactions[] = id(new PhortuneMerchantTransaction()) | |||||
->setTransactionType(PhortuneMerchantTransaction::TYPE_PICTURE) | |||||
->setNewValue($new_value); | |||||
$editor = id(new PhortuneMerchantEditor()) | |||||
->setActor($viewer) | |||||
->setContentSourceFromRequest($request) | |||||
->setContinueOnMissingFields(true) | |||||
->setContinueOnNoEffect(true); | |||||
$editor->applyTransactions($merchant, $xactions); | |||||
return id(new AphrontRedirectResponse())->setURI($uri); | |||||
} | |||||
} | |||||
$title = pht('Edit Merchant Picture'); | |||||
$form = id(new PHUIFormLayoutView()) | |||||
->setUser($viewer); | |||||
$default_image = PhabricatorFile::loadBuiltin($viewer, 'merchant.png'); | |||||
$images = array(); | |||||
$current = $merchant->getProfileImagePHID(); | |||||
$has_current = false; | |||||
if ($current) { | |||||
$file = id(new PhabricatorFileQuery()) | |||||
->setViewer($viewer) | |||||
->withPHIDs(array($current)) | |||||
->executeOne(); | |||||
if ($file) { | |||||
if ($file->isTransformableImage()) { | |||||
$has_current = true; | |||||
$images[$current] = array( | |||||
'uri' => $file->getBestURI(), | |||||
'tip' => pht('Current Picture'), | |||||
); | |||||
} | |||||
} | |||||
} | |||||
$images[PhabricatorPHIDConstants::PHID_VOID] = array( | |||||
'uri' => $default_image->getBestURI(), | |||||
'tip' => pht('Default Picture'), | |||||
); | |||||
require_celerity_resource('people-profile-css'); | |||||
Javelin::initBehavior('phabricator-tooltips', array()); | |||||
$buttons = array(); | |||||
foreach ($images as $phid => $spec) { | |||||
$button = javelin_tag( | |||||
'button', | |||||
array( | |||||
'class' => 'grey profile-image-button', | |||||
'sigil' => 'has-tooltip', | |||||
'meta' => array( | |||||
'tip' => $spec['tip'], | |||||
'size' => 300, | |||||
), | |||||
), | |||||
phutil_tag( | |||||
'img', | |||||
array( | |||||
'height' => 50, | |||||
'width' => 50, | |||||
'src' => $spec['uri'], | |||||
))); | |||||
$button = array( | |||||
phutil_tag( | |||||
'input', | |||||
array( | |||||
'type' => 'hidden', | |||||
'name' => 'phid', | |||||
'value' => $phid, | |||||
)), | |||||
$button, | |||||
); | |||||
$button = phabricator_form( | |||||
$viewer, | |||||
array( | |||||
'class' => 'profile-image-form', | |||||
'method' => 'POST', | |||||
), | |||||
$button); | |||||
$buttons[] = $button; | |||||
} | |||||
if ($has_current) { | |||||
$form->appendChild( | |||||
id(new AphrontFormMarkupControl()) | |||||
->setLabel(pht('Current Logo')) | |||||
->setValue(array_shift($buttons))); | |||||
} | |||||
$form->appendChild( | |||||
id(new AphrontFormMarkupControl()) | |||||
->setLabel(pht('Use Logo')) | |||||
->setValue($buttons)); | |||||
$form_box = id(new PHUIObjectBoxView()) | |||||
->setHeaderText($title) | |||||
->setFormErrors($errors) | |||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | |||||
->setForm($form); | |||||
$upload_form = id(new AphrontFormView()) | |||||
->setUser($viewer) | |||||
->setEncType('multipart/form-data') | |||||
->appendChild( | |||||
id(new AphrontFormFileControl()) | |||||
->setName('picture') | |||||
->setLabel(pht('Upload Logo')) | |||||
->setError($e_file) | |||||
->setCaption( | |||||
pht('Supported formats: %s', implode(', ', $supported_formats)))) | |||||
->appendChild( | |||||
id(new AphrontFormSubmitControl()) | |||||
->addCancelButton($uri) | |||||
->setValue(pht('Upload Logo'))); | |||||
$upload_box = id(new PHUIObjectBoxView()) | |||||
->setHeaderText(pht('Upload New Logo')) | |||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | |||||
->setForm($upload_form); | |||||
$crumbs = $this->buildApplicationCrumbs(); | |||||
$crumbs->addTextCrumb($merchant->getName(), $uri); | |||||
$crumbs->addTextCrumb(pht('Merchant Logo')); | |||||
$crumbs->setBorder(true); | |||||
$header = id(new PHUIHeaderView()) | |||||
->setHeader(pht('Edit Merchant Logo')) | |||||
->setHeaderIcon('fa-camera'); | |||||
$view = id(new PHUITwoColumnView()) | |||||
->setHeader($header) | |||||
->setFooter(array( | |||||
$form_box, | |||||
$upload_box, | |||||
)); | |||||
return $this->newPage() | |||||
->setTitle($title) | |||||
->setCrumbs($crumbs) | |||||
->appendChild( | |||||
array( | |||||
$view, | |||||
)); | |||||
} | |||||
} |