Path: blob/master/src/applications/conpherence/controller/ConpherenceRoomPictureController.php
12256 views
<?php12final class ConpherenceRoomPictureController3extends ConpherenceController {45public function handleRequest(AphrontRequest $request) {6$viewer = $request->getViewer();7$id = $request->getURIData('id');89$conpherence = id(new ConpherenceThreadQuery())10->setViewer($viewer)11->withIDs(array($id))12->needProfileImage(true)13->requireCapabilities(14array(15PhabricatorPolicyCapability::CAN_VIEW,16PhabricatorPolicyCapability::CAN_EDIT,17))18->executeOne();19if (!$conpherence) {20return new Aphront404Response();21}2223$monogram = $conpherence->getMonogram();2425$supported_formats = PhabricatorFile::getTransformableImageFormats();26$e_file = true;27$errors = array();2829if ($request->isFormPost()) {30$phid = $request->getStr('phid');31$is_default = false;32if ($phid == PhabricatorPHIDConstants::PHID_VOID) {33$phid = null;34$is_default = true;35} else if ($phid) {36$file = id(new PhabricatorFileQuery())37->setViewer($viewer)38->withPHIDs(array($phid))39->executeOne();40} else {41if ($request->getFileExists('picture')) {42$file = PhabricatorFile::newFromPHPUpload(43$_FILES['picture'],44array(45'authorPHID' => $viewer->getPHID(),46'canCDN' => true,47));48} else {49$e_file = pht('Required');50$errors[] = pht(51'You must choose a file when uploading a new room picture.');52}53}5455if (!$errors && !$is_default) {56if (!$file->isTransformableImage()) {57$e_file = pht('Not Supported');58$errors[] = pht(59'This server only supports these image formats: %s.',60implode(', ', $supported_formats));61} else {62$xform = PhabricatorFileTransform::getTransformByKey(63PhabricatorFileThumbnailTransform::TRANSFORM_PROFILE);64$xformed = $xform->executeTransform($file);65}66}6768if (!$errors) {69if ($is_default) {70$new_value = null;71} else {72$xformed->attachToObject($conpherence->getPHID());73$new_value = $xformed->getPHID();74}7576$xactions = array();77$xactions[] = id(new ConpherenceTransaction())78->setTransactionType(79ConpherenceThreadPictureTransaction::TRANSACTIONTYPE)80->setNewValue($new_value);8182$editor = id(new ConpherenceEditor())83->setActor($viewer)84->setContentSourceFromRequest($request)85->setContinueOnMissingFields(true)86->setContinueOnNoEffect(true);8788$editor->applyTransactions($conpherence, $xactions);8990return id(new AphrontRedirectResponse())->setURI('/'.$monogram);91}92}9394$title = pht('Edit Room Picture');9596$form = id(new PHUIFormLayoutView())97->setUser($viewer);9899$default_image = PhabricatorFile::loadBuiltin($viewer, 'conpherence.png');100101$images = array();102103$current = $conpherence->getProfileImagePHID();104$has_current = false;105if ($current) {106$file = id(new PhabricatorFileQuery())107->setViewer($viewer)108->withPHIDs(array($current))109->executeOne();110if ($file) {111if ($file->isTransformableImage()) {112$has_current = true;113$images[$current] = array(114'uri' => $file->getBestURI(),115'tip' => pht('Current Picture'),116);117}118}119}120121$images[PhabricatorPHIDConstants::PHID_VOID] = array(122'uri' => $default_image->getBestURI(),123'tip' => pht('Default Picture'),124);125126require_celerity_resource('people-profile-css');127Javelin::initBehavior('phabricator-tooltips', array());128129$buttons = array();130foreach ($images as $phid => $spec) {131$button = javelin_tag(132'button',133array(134'class' => 'button-grey profile-image-button',135'sigil' => 'has-tooltip',136'meta' => array(137'tip' => $spec['tip'],138'size' => 300,139),140),141phutil_tag(142'img',143array(144'height' => 50,145'width' => 50,146'src' => $spec['uri'],147)));148149$button = array(150phutil_tag(151'input',152array(153'type' => 'hidden',154'name' => 'phid',155'value' => $phid,156)),157$button,158);159160$button = phabricator_form(161$viewer,162array(163'class' => 'profile-image-form',164'method' => 'POST',165),166$button);167168$buttons[] = $button;169}170171if ($has_current) {172$form->appendChild(173id(new AphrontFormMarkupControl())174->setLabel(pht('Current Picture'))175->setValue(array_shift($buttons)));176}177178$form->appendChild(179id(new AphrontFormMarkupControl())180->setLabel(pht('Use Picture'))181->setValue($buttons));182183$form_box = id(new PHUIObjectBoxView())184->setHeaderText($title)185->setFormErrors($errors)186->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)187->setForm($form);188189$upload_form = id(new AphrontFormView())190->setUser($viewer)191->setEncType('multipart/form-data')192->appendChild(193id(new AphrontFormFileControl())194->setName('picture')195->setLabel(pht('Upload Picture'))196->setError($e_file)197->setCaption(198pht('Supported formats: %s', implode(', ', $supported_formats))))199->appendChild(200id(new AphrontFormSubmitControl())201->addCancelButton('/'.$monogram)202->setValue(pht('Upload Picture')));203204$upload_box = id(new PHUIObjectBoxView())205->setHeaderText(pht('Upload New Picture'))206->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)207->setForm($upload_form);208209$crumbs = $this->buildApplicationCrumbs();210$crumbs->addTextCrumb($conpherence->getTitle(), '/'.$monogram);211$crumbs->addTextCrumb(pht('Room Picture'));212$crumbs->setBorder(true);213214$header = id(new PHUIHeaderView())215->setHeader(pht('Edit Room Picture'))216->setHeaderIcon('fa-camera');217218$view = id(new PHUITwoColumnView())219->setHeader($header)220->setFooter(array(221$form_box,222$upload_box,223));224225return $this->newPage()226->setTitle($title)227->setCrumbs($crumbs)228->appendChild(229array(230$view,231));232233}234}235236237