2022-08-30 15:28:41 +00:00
|
|
|
<?php
|
2022-09-20 11:06:03 +00:00
|
|
|
/**
|
|
|
|
* @package Joomla.Component.Builder
|
|
|
|
*
|
2022-12-04 09:23:43 +00:00
|
|
|
* @created 4th September, 2022
|
2022-09-20 11:06:03 +00:00
|
|
|
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
|
|
|
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
|
|
|
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
|
|
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
|
|
|
*/
|
2022-08-30 15:28:41 +00:00
|
|
|
|
|
|
|
namespace VDM\Joomla\Componentbuilder\Compiler\Placeholder;
|
|
|
|
|
|
|
|
|
|
|
|
use VDM\Joomla\Utilities\ArrayHelper;
|
|
|
|
use VDM\Joomla\Utilities\StringHelper;
|
|
|
|
use VDM\Joomla\Utilities\GetHelper;
|
|
|
|
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
|
|
|
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
|
|
|
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
|
|
|
|
use VDM\Joomla\Componentbuilder\Compiler\Language;
|
|
|
|
use VDM\Joomla\Componentbuilder\Compiler\Language\Extractor;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compiler Placeholder Reverse
|
|
|
|
*
|
|
|
|
* @since 3.2.0
|
|
|
|
*/
|
|
|
|
class Reverse
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Compiler Config
|
|
|
|
*
|
|
|
|
* @var Config
|
|
|
|
* @since 3.2.0
|
|
|
|
**/
|
|
|
|
protected Config $config;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compiler Placeholder
|
|
|
|
*
|
|
|
|
* @var Placeholder
|
|
|
|
* @since 3.2.0
|
|
|
|
**/
|
|
|
|
protected Placeholder $placeholder;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compiler Language
|
|
|
|
*
|
|
|
|
* @var Language
|
|
|
|
* @since 3.2.0
|
|
|
|
**/
|
|
|
|
protected Language $language;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compiler Language Extractor
|
|
|
|
*
|
|
|
|
* @var Extractor
|
|
|
|
* @since 3.2.0
|
|
|
|
**/
|
|
|
|
protected Extractor $extractor;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor.
|
|
|
|
*
|
|
|
|
* @param Config|null $config The compiler config object.
|
|
|
|
* @param Placeholder|null $placeholder The compiler placeholder object.
|
|
|
|
* @param Language|null $language The compiler language object.
|
|
|
|
* @param Extract|null $extractor The compiler language extractor object.
|
|
|
|
*
|
|
|
|
* @since 3.2.0
|
|
|
|
*/
|
|
|
|
public function __construct(
|
|
|
|
?Config $config = null, ?Placeholder $placeholder = null,
|
|
|
|
?Language $language = null, ?Extractor $extractor = null)
|
|
|
|
{
|
|
|
|
$this->config = $config ?: Compiler::_('Config');
|
|
|
|
$this->placeholder = $placeholder ?: Compiler::_('Placeholder');
|
|
|
|
$this->language = $language ?: Compiler::_('Language');
|
|
|
|
$this->extractor = $extractor ?: Compiler::_('Language.Extractor');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Reverse Engineer the dynamic placeholders (TODO hmmmm this is not ideal)
|
|
|
|
*
|
2022-09-02 05:51:08 +00:00
|
|
|
* @param string $string The string to revers
|
|
|
|
* @param array $placeholders The values to search for
|
|
|
|
* @param string $target The target path type
|
|
|
|
* @param int|null $id The custom code id
|
|
|
|
* @param string $field The field name
|
|
|
|
* @param string $table The table name
|
2022-08-30 15:28:41 +00:00
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
* @since 3.2.0
|
|
|
|
*/
|
|
|
|
public function engine(string $string, array &$placeholders,
|
2022-09-02 05:51:08 +00:00
|
|
|
string $target, ?int $id = null, string $field = 'code', string $table = 'custom_code'): string
|
2022-08-30 15:28:41 +00:00
|
|
|
{
|
|
|
|
// get local code if set
|
|
|
|
if ($id > 0 && $code = base64_decode(
|
2023-01-01 02:11:34 +00:00
|
|
|
(string) GetHelper::var($table, $id, 'id', $field)
|
2022-08-30 15:28:41 +00:00
|
|
|
))
|
|
|
|
{
|
|
|
|
$string = $this->setReverse(
|
|
|
|
$string, $code, $target
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this->placeholder->update($string, $placeholders, 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the language strings for the reveres process
|
|
|
|
*
|
|
|
|
* @param string $updateString The string to update
|
|
|
|
* @param string $string The string to use language update
|
|
|
|
* @param string $target The target path type
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
* @since 3.2.0
|
|
|
|
*/
|
|
|
|
protected function setReverse(string $updateString, string $string, string $target): string
|
|
|
|
{
|
|
|
|
// get targets to search for
|
|
|
|
$lang_string_targets = array_filter(
|
2023-01-01 02:11:34 +00:00
|
|
|
$this->config->lang_string_targets,
|
|
|
|
function ($get) use ($string) : bool {
|
|
|
|
return strpos($string, $get) !== false;
|
2022-08-30 15:28:41 +00:00
|
|
|
}
|
|
|
|
);
|
|
|
|
// check if we should continue
|
|
|
|
if (ArrayHelper::check($lang_string_targets))
|
|
|
|
{
|
|
|
|
// start lang holder
|
|
|
|
$lang_holders = array();
|
|
|
|
// set the lang for both since we don't know what area is being targeted
|
|
|
|
$_tmp = $this->config->lang_target;
|
|
|
|
// set the lang based on target
|
|
|
|
if (strpos($target, 'module') !== false)
|
|
|
|
{
|
|
|
|
// backup lang prefix
|
|
|
|
$_tmp_lang_prefix = $this->config->lang_prefix;
|
|
|
|
// set the new lang prefix
|
|
|
|
$lang_prefix = strtoupper(
|
|
|
|
str_replace('module', 'mod', $target)
|
|
|
|
);
|
|
|
|
$this->config->set('lang_prefix', $lang_prefix);
|
|
|
|
// now set the lang
|
|
|
|
if (isset($this->extractor->langKeys[$this->config->lang_prefix]))
|
|
|
|
{
|
|
|
|
$this->config->lang_target = $this->extractor->langKeys[$this->config->lang_prefix];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$this->config->lang_target = 'module';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
elseif (strpos($target, 'plugin') !== false)
|
|
|
|
{
|
|
|
|
// backup lang prefix
|
|
|
|
$_tmp_lang_prefix = $this->config->lang_prefix;
|
|
|
|
// set the new lang prefix
|
|
|
|
$lang_prefix = strtoupper(
|
|
|
|
str_replace('plugin', 'plg', $target)
|
|
|
|
);
|
|
|
|
$this->config->set('lang_prefix', $lang_prefix);
|
|
|
|
// now set the lang
|
|
|
|
if (isset($this->extractor->langKeys[$this->config->lang_prefix]))
|
|
|
|
{
|
|
|
|
$this->config->lang_target = $this->extractor->langKeys[$this->config->lang_prefix];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$this->config->lang_target = 'plugin';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$this->config->lang_target = 'both';
|
|
|
|
}
|
|
|
|
// set language data
|
|
|
|
foreach ($lang_string_targets as $lang_string_target)
|
|
|
|
{
|
|
|
|
$lang_check[] = GetHelper::allBetween(
|
|
|
|
$string, $lang_string_target . "'", "'"
|
|
|
|
);
|
|
|
|
$lang_check[] = GetHelper::allBetween(
|
|
|
|
$string, $lang_string_target . "'", "'"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
// merge arrays
|
|
|
|
$lang_array = ArrayHelper::merge($lang_check);
|
|
|
|
// continue only if strings were found
|
|
|
|
if (ArrayHelper::check(
|
|
|
|
$lang_array
|
|
|
|
)) //<-- not really needed hmmm
|
|
|
|
{
|
|
|
|
foreach ($lang_array as $lang)
|
|
|
|
{
|
|
|
|
$_key_lang = StringHelper::safe($lang, 'U');
|
|
|
|
// this is there to insure we dont break already added Language strings
|
|
|
|
if ($_key_lang === $lang)
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
// build lang key
|
|
|
|
$key_lang = $this->config->lang_prefix . '_' . $_key_lang;
|
|
|
|
// set lang content string
|
|
|
|
$this->language->set($this->config->lang_target, $key_lang, $lang);
|
|
|
|
// reverse the placeholders
|
|
|
|
foreach ($lang_string_targets as $lang_string_target)
|
|
|
|
{
|
|
|
|
$lang_holders[$lang_string_target . "'" . $key_lang . "'"]
|
|
|
|
= $lang_string_target . "'" . $lang . "'";
|
|
|
|
$lang_holders[$lang_string_target . '"' . $key_lang . '"']
|
|
|
|
= $lang_string_target . '"' . $lang . '"';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// return the found placeholders
|
2022-09-02 05:51:08 +00:00
|
|
|
$updateString = $this->placeholder->update(
|
2022-08-30 15:28:41 +00:00
|
|
|
$updateString, $lang_holders
|
|
|
|
);
|
|
|
|
}
|
|
|
|
// reset the lang
|
|
|
|
$this->config->lang_target = $_tmp;
|
|
|
|
// also rest the lang prefix if set
|
|
|
|
if (isset($_tmp_lang_prefix))
|
|
|
|
{
|
|
|
|
$lang_prefix = $_tmp_lang_prefix;
|
|
|
|
$this->config->set('lang_prefix', $_tmp_lang_prefix);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $updateString;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|