node !== null) { /** @var View $view */ $view = $this->getView(); $this->addHtml( '

' . $view->escape( sprintf($this->translate('Modify "%s"'), $this->node->getAlias()) ) . '

' ); } $this->addElement('text', 'name', [ 'label' => $this->translate('ID'), 'value' => (string) $this->node, 'required' => true, 'readonly' => $this->node ? true : null, 'description' => $this->translate('This is the unique identifier of this process') ]); $this->addElement('text', 'alias', array( 'label' => $this->translate('Display Name'), 'description' => $this->translate( 'Usually this name will be shown for this node. Equals ID' . ' if not given' ), )); $this->addElement('select', 'operator', array( 'label' => $this->translate('Operator'), 'required' => true, 'multiOptions' => Node::getOperators() )); if ($this->node !== null) { $display = $this->node->getDisplay() ?: 1; } else { $display = 1; } $this->addElement('select', 'display', array( 'label' => $this->translate('Visualization'), 'required' => true, 'description' => $this->translate( 'Where to show this process' ), 'multiOptions' => array( "$display" => $this->translate('Toplevel Process'), '0' => $this->translate('Subprocess only'), ) )); $this->addElement('text', 'url', array( 'label' => $this->translate('Info URL'), 'description' => $this->translate( 'URL pointing to more information about this node' ) )); if ($node = $this->node) { if ($node->hasAlias()) { $this->getElement('alias')->setValue($node->getAlias()); } $this->getElement('operator')->setValue($node->getOperator()); $this->getElement('display')->setValue($node->getDisplay()); if ($node->hasInfoUrl()) { $this->getElement('url')->setValue($node->getInfoUrl()); } } } /** * @param BpNode $node * @return $this */ public function setNode(BpNode $node) { $this->node = $node; return $this; } public function onSuccess() { $changes = ProcessChanges::construct($this->bp, $this->session); $modifications = array(); $alias = $this->getValue('alias'); $operator = $this->getValue('operator'); $display = $this->getValue('display'); $url = $this->getValue('url'); if (empty($url)) { $url = null; } if (empty($alias)) { $alias = null; } // TODO: rename if ($node = $this->node) { if ($display !== $node->getDisplay()) { $modifications['display'] = $display; } if ($operator !== $node->getOperator()) { $modifications['operator'] = $operator; } if ($url !== $node->getInfoUrl()) { $modifications['infoUrl'] = $url; } if ($alias !== $node->getAlias()) { $modifications['alias'] = $alias; } } else { $modifications = array( 'display' => $display, 'operator' => $operator, 'infoUrl' => $url, 'alias' => $alias, ); } if (! empty($modifications)) { if ($this->node === null) { $changes->createNode($this->getValue('name'), $modifications); } else { $changes->modifyNode($this->node, $modifications); } Notification::success( sprintf( 'Process %s has been modified', $this->bp->getName() ) ); } // Trigger session destruction to make sure it get's stored. // TODO: figure out why this is necessary, might be an unclean shutdown on redirect unset($changes); parent::onSuccess(); } }