| Server IP : 54.36.91.62 / Your IP : 216.73.217.112 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/amisdesseniors-fr/aix/libraries/kunena/src/Controller/ |
Upload File : |
<?php
/**
* Kunena Component
*
* @package Kunena.Framework
* @subpackage Controller
*
* @copyright Copyright (C) 2008 - @currentyear@ Kunena Team. All rights reserved.
* @license https://www.gnu.org/copyleft/gpl.html GNU/GPL
* @link https://www.kunena.org
**/
namespace Kunena\Forum\Libraries\Controller;
\defined('_JEXEC') or die();
use Exception;
use InvalidArgumentException;
use Joomla\CMS\Document\Document;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Kunena\Forum\Libraries\Config\KunenaConfig;
use Kunena\Forum\Libraries\Exception\KunenaExceptionAuthorise;
use Kunena\Forum\Libraries\Layout\KunenaBase;
use Kunena\Forum\Libraries\Layout\KunenaLayout;
use Kunena\Forum\Libraries\Profiler\KunenaProfiler;
/**
* Class KunenaControllerDisplay
*
* @since Kunena 6.0
*/
abstract class KunenaControllerDisplay extends KunenaControllerBase
{
/**
* @var null|KunenaLayout
* @since Kunena 6.0
*/
public $output = null;
/**
* @var string
* @since Kunena 6.0
*/
public $layout = 'default';
public $user;
public $headerText;
public $pagination;
/**
* @var KunenaConfig
* @since Kunena 6.0
*/
public $config;
/**
* @var string
* @since Kunena 6.0
*/
protected $name = 'Empty';
/**
* @var boolean
* @since Kunena 6.0
*/
protected $primary = false;
/**
* @var Document
* @since Kunena 6.0
*/
protected $document;
/**
* @internal
*
* @return \Kunena\Forum\Libraries\Controller\KunenaControllerDisplay
*
* @since Kunena 6.0
*/
public function setPrimary()
{
$this->primary = true;
return $this;
}
/**
* Return view as a string.
*
* @return string
*
* @since Kunena 6.0
*
* @throws Exception
*/
public function __toString(): string
{
try {
$output = $this->execute();
} catch (KunenaExceptionAuthorise $e) {
if (!$this->primary) {
return (string) KunenaLayout::factory('Empty');
}
$document = Factory::getApplication()->getDocument();
$document->setTitle($e->getResponseStatus());
Factory::getApplication()->setHeader('Status', $e->getResponseStatus(), true);
Factory::getApplication()->sendHeaders();
$output = KunenaLayout::factory('Misc/Default', 'pages')
->set('header', $e->getResponseStatus())
->set('body', $e->getMessage());
} catch (Exception $e) {
if (!$this->primary) {
return "<div class=\"alert alert-danger\" role=\"alert\"><b>Exception</b> in layout <b>{$this->name}!</b>" . (JDEBUG ? '<br>' . $e->getMessage() : '') . '</div>';
}
$title = '500 Internal Server Error';
$document = Factory::getApplication()->getDocument();
$document->setTitle($title);
Factory::getApplication()->setHeader('Status', $title, true);
Factory::getApplication()->sendHeaders();
$output = KunenaLayout::factory('Misc/Default', 'pages')
->set('header', $title)
->set('body', $e->getMessage());
}
return (string) $output;
}
/**
* @see KunenaControllerBase::execute()
*
* @return KunenaLayout|null
*
* @since Kunena 6.0
*
* @throws Exception
*/
public function execute()
{
KunenaProfiler::getInstance() ? KunenaProfiler::instance()->start('function ' . \get_class($this) . '::' . __FUNCTION__ . '()') : null;
try {
// Run before executing action.
$result = $this->before();
if ($result === false) {
KunenaProfiler::getInstance() ? KunenaProfiler::instance()->stop('function ' . \get_class($this) . '::' . __FUNCTION__ . '()') : null;
return KunenaLayout::factory('Empty')->setOptions($this->getOptions());
}
// Display layout with given parameters.
$this->output = $this->display();
// Run after executing action.
$this->after();
} catch (KunenaExceptionAuthorise $e) {
if ($this->primary) {
KunenaProfiler::getInstance() ? KunenaProfiler::instance()->stop('function ' . \get_class($this) . '::' . __FUNCTION__ . '()') : null;
throw $e;
} else {
$this->output = KunenaLayout::factory('Empty')->setOptions($this->getOptions());
}
}
KunenaProfiler::getInstance() ? KunenaProfiler::instance()->stop('function ' . \get_class($this) . '::' . __FUNCTION__ . '()') : null;
return $this->output;
}
/**
* Executed before display.
*
* @return void
*
* @since Kunena 6.0
*
* @throws Exception
*/
protected function before()
{
$this->layout = $this->input->getCmd('layout', 'default');
$this->config = KunenaConfig::getInstance();
if ($this->primary) {
$this->document = Factory::getApplication()->getDocument();
}
}
/**
* @param int $code code
*
* @return void
*
* @throws Exception
* @since Kunena 6.0
*/
public function setResponseStatus($code = 404): void
{
switch ((int) $code) {
case 400:
Factory::getApplication()->setHeader('Status', '400 Bad Request', true);
break;
case 401:
Factory::getApplication()->setHeader('Status', '401 Unauthorized', true);
break;
case 403:
Factory::getApplication()->setHeader('Status', '403 Forbidden', true);
break;
case 404:
Factory::getApplication()->setHeader('Status', '404 Not Found', true);
break;
case 410:
Factory::getApplication()->setHeader('Status', '410 Gone', true);
break;
case 503:
Factory::getApplication()->setHeader('Status', '503 Service Temporarily Unavailable', true);
break;
case 500:
default:
Factory::getApplication()->setHeader('Status', '500 Internal Server Error', true);
}
Factory::getApplication()->sendHeaders();
}
/**
* Initialize and display the layout.
*
* @return KunenaBase|KunenaLayout
*
* @since Kunena 6.0
*
* @throws Exception
*/
protected function display()
{
// Display layout with given parameters.
return KunenaLayout::factory($this->name)
->setProperties($this->getProperties())
->setOptions($this->getOptions());
}
/**
* Returns an associative array of public object properties.
*
* @return array
*
* @since Kunena 6.0
*/
public function getProperties(): array
{
$properties = (array) $this;
$list = [];
foreach ($properties as $property => $value) {
if ($property[0] != "\0") {
$list[$property] = $value;
}
}
return $list;
}
/**
* Executed after display.
*
* @return void
*
* @since Kunena 6.0
*
* @throws Exception
*/
protected function after()
{
if ($this->primary) {
$this->prepareDocument();
}
}
/**
* Prepare title, description, breadcrumb etc.
*
* @return boolean|void
*
* @since Kunena 6.0
*
* @throws Exception
*/
protected function prepareDocument()
{
$app = Factory::getApplication();
$format = $app->input->getCmd('format');
if (!empty($format) && $format != 'html') {
return false;
}
}
/**
* Method to get the view layout.
*
* @return string The layout name.
*
* @since Kunena 6.0
*/
public function getLayout(): string
{
$layout = preg_replace('/[^a-z0-9_]/', '', strtolower($this->layout));
return $layout ? $layout : 'default';
}
/**
* Method to set the view layout.
*
* @param string $layout The layout name.
*
* @return KunenaControllerDisplay
*
* @since Kunena 6.0
*/
public function setLayout(string $layout)
{
if (!$layout) {
$layout = 'default';
}
$this->layout = $layout;
return $this;
}
/**
* Set the object properties based on a named array/hash.
*
* @see set()
*
* @param mixed $properties Either an associative array or another object.
*
* @return KunenaControllerDisplay Method supports chaining.
*
* @since Kunena 6.0
*
* @throws InvalidArgumentException
*/
public function setProperties($properties): KunenaControllerDisplay
{
if (!\is_array($properties) && !\is_object($properties)) {
throw new InvalidArgumentException('Parameter should be either array or an object.');
}
foreach ((array) $properties as $k => $v) {
// Use the set function which might be overridden.
if ($k[0] != "\0") {
$this->$k = $v;
}
}
return $this;
}
/**
* Shortcut for $this->input->set()
*
* @param mixed $key key
* @param mixed $value value
*
* @return $this
*
* @since Kunena 6.0
*/
public function set($key, $value): KunenaControllerDisplay
{
$this->input->set($key, $value);
return $this;
}
/**
* @param mixed $title title
* @param bool $replace replace
*
* @return void
*
* @since Kunena 6.0
*
* @throws Exception
*/
protected function setTitle($title, $replace = false): void
{
if (!$replace) {
// Obey Joomla configuration.
if ($this->app->get('sitename_pagetitles', 0) == 1) {
$title = Text::sprintf('JPAGETITLE', $this->app->get('sitename'), $title . ' - ' . $this->config->boardTitle);
} elseif ($this->app->get('sitename_pagetitles', 0) == 2) {
if ($this->config->boardTitle == $this->app->get('sitename')) {
$title = Text::sprintf('JPAGETITLE', $title, $this->app->get('sitename'));
} else {
$title = Text::sprintf('JPAGETITLE', $title . ' - ' . $this->config->boardTitle, $this->app->get('sitename'));
}
} else {
$title = $title . ' - ' . $this->config->boardTitle;
}
}
$title = strip_tags($title);
$this->document->setTitle($title);
}
/**
* @param string $description description
*
* @return void
*
* @since Kunena 6.0
*/
protected function setDescription(string $description): void
{
$this->document->setMetadata('description', $description);
}
/**
* @param string $name name
* @param string $content content
* @param string $attribute attribute
*
* @return void
*
* @since Kunena 6.0
*/
protected function setMetaData(string $name, $content, $attribute = 'name'): void
{
$this->document->setMetaData($name, $content, $attribute);
}
}