%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/ui/form/widgets/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/ui/form/widgets/JsInputWidget.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\ui\form\widgets;
use humhub\widgets\JsWidget;
use yii\base\InvalidConfigException;
use yii\base\Model;
use yii\helpers\Html;
use yii\widgets\InputWidget;
/**
* InputWidget is the base class for widgets that collect user inputs.
*
* An input widget can be associated with a data model and an attribute,
* or a name and a value. If the former, the name and the value will
* be generated automatically.
*
* Classes extending from this widget can be used in an [[\yii\widgets\ActiveForm|ActiveForm]]
* using the [[\yii\widgets\ActiveField::widget()|widget()]] method, for example like this:
*
* ```php
* <?= $form->field($model, 'from_date')->widget('WidgetClassName', [
* // configure additional widget properties here
* ]) ?>
* ```
*
* For more details and usage information on InputWidget, see the [guide article on forms](guide:input-forms).
*
* @see InputWidget
* @author Luke
* @since 1.3
*/
abstract class JsInputWidget extends JsWidget
{
/**
* If the ActiveForm is set, it should be used to create input field.
* This may differ between implementations.
*
* @var \yii\widgets\ActiveForm
*/
public $form;
/**
* @var Model the data model that this widget is associated with.
*/
public $model;
/**
* @var string the model attribute that this widget is associated with.
*/
public $attribute;
/**
* @var string the input name. This must be set if [[model]] and [[attribute]] are not set.
*/
public $name;
/**
* @var string the input value.
*/
public $value;
/**
* @var array the HTML attributes for the input tag.
* @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered.
*/
public $options = [];
/**
* @var \yii\widgets\ActiveField active input field, which triggers this widget rendering.
* This field will be automatically filled up in case widget instance is created via [[\yii\widgets\ActiveField::widget()]].
* @since 1.6
*/
public $field;
/**
* Initializes the widget.
* If you override this method, make sure you call the parent implementation first.
*/
public function beforeRun()
{
if (!parent::beforeRun()) {
return false;
}
if ($this->name === null && !$this->hasModel()) {
throw new InvalidConfigException("Either 'name', or 'model' and 'attribute' properties must be specified.");
}
if (!$this->id && !isset($this->options['id'])) {
$this->id = $this->options['id'] = $this->hasModel() ? Html::getInputId($this->model, $this->attribute) : $this->getId(true);
}
return true;
}
/**
* Should be returned by [[run]] in order to prevent rendering the field.
* This function will prepare the ActiveField instance by resetting the template and label and return
* an empty string.
*
* ```php
* public function run()
* {
* if(!$this->shouldRender()) {
* return $this->emptyResult();
* }
*
* return parent::run();
* }
* ```
* @return string
* @since 1.6
*/
protected function emptyResult()
{
if($this->field) {
$this->field->label(false);
// Prevents empty-help/error block rendering
$this->field->template = '';
if($this->field instanceof ActiveField) {
$this->field->preventRendering = true;
}
}
return '';
}
/**
* @return string the field value either by extracting from model or if no model is given `$this->value`
* @since 1.3
*/
protected function getValue()
{
if ($this->hasModel()) {
return Html::getAttributeValue($this->model, $this->attribute);
}
return $this->value;
}
/**
* @return bool whether this widget is associated with a data model.
*/
protected function hasModel()
{
return $this->model instanceof Model && $this->attribute !== null;
}
}