%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/components/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/components/Widget.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2017 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\components; use Yii; use humhub\libs\WidgetCreateEvent; /** * @inheritdoc * @property-read \humhub\modules\ui\view\components\View $view */ class Widget extends \yii\base\Widget { /** * @event WidgetCreateEvent an event raised before creating a widget. */ const EVENT_CREATE = 'create'; /** * @var bool if set to false this widget won't be rendered */ public $render = true; /** * @var string defines an optional layout */ public $widgetLayout; /** * Creates a widget instance and runs it. * * The widget rendering result is returned by this method. * @param array $config name-value pairs that will be used to initialize the object properties * @return string the rendering result of the widget. * @throws \Exception */ public static function widget($config = []) { if (!isset($config['class'])) { $config['class'] = get_called_class(); } if (isset($config['render']) && $config['render'] === false) { return ''; } \yii\base\Event::trigger(static::class, self::EVENT_CREATE, new WidgetCreateEvent($config)); ob_start(); ob_implicit_flush(false); try { /* @var $widget Widget */ $widget = Yii::createObject($config); $out = ''; if ($widget->beforeRun()) { $result = (empty($widget->widgetLayout)) ? $widget->run() : $widget->render($widget->widgetLayout, $widget->getLayoutViewParams()); $out = $widget->afterRun($result); } } catch (\Throwable $e) { // close the output buffer opened above if it has not been closed already if (ob_get_level() > 0) { ob_end_clean(); } throw $e; } return ob_get_clean() . $out; } /** * Returns an array of view parameter used if [[layout]] is set. * * By default the actual widget output created by [[run()]] is set as `content` param. * * @return array */ public function getLayoutViewParams() { return [ 'content' => $this->run() ]; } /** * Process is a wrapper for the run method */ public function process() { return $this->run(); } }