Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Widget/AbstractWidget.php
<?php

namespace XF\Widget;

use
XF\App;

use function
call_user_func_array, func_get_args;

abstract class
AbstractWidget
{
   
/**
     * @var App
     */
   
protected $app;

   
/**
     * @var WidgetConfig
     */
   
protected $widgetConfig;

    protected
$contextParams = [];
   
    protected
$options;
    protected
$defaultOptions = [];

    abstract public function
render();

    public function
__construct(App $app, WidgetConfig $widgetConfig, array $contextParams = [])
    {
       
$this->app = $app;
       
$this->widgetConfig = $widgetConfig;
       
$this->contextParams = $contextParams;
       
$this->options = $this->setupOptions($widgetConfig->options);
    }

    public function
getContextParams()
    {
        return
$this->contextParams;
    }

    protected function
setupOptions(array $options)
    {
        return
array_replace($this->defaultOptions, $options);
    }

    public function
renderOptions()
    {
       
$templateName = $this->getOptionsTemplate();
        if (!
$templateName)
        {
            return
'';
        }
        return
$this->app->templater()->renderTemplate(
           
$templateName, $this->getDefaultTemplateParams('options')
        );
    }

   
/**
     * @return string|null
     */
   
public function getOptionsTemplate()
    {
        return
'admin:widget_def_options_' . $this->widgetConfig->definitionId;
    }

    public function
verifyOptions(\XF\Http\Request $request, array &$options, &$error = null)
    {
        return
true;
    }

    public function
getWidgetConfig()
    {
        return
$this->widgetConfig;
    }

    public function
getTitle()
    {
       
$widgetConfig = $this->widgetConfig;
       
$title = '';
        if (
$widgetConfig->title)
        {
           
$title = $widgetConfig->title;
        }
        else
        {
            if (
$widgetConfig->widgetKey)
            {
               
$title = \XF::phrase('widget.' . $widgetConfig->widgetKey)->render('html', [
                   
'nameOnInvalid' => false
               
]);
            }
        }
        return
$title;
    }

    public function
getDefaultTitle()
    {
       
$widgetConfig = $this->widgetConfig;
        return \
XF::phrase('widget_def.' . $widgetConfig->definitionId)->render();
    }

   
/**
     * @param string $templateName
     * @param array $viewParams
     *
     * @return \XF\Widget\WidgetRenderer
     */
   
public function renderer($templateName = '', array $viewParams = [])
    {
       
$app = $this->app;
       
$class = $app->extendClass('XF\Widget\WidgetRenderer');

       
$viewParams = array_replace($this->getDefaultTemplateParams('render'), $viewParams);
        return new
$class($app->templater(), 'public:' . $templateName, $viewParams);
    }

    protected function
getDefaultTemplateParams($context)
    {
       
$widgetConfig = $this->widgetConfig;
        return [
           
'title' => $this->getTitle() ?: $this->getDefaultTitle(),
           
'widget' => [
               
'id' => $widgetConfig->widgetId,
               
'key' => $widgetConfig->widgetKey,
               
'positions' => $widgetConfig->positions,
               
'definition' => $widgetConfig->definitionId
           
],
           
'context' => $this->contextParams,
           
'options' => $this->options
       
];
    }

    public function
postDelete()
    {
        return;
    }

   
/**
     * @return App
     */
   
public function app()
    {
        return
$this->app;
    }

   
/**
     * @return \XF\Db\AbstractAdapter
     */
   
public function db()
    {
        return
$this->app->db();
    }

   
/**
     * @return \XF\Mvc\Entity\Manager
     */
   
public function em()
    {
        return
$this->app->em();
    }

   
/**
     * @param string $repository
     *
     * @return \XF\Mvc\Entity\Repository
     */
   
public function repository($repository)
    {
        return
$this->app->repository($repository);
    }

   
/**
     * @param $finder
     *
     * @return \XF\Mvc\Entity\Finder
     */
   
public function finder($finder)
    {
        return
$this->app->finder($finder);
    }

   
/**
     * @param string $finder
     * @param array $where
     * @param string|array $with
     *
     * @return null|\XF\Mvc\Entity\Entity
     */
   
public function findOne($finder, array $where, $with = null)
    {
        return
$this->app->em()->findOne($finder, $where, $with);
    }

   
/**
     * @param string $class
     *
     * @return \XF\Service\AbstractService
     */
   
public function service($class)
    {
        return
call_user_func_array([$this->app, 'service'], func_get_args());
    }
}