forked from joomla/Component-Builder
Update master #1
@ -140,14 +140,14 @@ TODO
|
||||
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
+ *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder)
|
||||
+ *First Build*: 30th April, 2015
|
||||
+ *Last Build*: 15th January, 2023
|
||||
+ *Last Build*: 22nd January, 2023
|
||||
+ *Version*: 3.1.13
|
||||
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
|
||||
+ *Line count*: **345248**
|
||||
+ *Line count*: **357633**
|
||||
+ *Field count*: **2009**
|
||||
+ *File count*: **2240**
|
||||
+ *Folder count*: **399**
|
||||
+ *File count*: **2304**
|
||||
+ *Folder count*: **408**
|
||||
|
||||
> This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com).
|
||||
> Developed by [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com)
|
||||
|
@ -140,14 +140,14 @@ TODO
|
||||
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
+ *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder)
|
||||
+ *First Build*: 30th April, 2015
|
||||
+ *Last Build*: 15th January, 2023
|
||||
+ *Last Build*: 22nd January, 2023
|
||||
+ *Version*: 3.1.13
|
||||
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
|
||||
+ *Line count*: **345248**
|
||||
+ *Line count*: **357633**
|
||||
+ *Field count*: **2009**
|
||||
+ *File count*: **2240**
|
||||
+ *Folder count*: **399**
|
||||
+ *File count*: **2304**
|
||||
+ *Folder count*: **408**
|
||||
|
||||
> This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com).
|
||||
> Developed by [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com)
|
||||
|
@ -171,19 +171,19 @@ class ComponentbuilderControllerCompiler extends AdminController
|
||||
}
|
||||
$message[] = '<h2>Total time saved</h2>';
|
||||
$message[] = '<ul>';
|
||||
$message[] = '<li>Total folders created: <b>'.$model->compiler->folderCount.'</b></li>';
|
||||
$message[] = '<li>Total files created: <b>'.$model->compiler->fileCount.'</b></li>';
|
||||
$message[] = '<li>Total fields created: <b>'.$model->compiler->fieldCount.'</b></li>';
|
||||
$message[] = '<li>Total lines written: <b>'.$model->compiler->lineCount.'</b></li>';
|
||||
$message[] = '<li>A4 Book of: <b>'.$model->compiler->pageCount.' pages</b></li>';
|
||||
$message[] = '<li>Total folders created: <b>#'.'##FOLDER_COUNT##'.'#</b></li>';
|
||||
$message[] = '<li>Total files created: <b>#'.'##FILE_COUNT##'.'#</b></li>';
|
||||
$message[] = '<li>Total fields created: <b>#'.'##FIELD_COUNT##'.'#</b></li>';
|
||||
$message[] = '<li>Total lines written: <b>#'.'##LINE_COUNT##'.'#</b></li>';
|
||||
$message[] = '<li>A4 Book of: <b>#'.'##PAGE_COUNT##'.'# pages</b></li>';
|
||||
$message[] = '</ul>';
|
||||
$message[] = '<p><b>'.$model->compiler->totalHours.' Hours</b> or <b>'.$model->compiler->totalDays.' Eight Hour Days</b> <em>(actual time you saved)</em><br />';
|
||||
$message[] = '<p><b>#'.'##totalHours##'.'# Hours</b> or <b>#'.'##totalDays##'.'# Eight Hour Days</b> <em>(actual time you saved)</em><br />';
|
||||
$message[] = '<small>(if creating a folder and file took <b>5 seconds</b> and writing one line of code took <b>10 seconds</b>, never making one mistake or taking any coffee break.)</small><br />';
|
||||
$message[] = '<b>'.$model->compiler->actualHoursSpent.' Hours</b> or <b>'.$model->compiler->actualDaysSpent.' Eight Hour Days</b> <em>(the actual time you spent)</em><br />';
|
||||
$message[] = '<small>(with the following break down: <b>debugging @'.$model->compiler->debuggingHours.'hours</b> = codingtime / 4; <b>planning @'.$model->compiler->planningHours.'hours</b> = codingtime / 7; <b>mapping @'.$model->compiler->mappingHours.'hours</b> = codingtime / 10; <b>office @'.$model->compiler->officeHours.'hours</b> = codingtime / 6;)</small></p>';
|
||||
$message[] = '<p><b>'.$model->compiler->actualTotalHours.' Hours</b> or <b>'.$model->compiler->actualTotalDays.' Eight Hour Days</b> <em>(a total of the realistic time frame for this project)</em><br />';
|
||||
$message[] = '<b>#'.'##actualHoursSpent##'.'# Hours</b> or <b>#'.'##actualDaysSpent##'.'# Eight Hour Days</b> <em>(the actual time you spent)</em><br />';
|
||||
$message[] = '<small>(with the following break down: <b>debugging @#'.'##debuggingHours##'.'#hours</b> = codingtime / 4; <b>planning @#'.'##planningHours##'.'#hours</b> = codingtime / 7; <b>mapping @#'.'##mappingHours##'.'#hours</b> = codingtime / 10; <b>office @#'.'##officeHours##'.'#hours</b> = codingtime / 6;)</small></p>';
|
||||
$message[] = '<p><b>#'.'##actualTotalHours##'.'# Hours</b> or <b>#'.'##actualTotalDays##'.'# Eight Hour Days</b> <em>(a total of the realistic time frame for this project)</em><br />';
|
||||
$message[] = '<small>(if creating a folder and file took <b>5 seconds</b> and writing one line of code took <b>10 seconds</b>, with the normal everyday realities at the office, that includes the component planning, mapping & debugging.)</small></p>';
|
||||
$message[] = '<p>Project duration: <b>'.$model->compiler->projectWeekTime. ' weeks</b> or <b>'.$model->compiler->projectMonthTime.' months</b></p>';
|
||||
$message[] = '<p>Project duration: <b>'.$model->compiler->projectWeekTime. ' weeks</b> or <b>#'.'##projectMonthTime##'.'# months</b></p>';
|
||||
// check if we have modules or plugins
|
||||
if ($add_multi_install)
|
||||
{
|
||||
@ -254,9 +254,14 @@ class ComponentbuilderControllerCompiler extends AdminController
|
||||
$message[] = '<a class="btn btn-success" href="' . $url . '" ><span class="icon-download icon-white"></span>Download</a></p>';
|
||||
$message[] = '<p><small><b>Remember!</b> This zip file is in your tmp folder and therefore publicly accessible until you click [Clear tmp]!</small> </p>';
|
||||
}
|
||||
$message[] = '<p><small>Compilation took <b>'.$model->compiler->secondsCompiled.'</b> seconds to complete.</small> </p>';
|
||||
$message[] = '<p><small>Compilation took <b>#'.'##COMPILER_TIMER##'.'#</b> seconds to complete.</small> </p>';
|
||||
// pass the message via the user state... wow this is painful
|
||||
$app->setUserState('com_componentbuilder.success_message', implode(PHP_EOL, $message));
|
||||
$app->setUserState('com_componentbuilder.success_message',
|
||||
CFactory::_('Placeholder')->update(
|
||||
implode(PHP_EOL, $message),
|
||||
CFactory::_('Content')->active
|
||||
)
|
||||
);
|
||||
// set redirect
|
||||
$this->setRedirect($redirect_url, '<h2>Successful Build!</h2>', 'message');
|
||||
$app->setUserState('com_componentbuilder.component_folder_name', $model->compiler->filepath['component-folder']);
|
||||
|
@ -31,6 +31,7 @@ ComponentbuilderHelper::autoLoader();
|
||||
|
||||
/**
|
||||
* Compiler class
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
class Compiler extends Infusion
|
||||
{
|
||||
@ -79,7 +80,8 @@ class Compiler extends Infusion
|
||||
{
|
||||
// to check the compiler speed
|
||||
$this->time_start = microtime(true);
|
||||
// first we run the perent constructors
|
||||
CFactory::_('Counter')->start();
|
||||
// first we run the parent constructors
|
||||
if (parent::__construct())
|
||||
{
|
||||
// set temp directory
|
||||
@ -271,8 +273,6 @@ class Compiler extends Infusion
|
||||
}
|
||||
// move the update server into place
|
||||
$this->setUpdateServer();
|
||||
// set the global counters
|
||||
$this->setCountingStuff();
|
||||
// build read me
|
||||
$this->buildReadMe();
|
||||
// set local repos
|
||||
@ -363,6 +363,7 @@ class Compiler extends Infusion
|
||||
// end the timer here
|
||||
$this->time_end = microtime(true);
|
||||
$this->secondsCompiled = $this->time_end - $this->time_start;
|
||||
CFactory::_('Counter')->end();
|
||||
|
||||
// completed the compilation
|
||||
return true;
|
||||
@ -424,9 +425,9 @@ class Compiler extends Infusion
|
||||
// free up some memory
|
||||
unset($this->newFiles['dynamic']);
|
||||
// do modules if found
|
||||
if (ArrayHelper::check($this->joomlaModules))
|
||||
if (CFactory::_('Joomlamodule.Data')->exists())
|
||||
{
|
||||
foreach ($this->joomlaModules as $module)
|
||||
foreach (CFactory::_('Joomlamodule.Data')->get() as $module)
|
||||
{
|
||||
if (ObjectHelper::check($module)
|
||||
&& isset($this->newFiles[$module->key])
|
||||
@ -505,9 +506,9 @@ class Compiler extends Infusion
|
||||
}
|
||||
}
|
||||
// do plugins if found
|
||||
if (ArrayHelper::check($this->joomlaPlugins))
|
||||
if (CFactory::_('Joomlaplugin.Data')->exists())
|
||||
{
|
||||
foreach ($this->joomlaPlugins as $plugin)
|
||||
foreach (CFactory::_('Joomlaplugin.Data')->get() as $plugin)
|
||||
{
|
||||
if (ObjectHelper::check($plugin)
|
||||
&& isset($this->newFiles[$plugin->key])
|
||||
@ -682,7 +683,7 @@ class Compiler extends Infusion
|
||||
// add answer back to file
|
||||
$this->writeFile($path, $answer);
|
||||
// count the file lines
|
||||
$this->lineCount = $this->lineCount + substr_count((string) $answer, PHP_EOL);
|
||||
CFactory::_('Counter')->line += substr_count((string) $answer, PHP_EOL);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -694,8 +695,7 @@ class Compiler extends Infusion
|
||||
protected function setUpdateServer()
|
||||
{
|
||||
// move the component update server to host
|
||||
if ($this->componentData->add_update_server == 1
|
||||
&& $this->componentData->update_server_target == 1
|
||||
if (CFactory::_('Component')->get('add_update_server', 0) == 1
|
||||
&& isset($this->updateServerFileName)
|
||||
&& $this->dynamicIntegration)
|
||||
{
|
||||
@ -703,23 +703,23 @@ class Compiler extends Infusion
|
||||
. $this->updateServerFileName . '.xml';
|
||||
// make sure we have the correct file
|
||||
if (File::exists($update_server_xml_path)
|
||||
&& isset($this->componentData->update_server))
|
||||
&& ($update_server = CFactory::_('Component')->get('update_server')) !== null)
|
||||
{
|
||||
// move to server
|
||||
ComponentbuilderHelper::moveToServer(
|
||||
$update_server_xml_path,
|
||||
$this->updateServerFileName . '.xml',
|
||||
(int) $this->componentData->update_server,
|
||||
$this->componentData->update_server_protocol
|
||||
(int) $update_server,
|
||||
CFactory::_('Component')->get('update_server_protocol')
|
||||
);
|
||||
// remove the local file
|
||||
File::delete($update_server_xml_path);
|
||||
}
|
||||
}
|
||||
// move the modules update server to host
|
||||
if (ArrayHelper::check($this->joomlaModules))
|
||||
if (CFactory::_('Joomlamodule.Data')->exists())
|
||||
{
|
||||
foreach ($this->joomlaModules as $module)
|
||||
foreach (CFactory::_('Joomlamodule.Data')->get() as $module)
|
||||
{
|
||||
if (ObjectHelper::check($module)
|
||||
&& isset($module->add_update_server)
|
||||
@ -750,9 +750,9 @@ class Compiler extends Infusion
|
||||
}
|
||||
}
|
||||
// move the plugins update server to host
|
||||
if (ArrayHelper::check($this->joomlaPlugins))
|
||||
if (CFactory::_('Joomlaplugin.Data')->exists())
|
||||
{
|
||||
foreach ($this->joomlaPlugins as $plugin)
|
||||
foreach (CFactory::_('Joomlaplugin.Data')->get() as $plugin)
|
||||
{
|
||||
if (ObjectHelper::check($plugin)
|
||||
&& isset($plugin->add_update_server)
|
||||
@ -791,7 +791,7 @@ class Compiler extends Infusion
|
||||
&& ArrayHelper::check(
|
||||
$data['config']
|
||||
)
|
||||
&& $this->componentData->mvc_versiondate == 1)
|
||||
&& CFactory::_('Component')->get('mvc_versiondate', 0) == 1)
|
||||
{
|
||||
foreach ($data['config'] as $key => $value)
|
||||
{
|
||||
@ -820,40 +820,23 @@ class Compiler extends Infusion
|
||||
CFactory::_('Content')->set('VERSION', CFactory::_('Content')->get('GLOBALVERSION'));
|
||||
}
|
||||
|
||||
// set all global numbers
|
||||
/**
|
||||
* Set all global numbers
|
||||
*
|
||||
* @return void
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
protected function setCountingStuff()
|
||||
{
|
||||
// what is the size in terms of an A4 book
|
||||
$this->pageCount = round($this->lineCount / 56);
|
||||
// setup the unrealistic numbers
|
||||
$this->folderSeconds = $this->folderCount * 5;
|
||||
$this->fileSeconds = $this->fileCount * 5;
|
||||
$this->lineSeconds = $this->lineCount * 10;
|
||||
$this->seconds = $this->folderSeconds + $this->fileSeconds
|
||||
+ $this->lineSeconds;
|
||||
$this->totalHours = round($this->seconds / 3600);
|
||||
$this->totalDays = round($this->totalHours / 8);
|
||||
// setup the more realistic numbers
|
||||
$this->secondsDebugging = $this->seconds / 4;
|
||||
$this->secondsPlanning = $this->seconds / 7;
|
||||
$this->secondsMapping = $this->seconds / 10;
|
||||
$this->secondsOffice = $this->seconds / 6;
|
||||
$this->actualSeconds = $this->folderSeconds + $this->fileSeconds
|
||||
+ $this->lineSeconds + $this->secondsDebugging
|
||||
+ $this->secondsPlanning + $this->secondsMapping
|
||||
+ $this->secondsOffice;
|
||||
$this->actualTotalHours = round($this->actualSeconds / 3600);
|
||||
$this->actualTotalDays = round($this->actualTotalHours / 8);
|
||||
$this->debuggingHours = round($this->secondsDebugging / 3600);
|
||||
$this->planningHours = round($this->secondsPlanning / 3600);
|
||||
$this->mappingHours = round($this->secondsMapping / 3600);
|
||||
$this->officeHours = round($this->secondsOffice / 3600);
|
||||
// the actual time spent
|
||||
$this->actualHoursSpent = $this->actualTotalHours - $this->totalHours;
|
||||
$this->actualDaysSpent = $this->actualTotalDays - $this->totalDays;
|
||||
// calculate the projects actual time frame of completion
|
||||
$this->projectWeekTime = round($this->actualTotalDays / 5, 1);
|
||||
$this->projectMonthTime = round($this->actualTotalDays / 24, 1);
|
||||
// set notice that we could not get a valid string from the target
|
||||
$this->app->enqueueMessage(
|
||||
JText::sprintf('<hr /><h3>%s Warning</h3>', __CLASS__), 'Error'
|
||||
);
|
||||
$this->app->enqueueMessage(
|
||||
JText::sprintf(
|
||||
'Use of a deprecated method (%s)!', __METHOD__
|
||||
), 'Error'
|
||||
);
|
||||
}
|
||||
|
||||
private function buildReadMe()
|
||||
@ -864,7 +847,7 @@ class Compiler extends Infusion
|
||||
{
|
||||
if (('README.md' === $static['name']
|
||||
|| 'README.txt' === $static['name'])
|
||||
&& $this->componentData->addreadme
|
||||
&& CFactory::_('Component')->get('addreadme')
|
||||
&& File::exists($static['path']))
|
||||
{
|
||||
$this->setReadMe($static['path']);
|
||||
@ -882,10 +865,9 @@ class Compiler extends Infusion
|
||||
{
|
||||
// set readme data if not set already
|
||||
if (!CFactory::_('Content')->exist('LINE_COUNT')
|
||||
|| CFactory::_('Content')->get('LINE_COUNT')
|
||||
!= $this->lineCount)
|
||||
|| CFactory::_('Content')->get('LINE_COUNT') != CFactory::_('Counter')->line)
|
||||
{
|
||||
$this->buildReadMeData();
|
||||
CFactory::_('Counter')->set();
|
||||
}
|
||||
// get the file
|
||||
$string = FileHelper::getContent($path);
|
||||
@ -895,42 +877,23 @@ class Compiler extends Infusion
|
||||
$this->writeFile($path, $answer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build README data
|
||||
*
|
||||
* @return void
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
private function buildReadMeData()
|
||||
{
|
||||
// set some defaults
|
||||
CFactory::_('Content')->set('LINE_COUNT', $this->lineCount);
|
||||
CFactory::_('Content')->set('FIELD_COUNT', $this->fieldCount);
|
||||
CFactory::_('Content')->set('FILE_COUNT', $this->fileCount);
|
||||
CFactory::_('Content')->set('FOLDER_COUNT', $this->folderCount);
|
||||
CFactory::_('Content')->set('PAGE_COUNT', $this->pageCount);
|
||||
CFactory::_('Content')->set('folders', $this->folderSeconds);
|
||||
CFactory::_('Content')->set('foldersSeconds', $this->folderSeconds);
|
||||
CFactory::_('Content')->set('files', $this->fileSeconds);
|
||||
CFactory::_('Content')->set('filesSeconds', $this->fileSeconds);
|
||||
CFactory::_('Content')->set('lines', $this->lineSeconds);
|
||||
CFactory::_('Content')->set('linesSeconds', $this->lineSeconds);
|
||||
CFactory::_('Content')->set('seconds', $this->actualSeconds);
|
||||
CFactory::_('Content')->set('actualSeconds', $this->actualSeconds);
|
||||
CFactory::_('Content')->set('totalHours', $this->totalHours);
|
||||
CFactory::_('Content')->set('totalDays', $this->totalDays);
|
||||
CFactory::_('Content')->set('debugging', $this->secondsDebugging);
|
||||
CFactory::_('Content')->set('secondsDebugging', $this->secondsDebugging);
|
||||
CFactory::_('Content')->set('planning', $this->secondsPlanning);
|
||||
CFactory::_('Content')->set('secondsPlanning', $this->secondsPlanning);
|
||||
CFactory::_('Content')->set('mapping', $this->secondsMapping);
|
||||
CFactory::_('Content')->set('secondsMapping', $this->secondsMapping);
|
||||
CFactory::_('Content')->set('office', $this->secondsOffice);
|
||||
CFactory::_('Content')->set('secondsOffice', $this->secondsOffice);
|
||||
CFactory::_('Content')->set('actualTotalHours', $this->actualTotalHours);
|
||||
CFactory::_('Content')->set('actualTotalDays', $this->actualTotalDays);
|
||||
CFactory::_('Content')->set('debuggingHours', $this->debuggingHours);
|
||||
CFactory::_('Content')->set('planningHours', $this->planningHours);
|
||||
CFactory::_('Content')->set('mappingHours', $this->mappingHours);
|
||||
CFactory::_('Content')->set('officeHours', $this->officeHours);
|
||||
CFactory::_('Content')->set('actualHoursSpent', $this->actualHoursSpent);
|
||||
CFactory::_('Content')->set('actualDaysSpent', $this->actualDaysSpent);
|
||||
CFactory::_('Content')->set('projectWeekTime', $this->projectWeekTime);
|
||||
CFactory::_('Content')->set('projectMonthTime', $this->projectMonthTime);
|
||||
// set notice that we could not get a valid string from the target
|
||||
$this->app->enqueueMessage(
|
||||
JText::sprintf('<hr /><h3>%s Warning</h3>', __CLASS__), 'Error'
|
||||
);
|
||||
$this->app->enqueueMessage(
|
||||
JText::sprintf(
|
||||
'Use of a deprecated method (%s)!', __METHOD__
|
||||
), 'Error'
|
||||
);
|
||||
}
|
||||
|
||||
private function setLocalRepos()
|
||||
@ -943,7 +906,7 @@ class Compiler extends Infusion
|
||||
{
|
||||
// set the repo path
|
||||
$repoFullPath = $this->repoPath . '/com_'
|
||||
. $this->componentData->sales_name . '__joomla_'
|
||||
. CFactory::_('Component')->get('sales_name') . '__joomla_'
|
||||
. CFactory::_('Config')->get('version', 3);
|
||||
// for plugin event TODO change event api signatures
|
||||
$component_context = CFactory::_('Config')->component_context;
|
||||
@ -954,7 +917,7 @@ class Compiler extends Infusion
|
||||
&$repoFullPath, &$this->componentData)
|
||||
);
|
||||
// remove old data
|
||||
$this->removeFolder($repoFullPath, $this->componentData->toignore);
|
||||
$this->removeFolder($repoFullPath, CFactory::_('Component')->get('toignore'));
|
||||
// set the new data
|
||||
Folder::copy($this->componentPath, $repoFullPath, '', true);
|
||||
// Trigger Event: jcb_ce_onAfterUpdateRepo
|
||||
@ -965,9 +928,9 @@ class Compiler extends Infusion
|
||||
);
|
||||
|
||||
// move the modules to local folder repos
|
||||
if (ArrayHelper::check($this->joomlaModules))
|
||||
if (CFactory::_('Joomlamodule.Data')->exists())
|
||||
{
|
||||
foreach ($this->joomlaModules as $module)
|
||||
foreach (CFactory::_('Joomlamodule.Data')->get() as $module)
|
||||
{
|
||||
if (ObjectHelper::check($module)
|
||||
&& isset($module->file_name))
|
||||
@ -986,7 +949,7 @@ class Compiler extends Infusion
|
||||
);
|
||||
// remove old data
|
||||
$this->removeFolder(
|
||||
$repoFullPath, $this->componentData->toignore
|
||||
$repoFullPath, CFactory::_('Component')->get('toignore')
|
||||
);
|
||||
// set the new data
|
||||
Folder::copy(
|
||||
@ -1002,9 +965,9 @@ class Compiler extends Infusion
|
||||
}
|
||||
}
|
||||
// move the plugins to local folder repos
|
||||
if (ArrayHelper::check($this->joomlaPlugins))
|
||||
if (CFactory::_('Joomlaplugin.Data')->exists())
|
||||
{
|
||||
foreach ($this->joomlaPlugins as $plugin)
|
||||
foreach (CFactory::_('Joomlaplugin.Data')->get() as $plugin)
|
||||
{
|
||||
if (ObjectHelper::check($plugin)
|
||||
&& isset($plugin->file_name))
|
||||
@ -1023,7 +986,7 @@ class Compiler extends Infusion
|
||||
);
|
||||
// remove old data
|
||||
$this->removeFolder(
|
||||
$repoFullPath, $this->componentData->toignore
|
||||
$repoFullPath, CFactory::_('Component')->get('toignore')
|
||||
);
|
||||
// set the new data
|
||||
Folder::copy(
|
||||
@ -1081,11 +1044,11 @@ class Compiler extends Infusion
|
||||
);
|
||||
}
|
||||
// move to sales server host
|
||||
if ($this->componentData->add_sales_server == 1
|
||||
if (CFactory::_('Component')->get('add_sales_server', 0) == 1
|
||||
&& $this->dynamicIntegration)
|
||||
{
|
||||
// make sure we have the correct file
|
||||
if (isset($this->componentData->sales_server))
|
||||
if (CFactory::_('Component')->get('sales_server'))
|
||||
{
|
||||
// Trigger Event: jcb_ce_onBeforeMoveToServer
|
||||
CFactory::_('Event')->trigger(
|
||||
@ -1098,8 +1061,8 @@ class Compiler extends Infusion
|
||||
ComponentbuilderHelper::moveToServer(
|
||||
$this->filepath['component'],
|
||||
$this->componentSalesName . '.zip',
|
||||
(int) $this->componentData->sales_server,
|
||||
$this->componentData->sales_server_protocol
|
||||
(int) CFactory::_('Component')->get('sales_server'),
|
||||
CFactory::_('Component')->get('sales_server_protocol')
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -1122,9 +1085,9 @@ class Compiler extends Infusion
|
||||
|
||||
private function zipModules()
|
||||
{
|
||||
if (ArrayHelper::check($this->joomlaModules))
|
||||
if (CFactory::_('Joomlamodule.Data')->exists())
|
||||
{
|
||||
foreach ($this->joomlaModules as $module)
|
||||
foreach (CFactory::_('Joomlamodule.Data')->get() as $module)
|
||||
{
|
||||
if (ObjectHelper::check($module)
|
||||
&& isset($module->zip_name)
|
||||
@ -1216,9 +1179,9 @@ class Compiler extends Infusion
|
||||
|
||||
private function zipPlugins()
|
||||
{
|
||||
if (ArrayHelper::check($this->joomlaPlugins))
|
||||
if (CFactory::_('Joomlaplugin.Data')->exists())
|
||||
{
|
||||
foreach ($this->joomlaPlugins as $plugin)
|
||||
foreach (CFactory::_('Joomlaplugin.Data')->get() as $plugin)
|
||||
{
|
||||
if (ObjectHelper::check($plugin)
|
||||
&& isset($plugin->zip_name)
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -28,15 +28,16 @@ use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
|
||||
|
||||
/**
|
||||
* Structure class
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
class Structure extends Get
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* The folder counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3 Use CFactory::_('Counter')->folder;
|
||||
*/
|
||||
public $folderCount = 0;
|
||||
|
||||
@ -44,6 +45,7 @@ class Structure extends Get
|
||||
* The file counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3 Use CFactory::_('Counter')->file;
|
||||
*/
|
||||
public $fileCount = 0;
|
||||
|
||||
@ -51,6 +53,7 @@ class Structure extends Get
|
||||
* The page counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $pageCount = 0;
|
||||
|
||||
@ -58,6 +61,8 @@ class Structure extends Get
|
||||
* The line counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
* @deprecated 3.3 Use CFactory::_('Counter')->line;
|
||||
*/
|
||||
public $lineCount = 0;
|
||||
|
||||
@ -65,6 +70,7 @@ class Structure extends Get
|
||||
* The field counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $fieldCount = 0;
|
||||
|
||||
@ -72,6 +78,7 @@ class Structure extends Get
|
||||
* The seconds counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $seconds = 0;
|
||||
|
||||
@ -79,6 +86,7 @@ class Structure extends Get
|
||||
* The actual seconds counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $actualSeconds = 0;
|
||||
|
||||
@ -86,6 +94,7 @@ class Structure extends Get
|
||||
* The folder seconds counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $folderSeconds = 0;
|
||||
|
||||
@ -93,6 +102,7 @@ class Structure extends Get
|
||||
* The file seconds counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $fileSeconds = 0;
|
||||
|
||||
@ -100,6 +110,7 @@ class Structure extends Get
|
||||
* The line seconds counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $lineSeconds = 0;
|
||||
|
||||
@ -107,6 +118,7 @@ class Structure extends Get
|
||||
* The seconds debugging counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $secondsDebugging = 0;
|
||||
|
||||
@ -114,6 +126,7 @@ class Structure extends Get
|
||||
* The seconds planning counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $secondsPlanning = 0;
|
||||
|
||||
@ -121,6 +134,7 @@ class Structure extends Get
|
||||
* The seconds mapping counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $secondsMapping = 0;
|
||||
|
||||
@ -128,6 +142,7 @@ class Structure extends Get
|
||||
* The seconds office counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $secondsOffice = 0;
|
||||
|
||||
@ -135,6 +150,7 @@ class Structure extends Get
|
||||
* The total hours counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $totalHours = 0;
|
||||
|
||||
@ -142,6 +158,7 @@ class Structure extends Get
|
||||
* The debugging hours counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $debuggingHours = 0;
|
||||
|
||||
@ -149,6 +166,7 @@ class Structure extends Get
|
||||
* The planning hours counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $planningHours = 0;
|
||||
|
||||
@ -156,6 +174,7 @@ class Structure extends Get
|
||||
* The mapping hours counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $mappingHours = 0;
|
||||
|
||||
@ -163,6 +182,7 @@ class Structure extends Get
|
||||
* The office hours counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $officeHours = 0;
|
||||
|
||||
@ -170,6 +190,7 @@ class Structure extends Get
|
||||
* The actual Total Hours counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $actualTotalHours = 0;
|
||||
|
||||
@ -177,6 +198,7 @@ class Structure extends Get
|
||||
* The actual hours spent counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $actualHoursSpent = 0;
|
||||
|
||||
@ -184,6 +206,7 @@ class Structure extends Get
|
||||
* The actual days spent counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $actualDaysSpent = 0;
|
||||
|
||||
@ -191,6 +214,7 @@ class Structure extends Get
|
||||
* The total days counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $totalDays = 0;
|
||||
|
||||
@ -198,6 +222,7 @@ class Structure extends Get
|
||||
* The actual Total Days counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $actualTotalDays = 0;
|
||||
|
||||
@ -205,6 +230,7 @@ class Structure extends Get
|
||||
* The project week time counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $projectWeekTime = 0;
|
||||
|
||||
@ -212,6 +238,7 @@ class Structure extends Get
|
||||
* The project month time counter
|
||||
*
|
||||
* @var int
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
public $projectMonthTime = 0;
|
||||
|
||||
@ -378,11 +405,11 @@ class Structure extends Get
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// first we run the perent constructor
|
||||
// first we run the parent constructor
|
||||
if (parent::__construct())
|
||||
{
|
||||
// set the standard admin file
|
||||
$this->stdRootFiles[] = $this->componentData->name_code . '.php';
|
||||
$this->stdRootFiles[] = CFactory::_('Component')->get('name_code') . '.php';
|
||||
// set incase no extra admin folder are loaded
|
||||
CFactory::_('Content')->set('EXSTRA_ADMIN_FOLDERS', '');
|
||||
// set incase no extra site folder are loaded
|
||||
@ -395,22 +422,20 @@ class Structure extends Get
|
||||
CFactory::_('Content')->set('EXSTRA_SITE_FILES', '');
|
||||
// set incase no extra media files are loaded
|
||||
CFactory::_('Content')->set('EXSTRA_MEDIA_FILES', '');
|
||||
// run global updater
|
||||
ComponentbuilderHelper::runGlobalUpdater();
|
||||
// set the template path
|
||||
$this->templatePath = CFactory::_('Config')->get('compiler_path', JPATH_COMPONENT_ADMINISTRATOR . '/compiler') . '/joomla_'
|
||||
. $this->joomlaVersions[CFactory::_('Config')->joomla_version]['folder_key'];
|
||||
. CFactory::_('Config')->joomla_versions[CFactory::_('Config')->joomla_version]['folder_key'];
|
||||
// set some default names
|
||||
$this->componentSalesName = 'com_'
|
||||
. $this->componentData->sales_name . '__J'
|
||||
. CFactory::_('Component')->get('sales_name') . '__J'
|
||||
. CFactory::_('Config')->joomla_version;
|
||||
$this->componentBackupName = 'com_'
|
||||
. $this->componentData->sales_name . '_v' . str_replace(
|
||||
'.', '_', (string) $this->componentData->component_version
|
||||
. CFactory::_('Component')->get('sales_name') . '_v' . str_replace(
|
||||
'.', '_', (string) CFactory::_('Component')->get('component_version')
|
||||
) . '__J' . CFactory::_('Config')->joomla_version;
|
||||
$this->componentFolderName = 'com_'
|
||||
. $this->componentData->name_code . '_v' . str_replace(
|
||||
'.', '_', (string) $this->componentData->component_version
|
||||
. CFactory::_('Component')->get('name_code') . '_v' . str_replace(
|
||||
'.', '_', (string) CFactory::_('Component')->get('component_version')
|
||||
) . '__J' . CFactory::_('Config')->joomla_version;
|
||||
// set component folder path
|
||||
$this->componentPath = CFactory::_('Config')->get('compiler_path', JPATH_COMPONENT_ADMINISTRATOR . '/compiler') . '/'
|
||||
@ -526,7 +551,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$power->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
if (!isset($htaccess[$power->path_jcb]))
|
||||
{
|
||||
// set the htaccess data
|
||||
@ -547,7 +572,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$power->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
// now we must add the htaccess.txt file where the zip package my not get the [.] files
|
||||
$fileDetails = array('path' => $power->full_path_jcb . '/htaccess.txt',
|
||||
'name' => 'htaccess.txt',
|
||||
@ -557,7 +582,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$power->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
// now we must add the web.config file
|
||||
$fileDetails = array('path' => $power->full_path_jcb . '/web.config',
|
||||
'name' => 'web.config',
|
||||
@ -574,7 +599,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$power->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
// we set these files only once
|
||||
$htaccess[$power->path_jcb] = true;
|
||||
}
|
||||
@ -591,16 +616,17 @@ class Structure extends Get
|
||||
*/
|
||||
private function buildModules()
|
||||
{
|
||||
if (ArrayHelper::check($this->joomlaModules))
|
||||
if (CFactory::_('Joomlamodule.Data')->exists())
|
||||
{
|
||||
// for plugin event TODO change event api signatures
|
||||
$component_context = CFactory::_('Config')->component_context;
|
||||
$modules = CFactory::_('Joomlamodule.Data')->get();
|
||||
// Trigger Event: jcb_ce_onBeforeSetModules
|
||||
CFactory::_('Event')->trigger(
|
||||
'jcb_ce_onBeforeBuildModules',
|
||||
array(&$component_context, &$this->joomlaModules)
|
||||
array(&$component_context, &$modules)
|
||||
);
|
||||
foreach ($this->joomlaModules as $module)
|
||||
foreach ($modules as $module)
|
||||
{
|
||||
if (ObjectHelper::check($module)
|
||||
&& isset($module->folder_name)
|
||||
@ -633,7 +659,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$module->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
// set custom_get
|
||||
if ($module->custom_get)
|
||||
{
|
||||
@ -661,7 +687,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$module->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
// set helper file
|
||||
if ($module->add_class_helper >= 1)
|
||||
@ -683,7 +709,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$module->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
// set main xml file
|
||||
$fileDetails = array('path' => $module->folder_path . '/'
|
||||
@ -696,7 +722,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$module->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
// set tmpl folder
|
||||
$this->createFolder($module->folder_path . '/tmpl');
|
||||
// set default file
|
||||
@ -715,7 +741,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$module->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
// set install script if needed
|
||||
if ($module->add_install_script)
|
||||
{
|
||||
@ -736,7 +762,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$module->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
// set readme if found
|
||||
if ($module->addreadme)
|
||||
@ -748,7 +774,7 @@ class Structure extends Get
|
||||
$this->writeFile($fileDetails['path'], $module->readme);
|
||||
$this->newFiles[$module->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
// set the folders target path
|
||||
$target_path = '';
|
||||
@ -784,7 +810,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$module->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
// add the field script
|
||||
$field_script_bucket[] = Indent::_(2) . "//"
|
||||
. Line::_(__Line__, __Class__) . " Custom CSS";
|
||||
@ -819,7 +845,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$module->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
// add the field script
|
||||
$field_script_bucket[] = Indent::_(2) . "//"
|
||||
. Line::_(__Line__, __Class__) . " Custom JS";
|
||||
@ -851,7 +877,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$module->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
}
|
||||
// set rules folders if needed
|
||||
@ -1048,7 +1074,7 @@ class Structure extends Get
|
||||
$this->writeFile($fileDetails['path'], $xml);
|
||||
$this->newFiles[$module->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
}
|
||||
// set SQL stuff if needed
|
||||
@ -1068,7 +1094,7 @@ class Structure extends Get
|
||||
$module->sql
|
||||
);
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
// now set the uninstall file
|
||||
if ($module->add_sql_uninstall)
|
||||
@ -1079,7 +1105,7 @@ class Structure extends Get
|
||||
$module->sql_uninstall
|
||||
);
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
}
|
||||
// creat the language folder
|
||||
@ -1095,10 +1121,10 @@ class Structure extends Get
|
||||
// add to component files
|
||||
foreach ($module->files as $file)
|
||||
{
|
||||
// set the path finder
|
||||
// set the pathfinder
|
||||
$file['target_type'] = $module->target_type;
|
||||
$file['target_id'] = $module->id;
|
||||
$this->componentData->files[] = $file;
|
||||
CFactory::_('Component')->appendArray('files', $file);
|
||||
}
|
||||
}
|
||||
// check if this lib has folders
|
||||
@ -1108,10 +1134,10 @@ class Structure extends Get
|
||||
// add to component folders
|
||||
foreach ($module->folders as $folder)
|
||||
{
|
||||
// set the path finder
|
||||
// set the pathfinder
|
||||
$folder['target_type'] = $module->target_type;
|
||||
$folder['target_id'] = $module->id;
|
||||
$this->componentData->folders[] = $folder;
|
||||
CFactory::_('Component')->appendArray('folders', $folder);
|
||||
}
|
||||
}
|
||||
// check if this module has urls
|
||||
@ -1157,7 +1183,7 @@ class Structure extends Get
|
||||
// write data to path
|
||||
$this->writeFile($url['path'], $data);
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1174,16 +1200,17 @@ class Structure extends Get
|
||||
*/
|
||||
private function buildPlugins()
|
||||
{
|
||||
if (ArrayHelper::check($this->joomlaPlugins))
|
||||
if (CFactory::_('Joomlaplugin.Data')->exists())
|
||||
{
|
||||
// for plugin event TODO change event api signatures
|
||||
$component_context = CFactory::_('Config')->component_context;
|
||||
$plugins = CFactory::_('Joomlaplugin.Data')->get();
|
||||
// Trigger Event: jcb_ce_onBeforeSetPlugins
|
||||
CFactory::_('Event')->trigger(
|
||||
'jcb_ce_onBeforeBuildPlugins',
|
||||
array(&$component_context, &$this->joomlaPlugins)
|
||||
array(&$component_context, &$plugins)
|
||||
);
|
||||
foreach ($this->joomlaPlugins as $plugin)
|
||||
foreach ($plugins as $plugin)
|
||||
{
|
||||
if (ObjectHelper::check($plugin)
|
||||
&& isset($plugin->folder_name)
|
||||
@ -1216,7 +1243,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$plugin->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
// set main xml file
|
||||
$fileDetails = array('path' => $plugin->folder_path . '/'
|
||||
. $plugin->file_name . '.xml',
|
||||
@ -1228,7 +1255,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$plugin->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
// set install script if needed
|
||||
if ($plugin->add_install_script)
|
||||
{
|
||||
@ -1249,7 +1276,7 @@ class Structure extends Get
|
||||
);
|
||||
$this->newFiles[$plugin->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
// set readme if found
|
||||
if ($plugin->addreadme)
|
||||
@ -1261,7 +1288,7 @@ class Structure extends Get
|
||||
$this->writeFile($fileDetails['path'], $plugin->readme);
|
||||
$this->newFiles[$plugin->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
// set fields & rules folders if needed
|
||||
if (isset($plugin->fields_rules_paths)
|
||||
@ -1441,7 +1468,7 @@ class Structure extends Get
|
||||
$this->writeFile($fileDetails['path'], $xml);
|
||||
$this->newFiles[$plugin->key][] = $fileDetails;
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
}
|
||||
// set SQL stuff if needed
|
||||
@ -1461,7 +1488,7 @@ class Structure extends Get
|
||||
$plugin->sql
|
||||
);
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
// now set the uninstall file
|
||||
if ($plugin->add_sql_uninstall)
|
||||
@ -1472,7 +1499,7 @@ class Structure extends Get
|
||||
$plugin->sql_uninstall
|
||||
);
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
}
|
||||
// creat the language folder path
|
||||
@ -1491,7 +1518,7 @@ class Structure extends Get
|
||||
// set the path finder
|
||||
$file['target_type'] = $plugin->target_type;
|
||||
$file['target_id'] = $plugin->id;
|
||||
$this->componentData->files[] = $file;
|
||||
CFactory::_('Component')->appendArray('files', $file);
|
||||
}
|
||||
}
|
||||
// check if this lib has folders
|
||||
@ -1504,7 +1531,7 @@ class Structure extends Get
|
||||
// set the path finder
|
||||
$folder['target_type'] = $plugin->target_type;
|
||||
$folder['target_id'] = $plugin->id;
|
||||
$this->componentData->folders[] = $folder;
|
||||
CFactory::_('Component')->appendArray('folders', $folder);
|
||||
}
|
||||
}
|
||||
// check if this plugin has urls
|
||||
@ -1550,7 +1577,7 @@ class Structure extends Get
|
||||
// write data to path
|
||||
$this->writeFile($url['path'], $data);
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1576,7 +1603,7 @@ class Structure extends Get
|
||||
$path
|
||||
);
|
||||
// count the folder created
|
||||
$this->folderCount++;
|
||||
CFactory::_('Counter')->folder++;
|
||||
// add index.html (boring I know)
|
||||
$this->indexHTML(
|
||||
$path, ''
|
||||
@ -1592,7 +1619,7 @@ class Structure extends Get
|
||||
*/
|
||||
private function setLibraries()
|
||||
{
|
||||
if (($libraries_ = CFactory::_('Registry')->extract('builder.libraries')) !== null)
|
||||
if (($libraries_ = CFactory::_('Registry')->get('builder.libraries')) !== null)
|
||||
{
|
||||
// for plugin event TODO change event api signatures
|
||||
$component_context = CFactory::_('Config')->component_context;
|
||||
@ -1606,7 +1633,7 @@ class Structure extends Get
|
||||
{
|
||||
Folder::create($this->componentPath);
|
||||
// count the folder created
|
||||
$this->folderCount++;
|
||||
CFactory::_('Counter')->folder++;
|
||||
$this->indexHTML('');
|
||||
}
|
||||
// create media path if not set
|
||||
@ -1622,7 +1649,7 @@ class Structure extends Get
|
||||
// add to component files
|
||||
foreach ($library->files as $file)
|
||||
{
|
||||
$this->componentData->files[] = $file;
|
||||
CFactory::_('Component')->appendArray('files', $file);
|
||||
}
|
||||
}
|
||||
// check if this lib has folders
|
||||
@ -1634,7 +1661,7 @@ class Structure extends Get
|
||||
// add to component folders
|
||||
foreach ($library->folders as $folder)
|
||||
{
|
||||
$this->componentData->folders[] = $folder;
|
||||
CFactory::_('Component')->appendArray('folders', $folder);
|
||||
}
|
||||
}
|
||||
// check if this lib has urls
|
||||
@ -1699,7 +1726,7 @@ class Structure extends Get
|
||||
// write data to path
|
||||
$this->writeFile($path, $data);
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
}
|
||||
// only add if local
|
||||
@ -1719,15 +1746,13 @@ class Structure extends Get
|
||||
foreach ($library->config as $cofig)
|
||||
{
|
||||
$found = array_filter(
|
||||
$this->componentData->config,
|
||||
function ($item) use ($cofig) {
|
||||
return $item['field'] == $cofig['field'];
|
||||
}
|
||||
CFactory::_('Component')->get('config'),
|
||||
fn($item) => $item['field'] == $cofig['field']
|
||||
);
|
||||
// set the config data if not found
|
||||
if (!ArrayHelper::check($found))
|
||||
{
|
||||
$this->componentData->config[] = $cofig;
|
||||
CFactory::_('Component')->appendArray('config', $cofig);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1747,16 +1772,13 @@ class Structure extends Get
|
||||
private function setDynamicDashboard()
|
||||
{
|
||||
// only add the dynamic dashboard if all checks out
|
||||
if (isset($this->componentData->dashboard_type)
|
||||
&& 2 == $this->componentData->dashboard_type
|
||||
&& isset($this->componentData->dashboard)
|
||||
&& StringHelper::check(
|
||||
$this->componentData->dashboard
|
||||
)
|
||||
&& strpos((string) $this->componentData->dashboard, '_') !== false)
|
||||
if (CFactory::_('Component')->get('dashboard_type', 0) == 2
|
||||
&& ($dashboard_ = CFactory::_('Component')->get('dashboard')) !== null
|
||||
&& StringHelper::check($dashboard_)
|
||||
&& strpos((string) $dashboard_, '_') !== false)
|
||||
{
|
||||
// set the default view
|
||||
$getter = explode('_', (string) $this->componentData->dashboard);
|
||||
$getter = explode('_', (string) $dashboard_);
|
||||
if (count((array) $getter) == 2 && is_numeric($getter[1]))
|
||||
{
|
||||
// the pointers
|
||||
@ -1777,14 +1799,12 @@ class Structure extends Get
|
||||
$targets[$t], 'w'
|
||||
);
|
||||
// set the dynamic dash
|
||||
if (isset($this->componentData->{$targets[$t]})
|
||||
&& ArrayHelper::check(
|
||||
$this->componentData->{$targets[$t]}
|
||||
))
|
||||
if (($target_ = CFactory::_('Component')->get($targets[$t])) !== null
|
||||
&& ArrayHelper::check($target_))
|
||||
{
|
||||
// search the target views
|
||||
$dashboard = (array) array_filter(
|
||||
$this->componentData->{$targets[$t]},
|
||||
$target_,
|
||||
function ($view) use ($id, $t, $types) {
|
||||
if (isset($view[$types[$t]])
|
||||
&& $id == $view[$types[$t]])
|
||||
@ -1821,7 +1841,7 @@ class Structure extends Get
|
||||
$this->app->enqueueMessage(
|
||||
JText::sprintf(
|
||||
'The <b>%s</b> (<b>%s</b>) is not available in your component! Please insure to only used %s, for a dynamic dashboard, that are still linked to your component.',
|
||||
$names[$t], $this->componentData->dashboard,
|
||||
$names[$t], $dashboard_,
|
||||
$type_names
|
||||
), 'Error'
|
||||
);
|
||||
@ -1836,7 +1856,7 @@ class Structure extends Get
|
||||
$this->app->enqueueMessage(
|
||||
JText::sprintf(
|
||||
'The <b>%s</b> (<b>%s</b>) is not available in your component! Please insure to only used %s, for a dynamic dashboard, that are still linked to your component.',
|
||||
$names[$t], $this->componentData->dashboard,
|
||||
$names[$t], $dashboard_,
|
||||
$type_names
|
||||
), 'Error'
|
||||
);
|
||||
@ -1851,7 +1871,7 @@ class Structure extends Get
|
||||
$this->app->enqueueMessage(
|
||||
JText::sprintf(
|
||||
'The <b>%s</b> value for the dynamic dashboard is invalid.',
|
||||
$this->componentData->dashboard
|
||||
$dashboard_
|
||||
), 'Error'
|
||||
);
|
||||
}
|
||||
@ -1865,7 +1885,7 @@ class Structure extends Get
|
||||
$this->app->enqueueMessage(
|
||||
JText::sprintf(
|
||||
'The <b>%s</b> value for the dynamic dashboard is invalid.',
|
||||
$this->componentData->dashboard
|
||||
$dashboard_
|
||||
), 'Error'
|
||||
);
|
||||
}
|
||||
@ -1873,8 +1893,8 @@ class Structure extends Get
|
||||
if (StringHelper::check($this->dynamicDashboard))
|
||||
{
|
||||
// dynamic dashboard is used
|
||||
$this->componentData->dashboard_tab = '';
|
||||
$this->componentData->php_dashboard_methods = '';
|
||||
CFactory::_('Component')->remove('dashboard_tab');
|
||||
CFactory::_('Component')->remove('php_dashboard_methods');
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1907,7 +1927,7 @@ class Structure extends Get
|
||||
{
|
||||
Folder::create($this->componentPath);
|
||||
// count the folder created
|
||||
$this->folderCount++;
|
||||
CFactory::_('Counter')->folder++;
|
||||
$this->indexHTML('');
|
||||
}
|
||||
// now build all folders needed for this component
|
||||
@ -2072,7 +2092,7 @@ class Structure extends Get
|
||||
$this->notNew[] = 'LICENSE.txt';
|
||||
// do license check
|
||||
$LICENSE = false;
|
||||
$licenseChecker = strtolower((string) $this->componentData->license);
|
||||
$licenseChecker = strtolower((string) CFactory::_('Component')->get('license', ''));
|
||||
if (strpos($licenseChecker, 'gnu') !== false
|
||||
&& strpos(
|
||||
$licenseChecker, '2'
|
||||
@ -2088,7 +2108,7 @@ class Structure extends Get
|
||||
// do README check
|
||||
$README = false;
|
||||
// add the README file if needed
|
||||
if ($this->componentData->addreadme)
|
||||
if (CFactory::_('Component')->get('addreadme', false))
|
||||
{
|
||||
$README = true;
|
||||
}
|
||||
@ -2188,7 +2208,7 @@ class Structure extends Get
|
||||
// move the file to its place
|
||||
File::copy($currentFullPath, $packageFullPath);
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
// store the new files
|
||||
if (!in_array($ftem, $this->notNew))
|
||||
{
|
||||
@ -2241,7 +2261,7 @@ class Structure extends Get
|
||||
$currentFullPath, $packageFullPath, '', true
|
||||
);
|
||||
// count the folder created
|
||||
$this->folderCount++;
|
||||
CFactory::_('Counter')->folder++;
|
||||
}
|
||||
}
|
||||
// only add if no target found since those belong to plugins and modules
|
||||
@ -2322,19 +2342,16 @@ class Structure extends Get
|
||||
&& ObjectHelper::check(
|
||||
$this->joomlaVersionData->move->dynamic
|
||||
))
|
||||
&& (isset($this->componentData->admin_views)
|
||||
&& ArrayHelper::check(
|
||||
$this->componentData->admin_views
|
||||
)))
|
||||
&& CFactory::_('Component')->isArray('admin_views'))
|
||||
{
|
||||
if (!StringHelper::check($this->dynamicDashboard))
|
||||
{
|
||||
// setup dashboard
|
||||
$target = array('admin' => $this->componentData->name_code);
|
||||
$target = array('admin' => CFactory::_('Component')->get('name_code'));
|
||||
$this->buildDynamique($target, 'dashboard');
|
||||
}
|
||||
// now the rest of the views
|
||||
foreach ($this->componentData->admin_views as $nr => $view)
|
||||
foreach (CFactory::_('Component')->get('admin_views') as $nr => $view)
|
||||
{
|
||||
if (ObjectHelper::check($view['settings']))
|
||||
{
|
||||
@ -2389,13 +2406,10 @@ class Structure extends Get
|
||||
&& ObjectHelper::check(
|
||||
$this->joomlaVersionData->move->dynamic
|
||||
))
|
||||
&& (isset($this->componentData->site_views)
|
||||
&& ArrayHelper::check(
|
||||
$this->componentData->site_views
|
||||
)))
|
||||
&& CFactory::_('Component')->isArray('site_views'))
|
||||
{
|
||||
|
||||
foreach ($this->componentData->site_views as $nr => $view)
|
||||
foreach (CFactory::_('Component')->get('site_views') as $nr => $view)
|
||||
{
|
||||
$created = $this->getCreatedDate($view);
|
||||
$modified = $this->getLastModifiedDate($view);
|
||||
@ -2424,12 +2438,9 @@ class Structure extends Get
|
||||
&& ObjectHelper::check(
|
||||
$this->joomlaVersionData->move->dynamic
|
||||
))
|
||||
&& (isset($this->componentData->custom_admin_views)
|
||||
&& ArrayHelper::check(
|
||||
$this->componentData->custom_admin_views
|
||||
)))
|
||||
&& CFactory::_('Component')->isArray('custom_admin_views'))
|
||||
{
|
||||
foreach ($this->componentData->custom_admin_views as $nr => $view)
|
||||
foreach (CFactory::_('Component')->get('custom_admin_views') as $nr => $view)
|
||||
{
|
||||
$created = $this->getCreatedDate($view);
|
||||
$modified = $this->getLastModifiedDate($view);
|
||||
@ -2789,7 +2800,7 @@ class Structure extends Get
|
||||
Folder::create($path);
|
||||
$this->indexHTML($zipPath);
|
||||
// count the folder created
|
||||
$this->folderCount++;
|
||||
CFactory::_('Counter')->folder++;
|
||||
}
|
||||
// do the file renaming
|
||||
if ($details->rename)
|
||||
@ -2824,7 +2835,7 @@ class Structure extends Get
|
||||
$path . '/' . $new
|
||||
);
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
// setup array for new file
|
||||
$newFIle = array('path' => $path . '/' . $new,
|
||||
@ -2878,37 +2889,35 @@ class Structure extends Get
|
||||
$footable = CFactory::_('Config')->get('footable', false);
|
||||
$add_eximport = CFactory::_('Config')->get('add_eximport', false);
|
||||
// add custom folders
|
||||
if ((isset($this->componentData->folders)
|
||||
&& ArrayHelper::check(
|
||||
$this->componentData->folders
|
||||
)) || $add_eximport || $uikit || $footable)
|
||||
if (CFactory::_('Component')->isArray('folders')
|
||||
|| $add_eximport || $uikit || $footable)
|
||||
{
|
||||
if ($add_eximport)
|
||||
{
|
||||
// move the import view folder in place
|
||||
$this->componentData->folders[] = array('folder' => 'importViews',
|
||||
CFactory::_('Component')->appendArray('folders', array('folder' => 'importViews',
|
||||
'path' => 'admin/views/import',
|
||||
'rename' => 1);
|
||||
'rename' => 1));
|
||||
// move the phpspreadsheet Folder (TODO we must move this to a library package)
|
||||
$this->componentData->folders[] = array('folderpath' => 'JPATH_LIBRARIES/phpspreadsheet/vendor',
|
||||
CFactory::_('Component')->appendArray('folders', array('folderpath' => 'JPATH_LIBRARIES/phpspreadsheet/vendor',
|
||||
'path' => '/libraries/phpspreadsheet/',
|
||||
'rename' => 0);
|
||||
'rename' => 0));
|
||||
}
|
||||
|
||||
// set uikit
|
||||
if (2 == $uikit || 1 == $uikit)
|
||||
{
|
||||
// move the UIKIT Folder into place
|
||||
$this->componentData->folders[] = array('folder' => 'uikit-v2',
|
||||
CFactory::_('Component')->appendArray('folders', array('folder' => 'uikit-v2',
|
||||
'path' => 'media',
|
||||
'rename' => 0);
|
||||
'rename' => 0));
|
||||
}
|
||||
if (2 == $uikit || 3 == $uikit)
|
||||
{
|
||||
// move the UIKIT-3 Folder into place
|
||||
$this->componentData->folders[] = array('folder' => 'uikit-v3',
|
||||
CFactory::_('Component')->appendArray('folders', array('folder' => 'uikit-v3',
|
||||
'path' => 'media',
|
||||
'rename' => 0);
|
||||
'rename' => 0));
|
||||
}
|
||||
|
||||
// set footable
|
||||
@ -2916,21 +2925,21 @@ class Structure extends Get
|
||||
if ($footable && 2 == $footable_version)
|
||||
{
|
||||
// move the footable folder into place
|
||||
$this->componentData->folders[] = array('folder' => 'footable-v2',
|
||||
CFactory::_('Component')->appendArray('folders', array('folder' => 'footable-v2',
|
||||
'path' => 'media',
|
||||
'rename' => 0);
|
||||
'rename' => 0));
|
||||
}
|
||||
elseif ($footable && 3 == $footable_version)
|
||||
{
|
||||
// move the footable folder into place
|
||||
$this->componentData->folders[] = array('folder' => 'footable-v3',
|
||||
CFactory::_('Component')->appendArray('folders', array('folder' => 'footable-v3',
|
||||
'path' => 'media',
|
||||
'rename' => 0);
|
||||
'rename' => 0));
|
||||
}
|
||||
|
||||
// pointer tracker
|
||||
$pointer_tracker = 'h';
|
||||
foreach ($this->componentData->folders as $custom)
|
||||
foreach (CFactory::_('Component')->get('folders') as $custom)
|
||||
{
|
||||
// check type of target type
|
||||
$_target_type = 'c0mp0n3nt';
|
||||
@ -3026,31 +3035,29 @@ class Structure extends Get
|
||||
'type' => $custom['target_type']);
|
||||
}
|
||||
}
|
||||
unset($this->componentData->folders);
|
||||
CFactory::_('Component')->remove('folders');
|
||||
unset($custom);
|
||||
}
|
||||
// get the google chart switch
|
||||
$google_chart = CFactory::_('Config')->get('google_chart', false);
|
||||
// add custom files
|
||||
if ((isset($this->componentData->files)
|
||||
&& ArrayHelper::check(
|
||||
$this->componentData->files
|
||||
)) || $google_chart)
|
||||
if (CFactory::_('Component')->isArray('files')
|
||||
|| $google_chart)
|
||||
{
|
||||
if ($google_chart)
|
||||
{
|
||||
// move the google chart files
|
||||
$this->componentData->files[] = array('file' => 'google.jsapi.js',
|
||||
CFactory::_('Component')->appendArray('files', array('file' => 'google.jsapi.js',
|
||||
'path' => 'media/js',
|
||||
'rename' => 0);
|
||||
$this->componentData->files[] = array('file' => 'chartbuilder.php',
|
||||
'rename' => 0));
|
||||
CFactory::_('Component')->appendArray('files', array('file' => 'chartbuilder.php',
|
||||
'path' => 'admin/helpers',
|
||||
'rename' => 0);
|
||||
'rename' => 0));
|
||||
}
|
||||
|
||||
// pointer tracker
|
||||
$pointer_tracker = 'h';
|
||||
foreach ($this->componentData->files as $custom)
|
||||
foreach (CFactory::_('Component')->get('files') as $custom)
|
||||
{
|
||||
// check type of target type
|
||||
$_target_type = 'c0mp0n3nt';
|
||||
@ -3158,7 +3165,7 @@ class Structure extends Get
|
||||
$this->updateFileContent[$key_pointer] = true;
|
||||
}
|
||||
}
|
||||
unset($this->componentData->files);
|
||||
CFactory::_('Component')->remove('files');
|
||||
unset($custom);
|
||||
}
|
||||
|
||||
@ -3211,7 +3218,7 @@ class Structure extends Get
|
||||
$root . $path . '/index.html'
|
||||
);
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -3219,7 +3226,7 @@ class Structure extends Get
|
||||
$this->templatePath . '/index.html', $root . '/index.html'
|
||||
);
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,7 @@ use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
|
||||
|
||||
/**
|
||||
* Compiler class
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
class Fields extends Structure
|
||||
{
|
||||
@ -657,7 +658,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(3) . 'readonly="true"';
|
||||
$fieldSet[] = Indent::_(2) . "/>";
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// if created is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['created']))
|
||||
@ -680,7 +681,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(3) . "filter=" . '"user_utc"';
|
||||
$fieldSet[] = Indent::_(2) . "/>";
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// if created_by is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['created_by']))
|
||||
@ -700,7 +701,7 @@ class Fields extends Structure
|
||||
. '_CREATED_BY_DESC"';
|
||||
$fieldSet[] = Indent::_(2) . "/>";
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// if published is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['published']))
|
||||
@ -727,7 +728,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(4) . "JTRASHED</option>";
|
||||
$fieldSet[] = Indent::_(2) . "</field>";
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// if modified is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['modified']))
|
||||
@ -742,7 +743,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(3)
|
||||
. 'size="22" readonly="true" format="%Y-%m-%d %H:%M:%S" filter="user_utc" />';
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// if modified_by is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['modified_by']))
|
||||
@ -760,7 +761,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(3) . 'filter="unset"';
|
||||
$fieldSet[] = Indent::_(2) . "/>";
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// check if view has access
|
||||
if (isset($this->accessBuilder[$nameSingleCode])
|
||||
@ -783,7 +784,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(3) . 'required="false"';
|
||||
$fieldSet[] = Indent::_(2) . "/>";
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// if ordering is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['ordering']))
|
||||
@ -806,7 +807,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(3) . 'required="false"';
|
||||
$fieldSet[] = Indent::_(2) . "/>";
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// if version is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['version']))
|
||||
@ -826,7 +827,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(3) . 'filter="unset"';
|
||||
$fieldSet[] = Indent::_(2) . "/>";
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// check if metadata is added to this view
|
||||
if (isset($this->metadataBuilder[$nameSingleCode])
|
||||
@ -850,7 +851,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(3) . 'cols="30"';
|
||||
$fieldSet[] = Indent::_(2) . "/>";
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// metadesc
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['metadesc']))
|
||||
@ -868,7 +869,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(3) . 'cols="30"';
|
||||
$fieldSet[] = Indent::_(2) . "/>";
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
}
|
||||
// fix the permissions field "title" issue gh-629
|
||||
@ -895,7 +896,7 @@ class Fields extends Structure
|
||||
. $nameSingleCode . '"';
|
||||
$fieldSet[] = Indent::_(2) . "/>";
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
// setup needed field values for layout
|
||||
$field_array = array();
|
||||
$field_array['order_edit'] = 0;
|
||||
@ -956,7 +957,7 @@ class Fields extends Structure
|
||||
. '<option value="noindex, nofollow">JGLOBAL_NOINDEX_NOFOLLOW</option>';
|
||||
$fieldSet[] = Indent::_(3) . '</field>';
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// author
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['author']))
|
||||
@ -971,7 +972,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(4) . 'size="20"';
|
||||
$fieldSet[] = Indent::_(3) . "/>";
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// rights
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['rights']))
|
||||
@ -986,7 +987,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(4) . 'cols="30" rows="2"';
|
||||
$fieldSet[] = Indent::_(3) . "/>";
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
$fieldSet[] = Indent::_(2) . "</fieldset>";
|
||||
$fieldSet[] = Indent::_(1) . "</fields>";
|
||||
@ -1083,7 +1084,7 @@ class Fields extends Structure
|
||||
$fieldXML = $fieldSetXML->addChild('field');
|
||||
ComponentbuilderHelper::xmlAddAttributes($fieldXML, $attributes);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// if created is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['created']))
|
||||
@ -1105,7 +1106,7 @@ class Fields extends Structure
|
||||
$fieldXML = $fieldSetXML->addChild('field');
|
||||
ComponentbuilderHelper::xmlAddAttributes($fieldXML, $attributes);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// if created_by is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['created_by']))
|
||||
@ -1124,7 +1125,7 @@ class Fields extends Structure
|
||||
$fieldXML = $fieldSetXML->addChild('field');
|
||||
ComponentbuilderHelper::xmlAddAttributes($fieldXML, $attributes);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// if published is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['published']))
|
||||
@ -1142,7 +1143,7 @@ class Fields extends Structure
|
||||
$fieldXML = $fieldSetXML->addChild('field');
|
||||
ComponentbuilderHelper::xmlAddAttributes($fieldXML, $attributes);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
foreach (
|
||||
array('JPUBLISHED' => 1, 'JUNPUBLISHED' => 0, 'JARCHIVED' => 2,
|
||||
'JTRASHED' => -2) as $text => $value
|
||||
@ -1174,7 +1175,7 @@ class Fields extends Structure
|
||||
$fieldXML = $fieldSetXML->addChild('field');
|
||||
ComponentbuilderHelper::xmlAddAttributes($fieldXML, $attributes);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// if modified_by is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['modified_by']))
|
||||
@ -1195,7 +1196,7 @@ class Fields extends Structure
|
||||
$fieldXML = $fieldSetXML->addChild('field');
|
||||
ComponentbuilderHelper::xmlAddAttributes($fieldXML, $attributes);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// check if view has access
|
||||
if (isset($this->accessBuilder[$nameSingleCode])
|
||||
@ -1220,7 +1221,7 @@ class Fields extends Structure
|
||||
$fieldXML = $fieldSetXML->addChild('field');
|
||||
ComponentbuilderHelper::xmlAddAttributes($fieldXML, $attributes);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// if ordering is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['ordering']))
|
||||
@ -1243,7 +1244,7 @@ class Fields extends Structure
|
||||
$fieldXML = $fieldSetXML->addChild('field');
|
||||
ComponentbuilderHelper::xmlAddAttributes($fieldXML, $attributes);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// if version is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['version']))
|
||||
@ -1265,7 +1266,7 @@ class Fields extends Structure
|
||||
$fieldXML = $fieldSetXML->addChild('field');
|
||||
ComponentbuilderHelper::xmlAddAttributes($fieldXML, $attributes);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// check if metadata is added to this view
|
||||
if (isset($this->metadataBuilder[$nameSingleCode])
|
||||
@ -1293,7 +1294,7 @@ class Fields extends Structure
|
||||
$fieldXML, $attributes
|
||||
);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// metadesc
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['metadesc']))
|
||||
@ -1310,7 +1311,7 @@ class Fields extends Structure
|
||||
$fieldXML, $attributes
|
||||
);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
}
|
||||
// fix the permissions field "title" issue gh-629
|
||||
@ -1345,7 +1346,7 @@ class Fields extends Structure
|
||||
$fieldXML = $fieldSetXML->addChild('field');
|
||||
ComponentbuilderHelper::xmlAddAttributes($fieldXML, $attributes);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
// setup needed field values for layout
|
||||
$field_array = array();
|
||||
$field_array['order_edit'] = 0;
|
||||
@ -1408,7 +1409,7 @@ class Fields extends Structure
|
||||
$robots, $attributes
|
||||
);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
$options = array(
|
||||
'JGLOBAL_USE_GLOBAL' => '',
|
||||
'JGLOBAL_INDEX_FOLLOW' => 'index, follow',
|
||||
@ -1442,7 +1443,7 @@ class Fields extends Structure
|
||||
$author, $attributes
|
||||
);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
// rights
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['rights']))
|
||||
@ -1466,7 +1467,7 @@ class Fields extends Structure
|
||||
$rights, $attributes
|
||||
);
|
||||
// count the static field created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1890,7 +1891,7 @@ class Fields extends Structure
|
||||
&$optionArray, $custom = null, $taber = ''
|
||||
) {
|
||||
// count the dynamic fields created
|
||||
$this->fieldCount++;
|
||||
CFactory::_('Counter')->field++;
|
||||
// check what type of field builder to use
|
||||
if (CFactory::_('Config')->get('field_builder_type', 2) == 1)
|
||||
{
|
||||
@ -4780,13 +4781,8 @@ class Fields extends Structure
|
||||
// load to list builder
|
||||
if ($listSwitch)
|
||||
{
|
||||
// check if it does not exists
|
||||
if (!CFactory::_('Registry')->exists('builder.list.' . $nameListCode))
|
||||
{
|
||||
CFactory::_('Registry')->set('builder.list.' . $nameListCode, []);
|
||||
}
|
||||
// append values
|
||||
CFactory::_('Registry')->append('builder.list.' . $nameListCode, [
|
||||
CFactory::_('Registry')->appendArray('builder.list.' . $nameListCode, [
|
||||
'id' => (int) $field['field'],
|
||||
'type' => $typeName,
|
||||
'code' => $name,
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -27,6 +27,7 @@ use VDM\Joomla\Componentbuilder\Compiler\Utilities\Minify;
|
||||
|
||||
/**
|
||||
* Infusion class
|
||||
* @deprecated 3.3
|
||||
*/
|
||||
class Infusion extends Interpretation
|
||||
{
|
||||
@ -73,10 +74,7 @@ class Infusion extends Interpretation
|
||||
*/
|
||||
protected function buildFileContent()
|
||||
{
|
||||
if (isset($this->componentData->admin_views)
|
||||
&& ArrayHelper::check(
|
||||
$this->componentData->admin_views
|
||||
))
|
||||
if (CFactory::_('Component')->isArray('admin_views'))
|
||||
{
|
||||
// for plugin event TODO change event api signatures
|
||||
$placeholders = CFactory::_('Placeholder')->active;
|
||||
@ -104,13 +102,14 @@ class Infusion extends Interpretation
|
||||
CFactory::_('Content')->set('component', CFactory::_('Placeholder')->get('component'));
|
||||
|
||||
// COMPANYNAME
|
||||
$companyname = CFactory::_('Component')->get('companyname');
|
||||
CFactory::_('Content')->set('COMPANYNAME', trim(
|
||||
(string) JFilterOutput::cleanText($this->componentData->companyname)
|
||||
(string) JFilterOutput::cleanText($companyname)
|
||||
));
|
||||
|
||||
// CREATIONDATE
|
||||
CFactory::_('Content')->set('CREATIONDATE',
|
||||
JFactory::getDate($this->componentData->created)->format(
|
||||
JFactory::getDate(CFactory::_('Component')->get('created'))->format(
|
||||
'jS F, Y'
|
||||
));
|
||||
CFactory::_('Content')->set('GLOBALCREATIONDATE',
|
||||
@ -122,24 +121,25 @@ class Infusion extends Interpretation
|
||||
CFactory::_('Content')->get('BUILDDATE'));
|
||||
|
||||
// AUTHOR
|
||||
$author = CFactory::_('Component')->get('author');
|
||||
CFactory::_('Content')->set('AUTHOR', trim(
|
||||
(string) JFilterOutput::cleanText($this->componentData->author)
|
||||
(string) JFilterOutput::cleanText($author)
|
||||
));
|
||||
|
||||
// AUTHOREMAIL
|
||||
CFactory::_('Content')->set('AUTHOREMAIL', trim((string) $this->componentData->email));
|
||||
CFactory::_('Content')->set('AUTHOREMAIL', trim((string) CFactory::_('Component')->get('email', '')));
|
||||
|
||||
// AUTHORWEBSITE
|
||||
CFactory::_('Content')->set('AUTHORWEBSITE', trim((string) $this->componentData->website));
|
||||
CFactory::_('Content')->set('AUTHORWEBSITE', trim((string) CFactory::_('Component')->get('website', '')));
|
||||
|
||||
// COPYRIGHT
|
||||
CFactory::_('Content')->set('COPYRIGHT', trim((string) $this->componentData->copyright));
|
||||
CFactory::_('Content')->set('COPYRIGHT', trim((string) CFactory::_('Component')->get('copyright', '')));
|
||||
|
||||
// LICENSE
|
||||
CFactory::_('Content')->set('LICENSE', trim((string) $this->componentData->license));
|
||||
CFactory::_('Content')->set('LICENSE', trim((string) CFactory::_('Component')->get('license', '')));
|
||||
|
||||
// VERSION
|
||||
CFactory::_('Content')->set('VERSION', trim((string) $this->componentData->component_version));
|
||||
CFactory::_('Content')->set('VERSION', trim((string) CFactory::_('Component')->get('component_version', '')));
|
||||
// set the actual global version
|
||||
CFactory::_('Content')->set('ACTUALVERSION', CFactory::_('Content')->get('VERSION'));
|
||||
|
||||
@ -154,7 +154,7 @@ class Infusion extends Interpretation
|
||||
if (isset($versionArray)
|
||||
&& ArrayHelper::check(
|
||||
$versionArray
|
||||
) && $this->componentData->mvc_versiondate == 2)
|
||||
) && CFactory::_('Component')->get('mvc_versiondate', 0) == 2)
|
||||
{
|
||||
CFactory::_('Content')->set('VERSION', $versionArray[0] . '.' . $versionArray[1] . '.x');
|
||||
}
|
||||
@ -162,7 +162,7 @@ class Infusion extends Interpretation
|
||||
elseif (isset($versionArray)
|
||||
&& ArrayHelper::check(
|
||||
$versionArray
|
||||
) && $this->componentData->mvc_versiondate == 3)
|
||||
) && CFactory::_('Component')->get('mvc_versiondate', 0) == 3)
|
||||
{
|
||||
CFactory::_('Content')->set('VERSION', $versionArray[0] . '.x.x');
|
||||
}
|
||||
@ -175,20 +175,22 @@ class Infusion extends Interpretation
|
||||
CFactory::_('Content')->set('XMLVERSION', $this->joomlaVersions[CFactory::_('Config')->joomla_version]['xml_version']);
|
||||
|
||||
// Component_name
|
||||
CFactory::_('Content')->set('Component_name', JFilterOutput::cleanText($this->componentData->name));
|
||||
$name = CFactory::_('Component')->get('name');
|
||||
CFactory::_('Content')->set('Component_name', JFilterOutput::cleanText($name));
|
||||
|
||||
// SHORT_DISCRIPTION
|
||||
$short_description = CFactory::_('Component')->get('short_description');
|
||||
CFactory::_('Content')->set('SHORT_DESCRIPTION', trim(
|
||||
(string) JFilterOutput::cleanText(
|
||||
$this->componentData->short_description
|
||||
$short_description
|
||||
)
|
||||
));
|
||||
|
||||
// DESCRIPTION
|
||||
CFactory::_('Content')->set('DESCRIPTION', trim((string) $this->componentData->description));
|
||||
CFactory::_('Content')->set('DESCRIPTION', trim((string) CFactory::_('Component')->get('description')));
|
||||
|
||||
// COMP_IMAGE_TYPE
|
||||
CFactory::_('Content')->set('COMP_IMAGE_TYPE', $this->setComponentImageType($this->componentData->image));
|
||||
CFactory::_('Content')->set('COMP_IMAGE_TYPE', $this->setComponentImageType(CFactory::_('Component')->get('image')));
|
||||
|
||||
// ACCESS_SECTIONS
|
||||
CFactory::_('Content')->set('ACCESS_SECTIONS', $this->setAccessSections());
|
||||
@ -247,7 +249,7 @@ class Infusion extends Interpretation
|
||||
CFactory::_('Content')->set('ADMIN_GLOBAL_EVENT_HELPER', '');
|
||||
}
|
||||
// now load the data for the global event if needed
|
||||
if ($this->componentData->add_admin_event == 1)
|
||||
if (CFactory::_('Component')->get('add_admin_event', 0) == 1)
|
||||
{
|
||||
// ADMIN_GLOBAL_EVENT
|
||||
CFactory::_('Content')->add('ADMIN_GLOBAL_EVENT', PHP_EOL . PHP_EOL . '// Trigger the Global Admin Event');
|
||||
@ -272,7 +274,7 @@ class Infusion extends Interpretation
|
||||
}
|
||||
|
||||
// now load the readme file if needed
|
||||
if ($this->componentData->addreadme == 1)
|
||||
if (CFactory::_('Component')->get('addreadme', 0) == 1)
|
||||
{
|
||||
CFactory::_('Content')->add('EXSTRA_ADMIN_FILES',
|
||||
PHP_EOL . Indent::_(3)
|
||||
@ -282,7 +284,7 @@ class Infusion extends Interpretation
|
||||
// HELPER_CREATEUSER
|
||||
CFactory::_('Content')->add('HELPER_CREATEUSER',
|
||||
$this->setCreateUserHelperMethod(
|
||||
$this->componentData->creatuserhelper
|
||||
CFactory::_('Component')->get('creatuserhelper')
|
||||
));
|
||||
|
||||
// HELP
|
||||
@ -310,7 +312,7 @@ class Infusion extends Interpretation
|
||||
$viewarray = array();
|
||||
$site_edit_view_array = array();
|
||||
// start dynamic build
|
||||
foreach ($this->componentData->admin_views as $view)
|
||||
foreach (CFactory::_('Component')->get('admin_views') as $view)
|
||||
{
|
||||
// set the target
|
||||
CFactory::_('Config')->build_target = 'admin';
|
||||
@ -1041,15 +1043,12 @@ class Infusion extends Interpretation
|
||||
$this->setCustomViewLayouts();
|
||||
|
||||
// setup custom_admin_views and all needed stuff for the site
|
||||
if (isset($this->componentData->custom_admin_views)
|
||||
&& ArrayHelper::check(
|
||||
$this->componentData->custom_admin_views
|
||||
))
|
||||
if (CFactory::_('Component')->isArray('custom_admin_views'))
|
||||
{
|
||||
CFactory::_('Config')->build_target = 'custom_admin';
|
||||
CFactory::_('Config')->lang_target = 'admin';
|
||||
// start dynamic build
|
||||
foreach ($this->componentData->custom_admin_views as $view)
|
||||
foreach (CFactory::_('Component')->get('custom_admin_views') as $view)
|
||||
{
|
||||
// for single views
|
||||
CFactory::_('Content')->set_($view['settings']->code, 'SView', $view['settings']->Code);
|
||||
@ -1455,14 +1454,11 @@ class Infusion extends Interpretation
|
||||
CFactory::_('Config')->lang_target = $keepLang;
|
||||
|
||||
// setup front-views and all needed stuff for the site
|
||||
if (isset($this->componentData->site_views)
|
||||
&& ArrayHelper::check(
|
||||
$this->componentData->site_views
|
||||
))
|
||||
if (CFactory::_('Component')->isArray('site_views'))
|
||||
{
|
||||
CFactory::_('Config')->build_target = 'site';
|
||||
// start dynamic build
|
||||
foreach ($this->componentData->site_views as $view)
|
||||
foreach (CFactory::_('Component')->get('site_views') as $view)
|
||||
{
|
||||
// for list views
|
||||
CFactory::_('Content')->set_($view['settings']->code, 'SViews', $view['settings']->Code);
|
||||
@ -1725,7 +1721,7 @@ class Infusion extends Interpretation
|
||||
CFactory::_('Content')->set('SITE_GLOBAL_EVENT_HELPER', '');
|
||||
}
|
||||
// now load the data for the global event if needed
|
||||
if ($this->componentData->add_site_event == 1)
|
||||
if (CFactory::_('Component')->get('add_site_event', 0) == 1)
|
||||
{
|
||||
CFactory::_('Content')->add('SITE_GLOBAL_EVENT', PHP_EOL . PHP_EOL . '// Trigger the Global Site Event');
|
||||
CFactory::_('Content')->add('SITE_GLOBAL_EVENT',
|
||||
@ -1796,9 +1792,9 @@ class Infusion extends Interpretation
|
||||
}
|
||||
|
||||
// README
|
||||
if ($this->componentData->addreadme)
|
||||
if (CFactory::_('Component')->get('addreadme'))
|
||||
{
|
||||
CFactory::_('Content')->set('README', $this->componentData->readme);
|
||||
CFactory::_('Content')->set('README', CFactory::_('Component')->get('readme'));
|
||||
}
|
||||
|
||||
// Infuse POWERS
|
||||
@ -1809,9 +1805,9 @@ class Infusion extends Interpretation
|
||||
$_backup_lang = CFactory::_('Config')->lang_target;
|
||||
$_backup_langPrefix = CFactory::_('Config')->lang_prefix;
|
||||
// infuse module data if set
|
||||
if (ArrayHelper::check($this->joomlaModules))
|
||||
if (CFactory::_('Joomlamodule.Data')->exists())
|
||||
{
|
||||
foreach ($this->joomlaModules as $module)
|
||||
foreach (CFactory::_('Joomlamodule.Data')->get() as $module)
|
||||
{
|
||||
if (ObjectHelper::check($module))
|
||||
{
|
||||
@ -1877,9 +1873,9 @@ class Infusion extends Interpretation
|
||||
}
|
||||
}
|
||||
// infuse plugin data if set
|
||||
if (ArrayHelper::check($this->joomlaPlugins))
|
||||
if (CFactory::_('Joomlaplugin.Data')->exists())
|
||||
{
|
||||
foreach ($this->joomlaPlugins as $plugin)
|
||||
foreach (CFactory::_('Joomlaplugin.Data')->get() as $plugin)
|
||||
{
|
||||
if (ObjectHelper::check($plugin))
|
||||
{
|
||||
@ -1946,7 +1942,7 @@ class Infusion extends Interpretation
|
||||
CFactory::_('Event')->trigger(
|
||||
'jcb_ce_onAfterBuildFilesContent',
|
||||
array(&$component_context, &$this->componentData,
|
||||
&$fileContentStatic, &$this->fileContentDynamic,
|
||||
&$fileContentStatic, &$fileContentDynamic,
|
||||
&$placeholders, &$this->hhh)
|
||||
);
|
||||
unset($fileContentStatic);
|
||||
@ -2153,17 +2149,16 @@ class Infusion extends Interpretation
|
||||
{
|
||||
Folder::create($path);
|
||||
// count the folder created
|
||||
$this->folderCount++;
|
||||
CFactory::_('Counter')->folder++;
|
||||
}
|
||||
// move the file to its place
|
||||
File::copy($getPAth, $path . $file_name);
|
||||
// count the file created
|
||||
$this->fileCount++;
|
||||
CFactory::_('Counter')->file++;
|
||||
// add content to it
|
||||
$lang = array_map(
|
||||
function ($langstring, $placeholder) {
|
||||
return $placeholder . '="' . $langstring . '"';
|
||||
}, array_values($languageStrings),
|
||||
fn($langstring, $placeholder) => $placeholder . '="' . $langstring . '"',
|
||||
array_values($languageStrings),
|
||||
array_keys($languageStrings)
|
||||
);
|
||||
// add to language file
|
||||
@ -2171,7 +2166,7 @@ class Infusion extends Interpretation
|
||||
$path . $file_name, implode(PHP_EOL, $lang)
|
||||
);
|
||||
// set the line counter
|
||||
$this->lineCount = $this->lineCount + count(
|
||||
CFactory::_('Counter')->line += count(
|
||||
(array) $lang
|
||||
);
|
||||
unset($lang);
|
||||
|
@ -5605,6 +5605,7 @@ COM_COMPONENTBUILDER_HR_HTHREECUSTOM_CODES_WARNINGHTHREE="<hr /><h3>Custom Codes
|
||||
COM_COMPONENTBUILDER_HR_HTHREEEXTERNAL_CODE_ERRORHTHREE="<hr /><h3>External Code Error</h3>"
|
||||
COM_COMPONENTBUILDER_HR_HTHREEEXTERNAL_CODE_NOTICEHTHREE="<hr /><h3>External Code Notice</h3>"
|
||||
COM_COMPONENTBUILDER_HR_HTHREEEXTERNAL_CODE_WARNINGHTHREE="<hr /><h3>External Code Warning</h3>"
|
||||
COM_COMPONENTBUILDER_HR_HTHREEFIELD_NOTICEHTHREE="<hr /><h3>Field Notice</h3>"
|
||||
COM_COMPONENTBUILDER_HTHREEPLACEHOLDER_REMOVEDHTHREEPBTHISB_CUSTOM_CODE_CAN_ONLY_BE_USED_IN_BOTHERB_CUSTOM_CODE_NOT_IN_IT_SELF_SINCE_THAT_WILL_CAUSE_A_INFINITE_LOOP_IN_THE_COMPILERP="<h3>Placeholder Removed!</h3><p><b>This</b> custom code can only be used in <b>other</b> custom code, not in it self! Since that will cause a infinite loop in the compiler.</p>"
|
||||
COM_COMPONENTBUILDER_HTHREESHTHREEPCUSTOM_CODE_CAN_ONLY_BE_USED_IN_OTHER_CUSTOM_CODE_IF_SET_AS_BJCB_MANUALB_YOU_CAN_NOT_ADD_THEM_TO_EMHASH_AUTOMATIONEM_CODE_AT_THIS_POINTP="<h3>%s</h3><p>Custom code can only be used in other custom code if set as <b>JCB (manual)</b>, you can not add them to <em>Hash (Automation)</em> code at this point.</p>"
|
||||
COM_COMPONENTBUILDER_HTHREES_NAMESPACE_ERROR_SHTHREEPYOU_MUST_ATLEAST_HAVE_TWO_SECTIONS_IN_YOUR_NAMESPACE_YOU_JUST_HAVE_ONE_S_THIS_IS_AN_UNACCEPTABLE_ACTION_PLEASE_SEE_A_HREFS_PSRFOURA_FOR_MORE_INFOPPTHIS_S_WAS_THEREFORE_REMOVED_A_HREFSCLICK_HEREA_TO_FIX_THIS_ISSUEP="<h3>%s namespace error (%s)</h3><p>You must at-least have two sections in your namespace, you just have one (%s). This is an unacceptable action, please see <a href=%s >psr-4</a> for more info.</p><p>This %s was therefore removed, <a href=%s>click here</a> to fix this issue.</p>"
|
||||
|
@ -425,9 +425,8 @@
|
||||
buttons="add,remove,move"
|
||||
description="COM_COMPONENTBUILDER_POWER_USE_SELECTION_DESCRIPTION"
|
||||
icon="list"
|
||||
max="30"
|
||||
min="0"
|
||||
showon="type!:interface">
|
||||
max="100"
|
||||
min="0">
|
||||
<form hidden="true" name="list_use_selection_modal" repeat="true">
|
||||
<!-- Use Field. Type: Namespaces. (custom) -->
|
||||
<field
|
||||
|
File diff suppressed because one or more lines are too long
@ -92,7 +92,6 @@ class ComponentbuilderViewGet_snippets extends HtmlView
|
||||
{
|
||||
// Set the default uikit components in this view.
|
||||
$uikitComp = array();
|
||||
$uikitComp[] = 'UIkit.notify';
|
||||
$uikitComp[] = 'data-uk-grid';
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<extension type="component" version="4" method="upgrade">
|
||||
<name>COM_COMPONENTBUILDER</name>
|
||||
<creationDate>15th January, 2023</creationDate>
|
||||
<creationDate>22nd January, 2023</creationDate>
|
||||
<author>Llewellyn van der Merwe</author>
|
||||
<authorEmail>joomla@vdm.io</authorEmail>
|
||||
<authorUrl>https://dev.vdm.io</authorUrl>
|
||||
|
@ -58,7 +58,7 @@ abstract class AbstractGiteaObject
|
||||
$this->options = $options ?: new Registry;
|
||||
$this->client = $client ?: (new HttpFactory)->getHttp($this->options);
|
||||
|
||||
$this->package = \get_class($this);
|
||||
$this->package = static::class;
|
||||
$this->package = substr($this->package, strrpos($this->package, '\\') + 1);
|
||||
}
|
||||
|
||||
@ -137,7 +137,7 @@ abstract class AbstractGiteaObject
|
||||
if ($response->code != $expectedCode)
|
||||
{
|
||||
// Decode the error response and throw an exception.
|
||||
$error = json_decode($response->body);
|
||||
$error = json_decode((string) $response->body);
|
||||
$message = isset($error->message) ? $error->message : 'Invalid response received from Gitea.';
|
||||
|
||||
throw new \DomainException($message, $response->code);
|
||||
@ -145,11 +145,11 @@ abstract class AbstractGiteaObject
|
||||
|
||||
if (JsonHelper::check($response->body))
|
||||
{
|
||||
$body = json_decode($response->body);
|
||||
$body = json_decode((string) $response->body);
|
||||
|
||||
if (isset($body->content_base64))
|
||||
{
|
||||
$body->content = base64_decode($body->content_base64);
|
||||
$body->content = base64_decode((string) $body->content_base64);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -30,7 +30,7 @@ abstract class AbstractPackage extends AbstractGiteaObject
|
||||
{
|
||||
parent::__construct($options, $client);
|
||||
|
||||
$this->package = \get_class($this);
|
||||
$this->package = static::class;
|
||||
$this->package = substr($this->package, strrpos($this->package, '\\') + 1);
|
||||
}
|
||||
|
||||
|
@ -108,7 +108,7 @@ abstract class BaseConfig extends JoomlaRegistry
|
||||
public function get($path, $default = null)
|
||||
{
|
||||
// function name with no underscores
|
||||
$method = 'get' . ucfirst(ClassfunctionHelper::safe(str_replace('_', '', $path)));
|
||||
$method = 'get' . ucfirst((string) ClassfunctionHelper::safe(str_replace('_', '', $path)));
|
||||
|
||||
// check if it has been set
|
||||
if (($value = parent::get($path, '__N0T_S3T_Y3T_')) !== '__N0T_S3T_Y3T_')
|
||||
@ -126,6 +126,27 @@ abstract class BaseConfig extends JoomlaRegistry
|
||||
|
||||
return $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Append value to a path in registry of an array
|
||||
*
|
||||
* @param string $path Parent registry Path (e.g. joomla.content.showauthor)
|
||||
* @param mixed $value Value of entry
|
||||
*
|
||||
* @return mixed The value of the that has been set.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function appendArray(string $path, $value)
|
||||
{
|
||||
// check if it does not exist
|
||||
if (!$this->exists($path))
|
||||
{
|
||||
$this->set($path, []);
|
||||
}
|
||||
|
||||
return $this->append($path, $value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -44,6 +44,107 @@ abstract class BaseRegistry extends JoomlaRegistry implements \JsonSerializable,
|
||||
|
||||
return $data->getIterator();
|
||||
}
|
||||
|
||||
/**
|
||||
* Append value to a path in registry of an array
|
||||
*
|
||||
* @param string $path Parent registry Path (e.g. joomla.content.showauthor)
|
||||
* @param mixed $value Value of entry
|
||||
*
|
||||
* @return mixed The value of the that has been set.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function appendArray(string $path, $value)
|
||||
{
|
||||
// check if it does not exist
|
||||
if (!$this->exists($path))
|
||||
{
|
||||
$this->set($path, []);
|
||||
}
|
||||
|
||||
return $this->append($path, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a registry path exists and is an array
|
||||
*
|
||||
* @param string $path Registry path (e.g. joomla.content.showauthor)
|
||||
*
|
||||
* @return boolean
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function isArray(string $path): bool
|
||||
{
|
||||
// Return default value if path is empty
|
||||
if (empty($path)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// get the value
|
||||
if (($node = $this->get($path)) !== null
|
||||
&& is_array($node)
|
||||
&& $node !== [])
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a registry path exists and is a string
|
||||
*
|
||||
* @param string $path Registry path (e.g. joomla.content.showauthor)
|
||||
*
|
||||
* @return boolean
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function isString(string $path): bool
|
||||
{
|
||||
// Return default value if path is empty
|
||||
if (empty($path)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// get the value
|
||||
if (($node = $this->get($path)) !== null
|
||||
&& is_string($node)
|
||||
&& strlen((string) $node) > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a registry path exists and is numeric
|
||||
*
|
||||
* @param string $path Registry path (e.g. joomla.content.showauthor)
|
||||
*
|
||||
* @return boolean
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function isNumeric(string $path): bool
|
||||
{
|
||||
// Return default value if path is empty
|
||||
if (empty($path)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// get the value
|
||||
if (($node = $this->get($path)) !== null
|
||||
&& is_numeric($node))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -50,7 +50,6 @@ abstract class Mapper implements Mapperdoubleinterface, Mappersingleinterface
|
||||
* Get content
|
||||
*
|
||||
* @param string $key The main string key
|
||||
* @param mixed $value The values to set
|
||||
*
|
||||
* @return mixed
|
||||
* @since 3.2.0
|
||||
@ -148,8 +147,8 @@ abstract class Mapper implements Mapperdoubleinterface, Mappersingleinterface
|
||||
/**
|
||||
* Get dynamic content
|
||||
*
|
||||
* @param string $firstKey The first key
|
||||
* @param string $secondKey The second key
|
||||
* @param string $firstKey The first key
|
||||
* @param string|null $secondKey The second key
|
||||
*
|
||||
* @return mixed
|
||||
* @since 3.2.0
|
||||
|
@ -0,0 +1,545 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Adminview;
|
||||
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Customtabs;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Tabs;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Fields;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Historyadminview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Permissions;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Conditions;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Relations;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Linkedviews;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Javascriptadminview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Cssadminview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Phpadminview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Custombuttons;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Customimportscripts;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Ajaxadmin;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Customalias;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Sql;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Mysqlsettings;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Admin View Data Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Data
|
||||
{
|
||||
/**
|
||||
* Admin views
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $data;
|
||||
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Compiler Event
|
||||
*
|
||||
* @var EventInterface
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected EventInterface $event;
|
||||
|
||||
/**
|
||||
* Compiler Placeholder
|
||||
*
|
||||
* @var Placeholder
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Placeholder $placeholder;
|
||||
|
||||
/**
|
||||
* Compiler Customcode Dispenser
|
||||
*
|
||||
* @var Dispenser
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Dispenser $dispenser;
|
||||
|
||||
/**
|
||||
* The modelling customtabs
|
||||
*
|
||||
* @var Customtabs
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customtabs $customtabs;
|
||||
|
||||
/**
|
||||
* The modelling tabs
|
||||
*
|
||||
* @var Tabs
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Tabs $tabs;
|
||||
|
||||
/**
|
||||
* The modelling fields
|
||||
*
|
||||
* @var Fields
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Fields $fields;
|
||||
|
||||
/**
|
||||
* The modelling admin view history
|
||||
*
|
||||
* @var Historyadminview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Historyadminview $history;
|
||||
|
||||
/**
|
||||
* The modelling permissions
|
||||
*
|
||||
* @var Permissions
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Permissions $permissions;
|
||||
|
||||
/**
|
||||
* The modelling conditions
|
||||
*
|
||||
* @var Conditions
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Conditions $conditions;
|
||||
|
||||
/**
|
||||
* The modelling relations
|
||||
*
|
||||
* @var Relations
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Relations $relations;
|
||||
|
||||
/**
|
||||
* The modelling linked views
|
||||
*
|
||||
* @var Linkedviews
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Linkedviews $linkedviews;
|
||||
|
||||
/**
|
||||
* The modelling javascript
|
||||
*
|
||||
* @var Javascriptadminview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Javascriptadminview $javascript;
|
||||
|
||||
/**
|
||||
* The modelling css
|
||||
*
|
||||
* @var Cssadminview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Cssadminview $css;
|
||||
|
||||
/**
|
||||
* The modelling php admin view
|
||||
*
|
||||
* @var Phpadminview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Phpadminview $php;
|
||||
|
||||
/**
|
||||
* The modelling custom buttons
|
||||
*
|
||||
* @var Custombuttons
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Custombuttons $custombuttons;
|
||||
|
||||
/**
|
||||
* The modelling custom import scripts
|
||||
*
|
||||
* @var Customimportscripts
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customimportscripts $customimportscripts;
|
||||
|
||||
/**
|
||||
* The modelling ajax
|
||||
*
|
||||
* @var Ajaxadmin
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Ajaxadmin $ajax;
|
||||
|
||||
/**
|
||||
* The modelling custom alias
|
||||
*
|
||||
* @var Customalias
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customalias $customalias;
|
||||
|
||||
/**
|
||||
* The modelling sql
|
||||
*
|
||||
* @var Sql
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Sql $sql;
|
||||
|
||||
/**
|
||||
* The modelling mysql settings
|
||||
*
|
||||
* @var Mysqlsettings
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Mysqlsettings $mysqlsettings;
|
||||
|
||||
/**
|
||||
* Database object to query local DB
|
||||
*
|
||||
* @var \JDatabaseDriver
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected \JDatabaseDriver $db;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
* @param EventInterface|null $event The compiler event api object.
|
||||
* @param Placeholder|null $placeholder The compiler placeholder object.
|
||||
* @param Dispenser|null $dispenser The compiler customcode dispenser object.
|
||||
* @param Customtabs|null $customtabs The modelling customtabs object.
|
||||
* @param Tabs|null $tabs The modelling tabs object.
|
||||
* @param Fields|null $fields The modelling fields object.
|
||||
* @param Historyadminview|null $history The modelling admin view history object.
|
||||
* @param Permissions|null $permissions The modelling permissions object.
|
||||
* @param Conditions|null $conditions The modelling conditions object.
|
||||
* @param Relations|null $relations The modelling relations object.
|
||||
* @param Linkedviews|null $linkedviews The modelling linked views object.
|
||||
* @param Javascriptadminview|null $javascript The modelling javascript object.
|
||||
* @param Cssadminview|null $css The modelling css object.
|
||||
* @param Phpadminview|null $php The modelling php admin view object.
|
||||
* @param Custombuttons|null $custombuttons The modelling custom buttons object.
|
||||
* @param Customimportscripts|null $customimportscripts The modelling custom import scripts object.
|
||||
* @param Ajaxadmin|null $ajax The modelling ajax object.
|
||||
* @param Customalias|null $customalias The modelling custom alias object.
|
||||
* @param Sql|null $sql The modelling sql object.
|
||||
* @param Mysqlsettings|null $mysqlsettings The modelling mysql settings object.
|
||||
* @param \JDatabaseDriver|null $db The database object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null,
|
||||
?EventInterface $event = null, ?Placeholder $placeholder = null, ?Dispenser $dispenser = null,
|
||||
?Customtabs $customtabs = null, ?Tabs $tabs = null, ?Fields $fields = null,
|
||||
?Historyadminview $history = null, ?Permissions $permissions = null,
|
||||
?Conditions $conditions = null, Relations $relations = null, ?Linkedviews $linkedviews = null,
|
||||
?Javascriptadminview $javascript = null, ?Cssadminview $css = null, ?Phpadminview $php = null,
|
||||
?Custombuttons $custombuttons = null, ?Customimportscripts $customimportscripts = null,
|
||||
?Ajaxadmin $ajax = null, ?Customalias $customalias = null, ?Sql $sql = null,
|
||||
?Mysqlsettings $mysqlsettings = null, ?\JDatabaseDriver $db = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->event = $event ?: Compiler::_('Event');
|
||||
$this->placeholder = $placeholder ?: Compiler::_('Placeholder');
|
||||
$this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
|
||||
$this->customtabs = $customtabs ?: Compiler::_('Model.Customtabs');
|
||||
$this->tabs = $tabs ?: Compiler::_('Model.Tabs');
|
||||
$this->fields = $fields ?: Compiler::_('Model.Fields');
|
||||
$this->history = $history ?: Compiler::_('Model.Historyadminview');
|
||||
$this->permissions = $permissions ?: Compiler::_('Model.Permissions');
|
||||
$this->conditions = $conditions ?: Compiler::_('Model.Conditions');
|
||||
$this->relations = $relations ?: Compiler::_('Model.Relations');
|
||||
$this->linkedviews = $linkedviews ?: Compiler::_('Model.Linkedviews');
|
||||
$this->javascript = $javascript ?: Compiler::_('Model.Javascriptadminview');
|
||||
$this->css = $css ?: Compiler::_('Model.Cssadminview');
|
||||
$this->php = $php ?: Compiler::_('Model.Phpadminview');
|
||||
$this->custombuttons = $custombuttons ?: Compiler::_('Model.Custombuttons');
|
||||
$this->customimportscripts = $customimportscripts ?: Compiler::_('Model.Customimportscripts');
|
||||
$this->ajax = $ajax ?: Compiler::_('Model.Ajaxadmin');
|
||||
$this->customalias = $customalias ?: Compiler::_('Model.Customalias');
|
||||
$this->sql = $sql ?: Compiler::_('Model.Sql');
|
||||
$this->mysqlsettings = $mysqlsettings ?: Compiler::_('Model.Mysqlsettings');
|
||||
$this->db = $db ?: Factory::getDbo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Admin View Data
|
||||
*
|
||||
* @param int $id The view ID
|
||||
*
|
||||
* @return object|null The view data
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function get(int $id): ?object
|
||||
{
|
||||
if (!isset($this->data[$id]))
|
||||
{
|
||||
// Create a new query object.
|
||||
$query = $this->db->getQuery(true);
|
||||
|
||||
$query->select('a.*');
|
||||
$query->select(
|
||||
$this->db->quoteName(
|
||||
array(
|
||||
'b.addfields',
|
||||
'b.id',
|
||||
'c.addconditions',
|
||||
'c.id',
|
||||
'r.addrelations',
|
||||
't.tabs'
|
||||
), array(
|
||||
'addfields',
|
||||
'addfields_id',
|
||||
'addconditions',
|
||||
'addconditions_id',
|
||||
'addrelations',
|
||||
'customtabs'
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
$query->from('#__componentbuilder_admin_view AS a');
|
||||
$query->join(
|
||||
'LEFT',
|
||||
$this->db->quoteName('#__componentbuilder_admin_fields', 'b')
|
||||
. ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||||
. $this->db->quoteName('b.admin_view') . ')'
|
||||
);
|
||||
|
||||
$query->join(
|
||||
'LEFT', $this->db->quoteName(
|
||||
'#__componentbuilder_admin_fields_conditions', 'c'
|
||||
) . ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||||
. $this->db->quoteName('c.admin_view') . ')'
|
||||
);
|
||||
|
||||
$query->join(
|
||||
'LEFT', $this->db->quoteName(
|
||||
'#__componentbuilder_admin_fields_relations', 'r'
|
||||
) . ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||||
. $this->db->quoteName('r.admin_view') . ')'
|
||||
);
|
||||
|
||||
$query->join(
|
||||
'LEFT', $this->db->quoteName(
|
||||
'#__componentbuilder_admin_custom_tabs', 't'
|
||||
) . ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||||
. $this->db->quoteName('t.admin_view') . ')'
|
||||
);
|
||||
|
||||
$query->where($this->db->quoteName('a.id') . ' = ' . (int) $id);
|
||||
|
||||
// for plugin event TODO change event api signatures
|
||||
$component_context = $this->config->component_context;
|
||||
// Trigger Event: jcb_ce_onBeforeQueryViewData
|
||||
$this->event->trigger(
|
||||
'jcb_ce_onBeforeQueryViewData',
|
||||
array(&$component_context, &$id, &$query, &$this->db)
|
||||
);
|
||||
|
||||
// Reset the query using our newly populated query object.
|
||||
$this->db->setQuery($query);
|
||||
|
||||
// Load the results as a list of stdClass objects (see later for more options on retrieving data).
|
||||
$view = $this->db->loadObject();
|
||||
|
||||
// setup single view code names to use in storing the data
|
||||
$view->name_single_code = 'oops_hmm_' . $id;
|
||||
if (isset($view->name_single) && $view->name_single != 'null')
|
||||
{
|
||||
$view->name_single_code = StringHelper::safe(
|
||||
$view->name_single
|
||||
);
|
||||
}
|
||||
|
||||
// setup list view code name to use in storing the data
|
||||
$view->name_list_code = 'oops_hmmm_' . $id;
|
||||
if (isset($view->name_list) && $view->name_list != 'null')
|
||||
{
|
||||
$view->name_list_code = StringHelper::safe(
|
||||
$view->name_list
|
||||
);
|
||||
}
|
||||
|
||||
// check the length of the view name (+5 for com_ and _)
|
||||
$name_length = $this->config->component_code_name_length + strlen(
|
||||
(string) $view->name_single_code
|
||||
) + 5;
|
||||
// when the name is larger than 49 we need to add the assets' table name fix
|
||||
if ($name_length > 49)
|
||||
{
|
||||
$this->config->set('add_assets_table_name_fix', true);
|
||||
}
|
||||
|
||||
// setup token check
|
||||
if (!isset($this->dispenser->hub['token']))
|
||||
{
|
||||
$this->dispenser->hub['token'] = [];
|
||||
}
|
||||
$this->dispenser->hub['token'][$view->name_single_code] = false;
|
||||
$this->dispenser->hub['token'][$view->name_list_code] = false;
|
||||
|
||||
// set some placeholders
|
||||
$this->placeholder->set('view', $view->name_single_code);
|
||||
$this->placeholder->set('views', $view->name_list_code);
|
||||
$this->placeholder->set('View', StringHelper::safe(
|
||||
$view->name_single, 'F'
|
||||
));
|
||||
$this->placeholder->set('Views', StringHelper::safe(
|
||||
$view->name_list, 'F'
|
||||
));
|
||||
$this->placeholder->set('VIEW', StringHelper::safe(
|
||||
$view->name_single, 'U'
|
||||
));
|
||||
$this->placeholder->set('VIEWS', StringHelper::safe(
|
||||
$view->name_list, 'U'
|
||||
));
|
||||
|
||||
// for plugin event TODO change event api signatures
|
||||
$placeholders = $this->placeholder->active;
|
||||
$component_context = $this->config->component_context;
|
||||
|
||||
// Trigger Event: jcb_ce_onBeforeModelViewData
|
||||
$this->event->trigger(
|
||||
'jcb_ce_onBeforeModelViewData',
|
||||
array(&$component_context, &$view, &$placeholders)
|
||||
);
|
||||
unset($placeholders);
|
||||
|
||||
// add the tables
|
||||
$view->addtables = (isset($view->addtables)
|
||||
&& JsonHelper::check($view->addtables))
|
||||
? json_decode((string) $view->addtables, true) : null;
|
||||
if (ArrayHelper::check($view->addtables))
|
||||
{
|
||||
$view->tables = array_values($view->addtables);
|
||||
}
|
||||
unset($view->addtables);
|
||||
|
||||
// set custom tabs
|
||||
$this->customtabs->set($view);
|
||||
|
||||
// set the local tabs
|
||||
$this->tabs->set($view);
|
||||
|
||||
// set permissions
|
||||
$this->permissions->set($view);
|
||||
|
||||
// set fields
|
||||
$this->fields->set($view);
|
||||
|
||||
// build update SQL
|
||||
$this->history->set($view);
|
||||
|
||||
// set the conditions
|
||||
$this->conditions->set($view);
|
||||
|
||||
// set the relations
|
||||
$this->relations->set($view);
|
||||
|
||||
// set linked views
|
||||
$this->linkedviews->set($view);
|
||||
|
||||
// set the lang target
|
||||
$this->config->lang_target = 'admin';
|
||||
if ($this->registry->get('builder.site_edit_view.' . $id, false))
|
||||
{
|
||||
$this->config->lang_target = 'both';
|
||||
}
|
||||
|
||||
// set javascript
|
||||
$this->javascript->set($view);
|
||||
|
||||
// set css
|
||||
$this->css->set($view);
|
||||
|
||||
// set php
|
||||
$this->php->set($view);
|
||||
|
||||
// set custom buttons
|
||||
$this->custombuttons->set($view);
|
||||
|
||||
// set custom import scripts
|
||||
$this->customimportscripts->set($view);
|
||||
|
||||
// set Ajax for this view
|
||||
$this->ajax->set($view);
|
||||
|
||||
// activate alias builder
|
||||
$this->customalias->set($view);
|
||||
|
||||
// set sql
|
||||
$this->sql->set($view);
|
||||
|
||||
// set mySql Table Settings
|
||||
$this->mysqlsettings->set($view);
|
||||
|
||||
// for plugin event TODO change event api signatures
|
||||
$placeholders = $this->placeholder->active;
|
||||
|
||||
// Trigger Event: jcb_ce_onAfterModelViewData
|
||||
$this->event->trigger(
|
||||
'jcb_ce_onAfterModelViewData',
|
||||
array(&$component_context, &$view, &$placeholders)
|
||||
);
|
||||
|
||||
// clear placeholders
|
||||
$this->placeholder->remove('view');
|
||||
$this->placeholder->remove('views');
|
||||
$this->placeholder->remove('View');
|
||||
$this->placeholder->remove('Views');
|
||||
$this->placeholder->remove('VIEW');
|
||||
$this->placeholder->remove('VIEWS');
|
||||
|
||||
// store this view to class object
|
||||
$this->data[$id] = $view;
|
||||
}
|
||||
|
||||
// return the found view data
|
||||
return $this->data[$id];
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
@ -0,0 +1,265 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Alias;
|
||||
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Loader;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Libraries;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Alias Data Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Data
|
||||
{
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Compiler Customcode
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Compiler Customcode in Gui
|
||||
*
|
||||
* @var Gui
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Gui $gui;
|
||||
|
||||
/**
|
||||
* Compiler Auto Loader
|
||||
*
|
||||
* @var Loader
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Loader $loader;
|
||||
|
||||
/**
|
||||
* Compiler Libraries Model
|
||||
*
|
||||
* @var Libraries
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Libraries $libraries;
|
||||
|
||||
/**
|
||||
* Database object to query local DB
|
||||
*
|
||||
* @var \JDatabaseDriver
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected \JDatabaseDriver $db;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
* @param Gui|null $gui The compiler customcode gui.
|
||||
* @param Loader|null $load The compiler loader object.
|
||||
* @param Libraries|null $libraries The compiler libraries model object.
|
||||
* @param \JDatabaseDriver|null $db The database object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null,
|
||||
?Customcode $customcode = null, ?Gui $gui = null,
|
||||
?Loader $loader = null, ?Libraries $libraries = null,
|
||||
?\JDatabaseDriver $db = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
|
||||
$this->loader = $loader ?: Compiler::_('Model.Loader');
|
||||
$this->libraries = $libraries ?: Compiler::_('Model.Libraries');
|
||||
$this->db = $db ?: Factory::getDbo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Data by Alias
|
||||
*
|
||||
* @param string $alias The alias name
|
||||
* @param string $table The table where to find the alias
|
||||
* @param string $view The view code name
|
||||
*
|
||||
* @return array|null The data found with the alias
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function get(string $alias, string $table, string $view): ?array
|
||||
{
|
||||
// if not set, get all keys in table and set by ID
|
||||
$this->set($table);
|
||||
|
||||
// now check if key is found
|
||||
$name = preg_replace("/[^A-Za-z]/", '', $alias);
|
||||
|
||||
if (($id = $this->registry->get('builder.data_with_alias_keys.' . $table . '.' . $name, null)) === null &&
|
||||
($id = $this->registry->get('builder.data_with_alias_keys.' . $table . '.' . $alias, null)) === null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// Create a new query object.
|
||||
$query = $this->db->getQuery(true);
|
||||
$query->select('a.*');
|
||||
$query->from('#__componentbuilder_' . $table . ' AS a');
|
||||
$query->where(
|
||||
$this->db->quoteName('a.id') . ' = ' . (int) $id
|
||||
);
|
||||
|
||||
// get the row
|
||||
$this->db->setQuery($query);
|
||||
$item = $this->db->loadObject();
|
||||
|
||||
// get the other target if both
|
||||
$targets = [$this->config->build_target];
|
||||
|
||||
if ($this->config->lang_target === 'both')
|
||||
{
|
||||
$targets = ['site', 'admin'];
|
||||
}
|
||||
|
||||
// we load this layout
|
||||
$php_view = '';
|
||||
if ($item->add_php_view == 1
|
||||
&& StringHelper::check($item->php_view))
|
||||
{
|
||||
$php_view = $this->gui->set(
|
||||
$this->customcode->update(base64_decode((string) $item->php_view)),
|
||||
array(
|
||||
'table' => $table,
|
||||
'field' => 'php_view',
|
||||
'id' => (int) $item->id,
|
||||
'type' => 'php')
|
||||
);
|
||||
}
|
||||
|
||||
$content = $this->gui->set(
|
||||
$this->customcode->update(base64_decode((string) $item->{$table})),
|
||||
array(
|
||||
'table' => $table,
|
||||
'field' => $table,
|
||||
'id' => (int) $item->id,
|
||||
'type' => 'html')
|
||||
);
|
||||
|
||||
// load all targets
|
||||
foreach ($targets as $target)
|
||||
{
|
||||
// set libraries
|
||||
$this->libraries->set($view, $item, $target);
|
||||
|
||||
// auto loaders
|
||||
$this->loader->set($view, $content, $target);
|
||||
$this->loader->set($view, $php_view, $target);
|
||||
}
|
||||
|
||||
// load uikit version 2 if required
|
||||
$this->loader->uikit($view, $content);
|
||||
$this->loader->uikit($view, $php_view);
|
||||
|
||||
return [
|
||||
'id' => $item->id,
|
||||
'html' => $this->gui->set(
|
||||
$content,
|
||||
[
|
||||
'table' => $table,
|
||||
'field' => $table,
|
||||
'id' => $item->id,
|
||||
'type' => 'html'
|
||||
]
|
||||
),
|
||||
'php_view' => $this->gui->set(
|
||||
$php_view,
|
||||
[
|
||||
'table' => $table,
|
||||
'field' => 'php_view',
|
||||
'id' => $item->id,
|
||||
'type' => 'php'
|
||||
]
|
||||
)
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Load all alias and ID's of a table
|
||||
*
|
||||
* @param string $table The table where to find the alias
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected function set(string $table)
|
||||
{
|
||||
// now check if key is found
|
||||
if (!$this->registry->get('builder.data_with_alias_keys.' . $table, null))
|
||||
{
|
||||
// Create a new query object.
|
||||
$query = $this->db->getQuery(true);
|
||||
$query->select(array('a.id', 'a.alias'));
|
||||
$query->from('#__componentbuilder_' . $table . ' AS a');
|
||||
$this->db->setQuery($query);
|
||||
$items = $this->db->loadObjectList();
|
||||
|
||||
// check if we have an array
|
||||
if (ArrayHelper::check($items))
|
||||
{
|
||||
foreach ($items as $item)
|
||||
{
|
||||
// build the key
|
||||
$k_ey = StringHelper::safe($item->alias);
|
||||
$key = preg_replace("/[^A-Za-z]/", '', (string) $k_ey);
|
||||
|
||||
// set the keys
|
||||
$this->registry->
|
||||
set('builder.data_with_alias_keys.' . $table . '.' . $item->alias, $item->id);
|
||||
$this->registry->
|
||||
set('builder.data_with_alias_keys.' . $table . '.' . $k_ey, $item->id);
|
||||
$this->registry->
|
||||
set('builder.data_with_alias_keys.' . $table . '.' . $key, $item->id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
@ -0,0 +1,60 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Component\Data;
|
||||
use VDM\Joomla\Componentbuilder\Abstraction\BaseRegistry;
|
||||
|
||||
|
||||
/**
|
||||
* Compiler Component
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Component extends BaseRegistry
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Data|null $component The component data class.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Data $component = null)
|
||||
{
|
||||
$component = $component ?: Compiler::_('Component.Data');
|
||||
|
||||
parent::__construct($component->get());
|
||||
}
|
||||
|
||||
/**
|
||||
* getting any valid value
|
||||
*
|
||||
* @param string $path The value's key/path name
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __get(string $path)
|
||||
{
|
||||
// check if it has been set
|
||||
if (($value = $this->get($path, '__N0T_S3T_Y3T_')) !== '__N0T_S3T_Y3T_')
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,841 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Component;
|
||||
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Component\Placeholder as ComponentPlaceholder;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Field as Field;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Field\Name as FieldName;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Field\UniqueName;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Filesfolders;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Historycomponent;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Whmcs;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Sqltweaking;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Adminviews;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Siteviews;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Customadminviews;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Joomlamodules;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Joomlaplugins;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\GetHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Compiler Component Data
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Data
|
||||
{
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* Compiler Event
|
||||
*
|
||||
* @var EventInterface
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected EventInterface $event;
|
||||
|
||||
/**
|
||||
* Compiler Placeholder
|
||||
*
|
||||
* @var Placeholder
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Placeholder $placeholder;
|
||||
|
||||
/**
|
||||
* Compiler Component Placeholder
|
||||
*
|
||||
* @var ComponentPlaceholder
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected ComponentPlaceholder $componentPlaceholder;
|
||||
|
||||
/**
|
||||
* Compiler Customcode Dispenser
|
||||
*
|
||||
* @var Dispenser
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Dispenser $dispenser;
|
||||
|
||||
/**
|
||||
* Compiler Field
|
||||
*
|
||||
* @var Field
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Field $field;
|
||||
|
||||
/**
|
||||
* Compiler field name
|
||||
*
|
||||
* @var FieldName
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected FieldName $fieldName;
|
||||
|
||||
/**
|
||||
* Compiler Field Unique Name
|
||||
*
|
||||
* @var UniqueName
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected UniqueName $uniqueName;
|
||||
|
||||
/**
|
||||
* Compiler Files Folders
|
||||
*
|
||||
* @var Filesfolders
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Filesfolders $filesFolders;
|
||||
|
||||
/**
|
||||
* The modelling component history
|
||||
*
|
||||
* @var Historycomponent
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Historycomponent $history;
|
||||
|
||||
/**
|
||||
* The modelling whmcs
|
||||
*
|
||||
* @var Whmcs
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Whmcs $whmcs;
|
||||
|
||||
/**
|
||||
* The modelling Sql Tweaking
|
||||
*
|
||||
* @var Sqltweaking
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Sqltweaking $sqltweaking;
|
||||
|
||||
/**
|
||||
* The modelling Admin Views
|
||||
*
|
||||
* @var Adminviews
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Adminviews $adminviews;
|
||||
|
||||
/**
|
||||
* The modelling Site Views
|
||||
*
|
||||
* @var Siteviews
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Siteviews $siteviews;
|
||||
|
||||
/**
|
||||
* The modelling Custom Admin Views
|
||||
*
|
||||
* @var Customadminviews
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customadminviews $customadminviews;
|
||||
|
||||
/**
|
||||
* The modelling Joomla Modules
|
||||
*
|
||||
* @var Joomlamodules
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Joomlamodules $modules;
|
||||
|
||||
/**
|
||||
* The modelling Joomla Plugins
|
||||
*
|
||||
* @var Joomlaplugins
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Joomlaplugins $plugins;
|
||||
|
||||
/**
|
||||
* Database object to query local DB
|
||||
*
|
||||
* @var \JDatabaseDriver
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected \JDatabaseDriver $db;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param EventInterface|null $event The compiler event api object.
|
||||
* @param Placeholder|null $placeholder The compiler placeholder object.
|
||||
* @param ComponentPlaceholder|null $componentPlaceholder The compiler component placeholder object.
|
||||
* @param Dispenser|null $dispenser The compiler customcode dispenser object.
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
* @param Gui|null $gui The compiler customcode gui.
|
||||
* @param Field|null $field The compiler field object.
|
||||
* @param FieldName|null $fieldName The compiler field name object.
|
||||
* @param UniqueName|null $uniqueName The compiler field unique name object.
|
||||
* @param Filesfolders|null $filesFolders The compiler files folders object.
|
||||
* @param Historycomponent|null $history The modelling component history object.
|
||||
* @param Whmcs|null $whmcs The modelling whmcs object.
|
||||
* @param Sqltweaking|null $sqltweaking The modelling sql tweaking object.
|
||||
* @param Adminviews|null $adminviews The modelling adminviews object.
|
||||
* @param Siteviews|null $siteviews The modelling siteviews object.
|
||||
* @param Customadminviews|null $customadminviews The modelling customadminviews object.
|
||||
* @param Joomlamodules|null $modules The modelling modules object.
|
||||
* @param Joomlaplugins|null $plugins The modelling plugins object.
|
||||
* @param \JDatabaseDriver|null $db The database object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?EventInterface $event = null,
|
||||
?Placeholder $placeholder = null, ?ComponentPlaceholder $componentPlaceholder = null,
|
||||
?Dispenser $dispenser = null, ?Customcode $customcode = null, ?Gui $gui = null,
|
||||
?Field $field = null, ?FieldName $fieldName = null, ?UniqueName $uniqueName = null,
|
||||
?Filesfolders $filesFolders = null, ?Historycomponent $history = null, ?Whmcs $whmcs = null,
|
||||
?Sqltweaking $sqltweaking = null, ?Adminviews $adminviews = null, ?Siteviews $siteviews = null,
|
||||
?Customadminviews $customadminviews = null, ?Joomlamodules $modules = null,
|
||||
?Joomlaplugins $plugins = null,
|
||||
?\JDatabaseDriver $db = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->event = $event ?: Compiler::_('Event');
|
||||
$this->placeholder = $placeholder ?: Compiler::_('Placeholder');
|
||||
$this->componentPlaceholder = $componentPlaceholder ?: Compiler::_('Component.Placeholder');
|
||||
$this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
|
||||
$this->field = $field ?: Compiler::_('Field');
|
||||
$this->fieldName = $fieldName ?: Compiler::_('Field.Name');
|
||||
$this->uniqueName = $uniqueName ?: Compiler::_('Field.Unique.Name');
|
||||
$this->filesFolders = $filesFolders ?: Compiler::_('Model.Filesfolders');
|
||||
$this->history = $history ?: Compiler::_('Model.Historycomponent');
|
||||
$this->whmcs = $whmcs ?: Compiler::_('Model.Whmcs');
|
||||
$this->sqltweaking = $sqltweaking ?: Compiler::_('Model.Sqltweaking');
|
||||
$this->adminviews = $adminviews ?: Compiler::_('Model.Adminviews');
|
||||
$this->siteviews = $siteviews ?: Compiler::_('Model.Siteviews');
|
||||
$this->customadminviews = $customadminviews ?: Compiler::_('Model.Customadminviews');
|
||||
$this->modules = $modules ?: Compiler::_('Model.Joomlamodules');
|
||||
$this->plugins = $plugins ?: Compiler::_('Model.Joomlaplugins');
|
||||
$this->db = $db ?: Factory::getDbo();
|
||||
}
|
||||
|
||||
/**
|
||||
* get current component data
|
||||
*
|
||||
* @return object|null The component data
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function get(): ?object
|
||||
{
|
||||
// Create a new query object.
|
||||
$query = $this->db->getQuery(true);
|
||||
|
||||
// selection
|
||||
$selection = array(
|
||||
'b.addadmin_views' => 'addadmin_views',
|
||||
'b.id' => 'addadmin_views_id',
|
||||
'h.addconfig' => 'addconfig',
|
||||
'd.addcustom_admin_views' => 'addcustom_admin_views',
|
||||
'g.addcustommenus' => 'addcustommenus',
|
||||
'j.addfiles' => 'addfiles',
|
||||
'j.addfolders' => 'addfolders',
|
||||
'j.addfilesfullpath' => 'addfilesfullpath',
|
||||
'j.addfoldersfullpath' => 'addfoldersfullpath',
|
||||
'c.addsite_views' => 'addsite_views',
|
||||
'l.addjoomla_plugins' => 'addjoomla_plugins',
|
||||
'k.addjoomla_modules' => 'addjoomla_modules',
|
||||
'i.dashboard_tab' => 'dashboard_tab',
|
||||
'i.php_dashboard_methods' => 'php_dashboard_methods',
|
||||
'i.params' => 'dashboard_params',
|
||||
'i.id' => 'component_dashboard_id',
|
||||
'f.sql_tweak' => 'sql_tweak',
|
||||
'e.version_update' => 'version_update',
|
||||
'e.id' => 'version_update_id'
|
||||
);
|
||||
$query->select('a.*');
|
||||
$query->select(
|
||||
$this->db->quoteName(
|
||||
array_keys($selection), array_values($selection)
|
||||
)
|
||||
);
|
||||
|
||||
// from this table
|
||||
$query->from('#__componentbuilder_joomla_component AS a');
|
||||
|
||||
// jointer-map
|
||||
$joiners = array(
|
||||
'b' => 'component_admin_views',
|
||||
'c' => 'component_site_views',
|
||||
'd' => 'component_custom_admin_views',
|
||||
'e' => 'component_updates',
|
||||
'f' => 'component_mysql_tweaks',
|
||||
'g' => 'component_custom_admin_menus',
|
||||
'h' => 'component_config',
|
||||
'i' => 'component_dashboard',
|
||||
'j' => 'component_files_folders',
|
||||
'l' => 'component_plugins',
|
||||
'k' => 'component_modules'
|
||||
);
|
||||
|
||||
// load the joins
|
||||
foreach ($joiners as $as => $join)
|
||||
{
|
||||
$query->join(
|
||||
'LEFT',
|
||||
$this->db->quoteName('#__componentbuilder_' . $join, $as)
|
||||
. ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||||
. $this->db->quoteName($as . '.joomla_component') . ')'
|
||||
);
|
||||
}
|
||||
$query->where(
|
||||
$this->db->quoteName('a.id') . ' = ' . (int) $this->config->component_id
|
||||
);
|
||||
|
||||
// for plugin event TODO change event api signatures
|
||||
$component_context = $this->config->component_context;
|
||||
$component_id = $this->config->component_id;
|
||||
|
||||
// Trigger Event: jcb_ce_onBeforeQueryComponentData
|
||||
$this->event->trigger(
|
||||
'jcb_ce_onBeforeQueryComponentData',
|
||||
array(&$component_context, &$component_id, &$query,
|
||||
&$this->db)
|
||||
);
|
||||
|
||||
// Reset the query using our newly populated query object.
|
||||
$this->db->setQuery($query);
|
||||
|
||||
// Load the results as a list of stdClass objects
|
||||
$component = $this->db->loadObject();
|
||||
|
||||
// make sure we got a component loaded
|
||||
if (!is_object($component) || !isset($component->system_name))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// Trigger Event: jcb_ce_onBeforeModelComponentData
|
||||
$this->event->trigger(
|
||||
'jcb_ce_onBeforeModelComponentData',
|
||||
array(&$component_context, &$component)
|
||||
);
|
||||
|
||||
// load the global placeholders
|
||||
$this->placeholder->active = $this->componentPlaceholder->get();
|
||||
|
||||
// set component sales name
|
||||
$component->sales_name = StringHelper::safe(
|
||||
$component->system_name
|
||||
);
|
||||
|
||||
// set the component name_code
|
||||
$component->name_code = StringHelper::safe(
|
||||
$component->name_code
|
||||
);
|
||||
|
||||
// ensure version naming is correct
|
||||
$this->config->set('component_version', preg_replace(
|
||||
'/[^0-9.]+/', '', (string) $component->component_version
|
||||
)
|
||||
);
|
||||
|
||||
// set the website and autor for global use (default to VDM if not found)
|
||||
$this->config->set('project_website', $component->website ?? 'https://dev.vdm.io');
|
||||
$this->config->set('project_author', $component->author ?? 'VDM');
|
||||
|
||||
// set the files and folders
|
||||
$this->filesFolders->set($component);
|
||||
|
||||
// set the uikit switch
|
||||
$this->config->set('uikit', $component->adduikit);
|
||||
|
||||
// set whmcs links if needed
|
||||
$this->whmcs->set($component);
|
||||
|
||||
// set the footable switch
|
||||
if ($component->addfootable)
|
||||
{
|
||||
// force add footable
|
||||
$this->config->set('footable ', true);
|
||||
// add the version
|
||||
$this->config->set('footable_version', (3 == $component->addfootable) ? 3 : 2);
|
||||
}
|
||||
|
||||
// set the addcustommenus data
|
||||
$component->addcustommenus = (isset($component->addcustommenus)
|
||||
&& JsonHelper::check($component->addcustommenus))
|
||||
? json_decode((string) $component->addcustommenus, true) : null;
|
||||
if (ArrayHelper::check($component->addcustommenus))
|
||||
{
|
||||
$component->custommenus = array_values($component->addcustommenus);
|
||||
}
|
||||
unset($component->addcustommenus);
|
||||
|
||||
// set the sql tweak data
|
||||
$this->sqltweaking->set($component);
|
||||
|
||||
// set the admin view data
|
||||
$this->adminviews->set($component);
|
||||
|
||||
// set the site view data
|
||||
$this->siteviews->set($component);
|
||||
|
||||
// set the custom_admin_views data
|
||||
$this->customadminviews->set($component);
|
||||
|
||||
// set the config data
|
||||
$component->addconfig = (isset($component->addconfig)
|
||||
&& JsonHelper::check($component->addconfig))
|
||||
? json_decode((string) $component->addconfig, true) : null;
|
||||
if (ArrayHelper::check($component->addconfig))
|
||||
{
|
||||
$component->config = array_map(
|
||||
function ($field) {
|
||||
// make sure the alias and title is 0
|
||||
$field['alias'] = 0;
|
||||
$field['title'] = 0;
|
||||
// set the field details
|
||||
$this->field->set($field);
|
||||
// set unique name counter
|
||||
$this->uniqueName->set($field['base_name'], 'configs');
|
||||
|
||||
// return field
|
||||
return $field;
|
||||
}, array_values($component->addconfig)
|
||||
);
|
||||
|
||||
// do some house cleaning (for fields)
|
||||
foreach ($component->config as $field)
|
||||
{
|
||||
// so first we lock the field name in
|
||||
$this->fieldName->get($field, 'configs');
|
||||
}
|
||||
// unset original value
|
||||
unset($component->addconfig);
|
||||
}
|
||||
|
||||
// set the add contributors
|
||||
$component->addcontributors = (isset($component->addcontributors)
|
||||
&& JsonHelper::check($component->addcontributors))
|
||||
? json_decode((string) $component->addcontributors, true) : null;
|
||||
if (ArrayHelper::check($component->addcontributors))
|
||||
{
|
||||
$this->config->set('add_contributors', true);
|
||||
$component->contributors = array_values(
|
||||
$component->addcontributors
|
||||
);
|
||||
}
|
||||
unset($component->addcontributors);
|
||||
|
||||
// set the version updates
|
||||
$component->version_update = (isset($component->version_update)
|
||||
&& JsonHelper::check($component->version_update))
|
||||
? json_decode((string) $component->version_update, true) : null;
|
||||
if (ArrayHelper::check($component->version_update))
|
||||
{
|
||||
$component->version_update = array_values(
|
||||
$component->version_update
|
||||
);
|
||||
}
|
||||
|
||||
// build update SQL
|
||||
$this->history->set($component);
|
||||
|
||||
// set GUI mapper
|
||||
$guiMapper = [
|
||||
'table' => 'joomla_component',
|
||||
'id' => (int) $this->config->component_id,
|
||||
'field' => 'javascript',
|
||||
'type' => 'js'
|
||||
];
|
||||
|
||||
// add_javascript
|
||||
if ($component->add_javascript == 1)
|
||||
{
|
||||
$this->dispenser->set(
|
||||
$component->javascript,
|
||||
'component_js',
|
||||
null,
|
||||
null,
|
||||
$guiMapper
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->dispenser->hub['component_js'] = '';
|
||||
}
|
||||
unset($component->javascript);
|
||||
|
||||
// add global CSS
|
||||
$addGlobalCss = ['admin', 'site'];
|
||||
foreach ($addGlobalCss as $area)
|
||||
{
|
||||
// add_css if found
|
||||
if (isset($component->{'add_css_' . $area})
|
||||
&& $component->{'add_css_' . $area} == 1
|
||||
&& isset($component->{'css_' . $area})
|
||||
&& StringHelper::check(
|
||||
$component->{'css_' . $area}
|
||||
))
|
||||
{
|
||||
$this->dispenser->set(
|
||||
$component->{'css_' . $area},
|
||||
'component_css_' . $area
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->dispenser->hub['component_css_' . $area] = '';
|
||||
}
|
||||
unset($component->{'css_' . $area});
|
||||
}
|
||||
|
||||
// set the lang target
|
||||
$this->config->lang_target = 'admin';
|
||||
|
||||
// add PHP in ADMIN
|
||||
$addScriptMethods = [
|
||||
'php_preflight',
|
||||
'php_postflight',
|
||||
'php_method'
|
||||
];
|
||||
$addScriptTypes = [
|
||||
'install',
|
||||
'update',
|
||||
'uninstall'
|
||||
];
|
||||
// update GUI mapper
|
||||
$guiMapper['type'] = 'php';
|
||||
foreach ($addScriptMethods as $scriptMethod)
|
||||
{
|
||||
foreach ($addScriptTypes as $scriptType)
|
||||
{
|
||||
if (isset(
|
||||
$component->{'add_' . $scriptMethod . '_' . $scriptType}
|
||||
)
|
||||
&& $component->{'add_' . $scriptMethod . '_' . $scriptType}
|
||||
== 1
|
||||
&& StringHelper::check(
|
||||
$component->{$scriptMethod . '_' . $scriptType}
|
||||
))
|
||||
{
|
||||
// set GUI mapper field
|
||||
$guiMapper['field'] = $scriptMethod . '_' . $scriptType;
|
||||
$this->dispenser->set(
|
||||
$component->{$scriptMethod . '_' . $scriptType},
|
||||
$scriptMethod,
|
||||
$scriptType,
|
||||
null,
|
||||
$guiMapper
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->dispenser->hub[$scriptMethod][$scriptType] = '';
|
||||
}
|
||||
unset($component->{$scriptMethod . '_' . $scriptType});
|
||||
}
|
||||
}
|
||||
|
||||
// add_php_helper
|
||||
if ($component->add_php_helper_admin == 1
|
||||
&& StringHelper::check(
|
||||
$component->php_helper_admin
|
||||
))
|
||||
{
|
||||
$this->config->lang_target = 'admin';
|
||||
// update GUI mapper
|
||||
$guiMapper['field'] = 'php_helper_admin';
|
||||
$guiMapper['prefix'] = PHP_EOL . PHP_EOL;
|
||||
$this->dispenser->set(
|
||||
$component->php_helper_admin,
|
||||
'component_php_helper_admin',
|
||||
null,
|
||||
null,
|
||||
$guiMapper
|
||||
);
|
||||
unset($guiMapper['prefix']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->dispenser->hub['component_php_helper_admin'] = '';
|
||||
}
|
||||
unset($component->php_helper);
|
||||
|
||||
// add_admin_event
|
||||
if ($component->add_admin_event == 1
|
||||
&& StringHelper::check($component->php_admin_event))
|
||||
{
|
||||
$this->config->lang_target = 'admin';
|
||||
// update GUI mapper field
|
||||
$guiMapper['field'] = 'php_admin_event';
|
||||
$this->dispenser->set(
|
||||
$component->php_admin_event,
|
||||
'component_php_admin_event',
|
||||
null,
|
||||
null,
|
||||
$guiMapper
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->dispenser->hub['component_php_admin_event'] = '';
|
||||
}
|
||||
unset($component->php_admin_event);
|
||||
|
||||
// add_php_helper_both
|
||||
if ($component->add_php_helper_both == 1
|
||||
&& StringHelper::check($component->php_helper_both))
|
||||
{
|
||||
$this->config->lang_target = 'both';
|
||||
// update GUI mapper field
|
||||
$guiMapper['field'] = 'php_helper_both';
|
||||
$guiMapper['prefix'] = PHP_EOL . PHP_EOL;
|
||||
$this->dispenser->set(
|
||||
$component->php_helper_both,
|
||||
'component_php_helper_both',
|
||||
null,
|
||||
null,
|
||||
$guiMapper
|
||||
);
|
||||
unset($guiMapper['prefix']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->dispenser->hub['component_php_helper_both'] = '';
|
||||
}
|
||||
|
||||
// add_php_helper_site
|
||||
if ($component->add_php_helper_site == 1
|
||||
&& StringHelper::check($component->php_helper_site))
|
||||
{
|
||||
$this->config->lang_target = 'site';
|
||||
// update GUI mapper field
|
||||
$guiMapper['field'] = 'php_helper_site';
|
||||
$guiMapper['prefix'] = PHP_EOL . PHP_EOL;
|
||||
$this->dispenser->set(
|
||||
$component->php_helper_site,
|
||||
'component_php_helper_site',
|
||||
null,
|
||||
null,
|
||||
$guiMapper
|
||||
);
|
||||
unset($guiMapper['prefix']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->dispenser->hub['component_php_helper_site'] = '';
|
||||
}
|
||||
unset($component->php_helper);
|
||||
|
||||
// add_site_event
|
||||
if ($component->add_site_event == 1
|
||||
&& StringHelper::check($component->php_site_event))
|
||||
{
|
||||
$this->config->lang_target = 'site';
|
||||
// update GUI mapper field
|
||||
$guiMapper['field'] = 'php_site_event';
|
||||
$this->dispenser->set(
|
||||
$component->php_site_event,
|
||||
'component_php_site_event',
|
||||
null,
|
||||
null,
|
||||
$guiMapper
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->dispenser->hub['component_php_site_event'] = '';
|
||||
}
|
||||
unset($component->php_site_event);
|
||||
|
||||
// add_sql
|
||||
if ($component->add_sql == 1)
|
||||
{
|
||||
$this->dispenser->set(
|
||||
$component->sql,
|
||||
'sql',
|
||||
'component_sql'
|
||||
);
|
||||
}
|
||||
unset($component->sql);
|
||||
|
||||
// add_sql_uninstall
|
||||
if ($component->add_sql_uninstall == 1)
|
||||
{
|
||||
$this->dispenser->set(
|
||||
$component->sql_uninstall,
|
||||
'sql_uninstall'
|
||||
);
|
||||
}
|
||||
unset($component->sql_uninstall);
|
||||
|
||||
// bom
|
||||
if (StringHelper::check($component->bom))
|
||||
{
|
||||
$this->config->set('bom_path',
|
||||
$this->config->get('compiler_path', JPATH_COMPONENT_ADMINISTRATOR . '/compiler') . '/' . $component->bom
|
||||
);
|
||||
}
|
||||
unset($component->bom);
|
||||
|
||||
// README
|
||||
if ($component->addreadme)
|
||||
{
|
||||
$component->readme = $this->customcode->update(
|
||||
base64_decode((string) $component->readme)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$component->readme = '';
|
||||
}
|
||||
|
||||
// set lang now
|
||||
$nowLang = $this->config->lang_target;
|
||||
$this->config->lang_target = 'admin';
|
||||
|
||||
// dashboard methods
|
||||
$component->dashboard_tab = (isset($component->dashboard_tab)
|
||||
&& JsonHelper::check($component->dashboard_tab))
|
||||
? json_decode((string) $component->dashboard_tab, true) : null;
|
||||
if (ArrayHelper::check($component->dashboard_tab))
|
||||
{
|
||||
$component->dashboard_tab = array_map(
|
||||
function ($array) {
|
||||
$array['html'] = $this->customcode->update($array['html']);
|
||||
|
||||
return $array;
|
||||
}, array_values($component->dashboard_tab)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$component->dashboard_tab = '';
|
||||
}
|
||||
|
||||
// add the php of the dashboard if set
|
||||
if (isset($component->php_dashboard_methods)
|
||||
&& StringHelper::check(
|
||||
$component->php_dashboard_methods
|
||||
))
|
||||
{
|
||||
// load the php for the dashboard model
|
||||
$component->php_dashboard_methods = $this->gui->set(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $component->php_dashboard_methods)
|
||||
),
|
||||
[
|
||||
'table' => 'component_dashboard',
|
||||
'field' => 'php_dashboard_methods',
|
||||
'id' => (int) $component->component_dashboard_id,
|
||||
'type' => 'php'
|
||||
]
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$component->php_dashboard_methods = '';
|
||||
}
|
||||
|
||||
// reset back to now lang
|
||||
$this->config->lang_target = $nowLang;
|
||||
|
||||
// add the update/sales server FTP details if that is the expected protocol
|
||||
$serverArray = array('update_server', 'sales_server');
|
||||
foreach ($serverArray as $server)
|
||||
{
|
||||
if ($component->{'add_' . $server} == 1
|
||||
&& is_numeric(
|
||||
$component->{$server}
|
||||
)
|
||||
&& $component->{$server} > 0)
|
||||
{
|
||||
// get the server protocol
|
||||
$component->{$server . '_protocol'}
|
||||
= GetHelper::var(
|
||||
'server', (int) $component->{$server}, 'id', 'protocol'
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$component->{$server} = 0;
|
||||
// only change this for sales server (update server can be added loacaly to the zip file)
|
||||
if ('sales_server' === $server)
|
||||
{
|
||||
$component->{'add_' . $server} = 0;
|
||||
}
|
||||
$component->{$server . '_protocol'} = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// set the ignore folders for repo if found
|
||||
if (isset($component->toignore)
|
||||
&& StringHelper::check(
|
||||
$component->toignore
|
||||
))
|
||||
{
|
||||
if (strpos((string) $component->toignore, ',') !== false)
|
||||
{
|
||||
$component->toignore = array_map(
|
||||
'trim', (array) explode(',', (string) $component->toignore)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$component->toignore = array(trim((string) $component->toignore));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// the default is to ignore the repo folder
|
||||
$component->toignore = array('.git');
|
||||
}
|
||||
|
||||
// set all modules
|
||||
$this->modules->set($component);
|
||||
|
||||
// set all plugins
|
||||
$this->plugins->set($component);
|
||||
|
||||
// Trigger Event: jcb_ce_onAfterModelComponentData
|
||||
$this->event->trigger(
|
||||
'jcb_ce_onAfterModelComponentData',
|
||||
array(&$component_context, &$component)
|
||||
);
|
||||
|
||||
// return found component data
|
||||
return $component;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -105,7 +105,7 @@ class Placeholder implements PlaceholderInterface
|
||||
// open all the code
|
||||
foreach ($bucket as $key => &$code)
|
||||
{
|
||||
$code = base64_decode($code);
|
||||
$code = base64_decode((string) $code);
|
||||
}
|
||||
}
|
||||
|
||||
@ -126,7 +126,7 @@ class Placeholder implements PlaceholderInterface
|
||||
)) !== false
|
||||
&& JsonHelper::check($_placeholders))
|
||||
{
|
||||
$_placeholders = json_decode($_placeholders, true);
|
||||
$_placeholders = json_decode((string) $_placeholders, true);
|
||||
if (ArrayHelper::check($_placeholders))
|
||||
{
|
||||
foreach ($_placeholders as $row)
|
||||
|
@ -158,7 +158,7 @@ class Config extends BaseConfig
|
||||
protected function getComponentcodenamelength(): int
|
||||
{
|
||||
// get component name length
|
||||
return strlen($this->component_code_name);
|
||||
return strlen((string) $this->component_code_name);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,406 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Content;
|
||||
|
||||
|
||||
/**
|
||||
* Compiler Counter
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Counter
|
||||
{
|
||||
/**
|
||||
* The folder counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public int $folder = 0;
|
||||
|
||||
/**
|
||||
* The file counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public int $file = 0;
|
||||
|
||||
/**
|
||||
* The page counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public int $page = 0;
|
||||
|
||||
/**
|
||||
* The line counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public int $line = 0;
|
||||
|
||||
/**
|
||||
* The field counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public int $field = 0;
|
||||
|
||||
/**
|
||||
* The seconds counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $seconds = 0;
|
||||
|
||||
/**
|
||||
* The actual seconds counter
|
||||
*
|
||||
* @var float
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected float $actualSeconds = 0;
|
||||
|
||||
/**
|
||||
* The folder seconds counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $folderSeconds = 0;
|
||||
|
||||
/**
|
||||
* The file seconds counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $fileSeconds = 0;
|
||||
|
||||
/**
|
||||
* The line seconds counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $lineSeconds = 0;
|
||||
|
||||
/**
|
||||
* The seconds debugging counter
|
||||
*
|
||||
* @var float
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected float $secondsDebugging = 0;
|
||||
|
||||
/**
|
||||
* The seconds planning counter
|
||||
*
|
||||
* @var float
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected float $secondsPlanning = 0;
|
||||
|
||||
/**
|
||||
* The seconds mapping counter
|
||||
*
|
||||
* @var float
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected float $secondsMapping = 0;
|
||||
|
||||
/**
|
||||
* The seconds office counter
|
||||
*
|
||||
* @var float
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected float $secondsOffice = 0;
|
||||
|
||||
/**
|
||||
* The total hours counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $totalHours = 0;
|
||||
|
||||
/**
|
||||
* The debugging hours counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $debuggingHours = 0;
|
||||
|
||||
/**
|
||||
* The planning hours counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $planningHours = 0;
|
||||
|
||||
/**
|
||||
* The mapping hours counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $mappingHours = 0;
|
||||
|
||||
/**
|
||||
* The office hours counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $officeHours = 0;
|
||||
|
||||
/**
|
||||
* The actual Total Hours counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $actualTotalHours = 0;
|
||||
|
||||
/**
|
||||
* The actual hours spent counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $actualHoursSpent = 0;
|
||||
|
||||
/**
|
||||
* The actual days spent counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $actualDaysSpent = 0;
|
||||
|
||||
/**
|
||||
* The total days counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $totalDays = 0;
|
||||
|
||||
/**
|
||||
* The actual Total Days counter
|
||||
*
|
||||
* @var int
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected int $actualTotalDays = 0;
|
||||
|
||||
/**
|
||||
* The project week time counter
|
||||
*
|
||||
* @var float
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected float $projectWeekTime = 0;
|
||||
|
||||
/**
|
||||
* The project month time counter
|
||||
*
|
||||
* @var float
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected float $projectMonthTime = 0;
|
||||
|
||||
/**
|
||||
* The compiler start timer
|
||||
*
|
||||
* @var float
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected float $start = 0;
|
||||
|
||||
/**
|
||||
* The compiler end timer
|
||||
*
|
||||
* @var float
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected float $end = 0;
|
||||
|
||||
/**
|
||||
* The compiler timer
|
||||
*
|
||||
* @var float
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected float $timer = 0;
|
||||
|
||||
/**
|
||||
* Compiler Content
|
||||
*
|
||||
* @var Content
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Content $content;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Content|null $content The compiler content object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Content $content = null)
|
||||
{
|
||||
$this->content = $content ?: Compiler::_('Content');
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the timer
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function start()
|
||||
{
|
||||
$this->start = microtime(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* End the timer
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function end()
|
||||
{
|
||||
$this->end = microtime(true);
|
||||
|
||||
// calculate the lenght
|
||||
$this->timer = $this->end - $this->start;
|
||||
|
||||
// compiler time
|
||||
$this->content->set('COMPILER_TIMER_START', $this->start);
|
||||
$this->content->set('COMPILER_TIMER_END', $this->end);
|
||||
$this->content->set('COMPILER_TIMER', $this->timer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set all the time values
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set()
|
||||
{
|
||||
// calculate all the values
|
||||
$this->calculate();
|
||||
|
||||
// set some defaults
|
||||
$this->content->set('LINE_COUNT', $this->line);
|
||||
$this->content->set('FIELD_COUNT', $this->field);
|
||||
$this->content->set('FILE_COUNT', $this->file);
|
||||
$this->content->set('FOLDER_COUNT', $this->folder);
|
||||
$this->content->set('PAGE_COUNT', $this->page);
|
||||
$this->content->set('folders', $this->folderSeconds);
|
||||
$this->content->set('foldersSeconds', $this->folderSeconds);
|
||||
$this->content->set('files', $this->fileSeconds);
|
||||
$this->content->set('filesSeconds', $this->fileSeconds);
|
||||
$this->content->set('lines', $this->lineSeconds);
|
||||
$this->content->set('linesSeconds', $this->lineSeconds);
|
||||
$this->content->set('seconds', $this->actualSeconds);
|
||||
$this->content->set('actualSeconds', $this->actualSeconds);
|
||||
$this->content->set('totalHours', $this->totalHours);
|
||||
$this->content->set('totalDays', $this->totalDays);
|
||||
$this->content->set('debugging', $this->secondsDebugging);
|
||||
$this->content->set('secondsDebugging', $this->secondsDebugging);
|
||||
$this->content->set('planning', $this->secondsPlanning);
|
||||
$this->content->set('secondsPlanning', $this->secondsPlanning);
|
||||
$this->content->set('mapping', $this->secondsMapping);
|
||||
$this->content->set('secondsMapping', $this->secondsMapping);
|
||||
$this->content->set('office', $this->secondsOffice);
|
||||
$this->content->set('secondsOffice', $this->secondsOffice);
|
||||
$this->content->set('actualTotalHours', $this->actualTotalHours);
|
||||
$this->content->set('actualTotalDays', $this->actualTotalDays);
|
||||
$this->content->set('debuggingHours', $this->debuggingHours);
|
||||
$this->content->set('planningHours', $this->planningHours);
|
||||
$this->content->set('mappingHours', $this->mappingHours);
|
||||
$this->content->set('officeHours', $this->officeHours);
|
||||
$this->content->set('actualHoursSpent', $this->actualHoursSpent);
|
||||
$this->content->set('actualDaysSpent', $this->actualDaysSpent);
|
||||
$this->content->set('projectWeekTime', $this->projectWeekTime);
|
||||
$this->content->set('projectMonthTime', $this->projectMonthTime);
|
||||
|
||||
// compiler time
|
||||
$this->content->set('COMPILER_TIMER_START', $this->start);
|
||||
$this->content->set('COMPILER_TIMER_END', $this->end);
|
||||
$this->content->set('COMPILER_TIMER', $this->timer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate all the time values
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected function calculate()
|
||||
{
|
||||
// what is the size in terms of an A4 book
|
||||
$this->page = round($this->line / 56);
|
||||
|
||||
// setup the unrealistic numbers
|
||||
$this->folderSeconds = $this->folder * 5;
|
||||
$this->fileSeconds = $this->file * 5;
|
||||
$this->lineSeconds = $this->line * 10;
|
||||
$this->seconds = $this->folderSeconds + $this->fileSeconds
|
||||
+ $this->lineSeconds;
|
||||
$this->totalHours = round($this->seconds / 3600);
|
||||
$this->totalDays = round($this->totalHours / 8);
|
||||
|
||||
// setup the more realistic numbers
|
||||
$this->secondsDebugging = $this->seconds / 4;
|
||||
$this->secondsPlanning = $this->seconds / 7;
|
||||
$this->secondsMapping = $this->seconds / 10;
|
||||
$this->secondsOffice = $this->seconds / 6;
|
||||
$this->actualSeconds = $this->folderSeconds + $this->fileSeconds
|
||||
+ $this->lineSeconds + $this->secondsDebugging
|
||||
+ $this->secondsPlanning + $this->secondsMapping
|
||||
+ $this->secondsOffice;
|
||||
$this->actualTotalHours = round($this->actualSeconds / 3600);
|
||||
$this->actualTotalDays = round($this->actualTotalHours / 8);
|
||||
$this->debuggingHours = round($this->secondsDebugging / 3600);
|
||||
$this->planningHours = round($this->secondsPlanning / 3600);
|
||||
$this->mappingHours = round($this->secondsMapping / 3600);
|
||||
$this->officeHours = round($this->secondsOffice / 3600);
|
||||
|
||||
// the actual time spent
|
||||
$this->actualHoursSpent = $this->actualTotalHours - $this->totalHours;
|
||||
$this->actualDaysSpent = $this->actualTotalDays - $this->totalDays;
|
||||
|
||||
// calculate the projects actual time frame of completion
|
||||
$this->projectWeekTime = round($this->actualTotalDays / 5, 1);
|
||||
$this->projectMonthTime = round($this->actualTotalDays / 24, 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -213,9 +213,9 @@ class Customcode implements CustomcodeInterface
|
||||
$id = (int) $key;
|
||||
}
|
||||
elseif (StringHelper::check($key)
|
||||
&& strpos($key, '+') === false)
|
||||
&& strpos((string) $key, '+') === false)
|
||||
{
|
||||
$getFuncName = trim($key);
|
||||
$getFuncName = trim((string) $key);
|
||||
if (!isset($this->functionNameMemory[$getFuncName]))
|
||||
{
|
||||
if (!$found_local = GetHelper::var(
|
||||
@ -232,10 +232,10 @@ class Customcode implements CustomcodeInterface
|
||||
}
|
||||
elseif (StringHelper::check($key)
|
||||
&& strpos(
|
||||
$key, '+'
|
||||
(string) $key, '+'
|
||||
) !== false)
|
||||
{
|
||||
$array = explode('+', $key);
|
||||
$array = explode('+', (string) $key);
|
||||
// set ID
|
||||
if (is_numeric($array[0]))
|
||||
{
|
||||
@ -278,13 +278,11 @@ class Customcode implements CustomcodeInterface
|
||||
// update the function values with the custom code key placeholders (this allow the use of [] + and , in the values)
|
||||
$this->data[$id]['args'][$key]
|
||||
= array_map(
|
||||
function ($_key) {
|
||||
return $this->placeholder->update(
|
||||
fn($_key) => $this->placeholder->update(
|
||||
$_key,
|
||||
$this->keys
|
||||
);
|
||||
}, (array) explode(',', $array[1])
|
||||
);
|
||||
), (array) explode(',', $array[1])
|
||||
);
|
||||
}
|
||||
elseif (StringHelper::check(
|
||||
$array[1]
|
||||
@ -428,7 +426,7 @@ class Customcode implements CustomcodeInterface
|
||||
// open the code
|
||||
foreach ($bucket as $nr => &$customCode)
|
||||
{
|
||||
$customCode['code'] = base64_decode($customCode['code']);
|
||||
$customCode['code'] = base64_decode((string) $customCode['code']);
|
||||
// always insure that the external code is loaded
|
||||
$customCode['code'] = $this->external->set(
|
||||
$customCode['code']
|
||||
@ -453,14 +451,14 @@ class Customcode implements CustomcodeInterface
|
||||
if (isset($customCode['hashtarget']))
|
||||
{
|
||||
$customCode['hashtarget'] = explode(
|
||||
"__", $customCode['hashtarget']
|
||||
"__", (string) $customCode['hashtarget']
|
||||
);
|
||||
// is this a replace code, set end has array
|
||||
if ($customCode['type'] == 1
|
||||
&& strpos($customCode['hashendtarget'], '__') !== false)
|
||||
&& strpos((string) $customCode['hashendtarget'], '__') !== false)
|
||||
{
|
||||
$customCode['hashendtarget'] = explode(
|
||||
"__", $customCode['hashendtarget']
|
||||
"__", (string) $customCode['hashendtarget']
|
||||
);
|
||||
|
||||
// NOW see if this is an end of page target (TODO not sure if the string is always d41d8cd98f00b204e9800998ecf8427e)
|
||||
@ -581,9 +579,9 @@ class Customcode implements CustomcodeInterface
|
||||
}
|
||||
// check what type of place holders we should load here
|
||||
$placeholderType = (int) $item['comment_type'] . '2';
|
||||
if (stripos($item['code'], Placefix::b() . 'view') !== false
|
||||
|| stripos($item['code'], Placefix::b() . 'sview') !== false
|
||||
|| stripos($item['code'], Placefix::b() . 'arg') !== false)
|
||||
if (stripos((string) $item['code'], Placefix::b() . 'view') !== false
|
||||
|| stripos((string) $item['code'], Placefix::b() . 'sview') !== false
|
||||
|| stripos((string) $item['code'], Placefix::b() . 'arg') !== false)
|
||||
{
|
||||
// if view is being set dynamicly then we can't update this code via IDE (TODO)
|
||||
$placeholderType = 3;
|
||||
|
@ -263,7 +263,7 @@ class Dispenser implements DispenserInterface
|
||||
$script .= $prefix . str_replace(
|
||||
array_keys($this->placeholder->active),
|
||||
array_values($this->placeholder->active),
|
||||
$this->hub[$first][$second]
|
||||
(string) $this->hub[$first][$second]
|
||||
) . $suffix;
|
||||
// clear some memory
|
||||
if ($unset)
|
||||
|
@ -135,18 +135,18 @@ class External implements ExternalInterface
|
||||
// example: >{3|4
|
||||
// will cut 3 rows at top and 4 rows at bottom
|
||||
// if the external code has 8 or more lines
|
||||
if (($pos = strpos($target, '>{')) !== false)
|
||||
if (($pos = strpos((string) $target, '>{')) !== false)
|
||||
{
|
||||
// the length
|
||||
$target_len = strlen($target);
|
||||
$target_len = strlen((string) $target);
|
||||
// where to cut
|
||||
$cutting = $target_len - $pos;
|
||||
// get the sequence
|
||||
$sequence = substr($target, "-$cutting");
|
||||
$sequence = substr((string) $target, "-$cutting");
|
||||
// remove from the URL
|
||||
$target_url = str_replace($sequence, '', $target);
|
||||
$target_url = str_replace($sequence, '', (string) $target);
|
||||
// set the cut key for this target if not set
|
||||
$this->cutter[trim($target)] = str_replace('>{', '', $sequence);
|
||||
$this->cutter[trim((string) $target)] = str_replace('>{', '', $sequence);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -327,7 +327,7 @@ class Extractor implements ExtractorInterface
|
||||
|
||||
// make sure we have the path correct (the script file is not in admin path for example)
|
||||
// there may be more... will nead to keep our eye on this... since files could be moved during install
|
||||
$file = str_replace('./', '', $file); # TODO (windows path issues)
|
||||
$file = str_replace('./', '', (string) $file); # TODO (windows path issues)
|
||||
|
||||
if ($file !== 'script.php')
|
||||
{
|
||||
@ -366,10 +366,10 @@ class Extractor implements ExtractorInterface
|
||||
|
||||
// check if the ending placeholder was found
|
||||
if (isset($reading[$targetKey]) && $reading[$targetKey]
|
||||
&& ((trim($lineContent) === $end
|
||||
|| strpos($lineContent, $end) !== false)
|
||||
|| (trim($lineContent) === $endHTML
|
||||
|| strpos($lineContent, $endHTML) !== false)))
|
||||
&& ((trim((string) $lineContent) === $end
|
||||
|| strpos((string) $lineContent, $end) !== false)
|
||||
|| (trim((string) $lineContent) === $endHTML
|
||||
|| strpos((string) $lineContent, $endHTML) !== false)))
|
||||
{
|
||||
// trim the placeholder and if there is still data then load it
|
||||
if (isset($endReplace)
|
||||
@ -411,7 +411,7 @@ class Extractor implements ExtractorInterface
|
||||
|
||||
$this->new[$pointer[$targetKey]][]
|
||||
= $this->db->quote(
|
||||
base64_encode($c0de)
|
||||
base64_encode((string) $c0de)
|
||||
); // 'code'
|
||||
|
||||
if ($_type == 2)
|
||||
@ -438,7 +438,7 @@ class Extractor implements ExtractorInterface
|
||||
|
||||
$this->existing[$pointer[$targetKey]]['fields'][]
|
||||
= $this->db->quoteName('code') . ' = '
|
||||
. $this->db->quote(base64_encode($c0de));
|
||||
. $this->db->quote(base64_encode((string) $c0de));
|
||||
|
||||
if ($_type == 2)
|
||||
{
|
||||
@ -490,8 +490,8 @@ class Extractor implements ExtractorInterface
|
||||
|
||||
// see if the custom code line starts now with PHP/JS comment type
|
||||
if ((!isset($reading[$targetKey]) || !$reading[$targetKey])
|
||||
&& (($i === 1 && trim($lineContent) === $start)
|
||||
|| strpos($lineContent, $start) !== false))
|
||||
&& (($i === 1 && trim((string) $lineContent) === $start)
|
||||
|| strpos((string) $lineContent, $start) !== false))
|
||||
{
|
||||
$commentType = 1; // PHP/JS type
|
||||
$startReplace = $start;
|
||||
@ -500,8 +500,8 @@ class Extractor implements ExtractorInterface
|
||||
// see if the custom code line starts now with HTML comment type
|
||||
elseif ((!isset($reading[$targetKey])
|
||||
|| !$reading[$targetKey])
|
||||
&& (($i === 1 && trim($lineContent) === $startHTML)
|
||||
|| strpos($lineContent, $startHTML) !== false))
|
||||
&& (($i === 1 && trim((string) $lineContent) === $startHTML)
|
||||
|| strpos((string) $lineContent, $startHTML) !== false))
|
||||
{
|
||||
$commentType = 2; // HTML type
|
||||
$startReplace = $startHTML;
|
||||
@ -512,7 +512,7 @@ class Extractor implements ExtractorInterface
|
||||
if ($commentType > 0)
|
||||
{
|
||||
// if we have all on one line we have a problem (don't load it TODO)
|
||||
if (strpos($lineContent, $endReplace) !== false)
|
||||
if (strpos((string) $lineContent, (string) $endReplace) !== false)
|
||||
{
|
||||
// reset found comment type
|
||||
$commentType = 0;
|
||||
|
@ -158,7 +158,7 @@ class Paths
|
||||
if (($path = $this->getModulePath($module_id)) !== false)
|
||||
{
|
||||
// set the path
|
||||
$local_paths['module_' . str_replace('/', '_', $path)] = $path;
|
||||
$local_paths['module_' . str_replace('/', '_', (string) $path)] = $path;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -172,7 +172,7 @@ class Paths
|
||||
if (($path = $this->getPluginPath($plugin_id)) !== false)
|
||||
{
|
||||
// set the path
|
||||
$local_paths['plugin_' . str_replace('/', '_', $path)] = JPATH_ROOT . '/plugins/' . $path;
|
||||
$local_paths['plugin_' . str_replace('/', '_', (string) $path)] = JPATH_ROOT . '/plugins/' . $path;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -207,7 +207,8 @@ class Paths
|
||||
{
|
||||
$addjoomla_modules = (JsonHelper::check(
|
||||
$addjoomla_modules
|
||||
)) ? json_decode($addjoomla_modules, true) : null;
|
||||
)) ? json_decode((string) $addjoomla_modules, true) : null;
|
||||
|
||||
if (ArrayHelper::check($addjoomla_modules))
|
||||
{
|
||||
$joomla_modules = array_filter(
|
||||
@ -226,9 +227,7 @@ class Paths
|
||||
if (ArrayHelper::check($joomla_modules))
|
||||
{
|
||||
return array_map(
|
||||
function ($array) {
|
||||
return (int) $array['module'];
|
||||
}, $joomla_modules
|
||||
fn($array) => (int) $array['module'], $joomla_modules
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -283,7 +282,7 @@ class Paths
|
||||
$module->name
|
||||
);
|
||||
// set module folder name
|
||||
$module->folder_name = 'mod_' . strtolower($module->code_name);
|
||||
$module->folder_name = 'mod_' . strtolower((string) $module->code_name);
|
||||
|
||||
// set the lang key
|
||||
$this->extractor->langKeys[strtoupper($module->folder_name)] =
|
||||
@ -322,7 +321,8 @@ class Paths
|
||||
{
|
||||
$addjoomla_plugins = (JsonHelper::check(
|
||||
$addjoomla_plugins
|
||||
)) ? json_decode($addjoomla_plugins, true) : null;
|
||||
)) ? json_decode((string) $addjoomla_plugins, true) : null;
|
||||
|
||||
if (ArrayHelper::check($addjoomla_plugins))
|
||||
{
|
||||
$joomla_plugins = array_filter(
|
||||
@ -341,9 +341,7 @@ class Paths
|
||||
if (ArrayHelper::check($joomla_plugins))
|
||||
{
|
||||
return array_map(
|
||||
function ($array) {
|
||||
return (int) $array['plugin'];
|
||||
}, $joomla_plugins
|
||||
fn($array) => (int) $array['plugin'], $joomla_plugins
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -408,9 +406,9 @@ class Paths
|
||||
);
|
||||
|
||||
// set plugin folder name
|
||||
$plugin->group = strtolower($plugin->group);
|
||||
$plugin->group = strtolower((string) $plugin->group);
|
||||
// set plugin file name
|
||||
$plugin->file_name = strtolower($plugin->code_name);
|
||||
$plugin->file_name = strtolower((string) $plugin->code_name);
|
||||
|
||||
// set the lang key
|
||||
$this->extractor->langKeys['PLG_' . strtoupper(
|
||||
|
@ -136,7 +136,7 @@ class Gui implements GuiInterface
|
||||
$config['prefix'] = PHP_EOL;
|
||||
}
|
||||
// add placeholder based on type of code
|
||||
switch (strtolower($config['type']))
|
||||
switch (strtolower((string) $config['type']))
|
||||
{
|
||||
// adding with html commenting
|
||||
case 'html':
|
||||
@ -220,7 +220,7 @@ class Gui implements GuiInterface
|
||||
$object = new \stdClass();
|
||||
$object->id = $id;
|
||||
$object->{$field} = base64_encode(
|
||||
$code
|
||||
(string) $code
|
||||
); // (TODO) this may not always work...
|
||||
// update the value in GUI
|
||||
$this->db->updateObject(
|
||||
|
@ -0,0 +1,349 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Customview;
|
||||
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Libraries;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Templatelayout\Data as Templatelayout;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Data as Dynamicget;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Loader;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Javascriptcustomview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Csscustomview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Phpcustomview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Ajaxcustomview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Custombuttons;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Unique;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Admin Custom View Data Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Data
|
||||
{
|
||||
/**
|
||||
* Admin views
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $data;
|
||||
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* Compiler Event
|
||||
*
|
||||
* @var EventInterface
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected EventInterface $event;
|
||||
|
||||
/**
|
||||
* Compiler Customcode
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Compiler Customcode in Gui
|
||||
*
|
||||
* @var Gui
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Gui $gui;
|
||||
|
||||
/**
|
||||
* Compiler Libraries Model
|
||||
*
|
||||
* @var Libraries
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Libraries $libraries;
|
||||
|
||||
/**
|
||||
* Compiler Template Layout
|
||||
*
|
||||
* @var Templatelayout
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Templatelayout $templateLayout;
|
||||
|
||||
/**
|
||||
* Compiler Dynamic Get Data
|
||||
*
|
||||
* @var Dynamicget
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Dynamicget $dynamic;
|
||||
|
||||
/**
|
||||
* Compiler Auto Loader
|
||||
*
|
||||
* @var Loader
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Loader $loader;
|
||||
|
||||
/**
|
||||
* The modelling javascript
|
||||
*
|
||||
* @var Javascriptcustomview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Javascriptcustomview $javascript;
|
||||
|
||||
/**
|
||||
* The modelling css
|
||||
*
|
||||
* @var Csscustomview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Csscustomview $css;
|
||||
|
||||
/**
|
||||
* The modelling php admin view
|
||||
*
|
||||
* @var Phpcustomview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Phpcustomview $php;
|
||||
|
||||
/**
|
||||
* The modelling custom buttons
|
||||
*
|
||||
* @var Custombuttons
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Custombuttons $custombuttons;
|
||||
|
||||
/**
|
||||
* The modelling ajax
|
||||
*
|
||||
* @var Ajaxcustomview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Ajaxcustomview $ajax;
|
||||
|
||||
/**
|
||||
* Database object to query local DB
|
||||
*
|
||||
* @var \JDatabaseDriver
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected \JDatabaseDriver $db;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param EventInterface|null $event The compiler event api object.
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
* @param Gui|null $gui The compiler customcode gui.
|
||||
* @param Libraries|null $libraries The compiler libraries model object.
|
||||
* @param Templatelayout|null $templateLayout The compiler template layout object.
|
||||
* @param Dynamicget|null $dynamic The compiler dynamic get data object.
|
||||
* @param Loader|null $loader The compiler loader object.
|
||||
* @param Javascriptcustomview|null $javascript The modelling javascript object.
|
||||
* @param Csscustomview|null $css The modelling css object.
|
||||
* @param Phpcustomview|null $php The modelling php admin view object.
|
||||
* @param Ajaxcustomview|null $ajax The modelling ajax object.
|
||||
* @param Custombuttons|null $custombuttons The modelling custombuttons object.
|
||||
* @param \JDatabaseDriver|null $db The database object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?EventInterface $event = null,
|
||||
?Customcode $customcode = null, ?Gui $gui = null, ?Libraries $libraries = null,
|
||||
?Templatelayout $templateLayout = null, ?Dynamicget $dynamic = null, ?Loader $loader = null,
|
||||
?Javascriptcustomview $javascript = null, ?Csscustomview $css = null, ?Phpcustomview $php = null,
|
||||
?Ajaxcustomview $ajax = null, ?Custombuttons $custombuttons = null, ?\JDatabaseDriver $db = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->event = $event ?: Compiler::_('Event');
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
|
||||
$this->libraries = $libraries ?: Compiler::_('Model.Libraries');
|
||||
$this->templateLayout = $templateLayout ?: Compiler::_('Templatelayout.Data');
|
||||
$this->dynamic = $dynamic ?: Compiler::_('Dynamicget.Data');
|
||||
$this->loader = $loader ?: Compiler::_('Model.Loader');
|
||||
$this->javascript = $javascript ?: Compiler::_('Model.Javascriptcustomview');
|
||||
$this->css = $css ?: Compiler::_('Model.Csscustomview');
|
||||
$this->php = $php ?: Compiler::_('Model.Phpcustomview');
|
||||
$this->ajax = $ajax ?: Compiler::_('Model.Ajaxcustomview');
|
||||
$this->custombuttons = $custombuttons ?: Compiler::_('Model.Custombuttons');
|
||||
$this->db = $db ?: Factory::getDbo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all Custom View Data
|
||||
*
|
||||
* @param int $id The view ID
|
||||
* @param string $table The view table
|
||||
*
|
||||
* @return object|null The view data
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function get(int $id, string $table = 'site_view'): ?object
|
||||
{
|
||||
if (!isset($this->data[$id . $table]))
|
||||
{
|
||||
// Create a new query object.
|
||||
$query = $this->db->getQuery(true);
|
||||
|
||||
$query->select('a.*');
|
||||
$query->from('#__componentbuilder_' . $table . ' AS a');
|
||||
$query->where($this->db->quoteName('a.id') . ' = ' . (int) $id);
|
||||
|
||||
// for plugin event TODO change event api signatures
|
||||
$component_context = $this->config->component_context;
|
||||
|
||||
// Trigger Event: jcb_ce_onBeforeQueryCustomViewData
|
||||
$this->event->trigger(
|
||||
'jcb_ce_onBeforeQueryCustomViewData',
|
||||
array(&$component_context, &$id, &$table, &$query, &$this->db)
|
||||
);
|
||||
|
||||
// Reset the query using our newly populated query object.
|
||||
$this->db->setQuery($query);
|
||||
|
||||
// Load the results as a list of stdClass objects (see later for more options on retrieving data).
|
||||
$item = $this->db->loadObject();
|
||||
|
||||
// fix alias to use in code
|
||||
$item->code = Unique::code(
|
||||
StringHelper::safe($item->codename), $this->config->build_target
|
||||
);
|
||||
$item->Code = StringHelper::safe($item->code, 'F');
|
||||
$item->CODE = StringHelper::safe($item->code, 'U');
|
||||
|
||||
// Trigger Event: jcb_ce_onBeforeModelCustomViewData
|
||||
$this->event->trigger(
|
||||
'jcb_ce_onBeforeModelCustomViewData',
|
||||
array(&$component_context, &$item, &$id, &$table)
|
||||
);
|
||||
|
||||
// set GUI mapper
|
||||
$guiMapper = [
|
||||
'table' => $table,
|
||||
'id' => (int) $id,
|
||||
'field' => 'default',
|
||||
'type' => 'html'
|
||||
];
|
||||
|
||||
// set the default data
|
||||
$item->default = $this->gui->set(
|
||||
$this->customcode->update(base64_decode((string) $item->default)),
|
||||
$guiMapper
|
||||
);
|
||||
|
||||
// load context if not set
|
||||
if (!isset($item->context)
|
||||
|| !StringHelper::check(
|
||||
$item->context
|
||||
))
|
||||
{
|
||||
$item->context = $item->code;
|
||||
}
|
||||
else
|
||||
{
|
||||
// always make sure context is a safe string
|
||||
$item->context = StringHelper::safe($item->context);
|
||||
}
|
||||
|
||||
// set the libraries
|
||||
$this->libraries->set($item->code, $item);
|
||||
|
||||
// setup template and layout data
|
||||
$this->templateLayout->set($item->default, $item->code);
|
||||
|
||||
// set uikit version 2
|
||||
$this->loader->uikit($item->code, $item->default);
|
||||
|
||||
// auto loaders
|
||||
$this->loader->set($item->code, $item->default);
|
||||
|
||||
// set the main get data
|
||||
$main_get = $this->dynamic->get(
|
||||
array($item->main_get), $item->code, $item->context
|
||||
);
|
||||
|
||||
if (ArrayHelper::check($main_get))
|
||||
{
|
||||
$item->main_get = $main_get[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
$item->main_get = null;
|
||||
}
|
||||
|
||||
// set the custom_get data
|
||||
$item->custom_get = (isset($item->custom_get)
|
||||
&& JsonHelper::check($item->custom_get))
|
||||
? json_decode((string) $item->custom_get, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->custom_get))
|
||||
{
|
||||
$item->custom_get = $this->dynamic->get(
|
||||
$item->custom_get, $item->code, $item->context
|
||||
);
|
||||
}
|
||||
|
||||
// set php scripts
|
||||
$this->php->set($item, $table);
|
||||
|
||||
// set javascript scripts
|
||||
$this->javascript->set($item, $table);
|
||||
|
||||
// set css scripts
|
||||
$this->css->set($item);
|
||||
|
||||
// set Ajax for this view
|
||||
$this->ajax->set($item, $table);
|
||||
|
||||
// set the custom buttons
|
||||
$this->custombuttons->set($item, $table);
|
||||
|
||||
// Trigger Event: jcb_ce_onAfterModelCustomViewData
|
||||
$this->event->trigger(
|
||||
'jcb_ce_onAfterModelCustomViewData',
|
||||
array(&$component_context, &$item)
|
||||
);
|
||||
|
||||
// set the found data
|
||||
$this->data[$id . $table] = $item;
|
||||
}
|
||||
|
||||
// return the found data
|
||||
return $this->data[$id . $table];
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
@ -0,0 +1,324 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget;
|
||||
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Dynamicget;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Dynamic Get Data Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Data
|
||||
{
|
||||
/**
|
||||
* The gui mapper array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $guiMapper = [
|
||||
'table' => 'dynamic_get',
|
||||
'id' => null,
|
||||
'field' => null,
|
||||
'type' => 'php'
|
||||
];
|
||||
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Compiler Event
|
||||
*
|
||||
* @var EventInterface
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected EventInterface $event;
|
||||
|
||||
/**
|
||||
* Compiler Customcode
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Compiler Customcode Dispenser
|
||||
*
|
||||
* @var Dispenser
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Dispenser $dispenser;
|
||||
|
||||
/**
|
||||
* Compiler Customcode in Gui
|
||||
*
|
||||
* @var Gui
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Gui $gui;
|
||||
|
||||
/**
|
||||
* Compiler Dynamicget Model
|
||||
*
|
||||
* @var Dynamicget
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Dynamicget $dynamic;
|
||||
|
||||
/**
|
||||
* Database object to query local DB
|
||||
*
|
||||
* @var \JDatabaseDriver
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected \JDatabaseDriver $db;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
* @param EventInterface|null $event The compiler event api object.
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
* @param Dispenser|null $dispenser The compiler customcode dispenser object.
|
||||
* @param Gui|null $gui The compiler customcode gui.
|
||||
* @param Dynamicget|null $dynamic The compiler dynamicget modeller object.
|
||||
* @param \JDatabaseDriver|null $db The database object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null,
|
||||
?EventInterface $event = null, ?Customcode $customcode = null,
|
||||
?Dispenser $dispenser = null, ?Gui $gui = null,
|
||||
?Dynamicget $dynamic = null, ?\JDatabaseDriver $db = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->event = $event ?: Compiler::_('Event');
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
$this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
|
||||
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
|
||||
$this->dynamic = $dynamic ?: Compiler::_('Model.Dynamicget');
|
||||
$this->db = $db ?: Factory::getDbo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Dynamic Get Data
|
||||
*
|
||||
* @param array $ids The ids of the dynamic get
|
||||
* @param string $view_code The view code name
|
||||
* @param string $context The context for events
|
||||
*
|
||||
* @return array|null array of object/s on success
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function get(array $ids, string $view_code, string $context): ?array
|
||||
{
|
||||
if ($ids === [])
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
$ids = implode(',', $ids);
|
||||
|
||||
// for plugin event TODO change event api signatures
|
||||
$component_context = $this->config->component_context;
|
||||
|
||||
// Create a new query object.
|
||||
$query = $this->db->getQuery(true);
|
||||
$query->select('a.*');
|
||||
$query->from('#__componentbuilder_dynamic_get AS a');
|
||||
$query->where('a.id IN (' . $ids . ')');
|
||||
$this->db->setQuery($query);
|
||||
$this->db->execute();
|
||||
|
||||
if ($this->db->getNumRows())
|
||||
{
|
||||
$results = $this->db->loadObjectList();
|
||||
|
||||
foreach ($results as $_nr => &$result)
|
||||
{
|
||||
// Trigger Event: jcb_ce_onBeforeModelDynamicGetData
|
||||
$this->event->trigger(
|
||||
'jcb_ce_onBeforeModelDynamicGetData',
|
||||
array(&$component_context, &$result, &$result->id, &$view_code, &$context)
|
||||
);
|
||||
|
||||
// set GUI mapper id
|
||||
$this->guiMapper['id'] = (int) $result->id;
|
||||
|
||||
// add calculations if set
|
||||
if ($result->addcalculation == 1
|
||||
&& StringHelper::check(
|
||||
$result->php_calculation
|
||||
))
|
||||
{
|
||||
// set GUI mapper field
|
||||
$guiMapper['field'] = 'php_calculation';
|
||||
$result->php_calculation = $this->gui->set(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $result->php_calculation)
|
||||
),
|
||||
$this->guiMapper
|
||||
);
|
||||
}
|
||||
|
||||
// setup the router parse
|
||||
if (isset($result->add_php_router_parse)
|
||||
&& $result->add_php_router_parse == 1
|
||||
&& isset($result->php_router_parse)
|
||||
&& StringHelper::check(
|
||||
$result->php_router_parse
|
||||
))
|
||||
{
|
||||
// set GUI mapper field
|
||||
$this->guiMapper['field'] = 'php_router_parse';
|
||||
$result->php_router_parse = $this->gui->set(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $result->php_router_parse)
|
||||
),
|
||||
$this->guiMapper
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$result->add_php_router_parse = 0;
|
||||
}
|
||||
|
||||
// The array of the php scripts that should be added to the script builder
|
||||
$phpSripts = [
|
||||
'php_before_getitem',
|
||||
'php_after_getitem',
|
||||
'php_before_getitems',
|
||||
'php_after_getitems',
|
||||
'php_getlistquery'
|
||||
];
|
||||
|
||||
// load the php scripts
|
||||
foreach ($phpSripts as $script)
|
||||
{
|
||||
// add php script to the script builder
|
||||
if (isset($result->{'add_' . $script})
|
||||
&& $result->{'add_' . $script} == 1
|
||||
&& isset($result->{$script})
|
||||
&& StringHelper::check(
|
||||
$result->{$script}
|
||||
))
|
||||
{
|
||||
// move all main gets out to the custom script builder
|
||||
if ($result->gettype <= 2)
|
||||
{
|
||||
// set GUI mapper field
|
||||
$this->guiMapper['field'] = $script;
|
||||
$this->guiMapper['prefix'] = PHP_EOL . PHP_EOL;
|
||||
$this->dispenser->set(
|
||||
$result->{$script},
|
||||
$this->config->build_target . '_' . $script,
|
||||
$view_code,
|
||||
null,
|
||||
$this->guiMapper,
|
||||
true,
|
||||
true,
|
||||
true
|
||||
);
|
||||
unset($this->guiMapper['prefix']);
|
||||
// remove from local item
|
||||
unset($result->{$script});
|
||||
unset($result->{'add_' . $script});
|
||||
}
|
||||
else
|
||||
{
|
||||
// set GUI mapper field
|
||||
$this->guiMapper['field'] = $script;
|
||||
$this->guiMapper['prefix'] = PHP_EOL;
|
||||
// only for custom gets
|
||||
$result->{$script} = $this->gui->set(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $result->{$script})
|
||||
),
|
||||
$this->guiMapper
|
||||
);
|
||||
unset($this->guiMapper['prefix']);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// remove from local item
|
||||
unset($result->{$script});
|
||||
unset($result->{'add_' . $script});
|
||||
}
|
||||
}
|
||||
|
||||
// set the getmethod code name
|
||||
$result->key = StringHelper::safe(
|
||||
$view_code . ' ' . $result->name . ' ' . $result->id
|
||||
);
|
||||
|
||||
// set the dynamic get
|
||||
$this->dynamic->set($result, $view_code, $context);
|
||||
|
||||
// load the events if any is set
|
||||
if ($result->gettype == 1
|
||||
&& JsonHelper::check(
|
||||
$result->plugin_events
|
||||
))
|
||||
{
|
||||
$result->plugin_events = json_decode(
|
||||
(string) $result->plugin_events, true
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$result->plugin_events = '';
|
||||
}
|
||||
|
||||
// Trigger Event: jcb_ce_onAfterModelDynamicGetData
|
||||
$this->event->trigger(
|
||||
'jcb_ce_onAfterModelDynamicGetData',
|
||||
array(&$component_context, &$result, &$result->id, &$view_code, &$context)
|
||||
);
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,281 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget;
|
||||
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\GetHelper;
|
||||
use VDM\Joomla\Utilities\Component\Helper;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
|
||||
|
||||
|
||||
/**
|
||||
* Dynamic Get Selection Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Selection
|
||||
{
|
||||
/**
|
||||
* Admin view table names
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $name;
|
||||
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Database object to query local DB
|
||||
*
|
||||
* @var \JDatabaseDriver
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected \JDatabaseDriver $db;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
* @param \JDatabaseDriver|null $db The database object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null,
|
||||
?\JDatabaseDriver $db = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->db = $db ?: Factory::getDbo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Data Selection of the dynamic get
|
||||
*
|
||||
* @param string $methodKey The method unique key
|
||||
* @param string $viewCode The code name of the view
|
||||
* @param string $string The data string
|
||||
* @param string $asset The asset in question
|
||||
* @param string $as The as string
|
||||
* @param string $type The target type (db||view)
|
||||
* @param int|null $rowType The row type
|
||||
*
|
||||
* @return array|null the select query
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function get(string $methodKey, string $viewCode,
|
||||
string $string, string $asset, string $as, string $type, ?int $rowType = null): ?array
|
||||
{
|
||||
if (StringHelper::check($string))
|
||||
{
|
||||
if ('db' === $type)
|
||||
{
|
||||
$table = '#__' . $asset;
|
||||
$queryName = $asset;
|
||||
$view = '';
|
||||
}
|
||||
elseif ('view' === $type)
|
||||
{
|
||||
$view = $this->name($asset);
|
||||
$table = '#__' . $this->config->component_code_name . '_' . $view;
|
||||
$queryName = $view;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// just get all values from table if * is found
|
||||
if ($string === '*' || strpos($string, '*') !== false)
|
||||
{
|
||||
if ($type == 'view')
|
||||
{
|
||||
// TODO move getViewTableColumns to its own class
|
||||
$_string = Helper::_('getViewTableColumns',
|
||||
[$asset, $as, $rowType]
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO move getDbTableColumns to its own class
|
||||
$_string = Helper::_('getDbTableColumns',
|
||||
[$asset, $as, $rowType]
|
||||
);
|
||||
}
|
||||
|
||||
// get only selected values
|
||||
$lines = explode(PHP_EOL, (string) $_string);
|
||||
|
||||
// make sure to set the string to *
|
||||
$string = '*';
|
||||
}
|
||||
else
|
||||
{
|
||||
// get only selected values
|
||||
$lines = explode(PHP_EOL, $string);
|
||||
}
|
||||
|
||||
// only continue if lines are available
|
||||
if (ArrayHelper::check($lines))
|
||||
{
|
||||
$gets = [];
|
||||
$keys = [];
|
||||
|
||||
// first load all options
|
||||
foreach ($lines as $line)
|
||||
{
|
||||
if (strpos($line, 'AS') !== false)
|
||||
{
|
||||
$lineArray = explode("AS", $line);
|
||||
}
|
||||
elseif (strpos($line, 'as') !== false)
|
||||
{
|
||||
$lineArray = explode("as", $line);
|
||||
}
|
||||
else
|
||||
{
|
||||
$lineArray = array($line, null);
|
||||
}
|
||||
|
||||
// set the get and key
|
||||
$get = trim($lineArray[0]);
|
||||
$key = trim($lineArray[1]);
|
||||
|
||||
// only add the view (we must adapt this)
|
||||
if ($this->registry->exists('builder.get_as_lookup.' . $methodKey . '.' . $get)
|
||||
&& 'a' != $as
|
||||
&& is_numeric($rowType) && 1 == $rowType
|
||||
&& 'view' === $type
|
||||
&& strpos('#' . $key, '#' . $view . '_') === false)
|
||||
{
|
||||
// this is a problem (TODO) since we may want to not add the view name.
|
||||
$key = $view . '_' . trim($key);
|
||||
}
|
||||
|
||||
// continue only if we have get
|
||||
if (StringHelper::check($get))
|
||||
{
|
||||
$gets[] = $this->db->quote($get);
|
||||
if (StringHelper::check($key))
|
||||
{
|
||||
$this->registry->
|
||||
set('builder.get_as_lookup.' . $methodKey . '.' . $get, $key);
|
||||
}
|
||||
else
|
||||
{
|
||||
$key = str_replace(
|
||||
$as . '.', '', $get
|
||||
);
|
||||
|
||||
$this->registry->
|
||||
set('builder.get_as_lookup.' . $methodKey . '.' . $get, $key);
|
||||
}
|
||||
|
||||
// set the keys
|
||||
$keys[] = $this->db->quote(
|
||||
$key
|
||||
);
|
||||
|
||||
// make sure we have the view name
|
||||
if (StringHelper::check($view))
|
||||
{
|
||||
// prep the field name
|
||||
$field = str_replace($as . '.', '', $get);
|
||||
// load to the site fields memory bucket
|
||||
$this->registry->
|
||||
set('builder.site_fields.' . $view . '.' . $field . '.' . $methodKey . '___' . $as,
|
||||
['site' => $viewCode, 'get' => $get, 'as' => $as, 'key' => $key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ArrayHelper::check($gets)
|
||||
&& ArrayHelper::check($keys))
|
||||
{
|
||||
// single joined selection needs the prefix to the values to avoid conflict in the names
|
||||
// so we must still add then AS
|
||||
if ($string == '*' && (is_null($rowType) || 1 != $rowType))
|
||||
{
|
||||
$querySelect = "\$query->select('" . $as . ".*');";
|
||||
}
|
||||
else
|
||||
{
|
||||
$querySelect = '$query->select($db->quoteName('
|
||||
. PHP_EOL . Indent::_(3) . 'array(' . implode(
|
||||
',', $gets
|
||||
) . '),' . PHP_EOL . Indent::_(3) . 'array('
|
||||
. implode(',', $keys) . ')));';
|
||||
}
|
||||
$queryFrom = '$db->quoteName(' . $this->db->quote($table)
|
||||
. ', ' . $this->db->quote($as) . ')';
|
||||
|
||||
// return the select query
|
||||
return [
|
||||
'select' => $querySelect,
|
||||
'from' => $queryFrom,
|
||||
'name' => $queryName,
|
||||
'table' => $table,
|
||||
'type' => $type,
|
||||
'select_gets' => $gets,
|
||||
'select_keys' => $keys
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Admin view table name
|
||||
*
|
||||
* @param int $id The item id to add
|
||||
*
|
||||
* @return string the admin view code name
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected function name(int $id): string
|
||||
{
|
||||
// get name if not set
|
||||
if (!isset($this->name[$id]))
|
||||
{
|
||||
$this->name[$id] = StringHelper::safe(
|
||||
GetHelper::var('admin_view', $id, 'id', 'name_single')
|
||||
);
|
||||
}
|
||||
|
||||
return $this->name[$id] ?? 'error';
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
@ -26,8 +26,14 @@ use VDM\Joomla\Componentbuilder\Compiler\Service\Placeholder;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Service\Customcode;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Service\Power;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Service\Component;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Service\Adminview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Service\Library;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Service\Customview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Service\Templatelayout;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Service\Extension;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Service\Field;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Service\Joomlamodule;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Service\Joomlaplugin;
|
||||
use VDM\Joomla\Componentbuilder\Interfaces\FactoryInterface;
|
||||
|
||||
|
||||
@ -123,8 +129,14 @@ abstract class Factory implements FactoryInterface
|
||||
->registerServiceProvider(new Customcode())
|
||||
->registerServiceProvider(new Power())
|
||||
->registerServiceProvider(new Component())
|
||||
->registerServiceProvider(new Adminview())
|
||||
->registerServiceProvider(new Library())
|
||||
->registerServiceProvider(new Customview())
|
||||
->registerServiceProvider(new Templatelayout())
|
||||
->registerServiceProvider(new Extension())
|
||||
->registerServiceProvider(new Field());
|
||||
->registerServiceProvider(new Field())
|
||||
->registerServiceProvider(new Joomlamodule())
|
||||
->registerServiceProvider(new Joomlaplugin());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -88,9 +88,10 @@ class CoreValidation implements CoreValidationInterface
|
||||
}
|
||||
|
||||
// remove the Rule.php from the name
|
||||
$this->rules = array_map( function ($name): string {
|
||||
return str_replace(array('./','Rule.php'), '', $name);
|
||||
}, $rules);
|
||||
$this->rules = array_map(
|
||||
fn($name): string => str_replace(array('./','Rule.php'), '', (string) $name),
|
||||
$rules
|
||||
);
|
||||
}
|
||||
|
||||
// return rules if found
|
||||
@ -99,9 +100,10 @@ class CoreValidation implements CoreValidationInterface
|
||||
// check if the names should be all lowercase
|
||||
if ($lowercase)
|
||||
{
|
||||
return array_map( function($item): string {
|
||||
return strtolower($item);
|
||||
}, $this->rules);
|
||||
return array_map(
|
||||
fn($item): string => strtolower((string) $item),
|
||||
$this->rules
|
||||
);
|
||||
}
|
||||
return $this->rules;
|
||||
}
|
||||
|
@ -0,0 +1,960 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Joomlamodule;
|
||||
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Filter\OutputFilter;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Language;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Field;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Field\Name as FieldName;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Filesfolders;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Libraries;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Data as Dynamicget;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\String\ClassfunctionHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
use VDM\Joomla\Utilities\GetHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Joomla Module Data Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Data
|
||||
{
|
||||
/**
|
||||
* Compiler Joomla Plugins Data
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $data = [];
|
||||
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* Compiler Customcode
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Compiler Customcode in Gui
|
||||
*
|
||||
* @var Gui
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Gui $gui;
|
||||
|
||||
/**
|
||||
* Compiler Placeholder
|
||||
*
|
||||
* @var Placeholder
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Placeholder $placeholder;
|
||||
|
||||
/**
|
||||
* Compiler Language
|
||||
*
|
||||
* @var Language
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Language $language;
|
||||
|
||||
/**
|
||||
* Compiler Field
|
||||
*
|
||||
* @var Field
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Field $field;
|
||||
|
||||
/**
|
||||
* Compiler field name
|
||||
*
|
||||
* @var FieldName
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected FieldName $fieldName;
|
||||
|
||||
/**
|
||||
* Compiler Files Folders
|
||||
*
|
||||
* @var Filesfolders
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Filesfolders $filesFolders;
|
||||
|
||||
/**
|
||||
* Compiler Libraries Model
|
||||
*
|
||||
* @var Libraries
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Libraries $libraries;
|
||||
|
||||
/**
|
||||
* Compiler Dynamic Get Data
|
||||
*
|
||||
* @var Dynamicget
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Dynamicget $dynamic;
|
||||
|
||||
/**
|
||||
* Database object to query local DB
|
||||
*
|
||||
* @var \JDatabaseDriver
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected \JDatabaseDriver $db;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
* @param Gui|null $gui The compiler customcode gui.
|
||||
* @param Placeholder|null $placeholder The compiler placeholder object.
|
||||
* @param Language|null $language The compiler Language object.
|
||||
* @param Field|null $field The compiler field data object.
|
||||
* @param FieldName|null $fieldName The compiler field name object.
|
||||
* @param Filesfolders|null $filesFolders The compiler files folders object.
|
||||
* @param Libraries|null $libraries The compiler libraries model object.
|
||||
* @param Dynamicget|null $dynamic The compiler dynamic get data object.
|
||||
* @param \JDatabaseDriver|null $db The database object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Customcode $customcode = null,
|
||||
?Gui $gui = null, ?Placeholder $placeholder = null,
|
||||
?Language $language = null, ?Field $field = null, ?FieldName $fieldName = null,
|
||||
?Filesfolders $filesFolders = null, ?Libraries $libraries = null,
|
||||
?Dynamicget $dynamic = null, ?\JDatabaseDriver $db = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
|
||||
$this->placeholder = $placeholder ?: Compiler::_('Placeholder');
|
||||
$this->language = $language ?: Compiler::_('Language');
|
||||
$this->field = $field ?: Compiler::_('Field');
|
||||
$this->fieldName = $fieldName ?: Compiler::_('Field.Name');
|
||||
$this->filesFolders = $filesFolders ?: Compiler::_('Model.Filesfolders');
|
||||
$this->libraries = $libraries ?: Compiler::_('Model.Libraries');
|
||||
$this->dynamic = $dynamic ?: Compiler::_('Dynamicget.Data');
|
||||
$this->db = $db ?: Factory::getDbo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Joomla Module/s
|
||||
*
|
||||
* @param int|null $id the module id
|
||||
*
|
||||
* @return object|array|null if ID found it returns object, if no ID given it returns all set
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function get(int $id = null)
|
||||
{
|
||||
if (is_null($id) && $this->exists())
|
||||
{
|
||||
return $this->data;
|
||||
}
|
||||
elseif ($this->exists($id))
|
||||
{
|
||||
return $this->data[$id];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the Joomla Module/s exists
|
||||
*
|
||||
* @param int|null $id the module id
|
||||
*
|
||||
* @return bool if ID found it returns true, if no ID given it returns true if any are set
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function exists(int $id = null): bool
|
||||
{
|
||||
if (is_null($id))
|
||||
{
|
||||
return ArrayHelper::check($this->data);
|
||||
}
|
||||
elseif (isset($this->data[$id]))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return $this->set($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the Joomla Module
|
||||
*
|
||||
* @param int $id the module id
|
||||
*
|
||||
* @return bool true on success
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(int $id): bool
|
||||
{
|
||||
if (isset($this->data[$id]))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Create a new query object.
|
||||
$query = $this->db->getQuery(true);
|
||||
|
||||
$query->select('a.*');
|
||||
$query->select(
|
||||
$this->db->quoteName(
|
||||
array(
|
||||
'f.addfiles',
|
||||
'f.addfolders',
|
||||
'f.addfilesfullpath',
|
||||
'f.addfoldersfullpath',
|
||||
'f.addurls',
|
||||
'u.version_update',
|
||||
'u.id'
|
||||
), array(
|
||||
'addfiles',
|
||||
'addfolders',
|
||||
'addfilesfullpath',
|
||||
'addfoldersfullpath',
|
||||
'addurls',
|
||||
'version_update',
|
||||
'version_update_id'
|
||||
)
|
||||
)
|
||||
);
|
||||
// from these tables
|
||||
$query->from('#__componentbuilder_joomla_module AS a');
|
||||
$query->join(
|
||||
'LEFT', $this->db->quoteName(
|
||||
'#__componentbuilder_joomla_module_updates', 'u'
|
||||
) . ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||||
. $this->db->quoteName('u.joomla_module') . ')'
|
||||
);
|
||||
$query->join(
|
||||
'LEFT', $this->db->quoteName(
|
||||
'#__componentbuilder_joomla_module_files_folders_urls', 'f'
|
||||
) . ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||||
. $this->db->quoteName('f.joomla_module') . ')'
|
||||
);
|
||||
$query->where($this->db->quoteName('a.id') . ' = ' . (int) $id);
|
||||
$query->where($this->db->quoteName('a.published') . ' >= 1');
|
||||
$this->db->setQuery($query);
|
||||
$this->db->execute();
|
||||
if ($this->db->getNumRows())
|
||||
{
|
||||
// get the module data
|
||||
$module = $this->db->loadObject();
|
||||
|
||||
// tweak system to set stuff to the module domain
|
||||
$_backup_target = $this->config->build_target;
|
||||
$_backup_lang = $this->config->lang_target;
|
||||
$_backup_langPrefix = $this->config->lang_prefix;
|
||||
|
||||
// set some keys
|
||||
$module->target_type = 'M0dU|3';
|
||||
$module->key = $module->id . '_' . $module->target_type;
|
||||
|
||||
// update to point to module
|
||||
$this->config->build_target = $module->key;
|
||||
$this->config->lang_target = $module->key;
|
||||
|
||||
// set version if not set
|
||||
if (empty($module->module_version))
|
||||
{
|
||||
$module->module_version = '1.0.0';
|
||||
}
|
||||
|
||||
// set target client
|
||||
if ($module->target == 2)
|
||||
{
|
||||
$module->target_client = 'administrator';
|
||||
}
|
||||
else
|
||||
{
|
||||
// default is site area
|
||||
$module->target_client = 'site';
|
||||
}
|
||||
|
||||
// set GUI mapper
|
||||
$guiMapper = array('table' => 'joomla_module',
|
||||
'id' => (int) $id, 'type' => 'php');
|
||||
// update the name if it has dynamic values
|
||||
$module->name = $this->placeholder->update_(
|
||||
$this->customcode->update($module->name)
|
||||
);
|
||||
|
||||
// set safe class function name
|
||||
$module->code_name
|
||||
= ClassfunctionHelper::safe(
|
||||
$module->name
|
||||
);
|
||||
|
||||
// alias of code name
|
||||
$module->class_name = $module->code_name;
|
||||
// set official name
|
||||
$module->official_name = StringHelper::safe(
|
||||
$module->name, 'W'
|
||||
);
|
||||
$this->config->set('lang_prefix', 'MOD_' . strtoupper((string) $module->code_name));
|
||||
|
||||
// set lang prefix
|
||||
$module->lang_prefix = $this->config->lang_prefix;
|
||||
|
||||
// set module class name
|
||||
$module->class_helper_name = 'Mod' . ucfirst((string) $module->code_name)
|
||||
. 'Helper';
|
||||
$module->class_data_name = 'Mod' . ucfirst((string) $module->code_name)
|
||||
. 'Data';
|
||||
|
||||
// set module install class name
|
||||
$module->installer_class_name = 'mod_' . ucfirst(
|
||||
(string) $module->code_name
|
||||
) . 'InstallerScript';
|
||||
|
||||
// set module folder name
|
||||
$module->folder_name = 'mod_' . strtolower((string) $module->code_name);
|
||||
|
||||
// set the zip name
|
||||
$module->zip_name = $module->folder_name . '_v' . str_replace(
|
||||
'.', '_', (string) $module->module_version
|
||||
) . '__J' . $this->config->joomla_version;
|
||||
|
||||
// set module file name
|
||||
$module->file_name = $module->folder_name;
|
||||
|
||||
// set module context
|
||||
$module->context = $module->file_name . '.' . $module->id;
|
||||
|
||||
// set official_name lang strings
|
||||
$this->language->set(
|
||||
$module->key, $this->config->lang_prefix, $module->official_name
|
||||
);
|
||||
|
||||
// set some placeholder for this module
|
||||
$this->placeholder->set('Module_name', $module->official_name);
|
||||
$this->placeholder->set('Module', ucfirst(
|
||||
(string) $module->code_name
|
||||
));
|
||||
$this->placeholder->set('module', strtolower(
|
||||
(string) $module->code_name
|
||||
));
|
||||
$this->placeholder->set('module.version', $module->module_version);
|
||||
$this->placeholder->set('module_version', str_replace(
|
||||
'.', '_', (string) $module->module_version
|
||||
));
|
||||
// set description (TODO) add description field to module
|
||||
if (!isset($module->description)
|
||||
|| !StringHelper::check(
|
||||
$module->description
|
||||
))
|
||||
{
|
||||
$module->description = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$module->description = $this->placeholder->update_(
|
||||
$this->customcode->update($module->description)
|
||||
);
|
||||
$this->language->set(
|
||||
$module->key, $module->lang_prefix . '_DESCRIPTION',
|
||||
$module->description
|
||||
);
|
||||
$module->description = '<p>' . $module->description
|
||||
. '</p>';
|
||||
}
|
||||
|
||||
// get author name
|
||||
$project_author = $this->config->project_author;
|
||||
|
||||
// set the description
|
||||
$module->xml_description = "<h1>" . $module->official_name
|
||||
. " (v." . $module->module_version
|
||||
. ")</h1> <div style='clear: both;'></div>"
|
||||
. $module->description . "<p>Created by <a href='" . trim(
|
||||
(string) $this->config->project_website
|
||||
) . "' target='_blank'>" . trim(
|
||||
(string) OutputFilter::cleanText($project_author)
|
||||
) . "</a><br /><small>Development started "
|
||||
. Factory::getDate($module->created)->format("jS F, Y")
|
||||
. "</small></p>";
|
||||
|
||||
// set xml description
|
||||
$this->language->set(
|
||||
$module->key, $module->lang_prefix . '_XML_DESCRIPTION',
|
||||
$module->xml_description
|
||||
);
|
||||
|
||||
// update the readme if set
|
||||
if ($module->addreadme == 1 && !empty($module->readme))
|
||||
{
|
||||
$module->readme = $this->placeholder->update_(
|
||||
$this->customcode->update(base64_decode((string) $module->readme))
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$module->addreadme = 0;
|
||||
unset($module->readme);
|
||||
}
|
||||
|
||||
// get the custom_get
|
||||
$module->custom_get = (isset($module->custom_get)
|
||||
&& JsonHelper::check($module->custom_get))
|
||||
? json_decode((string) $module->custom_get, true) : null;
|
||||
|
||||
if (ArrayHelper::check($module->custom_get))
|
||||
{
|
||||
$module->custom_get = $this->dynamic->get(
|
||||
$module->custom_get, $module->key, $module->key
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$module->custom_get = null;
|
||||
}
|
||||
|
||||
// set helper class details
|
||||
if ($module->add_class_helper >= 1
|
||||
&& StringHelper::check(
|
||||
$module->class_helper_code
|
||||
))
|
||||
{
|
||||
if ($module->add_class_helper_header == 1
|
||||
&& StringHelper::check(
|
||||
$module->class_helper_header
|
||||
))
|
||||
{
|
||||
// set GUI mapper field
|
||||
$guiMapper['field'] = 'class_helper_header';
|
||||
// base64 Decode code
|
||||
$module->class_helper_header = PHP_EOL
|
||||
. $this->gui->set(
|
||||
$this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
base64_decode(
|
||||
(string) $module->class_helper_header
|
||||
)
|
||||
)
|
||||
),
|
||||
$guiMapper
|
||||
) . PHP_EOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
$module->add_class_helper_header = 0;
|
||||
$module->class_helper_header = '';
|
||||
}
|
||||
// set GUI mapper field
|
||||
$guiMapper['field'] = 'class_helper_code';
|
||||
// base64 Decode code
|
||||
$module->class_helper_code = $this->gui->set(
|
||||
$this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $module->class_helper_code)
|
||||
)
|
||||
),
|
||||
$guiMapper
|
||||
);
|
||||
// set class type
|
||||
if ($module->add_class_helper == 2)
|
||||
{
|
||||
$module->class_helper_type = 'abstract class ';
|
||||
}
|
||||
else
|
||||
{
|
||||
$module->class_helper_type = 'class ';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$module->add_class_helper = 0;
|
||||
$module->class_helper_code = '';
|
||||
$module->class_helper_header = '';
|
||||
}
|
||||
|
||||
// base64 Decode mod_code
|
||||
if (isset($module->mod_code)
|
||||
&& StringHelper::check($module->mod_code))
|
||||
{
|
||||
// set GUI mapper field
|
||||
$guiMapper['field'] = 'mod_code';
|
||||
$module->mod_code = $this->gui->set(
|
||||
$this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $module->mod_code)
|
||||
)
|
||||
),
|
||||
$guiMapper
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$module->mod_code = "// get the module class sfx";
|
||||
$module->mod_code .= PHP_EOL
|
||||
. "\$moduleclass_sfx = htmlspecialchars(\$params->get('moduleclass_sfx'), ENT_COMPAT, 'UTF-8');";
|
||||
$module->mod_code .= PHP_EOL . "// load the default Tmpl";
|
||||
$module->mod_code .= PHP_EOL
|
||||
. "require JModuleHelper::getLayoutPath('mod_"
|
||||
. strtolower((string) $module->code_name)
|
||||
. "', \$params->get('layout', 'default'));";
|
||||
}
|
||||
|
||||
// base64 Decode default header
|
||||
if (isset($module->default_header)
|
||||
&& StringHelper::check(
|
||||
$module->default_header
|
||||
))
|
||||
{
|
||||
// set GUI mapper field
|
||||
$guiMapper['field'] = 'default_header';
|
||||
$module->default_header = $this->gui->set(
|
||||
$this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $module->default_header)
|
||||
)
|
||||
),
|
||||
$guiMapper
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$module->default_header = '';
|
||||
}
|
||||
|
||||
// base64 Decode default
|
||||
if (isset($module->default)
|
||||
&& StringHelper::check($module->default))
|
||||
{
|
||||
// set GUI mapper field
|
||||
$guiMapper['field'] = 'default';
|
||||
$guiMapper['type'] = 'html';
|
||||
$module->default = $this->gui->set(
|
||||
$this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $module->default)
|
||||
)
|
||||
),
|
||||
$guiMapper
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$module->default = '<h1>No Tmpl set</h1>';
|
||||
}
|
||||
|
||||
// start the config array
|
||||
$module->config_fields = [];
|
||||
// create the form arrays
|
||||
$module->form_files = [];
|
||||
$module->fieldsets_label = [];
|
||||
$module->fieldsets_paths = [];
|
||||
$module->add_rule_path = [];
|
||||
$module->add_field_path = [];
|
||||
// set global fields rule to default component path
|
||||
$module->fields_rules_paths = 1;
|
||||
// set the fields data
|
||||
$module->fields = (isset($module->fields)
|
||||
&& JsonHelper::check($module->fields))
|
||||
? json_decode((string) $module->fields, true) : null;
|
||||
if (ArrayHelper::check($module->fields))
|
||||
{
|
||||
// ket global key
|
||||
$key = $module->key;
|
||||
$dynamic_fields = array('fieldset' => 'basic',
|
||||
'fields_name' => 'params',
|
||||
'file' => 'config');
|
||||
foreach ($module->fields as $n => &$form)
|
||||
{
|
||||
if (isset($form['fields'])
|
||||
&& ArrayHelper::check(
|
||||
$form['fields']
|
||||
))
|
||||
{
|
||||
// make sure the dynamic_field is set to dynamic_value by default
|
||||
foreach (
|
||||
$dynamic_fields as $dynamic_field =>
|
||||
$dynamic_value
|
||||
)
|
||||
{
|
||||
if (!isset($form[$dynamic_field])
|
||||
|| !StringHelper::check(
|
||||
$form[$dynamic_field]
|
||||
))
|
||||
{
|
||||
$form[$dynamic_field] = $dynamic_value;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ('fields_name' === $dynamic_field
|
||||
&& strpos((string) $form[$dynamic_field], '.')
|
||||
!== false)
|
||||
{
|
||||
$form[$dynamic_field]
|
||||
= $form[$dynamic_field];
|
||||
}
|
||||
else
|
||||
{
|
||||
$form[$dynamic_field]
|
||||
= StringHelper::safe(
|
||||
$form[$dynamic_field]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
// check if field is external form file
|
||||
if (!isset($form['module']) || $form['module'] != 1)
|
||||
{
|
||||
// now build the form key
|
||||
$unique = $form['file'] . $form['fields_name']
|
||||
. $form['fieldset'];
|
||||
}
|
||||
else
|
||||
{
|
||||
// now build the form key
|
||||
$unique = $form['fields_name']
|
||||
. $form['fieldset'];
|
||||
}
|
||||
// set global fields rule path switches
|
||||
if ($module->fields_rules_paths == 1
|
||||
&& isset($form['fields_rules_paths'])
|
||||
&& $form['fields_rules_paths'] == 2)
|
||||
{
|
||||
$module->fields_rules_paths = 2;
|
||||
}
|
||||
// set where to path is pointing
|
||||
$module->fieldsets_paths[$unique]
|
||||
= $form['fields_rules_paths'];
|
||||
// check for extra rule paths
|
||||
if (isset($form['addrulepath'])
|
||||
&& ArrayHelper::check($form['addrulepath']))
|
||||
{
|
||||
foreach ($form['addrulepath'] as $add_rule_path)
|
||||
{
|
||||
if (StringHelper::check($add_rule_path['path']))
|
||||
{
|
||||
$module->add_rule_path[$unique] = $add_rule_path['path'];
|
||||
}
|
||||
}
|
||||
}
|
||||
// check for extra field paths
|
||||
if (isset($form['addfieldpath'])
|
||||
&& ArrayHelper::check($form['addfieldpath']))
|
||||
{
|
||||
foreach ($form['addfieldpath'] as $add_field_path)
|
||||
{
|
||||
if (StringHelper::check($add_field_path['path']))
|
||||
{
|
||||
$module->add_field_path[$unique] = $add_field_path['path'];
|
||||
}
|
||||
}
|
||||
}
|
||||
// add the label if set to lang
|
||||
if (isset($form['label'])
|
||||
&& StringHelper::check(
|
||||
$form['label']
|
||||
))
|
||||
{
|
||||
$module->fieldsets_label[$unique]
|
||||
= $this->language->key($form['label']);
|
||||
}
|
||||
// build the fields
|
||||
$form['fields'] = array_map(
|
||||
function ($field) use ($key, $unique) {
|
||||
// make sure the alias and title is 0
|
||||
$field['alias'] = 0;
|
||||
$field['title'] = 0;
|
||||
// set the field details
|
||||
$this->field->set(
|
||||
$field, $key, $key, $unique
|
||||
);
|
||||
// update the default if set
|
||||
if (StringHelper::check(
|
||||
$field['custom_value']
|
||||
)
|
||||
&& isset($field['settings']))
|
||||
{
|
||||
if (($old_default
|
||||
= GetHelper::between(
|
||||
$field['settings']->xml,
|
||||
'default="', '"', false
|
||||
)) !== false)
|
||||
{
|
||||
// replace old default
|
||||
$field['settings']->xml
|
||||
= str_replace(
|
||||
'default="' . $old_default
|
||||
. '"', 'default="'
|
||||
. $field['custom_value'] . '"',
|
||||
(string) $field['settings']->xml
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
// add the default (hmmm not ideal but okay it should work)
|
||||
$field['settings']->xml
|
||||
= 'default="'
|
||||
. $field['custom_value'] . '" '
|
||||
. $field['settings']->xml;
|
||||
}
|
||||
}
|
||||
unset($field['custom_value']);
|
||||
|
||||
// return field
|
||||
return $field;
|
||||
}, array_values($form['fields'])
|
||||
);
|
||||
// check if field is external form file
|
||||
if (!isset($form['module']) || $form['module'] != 1)
|
||||
{
|
||||
// load the form file
|
||||
if (!isset($module->form_files[$form['file']]))
|
||||
{
|
||||
$module->form_files[$form['file']]
|
||||
= array();
|
||||
}
|
||||
if (!isset($module->form_files[$form['file']][$form['fields_name']]))
|
||||
{
|
||||
$module->form_files[$form['file']][$form['fields_name']]
|
||||
= array();
|
||||
}
|
||||
if (!isset($module->form_files[$form['file']][$form['fields_name']][$form['fieldset']]))
|
||||
{
|
||||
$module->form_files[$form['file']][$form['fields_name']][$form['fieldset']]
|
||||
= array();
|
||||
}
|
||||
// do some house cleaning (for fields)
|
||||
foreach ($form['fields'] as $field)
|
||||
{
|
||||
// so first we lock the field name in
|
||||
$this->fieldName->get(
|
||||
$field, $module->key, $unique
|
||||
);
|
||||
// add the fields to the global form file builder
|
||||
$module->form_files[$form['file']][$form['fields_name']][$form['fieldset']][]
|
||||
= $field;
|
||||
}
|
||||
// remove form
|
||||
unset($module->fields[$n]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// load the config form
|
||||
if (!isset($module->config_fields[$form['fields_name']]))
|
||||
{
|
||||
$module->config_fields[$form['fields_name']]
|
||||
= array();
|
||||
}
|
||||
if (!isset($module->config_fields[$form['fields_name']][$form['fieldset']]))
|
||||
{
|
||||
$module->config_fields[$form['fields_name']][$form['fieldset']]
|
||||
= array();
|
||||
}
|
||||
// do some house cleaning (for fields)
|
||||
foreach ($form['fields'] as $field)
|
||||
{
|
||||
// so first we lock the field name in
|
||||
$this->fieldName->get(
|
||||
$field, $module->key, $unique
|
||||
);
|
||||
// add the fields to the config builder
|
||||
$module->config_fields[$form['fields_name']][$form['fieldset']][]
|
||||
= $field;
|
||||
}
|
||||
// remove form
|
||||
unset($module->fields[$n]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($module->fields[$n]);
|
||||
}
|
||||
}
|
||||
}
|
||||
unset($module->fields);
|
||||
|
||||
// set files and folders
|
||||
$this->filesFolders->set($module);
|
||||
|
||||
// set libraries
|
||||
$this->libraries->set($module->code_name, $module);
|
||||
|
||||
// add PHP in module install
|
||||
$module->add_install_script = false;
|
||||
$addScriptMethods = array('php_preflight',
|
||||
'php_postflight',
|
||||
'php_method');
|
||||
$addScriptTypes = array('install', 'update',
|
||||
'uninstall');
|
||||
// the next are php placeholders
|
||||
$guiMapper['type'] = 'php';
|
||||
foreach ($addScriptMethods as $scriptMethod)
|
||||
{
|
||||
foreach ($addScriptTypes as $scriptType)
|
||||
{
|
||||
if (isset(
|
||||
$module->{'add_' . $scriptMethod . '_'
|
||||
. $scriptType}
|
||||
)
|
||||
&& $module->{'add_' . $scriptMethod . '_'
|
||||
. $scriptType} == 1
|
||||
&& StringHelper::check(
|
||||
$module->{$scriptMethod . '_' . $scriptType}
|
||||
))
|
||||
{
|
||||
// set GUI mapper field
|
||||
$guiMapper['field'] = $scriptMethod . '_'
|
||||
. $scriptType;
|
||||
$module->{$scriptMethod . '_' . $scriptType} = $this->gui->set(
|
||||
$this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
base64_decode(
|
||||
(string) $module->{$scriptMethod . '_'
|
||||
. $scriptType}
|
||||
)
|
||||
)
|
||||
),
|
||||
$guiMapper
|
||||
);
|
||||
$module->add_install_script = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($module->{$scriptMethod . '_' . $scriptType});
|
||||
$module->{'add_' . $scriptMethod . '_'
|
||||
. $scriptType}
|
||||
= 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// add_sql
|
||||
if ($module->add_sql == 1
|
||||
&& StringHelper::check($module->sql))
|
||||
{
|
||||
$module->sql = $this->placeholder->update_(
|
||||
$this->customcode->update(base64_decode((string) $module->sql))
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($module->sql);
|
||||
$module->add_sql = 0;
|
||||
}
|
||||
|
||||
// add_sql_uninstall
|
||||
if ($module->add_sql_uninstall == 1
|
||||
&& StringHelper::check(
|
||||
$module->sql_uninstall
|
||||
))
|
||||
{
|
||||
$module->sql_uninstall = $this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $module->sql_uninstall)
|
||||
)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($module->sql_uninstall);
|
||||
$module->add_sql_uninstall = 0;
|
||||
}
|
||||
|
||||
// update the URL of the update_server if set
|
||||
if ($module->add_update_server == 1
|
||||
&& StringHelper::check(
|
||||
$module->update_server_url
|
||||
))
|
||||
{
|
||||
$module->update_server_url = $this->placeholder->update_(
|
||||
$this->customcode->update($module->update_server_url)
|
||||
);
|
||||
}
|
||||
|
||||
// add the update/sales server FTP details if that is the expected protocol
|
||||
$serverArray = array('update_server', 'sales_server');
|
||||
foreach ($serverArray as $server)
|
||||
{
|
||||
if ($module->{'add_' . $server} == 1
|
||||
&& is_numeric(
|
||||
$module->{$server}
|
||||
)
|
||||
&& $module->{$server} > 0)
|
||||
{
|
||||
// get the server protocol
|
||||
$module->{$server . '_protocol'}
|
||||
= GetHelper::var(
|
||||
'server', (int) $module->{$server}, 'id', 'protocol'
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$module->{$server} = 0;
|
||||
// only change this for sales server (update server can be added loacaly to the zip file)
|
||||
if ('sales_server' === $server)
|
||||
{
|
||||
$module->{'add_' . $server} = 0;
|
||||
}
|
||||
$module->{$server . '_protocol'} = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// set the update server stuff (TODO)
|
||||
// update_server_xml_path
|
||||
// update_server_xml_file_name
|
||||
|
||||
// rest globals
|
||||
$this->config->build_target = $_backup_target;
|
||||
$this->config->lang_target = $_backup_lang;
|
||||
$this->config->lang_prefix = $_backup_langPrefix;
|
||||
|
||||
$this->placeholder->remove('Module_name');
|
||||
$this->placeholder->remove('Module');
|
||||
$this->placeholder->remove('module');
|
||||
$this->placeholder->remove('module.version');
|
||||
$this->placeholder->remove('module_version');
|
||||
|
||||
$this->data[$id] = $module;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
@ -0,0 +1,886 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Joomlaplugin;
|
||||
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Filter\OutputFilter;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Language;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Field;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Field\Name as FieldName;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Filesfolders;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\String\ClassfunctionHelper;
|
||||
use VDM\Joomla\Utilities\String\PluginHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
use VDM\Joomla\Utilities\GetHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Joomla Plugin Data Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Data
|
||||
{
|
||||
/**
|
||||
* Compiler Joomla Plugins Data
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $data = [];
|
||||
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* Compiler Customcode
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Compiler Customcode in Gui
|
||||
*
|
||||
* @var Gui
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Gui $gui;
|
||||
|
||||
/**
|
||||
* Compiler Placeholder
|
||||
*
|
||||
* @var Placeholder
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Placeholder $placeholder;
|
||||
|
||||
/**
|
||||
* Compiler Language
|
||||
*
|
||||
* @var Language
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Language $language;
|
||||
|
||||
/**
|
||||
* Compiler Field
|
||||
*
|
||||
* @var Field
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Field $field;
|
||||
|
||||
/**
|
||||
* Compiler field name
|
||||
*
|
||||
* @var FieldName
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected FieldName $fieldName;
|
||||
|
||||
/**
|
||||
* Compiler Files Folders
|
||||
*
|
||||
* @var Filesfolders
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Filesfolders $filesFolders;
|
||||
|
||||
/**
|
||||
* Database object to query local DB
|
||||
*
|
||||
* @var \JDatabaseDriver
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected \JDatabaseDriver $db;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
* @param Gui|null $gui The compiler customcode gui.
|
||||
* @param Placeholder|null $placeholder The compiler placeholder object.
|
||||
* @param Language|null $language The compiler Language object.
|
||||
* @param Field|null $field The compiler field data object.
|
||||
* @param FieldName|null $fieldName The compiler field name object.
|
||||
* @param Filesfolders|null $filesFolders The compiler files folders object.
|
||||
* @param \JDatabaseDriver|null $db The database object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Customcode $customcode = null,
|
||||
?Gui $gui = null, ?Placeholder $placeholder = null,
|
||||
?Language $language = null, ?Field $field = null, ?FieldName $fieldName = null,
|
||||
?Filesfolders $filesFolders = null, ?\JDatabaseDriver $db = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
|
||||
$this->placeholder = $placeholder ?: Compiler::_('Placeholder');
|
||||
$this->language = $language ?: Compiler::_('Language');
|
||||
$this->field = $field ?: Compiler::_('Field');
|
||||
$this->fieldName = $fieldName ?: Compiler::_('Field.Name');
|
||||
$this->filesFolders = $filesFolders ?: Compiler::_('Model.Filesfolders');
|
||||
$this->db = $db ?: Factory::getDbo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Joomla Plugin/s
|
||||
*
|
||||
* @param int|null $id the plugin id
|
||||
*
|
||||
* @return object|array|null if ID found it returns object, if no ID given it returns all set
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function get(int $id = null)
|
||||
{
|
||||
if (is_null($id) && $this->exists())
|
||||
{
|
||||
return $this->data;
|
||||
}
|
||||
elseif ($this->exists($id))
|
||||
{
|
||||
return $this->data[$id];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the Joomla Plugin/s exists
|
||||
*
|
||||
* @param int|null $id the plugin id
|
||||
*
|
||||
* @return bool if ID found it returns true, if no ID given it returns true if any are set
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function exists(int $id = null): bool
|
||||
{
|
||||
if (is_null($id))
|
||||
{
|
||||
return ArrayHelper::check($this->data);
|
||||
}
|
||||
elseif (isset($this->data[$id]))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return $this->set($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the Joomla Plugin
|
||||
*
|
||||
* @param int $id the plugin id
|
||||
*
|
||||
* @return bool true on success
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(int $id): bool
|
||||
{
|
||||
if (isset($this->data[$id]))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Create a new query object.
|
||||
$query = $this->db->getQuery(true);
|
||||
|
||||
$query->select('a.*');
|
||||
$query->select(
|
||||
$this->db->quoteName(
|
||||
array(
|
||||
'g.name',
|
||||
'e.name',
|
||||
'e.head',
|
||||
'e.comment',
|
||||
'e.id',
|
||||
'f.addfiles',
|
||||
'f.addfolders',
|
||||
'f.addfilesfullpath',
|
||||
'f.addfoldersfullpath',
|
||||
'f.addurls',
|
||||
'u.version_update',
|
||||
'u.id'
|
||||
), array(
|
||||
'group',
|
||||
'extends',
|
||||
'class_head',
|
||||
'comment',
|
||||
'class_id',
|
||||
'addfiles',
|
||||
'addfolders',
|
||||
'addfilesfullpath',
|
||||
'addfoldersfullpath',
|
||||
'addurls',
|
||||
'version_update',
|
||||
'version_update_id'
|
||||
)
|
||||
)
|
||||
);
|
||||
// from these tables
|
||||
$query->from('#__componentbuilder_joomla_plugin AS a');
|
||||
$query->join(
|
||||
'LEFT', $this->db->quoteName(
|
||||
'#__componentbuilder_joomla_plugin_group', 'g'
|
||||
) . ' ON (' . $this->db->quoteName('a.joomla_plugin_group')
|
||||
. ' = ' . $this->db->quoteName('g.id') . ')'
|
||||
);
|
||||
$query->join(
|
||||
'LEFT',
|
||||
$this->db->quoteName('#__componentbuilder_class_extends', 'e')
|
||||
. ' ON (' . $this->db->quoteName('a.class_extends') . ' = '
|
||||
. $this->db->quoteName('e.id') . ')'
|
||||
);
|
||||
$query->join(
|
||||
'LEFT', $this->db->quoteName(
|
||||
'#__componentbuilder_joomla_plugin_updates', 'u'
|
||||
) . ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||||
. $this->db->quoteName('u.joomla_plugin') . ')'
|
||||
);
|
||||
$query->join(
|
||||
'LEFT', $this->db->quoteName(
|
||||
'#__componentbuilder_joomla_plugin_files_folders_urls', 'f'
|
||||
) . ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||||
. $this->db->quoteName('f.joomla_plugin') . ')'
|
||||
);
|
||||
$query->where($this->db->quoteName('a.id') . ' = ' . (int) $id);
|
||||
$query->where($this->db->quoteName('a.published') . ' >= 1');
|
||||
$this->db->setQuery($query);
|
||||
$this->db->execute();
|
||||
if ($this->db->getNumRows())
|
||||
{
|
||||
// get the plugin data
|
||||
$plugin = $this->db->loadObject();
|
||||
|
||||
// tweak system to set stuff to the plugin domain
|
||||
$_backup_target = $this->config->build_target;
|
||||
$_backup_lang = $this->config->lang_target;
|
||||
$_backup_langPrefix = $this->config->lang_prefix;
|
||||
|
||||
// set some keys
|
||||
$plugin->target_type = 'P|uG!n';
|
||||
$plugin->key = $plugin->id . '_' . $plugin->target_type;
|
||||
|
||||
// update to point to plugin
|
||||
$this->config->build_target = $plugin->key;
|
||||
$this->config->lang_target = $plugin->key;
|
||||
|
||||
// set version if not set
|
||||
if (empty($plugin->plugin_version))
|
||||
{
|
||||
$plugin->plugin_version = '1.0.0';
|
||||
}
|
||||
|
||||
// set GUI mapper
|
||||
$guiMapper = array('table' => 'joomla_plugin',
|
||||
'id' => (int) $id, 'type' => 'php');
|
||||
|
||||
// update the name if it has dynamic values
|
||||
$plugin->name = $this->placeholder->update_(
|
||||
$this->customcode->update($plugin->name)
|
||||
);
|
||||
|
||||
// update the name if it has dynamic values
|
||||
$plugin->code_name
|
||||
= ClassfunctionHelper::safe(
|
||||
$plugin->name
|
||||
);
|
||||
|
||||
// set official name
|
||||
$plugin->official_name = ucwords(
|
||||
$plugin->group . ' - ' . $plugin->name
|
||||
);
|
||||
|
||||
// set lang prefix
|
||||
$plugin->lang_prefix = PluginHelper::safeLangPrefix(
|
||||
$plugin->code_name,
|
||||
$plugin->group
|
||||
);
|
||||
|
||||
// set langPrefix
|
||||
$this->config->lang_prefix = $plugin->lang_prefix;
|
||||
|
||||
// set plugin class name
|
||||
$plugin->class_name
|
||||
= PluginHelper::safeClassName(
|
||||
$plugin->code_name,
|
||||
$plugin->group
|
||||
);
|
||||
|
||||
// set plugin install class name
|
||||
$plugin->installer_class_name
|
||||
= PluginHelper::safeInstallClassName(
|
||||
$plugin->code_name,
|
||||
$plugin->group
|
||||
);
|
||||
|
||||
// set plugin folder name
|
||||
$plugin->folder_name
|
||||
= PluginHelper::safeFolderName(
|
||||
$plugin->code_name,
|
||||
$plugin->group
|
||||
);
|
||||
|
||||
// set the zip name
|
||||
$plugin->zip_name = $plugin->folder_name . '_v' . str_replace(
|
||||
'.', '_', (string) $plugin->plugin_version
|
||||
) . '__J' . $this->config->joomla_version;
|
||||
|
||||
// set plugin file name
|
||||
$plugin->file_name = strtolower((string) $plugin->code_name);
|
||||
|
||||
// set plugin context
|
||||
$plugin->context = $plugin->folder_name . '.' . $plugin->id;
|
||||
|
||||
// set official_name lang strings
|
||||
$this->language->set(
|
||||
$plugin->key, $this->config->lang_prefix, $plugin->official_name
|
||||
);
|
||||
|
||||
// set some placeholder for this plugin
|
||||
$this->placeholder->set('Plugin_name', $plugin->official_name);
|
||||
$this->placeholder->set('PLUGIN_NAME', $plugin->official_name);
|
||||
$this->placeholder->set('Plugin', ucfirst((string) $plugin->code_name));
|
||||
$this->placeholder->set('plugin', strtolower((string) $plugin->code_name));
|
||||
$this->placeholder->set('Plugin_group', ucfirst((string) $plugin->group));
|
||||
$this->placeholder->set('plugin_group', strtolower((string) $plugin->group));
|
||||
$this->placeholder->set('plugin.version', $plugin->plugin_version);
|
||||
$this->placeholder->set('VERSION', $plugin->plugin_version);
|
||||
$this->placeholder->set('plugin_version', str_replace(
|
||||
'.', '_', (string) $plugin->plugin_version
|
||||
));
|
||||
|
||||
// set description
|
||||
$this->placeholder->set('DESCRIPTION', '');
|
||||
if (!isset($plugin->description)
|
||||
|| !StringHelper::check(
|
||||
$plugin->description
|
||||
))
|
||||
{
|
||||
$plugin->description = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$plugin->description = $this->placeholder->update_(
|
||||
$this->customcode->update($plugin->description)
|
||||
);
|
||||
$this->language->set(
|
||||
$plugin->key, $plugin->lang_prefix . '_DESCRIPTION',
|
||||
$plugin->description
|
||||
);
|
||||
// set description
|
||||
$this->placeholder->set('DESCRIPTION', $plugin->description);
|
||||
$plugin->description = '<p>' . $plugin->description . '</p>';
|
||||
}
|
||||
|
||||
// get author name
|
||||
$project_author = $this->config->project_author;
|
||||
|
||||
// we can only set these if the component was passed
|
||||
$plugin->xml_description = "<h1>" . $plugin->official_name
|
||||
. " (v." . $plugin->plugin_version
|
||||
. ")</h1> <div style='clear: both;'></div>"
|
||||
. $plugin->description . "<p>Created by <a href='" . trim(
|
||||
(string) $this->config->project_website
|
||||
) . "' target='_blank'>" . trim(
|
||||
(string) OutputFilter::cleanText($project_author)
|
||||
) . "</a><br /><small>Development started "
|
||||
. Factory::getDate($plugin->created)->format("jS F, Y")
|
||||
. "</small></p>";
|
||||
|
||||
// set xml discription
|
||||
$this->language->set(
|
||||
$plugin->key, $plugin->lang_prefix . '_XML_DESCRIPTION',
|
||||
$plugin->xml_description
|
||||
);
|
||||
|
||||
// update the readme if set
|
||||
if ($plugin->addreadme == 1 && !empty($plugin->readme))
|
||||
{
|
||||
$plugin->readme = $this->placeholder->update_(
|
||||
$this->customcode->update(base64_decode((string) $plugin->readme))
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$plugin->addreadme = 0;
|
||||
unset($plugin->readme);
|
||||
}
|
||||
|
||||
// open some base64 strings
|
||||
if (!empty($plugin->main_class_code))
|
||||
{
|
||||
// set GUI mapper field
|
||||
$guiMapper['field'] = 'main_class_code';
|
||||
// base64 Decode main_class_code.
|
||||
$plugin->main_class_code = $this->gui->set(
|
||||
$this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $plugin->main_class_code)
|
||||
)
|
||||
),
|
||||
$guiMapper
|
||||
);
|
||||
}
|
||||
|
||||
// set the head :)
|
||||
if ($plugin->add_head == 1 && !empty($plugin->head))
|
||||
{
|
||||
// set GUI mapper field
|
||||
$guiMapper['field'] = 'head';
|
||||
// base64 Decode head.
|
||||
$plugin->head = $this->gui->set(
|
||||
$this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $plugin->head)
|
||||
)
|
||||
),
|
||||
$guiMapper
|
||||
);
|
||||
}
|
||||
elseif (!empty($plugin->class_head))
|
||||
{
|
||||
// base64 Decode head.
|
||||
$plugin->head = $this->gui->set(
|
||||
$this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $plugin->class_head)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'table' => 'class_extends',
|
||||
'field' => 'head',
|
||||
'id' => (int) $plugin->class_id,
|
||||
'type' => 'php')
|
||||
);
|
||||
}
|
||||
unset($plugin->class_head);
|
||||
|
||||
// set the comment
|
||||
if (!empty($plugin->comment))
|
||||
{
|
||||
// base64 Decode comment.
|
||||
$plugin->comment = $this->gui->set(
|
||||
$this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $plugin->comment)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'table' => 'class_extends',
|
||||
'field' => 'comment',
|
||||
'id' => (int) $plugin->class_id,
|
||||
'type' => 'php')
|
||||
);
|
||||
}
|
||||
|
||||
// start the config array
|
||||
$plugin->config_fields = [];
|
||||
// create the form arrays
|
||||
$plugin->form_files = [];
|
||||
$plugin->fieldsets_label = [];
|
||||
$plugin->fieldsets_paths = [];
|
||||
$plugin->add_rule_path = [];
|
||||
$plugin->add_field_path = [];
|
||||
// set global fields rule to default component path
|
||||
$plugin->fields_rules_paths = 1;
|
||||
// set the fields data
|
||||
$plugin->fields = (isset($plugin->fields)
|
||||
&& JsonHelper::check($plugin->fields))
|
||||
? json_decode((string) $plugin->fields, true) : null;
|
||||
if (ArrayHelper::check($plugin->fields))
|
||||
{
|
||||
// ket global key
|
||||
$key = $plugin->key;
|
||||
$dynamic_fields = array('fieldset' => 'basic',
|
||||
'fields_name' => 'params',
|
||||
'file' => 'config');
|
||||
foreach ($plugin->fields as $n => &$form)
|
||||
{
|
||||
if (isset($form['fields'])
|
||||
&& ArrayHelper::check(
|
||||
$form['fields']
|
||||
))
|
||||
{
|
||||
// make sure the dynamic_field is set to dynamic_value by default
|
||||
foreach (
|
||||
$dynamic_fields as $dynamic_field =>
|
||||
$dynamic_value
|
||||
)
|
||||
{
|
||||
if (!isset($form[$dynamic_field])
|
||||
|| !StringHelper::check(
|
||||
$form[$dynamic_field]
|
||||
))
|
||||
{
|
||||
$form[$dynamic_field] = $dynamic_value;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ('fields_name' === $dynamic_field
|
||||
&& strpos((string) $form[$dynamic_field], '.')
|
||||
!== false)
|
||||
{
|
||||
$form[$dynamic_field]
|
||||
= $form[$dynamic_field];
|
||||
}
|
||||
else
|
||||
{
|
||||
$form[$dynamic_field]
|
||||
= StringHelper::safe(
|
||||
$form[$dynamic_field]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
// check if field is external form file
|
||||
if (!isset($form['plugin']) || $form['plugin'] != 1)
|
||||
{
|
||||
// now build the form key
|
||||
$unique = $form['file'] . $form['fields_name']
|
||||
. $form['fieldset'];
|
||||
}
|
||||
else
|
||||
{
|
||||
// now build the form key
|
||||
$unique = $form['fields_name']
|
||||
. $form['fieldset'];
|
||||
}
|
||||
// set global fields rule path switchs
|
||||
if ($plugin->fields_rules_paths == 1
|
||||
&& isset($form['fields_rules_paths'])
|
||||
&& $form['fields_rules_paths'] == 2)
|
||||
{
|
||||
$plugin->fields_rules_paths = 2;
|
||||
}
|
||||
// set where to path is pointing
|
||||
$plugin->fieldsets_paths[$unique]
|
||||
= $form['fields_rules_paths'];
|
||||
// add the label if set to lang
|
||||
if (isset($form['label'])
|
||||
&& StringHelper::check(
|
||||
$form['label']
|
||||
))
|
||||
{
|
||||
$plugin->fieldsets_label[$unique]
|
||||
= $this->language->key($form['label']);
|
||||
}
|
||||
// check for extra rule paths
|
||||
if (isset($form['addrulepath'])
|
||||
&& ArrayHelper::check($form['addrulepath']))
|
||||
{
|
||||
foreach ($form['addrulepath'] as $add_rule_path)
|
||||
{
|
||||
if (StringHelper::check($add_rule_path['path']))
|
||||
{
|
||||
$plugin->add_rule_path[$unique] = $add_rule_path['path'];
|
||||
}
|
||||
}
|
||||
}
|
||||
// check for extra field paths
|
||||
if (isset($form['addfieldpath'])
|
||||
&& ArrayHelper::check($form['addfieldpath']))
|
||||
{
|
||||
foreach ($form['addfieldpath'] as $add_field_path)
|
||||
{
|
||||
if (StringHelper::check($add_field_path['path']))
|
||||
{
|
||||
$plugin->add_field_path[$unique] = $add_field_path['path'];
|
||||
}
|
||||
}
|
||||
}
|
||||
// build the fields
|
||||
$form['fields'] = array_map(
|
||||
function ($field) use ($key, $unique) {
|
||||
// make sure the alias and title is 0
|
||||
$field['alias'] = 0;
|
||||
$field['title'] = 0;
|
||||
// set the field details
|
||||
$this->field->set(
|
||||
$field, $key, $key, $unique
|
||||
);
|
||||
// update the default if set
|
||||
if (StringHelper::check(
|
||||
$field['custom_value']
|
||||
)
|
||||
&& isset($field['settings']))
|
||||
{
|
||||
if (($old_default
|
||||
= GetHelper::between(
|
||||
$field['settings']->xml,
|
||||
'default="', '"', false
|
||||
)) !== false)
|
||||
{
|
||||
// replace old default
|
||||
$field['settings']->xml
|
||||
= str_replace(
|
||||
'default="' . $old_default
|
||||
. '"', 'default="'
|
||||
. $field['custom_value'] . '"',
|
||||
(string) $field['settings']->xml
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
// add the default (hmmm not ideal but okay it should work)
|
||||
$field['settings']->xml
|
||||
= 'default="'
|
||||
. $field['custom_value'] . '" '
|
||||
. $field['settings']->xml;
|
||||
}
|
||||
}
|
||||
unset($field['custom_value']);
|
||||
|
||||
// return field
|
||||
return $field;
|
||||
}, array_values($form['fields'])
|
||||
);
|
||||
// check if field is external form file
|
||||
if (!isset($form['plugin']) || $form['plugin'] != 1)
|
||||
{
|
||||
// load the form file
|
||||
if (!isset($plugin->form_files[$form['file']]))
|
||||
{
|
||||
$plugin->form_files[$form['file']]
|
||||
= array();
|
||||
}
|
||||
if (!isset($plugin->form_files[$form['file']][$form['fields_name']]))
|
||||
{
|
||||
$plugin->form_files[$form['file']][$form['fields_name']]
|
||||
= array();
|
||||
}
|
||||
if (!isset($plugin->form_files[$form['file']][$form['fields_name']][$form['fieldset']]))
|
||||
{
|
||||
$plugin->form_files[$form['file']][$form['fields_name']][$form['fieldset']]
|
||||
= array();
|
||||
}
|
||||
// do some house cleaning (for fields)
|
||||
foreach ($form['fields'] as $field)
|
||||
{
|
||||
// so first we lock the field name in
|
||||
$this->fieldName->get(
|
||||
$field, $plugin->key, $unique
|
||||
);
|
||||
// add the fields to the global form file builder
|
||||
$plugin->form_files[$form['file']][$form['fields_name']][$form['fieldset']][]
|
||||
= $field;
|
||||
}
|
||||
// remove form
|
||||
unset($plugin->fields[$n]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// load the config form
|
||||
if (!isset($plugin->config_fields[$form['fields_name']]))
|
||||
{
|
||||
$plugin->config_fields[$form['fields_name']]
|
||||
= array();
|
||||
}
|
||||
if (!isset($plugin->config_fields[$form['fields_name']][$form['fieldset']]))
|
||||
{
|
||||
$plugin->config_fields[$form['fields_name']][$form['fieldset']]
|
||||
= array();
|
||||
}
|
||||
// do some house cleaning (for fields)
|
||||
foreach ($form['fields'] as $field)
|
||||
{
|
||||
// so first we lock the field name in
|
||||
$this->fieldName->get(
|
||||
$field, $plugin->key, $unique
|
||||
);
|
||||
// add the fields to the config builder
|
||||
$plugin->config_fields[$form['fields_name']][$form['fieldset']][]
|
||||
= $field;
|
||||
}
|
||||
// remove form
|
||||
unset($plugin->fields[$n]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($plugin->fields[$n]);
|
||||
}
|
||||
}
|
||||
}
|
||||
unset($plugin->fields);
|
||||
|
||||
// set files and folders
|
||||
$this->filesFolders->set($plugin);
|
||||
|
||||
// add PHP in plugin install
|
||||
$plugin->add_install_script = false;
|
||||
$addScriptMethods = array('php_preflight',
|
||||
'php_postflight',
|
||||
'php_method');
|
||||
$addScriptTypes = array('install', 'update',
|
||||
'uninstall');
|
||||
foreach ($addScriptMethods as $scriptMethod)
|
||||
{
|
||||
foreach ($addScriptTypes as $scriptType)
|
||||
{
|
||||
if (isset(
|
||||
$plugin->{'add_' . $scriptMethod . '_'
|
||||
. $scriptType}
|
||||
)
|
||||
&& $plugin->{'add_' . $scriptMethod . '_'
|
||||
. $scriptType} == 1
|
||||
&& StringHelper::check(
|
||||
$plugin->{$scriptMethod . '_' . $scriptType}
|
||||
))
|
||||
{
|
||||
// set GUI mapper field
|
||||
$guiMapper['field'] = $scriptMethod . '_'
|
||||
. $scriptType;
|
||||
$plugin->{$scriptMethod . '_' . $scriptType}
|
||||
= $this->gui->set(
|
||||
$this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
base64_decode(
|
||||
(string) $plugin->{$scriptMethod . '_'
|
||||
. $scriptType}
|
||||
)
|
||||
)
|
||||
),
|
||||
$guiMapper
|
||||
);
|
||||
$plugin->add_install_script = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($plugin->{$scriptMethod . '_' . $scriptType});
|
||||
$plugin->{'add_' . $scriptMethod . '_'
|
||||
. $scriptType}
|
||||
= 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// add_sql
|
||||
if ($plugin->add_sql == 1
|
||||
&& StringHelper::check($plugin->sql))
|
||||
{
|
||||
$plugin->sql = $this->placeholder->update_(
|
||||
$this->customcode->update(base64_decode((string) $plugin->sql))
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($plugin->sql);
|
||||
$plugin->add_sql = 0;
|
||||
}
|
||||
|
||||
// add_sql_uninstall
|
||||
if ($plugin->add_sql_uninstall == 1
|
||||
&& StringHelper::check(
|
||||
$plugin->sql_uninstall
|
||||
))
|
||||
{
|
||||
$plugin->sql_uninstall = $this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $plugin->sql_uninstall)
|
||||
)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($plugin->sql_uninstall);
|
||||
$plugin->add_sql_uninstall = 0;
|
||||
}
|
||||
|
||||
// update the URL of the update_server if set
|
||||
if ($plugin->add_update_server == 1
|
||||
&& StringHelper::check(
|
||||
$plugin->update_server_url
|
||||
))
|
||||
{
|
||||
$plugin->update_server_url = $this->placeholder->update_(
|
||||
$this->customcode->update($plugin->update_server_url)
|
||||
);
|
||||
}
|
||||
|
||||
// add the update/sales server FTP details if that is the expected protocol
|
||||
$serverArray = array('update_server', 'sales_server');
|
||||
foreach ($serverArray as $server)
|
||||
{
|
||||
if ($plugin->{'add_' . $server} == 1
|
||||
&& is_numeric(
|
||||
$plugin->{$server}
|
||||
)
|
||||
&& $plugin->{$server} > 0)
|
||||
{
|
||||
// get the server protocol
|
||||
$plugin->{$server . '_protocol'}
|
||||
= GetHelper::var(
|
||||
'server', (int) $plugin->{$server}, 'id', 'protocol'
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$plugin->{$server} = 0;
|
||||
// only change this for sales server (update server can be added locally to the zip file)
|
||||
if ('sales_server' === $server)
|
||||
{
|
||||
$plugin->{'add_' . $server} = 0;
|
||||
}
|
||||
$plugin->{$server . '_protocol'} = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// set the update server stuff (TODO)
|
||||
// update_server_xml_path
|
||||
// update_server_xml_file_name
|
||||
|
||||
// rest globals
|
||||
$this->config->build_target = $_backup_target;
|
||||
$this->config->lang_target = $_backup_lang;
|
||||
$this->config->set('lang_prefix', $_backup_langPrefix);
|
||||
|
||||
$this->placeholder->remove('Plugin_name');
|
||||
$this->placeholder->remove('Plugin');
|
||||
$this->placeholder->remove('plugin');
|
||||
$this->placeholder->remove('Plugin_group');
|
||||
$this->placeholder->remove('plugin_group');
|
||||
$this->placeholder->remove('plugin.version');
|
||||
$this->placeholder->remove('plugin_version');
|
||||
$this->placeholder->remove('VERSION');
|
||||
$this->placeholder->remove('DESCRIPTION');
|
||||
$this->placeholder->remove('PLUGIN_NAME');
|
||||
|
||||
$this->data[$id] = $plugin;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
@ -104,9 +104,7 @@ class Extractor
|
||||
{
|
||||
// get targets to search for
|
||||
$lang_string_targets = array_filter(
|
||||
$this->config->lang_string_targets, function ($get) use ($content): bool {
|
||||
return strpos($content, $get) !== false;
|
||||
}
|
||||
$this->config->lang_string_targets, fn($get): bool => strpos($content, (string) $get) !== false
|
||||
);
|
||||
// check if we should continue
|
||||
if (ArrayHelper::check($lang_string_targets))
|
||||
|
@ -0,0 +1,356 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Library;
|
||||
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Field\Data as FieldData;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Filesfolders;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Library Data Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Data
|
||||
{
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Compiler Customcode
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Compiler Customcode in Gui
|
||||
*
|
||||
* @var Gui
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Gui $gui;
|
||||
|
||||
/**
|
||||
* Compiler Field Data
|
||||
*
|
||||
* @var FieldData
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected FieldData $field;
|
||||
|
||||
/**
|
||||
* Compiler Files Folders
|
||||
*
|
||||
* @var Filesfolders
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Filesfolders $filesFolders;
|
||||
|
||||
/**
|
||||
* Database object to query local DB
|
||||
*
|
||||
* @var \JDatabaseDriver
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected \JDatabaseDriver $db;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
* @param Gui|null $gui The compiler customcode gui.
|
||||
* @param FieldData|null $field The compiler field data object.
|
||||
* @param Filesfolders|null $filesFolders The compiler files folders object.
|
||||
* @param \JDatabaseDriver|null $db The database object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null,
|
||||
?Customcode $customcode = null, ?Gui $gui = null,
|
||||
?FieldData $field = null, ?Filesfolders $filesFolders = null,
|
||||
?\JDatabaseDriver $db = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
|
||||
$this->field = $field ?: Compiler::_('Field.Data');
|
||||
$this->filesFolders = $filesFolders ?: Compiler::_('Model.Filesfolders');
|
||||
$this->db = $db ?: Factory::getDbo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Media Library Data and store globally in registry
|
||||
*
|
||||
* @param int $id the library id
|
||||
*
|
||||
* @return object|bool object on success
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function get(int $id)
|
||||
{
|
||||
// check if the lib has already been set
|
||||
if (!$this->registry->exists("builder.libraries.$id"))
|
||||
{
|
||||
// get some switches
|
||||
$uikit = $this->config->get('uikit', 0);
|
||||
$footable_version = $this->config->get('footable_version', 0);
|
||||
|
||||
// make sure we should continue and that the lib is not already being loaded
|
||||
switch ($id)
|
||||
{
|
||||
case 1: // No Library
|
||||
return false;
|
||||
break;
|
||||
case 3: // Uikit v3
|
||||
if (2 == $uikit || 3 == $uikit)
|
||||
{
|
||||
// already being loaded
|
||||
$this->registry->set("builder.libraries.$id", false);
|
||||
}
|
||||
break;
|
||||
case 4: // Uikit v2
|
||||
if (2 == $uikit || 1 == $uikit)
|
||||
{
|
||||
// already being loaded
|
||||
$this->registry->set("builder.libraries.$id", false);
|
||||
}
|
||||
break;
|
||||
case 5: // FooTable v2
|
||||
if (2 == $footable_version)
|
||||
{
|
||||
// already being loaded
|
||||
$this->registry->set("builder.libraries.$id", false);
|
||||
}
|
||||
break;
|
||||
case 6: // FooTable v3
|
||||
if (3 == $footable_version)
|
||||
{
|
||||
// already being loaded
|
||||
$this->registry->set("builder.libraries.$id", false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// check if the lib has already been set
|
||||
if (!$this->registry->exists("builder.libraries.$id"))
|
||||
{
|
||||
$query = $this->db->getQuery(true);
|
||||
|
||||
$query->select('a.*');
|
||||
$query->select(
|
||||
$this->db->quoteName(
|
||||
array(
|
||||
'a.id',
|
||||
'a.name',
|
||||
'a.how',
|
||||
'a.type',
|
||||
'a.addconditions',
|
||||
'b.addconfig',
|
||||
'c.addfiles',
|
||||
'c.addfolders',
|
||||
'c.addfilesfullpath',
|
||||
'c.addfoldersfullpath',
|
||||
'c.addurls',
|
||||
'a.php_setdocument'
|
||||
), array(
|
||||
'id',
|
||||
'name',
|
||||
'how',
|
||||
'type',
|
||||
'addconditions',
|
||||
'addconfig',
|
||||
'addfiles',
|
||||
'addfolders',
|
||||
'addfilesfullpath',
|
||||
'addfoldersfullpath',
|
||||
'addurls',
|
||||
'php_setdocument'
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
// from these tables
|
||||
$query->from('#__componentbuilder_library AS a');
|
||||
$query->join(
|
||||
'LEFT',
|
||||
$this->db->quoteName('#__componentbuilder_library_config', 'b')
|
||||
. ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||||
. $this->db->quoteName('b.library') . ')'
|
||||
);
|
||||
$query->join(
|
||||
'LEFT', $this->db->quoteName(
|
||||
'#__componentbuilder_library_files_folders_urls', 'c'
|
||||
) . ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||||
. $this->db->quoteName('c.library') . ')'
|
||||
);
|
||||
$query->where($this->db->quoteName('a.id') . ' = ' . (int) $id);
|
||||
$query->where($this->db->quoteName('a.target') . ' = 1');
|
||||
|
||||
// Reset the query using our newly populated query object.
|
||||
$this->db->setQuery($query);
|
||||
|
||||
// Load the results as a list of stdClass objects
|
||||
$library = $this->db->loadObject();
|
||||
|
||||
// check if this lib uses build-in behaviour
|
||||
if ($library->how == 4)
|
||||
{
|
||||
// fall back on build-in features
|
||||
$buildin = [
|
||||
3 => ['uikit' => 3],
|
||||
4 => ['uikit' => 1],
|
||||
5 => ['footable_version' => 2, 'footable' => true],
|
||||
6 => ['footable_version' => 3, 'footable' => true]
|
||||
];
|
||||
|
||||
if (isset($buildin[$library->id])
|
||||
&& ArrayHelper::check(
|
||||
$buildin[$library->id]
|
||||
))
|
||||
{
|
||||
// set the lib switch
|
||||
foreach ($buildin[$library->id] as $lib => $val)
|
||||
{
|
||||
// ---- we are targeting these ----
|
||||
// $this->config->uikit
|
||||
// $this->config->footable_version
|
||||
// $this->config->footable
|
||||
$this->config->set($lib, $val);
|
||||
}
|
||||
// since we are falling back on build-in feature
|
||||
$library->how = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// since we did not find build in behaviour we must load always.
|
||||
$library->how = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// check if this lib has dynamic behaviour
|
||||
if ($library->how > 0)
|
||||
{
|
||||
// set files and folders
|
||||
$this->filesFolders->set($library);
|
||||
|
||||
// add config fields only if needed
|
||||
if ($library->how > 1)
|
||||
{
|
||||
// set the config data
|
||||
$library->addconfig = (isset($library->addconfig)
|
||||
&& JsonHelper::check(
|
||||
$library->addconfig
|
||||
)) ? json_decode((string) $library->addconfig, true) : null;
|
||||
|
||||
if (ArrayHelper::check($library->addconfig))
|
||||
{
|
||||
$library->config = array_map(
|
||||
function ($array) {
|
||||
$array['alias'] = 0;
|
||||
$array['title'] = 0;
|
||||
$array['settings'] = $this->field->get(
|
||||
$array['field']
|
||||
);
|
||||
|
||||
return $array;
|
||||
}, array_values($library->addconfig)
|
||||
);
|
||||
}
|
||||
}
|
||||
// if this lib is controlled by custom script
|
||||
if (3 == $library->how)
|
||||
{
|
||||
// set Needed PHP
|
||||
if (isset($library->php_setdocument)
|
||||
&& StringHelper::check(
|
||||
$library->php_setdocument
|
||||
))
|
||||
{
|
||||
$library->document = $this->gui->set(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $library->php_setdocument)
|
||||
),
|
||||
array(
|
||||
'table' => 'library',
|
||||
'field' => 'php_setdocument',
|
||||
'id' => (int) $id,
|
||||
'type' => 'php')
|
||||
);
|
||||
}
|
||||
}
|
||||
// if this lib is controlled by conditions
|
||||
elseif (2 == $library->how)
|
||||
{
|
||||
// set the addconditions data
|
||||
$library->addconditions = (isset($library->addconditions)
|
||||
&& JsonHelper::check(
|
||||
$library->addconditions
|
||||
)) ? json_decode((string) $library->addconditions, true) : null;
|
||||
|
||||
if (ArrayHelper::check(
|
||||
$library->addconditions
|
||||
))
|
||||
{
|
||||
$library->conditions = array_values(
|
||||
$library->addconditions
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
unset($library->php_setdocument);
|
||||
unset($library->addconditions);
|
||||
unset($library->addconfig);
|
||||
|
||||
// load to global lib
|
||||
$this->registry->set("builder.libraries.$id", $library);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->registry->set("builder.libraries.$id", false);
|
||||
}
|
||||
}
|
||||
|
||||
// if set return
|
||||
return $this->registry->get("builder.libraries.$id", false);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
@ -0,0 +1,184 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Adminview\Data as Adminview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\ObjectHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Admin Views Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Adminviews
|
||||
{
|
||||
/**
|
||||
* Component Admin view Data
|
||||
*
|
||||
* @var Adminview
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Adminview $admin;
|
||||
|
||||
/**
|
||||
* Compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Adminview|null $admin The admin view data object.
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
* @param Config|null $config The compiler config object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Adminview $admin = null, ?Registry $registry = null, ?Config $config = null)
|
||||
{
|
||||
$this->admin = $admin ?: Compiler::_('Adminview.Data');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set admin view data
|
||||
*
|
||||
* @param object $item The extension data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
$item->addadmin_views = (isset($item->addadmin_views)
|
||||
&& JsonHelper::check($item->addadmin_views))
|
||||
? json_decode((string) $item->addadmin_views, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->addadmin_views))
|
||||
{
|
||||
$this->config->lang_target = 'admin';
|
||||
$this->config->build_target = 'admin';
|
||||
|
||||
// sort the views according to order
|
||||
usort(
|
||||
$item->addadmin_views, function ($a, $b) {
|
||||
if ($a['order'] != 0 && $b['order'] != 0)
|
||||
{
|
||||
return $a['order'] - $b['order'];
|
||||
}
|
||||
elseif ($b['order'] != 0 && $a['order'] == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
elseif ($a['order'] != 0 && $b['order'] == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
);
|
||||
|
||||
// build the admin_views settings
|
||||
$item->admin_views = array_map(
|
||||
function ($array) {
|
||||
$array = array_map(
|
||||
function ($value) {
|
||||
if (!ArrayHelper::check($value)
|
||||
&& !ObjectHelper::check($value)
|
||||
&& strval($value) === strval(intval($value)))
|
||||
{
|
||||
return (int) $value;
|
||||
}
|
||||
|
||||
return $value;
|
||||
}, $array
|
||||
);
|
||||
|
||||
// check if we must add to site
|
||||
if (isset($array['edit_create_site_view'])
|
||||
&& is_numeric(
|
||||
$array['edit_create_site_view']
|
||||
) && $array['edit_create_site_view'] > 0)
|
||||
{
|
||||
$this->registry->set('builder.site_edit_view.' . $array['adminview'], true);
|
||||
$this->config->lang_target = 'both';
|
||||
}
|
||||
|
||||
// set the import/export option for this view
|
||||
if (isset($array['port']) && $array['port'])
|
||||
{
|
||||
$this->config->set('add_eximport', true);
|
||||
}
|
||||
|
||||
// set the history tracking option for this view
|
||||
if (isset($array['history']) && $array['history'])
|
||||
{
|
||||
$this->config->set('set_tag_history', true);
|
||||
}
|
||||
|
||||
// set the custom field integration for this view
|
||||
if (isset($array['joomla_fields']) && $array['joomla_fields'])
|
||||
{
|
||||
$this->config->set('set_joomla_fields', true);
|
||||
}
|
||||
|
||||
// has become a legacy issue, can't remove this
|
||||
$array['view'] = $array['adminview'];
|
||||
|
||||
// get the admin settings/data
|
||||
$array['settings'] = $this->admin->get(
|
||||
$array['view']
|
||||
);
|
||||
|
||||
// set the filter option for this view
|
||||
$this->registry-> // Side (old) [default for now]
|
||||
set('builder.admin_filter_type.' . $array['settings']->name_list_code, 1);
|
||||
|
||||
if (isset($array['filter'])
|
||||
&& is_numeric(
|
||||
$array['filter']
|
||||
) && $array['filter'] > 0)
|
||||
{
|
||||
$this->registry->
|
||||
set('builder.admin_filter_type.' . $array['settings']->name_list_code,
|
||||
(int) $array['filter']);
|
||||
}
|
||||
|
||||
return $array;
|
||||
|
||||
}, array_values($item->addadmin_views)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,174 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Admin Ajax Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Ajaxadmin
|
||||
{
|
||||
/**
|
||||
* The gui mapper array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $guiMapper = [
|
||||
'table' => 'admin_view',
|
||||
'id' => null,
|
||||
'field' => null,
|
||||
'type' => 'php'
|
||||
];
|
||||
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Compiler Customcode Dispenser
|
||||
*
|
||||
* @var Dispenser
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Dispenser $dispenser;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
* @param Dispenser|null $dispenser The compiler customcode dispenser
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null, ?Dispenser $dispenser = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Ajax Code
|
||||
*
|
||||
* @param object $item The item data
|
||||
* @param string $table The table
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item, string $table = 'admin_view')
|
||||
{
|
||||
// set some gui mapper values
|
||||
$this->guiMapper['table'] = $table;
|
||||
$this->guiMapper['id'] = (int) $item->id;
|
||||
|
||||
if (isset($item->add_php_ajax) && $item->add_php_ajax == 1)
|
||||
{
|
||||
// insure the token is added to edit view at least
|
||||
$this->dispenser->hub['token'][$item->name_single_code]
|
||||
= true;
|
||||
|
||||
$add_ajax_site = false;
|
||||
|
||||
if ($this->registry->get('builder.site_edit_view.' . $item->id, false))
|
||||
{
|
||||
// we should add this site ajax to front ajax
|
||||
$add_ajax_site = true;
|
||||
$this->config->set('add_site_ajax', true);
|
||||
}
|
||||
|
||||
// check if controller input as been set
|
||||
$item->ajax_input = (isset($item->ajax_input)
|
||||
&& JsonHelper::check($item->ajax_input))
|
||||
? json_decode((string) $item->ajax_input, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->ajax_input))
|
||||
{
|
||||
if ($add_ajax_site)
|
||||
{
|
||||
$this->dispenser->hub['site']['ajax_controller'][$item->name_single_code]
|
||||
= array_values($item->ajax_input);
|
||||
}
|
||||
|
||||
$this->dispenser->hub['admin']['ajax_controller'][$item->name_single_code]
|
||||
= array_values($item->ajax_input);
|
||||
|
||||
$this->config->set('add_ajax', true);
|
||||
|
||||
unset($item->ajax_input);
|
||||
}
|
||||
|
||||
if (StringHelper::check($item->php_ajaxmethod))
|
||||
{
|
||||
// make sure we are still in PHP
|
||||
$this->guiMapper['type'] = 'php';
|
||||
|
||||
// update GUI mapper field
|
||||
$this->guiMapper['field'] = 'php_ajaxmethod';
|
||||
|
||||
$this->dispenser->set(
|
||||
$item->php_ajaxmethod,
|
||||
'admin',
|
||||
'ajax_model',
|
||||
$item->name_single_code,
|
||||
$this->guiMapper
|
||||
);
|
||||
|
||||
if ($add_ajax_site)
|
||||
{
|
||||
$this->dispenser->set(
|
||||
$item->php_ajaxmethod,
|
||||
'site',
|
||||
'ajax_model',
|
||||
$item->name_single_code,
|
||||
$this->guiMapper,
|
||||
false,
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
// switch ajax on
|
||||
$this->config->set('add_ajax', true);
|
||||
|
||||
// unset anyway
|
||||
unset($item->php_ajaxmethod);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,151 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Custom Ajax Custom View Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Ajaxcustomview
|
||||
{
|
||||
/**
|
||||
* The gui mapper array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $guiMapper = [
|
||||
'table' => 'site_view',
|
||||
'id' => null,
|
||||
'field' => null,
|
||||
'type' => 'php'
|
||||
];
|
||||
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* Compiler Customcode Dispenser
|
||||
*
|
||||
* @var Dispenser
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Dispenser $dispenser;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Dispenser|null $dispenser The compiler customcode dispenser
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Dispenser $dispenser = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Ajax Code
|
||||
*
|
||||
* @param object $item The item data
|
||||
* @param string $table The table
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item, string $table = 'site_view')
|
||||
{
|
||||
// add_Ajax for this view
|
||||
if (isset($item->add_php_ajax) && $item->add_php_ajax == 1)
|
||||
{
|
||||
// set some gui mapper values
|
||||
$this->guiMapper['table'] = $table;
|
||||
$this->guiMapper['id'] = (int) $item->id;
|
||||
|
||||
// ajax target (since we only have two options really)
|
||||
if ('site' === $this->config->build_target)
|
||||
{
|
||||
$target = 'site';
|
||||
}
|
||||
else
|
||||
{
|
||||
$target = 'admin';
|
||||
}
|
||||
|
||||
$add_ajax_site = false;
|
||||
|
||||
// check if controller input as been set
|
||||
$item->ajax_input = (isset($item->ajax_input)
|
||||
&& JsonHelper::check($item->ajax_input))
|
||||
? json_decode((string) $item->ajax_input, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->ajax_input))
|
||||
{
|
||||
$this->dispenser->hub[$target]['ajax_controller'][$item->code]
|
||||
= array_values($item->ajax_input);
|
||||
|
||||
$add_ajax_site = true;
|
||||
}
|
||||
unset($item->ajax_input);
|
||||
|
||||
// load the ajax class mathods (if set)
|
||||
if (StringHelper::check($item->php_ajaxmethod))
|
||||
{
|
||||
// set field
|
||||
$this->guiMapper['field'] = 'php_ajaxmethod';
|
||||
$this->dispenser->set(
|
||||
$item->php_ajaxmethod,
|
||||
$target,
|
||||
'ajax_model',
|
||||
$item->code,
|
||||
$this->guiMapper
|
||||
);
|
||||
|
||||
$add_ajax_site = true;
|
||||
}
|
||||
unset($item->php_ajaxmethod);
|
||||
|
||||
// should ajax be set
|
||||
if ($add_ajax_site)
|
||||
{
|
||||
// turn on ajax area
|
||||
if ('site' === $this->config->build_target)
|
||||
{
|
||||
$this->config->set('add_site_ajax', true);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->config->set('add_ajax', true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,173 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Field\TypeName;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Field\Name as FieldName;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Utilities\FieldHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\GetHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Conditions Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Conditions
|
||||
{
|
||||
/**
|
||||
* Compiler Type Name
|
||||
*
|
||||
* @var TypeName
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected TypeName $typeName;
|
||||
|
||||
/**
|
||||
* Compiler Field Name
|
||||
*
|
||||
* @var FieldName
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected FieldName $fieldName;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param TypeName|null $typeName The compiler type name object.
|
||||
* @param FieldName|null $fieldName The compiler field name object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?TypeName $typeName = null, ?FieldName $fieldName = null)
|
||||
{
|
||||
$this->typeName = $typeName ?: Compiler::_('Field.Type.Name');
|
||||
$this->fieldName = $fieldName ?: Compiler::_('Field.Name');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the conditions
|
||||
*
|
||||
* @param object $item The view data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
$item->addconditions = (isset($item->addconditions)
|
||||
&& JsonHelper::check($item->addconditions))
|
||||
? json_decode((string) $item->addconditions, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->addconditions))
|
||||
{
|
||||
$item->conditions = [];
|
||||
$ne = 0;
|
||||
foreach ($item->addconditions as $nr => $conditionValue)
|
||||
{
|
||||
if (ArrayHelper::check(
|
||||
$conditionValue['target_field']
|
||||
) && ArrayHelper::check($item->fields))
|
||||
{
|
||||
foreach ( $conditionValue['target_field'] as $fieldKey => $fieldId)
|
||||
{
|
||||
foreach ($item->fields as $fieldValues)
|
||||
{
|
||||
if ((int) $fieldValues['field'] == (int) $fieldId)
|
||||
{
|
||||
// load the field details
|
||||
$required = GetHelper::between(
|
||||
$fieldValues['settings']->xml,
|
||||
'required="', '"'
|
||||
);
|
||||
|
||||
$required = ($required === 'true'
|
||||
|| $required === '1') ? 'yes' : 'no';
|
||||
|
||||
$filter = GetHelper::between(
|
||||
$fieldValues['settings']->xml,
|
||||
'filter="', '"'
|
||||
);
|
||||
|
||||
$filter = StringHelper::check(
|
||||
$filter
|
||||
) ? $filter : 'none';
|
||||
|
||||
// set the field name
|
||||
$conditionValue['target_field'][$fieldKey] = [
|
||||
'name' => $this->fieldName->get(
|
||||
$fieldValues, $item->name_list_code
|
||||
),
|
||||
'type' => $this->typeName->get(
|
||||
$fieldValues
|
||||
),
|
||||
'required' => $required,
|
||||
'filter' => $filter
|
||||
];
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// load match field
|
||||
if (ArrayHelper::check($item->fields)
|
||||
&& isset($conditionValue['match_field']))
|
||||
{
|
||||
foreach ($item->fields as $fieldValue)
|
||||
{
|
||||
if ((int) $fieldValue['field'] == (int) $conditionValue['match_field'])
|
||||
{
|
||||
// set the type
|
||||
$type = $this->typeName->get($fieldValue);
|
||||
// set the field details
|
||||
$conditionValue['match_name'] = $this->fieldName->get(
|
||||
$fieldValue, $item->name_list_code
|
||||
);
|
||||
$conditionValue['match_type'] = $type;
|
||||
$conditionValue['match_xml'] = $fieldValue['settings']->xml;
|
||||
|
||||
// if custom field load field being extended
|
||||
if (!FieldHelper::check($type))
|
||||
{
|
||||
$conditionValue['match_extends'] = GetHelper::between(
|
||||
$fieldValue['settings']->xml,
|
||||
'extends="', '"'
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$conditionValue['match_extends'] = '';
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// set condition values
|
||||
$item->conditions[$ne] = $conditionValue;
|
||||
|
||||
$ne++;
|
||||
}
|
||||
}
|
||||
|
||||
unset($item->addconditions);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,90 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model CSS Admin View Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Cssadminview
|
||||
{
|
||||
/**
|
||||
* The areas add array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $areas = [
|
||||
'css_view', 'css_views'
|
||||
];
|
||||
|
||||
/**
|
||||
* Compiler Customcode Dispenser
|
||||
*
|
||||
* @var Dispenser
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Dispenser $dispenser;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Dispenser|null $dispenser The compiler customcode dispenser
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Dispenser $dispenser = null)
|
||||
{
|
||||
$this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Admin View Css
|
||||
*
|
||||
* @param object $item The item data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
foreach ($this->areas as $area)
|
||||
{
|
||||
if (isset($item->{'add_' . $area})
|
||||
&& $item->{'add_' . $area} == 1
|
||||
&& StringHelper::check($item->{$area}))
|
||||
{
|
||||
$this->dispenser->set(
|
||||
$item->{$area},
|
||||
$area,
|
||||
$item->name_single_code,
|
||||
null,
|
||||
['prefix' => PHP_EOL],
|
||||
true,
|
||||
true,
|
||||
true
|
||||
);
|
||||
|
||||
unset($item->{$area});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,79 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Css Custom View Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Csscustomview
|
||||
{
|
||||
/**
|
||||
* The areas add array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $areas = ['css_document', 'css'];
|
||||
|
||||
/**
|
||||
* Compiler Customcode Class
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Customcode $customcode = null)
|
||||
{
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Css code
|
||||
*
|
||||
* @param object $item The item data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
foreach ($this->areas as $area)
|
||||
{
|
||||
if (isset($item->{'add_' . $area})
|
||||
&& $item->{'add_' . $area} == 1
|
||||
&& StringHelper::check($item->{$area}))
|
||||
{
|
||||
$item->{$area} = $this->customcode->update(
|
||||
base64_decode((string) $item->{$area})
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,109 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customview\Data as Customview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\ObjectHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Custom Admin Views Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Customadminviews
|
||||
{
|
||||
/**
|
||||
* Component custom admin view Data
|
||||
*
|
||||
* @var Customview
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Customview $customadmin;
|
||||
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Customview|null $customadmin The custom admin view data object.
|
||||
* @param Config|null $config The compiler config object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Customview $customadmin = null, ?Config $config = null)
|
||||
{
|
||||
$this->customadmin = $customadmin ?: Compiler::_('Customview.Data');
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set custom admin view data
|
||||
*
|
||||
* @param object $item The item data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
$item->addcustom_admin_views = (isset($item->addcustom_admin_views)
|
||||
&& JsonHelper::check($item->addcustom_admin_views))
|
||||
? json_decode((string) $item->addcustom_admin_views, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->addcustom_admin_views))
|
||||
{
|
||||
$this->config->lang_target = 'admin';
|
||||
$this->config->build_target = 'custom_admin';
|
||||
|
||||
// build the site_views settings
|
||||
$item->custom_admin_views = array_map(
|
||||
function ($array) {
|
||||
// has become a legacy issue, can't remove this
|
||||
$array['view'] = $array['customadminview'];
|
||||
$array['settings'] = $this->customadmin->get(
|
||||
$array['view'], 'custom_admin_view'
|
||||
);
|
||||
|
||||
return array_map(
|
||||
function ($value) {
|
||||
if (!ArrayHelper::check($value)
|
||||
&& !ObjectHelper::check($value)
|
||||
&& strval($value) === strval(intval($value)))
|
||||
{
|
||||
return (int) $value;
|
||||
}
|
||||
|
||||
return $value;
|
||||
}, $array
|
||||
);
|
||||
}, array_values($item->addcustom_admin_views)
|
||||
);
|
||||
|
||||
// unset original value
|
||||
unset($item->addcustom_admin_views);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,110 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Field\Name as FieldName;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Custom Alias Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Customalias
|
||||
{
|
||||
/**
|
||||
* The compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler field name
|
||||
*
|
||||
* @var FieldName
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected FieldName $fieldName;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler registry object.
|
||||
* @param FieldName|null $fieldName The compiler field name object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?FieldName $fieldName = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->fieldName = $fieldName ?: Compiler::_('Field.Name');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set activate alias builder
|
||||
*
|
||||
* @param object $item The item data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
if (!$this->config->get('builder.custom_alias.' . $item->name_single_code, null)
|
||||
&& isset($item->alias_builder_type) && 2 == $item->alias_builder_type
|
||||
&& isset($item->alias_builder) && JsonHelper::check($item->alias_builder))
|
||||
{
|
||||
// get the aliasFields
|
||||
$alias_fields = (array) json_decode((string) $item->alias_builder, true);
|
||||
|
||||
// get the active fields
|
||||
$alias_fields = (array) array_filter(
|
||||
$item->fields, function ($field) use ($alias_fields) {
|
||||
// check if field is in view fields
|
||||
if (in_array($field['field'], $alias_fields))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
);
|
||||
|
||||
// check if all is well
|
||||
if (ArrayHelper::check($alias_fields))
|
||||
{
|
||||
// load the field names
|
||||
$this->config->set('builder.custom_alias.' . $item->name_single_code,
|
||||
(array) array_map(
|
||||
function ($field) use (&$item) {
|
||||
return $this->fieldName->get(
|
||||
$field, $item->name_list_code
|
||||
);
|
||||
}, $alias_fields
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// unset
|
||||
unset($item->alias_builder);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,158 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Templatelayout\Data as Templatelayout;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Custom Buttons Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Custombuttons
|
||||
{
|
||||
/**
|
||||
* The areas add array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $areas = [
|
||||
'php_model',
|
||||
'php_controller',
|
||||
'php_model_list',
|
||||
'php_controller_list'
|
||||
];
|
||||
|
||||
/**
|
||||
* The gui mapper array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $guiMapper = [
|
||||
'table' => 'admin_view',
|
||||
'id' => null,
|
||||
'field' => null,
|
||||
'type' => 'php'
|
||||
];
|
||||
|
||||
/**
|
||||
* Compiler Customcode
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Compiler Customcode in Gui
|
||||
*
|
||||
* @var Gui
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Gui $gui;
|
||||
|
||||
/**
|
||||
* Compiler Template Layout
|
||||
*
|
||||
* @var Templatelayout
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Templatelayout $templateLayout;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
* @param Gui|null $gui The compiler customcode gui.
|
||||
* @param Templatelayout|null $templateLayout The compiler template layout object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Customcode $customcode = null, ?Gui $gui = null,
|
||||
?Templatelayout $templateLayout = null)
|
||||
{
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
|
||||
$this->templateLayout = $templateLayout ?: Compiler::_('Templatelayout.Data');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Custom Buttons and Model/Controllers
|
||||
*
|
||||
* @param object $item The item data
|
||||
* @param object $table The table
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item, string $table = 'admin_view')
|
||||
{
|
||||
if (isset($item->add_custom_button)
|
||||
&& $item->add_custom_button == 1)
|
||||
{
|
||||
// set some gui mapper values
|
||||
$this->guiMapper['table'] = $table;
|
||||
$this->guiMapper['id'] = (int) $item->id;
|
||||
|
||||
// get the code
|
||||
$code = $item->name_single_code ?? $item->code ?? 'error';
|
||||
|
||||
// set for the code
|
||||
foreach ($this->areas as $area)
|
||||
{
|
||||
if (isset($item->{$area})
|
||||
&& StringHelper::check(
|
||||
$item->{$area}
|
||||
))
|
||||
{
|
||||
// set field
|
||||
$this->guiMapper['field'] = $area;
|
||||
$item->{$area} = $this->gui->set(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $item->{$area})
|
||||
),
|
||||
$this->guiMapper
|
||||
);
|
||||
|
||||
// check if we have template or layouts to load
|
||||
$this->templateLayout->set(
|
||||
$item->{$area}, $code
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// set the button array
|
||||
$item->custom_button = (isset($item->custom_button)
|
||||
&& JsonHelper::check($item->custom_button))
|
||||
? json_decode((string) $item->custom_button, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->custom_button))
|
||||
{
|
||||
$item->custom_buttons = array_values($item->custom_button);
|
||||
}
|
||||
|
||||
unset($item->custom_button);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,132 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
use VDM\Joomla\Utilities\Component\Helper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Custom Import Scripts Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Customimportscripts
|
||||
{
|
||||
/**
|
||||
* The areas add array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $areas = [
|
||||
'php_import_ext',
|
||||
'php_import_display',
|
||||
'php_import',
|
||||
'php_import_setdata',
|
||||
'php_import_save',
|
||||
'php_import_headers',
|
||||
'html_import_view'
|
||||
];
|
||||
|
||||
/**
|
||||
* The gui mapper array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $guiMapper = [
|
||||
'table' => 'admin_view',
|
||||
'id' => null,
|
||||
'field' => null,
|
||||
'type' => 'php'
|
||||
];
|
||||
|
||||
/**
|
||||
* Compiler Customcode Dispenser
|
||||
*
|
||||
* @var Dispenser
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Dispenser $dispenser;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Dispenser|null $dispenser The compiler customcode dispenser
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Dispenser $dispenser = null)
|
||||
{
|
||||
$this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Custom Import Scripts
|
||||
*
|
||||
* @param object $item The item data
|
||||
* @param string $table The table
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item, string $table = 'admin_view')
|
||||
{
|
||||
// set custom import scripts
|
||||
if (isset($item->add_custom_import)
|
||||
&& $item->add_custom_import == 1)
|
||||
{
|
||||
// set some gui mapper values
|
||||
$this->guiMapper['table'] = $table;
|
||||
$this->guiMapper['id'] = (int) $item->id;
|
||||
|
||||
foreach ($this->areas as $area)
|
||||
{
|
||||
if (isset($item->$area)
|
||||
&& StringHelper::check($item->$area))
|
||||
{
|
||||
// update GUI mapper field
|
||||
$this->guiMapper['field'] = $area;
|
||||
$this->guiMapper['type'] = 'php';
|
||||
|
||||
// Make sure html gets HTML comment for placeholder
|
||||
if ('html_import_view' === $area)
|
||||
{
|
||||
$this->guiMapper['type'] = 'html';
|
||||
}
|
||||
|
||||
$this->dispenser->set(
|
||||
$item->$area,
|
||||
$area,
|
||||
'import_' . $item->name_list_code,
|
||||
null,
|
||||
$this->guiMapper
|
||||
);
|
||||
|
||||
unset($item->$area);
|
||||
}
|
||||
else
|
||||
{
|
||||
// load the default TODO: convert getDynamicScripts to a class
|
||||
$this->dispenser->hub[$area]['import_' . $item->name_list_code]
|
||||
= Helper::_('getDynamicScripts', [$area, true]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,242 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Language;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
|
||||
|
||||
|
||||
/**
|
||||
* Model Custom Tabs Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Customtabs
|
||||
{
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Compiler Language
|
||||
*
|
||||
* @var Language
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Language $language;
|
||||
|
||||
/**
|
||||
* Compiler Placeholder
|
||||
*
|
||||
* @var Placeholder
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Placeholder $placeholder;
|
||||
|
||||
/**
|
||||
* Compiler Customcode
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
* @param Language|null $language The compiler Language object.
|
||||
* @param Placeholder|null $placeholder The compiler placeholder object.
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null,
|
||||
?Language $language = null, ?Placeholder $placeholder = null, ?Customcode $customcode = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->language = $language ?: Compiler::_('Language');
|
||||
$this->placeholder = $placeholder ?: Compiler::_('Placeholder');
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set custom tabs
|
||||
*
|
||||
* @param object $item The view data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
$item->customtabs = (isset($item->customtabs)
|
||||
&& JsonHelper::check($item->customtabs))
|
||||
? json_decode((string) $item->customtabs, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->customtabs))
|
||||
{
|
||||
// get the name
|
||||
$name = $item->name_single_code;
|
||||
|
||||
// setup custom tabs to global data sets
|
||||
$this->registry->set('builder.custom_tabs.' . $name,
|
||||
array_map(
|
||||
function ($tab) use (&$name) {
|
||||
|
||||
// set the view name
|
||||
$tab['view'] = $name;
|
||||
|
||||
// load the dynamic data
|
||||
$tab['html'] = $this->placeholder->update_(
|
||||
$this->customcode->update($tab['html'])
|
||||
);
|
||||
|
||||
// set the tab name
|
||||
$tab['name'] = (isset($tab['name'])
|
||||
&& StringHelper::check(
|
||||
$tab['name']
|
||||
)) ? $tab['name'] : 'Tab';
|
||||
|
||||
// set lang
|
||||
$tab['lang'] = $this->config->lang_prefix . '_'
|
||||
. StringHelper::safe(
|
||||
$tab['view'], 'U'
|
||||
) . '_' . StringHelper::safe(
|
||||
$tab['name'], 'U'
|
||||
);
|
||||
$this->language->set(
|
||||
'both', $tab['lang'], $tab['name']
|
||||
);
|
||||
|
||||
// set code name
|
||||
$tab['code'] = StringHelper::safe(
|
||||
$tab['name']
|
||||
);
|
||||
|
||||
// check if the permissions for the tab should be added
|
||||
$_tab = '';
|
||||
if (isset($tab['permission'])
|
||||
&& $tab['permission'] == 1)
|
||||
{
|
||||
$_tab = Indent::_(1);
|
||||
}
|
||||
|
||||
// check if the php of the tab is set, if not load it now
|
||||
if (strpos((string) $tab['html'], 'bootstrap.addTab') === false
|
||||
&& strpos((string) $tab['html'], 'bootstrap.endTab')
|
||||
=== false)
|
||||
{
|
||||
// add the tab
|
||||
$tmp = PHP_EOL . $_tab . Indent::_(1)
|
||||
. "<?php echo JHtml::_('bootstrap.addTab', '"
|
||||
. $tab['view'] . "Tab', '" . $tab['code']
|
||||
. "', JT" . "ext::_('" . $tab['lang']
|
||||
. "', true)); ?>";
|
||||
$tmp .= PHP_EOL . $_tab . Indent::_(2)
|
||||
. '<div class="row-fluid form-horizontal-desktop">';
|
||||
$tmp .= PHP_EOL . $_tab . Indent::_(3)
|
||||
. '<div class="span12">';
|
||||
$tmp .= PHP_EOL . $_tab . Indent::_(4) . implode(
|
||||
PHP_EOL . $_tab . Indent::_(4),
|
||||
(array) explode(PHP_EOL, trim((string) $tab['html']))
|
||||
);
|
||||
$tmp .= PHP_EOL . $_tab . Indent::_(3) . '</div>';
|
||||
$tmp .= PHP_EOL . $_tab . Indent::_(2) . '</div>';
|
||||
$tmp .= PHP_EOL . $_tab . Indent::_(1)
|
||||
. "<?php echo JHtml::_('bootstrap.endTab'); ?>";
|
||||
|
||||
// update html
|
||||
$tab['html'] = $tmp;
|
||||
}
|
||||
else
|
||||
{
|
||||
$tab['html'] = PHP_EOL . $_tab . Indent::_(1)
|
||||
. implode(
|
||||
PHP_EOL . $_tab . Indent::_(1),
|
||||
(array) explode(PHP_EOL, trim((string) $tab['html']))
|
||||
);
|
||||
}
|
||||
|
||||
// add the permissions if needed
|
||||
if (isset($tab['permission'])
|
||||
&& $tab['permission'] == 1)
|
||||
{
|
||||
$tmp = PHP_EOL . Indent::_(1)
|
||||
. "<?php if (\$this->canDo->get('"
|
||||
. $tab['view'] . "." . $tab['code']
|
||||
. ".viewtab')) : ?>";
|
||||
$tmp .= $tab['html'];
|
||||
$tmp .= PHP_EOL . Indent::_(1) . "<?php endif; ?>";
|
||||
// update html
|
||||
$tab['html'] = $tmp;
|
||||
// set lang for permissions
|
||||
$tab['lang_permission'] = $tab['lang']
|
||||
. '_TAB_PERMISSION';
|
||||
$tab['lang_permission_desc'] = $tab['lang']
|
||||
. '_TAB_PERMISSION_DESC';
|
||||
$tab['lang_permission_title']
|
||||
= $this->placeholder->get('Views') . ' View '
|
||||
. $tab['name'] . ' Tab';
|
||||
$this->language->set(
|
||||
'both', $tab['lang_permission'],
|
||||
$tab['lang_permission_title']
|
||||
);
|
||||
$this->language->set(
|
||||
'both', $tab['lang_permission_desc'],
|
||||
'Allow the users in this group to view '
|
||||
. $tab['name'] . ' Tab of '
|
||||
. $this->placeholder->get('views')
|
||||
);
|
||||
// set the sort key
|
||||
$tab['sortKey']
|
||||
= StringHelper::safe(
|
||||
$tab['lang_permission_title']
|
||||
);
|
||||
}
|
||||
|
||||
// return tab
|
||||
return $tab;
|
||||
|
||||
}, array_values($item->customtabs)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
unset($item->customtabs);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,582 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Selection;
|
||||
use VDM\Joomla\Utilities\GetHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Dynamic Get Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Dynamicget
|
||||
{
|
||||
/**
|
||||
* The joint types
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $jointer = [
|
||||
1 => 'LEFT',
|
||||
2 => 'LEFT OUTER',
|
||||
3 => 'INNER',
|
||||
4 => 'RIGHT',
|
||||
5 => 'RIGHT OUTER'
|
||||
];
|
||||
|
||||
/**
|
||||
* The operator types
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $operator = [
|
||||
1 => '=',
|
||||
2 => '!=',
|
||||
3 => '<>',
|
||||
4 => '>',
|
||||
5 => '<',
|
||||
6 => '>=',
|
||||
7 => '<=',
|
||||
8 => '!<',
|
||||
9 => '!>',
|
||||
10 => 'IN',
|
||||
11 => 'NOT IN'
|
||||
];
|
||||
|
||||
/**
|
||||
* The gui mapper array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $guiMapper = [
|
||||
'table' => 'dynamic_get',
|
||||
'id' => null,
|
||||
'field' => null,
|
||||
'type' => 'php'
|
||||
];
|
||||
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Compiler Customcode
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Compiler Customcode in Gui
|
||||
*
|
||||
* @var Gui
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Gui $gui;
|
||||
|
||||
/**
|
||||
* Compiler Placeholder
|
||||
*
|
||||
* @var Placeholder
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Placeholder $placeholder;
|
||||
|
||||
/**
|
||||
* Compiler Dynamic Get Selection
|
||||
*
|
||||
* @var Selection
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Selection $selection;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config.
|
||||
* @param Registry|null $registry The compiler registry.
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
* @param Gui|null $gui The compiler customcode gui.
|
||||
* @param Placeholder|null $placeholder The compiler placeholder object.
|
||||
* @param Selection|null $selection The compiler dynamic get selection object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null, ?Customcode $customcode = null,
|
||||
?Gui $gui = null, ?Placeholder $placeholder = null, ?Selection $selection = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
|
||||
$this->placeholder = $placeholder ?: Compiler::_('Placeholder');
|
||||
$this->selection = $selection ?: Compiler::_('Dynamicget.Selection');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Dynamic Get
|
||||
*
|
||||
* @param object $item The item data
|
||||
* @param string $view_code The view code name
|
||||
* @param string $context The context for events
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item, string $view_code, string $context)
|
||||
{
|
||||
// reset buckets
|
||||
$item->main_get = [];
|
||||
$item->custom_get = [];
|
||||
|
||||
// should joined and other tweaks be added
|
||||
$add_tweaks_joints = true;
|
||||
|
||||
// set source data
|
||||
switch ($item->main_source)
|
||||
{
|
||||
case 1:
|
||||
// check if auto sync is set
|
||||
if ($item->select_all == 1)
|
||||
{
|
||||
$item->view_selection = '*';
|
||||
}
|
||||
// set the view data
|
||||
$item->main_get[0]['selection'] = $this->selection->get(
|
||||
$item->key, $view_code,
|
||||
$item->view_selection,
|
||||
$item->view_table_main, 'a', 'view'
|
||||
);
|
||||
$item->main_get[0]['as'] = 'a';
|
||||
$item->main_get[0]['key'] = $item->key;
|
||||
$item->main_get[0]['context'] = $context;
|
||||
unset($item->view_selection);
|
||||
break;
|
||||
case 2:
|
||||
// check if auto sync is set
|
||||
if ($item->select_all == 1)
|
||||
{
|
||||
$item->db_selection = '*';
|
||||
}
|
||||
// set the database data
|
||||
$item->main_get[0]['selection'] = $this->selection->get(
|
||||
$item->key, $view_code,
|
||||
$item->db_selection,
|
||||
$item->db_table_main, 'a', 'db'
|
||||
);
|
||||
$item->main_get[0]['as'] = 'a';
|
||||
$item->main_get[0]['key'] = $item->key;
|
||||
$item->main_get[0]['context'] = $context;
|
||||
unset($item->db_selection);
|
||||
break;
|
||||
case 3:
|
||||
// set GUI mapper field
|
||||
$this->guiMapper['field'] = 'php_custom_get';
|
||||
// get the custom query
|
||||
$customQueryString
|
||||
= $this->gui->set(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $item->php_custom_get)
|
||||
),
|
||||
$this->guiMapper
|
||||
);
|
||||
|
||||
// get the table name
|
||||
$_searchQuery
|
||||
= GetHelper::between(
|
||||
$customQueryString, '$query->from(', ')'
|
||||
);
|
||||
|
||||
if (StringHelper::check(
|
||||
$_searchQuery
|
||||
)
|
||||
&& strpos((string) $_searchQuery, '#__') !== false)
|
||||
{
|
||||
$_queryName = GetHelper::between(
|
||||
$_searchQuery, '#__', "'"
|
||||
);
|
||||
|
||||
if (!StringHelper::check(
|
||||
$_queryName
|
||||
))
|
||||
{
|
||||
$_queryName = GetHelper::between(
|
||||
$_searchQuery, '#__', '"'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// set to blank if not found
|
||||
if (!isset($_queryName)
|
||||
|| !StringHelper::check(
|
||||
$_queryName
|
||||
))
|
||||
{
|
||||
$_queryName = '';
|
||||
}
|
||||
|
||||
// set custom script
|
||||
$item->main_get[0]['selection'] = [
|
||||
'select' => $customQueryString,
|
||||
'from' => '', 'table' => '', 'type' => '',
|
||||
'name' => $_queryName];
|
||||
$item->main_get[0]['as'] = 'a';
|
||||
$item->main_get[0]['key'] = $item->key;
|
||||
$item->main_get[0]['context'] = $context;
|
||||
|
||||
// do not add
|
||||
$add_tweaks_joints = false;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// only add if main source is not custom
|
||||
if ($add_tweaks_joints)
|
||||
{
|
||||
// set join_view_table details
|
||||
$item->join_view_table = json_decode(
|
||||
(string) $item->join_view_table, true
|
||||
);
|
||||
|
||||
if (ArrayHelper::check(
|
||||
$item->join_view_table
|
||||
))
|
||||
{
|
||||
// start the part of a table bucket
|
||||
$_part_of_a = [];
|
||||
// build relationship
|
||||
$_relationship = array_map(
|
||||
function ($op) use (&$_part_of_a) {
|
||||
$bucket = array();
|
||||
// array(on_field_as, on_field)
|
||||
$bucket['on_field'] = array_map(
|
||||
'trim',
|
||||
explode('.', (string) $op['on_field'])
|
||||
);
|
||||
// array(join_field_as, join_field)
|
||||
$bucket['join_field'] = array_map(
|
||||
'trim',
|
||||
explode('.', (string) $op['join_field'])
|
||||
);
|
||||
// triget filed that has table a relationship
|
||||
if ($op['row_type'] == 1
|
||||
&& ($bucket['on_field'][0] === 'a'
|
||||
|| isset($_part_of_a[$bucket['on_field'][0]])
|
||||
|| isset($_part_of_a[$bucket['join_field'][0]])))
|
||||
{
|
||||
$_part_of_a[$op['as']] = $op['as'];
|
||||
}
|
||||
|
||||
return $bucket;
|
||||
}, $item->join_view_table
|
||||
);
|
||||
|
||||
// loop joints
|
||||
foreach (
|
||||
$item->join_view_table as $nr => &$option
|
||||
)
|
||||
{
|
||||
if (StringHelper::check(
|
||||
$option['selection']
|
||||
))
|
||||
{
|
||||
// convert the type
|
||||
$option['type']
|
||||
= $this->jointer[$option['type']];
|
||||
// convert the operator
|
||||
$option['operator']
|
||||
= $this->operator[$option['operator']];
|
||||
// get the on field values
|
||||
$on_field
|
||||
= $_relationship[$nr]['on_field'];
|
||||
// get the join field values
|
||||
$join_field
|
||||
= $_relationship[$nr]['join_field'];
|
||||
// set selection
|
||||
$option['selection']
|
||||
= $this->selection->get(
|
||||
$item->key,
|
||||
$view_code,
|
||||
$option['selection'],
|
||||
$option['view_table'],
|
||||
$option['as'],
|
||||
'view',
|
||||
$option['row_type']
|
||||
);
|
||||
$option['key'] = $item->key;
|
||||
$option['context'] = $context;
|
||||
// load to the getters
|
||||
if ($option['row_type'] == 1)
|
||||
{
|
||||
$item->main_get[] = $option;
|
||||
if ($on_field[0] === 'a'
|
||||
|| isset($_part_of_a[$join_field[0]])
|
||||
|| isset($_part_of_a[$on_field[0]]))
|
||||
{
|
||||
$this->registry->
|
||||
set('builder.site_main_get.' . $this->config->build_target .
|
||||
'.' . $view_code . '.' . $option['as'], $option['as']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->registry->
|
||||
set('builder.site_dynamic_get.' . $this->config->build_target .
|
||||
'.' . $view_code . '.' . $option['as'] . '.' . $join_field[1], $on_field[0]);
|
||||
}
|
||||
}
|
||||
elseif ($option['row_type'] == 2)
|
||||
{
|
||||
$item->custom_get[] = $option;
|
||||
if ($on_field[0] != 'a')
|
||||
{
|
||||
$this->registry->
|
||||
set('builder.site_dynamic_get.' . $this->config->build_target .
|
||||
'.' . $view_code . '.' . $option['as'] . '.' . $join_field[1], $on_field[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
unset($item->join_view_table[$nr]);
|
||||
}
|
||||
}
|
||||
unset($item->join_view_table);
|
||||
|
||||
// set join_db_table details
|
||||
$item->join_db_table = json_decode(
|
||||
(string) $item->join_db_table, true
|
||||
);
|
||||
|
||||
if (ArrayHelper::check(
|
||||
$item->join_db_table
|
||||
))
|
||||
{
|
||||
// start the part of a table bucket
|
||||
$_part_of_a = array();
|
||||
// build relationship
|
||||
$_relationship = array_map(
|
||||
function ($op) use (&$_part_of_a) {
|
||||
$bucket = array();
|
||||
// array(on_field_as, on_field)
|
||||
$bucket['on_field'] = array_map(
|
||||
'trim',
|
||||
explode('.', (string) $op['on_field'])
|
||||
);
|
||||
// array(join_field_as, join_field)
|
||||
$bucket['join_field'] = array_map(
|
||||
'trim',
|
||||
explode('.', (string) $op['join_field'])
|
||||
);
|
||||
// triget filed that has table a relationship
|
||||
if ($op['row_type'] == 1
|
||||
&& ($bucket['on_field'][0] === 'a'
|
||||
|| isset($_part_of_a[$bucket['on_field'][0]])
|
||||
|| isset($_part_of_a[$bucket['join_field'][0]])))
|
||||
{
|
||||
$_part_of_a[$op['as']] = $op['as'];
|
||||
}
|
||||
|
||||
return $bucket;
|
||||
}, $item->join_db_table
|
||||
);
|
||||
|
||||
// loop joints
|
||||
foreach (
|
||||
$item->join_db_table as $nr => &$option1
|
||||
)
|
||||
{
|
||||
if (StringHelper::check(
|
||||
$option1['selection']
|
||||
))
|
||||
{
|
||||
// convert the type
|
||||
$option1['type']
|
||||
= $this->jointer[$option1['type']];
|
||||
// convert the operator
|
||||
$option1['operator']
|
||||
= $this->operator[$option1['operator']];
|
||||
// get the on field values
|
||||
$on_field
|
||||
= $_relationship[$nr]['on_field'];
|
||||
// get the join field values
|
||||
$join_field
|
||||
= $_relationship[$nr]['join_field'];
|
||||
// set selection
|
||||
$option1['selection']
|
||||
= $this->selection->get(
|
||||
$item->key,
|
||||
$view_code,
|
||||
$option1['selection'],
|
||||
$option1['db_table'],
|
||||
$option1['as'],
|
||||
'db',
|
||||
$option1['row_type']
|
||||
);
|
||||
$option1['key'] = $item->key;
|
||||
$option1['context'] = $context;
|
||||
// load to the getters
|
||||
if ($option1['row_type'] == 1)
|
||||
{
|
||||
$item->main_get[] = $option1;
|
||||
if ($on_field[0] === 'a'
|
||||
|| isset($_part_of_a[$join_field[0]])
|
||||
|| isset($_part_of_a[$on_field[0]]))
|
||||
{
|
||||
$this->registry->
|
||||
set('builder.site_main_get.' . $this->config->build_target .
|
||||
'.' . $view_code . '.' . $option1['as'], $option1['as']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->registry->
|
||||
set('builder.site_dynamic_get.' . $this->config->build_target .
|
||||
'.' . $view_code . '.' . $option1['as'] . '.' . $join_field[1], $on_field[0]);
|
||||
}
|
||||
}
|
||||
elseif ($option1['row_type'] == 2)
|
||||
{
|
||||
$item->custom_get[] = $option1;
|
||||
if ($on_field[0] != 'a')
|
||||
{
|
||||
$this->registry->
|
||||
set('builder.site_dynamic_get.' . $this->config->build_target .
|
||||
'.' . $view_code . '.' . $option1['as'] . '.' . $join_field[1], $on_field[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
unset($item->join_db_table[$nr]);
|
||||
}
|
||||
}
|
||||
unset($item->join_db_table);
|
||||
|
||||
// set filter details
|
||||
$item->filter = json_decode(
|
||||
(string) $item->filter, true
|
||||
);
|
||||
|
||||
if (ArrayHelper::check(
|
||||
$item->filter
|
||||
))
|
||||
{
|
||||
foreach ($item->filter as $nr => &$option2)
|
||||
{
|
||||
if (isset($option2['operator']))
|
||||
{
|
||||
$option2['operator'] = $this->operator[$option2['operator']];
|
||||
$option2['state_key'] = $this->placeholder->update_(
|
||||
$this->customcode->update(
|
||||
$option2['state_key']
|
||||
)
|
||||
);
|
||||
$option2['key'] = $item->key;
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($item->filter[$nr]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// set where details
|
||||
$item->where = json_decode((string) $item->where, true);
|
||||
if (ArrayHelper::check(
|
||||
$item->where
|
||||
))
|
||||
{
|
||||
foreach ($item->where as $nr => &$option3)
|
||||
{
|
||||
if (isset($option3['operator']))
|
||||
{
|
||||
$option3['operator']
|
||||
= $this->operator[$option3['operator']];
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($item->where[$nr]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($item->where);
|
||||
}
|
||||
|
||||
// set order details
|
||||
$item->order = json_decode((string) $item->order, true);
|
||||
if (!ArrayHelper::check(
|
||||
$item->order
|
||||
))
|
||||
{
|
||||
unset($item->order);
|
||||
}
|
||||
|
||||
// set grouping
|
||||
$item->group = json_decode((string) $item->group, true);
|
||||
if (!ArrayHelper::check(
|
||||
$item->group
|
||||
))
|
||||
{
|
||||
unset($item->group);
|
||||
}
|
||||
|
||||
// set global details
|
||||
$item->global = json_decode(
|
||||
(string) $item->global, true
|
||||
);
|
||||
|
||||
if (!ArrayHelper::check(
|
||||
$item->global
|
||||
))
|
||||
{
|
||||
unset($item->global);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// when we have a custom query script we do not add the dynamic options
|
||||
unset($item->join_view_table);
|
||||
unset($item->join_db_table);
|
||||
unset($item->filter);
|
||||
unset($item->where);
|
||||
unset($item->order);
|
||||
unset($item->group);
|
||||
unset($item->global);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,342 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Application\CMSApplication;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HistoryInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Field;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Field\Name as FieldName;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Updatesql;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Utilities\FieldHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\ObjectHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Fields Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Fields
|
||||
{
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Compiler History
|
||||
*
|
||||
* @var HistoryInterface
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected HistoryInterface $history;
|
||||
|
||||
/**
|
||||
* Compiler Customcode
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Compiler Field
|
||||
*
|
||||
* @var Field
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Field $field;
|
||||
|
||||
/**
|
||||
* Compiler Field Name
|
||||
*
|
||||
* @var FieldName
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected FieldName $fieldName;
|
||||
|
||||
/**
|
||||
* Compiler Update Sql
|
||||
*
|
||||
* @var UpdateSql
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected UpdateSql $updateSql;
|
||||
|
||||
/**
|
||||
* Application object.
|
||||
*
|
||||
* @var CMSApplication
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected CMSApplication $app;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
* @param HistoryInterface|null $history The compiler history object.
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
* @param Field|null $field The compiler field object.
|
||||
* @param FieldName|null $fieldName The compiler field name object.
|
||||
* @param UpdateSql|null $updateSql The compiler field name object.
|
||||
* @param CMSApplication|null $app The app object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null,
|
||||
?HistoryInterface $history = null, ?Customcode $customcode = null,
|
||||
?Field $field = null, ?FieldName $fieldName = null,
|
||||
?UpdateSql $updateSql = null, ?CMSApplication $app = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->history = $history ?: Compiler::_('History');
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
$this->field = $field ?: Compiler::_('Field');
|
||||
$this->fieldName = $fieldName ?: Compiler::_('Field.Name');
|
||||
$this->updateSql = $updateSql ?: Compiler::_('Model.Updatesql');
|
||||
$this->app = $app ?: Factory::getApplication();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set fields
|
||||
*
|
||||
* @param object $item The view data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
$item->fields = [];
|
||||
|
||||
$item->addfields = (isset($item->addfields)
|
||||
&& JsonHelper::check($item->addfields))
|
||||
? json_decode((string) $item->addfields, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->addfields))
|
||||
{
|
||||
$ignore_fields = [];
|
||||
$default_fields = $this->config->default_fields;
|
||||
|
||||
// load the field data
|
||||
$item->fields = array_map(
|
||||
function ($field) use (
|
||||
&$item, &$ignore_fields, &$default_fields
|
||||
) {
|
||||
// set the field details
|
||||
$this->field->set(
|
||||
$field, $item->name_single_code,
|
||||
$item->name_list_code
|
||||
);
|
||||
|
||||
// check if this field is a default field OR
|
||||
// check if this is none database related field
|
||||
if (in_array($field['base_name'], $default_fields)
|
||||
|| FieldHelper::check($field['type_name'], 'spacer')
|
||||
|| (isset($field['list']) && $field['list'] == 2)) // 2 = none database
|
||||
{
|
||||
$ignore_fields[$field['field']] = $field['field'];
|
||||
}
|
||||
|
||||
// return field
|
||||
return $field;
|
||||
|
||||
}, array_values($item->addfields)
|
||||
);
|
||||
|
||||
// build update SQL
|
||||
if ($old_view = $this->history->get(
|
||||
'admin_fields', $item->addfields_id
|
||||
))
|
||||
{
|
||||
// add new fields were added
|
||||
if (isset($old_view->addfields)
|
||||
&& JsonHelper::check(
|
||||
$old_view->addfields
|
||||
))
|
||||
{
|
||||
$this->updateSql->set(
|
||||
json_decode((string) $old_view->addfields, true),
|
||||
$item->addfields, 'field', $item->name_single_code,
|
||||
$ignore_fields
|
||||
);
|
||||
}
|
||||
// clear this data
|
||||
unset($old_view);
|
||||
}
|
||||
|
||||
// sort the fields according to order
|
||||
usort(
|
||||
$item->fields, function ($a, $b) {
|
||||
if (isset($a['order_list']) && isset($b['order_list']))
|
||||
{
|
||||
if ($a['order_list'] != 0 && $b['order_list'] != 0)
|
||||
{
|
||||
return $a['order_list'] - $b['order_list'];
|
||||
}
|
||||
elseif ($b['order_list'] != 0 && $a['order_list'] == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
elseif ($a['order_list'] != 0 && $b['order_list'] == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
);
|
||||
|
||||
// do some house cleaning (for fields)
|
||||
foreach ($item->fields as $field)
|
||||
{
|
||||
// so first we lock the field name in
|
||||
$field_name = $this->fieldName->get(
|
||||
$field, $item->name_list_code
|
||||
);
|
||||
|
||||
// check if the field changed since the last compilation
|
||||
// (default fields never change and are always added)
|
||||
if (!isset($ignore_fields[$field['field']])
|
||||
&& ObjectHelper::check(
|
||||
$field['settings']->history
|
||||
))
|
||||
{
|
||||
// check if the datatype changed
|
||||
if (isset($field['settings']->history->datatype))
|
||||
{
|
||||
$this->updateSql->set(
|
||||
$field['settings']->history->datatype,
|
||||
$field['settings']->datatype, 'field.datatype',
|
||||
$item->name_single_code . '.' . $field_name
|
||||
);
|
||||
}
|
||||
|
||||
// check if the datatype lenght changed
|
||||
if (isset($field['settings']->history->datalenght)
|
||||
&& isset($field['settings']->history->datalenght_other))
|
||||
{
|
||||
$this->updateSql->set(
|
||||
$field['settings']->history->datalenght
|
||||
. $field['settings']->history->datalenght_other,
|
||||
$field['settings']->datalenght
|
||||
. $field['settings']->datalenght_other,
|
||||
'field.lenght',
|
||||
$item->name_single_code . '.' . $field_name
|
||||
);
|
||||
}
|
||||
|
||||
// check if the name changed
|
||||
if (isset($field['settings']->history->xml)
|
||||
&& JsonHelper::check(
|
||||
$field['settings']->history->xml
|
||||
))
|
||||
{
|
||||
// only run if this is not an alias or a tag
|
||||
if ((!isset($field['alias']) || !$field['alias'])
|
||||
&& 'tag' !== $field['settings']->type_name)
|
||||
{
|
||||
// build temp field bucket
|
||||
$tmpfield = array();
|
||||
$tmpfield['settings'] = new \stdClass();
|
||||
|
||||
// convert the xml json string to normal string
|
||||
$tmpfield['settings']->xml
|
||||
= $this->customcode->update(
|
||||
json_decode(
|
||||
(string) $field['settings']->history->xml
|
||||
)
|
||||
);
|
||||
|
||||
// add properties from current field as it is generic
|
||||
$tmpfield['settings']->properties
|
||||
= $field['settings']->properties;
|
||||
// add the old name
|
||||
$tmpfield['settings']->name
|
||||
= $field['settings']->history->name;
|
||||
// add the field type from current field since it is generic
|
||||
$tmpfield['settings']->type_name
|
||||
= $field['settings']->type_name;
|
||||
// get the old name
|
||||
$old_field_name = $this->fieldName->get(
|
||||
$tmpfield
|
||||
);
|
||||
|
||||
// only run this if not a multi field
|
||||
if ($this->registry->get('unique.names.' . $item->name_list_code . '.names.' . $field_name) === null)
|
||||
{
|
||||
// this only works when the field is
|
||||
// not multiple of the same field
|
||||
$this->updateSql->set(
|
||||
$old_field_name, $field_name,
|
||||
'field.name',
|
||||
$item->name_single_code . '.'
|
||||
. $field_name
|
||||
);
|
||||
}
|
||||
elseif ($old_field_name !== $field_name)
|
||||
{
|
||||
// give a notice atleast that the multi fields
|
||||
// could have changed and no DB update was done
|
||||
$this->app->enqueueMessage(
|
||||
Text::_('COM_COMPONENTBUILDER_HR_HTHREEFIELD_NOTICEHTHREE'),
|
||||
'Notice'
|
||||
);
|
||||
$this->app->enqueueMessage(
|
||||
Text::sprintf(
|
||||
'You have a field called <b>%s</b> that has been added multiple times to the <b>%s</b> view, the name of that field has changed to <b>%s</b>. Normaly we would automaticly add the update SQL to your component, but with multiple fields this does not work automaticly since it could be that noting changed and it just seems like it did. Therefore you will have to do this manualy if it actualy did change!',
|
||||
$field_name,
|
||||
$item->name_single_code,
|
||||
$old_field_name
|
||||
), 'Notice'
|
||||
);
|
||||
}
|
||||
|
||||
// remove tmp
|
||||
unset($tmpfield);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unset($item->addfields);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,81 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Files & Folders Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Filesfolders
|
||||
{
|
||||
/**
|
||||
* Compiler Files Folders
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $keys = [
|
||||
'files' => 'files',
|
||||
'folders' => 'folders',
|
||||
'urls' => 'urls',
|
||||
'filesfullpath' => 'files',
|
||||
'foldersfullpath' => 'folders'
|
||||
];
|
||||
|
||||
/**
|
||||
* Set the file and folder data
|
||||
*
|
||||
* @param object $item The item data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
foreach ($this->keys as $target => $value)
|
||||
{
|
||||
// set the add target data
|
||||
$item->{'add' . $target} = (isset($item->{'add' . $target}) &&
|
||||
JsonHelper::check($item->{'add' . $target})) ?
|
||||
json_decode((string) $item->{'add' . $target}, true) : null;
|
||||
|
||||
// only continue if there are values
|
||||
if (ArrayHelper::check($item->{'add' . $target}))
|
||||
{
|
||||
if (isset($item->{$value})
|
||||
&& ArrayHelper::check($item->{$value}))
|
||||
{
|
||||
foreach ($item->{'add' . $target} as $taget)
|
||||
{
|
||||
$item->{$value}[] = $taget;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$item->{$value} = array_values(
|
||||
$item->{'add' . $target}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
unset($item->{'add' . $target});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,126 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HistoryInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Updatesql;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Admin View History Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Historyadminview
|
||||
{
|
||||
/**
|
||||
* The compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler history
|
||||
*
|
||||
* @var HistoryInterface
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected HistoryInterface $history;
|
||||
|
||||
/**
|
||||
* The compiler update sql
|
||||
*
|
||||
* @var Updatesql
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Updatesql $updatesql;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param HistoryInterface|null $history The compiler history object.
|
||||
* @param Updatesql|null $updatesql The compiler updatesql object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?HistoryInterface $history = null,
|
||||
?Updatesql $updatesql = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->history = $history ?: Compiler::_('History');
|
||||
$this->updatesql = $updatesql ?: Compiler::_('Model.Updatesql');
|
||||
}
|
||||
|
||||
/**
|
||||
* check if an update SQL is needed
|
||||
*
|
||||
* @param object $item The item data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
if ($old = $this->history->get('admin_view', $item->id))
|
||||
{
|
||||
// check if the view name changed
|
||||
if (StringHelper::check($old->name_single))
|
||||
{
|
||||
$this->updatesql->set(
|
||||
StringHelper::safe(
|
||||
$old->name_single
|
||||
), $item->name_single_code, 'table_name',
|
||||
$item->name_single_code
|
||||
);
|
||||
}
|
||||
|
||||
// loop the mysql table settings
|
||||
foreach ($this->config->mysql_table_keys as $mysql_table_key => $mysql_table_val)
|
||||
{
|
||||
// check if the table engine changed
|
||||
if (isset($old->{'mysql_table_' . $mysql_table_key})
|
||||
&& isset($item->{'mysql_table_' . $mysql_table_key}))
|
||||
{
|
||||
$this->updatesql->set(
|
||||
$old->{'mysql_table_' . $mysql_table_key},
|
||||
$item->{'mysql_table_' . $mysql_table_key},
|
||||
'table_' . $mysql_table_key, $item->name_single_code
|
||||
);
|
||||
}
|
||||
// check if there is no history on table engine, and it changed from the default/global
|
||||
elseif (isset($item->{'mysql_table_' . $mysql_table_key})
|
||||
&& StringHelper::check(
|
||||
$item->{'mysql_table_' . $mysql_table_key}
|
||||
)
|
||||
&& !is_numeric(
|
||||
$item->{'mysql_table_' . $mysql_table_key}
|
||||
))
|
||||
{
|
||||
$this->updatesql->set(
|
||||
$mysql_table_val['default'],
|
||||
$item->{'mysql_table_' . $mysql_table_key},
|
||||
'table_' . $mysql_table_key, $item->name_single_code
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,132 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HistoryInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Updatesql;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
use VDM\Joomla\Utilities\ObjectHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Component History Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Historycomponent
|
||||
{
|
||||
/**
|
||||
* The compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler history
|
||||
*
|
||||
* @var HistoryInterface
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected HistoryInterface $history;
|
||||
|
||||
/**
|
||||
* The compiler update sql
|
||||
*
|
||||
* @var Updatesql
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Updatesql $updatesql;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param HistoryInterface|null $history The compiler history object.
|
||||
* @param Updatesql|null $updatesql The compiler updatesql object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?HistoryInterface $history = null,
|
||||
?Updatesql $updatesql = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->history = $history ?: Compiler::_('History');
|
||||
$this->updatesql = $updatesql ?: Compiler::_('Model.Updatesql');
|
||||
}
|
||||
|
||||
/**
|
||||
* check if an update SQL is needed
|
||||
*
|
||||
* @param object $item The item data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
$old_admin_views = $this->history->get(
|
||||
'component_admin_views', $item->addadmin_views_id
|
||||
);
|
||||
$old_component = $this->history->get(
|
||||
'joomla_component', $this->config->component_id
|
||||
);
|
||||
|
||||
if ($old_component || $old_admin_views)
|
||||
{
|
||||
if (ObjectHelper::check($old_admin_views))
|
||||
{
|
||||
// add new views if found
|
||||
if (isset($old_admin_views->addadmin_views)
|
||||
&& JsonHelper::check(
|
||||
$old_admin_views->addadmin_views
|
||||
))
|
||||
{
|
||||
$this->updatesql->set(
|
||||
json_decode((string) $old_admin_views->addadmin_views, true),
|
||||
$item->addadmin_views, 'adminview'
|
||||
);
|
||||
}
|
||||
|
||||
// check if a new version was manually set
|
||||
if (ObjectHelper::check($old_component))
|
||||
{
|
||||
$old_component_version = preg_replace(
|
||||
'/[^0-9.]+/', '', (string) $old_component->component_version
|
||||
);
|
||||
if ($old_component_version != $this->config->component_version)
|
||||
{
|
||||
// yes, this is a new version, this mean there may
|
||||
// be manual sql and must be checked and updated
|
||||
$item->old_component_version
|
||||
= $old_component_version;
|
||||
}
|
||||
// clear this data
|
||||
unset($old_component);
|
||||
}
|
||||
|
||||
// clear this data
|
||||
unset($old_admin_views);
|
||||
}
|
||||
}
|
||||
|
||||
// unset original value
|
||||
unset($item->addadmin_views);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,128 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Admin View Javascript Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Javascriptadminview
|
||||
{
|
||||
/**
|
||||
* The scripter add array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $scripter = [
|
||||
'javascript_view_file',
|
||||
'javascript_view_footer',
|
||||
'javascript_views_file',
|
||||
'javascript_views_footer'
|
||||
];
|
||||
|
||||
/**
|
||||
* The gui mapper array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $guiMapper = [
|
||||
'table' => 'admin_view',
|
||||
'id' => null,
|
||||
'field' => null,
|
||||
'type' => 'js',
|
||||
'prefix' => PHP_EOL
|
||||
];
|
||||
|
||||
/**
|
||||
* Compiler Customcode Dispenser
|
||||
*
|
||||
* @var Dispenser
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Dispenser $dispenser;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Dispenser|null $dispenser The compiler customcode dispenser
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Dispenser $dispenser = null)
|
||||
{
|
||||
$this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Admin View Javascript
|
||||
*
|
||||
* @param object $item The item data
|
||||
* @param object $table The table
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item, string $table = 'admin_view')
|
||||
{
|
||||
// set some gui mapper values
|
||||
$this->guiMapper['table'] = $table;
|
||||
$this->guiMapper['id'] = (int) $item->id;
|
||||
|
||||
foreach ($this->scripter as $scripter)
|
||||
{
|
||||
if (isset($item->{'add_' . $scripter})
|
||||
&& $item->{'add_' . $scripter} == 1
|
||||
&& StringHelper::check($item->$scripter))
|
||||
{
|
||||
$scripter_target = str_replace(
|
||||
'javascript_', '', (string) $scripter
|
||||
);
|
||||
|
||||
// update GUI mapper field
|
||||
$this->guiMapper['field'] = $scripter;
|
||||
$this->dispenser->set(
|
||||
$item->{$scripter},
|
||||
$scripter_target,
|
||||
$item->name_single_code,
|
||||
null,
|
||||
$this->guiMapper,
|
||||
true,
|
||||
true,
|
||||
true
|
||||
);
|
||||
|
||||
// check if a token must be set
|
||||
if ((strpos((string) $item->$scripter, "token") !== false
|
||||
|| strpos(
|
||||
(string) $item->$scripter, "task=ajax"
|
||||
) !== false) && !$this->dispenser->hub['token'][$item->name_single_code])
|
||||
{
|
||||
$this->dispenser->hub['token'][$item->name_single_code]
|
||||
= true;
|
||||
}
|
||||
|
||||
unset($item->{$scripter});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,116 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Javascript Custom View Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Javascriptcustomview
|
||||
{
|
||||
/**
|
||||
* The areas add array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $areas = [
|
||||
'javascript_file',
|
||||
'js_document'
|
||||
];
|
||||
|
||||
/**
|
||||
* The gui mapper array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $guiMapper = [
|
||||
'table' => null,
|
||||
'id' => null,
|
||||
'field' => null,
|
||||
'type' => 'js'
|
||||
];
|
||||
|
||||
/**
|
||||
* Compiler Customcode
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Compiler Customcode in Gui
|
||||
*
|
||||
* @var Gui
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Gui $gui;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
* @param Gui|null $gui The compiler customcode gui.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Customcode $customcode = null, ?Gui $gui = null)
|
||||
{
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Javascript code
|
||||
*
|
||||
* @param object $item The item data
|
||||
* @param string $table The table
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item, string $table = 'site_view')
|
||||
{
|
||||
// set some gui mapper values
|
||||
$this->guiMapper['table'] = $table;
|
||||
$this->guiMapper['id'] = (int) $item->id;
|
||||
|
||||
foreach ($this->areas as $area)
|
||||
{
|
||||
if (isset($item->{'add_' . $area})
|
||||
&& $item->{'add_' . $area} == 1
|
||||
&& StringHelper::check($item->{$area}))
|
||||
{
|
||||
// update GUI mapper field
|
||||
$this->guiMapper['field'] = $area;
|
||||
$item->{$area} = $this->gui->set(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $item->{$area})
|
||||
),
|
||||
$this->guiMapper
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,84 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\Data as Module;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Joomla Modules Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Joomlamodules
|
||||
{
|
||||
/**
|
||||
* Compiler Joomla Module Data Class
|
||||
*
|
||||
* @var Module
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Module $module;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Module|null $module The compiler Joomla module data object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Module $module = null)
|
||||
{
|
||||
$this->module = $module ?: Compiler::_('Joomlamodule.Data');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Joomla Module
|
||||
*
|
||||
* @param object $item The item data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
// get all modules
|
||||
$item->addjoomla_modules = (isset($item->addjoomla_modules)
|
||||
&& JsonHelper::check($item->addjoomla_modules))
|
||||
? json_decode((string) $item->addjoomla_modules, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->addjoomla_modules))
|
||||
{
|
||||
$joomla_modules = array_map(
|
||||
function ($array) use (&$item) {
|
||||
// only load the modules whose target association calls for it
|
||||
if (!isset($array['target']) || $array['target'] != 2)
|
||||
{
|
||||
return $this->module->set(
|
||||
$array['module'], $item
|
||||
);
|
||||
}
|
||||
|
||||
return null;
|
||||
}, array_values($item->addjoomla_modules)
|
||||
);
|
||||
}
|
||||
|
||||
unset($item->addjoomla_modules);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,84 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Joomlaplugin\Data as Plugin;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Joomla Plugins Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Joomlaplugins
|
||||
{
|
||||
/**
|
||||
* Compiler Joomla Plugin Data Class
|
||||
*
|
||||
* @var Plugin
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Plugin $plugin;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Plugin|null $plugin The compiler Joomla plugin data object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Plugin $plugin = null)
|
||||
{
|
||||
$this->plugin = $plugin ?: Compiler::_('Joomlaplugin.Data');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Joomla Plugins
|
||||
*
|
||||
* @param object $item The item data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
// get all plugins
|
||||
$item->addjoomla_plugins = (isset($item->addjoomla_plugins)
|
||||
&& JsonHelper::check($item->addjoomla_plugins))
|
||||
? json_decode((string) $item->addjoomla_plugins, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->addjoomla_plugins))
|
||||
{
|
||||
$joomla_plugins = array_map(
|
||||
function ($array) use (&$item) {
|
||||
// only load the plugins whose target association calls for it
|
||||
if (!isset($array['target']) || $array['target'] != 2)
|
||||
{
|
||||
return $this->plugin->set(
|
||||
$array['plugin'], $item
|
||||
);
|
||||
}
|
||||
|
||||
return null;
|
||||
}, array_values($item->addjoomla_plugins)
|
||||
);
|
||||
}
|
||||
|
||||
unset($item->addjoomla_plugins);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,115 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Library\Data as Library;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Libraries Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Libraries
|
||||
{
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* Compiler Registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Compiler Library Data
|
||||
*
|
||||
* @var Library
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Library $library;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config.
|
||||
* @param Registry|null $registry The compiler registry.
|
||||
* @param Library|null $library The compiler library data object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null, ?Library $library = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->library = $library ?: Compiler::_('Library.Data');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Libraries
|
||||
*
|
||||
* @param string $key The key mapper
|
||||
* @param object $item The item data
|
||||
* @param string|null $target The area being targeted
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(string $key, object &$item, string $target = null)
|
||||
{
|
||||
// set the target
|
||||
$target = $target ?: $this->config->build_target;
|
||||
|
||||
// make sure json become array
|
||||
if (JsonHelper::check($item->libraries))
|
||||
{
|
||||
$item->libraries = json_decode((string) $item->libraries, true);
|
||||
}
|
||||
|
||||
// if we have an array add it
|
||||
if (ArrayHelper::check($item->libraries))
|
||||
{
|
||||
foreach ($item->libraries as $library)
|
||||
{
|
||||
if (!$this->registry->exists('builder.library_manager.' .
|
||||
$target . '.' . $key . '.' . (int) $library) && $this->library->get((int) $library))
|
||||
{
|
||||
$this->registry->set('builder.library_manager.' .
|
||||
$target . '.' . $key . '.' . (int) $library, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif (is_numeric($item->libraries)
|
||||
&& !$this->registry->exists('builder.library_manager.' .
|
||||
$target . '.' . $key . '.' . (int) $item->libraries)
|
||||
&& $this->library->get((int) $item->libraries))
|
||||
{
|
||||
$this->registry->set('builder.library_manager.' .
|
||||
$target . '.' . $key . '.' . (int) $item->libraries, true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,76 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Linked Views Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Linkedviews
|
||||
{
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Registry $registry = null)
|
||||
{
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the linked views
|
||||
*
|
||||
* @param object $item The view data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
$item->addlinked_views = (isset($item->addlinked_views)
|
||||
&& JsonHelper::check($item->addlinked_views))
|
||||
? json_decode((string) $item->addlinked_views, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->addlinked_views))
|
||||
{
|
||||
// setup linked views to global data sets
|
||||
$this->registry->set('builder.linked_admin_views.' . $item->name_single_code,
|
||||
array_values(
|
||||
$item->addlinked_views
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
unset($item->addlinked_views);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,185 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Utilities\Component\Helper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Auto Loader Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Loader
|
||||
{
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatically load some stuff
|
||||
*
|
||||
* @param string $key The key mapper
|
||||
* @param string $content The content to search through
|
||||
* @param string|null $target The area being targeted
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(string $key, string $content, ?string $target = null)
|
||||
{
|
||||
// set the target
|
||||
$target = $target ?: $this->config->build_target;
|
||||
|
||||
// check for footable
|
||||
if (!$this->registry->
|
||||
exists('builder.footable_scripts.' . $target . '.' . $key))
|
||||
{
|
||||
if ($this->getFootableScripts($content))
|
||||
{
|
||||
$this->registry->
|
||||
set('builder.footable_scripts.' . $target . '.' . $key, true);
|
||||
|
||||
$this->config->set('footable ', true);
|
||||
}
|
||||
}
|
||||
|
||||
// check for google chart
|
||||
if (!$this->registry->
|
||||
exists('builder.google_chart.' . $target . '.' . $key))
|
||||
{
|
||||
if ($this->getGoogleChart($content))
|
||||
{
|
||||
$this->registry->
|
||||
set('builder.google_chart.' . $target . '.' . $key, true);
|
||||
|
||||
$this->config->set('google_chart', true);
|
||||
}
|
||||
}
|
||||
|
||||
// check for get module
|
||||
if (!$this->registry->
|
||||
exists('builder.get_module.' . $target . '.' . $key))
|
||||
{
|
||||
if ($this->getGetModule($content))
|
||||
{
|
||||
$this->registry->
|
||||
set('builder.get_module.' . $target . '.' . $key, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatically load uikit version 2 data files
|
||||
*
|
||||
* @param string $key The key mapper
|
||||
* @param string $content The content to search through
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function uikit(string $key, string $content)
|
||||
{
|
||||
// get/set uikit state
|
||||
$uikit = false;
|
||||
$uikit_ = $this->config->get('uikit', 0);
|
||||
|
||||
// add uikit if required
|
||||
if (2 == $uikit_ || 1 == $uikit_)
|
||||
{
|
||||
$uikit = true;
|
||||
}
|
||||
|
||||
// load uikit
|
||||
if ($uikit)
|
||||
{
|
||||
// set uikit to views TODO: convert this getUikitComp to a class
|
||||
if (($found = Helper::_('getUikitComp',
|
||||
[$content, (array) $this->registry->get('builder.uikit_comp.' . $key, [])]
|
||||
)) !== false)
|
||||
{
|
||||
$this->registry->set('builder.uikit_comp.' . $key, $found);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for footable scripts
|
||||
*
|
||||
* @param string $content The content to check
|
||||
*
|
||||
* @return boolean True if found
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected function getFootableScripts(string &$content): bool
|
||||
{
|
||||
return strpos($content, 'footable') !== false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for getModules script
|
||||
*
|
||||
* @param string $content The content to check
|
||||
*
|
||||
* @return boolean True if found
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected function getGetModule(string &$content): bool
|
||||
{
|
||||
return strpos($content, 'this->getModules(') !== false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for get Google Chart script
|
||||
*
|
||||
* @param string $content The content to check
|
||||
*
|
||||
* @return boolean True if found
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected function getGoogleChart(string &$content): bool
|
||||
{
|
||||
return strpos($content, 'Chartbuilder(') !== false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,95 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model MySQL Settings Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Mysqlsettings
|
||||
{
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* Compiler Registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config.
|
||||
* @param Registry|null $registry The compiler registry.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set MySQL table settings
|
||||
*
|
||||
* @param object $item The item data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
foreach (
|
||||
$this->config->mysql_table_keys as $mysql_table_key => $mysql_table_val
|
||||
)
|
||||
{
|
||||
if (isset($item->{'mysql_table_' . $mysql_table_key})
|
||||
&& StringHelper::check(
|
||||
$item->{'mysql_table_' . $mysql_table_key}
|
||||
)
|
||||
&& !is_numeric($item->{'mysql_table_' . $mysql_table_key}))
|
||||
{
|
||||
$this->registry->set('builder.mysql_table_setting.' . $item->name_single_code . '.' .
|
||||
$mysql_table_key, $item->{'mysql_table_' . $mysql_table_key}
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->registry->set('builder.mysql_table_setting.' . $item->name_single_code . '.' .
|
||||
$mysql_table_key, $mysql_table_val['default']
|
||||
);
|
||||
}
|
||||
|
||||
// remove the table values since we moved to another object
|
||||
unset($item->{'mysql_table_' . $mysql_table_key});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Permissions Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Permissions
|
||||
{
|
||||
/**
|
||||
* Set the local tabs
|
||||
*
|
||||
* @param object $item The view data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
$item->addpermissions = (isset($item->addpermissions)
|
||||
&& JsonHelper::check($item->addpermissions))
|
||||
? json_decode((string) $item->addpermissions, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->addpermissions))
|
||||
{
|
||||
$item->permissions = array_values($item->addpermissions);
|
||||
}
|
||||
|
||||
unset($item->addpermissions);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,139 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Templatelayout\Data as Templatelayout;
|
||||
|
||||
|
||||
/**
|
||||
* Model PHP Admin View Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Phpadminview
|
||||
{
|
||||
/**
|
||||
* The areas add array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $areas = [
|
||||
'php_getitem',
|
||||
'php_before_save',
|
||||
'php_save',
|
||||
'php_getform',
|
||||
'php_postsavehook',
|
||||
'php_getitems',
|
||||
'php_getitems_after_all',
|
||||
'php_getlistquery',
|
||||
'php_allowadd',
|
||||
'php_allowedit',
|
||||
'php_before_cancel',
|
||||
'php_after_cancel',
|
||||
'php_before_delete',
|
||||
'php_after_delete',
|
||||
'php_before_publish',
|
||||
'php_after_publish',
|
||||
'php_batchcopy',
|
||||
'php_batchmove',
|
||||
'php_document'
|
||||
];
|
||||
|
||||
/**
|
||||
* The gui mapper array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $guiMapper = [
|
||||
'table' => 'admin_view',
|
||||
'id' => null,
|
||||
'field' => null,
|
||||
'type' => 'php'
|
||||
];
|
||||
|
||||
/**
|
||||
* Compiler Customcode Dispenser
|
||||
*
|
||||
* @var Dispenser
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Dispenser $dispenser;
|
||||
|
||||
/**
|
||||
* Compiler Template Layout Data
|
||||
*
|
||||
* @var Templatelayout
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Templatelayout $templateLayout;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Dispenser|null $dispenser The compiler customcode dispenser
|
||||
* @param Templatelayout|null $templateLayout The template layout data
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Dispenser $dispenser = null, ?Templatelayout $templateLayout = null)
|
||||
{
|
||||
$this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
|
||||
$this->templateLayout = $templateLayout ?: Compiler::_('Templatelayout.Data');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set PHP code
|
||||
*
|
||||
* @param object $item The item data
|
||||
* @param string $table The table
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item, string $table = 'admin_view')
|
||||
{
|
||||
// set some gui mapper values
|
||||
$this->guiMapper['table'] = $table;
|
||||
$this->guiMapper['id'] = (int) $item->id;
|
||||
|
||||
foreach ($this->areas as $area)
|
||||
{
|
||||
if (isset($item->{'add_' . $area})
|
||||
&& $item->{'add_' . $area} == 1)
|
||||
{
|
||||
// update GUI mapper field
|
||||
$this->guiMapper['field'] = $area;
|
||||
$this->dispenser->set(
|
||||
$item->{$area},
|
||||
$area,
|
||||
$item->name_single_code,
|
||||
null,
|
||||
$this->guiMapper
|
||||
);
|
||||
|
||||
// check if we have template or layouts to load
|
||||
$this->templateLayout->set(
|
||||
$item->{$area}, $item->name_single_code
|
||||
);
|
||||
|
||||
unset($item->{$area});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,152 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Loader;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Templatelayout\Data as Templatelayout;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model PHP Custom View Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Phpcustomview
|
||||
{
|
||||
/**
|
||||
* The areas add array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $areas = [
|
||||
'php_view',
|
||||
'php_jview',
|
||||
'php_jview_display',
|
||||
'php_document'
|
||||
];
|
||||
|
||||
/**
|
||||
* The gui mapper array
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $guiMapper = [
|
||||
'table' => null,
|
||||
'id' => null,
|
||||
'field' => null,
|
||||
'type' => 'php'
|
||||
];
|
||||
|
||||
/**
|
||||
* Compiler Customcode
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Compiler Customcode in Gui
|
||||
*
|
||||
* @var Gui
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Gui $gui;
|
||||
|
||||
/**
|
||||
* Compiler Auto Loader
|
||||
*
|
||||
* @var Loader
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Loader $loader;
|
||||
|
||||
/**
|
||||
* Compiler Template Layout Data
|
||||
*
|
||||
* @var Templatelayout
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Templatelayout $templateLayout;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
* @param Gui|null $gui The compiler customcode gui.
|
||||
* @param Loader|null $loader The compiler loader object.
|
||||
* @param Templatelayout|null $templateLayout The template layout data.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Customcode $customcode = null, ?Gui $gui = null,
|
||||
?Loader $loader = null, ?Templatelayout $templateLayout = null)
|
||||
{
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
|
||||
$this->loader = $loader ?: Compiler::_('Model.Loader');
|
||||
$this->templateLayout = $templateLayout ?: Compiler::_('Templatelayout.Data');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set PHP code
|
||||
*
|
||||
* @param object $item The item data
|
||||
* @param string $table The table
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item, string $table = 'site_view')
|
||||
{
|
||||
// set some gui mapper values
|
||||
$this->guiMapper['table'] = $table;
|
||||
$this->guiMapper['id'] = (int) $item->id;
|
||||
|
||||
foreach ($this->areas as $area)
|
||||
{
|
||||
if (isset($item->{'add_' . $area})
|
||||
&& $item->{'add_' . $area} == 1
|
||||
&& StringHelper::check($item->$area))
|
||||
{
|
||||
// update GUI mapper field
|
||||
$this->guiMapper['field'] = $area;
|
||||
$item->{$area} = $this->gui->set(
|
||||
$this->customcode->update(
|
||||
base64_decode((string) $item->{$area})
|
||||
),
|
||||
$this->guiMapper
|
||||
);
|
||||
|
||||
// check if we have template or layouts to load
|
||||
$this->templateLayout->set(
|
||||
$item->{$area}, $item->code
|
||||
);
|
||||
|
||||
// auto loaders
|
||||
$this->loader->set($item->code, $item->{$area});
|
||||
|
||||
// set uikit version 2
|
||||
$this->loader->uikit($item->code, $item->{$area});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,177 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Language;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Relations Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Relations
|
||||
{
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Compiler Language
|
||||
*
|
||||
* @var Language
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Language $language;
|
||||
|
||||
/**
|
||||
* Compiler Customcode
|
||||
*
|
||||
* @var Customcode
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Customcode $customcode;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
* @param Language|null $language The compiler Language object.
|
||||
* @param Customcode|null $customcode The compiler customcode object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null,
|
||||
?Language $language = null, ?Customcode $customcode = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->language = $language ?: Compiler::_('Language');
|
||||
$this->customcode = $customcode ?: Compiler::_('Customcode');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the relations
|
||||
*
|
||||
* @param object $item The view data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
$item->addrelations = (isset($item->addrelations)
|
||||
&& JsonHelper::check($item->addrelations))
|
||||
? json_decode((string) $item->addrelations, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->addrelations))
|
||||
{
|
||||
foreach ($item->addrelations as $nr => $relationsValue)
|
||||
{
|
||||
// only add if list view field is selected and joined fields are set
|
||||
if (isset($relationsValue['listfield'])
|
||||
&& is_numeric(
|
||||
$relationsValue['listfield']
|
||||
)
|
||||
&& $relationsValue['listfield'] > 0
|
||||
&& isset($relationsValue['area'])
|
||||
&& is_numeric($relationsValue['area'])
|
||||
&& $relationsValue['area'] > 0)
|
||||
{
|
||||
// do a dynamic update on the set values
|
||||
if (isset($relationsValue['set'])
|
||||
&& StringHelper::check(
|
||||
$relationsValue['set']
|
||||
))
|
||||
{
|
||||
$relationsValue['set'] = $this->customcode->update(
|
||||
$relationsValue['set']
|
||||
);
|
||||
}
|
||||
|
||||
// load the field relations
|
||||
$this->registry->set('builder.field_relations.'
|
||||
. $item->name_list_code . '.' . (int) $relationsValue['listfield']
|
||||
. '.' . (int) $relationsValue['area'], $relationsValue);
|
||||
|
||||
// load the list joints
|
||||
if (isset($relationsValue['joinfields'])
|
||||
&& ArrayHelper::check(
|
||||
$relationsValue['joinfields']
|
||||
))
|
||||
{
|
||||
foreach ($relationsValue['joinfields'] as $join)
|
||||
{
|
||||
$this->registry->set('builder.list_join.' . $item->name_list_code . '.' . (int) $join, (int) $join);
|
||||
}
|
||||
}
|
||||
|
||||
// set header over-ride
|
||||
if (isset($relationsValue['column_name'])
|
||||
&& StringHelper::check(
|
||||
$relationsValue['column_name']
|
||||
))
|
||||
{
|
||||
$check_column_name = trim(
|
||||
strtolower((string) $relationsValue['column_name'])
|
||||
);
|
||||
|
||||
// confirm it should really make the over ride
|
||||
if ('default' !== $check_column_name)
|
||||
{
|
||||
$column_name_lang = $this->config->lang_prefix . '_'
|
||||
. StringHelper::safe(
|
||||
$item->name_list_code, 'U'
|
||||
) . '_' . StringHelper::safe(
|
||||
$relationsValue['column_name'], 'U'
|
||||
);
|
||||
$this->language->set(
|
||||
'admin', $column_name_lang,
|
||||
$relationsValue['column_name']
|
||||
);
|
||||
$this->registry->set('builder.list_head_override.' .
|
||||
$item->name_list_code . '.' . (int) $relationsValue['listfield'],
|
||||
$column_name_lang
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unset($item->addrelations);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,109 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customview\Data as Customview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\ObjectHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Site Views Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Siteviews
|
||||
{
|
||||
/**
|
||||
* Component Site view Data
|
||||
*
|
||||
* @var Customview
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Customview $site;
|
||||
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Customview|null $site The site view data object.
|
||||
* @param Config|null $config The compiler config object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Customview $site = null, ?Config $config = null)
|
||||
{
|
||||
$this->site = $site ?: Compiler::_('Customview.Data');
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set site view data
|
||||
*
|
||||
* @param object $item The item data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
$item->addsite_views = (isset($item->addsite_views)
|
||||
&& JsonHelper::check($item->addsite_views))
|
||||
? json_decode((string) $item->addsite_views, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->addsite_views))
|
||||
{
|
||||
$this->config->lang_target = 'site';
|
||||
$this->config->build_target = 'site';
|
||||
|
||||
// build the site_views settings
|
||||
$item->site_views = array_map(
|
||||
function ($array) {
|
||||
// has become a legacy issue, can't remove this
|
||||
$array['view'] = $array['siteview'];
|
||||
$array['settings'] = $this->site->get(
|
||||
$array['view']
|
||||
);
|
||||
|
||||
return array_map(
|
||||
function ($value) {
|
||||
if (!ArrayHelper::check($value)
|
||||
&& !ObjectHelper::check($value)
|
||||
&& strval($value) === strval(intval($value)))
|
||||
{
|
||||
return (int) $value;
|
||||
}
|
||||
|
||||
return $value;
|
||||
}, $array
|
||||
);
|
||||
}, array_values($item->addsite_views)
|
||||
);
|
||||
|
||||
// unset original value
|
||||
unset($item->addsite_views);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Sqldump;
|
||||
|
||||
|
||||
/**
|
||||
* Model Sql Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Sql
|
||||
{
|
||||
/**
|
||||
* Compiler Customcode Dispenser
|
||||
*
|
||||
* @var Dispenser
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Dispenser $dispenser;
|
||||
|
||||
/**
|
||||
* Compiler SQL Dump
|
||||
*
|
||||
* @var Sqldump
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Sqldump $dump;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Dispenser|null $dispenser The compiler customcode dispenser.
|
||||
* @param Sqldump|null $dump The compiler SQL dump.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Dispenser $dispenser = null, ?Sqldump $dump = null)
|
||||
{
|
||||
$this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
|
||||
$this->dump = $dump ?: Compiler::_('Model.Sqldump');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set sql
|
||||
*
|
||||
* @param object $item The item data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
if (isset($item->add_sql) && $item->add_sql == 1 && isset($item->source))
|
||||
{
|
||||
if ($item->source == 1 && isset($item->tables) &&
|
||||
($string = $this->dump->get(
|
||||
$item->tables, $item->name_single_code, $item->id
|
||||
)) !== null)
|
||||
{
|
||||
// build and add the SQL dump
|
||||
// we add this directly to avoid
|
||||
// dynamic set behaviour
|
||||
// TODO: create a function in dispenser to manage these
|
||||
$this->dispenser->hub['sql'][$item->name_single_code]
|
||||
= $string;
|
||||
}
|
||||
elseif ($item->source == 2 && isset($item->sql))
|
||||
{
|
||||
// add the SQL dump string
|
||||
$this->dispenser->set(
|
||||
$item->sql,
|
||||
'sql',
|
||||
$item->name_single_code
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
unset($item->tables);
|
||||
unset($item->sql);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,321 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* SQL Dump Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Sqldump
|
||||
{
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Database object to query local DB
|
||||
*
|
||||
* @var \JDatabaseDriver
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected \JDatabaseDriver $db;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
* @param \JDatabaseDriver|null $db The database object.
|
||||
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Registry $registry = null, ?\JDatabaseDriver $db = null)
|
||||
{
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->db = $db ?: Factory::getDbo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get SQL Dump
|
||||
*
|
||||
* @param array $tables The tables to use in build
|
||||
* @param string $view The target view/table to dump in
|
||||
* @param int $view_id The id of the target view
|
||||
*
|
||||
* @return string|null The data found with the alias
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function get(array $tables, string $view, int $view_id): ?string
|
||||
{
|
||||
// first build a query statement to get all the data (insure it must be added - check the tweaking)
|
||||
if (ArrayHelper::check($tables)
|
||||
&& $this->registry-> // default is to add
|
||||
get('builder.sql_tweak.' . (int) $view_id . '.add', true))
|
||||
{
|
||||
$counter = 'a';
|
||||
|
||||
// Create a new query object.
|
||||
$query = $this->db->getQuery(true);
|
||||
|
||||
// switch to only trigger the run of the query if we have tables to query
|
||||
$run_query = false;
|
||||
foreach ($tables as $table)
|
||||
{
|
||||
if (isset($table['table']))
|
||||
{
|
||||
if ($counter === 'a')
|
||||
{
|
||||
// the main table fields
|
||||
if (strpos((string) $table['sourcemap'], PHP_EOL) !== false)
|
||||
{
|
||||
$fields = explode(PHP_EOL, (string) $table['sourcemap']);
|
||||
if (ArrayHelper::check($fields))
|
||||
{
|
||||
// reset array buckets
|
||||
$sourceArray = array();
|
||||
$targetArray = array();
|
||||
foreach ($fields as $field)
|
||||
{
|
||||
if (strpos($field, "=>") !== false)
|
||||
{
|
||||
list($source, $target) = explode(
|
||||
"=>", $field
|
||||
);
|
||||
$sourceArray[] = $counter . '.' . trim(
|
||||
$source
|
||||
);
|
||||
$targetArray[] = trim($target);
|
||||
}
|
||||
}
|
||||
if (ArrayHelper::check(
|
||||
$sourceArray
|
||||
)
|
||||
&& ArrayHelper::check(
|
||||
$targetArray
|
||||
))
|
||||
{
|
||||
// add to query
|
||||
$query->select(
|
||||
$this->db->quoteName(
|
||||
$sourceArray, $targetArray
|
||||
)
|
||||
);
|
||||
$query->from(
|
||||
'#__' . $table['table'] . ' AS a'
|
||||
);
|
||||
$run_query = true;
|
||||
}
|
||||
// we may need to filter the selection
|
||||
if (($ids_ = $this->registry->
|
||||
get('builder.sql_tweak.' . (int) $view_id . '.where', null)) !== null)
|
||||
{
|
||||
// add to query the where filter
|
||||
$query->where(
|
||||
'a.id IN (' . $ids_ . ')'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// the other tables
|
||||
if (strpos((string) $table['sourcemap'], PHP_EOL) !== false)
|
||||
{
|
||||
$fields = explode(PHP_EOL, (string) $table['sourcemap']);
|
||||
if (ArrayHelper::check($fields))
|
||||
{
|
||||
// reset array buckets
|
||||
$sourceArray = array();
|
||||
$targetArray = array();
|
||||
foreach ($fields as $field)
|
||||
{
|
||||
if (strpos($field, "=>") !== false)
|
||||
{
|
||||
list($source, $target) = explode(
|
||||
"=>", $field
|
||||
);
|
||||
$sourceArray[] = $counter . '.' . trim(
|
||||
$source
|
||||
);
|
||||
$targetArray[] = trim($target);
|
||||
}
|
||||
if (strpos($field, "==") !== false)
|
||||
{
|
||||
list($aKey, $bKey) = explode(
|
||||
"==", $field
|
||||
);
|
||||
// add to query
|
||||
$query->join(
|
||||
'LEFT', $this->db->quoteName(
|
||||
'#__' . $table['table'],
|
||||
$counter
|
||||
) . ' ON (' . $this->db->quoteName(
|
||||
'a.' . trim($aKey)
|
||||
) . ' = ' . $this->db->quoteName(
|
||||
$counter . '.' . trim($bKey)
|
||||
) . ')'
|
||||
);
|
||||
}
|
||||
}
|
||||
if (ArrayHelper::check(
|
||||
$sourceArray
|
||||
)
|
||||
&& ArrayHelper::check(
|
||||
$targetArray
|
||||
))
|
||||
{
|
||||
// add to query
|
||||
$query->select(
|
||||
$this->db->quoteName(
|
||||
$sourceArray, $targetArray
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$counter++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// see where
|
||||
// var_dump($view);
|
||||
// jexit();
|
||||
}
|
||||
}
|
||||
|
||||
// check if we should run query
|
||||
if ($run_query)
|
||||
{
|
||||
// now get the data
|
||||
$this->db->setQuery($query);
|
||||
$this->db->execute();
|
||||
if ($this->db->getNumRows())
|
||||
{
|
||||
// get the data
|
||||
$data = $this->db->loadObjectList();
|
||||
|
||||
// start building the MySql dump
|
||||
$dump = "--";
|
||||
$dump .= PHP_EOL . "-- Dumping data for table `#__"
|
||||
. Placefix::_("component") . "_" . $view
|
||||
. "`";
|
||||
$dump .= PHP_EOL . "--";
|
||||
$dump .= PHP_EOL . PHP_EOL . "INSERT INTO `#__" . Placefix::_("component") . "_" . $view . "` (";
|
||||
foreach ($data as $line)
|
||||
{
|
||||
$comaSet = 0;
|
||||
foreach ($line as $fieldName => $fieldValue)
|
||||
{
|
||||
if ($comaSet == 0)
|
||||
{
|
||||
$dump .= $this->db->quoteName($fieldName);
|
||||
}
|
||||
else
|
||||
{
|
||||
$dump .= ", " . $this->db->quoteName(
|
||||
$fieldName
|
||||
);
|
||||
}
|
||||
$comaSet++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
$dump .= ") VALUES";
|
||||
$coma = 0;
|
||||
foreach ($data as $line)
|
||||
{
|
||||
if ($coma == 0)
|
||||
{
|
||||
$dump .= PHP_EOL . "(";
|
||||
}
|
||||
else
|
||||
{
|
||||
$dump .= "," . PHP_EOL . "(";
|
||||
}
|
||||
$comaSet = 0;
|
||||
foreach ($line as $fieldName => $fieldValue)
|
||||
{
|
||||
if ($comaSet == 0)
|
||||
{
|
||||
$dump .= $this->escape($fieldValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
$dump .= ", " . $this->escape(
|
||||
$fieldValue
|
||||
);
|
||||
}
|
||||
$comaSet++;
|
||||
}
|
||||
$dump .= ")";
|
||||
$coma++;
|
||||
}
|
||||
$dump .= ";";
|
||||
|
||||
// return build dump query
|
||||
return $dump;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Escape the values for a SQL dump
|
||||
*
|
||||
* @param string|array $value the value to escape
|
||||
*
|
||||
* @return string|array on success with escaped string
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected function escape($value)
|
||||
{
|
||||
// if array then return mapped
|
||||
if (ArrayHelper::check($value))
|
||||
{
|
||||
return array_map(__METHOD__, $value);
|
||||
}
|
||||
|
||||
// if string make sure it is correctly escaped
|
||||
if (StringHelper::check($value) && !is_numeric($value))
|
||||
{
|
||||
return $this->db->quote($value);
|
||||
}
|
||||
|
||||
// if empty value return place holder
|
||||
if (empty($value))
|
||||
{
|
||||
return "''";
|
||||
}
|
||||
|
||||
// if not array or string then return number
|
||||
return $value;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,180 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\ObjectHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Sql Tweaking Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Sqltweaking
|
||||
{
|
||||
/**
|
||||
* Compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Registry $registry = null)
|
||||
{
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set sql tweaking if needed
|
||||
*
|
||||
* @param object $item The extension data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
// set the sql_tweak data
|
||||
$item->sql_tweak = (isset($item->sql_tweak)
|
||||
&& JsonHelper::check($item->sql_tweak))
|
||||
? json_decode((string) $item->sql_tweak, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->sql_tweak))
|
||||
{
|
||||
// build the tweak settings
|
||||
$this->tweak(
|
||||
array_map(
|
||||
fn($array) => array_map(
|
||||
function ($value) {
|
||||
if (!ArrayHelper::check($value)
|
||||
&& !ObjectHelper::check(
|
||||
$value
|
||||
)
|
||||
&& strval($value) === strval(
|
||||
intval($value)
|
||||
))
|
||||
{
|
||||
return (int) $value;
|
||||
}
|
||||
|
||||
return $value;
|
||||
}, $array
|
||||
), array_values($item->sql_tweak)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
unset($item->sql_tweak);
|
||||
}
|
||||
|
||||
/**
|
||||
* To limit the SQL Demo data build in the views
|
||||
*
|
||||
* @param array $settings Tweaking array.
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected function tweak($settings)
|
||||
{
|
||||
if (ArrayHelper::check($settings))
|
||||
{
|
||||
foreach ($settings as $setting)
|
||||
{
|
||||
// should sql dump be added
|
||||
if (1 == $setting['add_sql'])
|
||||
{
|
||||
// add sql (by option)
|
||||
if (2 == $setting['add_sql_options'])
|
||||
{
|
||||
// rest always
|
||||
$id_array = array();
|
||||
|
||||
// by id (first remove backups)
|
||||
$ids = $setting['ids'];
|
||||
|
||||
// now get the ids
|
||||
if (strpos((string) $ids, ',') !== false)
|
||||
{
|
||||
$id_array = (array) array_map(
|
||||
'trim', explode(',', (string) $ids)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$id_array[] = trim((string) $ids);
|
||||
}
|
||||
$id_array_new = array();
|
||||
|
||||
// check for ranges
|
||||
foreach ($id_array as $key => $id)
|
||||
{
|
||||
if (strpos($id, '=>') !== false)
|
||||
{
|
||||
$id_range = (array) array_map(
|
||||
'trim', explode('=>', $id)
|
||||
);
|
||||
unset($id_array[$key]);
|
||||
// build range
|
||||
if (count((array) $id_range) == 2)
|
||||
{
|
||||
$range = range(
|
||||
$id_range[0], $id_range[1]
|
||||
);
|
||||
$id_array_new = [...$id_array_new, ...$range];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ArrayHelper::check($id_array_new))
|
||||
{
|
||||
$id_array = [...$id_array_new, ...$id_array];
|
||||
}
|
||||
|
||||
// final fixing to array
|
||||
if (ArrayHelper::check($id_array))
|
||||
{
|
||||
// unique
|
||||
$id_array = array_unique($id_array, SORT_NUMERIC);
|
||||
// sort
|
||||
sort($id_array, SORT_NUMERIC);
|
||||
// now set it to global
|
||||
$this->registry->
|
||||
set('builder.sql_tweak.' . (int) $setting['adminview'] . '.where', implode(',', $id_array));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// do not add sql dump options
|
||||
$this->registry->
|
||||
set('builder.sql_tweak.' . (int) $setting['adminview'] . '.add', false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,71 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Tabs Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Tabs
|
||||
{
|
||||
/**
|
||||
* Set the local tabs
|
||||
*
|
||||
* @param object $item The view data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
$item->addtabs = (isset($item->addtabs)
|
||||
&& JsonHelper::check($item->addtabs))
|
||||
? json_decode((string) $item->addtabs, true) : null;
|
||||
|
||||
if (ArrayHelper::check($item->addtabs))
|
||||
{
|
||||
$nr = 1;
|
||||
foreach ($item->addtabs as $tab)
|
||||
{
|
||||
$item->tabs[$nr] = trim((string) $tab['name']);
|
||||
$nr++;
|
||||
}
|
||||
}
|
||||
|
||||
// if Details tab is not set, then set it here
|
||||
if (!isset($item->tabs[1]))
|
||||
{
|
||||
$item->tabs[1] = 'Details';
|
||||
}
|
||||
|
||||
// always make sure that publishing is lowercase
|
||||
if (($removeKey = array_search(
|
||||
'publishing', array_map('strtolower', $item->tabs)
|
||||
)) !== false)
|
||||
{
|
||||
$item->tabs[$removeKey] = 'publishing';
|
||||
}
|
||||
|
||||
// make sure to set the publishing tab (just in case we need it)
|
||||
$item->tabs[15] = 'publishing';
|
||||
|
||||
unset($item->addtabs);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,259 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
use VDM\Joomla\Utilities\GetHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Update sql Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Updatesql
|
||||
{
|
||||
/**
|
||||
* The admin view names
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $name = [];
|
||||
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Registry $registry = null)
|
||||
{
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
}
|
||||
|
||||
/**
|
||||
* check if an update SQL is needed
|
||||
*
|
||||
* @param mixed $old The old values
|
||||
* @param mixed $new The new values
|
||||
* @param string $type The type of values
|
||||
* @param int|null $key The id/key where values changed
|
||||
* @param array|null $ignore The ids to ignore
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set($old, $new, string $type, ?int $key = null, ?array $ignore = null)
|
||||
{
|
||||
// check if there were new items added
|
||||
if (ArrayHelper::check($new) && ArrayHelper::check($old))
|
||||
{
|
||||
// check if this is old repeatable field
|
||||
if (isset($new[$type]))
|
||||
{
|
||||
foreach ($new[$type] as $item)
|
||||
{
|
||||
$newItem = true;
|
||||
|
||||
// check if this is an id to ignore
|
||||
if (ArrayHelper::check($ignore)
|
||||
&& in_array(
|
||||
$item, $ignore
|
||||
))
|
||||
{
|
||||
// don't add ignored ids
|
||||
$newItem = false;
|
||||
}
|
||||
// check if this is old repeatable field
|
||||
elseif (isset($old[$type])
|
||||
&& ArrayHelper::check($old[$type]))
|
||||
{
|
||||
if (!in_array($item, $old[$type]))
|
||||
{
|
||||
// we have a new item, lets add to SQL
|
||||
$this->add($type, $item, $key);
|
||||
}
|
||||
|
||||
// add only once
|
||||
$newItem = false;
|
||||
}
|
||||
elseif (!isset($old[$type]))
|
||||
{
|
||||
// we have new values
|
||||
foreach ($old as $oldItem)
|
||||
{
|
||||
if (isset($oldItem[$type]))
|
||||
{
|
||||
if ($oldItem[$type] == $item[$type])
|
||||
{
|
||||
$newItem = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$newItem = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$newItem = false;
|
||||
}
|
||||
|
||||
// add if new
|
||||
if ($newItem)
|
||||
{
|
||||
// we have a new item, lets add to SQL
|
||||
$this->add($type, $item[$type], $key);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach ($new as $item)
|
||||
{
|
||||
if (isset($item[$type]))
|
||||
{
|
||||
// search to see if this is a new value
|
||||
$newItem = true;
|
||||
|
||||
// check if this is an id to ignore
|
||||
if (ArrayHelper::check($ignore)
|
||||
&& in_array($item[$type], $ignore))
|
||||
{
|
||||
// don't add ignored ids
|
||||
$newItem = false;
|
||||
}
|
||||
// check if this is old repeatable field
|
||||
elseif (isset($old[$type])
|
||||
&& ArrayHelper::check($old[$type]))
|
||||
{
|
||||
if (in_array($item[$type], $old[$type]))
|
||||
{
|
||||
$newItem = false;
|
||||
}
|
||||
}
|
||||
elseif (!isset($old[$type]))
|
||||
{
|
||||
// we have new values
|
||||
foreach ($old as $oldItem)
|
||||
{
|
||||
if (isset($oldItem[$type]))
|
||||
{
|
||||
if ($oldItem[$type] == $item[$type])
|
||||
{
|
||||
$newItem = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$newItem = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$newItem = false;
|
||||
}
|
||||
|
||||
// add if new
|
||||
if ($newItem)
|
||||
{
|
||||
// we have a new item, lets add to SQL
|
||||
$this->add($type, $item[$type], $key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif ($key && ((StringHelper::check($new) && StringHelper::check($old))
|
||||
|| (is_numeric($new) && is_numeric($old))) && $new !== $old)
|
||||
{
|
||||
// set at key
|
||||
$this->registry->set('builder.update_sql.' . $type . '.' . $key, ['old' => $old, 'new' => $new]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the add sql
|
||||
*
|
||||
* @param string $type The type of values
|
||||
* @param int $item The item id to add
|
||||
* @param int|null $key The id/key where values changed
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected function add(string $type, int $item, ?int $key = null)
|
||||
{
|
||||
// add key if found
|
||||
if ($key)
|
||||
{
|
||||
$this->registry->set('builder.add_sql.' . $type . '.' . $key . '.' . $item, $item);
|
||||
}
|
||||
else
|
||||
{
|
||||
// convert admin view id to name
|
||||
if ('adminview' === $type)
|
||||
{
|
||||
$this->registry->set('builder.add_sql.' . $type,
|
||||
$this->name($item)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->registry->set('builder.add_sql.' . $type, $item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Admin view table name
|
||||
*
|
||||
* @param int $id The item id to add
|
||||
*
|
||||
* @return string the admin view code name
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected function name(int $id): string
|
||||
{
|
||||
// get name if not set
|
||||
if (!isset($this->name[$id]))
|
||||
{
|
||||
$this->name[$id] = StringHelper::safe(
|
||||
GetHelper::var('admin_view', $id, 'id', 'name_single')
|
||||
);
|
||||
}
|
||||
|
||||
return $this->name[$id] ?? 'error';
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,72 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
|
||||
|
||||
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Model Whmcs Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Whmcs
|
||||
{
|
||||
/**
|
||||
* Set whmcs links if needed
|
||||
*
|
||||
* @param object $item The extension data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(object &$item)
|
||||
{
|
||||
if (1 == $item->add_license
|
||||
&& (!isset($item->whmcs_buy_link)
|
||||
|| !StringHelper::check(
|
||||
$item->whmcs_buy_link
|
||||
)))
|
||||
{
|
||||
// update with the whmcs url
|
||||
if (isset($item->whmcs_url)
|
||||
&& StringHelper::check($item->whmcs_url))
|
||||
{
|
||||
$item->whmcs_buy_link = $item->whmcs_url;
|
||||
}
|
||||
// use the company website
|
||||
elseif (isset($item->website)
|
||||
&& StringHelper::check($item->website))
|
||||
{
|
||||
$item->whmcs_buy_link = $item->website;
|
||||
$item->whmcs_url = rtrim((string) $item->website, '/')
|
||||
. '/whmcs';
|
||||
}
|
||||
// none set
|
||||
else
|
||||
{
|
||||
$item->whmcs_buy_link = '#';
|
||||
$item->whmcs_url = '#';
|
||||
}
|
||||
}
|
||||
// since the license details are not set clear
|
||||
elseif (0 == $item->add_license)
|
||||
{
|
||||
$item->whmcs_key = '';
|
||||
$item->whmcs_buy_link = '';
|
||||
$item->whmcs_url = '';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
@ -347,9 +347,7 @@ class Placeholder implements PlaceholderInterface
|
||||
{
|
||||
$this->active = array_filter(
|
||||
$this->active,
|
||||
function (string $k) use ($_key) {
|
||||
return preg_replace('/\d/', '', $k) !== $_key;
|
||||
},
|
||||
fn(string $k) => preg_replace('/\d/', '', $k) !== $_key,
|
||||
ARRAY_FILTER_USE_KEY
|
||||
);
|
||||
}
|
||||
|
@ -125,9 +125,7 @@ class Reverse
|
||||
// get targets to search for
|
||||
$lang_string_targets = array_filter(
|
||||
$this->config->lang_string_targets,
|
||||
function ($get) use ($string) : bool {
|
||||
return strpos($string, $get) !== false;
|
||||
}
|
||||
fn($get): bool => strpos($string, (string) $get) !== false
|
||||
);
|
||||
// check if we should continue
|
||||
if (ArrayHelper::check($lang_string_targets))
|
||||
|
@ -455,7 +455,7 @@ class Power implements PowerInterface
|
||||
$this->active[$guid]->file_name = array_pop($src_array);
|
||||
|
||||
// namespace array
|
||||
$namespace_array = array_merge($path_array, $src_array);
|
||||
$namespace_array = [...$path_array, ...$src_array];
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -483,12 +483,16 @@ class Power implements PowerInterface
|
||||
}
|
||||
|
||||
// make sure the arrays are namespace safe
|
||||
$path_array = array_map(function ($val) {
|
||||
return $this->getCleanNamespace($val);
|
||||
}, $path_array);
|
||||
$namespace_array = array_map(function ($val) {
|
||||
return $this->getCleanNamespace($val);
|
||||
}, $namespace_array);
|
||||
$path_array =
|
||||
array_map(
|
||||
fn($val) => $this->getCleanNamespace($val),
|
||||
$path_array
|
||||
);
|
||||
$namespace_array =
|
||||
array_map(
|
||||
fn($val) => $this->getCleanNamespace($val),
|
||||
$namespace_array
|
||||
);
|
||||
|
||||
// set the actual class namespace
|
||||
$this->active[$guid]->_namespace = implode('\\', $namespace_array);
|
||||
@ -504,9 +508,12 @@ class Power implements PowerInterface
|
||||
if (ArrayHelper::check($src_array))
|
||||
{
|
||||
// make sure the arrays are namespace safe
|
||||
$sub_folder = '/' . implode('/', array_map(function ($val) {
|
||||
return $this->getCleanNamespace($val);
|
||||
}, $src_array));
|
||||
$sub_folder = '/' . implode('/',
|
||||
array_map(
|
||||
fn($val) => $this->getCleanNamespace($val),
|
||||
$src_array
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// now we set the paths
|
||||
@ -565,10 +572,11 @@ class Power implements PowerInterface
|
||||
if ($this->active[$guid]->load_selection)
|
||||
{
|
||||
// load use ids
|
||||
array_map(function ($power) {
|
||||
array_map(
|
||||
// just load it directly and be done with it
|
||||
return $this->set($power['load']);
|
||||
}, $this->active[$guid]->load_selection);
|
||||
fn($power) => $this->set($power['load']),
|
||||
$this->active[$guid]->load_selection
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -131,9 +131,7 @@ class Autoloader
|
||||
// NameSpace\SubName\SubSubName\ClassName
|
||||
// ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
uksort($this->power->namespace, function ($a, $b) {
|
||||
return strlen($b) - strlen($a);
|
||||
});
|
||||
uksort($this->power->namespace, fn($a, $b) => strlen((string) $b) - strlen((string) $a));
|
||||
|
||||
// counter to manage the comma in the actual array
|
||||
$counter = 1;
|
||||
|
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Service;
|
||||
|
||||
|
||||
use Joomla\DI\Container;
|
||||
use Joomla\DI\ServiceProviderInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Adminview\Data as AdminviewData;
|
||||
|
||||
|
||||
/**
|
||||
* Compiler Adminview
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Adminview implements ServiceProviderInterface
|
||||
{
|
||||
/**
|
||||
* Registers the service provider with a DI container.
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function register(Container $container)
|
||||
{
|
||||
$container->alias(AdminviewData::class, 'Adminview.Data')
|
||||
->share('Adminview.Data', [$this, 'getAdminviewData'], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Compiler Adminview Data
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return AdminviewData
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getAdminviewData(Container $container): AdminviewData
|
||||
{
|
||||
return new AdminviewData(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry'),
|
||||
$container->get('Event'),
|
||||
$container->get('Placeholder'),
|
||||
$container->get('Customcode.Dispenser'),
|
||||
$container->get('Model.Customtabs'),
|
||||
$container->get('Model.Tabs'),
|
||||
$container->get('Model.Fields'),
|
||||
$container->get('Model.Historyadminview'),
|
||||
$container->get('Model.Permissions'),
|
||||
$container->get('Model.Conditions'),
|
||||
$container->get('Model.Relations'),
|
||||
$container->get('Model.Linkedviews'),
|
||||
$container->get('Model.Javascriptadminview'),
|
||||
$container->get('Model.Cssadminview'),
|
||||
$container->get('Model.Phpadminview'),
|
||||
$container->get('Model.Custombuttons'),
|
||||
$container->get('Model.Customimportscripts'),
|
||||
$container->get('Model.Ajaxadmin'),
|
||||
$container->get('Model.Customalias'),
|
||||
$container->get('Model.Sql'),
|
||||
$container->get('Model.Mysqlsettings')
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ use Joomla\DI\Container;
|
||||
use Joomla\DI\ServiceProviderInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Counter;
|
||||
|
||||
|
||||
/**
|
||||
@ -40,6 +41,9 @@ class Compiler implements ServiceProviderInterface
|
||||
|
||||
$container->alias(Registry::class, 'Registry')
|
||||
->share('Registry', [$this, 'getRegistry'], true);
|
||||
|
||||
$container->alias(Counter::class, 'Counter')
|
||||
->share('Counter', [$this, 'getCounter'], true);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -67,6 +71,19 @@ class Compiler implements ServiceProviderInterface
|
||||
{
|
||||
return new Registry();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Compiler Counter
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Counter
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getCounter(Container $container): Counter
|
||||
{
|
||||
return new Counter();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,9 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Service;
|
||||
|
||||
use Joomla\DI\Container;
|
||||
use Joomla\DI\ServiceProviderInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Component as ComponentObject;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Component\Placeholder as ComponentPlaceholder;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Component\Data as ComponentData;
|
||||
|
||||
|
||||
/**
|
||||
@ -34,8 +36,29 @@ class Component implements ServiceProviderInterface
|
||||
*/
|
||||
public function register(Container $container)
|
||||
{
|
||||
$container->alias(ComponentObject::class, 'Component')
|
||||
->share('Component', [$this, 'getComponent'], true);
|
||||
|
||||
$container->alias(ComponentPlaceholder::class, 'Component.Placeholder')
|
||||
->share('Component.Placeholder', [$this, 'getComponentPlaceholder'], true);
|
||||
|
||||
$container->alias(ComponentData::class, 'Component.Data')
|
||||
->share('Component.Data', [$this, 'getComponentData'], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Component
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return ComponentObject
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getComponent(Container $container): ComponentObject
|
||||
{
|
||||
return new ComponentObject(
|
||||
$container->get('Component.Data')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -51,6 +74,39 @@ class Component implements ServiceProviderInterface
|
||||
return new ComponentPlaceholder(
|
||||
$container->get('Config')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Component Data
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return ComponentData
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getComponentData(Container $container): ComponentData
|
||||
{
|
||||
return new ComponentData(
|
||||
$container->get('Config'),
|
||||
$container->get('Event'),
|
||||
$container->get('Placeholder'),
|
||||
$container->get('Component.Placeholder'),
|
||||
$container->get('Customcode.Dispenser'),
|
||||
$container->get('Customcode'),
|
||||
$container->get('Customcode.Gui'),
|
||||
$container->get('Field'),
|
||||
$container->get('Field.Name'),
|
||||
$container->get('Field.Unique.Name'),
|
||||
$container->get('Model.Filesfolders'),
|
||||
$container->get('Model.Historycomponent'),
|
||||
$container->get('Model.Whmcs'),
|
||||
$container->get('Model.Sqltweaking'),
|
||||
$container->get('Model.Adminviews'),
|
||||
$container->get('Model.Siteviews'),
|
||||
$container->get('Model.Customadminviews'),
|
||||
$container->get('Model.Joomlamodules'),
|
||||
$container->get('Model.Joomlaplugins')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,114 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Service;
|
||||
|
||||
|
||||
use Joomla\DI\Container;
|
||||
use Joomla\DI\ServiceProviderInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Customview\Data as CustomviewData;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Data as DynamicgetData;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Selection as DynamicgetSelection;
|
||||
|
||||
|
||||
/**
|
||||
* Compiler Customview
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Customview implements ServiceProviderInterface
|
||||
{
|
||||
/**
|
||||
* Registers the service provider with a DI container.
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function register(Container $container)
|
||||
{
|
||||
$container->alias(CustomviewData::class, 'Customview.Data')
|
||||
->share('Customview.Data', [$this, 'getCustomviewData'], true);
|
||||
|
||||
$container->alias(DynamicgetData::class, 'Dynamicget.Data')
|
||||
->share('Dynamicget.Data', [$this, 'getDynamicgetData'], true);
|
||||
|
||||
$container->alias(DynamicgetSelection::class, 'Dynamicget.Selection')
|
||||
->share('Dynamicget.Selection', [$this, 'getDynamicgetSelection'], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Compiler Customview Data
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return CustomviewData
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getCustomviewData(Container $container): CustomviewData
|
||||
{
|
||||
return new CustomviewData(
|
||||
$container->get('Config'),
|
||||
$container->get('Event'),
|
||||
$container->get('Customcode'),
|
||||
$container->get('Customcode.Gui'),
|
||||
$container->get('Model.Libraries'),
|
||||
$container->get('Templatelayout.Data'),
|
||||
$container->get('Dynamicget.Data'),
|
||||
$container->get('Model.Loader'),
|
||||
$container->get('Model.Javascriptcustomview'),
|
||||
$container->get('Model.Csscustomview'),
|
||||
$container->get('Model.Phpcustomview'),
|
||||
$container->get('Model.Ajaxcustomview'),
|
||||
$container->get('Model.Custombuttons')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Compiler Dynamicget Data
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return DynamicgetData
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getDynamicgetData(Container $container): DynamicgetData
|
||||
{
|
||||
return new DynamicgetData(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry'),
|
||||
$container->get('Event'),
|
||||
$container->get('Customcode'),
|
||||
$container->get('Customcode.Dispenser'),
|
||||
$container->get('Customcode.Gui'),
|
||||
$container->get('Model.Dynamicget')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Compiler Dynamicget Selection
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return DynamicgetSelection
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getDynamicgetSelection(Container $container): DynamicgetSelection
|
||||
{
|
||||
return new DynamicgetSelection(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry')
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,66 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Service;
|
||||
|
||||
|
||||
use Joomla\DI\Container;
|
||||
use Joomla\DI\ServiceProviderInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\Data as JoomlaModuleData;
|
||||
|
||||
|
||||
/**
|
||||
* Joomla Module Service Provider
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Joomlamodule implements ServiceProviderInterface
|
||||
{
|
||||
/**
|
||||
* Registers the service provider with a DI container.
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function register(Container $container)
|
||||
{
|
||||
$container->alias(JoomlaModuleData::class, 'Joomlamodule.Data')
|
||||
->share('Joomlamodule.Data', [$this, 'getJoomlaModuleData'], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Joomla Module Data
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return JoomlaModuleData
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getJoomlaModuleData(Container $container): JoomlaModuleData
|
||||
{
|
||||
return new JoomlaModuleData(
|
||||
$container->get('Config'),
|
||||
$container->get('Customcode'),
|
||||
$container->get('Customcode.Gui'),
|
||||
$container->get('Placeholder'),
|
||||
$container->get('Language'),
|
||||
$container->get('Field'),
|
||||
$container->get('Field.Name'),
|
||||
$container->get('Model.Filesfolders'),
|
||||
$container->get('Model.Libraries'),
|
||||
$container->get('Dynamicget.Data')
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,64 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Service;
|
||||
|
||||
|
||||
use Joomla\DI\Container;
|
||||
use Joomla\DI\ServiceProviderInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Joomlaplugin\Data as JoomlaPluginData;
|
||||
|
||||
|
||||
/**
|
||||
* Joomla Plugin Service Provider
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Joomlaplugin implements ServiceProviderInterface
|
||||
{
|
||||
/**
|
||||
* Registers the service provider with a DI container.
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function register(Container $container)
|
||||
{
|
||||
$container->alias(JoomlaPluginData::class, 'Joomlaplugin.Data')
|
||||
->share('Joomlaplugin.Data', [$this, 'getJoomlaPluginData'], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Joomla Plugin Data
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return JoomlaPluginData
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getJoomlaPluginData(Container $container): JoomlaPluginData
|
||||
{
|
||||
return new JoomlaPluginData(
|
||||
$container->get('Config'),
|
||||
$container->get('Customcode'),
|
||||
$container->get('Customcode.Gui'),
|
||||
$container->get('Placeholder'),
|
||||
$container->get('Language'),
|
||||
$container->get('Field'),
|
||||
$container->get('Field.Name'),
|
||||
$container->get('Model.Filesfolders')
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,62 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Service;
|
||||
|
||||
|
||||
use Joomla\DI\Container;
|
||||
use Joomla\DI\ServiceProviderInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Library\Data as LibraryData;
|
||||
|
||||
|
||||
/**
|
||||
* Compiler Library
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Library implements ServiceProviderInterface
|
||||
{
|
||||
/**
|
||||
* Registers the service provider with a DI container.
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function register(Container $container)
|
||||
{
|
||||
$container->alias(LibraryData::class, 'Library.Data')
|
||||
->share('Library.Data', [$this, 'getLibraryData'], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Compiler Library Data
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return LibraryData
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getLibraryData(Container $container): LibraryData
|
||||
{
|
||||
return new LibraryData(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry'),
|
||||
$container->get('Customcode'),
|
||||
$container->get('Customcode.Gui'),
|
||||
$container->get('Field.Data'),
|
||||
$container->get('Model.Filesfolders')
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -15,6 +15,41 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Service;
|
||||
use Joomla\DI\Container;
|
||||
use Joomla\DI\ServiceProviderInterface;
|
||||
use VDM\Joomla\Componentbuilder\Server\Model\Load as ServerLoad;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Joomlaplugins;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Joomlamodules;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Historycomponent;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Customadminviews;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Ajaxcustomview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Javascriptcustomview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Csscustomview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Phpcustomview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Dynamicget;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Libraries;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Siteviews;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Permissions;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Historyadminview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Mysqlsettings;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Sql;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Customalias;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Ajaxadmin;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Customimportscripts;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Custombuttons;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Loader;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Phpadminview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Cssadminview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Javascriptadminview;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Linkedviews;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Relations;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Conditions;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Fields;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Updatesql;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Tabs;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Customtabs;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Adminviews;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Sqltweaking;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Sqldump;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Whmcs;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Model\Filesfolders;
|
||||
|
||||
|
||||
/**
|
||||
@ -34,10 +69,674 @@ class Model implements ServiceProviderInterface
|
||||
*/
|
||||
public function register(Container $container)
|
||||
{
|
||||
$container->alias(Joomlaplugins::class, 'Model.Joomlaplugins')
|
||||
->share('Model.Joomlaplugins', [$this, 'getModelJoomlaplugins'], true);
|
||||
|
||||
$container->alias(Joomlamodules::class, 'Model.Joomlamodules')
|
||||
->share('Model.Joomlamodules', [$this, 'getModelJoomlamodules'], true);
|
||||
|
||||
$container->alias(Historycomponent::class, 'Model.Historycomponent')
|
||||
->share('Model.Historycomponent', [$this, 'getModelHistorycomponent'], true);
|
||||
|
||||
$container->alias(Customadminviews::class, 'Model.Customadminviews')
|
||||
->share('Model.Customadminviews', [$this, 'getModelCustomadminviews'], true);
|
||||
|
||||
$container->alias(Ajaxcustomview::class, 'Model.Ajaxcustomview')
|
||||
->share('Model.Ajaxcustomview', [$this, 'getModelAjaxcustomview'], true);
|
||||
|
||||
$container->alias(Javascriptcustomview::class, 'Model.Javascriptcustomview')
|
||||
->share('Model.Javascriptcustomview', [$this, 'getModelJavascriptcustomview'], true);
|
||||
|
||||
$container->alias(Csscustomview::class, 'Model.Csscustomview')
|
||||
->share('Model.Csscustomview', [$this, 'getModelCsscustomview'], true);
|
||||
|
||||
$container->alias(Phpcustomview::class, 'Model.Phpcustomview')
|
||||
->share('Model.Phpcustomview', [$this, 'getModelPhpcustomview'], true);
|
||||
|
||||
$container->alias(Dynamicget::class, 'Model.Dynamicget')
|
||||
->share('Model.Dynamicget', [$this, 'getModelDynamicget'], true);
|
||||
|
||||
$container->alias(Libraries::class, 'Model.Libraries')
|
||||
->share('Model.Libraries', [$this, 'getModelLibraries'], true);
|
||||
|
||||
$container->alias(Siteviews::class, 'Model.Siteviews')
|
||||
->share('Model.Siteviews', [$this, 'getModelSiteviews'], true);
|
||||
|
||||
$container->alias(Permissions::class, 'Model.Permissions')
|
||||
->share('Model.Permissions', [$this, 'getModelPermissions'], true);
|
||||
|
||||
$container->alias(Historyadminview::class, 'Model.Historyadminview')
|
||||
->share('Model.Historyadminview', [$this, 'getModelHistoryadminview'], true);
|
||||
|
||||
$container->alias(Mysqlsettings::class, 'Model.Mysqlsettings')
|
||||
->share('Model.Mysqlsettings', [$this, 'getModelMysqlsettings'], true);
|
||||
|
||||
$container->alias(Sql::class, 'Model.Sql')
|
||||
->share('Model.Sql', [$this, 'getModelSql'], true);
|
||||
|
||||
$container->alias(Customalias::class, 'Model.Customalias')
|
||||
->share('Model.Customalias', [$this, 'getModelCustomalias'], true);
|
||||
|
||||
$container->alias(Ajaxadmin::class, 'Model.Ajaxadmin')
|
||||
->share('Model.Ajaxadmin', [$this, 'getModelAjaxadmin'], true);
|
||||
|
||||
$container->alias(Customimportscripts::class, 'Model.Customimportscripts')
|
||||
->share('Model.Customimportscripts', [$this, 'getModelCustomimportscripts'], true);
|
||||
|
||||
$container->alias(Custombuttons::class, 'Model.Custombuttons')
|
||||
->share('Model.Custombuttons', [$this, 'getModelCustombuttons'], true);
|
||||
|
||||
$container->alias(Loader::class, 'Model.Loader')
|
||||
->share('Model.Loader', [$this, 'getModelLoader'], true);
|
||||
|
||||
$container->alias(Phpadminview::class, 'Model.Phpadminview')
|
||||
->share('Model.Phpadminview', [$this, 'getModelPhpadminview'], true);
|
||||
|
||||
$container->alias(Cssadminview::class, 'Model.Cssadminview')
|
||||
->share('Model.Cssadminview', [$this, 'getModelCssadminview'], true);
|
||||
|
||||
$container->alias(Javascriptadminview::class, 'Model.Javascriptadminview')
|
||||
->share('Model.Javascriptadminview', [$this, 'getModelJavascriptadminview'], true);
|
||||
|
||||
$container->alias(Linkedviews::class, 'Model.Linkedviews')
|
||||
->share('Model.Linkedviews', [$this, 'getModelLinkedviews'], true);
|
||||
|
||||
$container->alias(Relations::class, 'Model.Relations')
|
||||
->share('Model.Relations', [$this, 'getModelRelations'], true);
|
||||
|
||||
$container->alias(Conditions::class, 'Model.Conditions')
|
||||
->share('Model.Conditions', [$this, 'getModelConditions'], true);
|
||||
|
||||
$container->alias(Fields::class, 'Model.Fields')
|
||||
->share('Model.Fields', [$this, 'getModelFields'], true);
|
||||
|
||||
$container->alias(Updatesql::class, 'Model.Updatesql')
|
||||
->share('Model.Updatesql', [$this, 'getModelUpdatesql'], true);
|
||||
|
||||
$container->alias(Tabs::class, 'Model.Tabs')
|
||||
->share('Model.Tabs', [$this, 'getModelTabs'], true);
|
||||
|
||||
$container->alias(Customtabs::class, 'Model.Customtabs')
|
||||
->share('Model.Customtabs', [$this, 'getModelCustomtabs'], true);
|
||||
|
||||
$container->alias(Adminviews::class, 'Model.Adminviews')
|
||||
->share('Model.Adminviews', [$this, 'getModelAdminviews'], true);
|
||||
|
||||
$container->alias(Sqltweaking::class, 'Model.Sqltweaking')
|
||||
->share('Model.Sqltweaking', [$this, 'getModelSqltweaking'], true);
|
||||
|
||||
$container->alias(Sqldump::class, 'Model.Sqldump')
|
||||
->share('Model.Sqldump', [$this, 'getModelSqldump'], true);
|
||||
|
||||
$container->alias(Whmcs::class, 'Model.Whmcs')
|
||||
->share('Model.Whmcs', [$this, 'getModelWhmcs'], true);
|
||||
|
||||
$container->alias(Filesfolders::class, 'Model.Filesfolders')
|
||||
->share('Model.Filesfolders', [$this, 'getModelFilesfolders'], true);
|
||||
|
||||
$container->alias(ServerLoad::class, 'Model.Server.Load')
|
||||
->share('Model.Server.Load', [$this, 'getServerLoad'], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Joomla plugins Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Joomlaplugins
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelJoomlaplugins(Container $container): Joomlaplugins
|
||||
{
|
||||
return new Joomlaplugins(
|
||||
$container->get('Joomlaplugin.Data')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Joomla modules Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Joomlamodules
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelJoomlamodules(Container $container): Joomlamodules
|
||||
{
|
||||
return new Joomlamodules(
|
||||
$container->get('Joomlamodule.Data')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the history component Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Historycomponent
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelHistorycomponent(Container $container): Historycomponent
|
||||
{
|
||||
return new Historycomponent(
|
||||
$container->get('Config'),
|
||||
$container->get('History'),
|
||||
$container->get('Model.Updatesql')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the custom admin views Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Customadminviews
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelCustomadminviews(Container $container): Customadminviews
|
||||
{
|
||||
return new Customadminviews(
|
||||
$container->get('Customview.Data'),
|
||||
$container->get('Config')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the ajax custom view Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Ajaxcustomview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelAjaxcustomview(Container $container): Ajaxcustomview
|
||||
{
|
||||
return new Ajaxcustomview(
|
||||
$container->get('Config'),
|
||||
$container->get('Customcode.Dispenser')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the javascript custom view Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Javascriptcustomview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelJavascriptcustomview(Container $container): Javascriptcustomview
|
||||
{
|
||||
return new Javascriptcustomview(
|
||||
$container->get('Customcode'),
|
||||
$container->get('Customcode.Gui')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the css custom view Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Csscustomview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelCsscustomview(Container $container): Csscustomview
|
||||
{
|
||||
return new Csscustomview(
|
||||
$container->get('Customcode')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the php custom view Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Phpcustomview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelPhpcustomview(Container $container): Phpcustomview
|
||||
{
|
||||
return new Phpcustomview(
|
||||
$container->get('Customcode'),
|
||||
$container->get('Customcode.Gui'),
|
||||
$container->get('Model.Loader'),
|
||||
$container->get('Templatelayout.Data')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the dynamic get Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Dynamicget
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelDynamicget(Container $container): Dynamicget
|
||||
{
|
||||
return new Dynamicget(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry'),
|
||||
$container->get('Customcode'),
|
||||
$container->get('Customcode.Gui'),
|
||||
$container->get('Placeholder'),
|
||||
$container->get('Dynamicget.Selection')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the libraries Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Libraries
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelLibraries(Container $container): Libraries
|
||||
{
|
||||
return new Libraries(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry'),
|
||||
$container->get('Library.Data')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the site views Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Siteviews
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelSiteviews(Container $container): Siteviews
|
||||
{
|
||||
return new Siteviews(
|
||||
$container->get('Customview.Data'),
|
||||
$container->get('Config')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the permissions Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Permissions
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelPermissions(Container $container): Permissions
|
||||
{
|
||||
return new Permissions();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the admin view history Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Historyadminview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelHistoryadminview(Container $container): Historyadminview
|
||||
{
|
||||
return new Historyadminview(
|
||||
$container->get('Config'),
|
||||
$container->get('History'),
|
||||
$container->get('Model.Updatesql')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the MySQL settings Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Mysqlsettings
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelMysqlsettings(Container $container): Mysqlsettings
|
||||
{
|
||||
return new Mysqlsettings(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry')
|
||||
);
|
||||
}
|
||||
/**
|
||||
* Get the Sql Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Sql
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelSql(Container $container): Sql
|
||||
{
|
||||
return new Sql(
|
||||
$container->get('Customcode.Dispenser'),
|
||||
$container->get('Model.Sqldump')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the custom alias Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Customalias
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelCustomalias(Container $container): Customalias
|
||||
{
|
||||
return new Customalias(
|
||||
$container->get('Config'),
|
||||
$container->get('Field.Name')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Admin Ajax Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Ajaxadmin
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelAjaxadmin(Container $container): Ajaxadmin
|
||||
{
|
||||
return new Ajaxadmin(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry'),
|
||||
$container->get('Customcode.Dispenser')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the custom import scripts Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Customimportscripts
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelCustomimportscripts(Container $container): Customimportscripts
|
||||
{
|
||||
return new Customimportscripts(
|
||||
$container->get('Customcode.Dispenser')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the custom import scripts Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Custombuttons
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelCustombuttons(Container $container): Custombuttons
|
||||
{
|
||||
return new Custombuttons(
|
||||
$container->get('Customcode'),
|
||||
$container->get('Customcode.Gui'),
|
||||
$container->get('Templatelayout.Data')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Model Auto Loader
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Loader
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelLoader(Container $container): Loader
|
||||
{
|
||||
return new Loader(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the php admin view Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Phpadminview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelPhpadminview(Container $container): Phpadminview
|
||||
{
|
||||
return new Phpadminview(
|
||||
$container->get('Customcode.Dispenser'),
|
||||
$container->get('Templatelayout.Data')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Css Adminview Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Cssadminview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelCssadminview(Container $container): Cssadminview
|
||||
{
|
||||
return new Cssadminview(
|
||||
$container->get('Customcode.Dispenser')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Javascript Adminview Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Javascriptadminview
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelJavascriptadminview(Container $container): Javascriptadminview
|
||||
{
|
||||
return new Javascriptadminview(
|
||||
$container->get('Customcode.Dispenser')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the linked views Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Linkedviews
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelLinkedviews(Container $container): Linkedviews
|
||||
{
|
||||
return new Linkedviews(
|
||||
$container->get('Registry')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the relations Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Relations
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelRelations(Container $container): Relations
|
||||
{
|
||||
return new Relations(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry'),
|
||||
$container->get('Language'),
|
||||
$container->get('Customcode')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the conditions Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Conditions
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelConditions(Container $container): Conditions
|
||||
{
|
||||
return new Conditions(
|
||||
$container->get('Field.Type.Name'),
|
||||
$container->get('Field.Name')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the fields Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Fields
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelFields(Container $container): Fields
|
||||
{
|
||||
return new Fields(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry'),
|
||||
$container->get('History'),
|
||||
$container->get('Customcode'),
|
||||
$container->get('Field'),
|
||||
$container->get('Field.Name'),
|
||||
$container->get('Model.Updatesql')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the update sql Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Updatesql
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelUpdatesql(Container $container): Updatesql
|
||||
{
|
||||
return new Updatesql(
|
||||
$container->get('Registry')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the tabs Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Updatesql
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelTabs(Container $container): Tabs
|
||||
{
|
||||
return new Tabs();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the custom tabs Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Customtabs
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelCustomtabs(Container $container): Customtabs
|
||||
{
|
||||
return new Customtabs(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry'),
|
||||
$container->get('Language'),
|
||||
$container->get('Placeholder'),
|
||||
$container->get('Customcode')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the admin views Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Adminviews
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelAdminviews(Container $container): Adminviews
|
||||
{
|
||||
return new Adminviews(
|
||||
$container->get('Adminview.Data'),
|
||||
$container->get('Registry'),
|
||||
$container->get('Config')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the SQL tweaking Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Sqltweaking
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelSqltweaking(Container $container): Sqltweaking
|
||||
{
|
||||
return new Sqltweaking(
|
||||
$container->get('Registry')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the SQL dump Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Sqldump
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelSqldump(Container $container): Sqldump
|
||||
{
|
||||
return new Sqldump(
|
||||
$container->get('Registry')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the whmcs Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Whmcs
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelWhmcs(Container $container): Whmcs
|
||||
{
|
||||
return new Whmcs();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the files folders Model
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Filesfolders
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getModelFilesfolders(Container $container): Filesfolders
|
||||
{
|
||||
return new Filesfolders();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Server Model Server Loader class
|
||||
*
|
||||
|
@ -0,0 +1,83 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Service;
|
||||
|
||||
|
||||
use Joomla\DI\Container;
|
||||
use Joomla\DI\ServiceProviderInterface;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Templatelayout\Data as TemplatelayoutData ;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Alias\Data as AliasData;
|
||||
|
||||
|
||||
/**
|
||||
* Compiler Templatelayout
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Templatelayout implements ServiceProviderInterface
|
||||
{
|
||||
/**
|
||||
* Registers the service provider with a DI container.
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function register(Container $container)
|
||||
{
|
||||
$container->alias(TemplatelayoutData::class, 'Templatelayout.Data')
|
||||
->share('Templatelayout.Data', [$this, 'getTemplatelayoutData'], true);
|
||||
|
||||
$container->alias(AliasData::class, 'Alias.Data')
|
||||
->share('Alias.Data', [$this, 'getAliasData'], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Compiler Templatelayout Data
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return TemplatelayoutData
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getTemplatelayoutData(Container $container): TemplatelayoutData
|
||||
{
|
||||
return new TemplatelayoutData(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry'),
|
||||
$container->get('Alias.Data')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Compiler Alias Data
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return AliasData
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getAliasData(Container $container): AliasData
|
||||
{
|
||||
return new AliasData(
|
||||
$container->get('Config'),
|
||||
$container->get('Registry'),
|
||||
$container->get('Customcode'),
|
||||
$container->get('Customcode.Gui'),
|
||||
$container->get('Model.Loader'),
|
||||
$container->get('Model.Libraries')
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,236 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Templatelayout;
|
||||
|
||||
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Config;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Registry;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Alias\Data as Aliasdata;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\GetHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Template Layout Data Class
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Data
|
||||
{
|
||||
/**
|
||||
* Compiler Config
|
||||
*
|
||||
* @var Config
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Config $config;
|
||||
|
||||
/**
|
||||
* The compiler registry
|
||||
*
|
||||
* @var Registry
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Registry $registry;
|
||||
|
||||
/**
|
||||
* Compiler Alias Data
|
||||
*
|
||||
* @var AliasData
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Aliasdata $alias;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Config|null $config The compiler config object.
|
||||
* @param Registry|null $registry The compiler registry object.
|
||||
* @param Aliasdata|null $alias The compiler alias data object.
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function __construct(?Config $config = null, ?Registry $registry = null,
|
||||
?Aliasdata $alias = null)
|
||||
{
|
||||
$this->config = $config ?: Compiler::_('Config');
|
||||
$this->registry = $registry ?: Compiler::_('Registry');
|
||||
$this->alias = $alias ?: Compiler::_('Alias.Data');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Template and Layout Data
|
||||
*
|
||||
* @param string $content The content to check
|
||||
* @param string $view The view code name
|
||||
* @param bool $found The proof that something was found
|
||||
* @param array $templates The option to pass templates keys (to avoid search)
|
||||
* @param array $layouts The option to pass layout keys (to avoid search)
|
||||
*
|
||||
* @return bool if something was found true
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(string $content, string $view, bool $found = false,
|
||||
array $templates = [], array $layouts = []): bool
|
||||
{
|
||||
// to check inside the templates
|
||||
$again = [];
|
||||
|
||||
// check if template keys were passed
|
||||
if (!ArrayHelper::check($templates))
|
||||
{
|
||||
// set the Template data
|
||||
$temp1 = GetHelper::allBetween(
|
||||
$content, "\$this->loadTemplate('", "')"
|
||||
);
|
||||
$temp2 = GetHelper::allBetween(
|
||||
$content, '$this->loadTemplate("', '")'
|
||||
);
|
||||
if (ArrayHelper::check($temp1)
|
||||
&& ArrayHelper::check($temp2))
|
||||
{
|
||||
$templates = array_merge($temp1, $temp2);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ArrayHelper::check($temp1))
|
||||
{
|
||||
$templates = $temp1;
|
||||
}
|
||||
elseif (ArrayHelper::check($temp2))
|
||||
{
|
||||
$templates = $temp2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check if we found templates
|
||||
if (ArrayHelper::check($templates, true))
|
||||
{
|
||||
foreach ($templates as $template)
|
||||
{
|
||||
if (!$this->registry->
|
||||
get('builder.template_data.' . $this->config->build_target . '.' . $view . '.' . $template, null))
|
||||
{
|
||||
$data = $this->alias->get(
|
||||
$template, 'template', $view
|
||||
);
|
||||
if (ArrayHelper::check($data))
|
||||
{
|
||||
// load it to the template data array
|
||||
$this->registry->
|
||||
set('builder.template_data.' . $this->config->build_target . '.' . $view . '.' . $template, $data);
|
||||
// call self to get child data
|
||||
$again[] = ['content' => $data['html'], 'view' => $view];
|
||||
$again[] = ['content' => $data['php_view'], 'view' => $view];
|
||||
}
|
||||
}
|
||||
|
||||
// check if we have the template set (and nothing yet found)
|
||||
if (!$found && $this->registry->
|
||||
get('builder.template_data.' . $this->config->build_target . '.' . $view . '.' . $template, null))
|
||||
{
|
||||
// something was found
|
||||
$found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check if layout keys were passed
|
||||
if (!ArrayHelper::check($layouts))
|
||||
{
|
||||
// set the Layout data
|
||||
$lay1 = GetHelper::allBetween(
|
||||
$content, "JLayoutHelper::render('", "',"
|
||||
);
|
||||
$lay2 = GetHelper::allBetween(
|
||||
$content, 'JLayoutHelper::render("', '",'
|
||||
);
|
||||
if (ArrayHelper::check($lay1)
|
||||
&& ArrayHelper::check($lay2))
|
||||
{
|
||||
$layouts = array_merge($lay1, $lay2);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ArrayHelper::check($lay1))
|
||||
{
|
||||
$layouts = $lay1;
|
||||
}
|
||||
elseif (ArrayHelper::check($lay2))
|
||||
{
|
||||
$layouts = $lay2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check if we found layouts
|
||||
if (ArrayHelper::check($layouts, true))
|
||||
{
|
||||
// get the other target if both
|
||||
$_target = null;
|
||||
if ($this->config->lang_target === 'both')
|
||||
{
|
||||
$_target = ($this->config->build_target === 'admin') ? 'site' : 'admin';
|
||||
}
|
||||
|
||||
foreach ($layouts as $layout)
|
||||
{
|
||||
if (!$this->registry->
|
||||
get('builder.layout_data.' . $this->config->build_target . '.' . $layout, null))
|
||||
{
|
||||
$data = $this->alias->get($layout, 'layout', $view);
|
||||
if (ArrayHelper::check($data))
|
||||
{
|
||||
// load it to the layout data array
|
||||
$this->registry->
|
||||
set('builder.layout_data.' . $this->config->build_target . '.' . $layout, $data);
|
||||
// check if other target is set
|
||||
if ($this->config->lang_target === 'both' && $_target)
|
||||
{
|
||||
$this->registry->
|
||||
set('builder.layout_data.' . $_target . '.' . $layout, $data);
|
||||
}
|
||||
// call self to get child data
|
||||
$again[] = ['content' => $data['html'], 'view' => $view];
|
||||
$again[] = ['content' => $data['php_view'], 'view' => $view];
|
||||
}
|
||||
}
|
||||
|
||||
// check if we have the layout set (and nothing yet found)
|
||||
if (!$found && $this->registry->
|
||||
get('builder.layout_data.' . $this->config->build_target . '.' . $layout, null))
|
||||
{
|
||||
// something was found
|
||||
$found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check again
|
||||
if (ArrayHelper::check($again))
|
||||
{
|
||||
foreach ($again as $go)
|
||||
{
|
||||
$found = $this->set(
|
||||
$go['content'], $go['view'], $found
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the proof that something was found
|
||||
return $found;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
@ -0,0 +1,83 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @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
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Compiler\Utilities;
|
||||
|
||||
|
||||
/**
|
||||
* The Field Helper
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
abstract class FieldHelper
|
||||
{
|
||||
/**
|
||||
* Field Grouping https://docs.joomla.org/Form_field
|
||||
**/
|
||||
protected static $fields = [
|
||||
'default' => [
|
||||
'accesslevel', 'cachehandler', 'calendar', 'captcha', 'category', 'checkbox', 'checkboxes', 'chromestyle',
|
||||
'color', 'combo', 'componentlayout', 'contentlanguage', 'contenttype', 'databaseconnection', 'components',
|
||||
'editor', 'editors', 'email', 'file', 'file', 'filelist', 'folderlist', 'groupedlist', 'headertag', 'helpsite', 'hidden', 'imagelist',
|
||||
'integer', 'language', 'list', 'media', 'menu', 'modal_menu', 'menuitem', 'meter', 'modulelayout', 'moduleorder', 'moduleposition',
|
||||
'moduletag', 'note', 'number', 'password', 'plugins', 'predefinedlist', 'radio', 'range', 'repeatable', 'rules',
|
||||
'sessionhandler', 'spacer', 'sql', 'subform', 'tag', 'tel', 'templatestyle', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup'
|
||||
],
|
||||
'plain' => [
|
||||
'cachehandler', 'calendar', 'checkbox', 'chromestyle', 'color', 'componentlayout', 'contenttype', 'editor', 'editors', 'captcha',
|
||||
'email', 'file', 'headertag', 'helpsite', 'hidden', 'integer', 'language', 'media', 'menu', 'modal_menu', 'menuitem', 'meter', 'modulelayout', 'templatestyle',
|
||||
'moduleorder', 'moduletag', 'number', 'password', 'range', 'rules', 'tag', 'tel', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup'
|
||||
],
|
||||
'option' => [
|
||||
'accesslevel', 'category', 'checkboxes', 'combo', 'contentlanguage', 'databaseconnection', 'components',
|
||||
'filelist', 'folderlist', 'imagelist', 'list', 'plugins', 'predefinedlist', 'radio', 'sessionhandler', 'sql', 'groupedlist'
|
||||
],
|
||||
'text' => [
|
||||
'calendar', 'color', 'editor', 'email', 'number', 'password', 'range', 'tel', 'text', 'textarea', 'url'
|
||||
],
|
||||
'list' => [
|
||||
'checkbox', 'checkboxes', 'list', 'radio', 'groupedlist', 'combo'
|
||||
],
|
||||
'dynamic' => [
|
||||
'category', 'file', 'filelist', 'folderlist', 'headertag', 'imagelist', 'integer', 'media', 'meter', 'rules', 'tag', 'timezone', 'user'
|
||||
],
|
||||
'spacer' => [
|
||||
'note', 'spacer'
|
||||
],
|
||||
'special' => [
|
||||
'contentlanguage', 'moduleposition', 'plugin', 'repeatable', 'subform'
|
||||
],
|
||||
'search' => [
|
||||
'editor', 'email', 'tel', 'text', 'textarea', 'url', 'subform'
|
||||
]
|
||||
];
|
||||
|
||||
/**
|
||||
* Field Checker
|
||||
*
|
||||
* @param string $type The field type
|
||||
* @param string $option The field grouping
|
||||
*
|
||||
* @return bool if the field was found
|
||||
*/
|
||||
public static function check(string $type, string $option = 'default'): bool
|
||||
{
|
||||
// now check
|
||||
if (isset(self::$fields[$option]) &&
|
||||
in_array($type, self::$fields[$option]))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user