Path: blob/master/src/view/control/PhabricatorObjectSelectorDialog.php
12241 views
<?php12final class PhabricatorObjectSelectorDialog extends Phobject {34private $user;5private $filters = array();6private $handles = array();7private $cancelURI;8private $submitURI;9private $searchURI;10private $selectedFilter;11private $excluded;12private $initialPHIDs;13private $maximumSelectionSize;1415private $title;16private $header;17private $buttonText;18private $instructions;1920public function setUser($user) {21$this->user = $user;22return $this;23}2425public function setFilters(array $filters) {26$this->filters = $filters;27return $this;28}2930public function setSelectedFilter($selected_filter) {31$this->selectedFilter = $selected_filter;32return $this;33}3435public function setExcluded($excluded_phid) {36$this->excluded = $excluded_phid;37return $this;38}3940public function setHandles(array $handles) {41assert_instances_of($handles, 'PhabricatorObjectHandle');42$this->handles = $handles;43return $this;44}4546public function setCancelURI($cancel_uri) {47$this->cancelURI = $cancel_uri;48return $this;49}5051public function setSubmitURI($submit_uri) {52$this->submitURI = $submit_uri;53return $this;54}5556public function setSearchURI($search_uri) {57$this->searchURI = $search_uri;58return $this;59}6061public function setTitle($title) {62$this->title = $title;63return $this;64}6566public function setHeader($header) {67$this->header = $header;68return $this;69}7071public function setButtonText($button_text) {72$this->buttonText = $button_text;73return $this;74}7576public function setInstructions($instructions) {77$this->instructions = $instructions;78return $this;79}8081public function setInitialPHIDs(array $initial_phids) {82$this->initialPHIDs = $initial_phids;83return $this;84}8586public function getInitialPHIDs() {87return $this->initialPHIDs;88}8990public function setMaximumSelectionSize($maximum_selection_size) {91$this->maximumSelectionSize = $maximum_selection_size;92return $this;93}9495public function getMaximumSelectionSize() {96return $this->maximumSelectionSize;97}9899public function buildDialog() {100$user = $this->user;101102$filter_id = celerity_generate_unique_node_id();103$query_id = celerity_generate_unique_node_id();104$results_id = celerity_generate_unique_node_id();105$current_id = celerity_generate_unique_node_id();106$search_id = celerity_generate_unique_node_id();107$form_id = celerity_generate_unique_node_id();108109require_celerity_resource('phabricator-object-selector-css');110111$options = array();112foreach ($this->filters as $key => $label) {113$options[] = phutil_tag(114'option',115array(116'value' => $key,117'selected' => ($key == $this->selectedFilter)118? 'selected'119: null,120),121$label);122}123124$instructions = null;125if ($this->instructions) {126$instructions = phutil_tag(127'p',128array('class' => 'phabricator-object-selector-instructions'),129$this->instructions);130}131132$search_box = phabricator_form(133$user,134array(135'method' => 'POST',136'action' => $this->submitURI,137'id' => $search_id,138),139phutil_tag(140'table',141array('class' => 'phabricator-object-selector-search'),142phutil_tag('tr', array(), array(143phutil_tag(144'td',145array('class' => 'phabricator-object-selector-search-filter'),146phutil_tag('select', array('id' => $filter_id), $options)),147phutil_tag(148'td',149array('class' => 'phabricator-object-selector-search-text'),150phutil_tag('input', array('id' => $query_id, 'type' => 'text'))),151))));152153$result_box = phutil_tag(154'div',155array(156'class' => 'phabricator-object-selector-results',157'id' => $results_id,158),159'');160161$attached_box = phutil_tag_div(162'phabricator-object-selector-current',163phutil_tag_div(164'phabricator-object-selector-currently-attached',165array(166phutil_tag_div('phabricator-object-selector-header', $this->header),167phutil_tag('div', array('id' => $current_id)),168$instructions,169)));170171$dialog = new AphrontDialogView();172$dialog173->setUser($this->user)174->setTitle($this->title)175->setClass('phabricator-object-selector-dialog')176->appendChild($search_box)177->appendChild($result_box)178->appendChild($attached_box)179->setRenderDialogAsDiv()180->setFormID($form_id)181->addSubmitButton($this->buttonText);182183if ($this->cancelURI) {184$dialog->addCancelButton($this->cancelURI);185}186187$handle_views = array();188foreach ($this->handles as $handle) {189$phid = $handle->getPHID();190$view = new PhabricatorHandleObjectSelectorDataView($handle);191$handle_views[$phid] = $view->renderData();192}193194$dialog->addHiddenInput('phids', implode(';', array_keys($this->handles)));195196$initial_phids = $this->getInitialPHIDs();197if ($initial_phids) {198$initial_phids = implode(', ', $initial_phids);199$dialog->addHiddenInput('initialPHIDs', $initial_phids);200}201202$maximum = $this->getMaximumSelectionSize();203204Javelin::initBehavior(205'phabricator-object-selector',206array(207'filter' => $filter_id,208'query' => $query_id,209'search' => $search_id,210'results' => $results_id,211'current' => $current_id,212'form' => $form_id,213'exclude' => $this->excluded,214'uri' => $this->searchURI,215'handles' => $handle_views,216'maximum' => $maximum,217));218219$dialog->setResizeX(true);220$dialog->setResizeY($results_id);221222return $dialog;223}224225}226227228