2016-02-26 00:20:09 +00:00
< ? php
2018-05-18 06:28:27 +00:00
/**
* @ package Joomla . Component . Builder
*
* @ created 30 th April , 2015
* @ author Llewellyn van der Merwe < http :// www . joomlacomponentbuilder . com >
* @ github Joomla Component Builder < https :// github . com / vdm - io / Joomla - Component - Builder >
2021-01-03 16:49:35 +00:00
* @ copyright Copyright ( C ) 2015 Vast Development Method . All rights reserved .
2018-05-18 06:28:27 +00:00
* @ license GNU General Public License version 2 or later ; see LICENSE . txt
*/
2016-02-26 00:20:09 +00:00
// No direct access to this file
defined ( '_JEXEC' ) or die ( 'Restricted access' );
2021-03-07 21:40:55 +00:00
use Joomla\CMS\Filesystem\File ;
use Joomla\CMS\Filesystem\Folder ;
2016-02-26 00:20:09 +00:00
/**
* Structure class
*/
class Structure extends Get
2017-12-14 23:10:47 +00:00
{
2016-03-04 00:01:43 +00:00
/**
2019-06-29 21:11:37 +00:00
* The folder counter
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var int
*/
public $folderCount = 0 ;
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2019-06-29 21:11:37 +00:00
* The file counter
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var int
*/
public $fileCount = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The page counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $pageCount = 0 ;
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* The line counter
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var int
*/
public $lineCount = 0 ;
2017-12-14 23:10:47 +00:00
2017-12-14 13:30:21 +00:00
/**
* The field counter
2020-03-28 13:34:14 +00:00
*
2017-12-14 13:30:21 +00:00
* @ var int
*/
public $fieldCount = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The seconds counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $seconds = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The actual seconds counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $actualSeconds = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The folder seconds counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $folderSeconds = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The file seconds counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $fileSeconds = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The line seconds counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $lineSeconds = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The seconds debugging counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $secondsDebugging = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The seconds planning counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $secondsPlanning = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The seconds mapping counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $secondsMapping = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The seconds office counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $secondsOffice = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The total hours counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $totalHours = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The debugging hours counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $debuggingHours = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The planning hours counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $planningHours = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The mapping hours counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $mappingHours = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The office hours counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $officeHours = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The actual Total Hours counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $actualTotalHours = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The actual hours spent counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $actualHoursSpent = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The actual days spent counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $actualDaysSpent = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The total days counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $totalDays = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The actual Total Days counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $actualTotalDays = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The project week time counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $projectWeekTime = 0 ;
2017-12-14 23:10:47 +00:00
2017-03-03 21:53:18 +00:00
/**
* The project month time counter
2020-03-28 13:34:14 +00:00
*
2017-03-03 21:53:18 +00:00
* @ var int
*/
public $projectMonthTime = 0 ;
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* The template path
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var string
*/
public $templatePath ;
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* The custom template path
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var string
*/
public $templatePathCustom ;
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* The Joomla Version Data
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var object
*/
public $joomlaVersionData ;
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* Static File Content
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var array
*/
public $fileContentStatic = array ();
2017-12-14 23:10:47 +00:00
2020-01-25 22:24:42 +00:00
/**
* Extention Custom Fields
*
* @ var array
*/
public $extentionCustomfields = array ();
2020-02-13 12:24:13 +00:00
/**
* Extention Tracking Files Moved
*
* @ var array
*/
public $extentionTrackingFilesMoved = array ();
2018-09-25 20:02:48 +00:00
/**
* The standard folders
2020-03-28 13:34:14 +00:00
*
2018-09-25 20:02:48 +00:00
* @ var array
*/
public $stdFolders = array ( 'site' , 'admin' , 'media' );
2019-08-08 15:35:58 +00:00
/**
* The standard root files
2020-03-28 13:34:14 +00:00
*
2019-08-08 15:35:58 +00:00
* @ var array
*/
2020-03-28 13:34:14 +00:00
public $stdRootFiles
= array ( 'access.xml' , 'config.xml' , 'controller.php' , 'index.html' ,
'README.txt' );
2019-08-08 15:35:58 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* Dynamic File Content
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var array
*/
public $fileContentDynamic = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* The Component Sales name
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var string
*/
public $componentSalesName ;
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* The Component Backup name
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var string
*/
public $componentBackupName ;
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* The Component Folder name
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var string
*/
public $componentFolderName ;
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* The Component path
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var string
*/
public $componentPath ;
2017-12-14 23:10:47 +00:00
2019-08-04 22:38:53 +00:00
/**
* The Dynamic paths
2020-03-28 13:34:14 +00:00
*
2019-08-04 22:38:53 +00:00
* @ var array
*/
public $dynamicPaths = array ();
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* The not new static items
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var array
*/
public $notNew = array ();
2017-12-14 23:10:47 +00:00
2018-09-25 20:02:48 +00:00
/**
* Update the file content
2020-03-28 13:34:14 +00:00
*
2018-09-25 20:02:48 +00:00
* @ var array
*/
public $updateFileContent = array ();
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* The new files
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var array
*/
public $newFiles = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* The Checkin Switch
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ var boolean
*/
public $addCheckin = false ;
2017-12-14 23:10:47 +00:00
2018-02-28 02:27:03 +00:00
/**
* The Move Folders Switch
2020-03-28 13:34:14 +00:00
*
2018-02-28 02:27:03 +00:00
* @ var boolean
*/
public $setMoveFolders = false ;
2017-02-01 13:17:04 +00:00
/**
* The array of last modified dates
2020-03-28 13:34:14 +00:00
*
2017-02-01 13:17:04 +00:00
* @ var array
*/
protected $lastModifiedDate = array ();
2017-12-14 23:10:47 +00:00
2018-03-09 03:26:44 +00:00
/**
* The default view switch
2020-03-28 13:34:14 +00:00
*
2018-03-09 03:26:44 +00:00
* @ var bool / string
*/
public $dynamicDashboard = false ;
2020-04-23 21:15:07 +00:00
/**
* The default view type
*
* @ var string
*/
public $dynamicDashboardType ;
2016-02-26 00:20:09 +00:00
/**
* Constructor
*/
2017-12-14 23:10:47 +00:00
public function __construct ( $config = array ())
2016-02-26 00:20:09 +00:00
{
// first we run the perent constructor
if ( parent :: __construct ( $config ))
2017-10-12 00:50:14 +00:00
{
2019-08-08 15:35:58 +00:00
// set the standard admin file
$this -> stdRootFiles [] = $this -> componentData -> name_code . '.php' ;
2018-09-25 20:02:48 +00:00
// set incase no extra admin folder are loaded
2020-03-28 13:34:14 +00:00
$this -> fileContentStatic [ $this -> hhh . 'EXSTRA_ADMIN_FOLDERS'
. $this -> hhh ]
= '' ;
2018-09-25 20:02:48 +00:00
// set incase no extra site folder are loaded
2020-03-28 13:34:14 +00:00
$this -> fileContentStatic [ $this -> hhh . 'EXSTRA_SITE_FOLDERS'
. $this -> hhh ]
= '' ;
2018-09-25 20:02:48 +00:00
// set incase no extra media folder are loaded
2020-03-28 13:34:14 +00:00
$this -> fileContentStatic [ $this -> hhh . 'EXSTRA_MEDIA_FOLDERS'
. $this -> hhh ]
= '' ;
2018-09-25 20:02:48 +00:00
// set incase no extra admin files are loaded
2020-03-28 13:34:14 +00:00
$this -> fileContentStatic [ $this -> hhh . 'EXSTRA_ADMIN_FILES'
. $this -> hhh ]
= '' ;
2018-09-25 20:02:48 +00:00
// set incase no extra site files are loaded
2020-03-28 13:34:14 +00:00
$this -> fileContentStatic [ $this -> hhh . 'EXSTRA_SITE_FILES'
. $this -> hhh ]
= '' ;
2018-09-25 20:02:48 +00:00
// set incase no extra media files are loaded
2020-03-28 13:34:14 +00:00
$this -> fileContentStatic [ $this -> hhh . 'EXSTRA_MEDIA_FILES'
. $this -> hhh ]
= '' ;
2017-10-29 11:03:06 +00:00
// run global updater
ComponentbuilderHelper :: runGlobalUpdater ();
2016-02-26 00:20:09 +00:00
// set the template path
2020-03-28 13:34:14 +00:00
$this -> templatePath = $this -> compilerPath . '/joomla_'
. $config [ 'version' ];
2016-02-26 00:20:09 +00:00
// set some default names
2020-03-28 13:34:14 +00:00
$this -> componentSalesName = 'com_'
. $this -> componentData -> sales_name . '__J'
. $this -> joomlaVersion ;
$this -> componentBackupName = 'com_'
. $this -> componentData -> sales_name . '_v' . str_replace (
'.' , '_' , $this -> componentData -> component_version
) . '__J' . $this -> joomlaVersion ;
$this -> componentFolderName = 'com_'
. $this -> componentData -> name_code . '_v' . str_replace (
'.' , '_' , $this -> componentData -> component_version
) . '__J' . $this -> joomlaVersion ;
2016-02-26 00:20:09 +00:00
// set component folder path
2020-03-28 13:34:14 +00:00
$this -> componentPath = $this -> compilerPath . '/'
. $this -> componentFolderName ;
2016-02-26 00:20:09 +00:00
// set the template path for custom
2020-03-28 13:34:14 +00:00
$this -> templatePathCustom = $this -> params -> get (
'custom_folder_path' , JPATH_COMPONENT_ADMINISTRATOR . '/custom'
);
2016-02-26 00:20:09 +00:00
// make sure there is no old build
$this -> removeFolder ( $this -> componentPath );
2017-12-12 00:28:35 +00:00
// load the libraries files/folders and url's
2019-08-04 22:38:53 +00:00
$this -> setLibraries ();
2019-12-06 05:31:32 +00:00
// load the module files/folders and url's
$this -> buildModules ();
2019-08-04 22:38:53 +00:00
// load the plugin files/folders and url's
2019-08-22 01:54:47 +00:00
$this -> buildPlugins ();
2017-12-12 00:28:35 +00:00
// set the Joomla Version Data
2017-12-14 23:10:47 +00:00
$this -> joomlaVersionData = $this -> setJoomlaVersionData ();
2019-06-22 10:43:26 +00:00
// Trigger Event: jcb_ce_onAfterSetJoomlaVersionData
2020-03-28 13:34:14 +00:00
$this -> triggerEvent (
'jcb_ce_onAfterSetJoomlaVersionData' ,
array ( & $this -> componentContext , & $this -> joomlaVersionData )
);
2018-03-09 03:26:44 +00:00
// set the dashboard
$this -> setDynamicDashboard ();
2016-02-26 00:20:09 +00:00
// set the new folders
if ( ! $this -> setFolders ())
{
return false ;
}
// set all static folders and files
if ( ! $this -> setStatic ())
{
return false ;
}
// set all the dynamic folders and files
if ( ! $this -> setDynamique ())
{
return false ;
}
2020-03-28 13:34:14 +00:00
2016-02-26 00:20:09 +00:00
return true ;
}
2020-03-28 13:34:14 +00:00
2016-02-26 00:20:09 +00:00
return false ;
}
2017-12-14 23:10:47 +00:00
2016-09-03 21:44:47 +00:00
/**
* Set the line number in comments
2020-03-28 13:34:14 +00:00
*
* @ param int $nr The line number
*
2019-12-03 02:17:35 +00:00
* @ return string
2020-03-28 13:34:14 +00:00
*
2016-09-03 21:44:47 +00:00
*/
private function setLine ( $nr )
{
2017-04-06 08:47:51 +00:00
if ( $this -> debugLinenr )
2016-09-03 21:44:47 +00:00
{
2017-12-14 23:10:47 +00:00
return ' [Structure ' . $nr . ']' ;
2016-09-03 21:44:47 +00:00
}
2020-03-28 13:34:14 +00:00
2016-09-03 21:44:47 +00:00
return '' ;
}
2017-12-14 23:10:47 +00:00
2019-12-06 05:31:32 +00:00
/**
* Build the Modules files , folders , url ' s and config
*
* @ return void
*
*/
private function buildModules ()
{
if ( ComponentbuilderHelper :: checkArray ( $this -> joomlaModules ))
{
// Trigger Event: jcb_ce_onBeforeSetModules
2020-03-28 13:34:14 +00:00
$this -> triggerEvent (
'jcb_ce_onBeforeBuildModules' ,
array ( & $this -> componentContext , & $this -> joomlaModules )
);
2019-12-06 05:31:32 +00:00
foreach ( $this -> joomlaModules as $module )
{
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkObject ( $module )
&& isset ( $module -> folder_name )
&& ComponentbuilderHelper :: checkString (
$module -> folder_name
))
2019-12-06 05:31:32 +00:00
{
// module path
2020-03-28 13:34:14 +00:00
$module -> folder_path = $this -> compilerPath . '/'
. $module -> folder_name ;
2019-12-06 05:31:32 +00:00
// set the module paths
$this -> dynamicPaths [ $module -> key ] = $module -> folder_path ;
// make sure there is no old build
$this -> removeFolder ( $module -> folder_path );
2020-12-05 06:17:54 +00:00
// creat the main module folder
$this -> createFolder ( $module -> folder_path );
2019-12-06 05:31:32 +00:00
// set main mod file
2020-03-28 13:34:14 +00:00
$fileDetails = array ( 'path' => $module -> folder_path . '/'
. $module -> file_name . '.php' ,
'name' => $module -> file_name . '.php' ,
'zip' => $module -> file_name . '.php' );
$this -> writeFile (
$fileDetails [ 'path' ],
2019-12-06 05:31:32 +00:00
'<?php' . PHP_EOL . '// main modfile' .
PHP_EOL . $this -> hhh . 'BOM' . $this -> hhh . PHP_EOL .
PHP_EOL . '// No direct access to this file' . PHP_EOL .
2020-03-28 13:34:14 +00:00
" defined('_JEXEC') or die('Restricted access'); "
. PHP_EOL .
$this -> hhh . 'MODCODE' . $this -> hhh
);
2019-12-06 05:31:32 +00:00
$this -> newFiles [ $module -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
// set custom_get
if ( $module -> custom_get )
{
2020-03-28 13:34:14 +00:00
$fileDetails = array ( 'path' => $module -> folder_path
. '/data.php' ,
'name' => 'data.php' ,
'zip' => 'data.php' );
$this -> writeFile (
$fileDetails [ 'path' ],
2019-12-06 05:31:32 +00:00
'<?php' . PHP_EOL . '// get data file' .
2020-03-28 13:34:14 +00:00
PHP_EOL . $this -> hhh . 'BOM' . $this -> hhh . PHP_EOL
.
PHP_EOL . '// No direct access to this file'
. PHP_EOL .
" defined('_JEXEC') or die('Restricted access'); "
. PHP_EOL . PHP_EOL .
2019-12-06 05:31:32 +00:00
'/**' . PHP_EOL .
2020-03-28 13:34:14 +00:00
' * Module ' . $module -> official_name . ' Data'
. PHP_EOL .
2019-12-06 05:31:32 +00:00
' */' . PHP_EOL .
2020-03-28 13:34:14 +00:00
" class " . $module -> class_data_name
. ' extends \JObject' . PHP_EOL .
" { " . $this -> hhh . 'DYNAMICGETS' . $this -> hhh . " } "
. PHP_EOL
);
2019-12-06 05:31:32 +00:00
$this -> newFiles [ $module -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
}
// set helper file
if ( $module -> add_class_helper >= 1 )
{
2020-03-28 13:34:14 +00:00
$fileDetails = array ( 'path' => $module -> folder_path
. '/helper.php' ,
'name' => 'helper.php' ,
'zip' => 'helper.php' );
$this -> writeFile (
$fileDetails [ 'path' ],
2019-12-06 05:31:32 +00:00
'<?php' . PHP_EOL . '// helper file' .
2020-03-28 13:34:14 +00:00
PHP_EOL . $this -> hhh . 'BOM' . $this -> hhh . PHP_EOL
.
PHP_EOL . '// No direct access to this file'
. PHP_EOL .
" defined('_JEXEC') or die('Restricted access'); "
. PHP_EOL .
$this -> hhh . 'HELPERCODE' . $this -> hhh
);
2019-12-06 05:31:32 +00:00
$this -> newFiles [ $module -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
}
// set main xml file
2020-03-28 13:34:14 +00:00
$fileDetails = array ( 'path' => $module -> folder_path . '/'
. $module -> file_name . '.xml' ,
'name' => $module -> file_name . '.xml' ,
'zip' => $module -> file_name . '.xml' );
$this -> writeFile (
$fileDetails [ 'path' ],
$this -> getModuleXMLTemplate ( $module )
);
2019-12-06 05:31:32 +00:00
$this -> newFiles [ $module -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
// set tmpl folder
2020-12-05 06:17:54 +00:00
$this -> createFolder ( $module -> folder_path . '/tmpl' );
2019-12-06 05:31:32 +00:00
// set default file
2020-03-28 13:34:14 +00:00
$fileDetails = array ( 'path' => $module -> folder_path
. '/tmpl/default.php' ,
'name' => 'default.php' ,
'zip' => 'tmpl/default.php' );
$this -> writeFile (
$fileDetails [ 'path' ],
2019-12-06 05:31:32 +00:00
'<?php' . PHP_EOL . '// default tmpl' .
PHP_EOL . $this -> hhh . 'BOM' . $this -> hhh . PHP_EOL .
PHP_EOL . '// No direct access to this file' . PHP_EOL .
2020-03-28 13:34:14 +00:00
" defined('_JEXEC') or die('Restricted access'); "
. PHP_EOL .
$this -> hhh . 'MODDEFAULT' . $this -> hhh
);
2019-12-06 05:31:32 +00:00
$this -> newFiles [ $module -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
// set install script if needed
if ( $module -> add_install_script )
{
2020-03-28 13:34:14 +00:00
$fileDetails = array ( 'path' => $module -> folder_path
. '/script.php' ,
'name' => 'script.php' ,
'zip' => 'script.php' );
$this -> writeFile (
$fileDetails [ 'path' ],
2019-12-06 05:31:32 +00:00
'<?php' . PHP_EOL . '// Script template' .
2020-03-28 13:34:14 +00:00
PHP_EOL . $this -> hhh . 'BOM' . $this -> hhh . PHP_EOL
.
PHP_EOL . '// No direct access to this file'
. PHP_EOL .
" defined('_JEXEC') or die('Restricted access'); "
. PHP_EOL .
$this -> hhh . 'INSTALLCLASS' . $this -> hhh
);
2019-12-06 05:31:32 +00:00
$this -> newFiles [ $module -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
}
// set readme if found
if ( $module -> addreadme )
{
2020-03-28 13:34:14 +00:00
$fileDetails = array ( 'path' => $module -> folder_path
. '/README.md' ,
'name' => 'README.md' ,
'zip' => 'README.md' );
2019-12-06 05:31:32 +00:00
$this -> writeFile ( $fileDetails [ 'path' ], $module -> readme );
$this -> newFiles [ $module -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
}
2020-12-05 06:17:54 +00:00
// set the folders target path
$target_path = '' ;
if ( $module -> target_client === 'administrator' )
2019-12-06 05:31:32 +00:00
{
2020-12-05 06:17:54 +00:00
$target_path = '/administrator' ;
}
// check if we have custom fields needed for scripts
$module -> add_scripts_field = false ;
$field_script_bucket = array ();
// add any css from the fields
if (( $css = $this -> getCustomScriptBuilder (
'css_view' , $module -> key
)) !== null
&& ComponentbuilderHelper :: checkString ( $css ))
{
// make sure this script does not have PHP
if ( strpos ( $css , '<?php' ) === false )
2019-12-06 05:31:32 +00:00
{
2020-12-05 06:17:54 +00:00
// make sure the field is added
$module -> add_scripts_field = true ;
// create the css folder
$this -> createFolder ( $module -> folder_path . '/css' );
// add the CSS file
$fileDetails = array ( 'path' => $module -> folder_path
. '/css/mod_admin.css' ,
'name' => 'mod_admin.css' ,
'zip' => 'mod_admin.css' );
$this -> writeFile (
$fileDetails [ 'path' ],
$this -> hhh . 'BOM' . $this -> hhh . PHP_EOL
. PHP_EOL . $css
2020-03-28 13:34:14 +00:00
);
2020-12-05 06:17:54 +00:00
$this -> newFiles [ $module -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
// add the field script
$field_script_bucket [] = $this -> _t ( 2 ) . " // "
. $this -> setLine ( __LINE__ ) . " Custom CSS " ;
$field_script_bucket [] = $this -> _t ( 2 )
. " \$ document->addStyleSheet(' " . $target_path
. " /modules/ " . $module -> folder_name
. " /css/mod_admin.css', ['version' => 'auto', 'relative' => true]); " ;
2019-12-06 05:31:32 +00:00
}
2020-12-05 06:17:54 +00:00
}
// add any JavaScript from the fields
if (( $javascript = $this -> getCustomScriptBuilder (
'view_footer' , $module -> key
)) !== null
&& ComponentbuilderHelper :: checkString ( $javascript ))
{
// make sure this script does not have PHP
if ( strpos ( $javascript , '<?php' ) === false )
2019-12-06 05:31:32 +00:00
{
2020-12-05 06:17:54 +00:00
// make sure the field is added
$module -> add_scripts_field = true ;
// add the JavaScript file
$this -> createFolder ( $module -> folder_path . '/js' );
// add the CSS file
$fileDetails = array ( 'path' => $module -> folder_path
. '/js/mod_admin.js' ,
'name' => 'mod_admin.js' ,
'zip' => 'mod_admin.js' );
$this -> writeFile (
$fileDetails [ 'path' ],
$this -> hhh . 'BOM' . $this -> hhh . PHP_EOL
. PHP_EOL . $javascript
2020-03-28 13:34:14 +00:00
);
2020-12-05 06:17:54 +00:00
$this -> newFiles [ $module -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
// add the field script
$field_script_bucket [] = $this -> _t ( 2 ) . " // "
. $this -> setLine ( __LINE__ ) . " Custom JS " ;
$field_script_bucket [] = $this -> _t ( 2 )
. " \$ document->addScript(' " . $target_path
. " /modules/ " . $module -> folder_name
. " /js/mod_admin.js', ['version' => 'auto', 'relative' => true]); " ;
2019-12-06 05:31:32 +00:00
}
}
2020-12-05 06:17:54 +00:00
// set fields folders if needed
if ( $module -> add_scripts_field
|| ( isset ( $module -> fields_rules_paths )
&& $module -> fields_rules_paths == 2 ))
{
// create fields folder
$this -> createFolder ( $module -> folder_path . '/fields' );
// add the custom script field
if ( $module -> add_scripts_field )
{
$fileDetails = array ( 'path' => $module -> folder_path
. '/fields/modadminvvvvvvvdm.php' ,
'name' => 'modadminvvvvvvvdm.php' ,
'zip' => 'modadminvvvvvvvdm.php' );
$this -> writeFile (
$fileDetails [ 'path' ],
$this -> getModAdminVvvvvvvdm (
$field_script_bucket
)
);
$this -> newFiles [ $module -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
}
}
// set rules folders if needed
if ( isset ( $module -> fields_rules_paths )
&& $module -> fields_rules_paths == 2 )
{
// create rules folder
$this -> createFolder ( $module -> folder_path . '/rules' );
}
2019-12-06 05:31:32 +00:00
// set forms folder if needed
2020-03-28 13:34:14 +00:00
if ( isset ( $module -> form_files )
&& ComponentbuilderHelper :: checkArray (
$module -> form_files
))
2019-12-06 05:31:32 +00:00
{
// create forms folder
2020-12-05 06:17:54 +00:00
$this -> createFolder ( $module -> folder_path . '/forms' );
2019-12-06 05:31:32 +00:00
// set the template files
2020-03-28 13:34:14 +00:00
foreach ( $module -> form_files as $file => $fields )
2019-12-06 05:31:32 +00:00
{
// set file details
2020-03-28 13:34:14 +00:00
$fileDetails = array ( 'path' => $module -> folder_path
. '/forms/' . $file . '.xml' ,
'name' => $file . '.xml' ,
'zip' => 'forms/' . $file
. '.xml' );
2020-12-05 06:17:54 +00:00
// build basic XML
2019-12-06 05:31:32 +00:00
$xml = '<?xml version="1.0" encoding="utf-8"?>' ;
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . '<!--' . $this -> setLine ( __LINE__ )
. ' default paths of ' . $file
. ' form points to ' . $this -> componentCodeName
. ' -->' ;
2019-12-06 05:31:32 +00:00
// search if we must add the component path
$add_component_path = false ;
foreach ( $fields as $field_name => $fieldsets )
{
if ( ! $add_component_path )
{
foreach ( $fieldsets as $fieldset => $field )
{
2020-03-28 13:34:14 +00:00
if ( ! $add_component_path
&& isset (
$module -> fieldsets_paths [ $file
. $field_name . $fieldset ]
)
&& $module -> fieldsets_paths [ $file
. $field_name . $fieldset ] == 1 )
2019-12-06 05:31:32 +00:00
{
$add_component_path = true ;
}
}
}
}
// only add if part of the component field types path is required
if ( $add_component_path )
{
$xml .= PHP_EOL . '<form' ;
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 )
. 'addrulepath="/administrator/components/com_'
. $this -> componentCodeName
. '/models/rules"' ;
$xml .= PHP_EOL . $this -> _t ( 1 )
. 'addfieldpath="/administrator/components/com_'
. $this -> componentCodeName
. '/models/fields"' ;
2019-12-06 05:31:32 +00:00
$xml .= PHP_EOL . '>' ;
}
else
{
$xml .= PHP_EOL . '<form>' ;
}
// add the fields
foreach ( $fields as $field_name => $fieldsets )
{
// check if we have an double fields naming set
$field_name_inner = '' ;
$field_name_outer = $field_name ;
if ( strpos ( $field_name , '.' ) !== false )
{
$field_names = explode ( '.' , $field_name );
if ( count (( array ) $field_names ) == 2 )
{
$field_name_outer = $field_names [ 0 ];
$field_name_inner = $field_names [ 1 ];
}
}
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 )
. '<fields name="' . $field_name_outer
. '">' ;
2019-12-06 05:31:32 +00:00
foreach ( $fieldsets as $fieldset => $field )
{
// default to the field set name
$label = $fieldset ;
2020-03-28 13:34:14 +00:00
if ( isset (
$module -> fieldsets_label [ $file
. $field_name . $fieldset ]
))
2019-12-06 05:31:32 +00:00
{
2020-03-28 13:34:14 +00:00
$label = $module -> fieldsets_label [ $file
. $field_name . $fieldset ];
2019-12-06 05:31:32 +00:00
}
// add path to module rules and custom fields
2020-03-28 13:34:14 +00:00
if ( isset (
$module -> fieldsets_paths [ $file
. $field_name . $fieldset ]
)
&& $module -> fieldsets_paths [ $file
. $field_name . $fieldset ] == 2 )
2019-12-06 05:31:32 +00:00
{
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 ) . '<!--'
. $this -> setLine ( __LINE__ )
. ' default paths of ' . $fieldset
. ' fieldset points to the module -->' ;
$xml .= PHP_EOL . $this -> _t ( 1 )
. '<fieldset name="' . $fieldset
. '" label="' . $label . '"' ;
$xml .= PHP_EOL . $this -> _t ( 2 )
. 'addrulepath="/modules/'
. strtolower ( $module -> code_name )
. '/rules"' ;
$xml .= PHP_EOL . $this -> _t ( 2 )
. 'addfieldpath="/modules/'
. strtolower ( $module -> code_name )
. '/fields"' ;
2019-12-06 05:31:32 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 ) . '>' ;
}
else
{
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 )
. '<fieldset name="' . $fieldset
. '" label="' . $label . '">' ;
2019-12-06 05:31:32 +00:00
}
// check if we have an inner field set
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkString (
$field_name_inner
))
2019-12-06 05:31:32 +00:00
{
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 )
. '<fields name="'
. $field_name_inner . '">' ;
2019-12-06 05:31:32 +00:00
}
// add the placeholder of the fields
2020-03-28 13:34:14 +00:00
$xml .= $this -> hhh . 'FIELDSET_' . $file
. $field_name . $fieldset . $this -> hhh ;
2019-12-06 05:31:32 +00:00
// check if we have an inner field set
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkString (
$field_name_inner
))
2019-12-06 05:31:32 +00:00
{
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 )
. '</fields>' ;
2019-12-06 05:31:32 +00:00
}
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 )
. '</fieldset>' ;
2019-12-06 05:31:32 +00:00
}
$xml .= PHP_EOL . $this -> _t ( 1 ) . '</fields>' ;
}
$xml .= PHP_EOL . '</form>' ;
// add xml to file
$this -> writeFile ( $fileDetails [ 'path' ], $xml );
$this -> newFiles [ $module -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
}
}
// set SQL stuff if needed
if ( $module -> add_sql || $module -> add_sql_uninstall )
{
// create SQL folder
2020-12-05 06:17:54 +00:00
$this -> createFolder ( $module -> folder_path . '/sql' );
2019-12-06 05:31:32 +00:00
// create mysql folder
2020-12-05 06:17:54 +00:00
$this -> createFolder (
2020-03-28 13:34:14 +00:00
$module -> folder_path . '/sql/mysql'
2020-12-05 06:17:54 +00:00
);
2019-12-06 05:31:32 +00:00
// now set the install file
if ( $module -> add_sql )
{
2020-03-28 13:34:14 +00:00
$this -> writeFile (
$module -> folder_path . '/sql/mysql/install.sql' ,
$module -> sql
);
2019-12-06 05:31:32 +00:00
// count the file created
$this -> fileCount ++ ;
}
// now set the uninstall file
if ( $module -> add_sql_uninstall )
{
2020-03-28 13:34:14 +00:00
$this -> writeFile (
$module -> folder_path
. '/sql/mysql/uninstall.sql' ,
$module -> sql_uninstall
);
2019-12-06 05:31:32 +00:00
// count the file created
$this -> fileCount ++ ;
}
}
// creat the language folder
2020-12-05 06:17:54 +00:00
$this -> createFolder ( $module -> folder_path . '/language' );
// also create the lang tag folder
$this -> createFolder (
$module -> folder_path . '/language/' . $this -> langTag
);
2019-12-06 05:31:32 +00:00
// check if this lib has files
2020-03-28 13:34:14 +00:00
if ( isset ( $module -> files )
&& ComponentbuilderHelper :: checkArray ( $module -> files ))
2019-12-06 05:31:32 +00:00
{
// add to component files
foreach ( $module -> files as $file )
{
// set the path finder
2020-03-28 13:34:14 +00:00
$file [ 'target_type' ] = $module -> target_type ;
$file [ 'target_id' ] = $module -> id ;
2019-12-06 05:31:32 +00:00
$this -> componentData -> files [] = $file ;
}
}
// check if this lib has folders
2020-03-28 13:34:14 +00:00
if ( isset ( $module -> folders )
&& ComponentbuilderHelper :: checkArray ( $module -> folders ))
2019-12-06 05:31:32 +00:00
{
// add to component folders
foreach ( $module -> folders as $folder )
{
// set the path finder
2020-03-28 13:34:14 +00:00
$folder [ 'target_type' ] = $module -> target_type ;
$folder [ 'target_id' ] = $module -> id ;
2019-12-06 05:31:32 +00:00
$this -> componentData -> folders [] = $folder ;
}
}
// check if this module has urls
2020-03-28 13:34:14 +00:00
if ( isset ( $module -> urls )
&& ComponentbuilderHelper :: checkArray ( $module -> urls ))
2019-12-06 05:31:32 +00:00
{
// add to component urls
foreach ( $module -> urls as $n => & $url )
{
// should we add the local folder
2020-03-28 13:34:14 +00:00
if ( isset ( $url [ 'type' ]) && $url [ 'type' ] > 1
&& isset ( $url [ 'url' ])
&& ComponentbuilderHelper :: checkString (
$url [ 'url' ]
))
2019-12-06 05:31:32 +00:00
{
// set file name
$fileName = basename ( $url [ 'url' ]);
// get the file contents
2020-03-28 13:34:14 +00:00
$data = ComponentbuilderHelper :: getFileContents (
$url [ 'url' ]
);
2019-12-06 05:31:32 +00:00
// build sub path
if ( strpos ( $fileName , '.js' ) !== false )
{
$path = '/js' ;
}
elseif ( strpos ( $fileName , '.css' ) !== false )
{
$path = '/css' ;
}
else
{
$path = '' ;
}
// create sub media path if not set
2020-12-05 06:17:54 +00:00
$this -> createFolder (
2020-03-28 13:34:14 +00:00
$module -> folder_path . $path
2020-12-05 06:17:54 +00:00
);
2019-12-06 05:31:32 +00:00
// set the path to module file
2020-03-28 13:34:14 +00:00
$url [ 'path' ] = $module -> folder_path . $path
. '/' . $fileName ; // we need this for later
2019-12-06 05:31:32 +00:00
// write data to path
$this -> writeFile ( $url [ 'path' ], $data );
// count the file created
$this -> fileCount ++ ;
}
}
}
}
}
}
}
2019-08-04 22:38:53 +00:00
/**
* Build the Plugins files , folders , url ' s and config
2020-03-28 13:34:14 +00:00
*
2019-08-04 22:38:53 +00:00
* @ return void
2020-03-28 13:34:14 +00:00
*
2019-08-04 22:38:53 +00:00
*/
2019-08-22 01:54:47 +00:00
private function buildPlugins ()
2019-08-04 22:38:53 +00:00
{
2019-08-22 01:54:47 +00:00
if ( ComponentbuilderHelper :: checkArray ( $this -> joomlaPlugins ))
2019-08-04 22:38:53 +00:00
{
// Trigger Event: jcb_ce_onBeforeSetPlugins
2020-03-28 13:34:14 +00:00
$this -> triggerEvent (
'jcb_ce_onBeforeBuildPlugins' ,
array ( & $this -> componentContext , & $this -> joomlaPlugins )
);
2019-08-22 01:54:47 +00:00
foreach ( $this -> joomlaPlugins as $plugin )
2019-08-04 22:38:53 +00:00
{
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkObject ( $plugin )
&& isset ( $plugin -> folder_name )
&& ComponentbuilderHelper :: checkString (
$plugin -> folder_name
))
2019-08-04 22:38:53 +00:00
{
// plugin path
2020-03-28 13:34:14 +00:00
$plugin -> folder_path = $this -> compilerPath . '/'
. $plugin -> folder_name ;
2019-08-04 22:38:53 +00:00
// set the plugin paths
$this -> dynamicPaths [ $plugin -> key ] = $plugin -> folder_path ;
// make sure there is no old build
$this -> removeFolder ( $plugin -> folder_path );
// creat the main component folder
2020-12-05 06:17:54 +00:00
$this -> createFolder ( $plugin -> folder_path );
2019-08-04 22:38:53 +00:00
// set main class file
2020-03-28 13:34:14 +00:00
$fileDetails = array ( 'path' => $plugin -> folder_path . '/'
. $plugin -> file_name . '.php' ,
'name' => $plugin -> file_name . '.php' ,
'zip' => $plugin -> file_name . '.php' );
$this -> writeFile (
$fileDetails [ 'path' ],
2019-08-08 15:35:58 +00:00
'<?php' . PHP_EOL . '// Plugin main class template' .
PHP_EOL . $this -> hhh . 'BOM' . $this -> hhh . PHP_EOL .
PHP_EOL . '// No direct access to this file' . PHP_EOL .
2020-03-28 13:34:14 +00:00
" defined('_JEXEC') or die('Restricted access'); "
. PHP_EOL .
$this -> hhh . 'MAINCLASS' . $this -> hhh
);
2019-08-04 22:38:53 +00:00
$this -> newFiles [ $plugin -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
// set main xml file
2020-03-28 13:34:14 +00:00
$fileDetails = array ( 'path' => $plugin -> folder_path . '/'
. $plugin -> file_name . '.xml' ,
'name' => $plugin -> file_name . '.xml' ,
'zip' => $plugin -> file_name . '.xml' );
$this -> writeFile (
$fileDetails [ 'path' ],
$this -> getPluginXMLTemplate ( $plugin )
);
2019-08-04 22:38:53 +00:00
$this -> newFiles [ $plugin -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
// set install script if needed
if ( $plugin -> add_install_script )
{
2020-03-28 13:34:14 +00:00
$fileDetails = array ( 'path' => $plugin -> folder_path
. '/script.php' ,
'name' => 'script.php' ,
'zip' => 'script.php' );
$this -> writeFile (
$fileDetails [ 'path' ],
2019-08-08 15:35:58 +00:00
'<?php' . PHP_EOL . '// Script template' .
2020-03-28 13:34:14 +00:00
PHP_EOL . $this -> hhh . 'BOM' . $this -> hhh . PHP_EOL
.
PHP_EOL . '// No direct access to this file'
. PHP_EOL .
" defined('_JEXEC') or die('Restricted access'); "
. PHP_EOL .
$this -> hhh . 'INSTALLCLASS' . $this -> hhh
);
2019-08-04 22:38:53 +00:00
$this -> newFiles [ $plugin -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
}
// set readme if found
if ( $plugin -> addreadme )
{
2020-03-28 13:34:14 +00:00
$fileDetails = array ( 'path' => $plugin -> folder_path
. '/README.md' ,
'name' => 'README.md' ,
'zip' => 'README.md' );
2019-08-04 22:38:53 +00:00
$this -> writeFile ( $fileDetails [ 'path' ], $plugin -> readme );
$this -> newFiles [ $plugin -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
}
2019-08-22 01:54:47 +00:00
// set fields & rules folders if needed
2020-03-28 13:34:14 +00:00
if ( isset ( $plugin -> fields_rules_paths )
&& $plugin -> fields_rules_paths == 2 )
2019-08-22 01:54:47 +00:00
{
// create fields folder
2020-12-05 06:17:54 +00:00
$this -> createFolder ( $plugin -> folder_path . '/fields' );
2019-08-22 01:54:47 +00:00
// create rules folder
2020-12-05 06:17:54 +00:00
$this -> createFolder ( $plugin -> folder_path . '/rules' );
2019-08-22 01:54:47 +00:00
}
// set forms folder if needed
2020-03-28 13:34:14 +00:00
if ( isset ( $plugin -> form_files )
&& ComponentbuilderHelper :: checkArray (
$plugin -> form_files
))
2019-08-22 01:54:47 +00:00
{
// create forms folder
2020-12-05 06:17:54 +00:00
$this -> createFolder ( $plugin -> folder_path . '/forms' );
2019-08-22 01:54:47 +00:00
// set the template files
2020-03-28 13:34:14 +00:00
foreach ( $plugin -> form_files as $file => $fields )
2019-08-22 01:54:47 +00:00
{
// set file details
2020-03-28 13:34:14 +00:00
$fileDetails = array ( 'path' => $plugin -> folder_path
. '/forms/' . $file . '.xml' ,
'name' => $file . '.xml' ,
'zip' => 'forms/' . $file
. '.xml' );
2019-08-22 01:54:47 +00:00
// biuld basic XML
$xml = '<?xml version="1.0" encoding="utf-8"?>' ;
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . '<!--' . $this -> setLine ( __LINE__ )
. ' default paths of ' . $file
. ' form points to ' . $this -> componentCodeName
. ' -->' ;
2019-12-03 02:17:35 +00:00
// search if we must add the component path
$add_component_path = false ;
foreach ( $fields as $field_name => $fieldsets )
{
if ( ! $add_component_path )
{
foreach ( $fieldsets as $fieldset => $field )
{
2020-03-28 13:34:14 +00:00
if ( ! $add_component_path
&& isset (
$plugin -> fieldsets_paths [ $file
. $field_name . $fieldset ]
)
&& $plugin -> fieldsets_paths [ $file
. $field_name . $fieldset ] == 1 )
2019-12-03 02:17:35 +00:00
{
$add_component_path = true ;
}
}
}
}
// only add if part of the component field types path is required
if ( $add_component_path )
{
$xml .= PHP_EOL . '<form' ;
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 )
. 'addrulepath="/administrator/components/com_'
. $this -> componentCodeName
. '/models/rules"' ;
$xml .= PHP_EOL . $this -> _t ( 1 )
. 'addfieldpath="/administrator/components/com_'
. $this -> componentCodeName
. '/models/fields"' ;
2019-12-03 02:17:35 +00:00
$xml .= PHP_EOL . '>' ;
}
else
{
$xml .= PHP_EOL . '<form>' ;
}
// add the fields
2019-08-22 01:54:47 +00:00
foreach ( $fields as $field_name => $fieldsets )
{
2019-10-11 13:41:00 +00:00
// check if we have an double fields naming set
$field_name_inner = '' ;
$field_name_outer = $field_name ;
if ( strpos ( $field_name , '.' ) !== false )
{
$field_names = explode ( '.' , $field_name );
if ( count (( array ) $field_names ) == 2 )
{
$field_name_outer = $field_names [ 0 ];
$field_name_inner = $field_names [ 1 ];
}
}
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 )
. '<fields name="' . $field_name_outer
. '">' ;
2019-08-22 01:54:47 +00:00
foreach ( $fieldsets as $fieldset => $field )
{
// default to the field set name
$label = $fieldset ;
2020-03-28 13:34:14 +00:00
if ( isset (
$plugin -> fieldsets_label [ $file
. $field_name . $fieldset ]
))
2019-08-22 01:54:47 +00:00
{
2020-03-28 13:34:14 +00:00
$label = $plugin -> fieldsets_label [ $file
. $field_name . $fieldset ];
2019-08-22 01:54:47 +00:00
}
// add path to plugin rules and custom fields
2020-03-28 13:34:14 +00:00
if ( isset (
$plugin -> fieldsets_paths [ $file
. $field_name . $fieldset ]
)
&& $plugin -> fieldsets_paths [ $file
. $field_name . $fieldset ] == 2 )
2019-08-22 01:54:47 +00:00
{
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 ) . '<!--'
. $this -> setLine ( __LINE__ )
. ' default paths of ' . $fieldset
. ' fieldset points to the plugin -->' ;
$xml .= PHP_EOL . $this -> _t ( 1 )
. '<fieldset name="' . $fieldset
. '" label="' . $label . '"' ;
$xml .= PHP_EOL . $this -> _t ( 2 )
. 'addrulepath="/plugins/'
. strtolower ( $plugin -> group ) . '/'
. strtolower ( $plugin -> code_name )
. '/rules"' ;
$xml .= PHP_EOL . $this -> _t ( 2 )
. 'addfieldpath="/plugins/'
. strtolower ( $plugin -> group ) . '/'
. strtolower ( $plugin -> code_name )
. '/fields"' ;
2019-08-22 01:54:47 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 ) . '>' ;
}
else
{
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 )
. '<fieldset name="' . $fieldset
. '" label="' . $label . '">' ;
2019-08-22 01:54:47 +00:00
}
2019-10-11 13:41:00 +00:00
// check if we have an inner field set
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkString (
$field_name_inner
))
2019-10-11 13:41:00 +00:00
{
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 )
. '<fields name="'
. $field_name_inner . '">' ;
2019-10-11 13:41:00 +00:00
}
2019-08-22 01:54:47 +00:00
// add the placeholder of the fields
2020-03-28 13:34:14 +00:00
$xml .= $this -> hhh . 'FIELDSET_' . $file
. $field_name . $fieldset . $this -> hhh ;
2019-10-11 13:41:00 +00:00
// check if we have an inner field set
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkString (
$field_name_inner
))
2019-10-11 13:41:00 +00:00
{
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 )
. '</fields>' ;
2019-10-11 13:41:00 +00:00
}
2020-03-28 13:34:14 +00:00
$xml .= PHP_EOL . $this -> _t ( 1 )
. '</fieldset>' ;
2019-08-22 01:54:47 +00:00
}
$xml .= PHP_EOL . $this -> _t ( 1 ) . '</fields>' ;
}
$xml .= PHP_EOL . '</form>' ;
// add xml to file
$this -> writeFile ( $fileDetails [ 'path' ], $xml );
$this -> newFiles [ $plugin -> key ][] = $fileDetails ;
// count the file created
$this -> fileCount ++ ;
}
}
2019-08-04 22:38:53 +00:00
// set SQL stuff if needed
if ( $plugin -> add_sql || $plugin -> add_sql_uninstall )
{
// create SQL folder
2020-12-05 06:17:54 +00:00
$this -> createFolder ( $plugin -> folder_path . '/sql' );
2019-08-04 22:38:53 +00:00
// create mysql folder
2020-12-05 06:17:54 +00:00
$this -> createFolder (
2020-03-28 13:34:14 +00:00
$plugin -> folder_path . '/sql/mysql'
2020-12-05 06:17:54 +00:00
);
2019-08-04 22:38:53 +00:00
// now set the install file
if ( $plugin -> add_sql )
{
2020-03-28 13:34:14 +00:00
$this -> writeFile (
$plugin -> folder_path . '/sql/mysql/install.sql' ,
$plugin -> sql
);
2019-08-04 22:38:53 +00:00
// count the file created
$this -> fileCount ++ ;
}
// now set the uninstall file
if ( $plugin -> add_sql_uninstall )
{
2020-03-28 13:34:14 +00:00
$this -> writeFile (
$plugin -> folder_path
. '/sql/mysql/uninstall.sql' ,
$plugin -> sql_uninstall
);
2019-08-04 22:38:53 +00:00
// count the file created
$this -> fileCount ++ ;
}
}
2020-12-05 06:17:54 +00:00
// creat the language folder path
$this -> createFolder ( $plugin -> folder_path . '/language' );
// also creat the lang tag folder path
$this -> createFolder (
$plugin -> folder_path . '/language/' . $this -> langTag
);
2019-08-04 22:38:53 +00:00
// check if this lib has files
2020-03-28 13:34:14 +00:00
if ( isset ( $plugin -> files )
&& ComponentbuilderHelper :: checkArray ( $plugin -> files ))
2019-08-04 22:38:53 +00:00
{
// add to component files
foreach ( $plugin -> files as $file )
{
// set the path finder
2020-03-28 13:34:14 +00:00
$file [ 'target_type' ] = $plugin -> target_type ;
$file [ 'target_id' ] = $plugin -> id ;
2019-08-04 22:38:53 +00:00
$this -> componentData -> files [] = $file ;
}
}
// check if this lib has folders
2020-03-28 13:34:14 +00:00
if ( isset ( $plugin -> folders )
&& ComponentbuilderHelper :: checkArray ( $plugin -> folders ))
2019-08-04 22:38:53 +00:00
{
// add to component folders
foreach ( $plugin -> folders as $folder )
{
// set the path finder
2020-03-28 13:34:14 +00:00
$folder [ 'target_type' ] = $plugin -> target_type ;
$folder [ 'target_id' ] = $plugin -> id ;
2019-08-04 22:38:53 +00:00
$this -> componentData -> folders [] = $folder ;
}
}
// check if this plugin has urls
2020-03-28 13:34:14 +00:00
if ( isset ( $plugin -> urls )
&& ComponentbuilderHelper :: checkArray ( $plugin -> urls ))
2019-08-04 22:38:53 +00:00
{
// add to component urls
foreach ( $plugin -> urls as $n => & $url )
{
// should we add the local folder
2020-03-28 13:34:14 +00:00
if ( isset ( $url [ 'type' ]) && $url [ 'type' ] > 1
&& isset ( $url [ 'url' ])
&& ComponentbuilderHelper :: checkString (
$url [ 'url' ]
))
2019-08-04 22:38:53 +00:00
{
// set file name
$fileName = basename ( $url [ 'url' ]);
// get the file contents
2020-03-28 13:34:14 +00:00
$data = ComponentbuilderHelper :: getFileContents (
$url [ 'url' ]
);
2019-08-04 22:38:53 +00:00
// build sub path
if ( strpos ( $fileName , '.js' ) !== false )
{
$path = '/js' ;
}
elseif ( strpos ( $fileName , '.css' ) !== false )
{
$path = '/css' ;
}
else
{
$path = '' ;
}
2020-12-05 06:17:54 +00:00
// create sub media media folder path if not set
$this -> createFolder (
2020-03-28 13:34:14 +00:00
$plugin -> folder_path . $path
2020-12-05 06:17:54 +00:00
);
2019-08-04 22:38:53 +00:00
// set the path to plugin file
2020-03-28 13:34:14 +00:00
$url [ 'path' ] = $plugin -> folder_path . $path
. '/' . $fileName ; // we need this for later
2019-08-04 22:38:53 +00:00
// write data to path
$this -> writeFile ( $url [ 'path' ], $data );
// count the file created
$this -> fileCount ++ ;
}
}
}
}
}
}
}
2020-12-05 06:17:54 +00:00
/**
* Create Path if not exist
*
* @ return void
*/
private function createFolder ( $path )
{
// check if the path exist
2021-03-07 21:40:55 +00:00
if ( ! Folder :: exists (
2020-12-05 06:17:54 +00:00
$path
))
{
// create the path
2021-03-07 21:40:55 +00:00
Folder :: create (
2020-12-05 06:17:54 +00:00
$path
);
// count the folder created
$this -> folderCount ++ ;
// add index.html (boring I know)
$this -> indexHTML (
$path , ''
);
}
}
2017-12-10 19:17:26 +00:00
/**
* Build the Libraries files , folders , url ' s and config
2020-03-28 13:34:14 +00:00
*
2017-12-10 19:17:26 +00:00
* @ return void
2020-03-28 13:34:14 +00:00
*
2017-12-10 19:17:26 +00:00
*/
2019-08-04 22:38:53 +00:00
private function setLibraries ()
2017-12-10 19:17:26 +00:00
{
if ( ComponentbuilderHelper :: checkArray ( $this -> libraries ))
{
2019-08-04 22:38:53 +00:00
// Trigger Event: jcb_ce_onBeforeSetLibraries
2020-03-28 13:34:14 +00:00
$this -> triggerEvent (
'jcb_ce_onBeforeSetLibraries' ,
array ( & $this -> componentContext , & $this -> libraries )
);
2017-12-12 00:28:35 +00:00
// creat the main component folder
2021-03-07 21:40:55 +00:00
if ( ! Folder :: exists ( $this -> componentPath ))
2017-12-12 00:28:35 +00:00
{
2021-03-07 21:40:55 +00:00
Folder :: create ( $this -> componentPath );
2017-12-12 00:28:35 +00:00
// count the folder created
$this -> folderCount ++ ;
$this -> indexHTML ( '' );
}
// create media path if not set
2020-12-05 06:17:54 +00:00
$this -> createFolder ( $this -> componentPath . '/media' );
2017-12-14 23:10:47 +00:00
foreach ( $this -> libraries as $id => & $library )
2017-12-10 19:17:26 +00:00
{
if ( ComponentbuilderHelper :: checkObject ( $library ))
{
// check if this lib has files
2020-03-28 13:34:14 +00:00
if ( isset ( $library -> files )
&& ComponentbuilderHelper :: checkArray ( $library -> files ))
2017-12-10 19:17:26 +00:00
{
// add to component files
foreach ( $library -> files as $file )
{
$this -> componentData -> files [] = $file ;
}
}
// check if this lib has folders
2020-03-28 13:34:14 +00:00
if ( isset ( $library -> folders )
&& ComponentbuilderHelper :: checkArray (
$library -> folders
))
2017-12-10 19:17:26 +00:00
{
// add to component folders
foreach ( $library -> folders as $folder )
{
$this -> componentData -> folders [] = $folder ;
}
}
// check if this lib has urls
2020-03-28 13:34:14 +00:00
if ( isset ( $library -> urls )
&& ComponentbuilderHelper :: checkArray ( $library -> urls ))
2017-12-10 19:17:26 +00:00
{
// build media folder path
2020-03-28 13:34:14 +00:00
$libFolder = strtolower (
preg_replace (
'/\s+/' , '-' ,
ComponentbuilderHelper :: safeString (
$library -> name , 'filename' , ' ' , false
)
)
);
2017-12-12 00:28:35 +00:00
$mediaPath = '/media/' . $libFolder ;
// should we add the local folder
$addLocalFolder = false ;
2017-12-10 19:17:26 +00:00
// add to component urls
foreach ( $library -> urls as $n => & $url )
{
2020-03-28 13:34:14 +00:00
if ( isset ( $url [ 'type' ]) && $url [ 'type' ] > 1
&& isset ( $url [ 'url' ])
&& ComponentbuilderHelper :: checkString (
$url [ 'url' ]
))
2017-12-10 19:17:26 +00:00
{
2017-12-12 00:28:35 +00:00
// create media/lib path if not set
2020-12-05 06:17:54 +00:00
$this -> createFolder (
2020-03-28 13:34:14 +00:00
$this -> componentPath . $mediaPath
2020-12-05 06:17:54 +00:00
);
2017-12-12 00:28:35 +00:00
// add local folder
$addLocalFolder = true ;
// set file name
2017-12-10 19:17:26 +00:00
$fileName = basename ( $url [ 'url' ]);
// get the file contents
2020-03-28 13:34:14 +00:00
$data = ComponentbuilderHelper :: getFileContents (
$url [ 'url' ]
);
2017-12-10 19:17:26 +00:00
// build sub path
if ( strpos ( $fileName , '.js' ) !== false )
{
$path = '/js' ;
}
elseif ( strpos ( $fileName , '.css' ) !== false )
{
$path = '/css' ;
}
else
{
$path = '' ;
}
// create sub media path if not set
2020-12-05 06:17:54 +00:00
$this -> createFolder (
2020-03-28 13:34:14 +00:00
$this -> componentPath . $mediaPath . $path
2020-12-05 06:17:54 +00:00
);
2017-12-10 19:17:26 +00:00
// set the path to library file
2020-03-28 13:34:14 +00:00
$url [ 'path' ] = $mediaPath . $path . '/'
. $fileName ; // we need this for later
2017-12-10 19:17:26 +00:00
// set full path
$path = $this -> componentPath . $url [ 'path' ];
// write data to path
$this -> writeFile ( $path , $data );
// count the file created
$this -> fileCount ++ ;
}
}
2017-12-12 00:28:35 +00:00
// only add if local
if ( $addLocalFolder )
{
2019-08-04 22:38:53 +00:00
// add folder to xml of media folders
2020-03-28 13:34:14 +00:00
$this -> fileContentStatic [ $this -> hhh
. 'EXSTRA_MEDIA_FOLDERS' . $this -> hhh ]
.= PHP_EOL . $this -> _t ( 2 ) . " <folder> "
. $libFolder . " </folder> " ;
2017-12-12 00:28:35 +00:00
}
2017-12-10 19:17:26 +00:00
}
// if config fields are found load into component config (avoiding dublicates)
2020-03-28 13:34:14 +00:00
if ( isset ( $library -> how ) && $library -> how > 1
&& isset ( $library -> config )
&& ComponentbuilderHelper :: checkArray ( $library -> config ))
2017-12-10 19:17:26 +00:00
{
foreach ( $library -> config as $cofig )
{
2020-03-28 13:34:14 +00:00
$found = array_filter (
$this -> componentData -> config ,
function ( $item ) use ( $cofig ) {
return $item [ 'field' ] == $cofig [ 'field' ];
}
);
2017-12-10 19:17:26 +00:00
// set the config data if not found
if ( ! ComponentbuilderHelper :: checkArray ( $found ))
{
$this -> componentData -> config [] = $cofig ;
}
}
}
}
}
}
}
2017-12-14 23:10:47 +00:00
2018-03-09 03:26:44 +00:00
/**
* set the dynamic dashboard if set
2020-03-28 13:34:14 +00:00
*
2018-03-09 03:26:44 +00:00
* @ return void
2020-03-28 13:34:14 +00:00
*
2018-03-09 03:26:44 +00:00
*/
private function setDynamicDashboard ()
{
2018-03-10 01:50:09 +00:00
// only add the dynamic dashboard if all checks out
2020-03-28 13:34:14 +00:00
if ( isset ( $this -> componentData -> dashboard_type )
&& 2 == $this -> componentData -> dashboard_type
&& isset ( $this -> componentData -> dashboard )
&& ComponentbuilderHelper :: checkString (
$this -> componentData -> dashboard
)
&& strpos ( $this -> componentData -> dashboard , '_' ) !== false )
2018-03-09 03:26:44 +00:00
{
// set the default view
2018-03-18 04:52:07 +00:00
$getter = explode ( '_' , $this -> componentData -> dashboard );
2019-09-05 21:12:56 +00:00
if ( count (( array ) $getter ) == 2 && is_numeric ( $getter [ 1 ]))
2018-03-09 03:26:44 +00:00
{
2018-03-10 01:50:09 +00:00
// the pointers
2020-03-28 13:34:14 +00:00
$t = ComponentbuilderHelper :: safeString ( $getter [ 0 ], 'U' );
2018-03-11 02:44:43 +00:00
$id = ( int ) $getter [ 1 ];
2018-03-10 01:50:09 +00:00
// the dynamic stuff
2020-03-28 13:34:14 +00:00
$targets = array ( 'A' => 'admin_views' ,
'C' => 'custom_admin_views' );
$names = array ( 'A' => 'admin view' ,
'C' => 'custom admin view' );
$types = array ( 'A' => 'adminview' , 'C' => 'customadminview' );
$keys = array ( 'A' => 'name_list' , 'C' => 'code' );
2018-03-10 01:50:09 +00:00
// check the target values
if ( isset ( $targets [ $t ]) && $id > 0 )
2018-03-09 03:26:44 +00:00
{
2018-03-11 02:44:43 +00:00
// set the type name
2020-03-28 13:34:14 +00:00
$type_names = ComponentbuilderHelper :: safeString (
$targets [ $t ], 'w'
);
2018-03-10 01:50:09 +00:00
// set the dynamic dash
2020-03-28 13:34:14 +00:00
if ( isset ( $this -> componentData -> { $targets [ $t ]})
&& ComponentbuilderHelper :: checkArray (
$this -> componentData -> { $targets [ $t ]}
))
2018-03-10 01:50:09 +00:00
{
// search the target views
2020-03-28 13:34:14 +00:00
$dashboard = ( array ) array_filter (
$this -> componentData -> { $targets [ $t ]},
function ( $view ) use ( $id , $t , $types ) {
if ( isset ( $view [ $types [ $t ]])
&& $id == $view [ $types [ $t ]])
2018-03-18 04:52:07 +00:00
{
return true ;
}
2020-03-28 13:34:14 +00:00
2018-03-18 04:52:07 +00:00
return false ;
2020-03-28 13:34:14 +00:00
}
);
2018-05-17 01:02:11 +00:00
// set dashboard
if ( ComponentbuilderHelper :: checkArray ( $dashboard ))
{
$dashboard = array_values ( $dashboard )[ 0 ];
}
2018-03-10 01:50:09 +00:00
// check if view was found (this should be true)
2020-03-28 13:34:14 +00:00
if ( isset ( $dashboard [ 'settings' ])
&& isset ( $dashboard [ 'settings' ] -> { $keys [ $t ]}))
2018-03-09 03:26:44 +00:00
{
2020-03-28 13:34:14 +00:00
$this -> dynamicDashboard
= ComponentbuilderHelper :: safeString (
$dashboard [ 'settings' ] -> { $keys [ $t ]}
);
2020-04-23 21:15:07 +00:00
$this -> dynamicDashboardType
= $targets [ $t ];
2018-03-09 03:26:44 +00:00
}
2018-03-10 01:50:09 +00:00
else
2018-03-09 03:26:44 +00:00
{
2018-03-10 01:50:09 +00:00
// set massage that something is wrong
2020-03-28 13:34:14 +00:00
$this -> app -> enqueueMessage (
JText :: _ ( '<hr /><h3>Dashboard Error</h3>' ),
'Error'
);
$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 ,
$type_names
), 'Error'
);
2018-03-09 03:26:44 +00:00
}
2018-03-10 01:50:09 +00:00
}
else
2018-03-09 03:26:44 +00:00
{
2018-03-10 01:50:09 +00:00
// set massage that something is wrong
2020-03-28 13:34:14 +00:00
$this -> app -> enqueueMessage (
JText :: _ ( '<hr /><h3>Dashboard Error</h3>' ), 'Error'
);
$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 ,
$type_names
), 'Error'
);
2018-03-09 03:26:44 +00:00
}
}
2018-03-10 01:50:09 +00:00
else
{
// the target value is wrong
2020-03-28 13:34:14 +00:00
$this -> app -> enqueueMessage (
JText :: _ ( '<hr /><h3>Dashboard Error</h3>' ), 'Error'
);
$this -> app -> enqueueMessage (
JText :: sprintf (
'The <b>%s</b> value for the dynamic dashboard is invalid.' ,
$this -> componentData -> dashboard
), 'Error'
);
2018-03-10 01:50:09 +00:00
}
}
else
{
// the target value is wrong
2020-03-28 13:34:14 +00:00
$this -> app -> enqueueMessage (
JText :: _ ( '<hr /><h3>Dashboard Error</h3>' ), 'Error'
);
$this -> app -> enqueueMessage (
JText :: sprintf (
'The <b>%s</b> value for the dynamic dashboard is invalid.' ,
$this -> componentData -> dashboard
), 'Error'
);
2018-03-09 03:26:44 +00:00
}
// if default was changed to dynamic dashboard the remove default tab and methods
if ( ComponentbuilderHelper :: checkString ( $this -> dynamicDashboard ))
{
// dynamic dashboard is used
2020-03-28 13:34:14 +00:00
$this -> componentData -> dashboard_tab = '' ;
2018-03-09 03:26:44 +00:00
$this -> componentData -> php_dashboard_methods = '' ;
}
}
}
2017-12-10 19:17:26 +00:00
/**
* Write data to file
2020-03-28 13:34:14 +00:00
*
2017-12-10 19:17:26 +00:00
* @ return bool true on success
2020-03-28 13:34:14 +00:00
*
2017-12-10 19:17:26 +00:00
*/
public function writeFile ( $path , $data )
{
return ComponentbuilderHelper :: writeFile ( $path , $data );
}
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* Build the Initial Folders
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ return void
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
*/
private function setFolders ()
{
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkObject (
$this -> joomlaVersionData -> create
))
2016-02-26 00:20:09 +00:00
{
2017-12-12 00:28:35 +00:00
// creat the main component folder
2021-03-07 21:40:55 +00:00
if ( ! Folder :: exists ( $this -> componentPath ))
2016-02-26 00:20:09 +00:00
{
2021-03-07 21:40:55 +00:00
Folder :: create ( $this -> componentPath );
2016-02-26 00:20:09 +00:00
// count the folder created
$this -> folderCount ++ ;
$this -> indexHTML ( '' );
}
// now build all folders needed for this component
foreach ( $this -> joomlaVersionData -> create as $main => $folders )
{
2020-12-05 06:17:54 +00:00
$this -> createFolder ( $this -> componentPath . '/' . $main );
2016-02-26 00:20:09 +00:00
if ( ComponentbuilderHelper :: checkObject ( $folders ))
{
foreach ( $folders as $sub => $subFolders )
{
2020-12-05 06:17:54 +00:00
$this -> createFolder (
2020-03-28 13:34:14 +00:00
$this -> componentPath . '/' . $main . '/' . $sub
2020-12-05 06:17:54 +00:00
);
2016-02-26 00:20:09 +00:00
if ( ComponentbuilderHelper :: checkObject ( $subFolders ))
{
foreach ( $subFolders as $sub_2 => $subFolders_2 )
{
2020-12-05 06:17:54 +00:00
$this -> createFolder (
2020-03-28 13:34:14 +00:00
$this -> componentPath . '/' . $main . '/'
. $sub . '/' . $sub_2
2020-12-05 06:17:54 +00:00
);
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkObject (
$subFolders_2
))
2016-02-26 00:20:09 +00:00
{
2020-03-28 13:34:14 +00:00
foreach (
$subFolders_2 as $sub_3 => $subFolders_3
)
2016-02-26 00:20:09 +00:00
{
2020-12-05 06:17:54 +00:00
$this -> createFolder (
2020-03-28 13:34:14 +00:00
$this -> componentPath . '/' . $main
. '/' . $sub . '/' . $sub_2 . '/'
. $sub_3
2020-12-05 06:17:54 +00:00
);
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkObject (
$subFolders_3
))
2016-02-26 00:20:09 +00:00
{
2020-03-28 13:34:14 +00:00
foreach (
$subFolders_3 as $sub_4 =>
$subFolders_4
)
2016-02-26 00:20:09 +00:00
{
2020-12-05 06:17:54 +00:00
$this -> createFolder (
2020-03-28 13:34:14 +00:00
$this -> componentPath . '/'
. $main . '/' . $sub . '/'
. $sub_2 . '/' . $sub_3
. '/' . $sub_4
2020-12-05 06:17:54 +00:00
);
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkObject (
$subFolders_4
))
2016-02-26 00:20:09 +00:00
{
2020-03-28 13:34:14 +00:00
foreach (
$subFolders_4 as $sub_5
=> $subFolders_5
)
2016-02-26 00:20:09 +00:00
{
2020-12-05 06:17:54 +00:00
$this -> createFolder (
2020-03-28 13:34:14 +00:00
$this -> componentPath
. '/' . $main . '/'
. $sub . '/'
. $sub_2 . '/'
. $sub_3 . '/'
. $sub_4 . '/'
. $sub_5
2020-12-05 06:17:54 +00:00
);
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkObject (
$subFolders_5
))
2016-02-26 00:20:09 +00:00
{
2020-03-28 13:34:14 +00:00
foreach (
$subFolders_5 as
$sub_6 =>
$subFolders_6
)
2016-02-26 00:20:09 +00:00
{
2020-12-05 06:17:54 +00:00
$this -> createFolder (
2020-03-28 13:34:14 +00:00
$this -> componentPath
. '/'
. $main
2020-12-05 06:17:54 +00:00
. '/'
. $sub
2020-03-28 13:34:14 +00:00
. '/'
. $sub_2
. '/'
. $sub_3
. '/'
. $sub_4
. '/'
. $sub_5
. '/'
. $sub_6
2020-12-05 06:17:54 +00:00
);
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkObject (
$subFolders_6
))
2016-02-26 00:20:09 +00:00
{
2020-03-28 13:34:14 +00:00
foreach (
$subFolders_6
as
$sub_7
=>
$subFolders_7
)
2016-02-26 00:20:09 +00:00
{
2020-12-05 06:17:54 +00:00
$this -> createFolder (
2020-03-28 13:34:14 +00:00
$this -> componentPath
. '/'
. $main
. '/'
. $sub
. '/'
. $sub_2
. '/'
. $sub_3
. '/'
. $sub_4
. '/'
. $sub_5
. '/'
. $sub_6
. '/'
. $sub_7
2020-12-05 06:17:54 +00:00
);
2016-02-26 00:20:09 +00:00
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
2020-03-28 13:34:14 +00:00
2016-02-26 00:20:09 +00:00
return true ;
}
2020-03-28 13:34:14 +00:00
2016-02-26 00:20:09 +00:00
return false ;
}
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* Set the Static File & Folder
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ return boolean
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
*/
private function setStatic ()
{
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkObject (
$this -> joomlaVersionData -> move -> static
))
2016-02-26 00:20:09 +00:00
{
2019-06-09 21:19:34 +00:00
$codeName = $this -> componentCodeName ;
2020-04-19 00:48:23 +00:00
// TODO needs more looking at this must be dynamic actually
2016-02-26 00:20:09 +00:00
$this -> notNew [] = 'LICENSE.txt' ;
// do license check
2020-03-28 13:34:14 +00:00
$LICENSE = false ;
2016-02-26 00:20:09 +00:00
$licenseChecker = strtolower ( $this -> componentData -> license );
2020-03-28 13:34:14 +00:00
if ( strpos ( $licenseChecker , 'gnu' ) !== false
&& strpos (
$licenseChecker , '2'
) !== false
&& ( strpos ( $licenseChecker , 'gpl' ) !== false
|| strpos (
$licenseChecker , 'general public license'
) !== false ))
2016-02-26 00:20:09 +00:00
{
2020-03-28 13:34:14 +00:00
$LICENSE
= true ; // we only add version 2 auto at this time (TODO)
2016-02-26 00:20:09 +00:00
}
// do README check
2017-12-14 23:10:47 +00:00
$README = false ;
2016-02-26 00:20:09 +00:00
// add the README file if needed
if ( $this -> componentData -> addreadme )
{
$README = true ;
}
// start moving
2020-03-28 13:34:14 +00:00
foreach (
$this -> joomlaVersionData -> move -> static as $ftem => $details
)
2016-02-26 00:20:09 +00:00
{
// set item
$item = $details -> naam ;
// do the file renaming
if ( $details -> rename )
{
2017-02-01 13:17:04 +00:00
if ( $details -> rename === 'new' )
2016-02-26 00:20:09 +00:00
{
$new = $details -> newName ;
}
else
{
$new = str_replace ( $details -> rename , $codeName , $item );
}
}
else
{
$new = $item ;
}
// if not gnu/gpl license dont add the LICENSE.txt file
2017-02-01 13:17:04 +00:00
if ( $item === 'LICENSE.txt' && ! $LICENSE )
2016-02-26 00:20:09 +00:00
{
continue ;
}
// if not needed do not add
2020-03-28 13:34:14 +00:00
if (( $item === 'README.md' || $item === 'README.txt' )
&& ! $README )
2016-02-26 00:20:09 +00:00
{
continue ;
}
2019-08-08 15:35:58 +00:00
// check if we have a target value
2019-08-04 22:38:53 +00:00
if ( isset ( $details -> _target ))
{
// set destination path
2020-03-28 13:34:14 +00:00
$zipPath = str_replace (
$details -> _target [ 'type' ] . '/' , '' , $details -> path
);
$path = str_replace (
$details -> _target [ 'type' ] . '/' ,
$this -> dynamicPaths [ $details -> _target [ 'key' ]] . '/' ,
$details -> path
);
2019-08-04 22:38:53 +00:00
}
else
{
// set destination path
$zipPath = str_replace ( 'c0mp0n3nt/' , '' , $details -> path );
2020-03-28 13:34:14 +00:00
$path = str_replace (
'c0mp0n3nt/' , $this -> componentPath . '/' , $details -> path
);
2019-08-04 22:38:53 +00:00
}
2016-02-26 00:20:09 +00:00
// set the template folder path
2020-03-28 13:34:14 +00:00
$templatePath = ( isset ( $details -> custom ) && $details -> custom )
? (( $details -> custom !== 'full' ) ? $this -> templatePathCustom
. '/' : '' ) : $this -> templatePath . '/' ;
2018-02-28 02:27:03 +00:00
// set the final paths
2020-03-28 13:34:14 +00:00
$currentFullPath = ( preg_match ( '/^[a-z]:/i' , $item )) ? $item
: $templatePath . '/' . $item ;
2019-03-13 12:20:51 +00:00
$currentFullPath = str_replace ( '//' , '/' , $currentFullPath );
2018-03-18 04:52:07 +00:00
$packageFullPath = str_replace ( '//' , '/' , $path . '/' . $new );
2020-03-28 13:34:14 +00:00
$zipFullPath = str_replace (
'//' , '/' , $zipPath . '/' . $new
);
2018-02-28 02:27:03 +00:00
// now move the file
2017-02-01 13:17:04 +00:00
if ( $details -> type === 'file' )
2016-02-26 00:20:09 +00:00
{
2021-03-07 21:40:55 +00:00
if ( ! File :: exists ( $currentFullPath ))
2016-02-26 00:20:09 +00:00
{
2020-03-28 13:34:14 +00:00
$this -> app -> enqueueMessage (
JText :: _ ( '<hr /><h3>File Path Error</h3>' ), 'Error'
);
$this -> app -> enqueueMessage (
JText :: sprintf (
'The file path: <b>%s</b> does not exist, and was not added!' ,
$currentFullPath
), 'Error'
);
2018-02-16 21:53:43 +00:00
}
else
{
2018-09-11 11:15:39 +00:00
// get base name && get the path only
2020-03-28 13:34:14 +00:00
$packageFullPath0nly = str_replace (
basename ( $packageFullPath ), '' , $packageFullPath
);
2018-09-11 11:15:39 +00:00
// check if path exist, if not creat it
2021-03-07 21:40:55 +00:00
if ( ! Folder :: exists ( $packageFullPath0nly ))
2018-09-11 11:15:39 +00:00
{
2021-03-07 21:40:55 +00:00
Folder :: create ( $packageFullPath0nly );
2018-09-11 11:15:39 +00:00
}
2018-02-16 21:53:43 +00:00
// move the file to its place
2021-03-07 21:40:55 +00:00
File :: copy ( $currentFullPath , $packageFullPath );
2018-02-16 21:53:43 +00:00
// count the file created
$this -> fileCount ++ ;
// store the new files
if ( ! in_array ( $ftem , $this -> notNew ))
{
2019-08-04 22:38:53 +00:00
if ( isset ( $details -> _target ))
{
2020-03-28 13:34:14 +00:00
$this -> newFiles [ $details -> _target [ 'key' ]][]
= array ( 'path' => $packageFullPath ,
'name' => $new ,
'zip' => $zipFullPath );
2019-08-04 22:38:53 +00:00
}
else
{
2020-03-28 13:34:14 +00:00
$this -> newFiles [ 'static' ][]
= array ( 'path' => $packageFullPath ,
'name' => $new ,
'zip' => $zipFullPath );
2019-08-04 22:38:53 +00:00
}
2018-02-16 21:53:43 +00:00
}
2018-09-25 20:02:48 +00:00
// ensure we update this file if needed
2020-03-28 13:34:14 +00:00
if ( isset ( $this -> updateFileContent [ $ftem ])
&& $this -> updateFileContent [ $ftem ])
2018-09-25 20:02:48 +00:00
{
// remove the pointer
unset ( $this -> updateFileContent [ $ftem ]);
// set the full path
2020-03-28 13:34:14 +00:00
$this -> updateFileContent [ $packageFullPath ]
= $packageFullPath ;
2018-09-25 20:02:48 +00:00
}
2016-02-26 00:20:09 +00:00
}
}
2017-02-01 13:17:04 +00:00
elseif ( $details -> type === 'folder' )
2016-02-26 00:20:09 +00:00
{
2021-03-07 21:40:55 +00:00
if ( ! Folder :: exists ( $currentFullPath ))
2018-02-16 21:53:43 +00:00
{
2020-03-28 13:34:14 +00:00
$this -> app -> enqueueMessage (
JText :: _ ( '<hr /><h3>Folder Path Error</h3>' ),
'Error'
);
$this -> app -> enqueueMessage (
JText :: sprintf (
'The folder path: <b>%s</b> does not exist, and was not added!' ,
$currentFullPath
), 'Error'
);
2018-02-16 21:53:43 +00:00
}
else
{
// move the folder to its place
2021-03-07 21:40:55 +00:00
Folder :: copy (
2020-03-28 13:34:14 +00:00
$currentFullPath , $packageFullPath , '' , true
);
2018-02-16 21:53:43 +00:00
// count the folder created
$this -> folderCount ++ ;
}
2016-02-26 00:20:09 +00:00
}
2019-08-08 15:35:58 +00:00
// only add if no target found since those belong to plugins and modules
2019-08-04 22:38:53 +00:00
if ( ! isset ( $details -> _target ))
2018-02-28 02:27:03 +00:00
{
2018-09-25 20:02:48 +00:00
// check if we should add the dynamic folder moving script to the installer script
2019-08-04 22:38:53 +00:00
$checker = array_values (( array ) explode ( '/' , $zipFullPath ));
// TODO <-- this may not be the best way, will keep an eye on this.
// We basicly only want to check if a folder is added that is not in the stdFolders array
2020-03-28 13:34:14 +00:00
if ( isset ( $checker [ 0 ])
&& ComponentbuilderHelper :: checkString ( $checker [ 0 ])
2019-08-08 15:35:58 +00:00
&& ! in_array ( $checker [ 0 ], $this -> stdFolders ))
2018-09-25 20:02:48 +00:00
{
2019-08-04 22:38:53 +00:00
// check if we should add the dynamic folder moving script to the installer script
if ( ! $this -> setMoveFolders )
{
// add the setDynamicF0ld3rs() method to the install scipt.php file
$this -> setMoveFolders = true ;
// set message that this was done (will still add a tutorial link later)
2020-03-28 13:34:14 +00:00
$this -> app -> enqueueMessage (
JText :: _ (
'<hr /><h3>Dynamic folder/s were detected.</h3>'
), 'Notice'
);
$this -> app -> enqueueMessage (
JText :: sprintf (
'A method (setDynamicF0ld3rs) was added to the install <b>script.php</b> of this package to insure that the folder/s are copied into the correct place when this componet is installed!'
), 'Notice'
);
2019-08-04 22:38:53 +00:00
}
2018-09-25 20:02:48 +00:00
}
2020-03-28 13:34:14 +00:00
elseif ( count (( array ) $checker ) == 2
&& ComponentbuilderHelper :: checkString ( $checker [ 0 ]))
2018-09-25 20:02:48 +00:00
{
2019-08-08 15:35:58 +00:00
$add_to_extra = false ;
2019-08-04 22:38:53 +00:00
// set the target
$eNAME = 'FILES' ;
$ename = 'filename' ;
2019-08-08 15:35:58 +00:00
// this should not happen and must have been caught by the above if statment
2019-08-04 22:38:53 +00:00
if ( $details -> type === 'folder' )
{
2019-08-08 15:35:58 +00:00
// only folders outside the standard folder are added
2020-03-28 13:34:14 +00:00
$eNAME = 'FOLDERS' ;
$ename = 'folder' ;
2019-08-12 21:30:31 +00:00
$add_to_extra = true ;
2019-08-08 15:35:58 +00:00
}
// if this is a file, it can only be added to the admin/site/media folders
// all other folders are moved as a whole so their files do not need to be declared
2020-03-28 13:34:14 +00:00
elseif ( in_array ( $checker [ 0 ], $this -> stdFolders )
&& ! in_array ( $checker [ 1 ], $this -> stdRootFiles ))
2019-08-08 15:35:58 +00:00
{
$add_to_extra = true ;
2019-08-04 22:38:53 +00:00
}
2019-08-08 15:35:58 +00:00
// add if valid folder/file
if ( $add_to_extra )
2019-08-04 22:38:53 +00:00
{
2019-08-08 15:35:58 +00:00
// set the tab
$eTab = $this -> _t ( 2 );
if ( 'admin' === $checker [ 0 ])
{
$eTab = $this -> _t ( 3 );
}
// set the xml file
2020-03-28 13:34:14 +00:00
$this -> fileContentStatic [ $this -> hhh . 'EXSTRA_'
. ComponentbuilderHelper :: safeString (
$checker [ 0 ], 'U'
) . '_' . $eNAME . $this -> hhh ]
.= PHP_EOL . $eTab . " < " . $ename . " > "
. $checker [ 1 ] . " </ " . $ename . " > " ;
2019-08-04 22:38:53 +00:00
}
2018-02-28 02:27:03 +00:00
}
}
2016-02-26 00:20:09 +00:00
}
2020-03-28 13:34:14 +00:00
2016-02-26 00:20:09 +00:00
return true ;
}
2020-03-28 13:34:14 +00:00
2016-02-26 00:20:09 +00:00
return false ;
}
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* Set the Dynamic File & Folder
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
* @ return boolean
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
*/
private function setDynamique ()
{
2020-03-28 13:34:14 +00:00
$back = false ;
2016-02-26 00:20:09 +00:00
$front = false ;
2020-03-28 13:34:14 +00:00
if (( isset ( $this -> joomlaVersionData -> move -> dynamic )
&& ComponentbuilderHelper :: checkObject (
$this -> joomlaVersionData -> move -> dynamic
))
&& ( isset ( $this -> componentData -> admin_views )
&& ComponentbuilderHelper :: checkArray (
$this -> componentData -> admin_views
)))
2016-02-26 00:20:09 +00:00
{
2018-03-09 03:26:44 +00:00
if ( ! ComponentbuilderHelper :: checkString ( $this -> dynamicDashboard ))
{
// setup dashboard
$target = array ( 'admin' => $this -> componentData -> name_code );
$this -> buildDynamique ( $target , 'dashboard' );
}
2016-02-26 00:20:09 +00:00
// now the rest of the views
foreach ( $this -> componentData -> admin_views as $nr => $view )
{
if ( ComponentbuilderHelper :: checkObject ( $view [ 'settings' ]))
{
2020-03-28 13:34:14 +00:00
$created = $this -> getCreatedDate ( $view );
2017-02-01 13:17:04 +00:00
$modified = $this -> getLastModifiedDate ( $view );
2016-02-26 00:20:09 +00:00
if ( $view [ 'settings' ] -> name_list != 'null' )
{
2020-03-28 13:34:14 +00:00
$target
= array ( 'admin' => $view [ 'settings' ] -> name_list );
$config = array ( $this -> hhh . 'CREATIONDATE'
. $this -> hhh => $created ,
$this -> hhh . 'BUILDDATE'
. $this -> hhh => $modified ,
$this -> hhh . 'VERSION'
. $this -> hhh => $view [ 'settings' ] -> version );
2017-12-14 23:10:47 +00:00
$this -> buildDynamique ( $target , 'list' , false , $config );
2016-02-26 00:20:09 +00:00
}
if ( $view [ 'settings' ] -> name_single != 'null' )
{
2020-03-28 13:34:14 +00:00
$target
= array ( 'admin' => $view [ 'settings' ] -> name_single );
$config = array ( $this -> hhh . 'CREATIONDATE'
. $this -> hhh => $created ,
$this -> hhh . 'BUILDDATE'
. $this -> hhh => $modified ,
$this -> hhh . 'VERSION'
. $this -> hhh => $view [ 'settings' ] -> version );
$this -> buildDynamique (
$target , 'single' , false , $config
);
2016-02-26 00:20:09 +00:00
}
2020-03-28 13:34:14 +00:00
if ( isset ( $view [ 'edit_create_site_view' ])
&& is_numeric (
$view [ 'edit_create_site_view' ]
)
&& $view [ 'edit_create_site_view' ] > 0 )
2016-02-26 00:20:09 +00:00
{
// setup the front site edit-view files
2020-03-28 13:34:14 +00:00
$target
= array ( 'site' => $view [ 'settings' ] -> name_single );
$config = array ( $this -> hhh . 'CREATIONDATE'
. $this -> hhh => $created ,
$this -> hhh . 'BUILDDATE'
. $this -> hhh => $modified ,
$this -> hhh . 'VERSION'
. $this -> hhh => $view [ 'settings' ] -> version );
2017-12-14 23:10:47 +00:00
$this -> buildDynamique ( $target , 'edit' , false , $config );
2016-02-26 00:20:09 +00:00
}
}
// quick set of checkin once
2020-03-28 13:34:14 +00:00
if ( isset ( $view [ 'checkin' ]) && $view [ 'checkin' ] == 1
&& ! $this -> addCheckin )
2016-02-26 00:20:09 +00:00
{
// switch to add checking to config
$this -> addCheckin = true ;
}
}
$back = true ;
}
2020-03-28 13:34:14 +00:00
if (( isset ( $this -> joomlaVersionData -> move -> dynamic )
&& ComponentbuilderHelper :: checkObject (
$this -> joomlaVersionData -> move -> dynamic
))
&& ( isset ( $this -> componentData -> site_views )
&& ComponentbuilderHelper :: checkArray (
$this -> componentData -> site_views
)))
2016-02-26 00:20:09 +00:00
{
foreach ( $this -> componentData -> site_views as $nr => $view )
{
2020-03-28 13:34:14 +00:00
$created = $this -> getCreatedDate ( $view );
2017-02-01 13:17:04 +00:00
$modified = $this -> getLastModifiedDate ( $view );
2016-02-26 00:20:09 +00:00
if ( $view [ 'settings' ] -> main_get -> gettype == 2 )
{
// set list view
$target = array ( 'site' => $view [ 'settings' ] -> code );
2020-03-28 13:34:14 +00:00
$config = array ( $this -> hhh . 'CREATIONDATE'
. $this -> hhh => $created ,
$this -> hhh . 'BUILDDATE'
. $this -> hhh => $modified ,
$this -> hhh . 'VERSION'
. $this -> hhh => $view [ 'settings' ] -> version );
2017-12-14 23:10:47 +00:00
$this -> buildDynamique ( $target , 'list' , false , $config );
2016-02-26 00:20:09 +00:00
}
elseif ( $view [ 'settings' ] -> main_get -> gettype == 1 )
{
// set single view
$target = array ( 'site' => $view [ 'settings' ] -> code );
2020-03-28 13:34:14 +00:00
$config = array ( $this -> hhh . 'CREATIONDATE'
. $this -> hhh => $created ,
$this -> hhh . 'BUILDDATE'
. $this -> hhh => $modified ,
$this -> hhh . 'VERSION'
. $this -> hhh => $view [ 'settings' ] -> version );
2017-12-14 23:10:47 +00:00
$this -> buildDynamique ( $target , 'single' , false , $config );
2016-02-26 00:20:09 +00:00
}
}
$front = true ;
}
2020-03-28 13:34:14 +00:00
if (( isset ( $this -> joomlaVersionData -> move -> dynamic )
&& ComponentbuilderHelper :: checkObject (
$this -> joomlaVersionData -> move -> dynamic
))
&& ( isset ( $this -> componentData -> custom_admin_views )
&& ComponentbuilderHelper :: checkArray (
$this -> componentData -> custom_admin_views
)))
2016-02-26 00:20:09 +00:00
{
foreach ( $this -> componentData -> custom_admin_views as $nr => $view )
{
2020-03-28 13:34:14 +00:00
$created = $this -> getCreatedDate ( $view );
2017-02-01 13:17:04 +00:00
$modified = $this -> getLastModifiedDate ( $view );
2016-02-26 00:20:09 +00:00
if ( $view [ 'settings' ] -> main_get -> gettype == 2 )
{
2017-02-02 11:54:07 +00:00
// set list view$view
2016-02-26 00:20:09 +00:00
$target = array ( 'custom_admin' => $view [ 'settings' ] -> code );
2020-03-28 13:34:14 +00:00
$config = array ( $this -> hhh . 'CREATIONDATE'
. $this -> hhh => $created ,
$this -> hhh . 'BUILDDATE'
. $this -> hhh => $modified ,
$this -> hhh . 'VERSION'
. $this -> hhh => $view [ 'settings' ] -> version );
2017-12-14 23:10:47 +00:00
$this -> buildDynamique ( $target , 'list' , false , $config );
2016-02-26 00:20:09 +00:00
}
elseif ( $view [ 'settings' ] -> main_get -> gettype == 1 )
{
// set single view
$target = array ( 'custom_admin' => $view [ 'settings' ] -> code );
2020-03-28 13:34:14 +00:00
$config = array ( $this -> hhh . 'CREATIONDATE'
. $this -> hhh => $created ,
$this -> hhh . 'BUILDDATE'
. $this -> hhh => $modified ,
$this -> hhh . 'VERSION'
. $this -> hhh => $view [ 'settings' ] -> version );
2017-02-01 13:17:04 +00:00
$this -> buildDynamique ( $target , 'single' , false , $config );
2016-02-26 00:20:09 +00:00
}
}
$back = true ;
}
2018-09-10 11:04:52 +00:00
// check if we had success
2016-02-26 00:20:09 +00:00
if ( $back || $front )
{
return true ;
}
2020-03-28 13:34:14 +00:00
2016-02-26 00:20:09 +00:00
return false ;
}
2017-12-14 23:10:47 +00:00
2019-08-22 01:54:47 +00:00
/**
* move the fields and Rules
*
* @ param array $field The field data
* @ param string $path The path to move to
*
* @ return void
*
*/
public function moveFieldsRules ( $field , $path )
{
2020-05-21 23:38:20 +00:00
// check if we have a subform or repeatable field
2020-06-25 19:22:30 +00:00
if ( $field [ 'type_name' ] === 'subform'
|| $field [ 'type_name' ] === 'repeatable' )
2019-08-22 01:54:47 +00:00
{
2020-05-21 23:38:20 +00:00
// since we could have a custom field or rule inside
$this -> moveMultiFieldsRules ( $field , $path );
}
else
{
// check if this is a custom field that should be moved
if ( isset ( $this -> extentionCustomfields [ $field [ 'type_name' ]]))
2019-08-22 01:54:47 +00:00
{
2020-05-21 23:38:20 +00:00
$check = md5 ( $path . 'type' . $field [ 'type_name' ]);
// lets check if we already moved this
if ( ! isset ( $this -> extentionTrackingFilesMoved [ $check ]))
2020-02-13 12:24:13 +00:00
{
2020-05-21 23:38:20 +00:00
// check files exist
2021-03-07 21:40:55 +00:00
if ( File :: exists (
2020-03-28 13:34:14 +00:00
$this -> componentPath . '/admin/models/fields/'
2020-05-21 23:38:20 +00:00
. $field [ 'type_name' ] . '.php'
))
{
// copy the custom field
2021-03-07 21:40:55 +00:00
File :: copy (
2020-05-21 23:38:20 +00:00
$this -> componentPath . '/admin/models/fields/'
. $field [ 'type_name' ] . '.php' ,
$path . '/fields/' . $field [ 'type_name' ] . '.php'
);
}
// stop from doing this again.
$this -> extentionTrackingFilesMoved [ $check ] = true ;
2020-02-13 12:24:13 +00:00
}
2019-08-22 01:54:47 +00:00
}
2020-05-21 23:38:20 +00:00
// check if this has validation that should be moved
if ( isset ( $this -> validationLinkedFields [ $field [ 'field' ]]))
2019-08-22 01:54:47 +00:00
{
2020-05-21 23:38:20 +00:00
$check = md5 (
$path . 'rule'
. $this -> validationLinkedFields [ $field [ 'field' ]]
);
// lets check if we already moved this
if ( ! isset ( $this -> extentionTrackingFilesMoved [ $check ]))
2020-02-13 12:24:13 +00:00
{
2020-05-21 23:38:20 +00:00
// check files exist
2021-03-07 21:40:55 +00:00
if ( File :: exists (
2020-03-28 13:34:14 +00:00
$this -> componentPath . '/admin/models/rules/'
. $this -> validationLinkedFields [ $field [ 'field' ]]
. '.php'
2020-05-21 23:38:20 +00:00
))
{
// copy the custom field
2021-03-07 21:40:55 +00:00
File :: copy (
2020-05-21 23:38:20 +00:00
$this -> componentPath . '/admin/models/rules/'
. $this -> validationLinkedFields [ $field [ 'field' ]]
. '.php' , $path . '/rules/'
. $this -> validationLinkedFields [ $field [ 'field' ]]
. '.php'
);
}
// stop from doing this again.
$this -> extentionTrackingFilesMoved [ $check ] = true ;
2020-02-13 12:24:13 +00:00
}
2020-05-21 23:38:20 +00:00
}
}
}
/**
* move the fields and Rules of multi fields
*
* @ param array $multi_field The field data
2020-06-25 19:22:30 +00:00
* @ param string $path The path to move to
2020-05-21 23:38:20 +00:00
*
* @ return void
*
*/
protected function moveMultiFieldsRules ( $multi_field , $path )
{
// get the fields ids
2020-06-25 19:22:30 +00:00
$ids = array_map (
2020-11-29 00:00:20 +00:00
'trim' ,
explode (
',' ,
ComponentbuilderHelper :: getBetween (
$multi_field [ 'settings' ] -> xml , 'fields="' , '"'
)
)
2020-06-25 19:22:30 +00:00
);
2020-05-21 23:38:20 +00:00
if ( ComponentbuilderHelper :: checkArray ( $ids ))
{
foreach ( $ids as $id )
{
// setup the field
2020-06-25 19:22:30 +00:00
$field = array ();
2020-05-21 23:38:20 +00:00
$field [ 'field' ] = $id ;
$this -> setFieldDetails ( $field );
// move field and rules if needed
$this -> moveFieldsRules ( $field , $path );
2019-08-22 01:54:47 +00:00
}
}
}
2017-02-02 11:54:07 +00:00
/**
* get the created date of the ( view )
2019-08-22 01:54:47 +00:00
*
2020-03-28 13:34:14 +00:00
* @ param array $view The view values
2019-08-22 01:54:47 +00:00
*
2017-02-02 11:54:07 +00:00
* @ return string Last Modified Date
2019-08-22 01:54:47 +00:00
*
2017-02-02 11:54:07 +00:00
*/
public function getCreatedDate ( $view )
2017-12-14 23:10:47 +00:00
{
2020-03-28 13:34:14 +00:00
if ( isset ( $view [ 'settings' ] -> created )
&& ComponentbuilderHelper :: checkString ( $view [ 'settings' ] -> created ))
2017-02-02 11:54:07 +00:00
{
// first set the main date
$date = strtotime ( $view [ 'settings' ] -> created );
}
else
{
// first set the main date
$date = strtotime ( " now " );
}
2020-03-28 13:34:14 +00:00
2017-02-02 11:54:07 +00:00
return JFactory :: getDate ( $date ) -> format ( 'jS F, Y' );
}
2017-12-14 23:10:47 +00:00
2017-02-01 13:17:04 +00:00
/**
* get the last modified date of a MVC ( view )
2019-08-22 01:54:47 +00:00
*
2020-03-28 13:34:14 +00:00
* @ param array $view The view values
2019-08-22 01:54:47 +00:00
*
2017-02-01 13:17:04 +00:00
* @ return string Last Modified Date
2019-08-22 01:54:47 +00:00
*
2017-02-01 13:17:04 +00:00
*/
public function getLastModifiedDate ( $view )
{
2017-05-04 22:34:28 +00:00
// first set the main date
2020-03-28 13:34:14 +00:00
if ( isset ( $view [ 'settings' ] -> modified )
&& ComponentbuilderHelper :: checkString ( $view [ 'settings' ] -> modified )
&& '0000-00-00 00:00:00' !== $view [ 'settings' ] -> modified )
2017-02-02 11:54:07 +00:00
{
$date = strtotime ( $view [ 'settings' ] -> modified );
}
else
{
2017-05-04 22:34:28 +00:00
// use todays date
2017-02-02 11:54:07 +00:00
$date = strtotime ( " now " );
}
2017-05-04 22:34:28 +00:00
// search for the last modified date
2017-02-01 13:17:04 +00:00
if ( isset ( $view [ 'adminview' ]))
{
2017-12-14 23:10:47 +00:00
$id = $view [ 'adminview' ] . 'admin' ;
2017-02-01 13:17:04 +00:00
// now check if value has been set
if ( ! isset ( $this -> lastModifiedDate [ $id ]))
{
2020-03-28 13:34:14 +00:00
if ( isset ( $view [ 'settings' ] -> fields )
&& ComponentbuilderHelper :: checkArray (
$view [ 'settings' ] -> fields
))
2017-02-01 13:17:04 +00:00
{
foreach ( $view [ 'settings' ] -> fields as $field )
{
2020-03-28 13:34:14 +00:00
if ( isset ( $field [ 'settings' ])
&& ComponentbuilderHelper :: checkObject (
$field [ 'settings' ]
)
&& isset ( $field [ 'settings' ] -> modified )
&& ComponentbuilderHelper :: checkString (
$field [ 'settings' ] -> modified
)
&& '0000-00-00 00:00:00'
!== $field [ 'settings' ] -> modified )
2017-02-01 13:17:04 +00:00
{
2020-03-28 13:34:14 +00:00
$anotherDate = strtotime (
$field [ 'settings' ] -> modified
);
2017-02-01 13:17:04 +00:00
if ( $anotherDate > $date )
{
$date = $anotherDate ;
}
}
}
}
}
}
elseif ( isset ( $view [ 'siteview' ]))
2017-12-14 23:10:47 +00:00
{
$id = $view [ 'siteview' ] . 'site' ;
2017-02-01 13:17:04 +00:00
// now check if value has been set
if ( ! isset ( $this -> lastModifiedDate [ $id ]))
{
2020-03-28 13:34:14 +00:00
if ( isset ( $view [ 'settings' ] -> main_get -> modified )
&& ComponentbuilderHelper :: checkString (
$view [ 'settings' ] -> main_get -> modified
)
&& '0000-00-00 00:00:00'
!== $view [ 'settings' ] -> main_get -> modified )
2017-02-01 13:17:04 +00:00
{
2020-03-28 13:34:14 +00:00
$anotherDate = strtotime (
$view [ 'settings' ] -> main_get -> modified
);
2017-02-01 13:17:04 +00:00
if ( $anotherDate > $date )
{
$date = $anotherDate ;
}
}
}
}
elseif ( isset ( $view [ 'customadminview' ]))
2017-12-14 23:10:47 +00:00
{
$id = $view [ 'customadminview' ] . 'customadmin' ;
2017-02-01 13:17:04 +00:00
// now check if value has been set
if ( ! isset ( $this -> lastModifiedDate [ $id ]))
{
2020-03-28 13:34:14 +00:00
if ( isset ( $view [ 'settings' ] -> main_get -> modified )
&& ComponentbuilderHelper :: checkString (
$view [ 'settings' ] -> main_get -> modified
)
&& '0000-00-00 00:00:00'
!== $view [ 'settings' ] -> main_get -> modified )
2017-02-01 13:17:04 +00:00
{
2020-03-28 13:34:14 +00:00
$anotherDate = strtotime (
$view [ 'settings' ] -> main_get -> modified
);
2017-02-01 13:17:04 +00:00
if ( $anotherDate > $date )
{
$date = $anotherDate ;
}
}
}
}
// check if ID was found
if ( ! isset ( $id ))
{
$id = md5 ( $date );
}
// now load the date
if ( ! isset ( $this -> lastModifiedDate [ $id ]))
{
$this -> lastModifiedDate [ $id ] = $date ;
}
2017-12-14 23:10:47 +00:00
2020-03-28 13:34:14 +00:00
return JFactory :: getDate ( $this -> lastModifiedDate [ $id ]) -> format (
'jS F, Y'
);
2017-02-01 13:17:04 +00:00
}
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* Set the Static File & Folder
2017-09-18 00:18:23 +00:00
*
2020-03-28 13:34:14 +00:00
* @ param array $target The main target and name
* @ param string $type The type in the target
* @ param string $fileName The custom file name
* @ param array $cofig to add more data to the files info
2017-09-18 00:18:23 +00:00
*
2016-02-26 00:20:09 +00:00
* @ return boolean
2017-09-18 00:18:23 +00:00
*
2016-02-26 00:20:09 +00:00
*/
2020-03-28 13:34:14 +00:00
public function buildDynamique ( $target , $type , $fileName = false ,
$config = false
) {
2019-04-14 20:20:01 +00:00
// did we build the files (any number)
$build_status = false ;
// check that we have the target values
2016-02-26 00:20:09 +00:00
if ( ComponentbuilderHelper :: checkArray ( $target ))
{
2019-04-14 20:20:01 +00:00
// search the target
2017-12-14 23:10:47 +00:00
foreach ( $target as $main => $name )
2016-02-26 00:20:09 +00:00
{
// make sure it is lower case
$name = ComponentbuilderHelper :: safeString ( $name );
// setup the files
2020-03-28 13:34:14 +00:00
foreach (
$this -> joomlaVersionData -> move -> dynamic -> { $main } as $item =>
$details
)
2016-02-26 00:20:09 +00:00
{
2019-04-14 20:20:01 +00:00
if ( $details -> type === $type )
2016-02-26 00:20:09 +00:00
{
// set destination path
2017-12-14 23:10:47 +00:00
$path = '' ;
if ( strpos ( $details -> path , 'VIEW' ) !== false )
2016-02-26 00:20:09 +00:00
{
2017-12-14 23:10:47 +00:00
$path = str_replace ( 'VIEW' , $name , $details -> path );
2016-02-26 00:20:09 +00:00
}
else
{
$path = $details -> path ;
}
2020-06-25 19:22:30 +00:00
// make sure we have component to replace
if ( strpos ( $path , 'c0mp0n3nt' ) !== false )
{
$zipPath = str_replace ( 'c0mp0n3nt/' , '' , $path );
$path = str_replace (
'c0mp0n3nt/' , $this -> componentPath . '/' , $path
);
}
else
{
$this -> app -> enqueueMessage (
JText :: sprintf (
'<hr /><h3>c0mp0n3nt issue found</h3><p>The path (%s) could not be used.</p>' ,
$path
), 'Error'
);
continue ;
}
2016-02-26 00:20:09 +00:00
// setup the folder
2021-03-07 21:40:55 +00:00
if ( ! Folder :: exists ( $path ))
2016-02-26 00:20:09 +00:00
{
2021-03-07 21:40:55 +00:00
Folder :: create ( $path );
2016-02-26 00:20:09 +00:00
$this -> indexHTML ( $zipPath );
// count the folder created
$this -> folderCount ++ ;
}
// do the file renaming
if ( $details -> rename )
{
if ( $fileName )
{
2020-03-28 13:34:14 +00:00
$new = str_replace (
$details -> rename , $fileName , $item
);
2017-12-14 23:10:47 +00:00
$name = $name . '_' . $fileName ;
2016-02-26 00:20:09 +00:00
}
2017-02-01 13:17:04 +00:00
elseif ( $details -> rename === 'new' )
2016-02-26 00:20:09 +00:00
{
$new = $details -> newName ;
}
else
{
2020-03-28 13:34:14 +00:00
$new = str_replace (
$details -> rename , $name , $item
);
2016-02-26 00:20:09 +00:00
}
}
else
{
$new = $item ;
}
2021-03-07 21:40:55 +00:00
if ( ! File :: exists ( $path . '/' . $new ))
2016-02-26 00:20:09 +00:00
{
// move the file to its place
2021-03-07 21:40:55 +00:00
File :: copy (
2020-03-28 13:34:14 +00:00
$this -> templatePath . '/' . $item ,
2020-06-25 19:22:30 +00:00
$path . '/' . $new
2020-03-28 13:34:14 +00:00
);
2016-02-26 00:20:09 +00:00
// count the file created
$this -> fileCount ++ ;
}
2017-02-01 13:17:04 +00:00
// setup array for new file
2020-03-28 13:34:14 +00:00
$newFIle = array ( 'path' => $path . '/' . $new ,
'name' => $new , 'view' => $name ,
'zip' => $zipPath . '/' . $new );
2017-02-01 13:17:04 +00:00
if ( ComponentbuilderHelper :: checkArray ( $config ))
{
$newFIle [ 'config' ] = $config ;
}
2016-02-26 00:20:09 +00:00
// store the new files
2017-02-01 13:17:04 +00:00
$this -> newFiles [ 'dynamic' ][ $name ][] = $newFIle ;
2019-04-14 20:20:01 +00:00
// we have build atleast one
$build_status = true ;
2016-02-26 00:20:09 +00:00
}
}
}
}
2020-03-28 13:34:14 +00:00
2019-04-14 20:20:01 +00:00
return $build_status ;
2016-02-26 00:20:09 +00:00
}
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* set the Joomla Version Data
*
2020-12-03 00:13:49 +00:00
* @ return object The version data
2019-08-22 01:54:47 +00:00
*
2016-02-26 00:20:09 +00:00
*/
private function setJoomlaVersionData ()
{
// set the version data
2020-03-28 13:34:14 +00:00
$versionData = json_decode (
ComponentbuilderHelper :: getFileContents (
$this -> templatePath . '/settings.json'
)
);
2016-02-26 00:20:09 +00:00
// add custom folders
2020-03-28 13:34:14 +00:00
if (( isset ( $this -> componentData -> folders )
&& ComponentbuilderHelper :: checkArray (
$this -> componentData -> folders
))
|| $this -> addEximport
|| $this -> uikit
|| $this -> footable )
2016-02-26 00:20:09 +00:00
{
if ( $this -> addEximport )
{
// move the import view folder in place
2020-03-28 13:34:14 +00:00
$importView = array ( 'folder' => 'importViews' ,
'path' => 'admin/views/import' ,
'rename' => 1 );
2016-02-26 00:20:09 +00:00
$this -> componentData -> folders [] = $importView ;
2020-04-19 00:48:23 +00:00
// move the phpspreadsheet Folder (TODO we must move this to a library package)
2020-06-25 19:22:30 +00:00
$PHPExcel
= array ( 'folderpath' => 'JPATH_LIBRARIES/phpspreadsheet/vendor' ,
'path' => '/libraries/phpspreadsheet/' ,
'rename' => 0 );
2016-02-26 00:20:09 +00:00
$this -> componentData -> folders [] = $PHPExcel ;
}
2017-11-11 04:33:51 +00:00
if ( 2 == $this -> uikit || 1 == $this -> uikit )
2016-02-26 00:20:09 +00:00
{
// move the UIKIT Folder into place
2020-03-28 13:34:14 +00:00
$uikit = array ( 'folder' => 'uikit-v2' ,
'path' => 'media' ,
'rename' => 0 );
2016-02-26 00:20:09 +00:00
$this -> componentData -> folders [] = $uikit ;
2017-12-14 23:10:47 +00:00
}
2017-11-11 04:33:51 +00:00
if ( 2 == $this -> uikit || 3 == $this -> uikit )
{
// move the UIKIT-3 Folder into place
2020-03-28 13:34:14 +00:00
$uikit = array ( 'folder' => 'uikit-v3' ,
'path' => 'media' ,
'rename' => 0 );
2017-11-11 04:33:51 +00:00
$this -> componentData -> folders [] = $uikit ;
2016-02-26 00:20:09 +00:00
}
2020-03-28 13:34:14 +00:00
if ( $this -> footable
&& ( ! isset ( $this -> footableVersion )
|| 2 == $this -> footableVersion ))
2016-02-26 00:20:09 +00:00
{
// move the footable folder into place
2020-03-28 13:34:14 +00:00
$footable = array ( 'folder' => 'footable-v2' ,
'path' => 'media' ,
'rename' => 0 );
2016-04-22 12:03:43 +00:00
$this -> componentData -> folders [] = $footable ;
}
elseif ( $this -> footable && 3 == $this -> footableVersion )
{
// move the footable folder into place
2020-03-28 13:34:14 +00:00
$footable = array ( 'folder' => 'footable-v3' ,
'path' => 'media' ,
'rename' => 0 );
2016-02-26 00:20:09 +00:00
$this -> componentData -> folders [] = $footable ;
}
2017-12-14 23:10:47 +00:00
2016-02-26 00:20:09 +00:00
// pointer tracker
$pointer_tracker = 'h' ;
foreach ( $this -> componentData -> folders as $custom )
{
2019-08-04 22:38:53 +00:00
// check type of target type
$_target_type = 'c0mp0n3nt' ;
if ( isset ( $custom [ 'target_type' ]))
{
$_target_type = $custom [ 'target_type' ];
}
2019-03-13 12:20:51 +00:00
// for good practice
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: fixPath (
$custom , array ( 'path' , 'folder' , 'folderpath' )
);
2018-02-16 21:53:43 +00:00
// fix custom path
2020-03-28 13:34:14 +00:00
if ( isset ( $custom [ 'path' ])
&& ComponentbuilderHelper :: checkString ( $custom [ 'path' ]))
2018-02-16 21:53:43 +00:00
{
$custom [ 'path' ] = trim ( $custom [ 'path' ], '/' );
}
2019-03-13 12:20:51 +00:00
// by default custom path is true
$customPath = 'custom' ;
2018-02-16 21:53:43 +00:00
// set full path if this is a full path folder
2018-03-18 04:52:07 +00:00
if ( ! isset ( $custom [ 'folder' ]) && isset ( $custom [ 'folderpath' ]))
2018-02-16 21:53:43 +00:00
{
2019-03-13 21:07:41 +00:00
// update the dynamic path
2020-03-28 13:34:14 +00:00
$custom [ 'folderpath' ] = $this -> updateDynamicPath (
$custom [ 'folderpath' ]
);
2019-03-13 12:20:51 +00:00
// set the folder path with / if does not have a drive/windows full path
2020-03-28 13:34:14 +00:00
$custom [ 'folder' ] = ( preg_match (
'/^[a-z]:/i' , $custom [ 'folderpath' ]
))
2019-03-13 12:20:51 +00:00
? trim ( $custom [ 'folderpath' ], '/' )
: '/' . trim ( $custom [ 'folderpath' ], '/' );
2018-02-16 21:53:43 +00:00
// remove the file path
unset ( $custom [ 'folderpath' ]);
// triget fullpath
$customPath = 'full' ;
}
2016-02-26 00:20:09 +00:00
// make sure we use the correct name
2020-03-28 13:34:14 +00:00
$pathArray = ( array ) explode ( '/' , $custom [ 'path' ]);
2016-02-26 00:20:09 +00:00
$firstFolder = array_values ( $pathArray )[ 0 ];
2020-03-28 13:34:14 +00:00
$lastFolder = end ( $pathArray );
2016-02-26 00:20:09 +00:00
// only rename folder if last has folder name
2017-11-11 04:33:51 +00:00
if ( isset ( $custom [ 'rename' ]) && $custom [ 'rename' ] == 1 )
2016-02-26 00:20:09 +00:00
{
2020-03-28 13:34:14 +00:00
$custom [ 'path' ] = str_replace (
'/' . $lastFolder , '' , $custom [ 'path' ]
);
$rename = 'new' ;
$newname = $lastFolder ;
2016-02-26 00:20:09 +00:00
}
2018-02-16 21:53:43 +00:00
elseif ( 'full' === $customPath )
{
// make sure we use the correct name
$folderArray = ( array ) explode ( '/' , $custom [ 'folder' ]);
2020-03-28 13:34:14 +00:00
$lastFolder = end ( $folderArray );
$rename = 'new' ;
$newname = $lastFolder ;
2018-02-16 21:53:43 +00:00
}
2016-02-26 00:20:09 +00:00
else
{
$lastFolder = $custom [ 'folder' ];
2020-03-28 13:34:14 +00:00
$rename = false ;
$newname = '' ;
2016-02-26 00:20:09 +00:00
}
2018-09-25 20:02:48 +00:00
// insure we have no duplicates
2020-03-28 13:34:14 +00:00
$key_pointer = ComponentbuilderHelper :: safeString (
$custom [ 'folder' ]
) . '_f' . $pointer_tracker ;
2016-02-26 00:20:09 +00:00
$pointer_tracker ++ ;
2018-09-10 11:04:52 +00:00
// fix custom path
$custom [ 'path' ] = ltrim ( $custom [ 'path' ], '/' );
2016-02-26 00:20:09 +00:00
// set new folder to object
2020-03-28 13:34:14 +00:00
$versionData -> move -> static -> { $key_pointer } = new stdClass (
);
$versionData -> move -> static -> { $key_pointer } -> naam
= str_replace (
'//' , '/' , $custom [ 'folder' ]
);
$versionData -> move -> static -> { $key_pointer } -> path
= $_target_type
. '/' . $custom [ 'path' ];
$versionData -> move -> static -> { $key_pointer } -> rename = $rename ;
2018-09-25 20:02:48 +00:00
$versionData -> move -> static -> { $key_pointer } -> newName = $newname ;
2020-03-28 13:34:14 +00:00
$versionData -> move -> static -> { $key_pointer } -> type = 'folder' ;
$versionData -> move -> static -> { $key_pointer } -> custom
= $customPath ;
2019-08-04 22:38:53 +00:00
// set the target if type and id is found
2020-03-28 13:34:14 +00:00
if ( isset ( $custom [ 'target_id' ])
&& isset ( $custom [ 'target_type' ]))
2019-08-04 22:38:53 +00:00
{
2020-03-28 13:34:14 +00:00
$versionData -> move -> static -> { $key_pointer } -> _target
= array ( 'key' => $custom [ 'target_id' ] . '_'
. $custom [ 'target_type' ],
'type' => $custom [ 'target_type' ]);
2019-08-04 22:38:53 +00:00
}
2016-02-26 00:20:09 +00:00
}
unset ( $this -> componentData -> folders );
unset ( $custom );
}
// add custom files
2020-03-28 13:34:14 +00:00
if (( isset ( $this -> componentData -> files )
&& ComponentbuilderHelper :: checkArray (
$this -> componentData -> files
))
|| $this -> googlechart )
2016-02-26 00:20:09 +00:00
{
if ( $this -> googlechart )
{
// move the google chart files
2020-03-28 13:34:14 +00:00
$googleChart = array ( 'file' => 'google.jsapi.js' ,
'path' => 'media/js' ,
'rename' => 0 );
2016-02-26 00:20:09 +00:00
$this -> componentData -> files [] = $googleChart ;
2020-03-28 13:34:14 +00:00
$googleChart
= array ( 'file' => 'chartbuilder.php' ,
'path' => 'admin/helpers' ,
'rename' => 0 );
2016-02-26 00:20:09 +00:00
$this -> componentData -> files [] = $googleChart ;
}
2017-12-14 23:10:47 +00:00
2016-02-26 00:20:09 +00:00
// pointer tracker
$pointer_tracker = 'h' ;
foreach ( $this -> componentData -> files as $custom )
{
2019-08-04 22:38:53 +00:00
// check type of target type
$_target_type = 'c0mp0n3nt' ;
if ( isset ( $custom [ 'target_type' ]))
{
$_target_type = $custom [ 'target_type' ];
}
2019-03-13 12:20:51 +00:00
// for good practice
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: fixPath (
$custom , array ( 'path' , 'file' , 'filepath' )
);
2019-03-13 12:20:51 +00:00
// by default custom path is true
2018-02-16 21:53:43 +00:00
$customPath = 'custom' ;
// set full path if this is a full path file
2018-03-18 04:52:07 +00:00
if ( ! isset ( $custom [ 'file' ]) && isset ( $custom [ 'filepath' ]))
2018-02-16 21:53:43 +00:00
{
2019-03-13 21:07:41 +00:00
// update the dynamic path
2020-03-28 13:34:14 +00:00
$custom [ 'filepath' ] = $this -> updateDynamicPath (
$custom [ 'filepath' ]
);
2019-03-13 12:20:51 +00:00
// set the file path with / if does not have a drive/windows full path
2020-03-28 13:34:14 +00:00
$custom [ 'file' ] = ( preg_match (
'/^[a-z]:/i' , $custom [ 'filepath' ]
))
2019-03-13 12:20:51 +00:00
? trim ( $custom [ 'filepath' ], '/' )
: '/' . trim ( $custom [ 'filepath' ], '/' );
2018-02-16 21:53:43 +00:00
// remove the file path
unset ( $custom [ 'filepath' ]);
// triget fullpath
$customPath = 'full' ;
}
2019-08-04 22:38:53 +00:00
// make sure we have not duplicates
2020-03-28 13:34:14 +00:00
$key_pointer = ComponentbuilderHelper :: safeString (
$custom [ 'file' ]
) . '_g' . $pointer_tracker ;
2016-02-26 00:20:09 +00:00
$pointer_tracker ++ ;
// set new file to object
2020-03-28 13:34:14 +00:00
$versionData -> move -> static -> { $key_pointer } = new stdClass (
);
$versionData -> move -> static -> { $key_pointer } -> naam = str_replace (
'//' , '/' , $custom [ 'file' ]
);
2018-04-08 06:12:18 +00:00
// update the dynamic component name placholders in file names
2020-03-28 13:34:14 +00:00
$custom [ 'path' ] = $this -> setPlaceholders (
$custom [ 'path' ], $this -> placeholders
);
2016-02-26 00:20:09 +00:00
// get the path info
$pathInfo = pathinfo ( $custom [ 'path' ]);
if ( isset ( $pathInfo [ 'extension' ]) && $pathInfo [ 'extension' ])
{
2018-02-16 21:53:43 +00:00
$pathInfo [ 'dirname' ] = trim ( $pathInfo [ 'dirname' ], '/' );
// set the info
2020-03-28 13:34:14 +00:00
$versionData -> move -> static -> { $key_pointer } -> path
= $_target_type
. '/' . $pathInfo [ 'dirname' ];
2018-09-25 20:02:48 +00:00
$versionData -> move -> static -> { $key_pointer } -> rename = 'new' ;
2020-03-28 13:34:14 +00:00
$versionData -> move -> static -> { $key_pointer } -> newName
= $pathInfo [ 'basename' ];
2018-02-16 21:53:43 +00:00
}
elseif ( 'full' === $customPath )
{
2018-09-10 11:04:52 +00:00
// fix custom path
$custom [ 'path' ] = ltrim ( $custom [ 'path' ], '/' );
// get file array
2018-09-25 20:02:48 +00:00
$fileArray = ( array ) explode ( '/' , $custom [ 'file' ]);
2018-02-16 21:53:43 +00:00
// set the info
2020-03-28 13:34:14 +00:00
$versionData -> move -> static -> { $key_pointer } -> path
= $_target_type
. '/' . $custom [ 'path' ];
$versionData -> move -> static -> { $key_pointer } -> rename = 'new' ;
$versionData -> move -> static -> { $key_pointer } -> newName = end (
$fileArray
);
2016-02-26 00:20:09 +00:00
}
else
{
2018-02-16 21:53:43 +00:00
// fix custom path
2018-09-10 11:04:52 +00:00
$custom [ 'path' ] = ltrim ( $custom [ 'path' ], '/' );
2018-02-16 21:53:43 +00:00
// set the info
2020-03-28 13:34:14 +00:00
$versionData -> move -> static -> { $key_pointer } -> path
= $_target_type
. '/' . $custom [ 'path' ];
2018-09-25 20:02:48 +00:00
$versionData -> move -> static -> { $key_pointer } -> rename = false ;
2016-02-26 00:20:09 +00:00
}
2018-09-25 20:02:48 +00:00
$versionData -> move -> static -> { $key_pointer } -> type = 'file' ;
2020-03-28 13:34:14 +00:00
$versionData -> move -> static -> { $key_pointer } -> custom
= $customPath ;
2019-08-04 22:38:53 +00:00
// set the target if type and id is found
2020-03-28 13:34:14 +00:00
if ( isset ( $custom [ 'target_id' ])
&& isset ( $custom [ 'target_type' ]))
2019-08-04 22:38:53 +00:00
{
2020-03-28 13:34:14 +00:00
$versionData -> move -> static -> { $key_pointer } -> _target
= array ( 'key' => $custom [ 'target_id' ] . '_'
. $custom [ 'target_type' ],
'type' => $custom [ 'target_type' ]);
2019-08-04 22:38:53 +00:00
}
2016-02-26 00:20:09 +00:00
// check if file should be updated
2020-03-28 13:34:14 +00:00
if ( ! isset ( $custom [ 'notnew' ]) || $custom [ 'notnew' ] == 0
|| $custom [ 'notnew' ] != 1 )
2016-02-26 00:20:09 +00:00
{
$this -> notNew [] = $key_pointer ;
}
2018-09-25 20:02:48 +00:00
else
{
// update the file content
$this -> updateFileContent [ $key_pointer ] = true ;
}
2016-02-26 00:20:09 +00:00
}
unset ( $this -> componentData -> files );
unset ( $custom );
}
2020-03-28 13:34:14 +00:00
2016-02-26 00:20:09 +00:00
return $versionData ;
}
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* set the index . html file in a folder path
2019-08-22 01:54:47 +00:00
*
2020-03-28 13:34:14 +00:00
* @ param string $path The path to place the index . html file in
2016-02-26 00:20:09 +00:00
*
* @ return void
2019-08-22 01:54:47 +00:00
*
2016-02-26 00:20:09 +00:00
*/
2019-08-04 22:38:53 +00:00
private function indexHTML ( $path , $root = 'component' )
2016-02-26 00:20:09 +00:00
{
2019-08-04 22:38:53 +00:00
if ( 'component' === $root )
{
2020-12-05 06:17:54 +00:00
$root = $this -> componentPath . '/' ;
2019-08-04 22:38:53 +00:00
}
// use path if exist
2016-02-26 00:20:09 +00:00
if ( strlen ( $path ) > 0 )
{
2021-03-07 21:40:55 +00:00
File :: copy (
2020-03-28 13:34:14 +00:00
$this -> templatePath . '/index.html' ,
2020-12-05 06:17:54 +00:00
$root . $path . '/index.html'
2020-03-28 13:34:14 +00:00
);
2016-02-26 00:20:09 +00:00
// count the file created
$this -> fileCount ++ ;
}
else
{
2021-03-07 21:40:55 +00:00
File :: copy (
2020-03-28 13:34:14 +00:00
$this -> templatePath . '/index.html' , $root . '/index.html'
);
2016-02-26 00:20:09 +00:00
// count the file created
$this -> fileCount ++ ;
}
}
2017-12-14 23:10:47 +00:00
2018-02-28 02:27:03 +00:00
/**
* Update paths with real value
2020-03-28 13:34:14 +00:00
*
* @ param string $path The full path
2018-02-28 02:27:03 +00:00
*
* @ return string The updated path
2020-03-28 13:34:14 +00:00
*
2018-02-28 02:27:03 +00:00
*/
protected function updateDynamicPath ( $path )
{
2020-03-28 13:34:14 +00:00
return $this -> setPlaceholders (
$this -> setPlaceholders (
$path , ComponentbuilderHelper :: $constantPaths
), $this -> placeholders
);
2018-02-28 02:27:03 +00:00
}
2016-03-04 00:01:43 +00:00
/**
2016-02-26 00:20:09 +00:00
* Remove folders with files
2020-03-28 13:34:14 +00:00
*
2017-09-18 00:18:23 +00:00
* @ param string $dir The path to folder to remove
* @ param boolean $ignore The files and folders to ignore
2016-02-26 00:20:09 +00:00
*
2017-03-20 22:07:14 +00:00
* @ return boolean True if all is removed
2020-03-28 13:34:14 +00:00
*
2016-02-26 00:20:09 +00:00
*/
2017-09-18 00:18:23 +00:00
protected function removeFolder ( $dir , $ignore = false )
2016-02-26 00:20:09 +00:00
{
2017-09-18 00:18:23 +00:00
return ComponentbuilderHelper :: removeFolder ( $dir , $ignore );
2016-02-26 00:20:09 +00:00
}
2018-03-18 04:52:07 +00:00
2016-02-26 00:20:09 +00:00
}