| Server IP : 46.105.57.169 / Your IP : 216.73.217.8 Web Server : Apache System : Linux webd003.cluster120.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64 User : maitricfuz ( 93378) PHP Version : 8.4.22 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/maitricfuz/www/saint-martin-lg/plugins/system/sourcerer/src/Extension/ |
Upload File : |
<?php
/**
* @package Sourcerer
* @version 13.0.2
*
* @author Peter van Westen <info@regularlabs.com>
* @link https://regularlabs.com
* @copyright Copyright © 2026 Regular Labs All Rights Reserved
* @license GNU General Public License version 2 or later
*/
namespace RegularLabs\Plugin\System\Sourcerer\Extension;
use RegularLabs\Library\Document as RL_Document;
use RegularLabs\Library\Html as RL_Html;
use RegularLabs\Library\Indexer as RL_Indexer;
use RegularLabs\Library\Plugin\System as RL_SystemPlugin;
use RegularLabs\Library\Protect as RL_Protect;
use RegularLabs\Plugin\System\Sourcerer\Area;
use RegularLabs\Plugin\System\Sourcerer\Clean;
use RegularLabs\Plugin\System\Sourcerer\Params;
use RegularLabs\Plugin\System\Sourcerer\Protect;
use RegularLabs\Plugin\System\Sourcerer\Replace;
use RegularLabs\Plugin\System\Sourcerer\Security;
defined('_JEXEC') or die;
final class Sourcerer extends RL_SystemPlugin
{
public $_can_disable_by_url = false;
public $_lang_prefix = 'SRC';
protected $_finalize_final_html = true;
protected $_index_as_guest = true;
public function init(): void
{
if (method_exists(RL_Protect::class, 'enableSourcererTagProtection'))
{
RL_Protect::enableSourcererTagProtection();
}
}
protected function changeDocumentBuffer(string &$buffer): bool
{
if ( ! RL_Document::isHtml())
{
return false;
}
return Area::tag($buffer, 'component');
}
protected function changeFinalHtmlOutput(string &$html): bool
{
$params = Params::get();
[$pre, $body, $post] = RL_Html::getBody($html);
Protect::_($body);
Replace::replaceInTheRest($body);
Clean::cleanFinalHtmlOutput($body);
RL_Protect::unprotect($body);
$params->enable_in_head
? Replace::replace($pre, 'head')
: Clean::cleanTagsFromHead($pre);
$html = $pre . $body . $post;
return true;
}
/**
* @param object $module
* @param array $params
*/
protected function handleOnAfterRenderModule(object &$module, array &$params): void
{
if ( ! isset($module->content))
{
return;
}
Replace::replace($module->content, 'module', output_stage: 'Module');
}
protected function finalizeHtmlOutput(string &$html): void
{
if (method_exists(RL_Protect::class, 'unprotectSourcererTags'))
{
RL_Protect::unprotectSourcererTags($html);
}
foreach (['Content', 'Module', 'Final', ''] as $stage)
{
$name = 'Sourcerer Output' . ($stage === '' ? '' : ': ' . $stage);
RL_Protect::removeCommentTags($html, $name);
}
}
protected function handleOnContentPrepare(
string $area,
string $context,
mixed &$article,
mixed &$params,
int $page = 0
): bool
{
self::prepareArticle($area, $context, $article);
return false;
}
private static function prepareArticle(string $area, string $context, mixed &$article): void
{
$src_params = Params::get();
$area = isset($article->created_by) ? 'articles' : 'other';
$remove = $src_params->remove_from_search
&& (RL_Indexer::isContext($context)
|| in_array($context, ['com_search.search', 'com_search.search.article'], true));
$security = isset($article->created_by)
? Security::getForArticle($article)
: Security::getForArea($area);
self::replaceArticleField($article, 'description', $area, $remove, $security);
self::replaceArticleField($article, 'title', $area, $remove, $security);
// Don't handle article texts in category list view
if (RL_Document::isCategoryList($context))
{
return;
}
if (self::replaceArticleField($article, 'text', $area, $remove, $security))
{
// Don't also do stuff on introtext/fulltext if text is set
return;
}
self::replaceArticleField($article, 'introtext', $area, $remove, $security);
self::replaceArticleField($article, 'fulltext', $area, $remove, $security);
}
private static function replaceArticleField(
object|string $article,
string $field,
string $area,
bool $remove,
object $security
): bool
{
if ( ! is_object($article) || ! isset($article->{$field}) || ! is_string($article->{$field}))
{
return false;
}
Replace::replace($article->{$field}, $area, $article, $remove, $security, 'Content');
return true;
}
}