Something went wrong. Try again.
@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471<?php
final class AphrontDialogView extends AphrontView implements AphrontResponseProducerInterface {
private $title; private $shortTitle; private $submitButton; private $cancelURI; private $cancelText = 'Cancel'; private $submitURI; private $hidden = array(); private $class; private $renderAsForm = true; private $formID; private $footers = array(); private $isStandalone; private $method = 'POST'; private $disableWorkflowOnSubmit; private $disableWorkflowOnCancel; private $width = 'default'; private $errors = array(); private $flush; private $validationException; private $objectList; private $resizeX; private $resizeY;
const WIDTH_DEFAULT = 'default'; const WIDTH_FORM = 'form'; const WIDTH_FULL = 'full';
public function setMethod($method) { $this->method = $method; return $this; }
public function setIsStandalone($is_standalone) { $this->isStandalone = $is_standalone; return $this; }
public function setErrors(array $errors) { $this->errors = $errors; return $this; }
public function getIsStandalone() { return $this->isStandalone; }
public function setSubmitURI($uri) { $this->submitURI = $uri; return $this; }
public function setTitle($title) { $this->title = $title; return $this; }
public function getTitle() { return $this->title; }
public function setShortTitle($short_title) { $this->shortTitle = $short_title; return $this; }
public function getShortTitle() { return $this->shortTitle; }
public function setResizeY($resize_y) { $this->resizeY = $resize_y; return $this; }
public function getResizeY() { return $this->resizeY; }
public function setResizeX($resize_x) { $this->resizeX = $resize_x; return $this; }
public function getResizeX() { return $this->resizeX; }
public function addSubmitButton($text = null) { if (!$text) { $text = pht('Okay'); }
$this->submitButton = $text; return $this; }
public function addCancelButton($uri, $text = null) { if (!$text) { $text = pht('Cancel'); }
$this->cancelURI = $uri; $this->cancelText = $text; return $this; }
public function addFooter($footer) { $this->footers[] = $footer; return $this; }
public function addHiddenInput($key, $value) { if (is_array($value)) { foreach ($value as $hidden_key => $hidden_value) { $this->hidden[] = array($key.'['.$hidden_key.']', $hidden_value); } } else { $this->hidden[] = array($key, $value); } return $this; }
public function setClass($class) { $this->class = $class; return $this; }
public function setFlush($flush) { $this->flush = $flush; return $this; }
public function setRenderDialogAsDiv() { // TODO: This API is awkward. $this->renderAsForm = false; return $this; }
public function setFormID($id) { $this->formID = $id; return $this; }
public function setWidth($width) { $this->width = $width; return $this; }
public function setObjectList(PHUIObjectItemListView $list) { $this->objectList = true; $box = id(new PHUIObjectBoxView()) ->setObjectList($list); return $this->appendChild($box); }
public function appendRemarkup($remarkup) { $viewer = $this->getViewer(); $view = new PHUIRemarkupView($viewer, $remarkup);
$view_tag = phutil_tag( 'div', array( 'class' => 'aphront-dialog-view-paragraph', ), $view);
return $this->appendChild($view_tag); }
public function appendParagraph($paragraph) { return $this->appendParagraphTag($paragraph); }
public function appendCommand($command) { $command_tag = phutil_tag('tt', array(), $command); return $this->appendParagraphTag( $command_tag, 'aphront-dialog-view-command'); }
private function appendParagraphTag($content, $classes = null) { if ($classes) { $classes = (array)$classes; } else { $classes = array(); }
array_unshift($classes, 'aphront-dialog-view-paragraph');
$paragraph_tag = phutil_tag( 'p', array( 'class' => implode(' ', $classes), ), $content);
return $this->appendChild($paragraph_tag); }
public function appendList(array $items) { $listitems = array(); foreach ($items as $item) { $listitems[] = phutil_tag( 'li', array( 'class' => 'remarkup-list-item', ), $item); } return $this->appendChild( phutil_tag( 'ul', array( 'class' => 'remarkup-list', ), $listitems)); }
public function appendForm(AphrontFormView $form) { return $this->appendChild($form->buildLayoutView()); }
public function setDisableWorkflowOnSubmit($disable_workflow_on_submit) { $this->disableWorkflowOnSubmit = $disable_workflow_on_submit; return $this; }
public function getDisableWorkflowOnSubmit() { return $this->disableWorkflowOnSubmit; }
public function setDisableWorkflowOnCancel($disable_workflow_on_cancel) { $this->disableWorkflowOnCancel = $disable_workflow_on_cancel; return $this; }
public function getDisableWorkflowOnCancel() { return $this->disableWorkflowOnCancel; }
public function setValidationException( PhabricatorApplicationTransactionValidationException $ex = null) { $this->validationException = $ex; return $this; }
public function render() { require_celerity_resource('aphront-dialog-view-css');
$buttons = array(); if ($this->submitButton) { $meta = array(); if ($this->disableWorkflowOnSubmit) { $meta['disableWorkflow'] = true; }
$buttons[] = javelin_tag( 'button', array( 'name' => '__submit__', 'sigil' => '__default__', 'type' => 'submit', 'meta' => $meta, ), $this->submitButton); }
if ($this->cancelURI) { $meta = array(); if ($this->disableWorkflowOnCancel) { $meta['disableWorkflow'] = true; }
$buttons[] = javelin_tag( 'a', array( 'href' => $this->cancelURI, 'class' => 'button button-grey', 'name' => '__cancel__', 'sigil' => 'jx-workflow-button', 'meta' => $meta, ), $this->cancelText); }
if (!$this->hasViewer()) { throw new Exception( pht( 'You must call %s when rendering an %s.', 'setViewer()', __CLASS__)); }
$classes = array(); $classes[] = 'aphront-dialog-view'; $classes[] = $this->class; if ($this->flush) { $classes[] = 'aphront-dialog-flush'; }
switch ($this->width) { case self::WIDTH_FORM: case self::WIDTH_FULL: $classes[] = 'aphront-dialog-view-width-'.$this->width; break; case self::WIDTH_DEFAULT: break; default: throw new Exception( pht( "Unknown dialog width '%s'!", $this->width)); }
if ($this->isStandalone) { $classes[] = 'aphront-dialog-view-standalone'; }
if ($this->objectList) { $classes[] = 'aphront-dialog-object-list'; }
$attributes = array( 'class' => implode(' ', $classes), 'sigil' => 'jx-dialog', 'role' => 'dialog', );
$form_attributes = array( 'action' => $this->submitURI, 'method' => $this->method, 'id' => $this->formID, );
$hidden_inputs = array(); $hidden_inputs[] = phutil_tag( 'input', array( 'type' => 'hidden', 'name' => '__dialog__', 'value' => '1', ));
foreach ($this->hidden as $desc) { list($key, $value) = $desc; $hidden_inputs[] = javelin_tag( 'input', array( 'type' => 'hidden', 'name' => $key, 'value' => $value, 'sigil' => 'aphront-dialog-application-input', )); }
if (!$this->renderAsForm) { $buttons = array( phabricator_form( $this->getViewer(), $form_attributes, array_merge($hidden_inputs, $buttons)), ); }
$children = $this->renderChildren();
$errors = $this->errors;
$ex = $this->validationException; $exception_errors = null; if ($ex) { foreach ($ex->getErrors() as $error) { $errors[] = $error->getMessage(); } }
if ($errors) { $children = array( id(new PHUIInfoView())->setErrors($errors), $children, ); }
$header = new PHUIHeaderView(); $header->setHeader($this->title);
$footer = null; if ($this->footers) { $footer = phutil_tag( 'div', array( 'class' => 'aphront-dialog-foot', ), $this->footers); }
$resize = null; if ($this->resizeX || $this->resizeY) { $resize = javelin_tag( 'div', array( 'class' => 'aphront-dialog-resize', 'sigil' => 'jx-dialog-resize', 'meta' => array( 'resizeX' => $this->resizeX, 'resizeY' => $this->resizeY, ), )); }
$tail = null; if ($buttons || $footer) { $tail = phutil_tag( 'div', array( 'class' => 'aphront-dialog-tail grouped', ), array( $buttons, $footer, $resize, )); }
$content = array( phutil_tag( 'div', array( 'class' => 'aphront-dialog-head', ), $header), phutil_tag('div', array( 'class' => 'aphront-dialog-body grouped', ), $children), $tail, );
if ($this->renderAsForm) { return phabricator_form( $this->getViewer(), $form_attributes + $attributes, array($hidden_inputs, $content)); } else { return javelin_tag( 'div', $attributes, $content); } }
/* -( AphrontResponseProducerInterface )----------------------------------- */
public function produceAphrontResponse() { return id(new AphrontDialogResponse()) ->setDialog($this); }
}