From 7f3dae297a56b0869d8dd576b92cea7bd19a3c18 Mon Sep 17 00:00:00 2001 From: Llewellyn van der Merwe Date: Wed, 28 Feb 2018 04:27:03 +0200 Subject: [PATCH 01/22] Moved the composer vendor folder to libraries and removed it from the admin/helpers folder. Improved the dynamic folder include concept. --- README.md | 6 +- admin/README.txt | 6 +- admin/compiler/joomla_3/script.php | 4 +- admin/helpers/compiler/b_Structure.php | 108 +- admin/helpers/compiler/e_Interpretation.php | 60 + admin/helpers/compiler/f_Infusion.php | 6 + admin/helpers/componentbuilder.php | 4 +- .../vendor/phpseclib/phpseclib/composer.lock | 1819 ----------------- .../en-GB/en-GB.com_componentbuilder.ini | 2 +- componentbuilder.xml | 2 +- libraries/vdm_io/index.html | 1 + .../vdm_io}/vendor/.htaccess | 0 .../vdm_io}/vendor/autoload.php | 2 +- .../vdm_io}/vendor/composer/ClassLoader.php | 0 .../vdm_io}/vendor/composer/LICENSE | 0 .../vendor/composer/autoload_classmap.php | 0 .../vendor/composer/autoload_files.php | 0 .../vendor/composer/autoload_namespaces.php | 0 .../vdm_io}/vendor/composer/autoload_psr4.php | 0 .../vdm_io}/vendor/composer/autoload_real.php | 14 +- .../vendor/composer/autoload_static.php | 8 +- .../vdm_io}/vendor/composer/installed.json | 14 +- libraries/vdm_io/vendor/htaccess.txt | 9 + libraries/vdm_io/vendor/index.html | 1 + .../vendor/phpseclib/phpseclib/AUTHORS | 0 .../vendor/phpseclib/phpseclib/LICENSE | 0 .../vendor/phpseclib/phpseclib/README.md | 3 +- .../vendor/phpseclib/phpseclib/composer.json | 2 +- .../phpseclib/phpseclib/Crypt/AES.php | 0 .../phpseclib/phpseclib/Crypt/Base.php | 40 + .../phpseclib/phpseclib/Crypt/Blowfish.php | 44 +- .../phpseclib/phpseclib/Crypt/DES.php | 0 .../phpseclib/phpseclib/Crypt/Hash.php | 7 +- .../phpseclib/phpseclib/Crypt/RC2.php | 2 +- .../phpseclib/phpseclib/Crypt/RC4.php | 0 .../phpseclib/phpseclib/Crypt/RSA.php | 0 .../phpseclib/phpseclib/Crypt/Random.php | 4 + .../phpseclib/phpseclib/Crypt/Rijndael.php | 0 .../phpseclib/phpseclib/Crypt/TripleDES.php | 0 .../phpseclib/phpseclib/Crypt/Twofish.php | 68 +- .../phpseclib/phpseclib/File/ANSI.php | 0 .../phpseclib/phpseclib/File/ASN1.php | 0 .../phpseclib/phpseclib/File/ASN1/Element.php | 0 .../phpseclib/phpseclib/File/X509.php | 27 +- .../phpseclib/phpseclib/Math/BigInteger.php | 4 +- .../phpseclib/phpseclib/phpseclib/Net/SCP.php | 0 .../phpseclib/phpseclib/Net/SFTP.php | 4 +- .../phpseclib/phpseclib/Net/SFTP/Stream.php | 2 +- .../phpseclib/phpseclib/Net/SSH1.php | 0 .../phpseclib/phpseclib/Net/SSH2.php | 143 +- .../phpseclib/phpseclib/System/SSH/Agent.php | 0 .../phpseclib/System/SSH/Agent/Identity.php | 0 .../phpseclib/phpseclib/bootstrap.php | 0 .../phpseclib/phpseclib/phpseclib/openssl.cnf | 0 .../vdm_io}/vendor/web.config | 0 script.php | 47 + site/controllers/api.php | 109 - site/helpers/componentbuilder.php | 4 +- .../en-GB/en-GB.com_componentbuilder.ini | 2 +- 59 files changed, 470 insertions(+), 2108 deletions(-) delete mode 100644 admin/helpers/vendor/phpseclib/phpseclib/composer.lock create mode 100644 libraries/vdm_io/index.html rename {admin/helpers => libraries/vdm_io}/vendor/.htaccess (100%) rename {admin/helpers => libraries/vdm_io}/vendor/autoload.php (64%) rename {admin/helpers => libraries/vdm_io}/vendor/composer/ClassLoader.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/composer/LICENSE (100%) rename {admin/helpers => libraries/vdm_io}/vendor/composer/autoload_classmap.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/composer/autoload_files.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/composer/autoload_namespaces.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/composer/autoload_psr4.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/composer/autoload_real.php (77%) rename {admin/helpers => libraries/vdm_io}/vendor/composer/autoload_static.php (89%) rename {admin/helpers => libraries/vdm_io}/vendor/composer/installed.json (88%) create mode 100644 libraries/vdm_io/vendor/htaccess.txt create mode 100644 libraries/vdm_io/vendor/index.html rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/AUTHORS (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/LICENSE (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/README.md (88%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/composer.json (97%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php (98%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php (94%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php (99%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php (99%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php (99%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php (93%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/File/X509.php (99%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php (99%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php (99%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php (99%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Net/SSH1.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php (97%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/bootstrap.php (100%) rename {admin/helpers => libraries/vdm_io}/vendor/phpseclib/phpseclib/phpseclib/openssl.cnf (100%) rename {admin/helpers => libraries/vdm_io}/vendor/web.config (100%) diff --git a/README.md b/README.md index 9994258e8..ea8c3cfa5 100644 --- a/README.md +++ b/README.md @@ -126,14 +126,14 @@ Component Builder is mapped as a component in itself on my local development env + *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) + *Name*: [Component Builder](http://joomlacomponentbuilder.com) + *First Build*: 30th April, 2015 -+ *Last Build*: 27th February, 2018 ++ *Last Build*: 28th February, 2018 + *Version*: 2.6.17 + *Copyright*: Copyright (C) 2015. All Rights Reserved + *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html -+ *Line count*: **183098** ++ *Line count*: **183036** + *Field count*: **1641** + *File count*: **1169** -+ *Folder count*: **188** ++ *Folder count*: **189** > This **component** was build with a Joomla [Automated Component Builder](http://joomlacomponentbuilder.com). > Developed by [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) diff --git a/admin/README.txt b/admin/README.txt index 9994258e8..ea8c3cfa5 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -126,14 +126,14 @@ Component Builder is mapped as a component in itself on my local development env + *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) + *Name*: [Component Builder](http://joomlacomponentbuilder.com) + *First Build*: 30th April, 2015 -+ *Last Build*: 27th February, 2018 ++ *Last Build*: 28th February, 2018 + *Version*: 2.6.17 + *Copyright*: Copyright (C) 2015. All Rights Reserved + *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html -+ *Line count*: **183098** ++ *Line count*: **183036** + *Field count*: **1641** + *File count*: **1169** -+ *Folder count*: **188** ++ *Folder count*: **189** > This **component** was build with a Joomla [Automated Component Builder](http://joomlacomponentbuilder.com). > Developed by [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) diff --git a/admin/compiler/joomla_3/script.php b/admin/compiler/joomla_3/script.php index f26fa5b3b..e1525f537 100644 --- a/admin/compiler/joomla_3/script.php +++ b/admin/compiler/joomla_3/script.php @@ -111,6 +111,8 @@ class com_###component###InstallerScript */ function postflight($type, $parent) { + // get application + $app = JFactory::getApplication();###MOVEFOLDERSSCRIPT### // set the default component settings if ($type == 'install') {###POSTINSTALLSCRIPT### @@ -119,5 +121,5 @@ class com_###component###InstallerScript if ($type == 'update') {###POSTUPDATESCRIPT### } - } + }###MOVEFOLDERSMETHOD### } diff --git a/admin/helpers/compiler/b_Structure.php b/admin/helpers/compiler/b_Structure.php index 690f5ea7e..dfaf18d1c 100644 --- a/admin/helpers/compiler/b_Structure.php +++ b/admin/helpers/compiler/b_Structure.php @@ -306,12 +306,69 @@ class Structure extends Get */ public $addCheckin = false; + /** + * The Move Folders Switch + * + * @var boolean + */ + public $setMoveFolders = false; + /** * The array of last modified dates * * @var array */ protected $lastModifiedDate = array(); + + /** + * The array of dynamic paths + * + * JPATH_SITE is meant to represent the root path of the JSite application, just as JPATH_ADMINISTRATOR is mean to represent the root path of the JAdministrator application. + * + * JPATH_BASE is the root path for the current requested application.... so if you are in the administrator application: + * + * JPATH_BASE == JPATH_ADMINISTRATOR + * + * If you are in the site application: + * + * JPATH_BASE == JPATH_SITE + * + * If you are in the installation application: + * + * JPATH_BASE == JPATH_INSTALLATION. + * + * JPATH_ROOT is the root path for the Joomla install and does not depend upon any application. + * + * @var array + */ + protected $constantPaths = array( + // The path to the administrator folder. + 'JPATH_ADMINISTRATOR' => JPATH_ADMINISTRATOR, + // The path to the installed Joomla! site, or JPATH_ROOT/administrator if executed from the backend. + 'JPATH_BASE' => JPATH_BASE, + // The path to the cache folder. + 'JPATH_CACHE' => JPATH_CACHE, + // The path to the administration folder of the current component being executed. + 'JPATH_COMPONENT_ADMINISTRATOR' => JPATH_COMPONENT_ADMINISTRATOR, + // The path to the site folder of the current component being executed. + 'JPATH_COMPONENT_SITE' => JPATH_COMPONENT_SITE, + // The path to the current component being executed. + 'JPATH_COMPONENT' => JPATH_COMPONENT, + // The path to folder containing the configuration.php file. + 'JPATH_CONFIGURATION' => JPATH_CONFIGURATION, + // The path to the installation folder. + 'JPATH_INSTALLATION' => JPATH_INSTALLATION, + // The path to the libraries folder. + 'JPATH_LIBRARIES' => JPATH_LIBRARIES, + // The path to the plugins folder. + 'JPATH_PLUGINS' => JPATH_PLUGINS, + // The path to the installed Joomla! site. + 'JPATH_ROOT' => JPATH_ROOT, + // The path to the installed Joomla! site. + 'JPATH_SITE' => JPATH_SITE, + // The path to the templates folder. + 'JPATH_THEMES' => JPATH_THEMES + ); /** * Constructor @@ -718,40 +775,58 @@ class Structure extends Get $path = str_replace('c0mp0n3nt/', $this->componentPath . '/', $details->path); // set the template folder path $templatePath = (isset($details->custom) && $details->custom) ? (($details->custom !== 'full') ? $this->templatePathCustom.'/':'') : $this->templatePath.'/'; - // now mov the file + // set the final paths + $currentFullPath = str_replace('//', '/', $templatePath.'/'.$item); + $packageFullPath = str_replace('//', '/', $path.'/'.$new); + $zipFullPath = str_replace('//', '/', $zipPath.'/'.$new); + // now move the file if ($details->type === 'file') { - if (!JFile::exists($templatePath . $item)) + if (!JFile::exists($currentFullPath)) { - $this->app->enqueueMessage(JText::sprintf('The file path: %s does not exist, and was not added!', $templatePath . $item), 'Error'); + $this->app->enqueueMessage(JText::sprintf('The file path: %s does not exist, and was not added!', $currentFullPath), 'Error'); } else { // move the file to its place - JFile::copy($templatePath . $item, $path . '/' . $new); + JFile::copy($currentFullPath, $packageFullPath); // count the file created $this->fileCount++; // store the new files if (!in_array($ftem, $this->notNew)) { - $this->newFiles['static'][] = array('path' => $path . '/' . $new, 'name' => $new, 'zip' => $zipPath . '/' . $new); + $this->newFiles['static'][] = array('path' => $packageFullPath, 'name' => $new, 'zip' => $zipFullPath); } } } elseif ($details->type === 'folder') { - if (!JFolder::exists($templatePath . $item)) + if (!JFolder::exists($currentFullPath)) { - $this->app->enqueueMessage(JText::sprintf('The folder path: %s does not exist, and was not added!', $templatePath . $item), 'Error'); + $this->app->enqueueMessage(JText::sprintf('The folder path: %s does not exist, and was not added!', $currentFullPath), 'Error'); } else { // move the folder to its place - JFolder::copy($templatePath . $item, $path . '/' . $new); + JFolder::copy($currentFullPath, $packageFullPath); // count the folder created $this->folderCount++; } } + // check if we should add the dynamic folder moving script to the installer script + if (!$this->setMoveFolders) + { + $checker = 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 + if (isset($checker[0]) && ComponentbuilderHelper::checkString($checker[0]) && !in_array($checker[0], $stdFolders)) + { + // 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) + $this->app->enqueueMessage(JText::sprintf('

Dynamic folder/s were detected.
A method (setDynamicF0ld3rs) was added to the install script.php of this package to insure that the folder/s are copied into the correct place when this componet is installed!

'), 'Notice'); + } + } } return true; } @@ -1128,6 +1203,8 @@ class Structure extends Get if(!isset($custom['folder']) && isset($custom['folderpath'])) { $custom['folder'] = '/'.trim($custom['folderpath'], '/'); + // update the dynamic path + $custom['folder'] = $this->updateDynamicPath($custom['folder']); // remove the file path unset($custom['folderpath']); // triget fullpath @@ -1237,6 +1314,8 @@ class Structure extends Get if(!isset($custom['file']) && isset($custom['filepath'])) { $custom['file'] = '/'.trim($custom['filepath'], '/'); + // update the dynamic path + $custom['file'] = $this->updateDynamicPath($custom['file']); // remove the file path unset($custom['filepath']); // triget fullpath @@ -1312,6 +1391,19 @@ class Structure extends Get } } + /** + * Update paths with real value + * + * @param string $path The full path + * + * @return string The updated path + * + */ + protected function updateDynamicPath($path) + { + return $this->setPlaceholders($path, $this->constantPaths); + } + /** * Remove folders with files * diff --git a/admin/helpers/compiler/e_Interpretation.php b/admin/helpers/compiler/e_Interpretation.php index f6e11d16c..ae09d5844 100644 --- a/admin/helpers/compiler/e_Interpretation.php +++ b/admin/helpers/compiler/e_Interpretation.php @@ -4682,6 +4682,66 @@ class Interpretation extends Fields return $script; } + public function setMoveFolderScript() + { + if ($this->setMoveFolders) + { + // reset script + $script = array(); + $script[] = "\t\t//" . $this->setLine(__LINE__) . " We check if we have dynamic folders to copy"; + $script[] = "\t\t\$this->setDynamicF0ld3rs(\$app, \$parent);"; + // done + return PHP_EOL.implode(PHP_EOL, $script); + } + return ''; + } + + public function setMoveFolderMethod() + { + if ($this->setMoveFolders) + { + // reset script + $script = array(); + $script[] = "\t/**"; + $script[] = "\t * Method to set/copy dynamic folders into place (use with caution)"; + $script[] = "\t *"; + $script[] = "\t * @return void"; + $script[] = "\t */"; + $script[] = "\tprotected function setDynamicF0ld3rs(\$app, \$parent)"; + $script[] = "\t{"; + $script[] = "\t\t//" . $this->setLine(__LINE__) . " get the instalation path"; + $script[] = "\t\t\$installer = \$parent->getParent();"; + $script[] = "\t\t\$installPath = \$installer->getPath('source');"; + $script[] = "\t\t//" . $this->setLine(__LINE__) . " get all the folders"; + $script[] = "\t\t\$folders = JFolder::folders(\$installPath);"; + $script[] = "\t\t//" . $this->setLine(__LINE__) . " check if we have folders we may want to copy"; + $script[] = "\t\t\$doNotCopy = array('media','admin','site'); // Joomla already deals with these"; + $script[] = "\t\tif (count(\$folders) > 1)"; + $script[] = "\t\t{"; + $script[] = "\t\t\tforeach (\$folders as \$folder)"; + $script[] = "\t\t\t{"; + $script[] = "\t\t\t\t//" . $this->setLine(__LINE__) . " Only copy if not a standard folders"; + $script[] = "\t\t\t\tif (!in_array(\$folder, \$doNotCopy))"; + $script[] = "\t\t\t\t{"; + $script[] = "\t\t\t\t\t//" . $this->setLine(__LINE__) . " set the source path"; + $script[] = "\t\t\t\t\t\$src = \$installPath.'/'.\$folder;"; + $script[] = "\t\t\t\t\t//" . $this->setLine(__LINE__) . " set the destination path"; + $script[] = "\t\t\t\t\t\$dest = JPATH_ROOT.'/'.\$folder;"; + $script[] = "\t\t\t\t\t//" . $this->setLine(__LINE__) . " now try to copy the folder"; + $script[] = "\t\t\t\t\tif (!JFolder::copy(\$src, \$dest, '', true))"; + $script[] = "\t\t\t\t\t{"; + $script[] = "\t\t\t\t\t\t\$app->enqueueMessage('Could not copy '.\$folder.' folder into place, please make sure destination is writable!', 'error');"; + $script[] = "\t\t\t\t\t}"; + $script[] = "\t\t\t\t}"; + $script[] = "\t\t\t}"; + $script[] = "\t\t}"; + $script[] = "\t}"; + // done + return PHP_EOL.PHP_EOL.implode(PHP_EOL, $script); + } + return ''; + } + public function getContentType($view, $component) { // add if history is to be kept or if tags is added diff --git a/admin/helpers/compiler/f_Infusion.php b/admin/helpers/compiler/f_Infusion.php index 8465dbf8f..ec8f27a6b 100644 --- a/admin/helpers/compiler/f_Infusion.php +++ b/admin/helpers/compiler/f_Infusion.php @@ -1026,6 +1026,12 @@ class Infusion extends Interpretation // ###UNINSTALLSCRIPT### $this->fileContentStatic['###UNINSTALLSCRIPT###'] = $this->setUninstallScript(); + // ###MOVEFOLDERSSCRIPT### + $this->fileContentStatic['###MOVEFOLDERSSCRIPT###'] = $this->setMoveFolderScript(); + + // ###MOVEFOLDERSMETHOD### + $this->fileContentStatic['###MOVEFOLDERSMETHOD###'] = $this->setMoveFolderMethod(); + // ###HELPER_UIKIT### $this->fileContentStatic['###HELPER_UIKIT###'] = $this->setUikitHelperMethods(); diff --git a/admin/helpers/componentbuilder.php b/admin/helpers/componentbuilder.php index 8a9e2feff..5c1b388fc 100644 --- a/admin/helpers/componentbuilder.php +++ b/admin/helpers/componentbuilder.php @@ -1984,7 +1984,7 @@ abstract class ComponentbuilderHelper if (!self::$composer) { // load the autoloader - require_once JPATH_ADMINISTRATOR.'/components/com_componentbuilder/helpers/vendor/autoload.php'; + require_once JPATH_SITE.'/libraries/vdm_io/vendor/autoload.php'; // do not load again self::$composer = true; } @@ -2094,7 +2094,7 @@ abstract class ComponentbuilderHelper if (!class_exists('\phpseclib\Net\SFTP')) { // class not in place so send out error - JFactory::getApplication()->enqueueMessage(JText::_('COM_COMPONENTBUILDER_THE_BPHPSECLIBNETSFTPB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_ADMINHELPERSVENDOR_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO'), 'Error'); + JFactory::getApplication()->enqueueMessage(JText::_('COM_COMPONENTBUILDER_THE_BPHPSECLIBNETSFTPB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO'), 'Error'); return false; } // insure the port is set diff --git a/admin/helpers/vendor/phpseclib/phpseclib/composer.lock b/admin/helpers/vendor/phpseclib/phpseclib/composer.lock deleted file mode 100644 index beda2d640..000000000 --- a/admin/helpers/vendor/phpseclib/phpseclib/composer.lock +++ /dev/null @@ -1,1819 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", - "This file is @generated automatically" - ], - "hash": "8599992bf6058a9da82372eb8bcae2c2", - "content-hash": "fde47c84178c55c06de858a2128e3d07", - "packages": [], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2015-06-14 21:17:01" - }, - { - "name": "michelf/php-markdown", - "version": "1.6.0", - "source": { - "type": "git", - "url": "https://github.com/michelf/php-markdown.git", - "reference": "156e56ee036505ec637d761ee62dc425d807183c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/michelf/php-markdown/zipball/156e56ee036505ec637d761ee62dc425d807183c", - "reference": "156e56ee036505ec637d761ee62dc425d807183c", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-lib": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Michelf": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Michel Fortin", - "email": "michel.fortin@michelf.ca", - "homepage": "https://michelf.ca/", - "role": "Developer" - }, - { - "name": "John Gruber", - "homepage": "https://daringfireball.net/" - } - ], - "description": "PHP Markdown", - "homepage": "https://michelf.ca/projects/php-markdown/", - "keywords": [ - "markdown" - ], - "time": "2015-12-24 01:37:31" - }, - { - "name": "nikic/php-parser", - "version": "v0.9.5", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ef70767475434bdb3615b43c327e2cae17ef12eb", - "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.9-dev" - } - }, - "autoload": { - "psr-0": { - "PHPParser": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "time": "2014-07-23 18:24:17" - }, - { - "name": "phing/phing", - "version": "2.14.0", - "source": { - "type": "git", - "url": "https://github.com/phingofficial/phing.git", - "reference": "7dd73c83c377623def54b58121f46b4dcb35dd61" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phingofficial/phing/zipball/7dd73c83c377623def54b58121f46b4dcb35dd61", - "reference": "7dd73c83c377623def54b58121f46b4dcb35dd61", - "shasum": "" - }, - "require": { - "php": ">=5.2.0" - }, - "require-dev": { - "ext-pdo_sqlite": "*", - "lastcraft/simpletest": "@dev", - "mikey179/vfsstream": "^1.6", - "pdepend/pdepend": "2.x", - "pear/archive_tar": "1.4.x", - "pear/http_request2": "dev-trunk", - "pear/net_growl": "dev-trunk", - "pear/pear-core-minimal": "1.10.1", - "pear/versioncontrol_git": "@dev", - "pear/versioncontrol_svn": "~0.5", - "phpdocumentor/phpdocumentor": "2.x", - "phploc/phploc": "~2.0.6", - "phpmd/phpmd": "~2.2", - "phpunit/phpunit": ">=3.7", - "sebastian/git": "~1.0", - "sebastian/phpcpd": "2.x", - "squizlabs/php_codesniffer": "~2.2", - "symfony/yaml": "~2.7" - }, - "suggest": { - "pdepend/pdepend": "PHP version of JDepend", - "pear/archive_tar": "Tar file management class", - "pear/versioncontrol_git": "A library that provides OO interface to handle Git repository", - "pear/versioncontrol_svn": "A simple OO-style interface for Subversion, the free/open-source version control system", - "phpdocumentor/phpdocumentor": "Documentation Generator for PHP", - "phploc/phploc": "A tool for quickly measuring the size of a PHP project", - "phpmd/phpmd": "PHP version of PMD tool", - "phpunit/php-code-coverage": "Library that provides collection, processing, and rendering functionality for PHP code coverage information", - "phpunit/phpunit": "The PHP Unit Testing Framework", - "sebastian/phpcpd": "Copy/Paste Detector (CPD) for PHP code", - "tedivm/jshrink": "Javascript Minifier built in PHP" - }, - "bin": [ - "bin/phing" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.14.x-dev" - } - }, - "autoload": { - "classmap": [ - "classes/phing/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "classes" - ], - "license": [ - "LGPL-3.0" - ], - "authors": [ - { - "name": "Michiel Rook", - "email": "mrook@php.net" - }, - { - "name": "Phing Community", - "homepage": "https://www.phing.info/trac/wiki/Development/Contributors" - } - ], - "description": "PHing Is Not GNU make; it's a PHP project build system or build tool based on Apache Ant.", - "homepage": "https://www.phing.info/", - "keywords": [ - "build", - "phing", - "task", - "tool" - ], - "time": "2016-03-10 21:39:23" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "1.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2015-12-27 11:43:31" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "9270140b940ff02e58ec577c237274e92cd40cdd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9270140b940ff02e58ec577c237274e92cd40cdd", - "reference": "9270140b940ff02e58ec577c237274e92cd40cdd", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-06-10 09:48:41" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "time": "2016-06-10 07:14:17" - }, - { - "name": "phpspec/prophecy", - "version": "v1.6.1", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.0" - }, - "require-dev": { - "phpspec/phpspec": "^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "autoload": { - "psr-0": { - "Prophecy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2016-06-07 08:13:47" - }, - { - "name": "phpunit/php-code-coverage", - "version": "2.2.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "^1.3.2", - "sebastian/version": "~1.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2015-10-06 15:47:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2015-06-21 13:08:43" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21 13:50:34" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4|~5" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2016-05-12 18:03:57" - }, - { - "name": "phpunit/php-token-stream", - "version": "1.4.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2015-09-15 10:49:45" - }, - { - "name": "phpunit/phpunit", - "version": "4.8.26", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fc1d8cd5b5de11625979125c5639347896ac2c74", - "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "~2.1", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "^1.0.6", - "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "~1.3", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.1|~3.0" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.8.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2016-05-17 03:09:28" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "2.3.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2015-10-02 06:51:40" - }, - { - "name": "pimple/pimple", - "version": "v2.1.1", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "ea22fb2880faf7b7b0e17c9809c6fe25b071fd76" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/ea22fb2880faf7b7b0e17c9809c6fe25b071fd76", - "reference": "ea22fb2880faf7b7b0e17c9809c6fe25b071fd76", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "psr-0": { - "Pimple": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Pimple is a simple Dependency Injection Container for PHP 5.3", - "homepage": "http://pimple.sensiolabs.org", - "keywords": [ - "container", - "dependency injection" - ], - "time": "2014-07-24 07:10:08" - }, - { - "name": "sami/sami", - "version": "v2.0.0", - "source": { - "type": "git", - "url": "https://github.com/FriendsOfPHP/Sami.git", - "reference": "fa58b324f41aa2aefe21dac4f22d8c98965fc012" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/Sami/zipball/fa58b324f41aa2aefe21dac4f22d8c98965fc012", - "reference": "fa58b324f41aa2aefe21dac4f22d8c98965fc012", - "shasum": "" - }, - "require": { - "michelf/php-markdown": "~1.3", - "nikic/php-parser": "0.9.*", - "php": ">=5.3.0", - "pimple/pimple": "2.*", - "symfony/console": "~2.1", - "symfony/filesystem": "~2.1", - "symfony/finder": "~2.1", - "symfony/process": "~2.1", - "symfony/yaml": "~2.1", - "twig/twig": "1.*" - }, - "bin": [ - "sami.php" - ], - "type": "application", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "psr-0": { - "Sami": "." - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Sami, an API documentation generator", - "homepage": "http://sami.sensiolabs.org", - "keywords": [ - "phpdoc" - ], - "time": "2014-06-25 12:05:18" - }, - { - "name": "sebastian/comparator", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2015-07-26 15:48:44" - }, - { - "name": "sebastian/diff", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2015-12-08 07:14:41" - }, - { - "name": "sebastian/environment", - "version": "1.3.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716", - "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2016-05-17 03:18:57" - }, - { - "name": "sebastian/exporter", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2016-06-17 09:04:28" - }, - { - "name": "sebastian/global-state", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2015-10-12 03:26:01" - }, - { - "name": "sebastian/recursion-context", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-11-11 19:50:13" - }, - { - "name": "sebastian/version", - "version": "1.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "shasum": "" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-06-21 13:59:46" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "2.6.1", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "fb72ed32f8418db5e7770be1653e62e0d6f5dd3d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/fb72ed32f8418db5e7770be1653e62e0d6f5dd3d", - "reference": "fb72ed32f8418db5e7770be1653e62e0d6f5dd3d", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "bin": [ - "scripts/phpcs", - "scripts/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "classmap": [ - "CodeSniffer.php", - "CodeSniffer/CLI.php", - "CodeSniffer/Exception.php", - "CodeSniffer/File.php", - "CodeSniffer/Fixer.php", - "CodeSniffer/Report.php", - "CodeSniffer/Reporting.php", - "CodeSniffer/Sniff.php", - "CodeSniffer/Tokens.php", - "CodeSniffer/Reports/", - "CodeSniffer/Tokenizers/", - "CodeSniffer/DocGenerators/", - "CodeSniffer/Standards/AbstractPatternSniff.php", - "CodeSniffer/Standards/AbstractScopeSniff.php", - "CodeSniffer/Standards/AbstractVariableSniff.php", - "CodeSniffer/Standards/IncorrectPatternException.php", - "CodeSniffer/Standards/Generic/Sniffs/", - "CodeSniffer/Standards/MySource/Sniffs/", - "CodeSniffer/Standards/PEAR/Sniffs/", - "CodeSniffer/Standards/PSR1/Sniffs/", - "CodeSniffer/Standards/PSR2/Sniffs/", - "CodeSniffer/Standards/Squiz/Sniffs/", - "CodeSniffer/Standards/Zend/Sniffs/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", - "keywords": [ - "phpcs", - "standards" - ], - "time": "2016-05-30 22:24:32" - }, - { - "name": "symfony/console", - "version": "v2.8.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "5ac8bc9aa77bb2edf06af3a1bb6bc1020d23acd3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5ac8bc9aa77bb2edf06af3a1bb6bc1020d23acd3", - "reference": "5ac8bc9aa77bb2edf06af3a1bb6bc1020d23acd3", - "shasum": "" - }, - "require": { - "php": ">=5.3.9", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1|~3.0.0", - "symfony/process": "~2.1|~3.0.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2016-06-06 15:06:25" - }, - { - "name": "symfony/filesystem", - "version": "v2.8.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "dee379131dceed90a429e951546b33edfe7dccbb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/dee379131dceed90a429e951546b33edfe7dccbb", - "reference": "dee379131dceed90a429e951546b33edfe7dccbb", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2016-04-12 18:01:21" - }, - { - "name": "symfony/finder", - "version": "v2.8.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "3ec095fab1800222732ca522a95dce8fa124007b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/3ec095fab1800222732ca522a95dce8fa124007b", - "reference": "3ec095fab1800222732ca522a95dce8fa124007b", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2016-06-06 11:11:27" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "dff51f72b0706335131b00a7f49606168c582594" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", - "reference": "dff51f72b0706335131b00a7f49606168c582594", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2016-05-18 14:26:46" - }, - { - "name": "symfony/process", - "version": "v2.8.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "115347d00c342198cdc52a7bd8bc15b5ab43500c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/115347d00c342198cdc52a7bd8bc15b5ab43500c", - "reference": "115347d00c342198cdc52a7bd8bc15b5ab43500c", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com", - "time": "2016-06-06 11:11:27" - }, - { - "name": "symfony/yaml", - "version": "v2.8.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "815fabf3f48c7d1df345a69d1ad1a88f59757b34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/815fabf3f48c7d1df345a69d1ad1a88f59757b34", - "reference": "815fabf3f48c7d1df345a69d1ad1a88f59757b34", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2016-06-06 11:11:27" - }, - { - "name": "twig/twig", - "version": "v1.24.1", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "3566d311a92aae4deec6e48682dc5a4528c4a512" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/3566d311a92aae4deec6e48682dc5a4528c4a512", - "reference": "3566d311a92aae4deec6e48682dc5a4528c4a512", - "shasum": "" - }, - "require": { - "php": ">=5.2.7" - }, - "require-dev": { - "symfony/debug": "~2.7", - "symfony/phpunit-bridge": "~2.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.24-dev" - } - }, - "autoload": { - "psr-0": { - "Twig_": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - }, - { - "name": "Twig Team", - "homepage": "http://twig.sensiolabs.org/contributors", - "role": "Contributors" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "http://twig.sensiolabs.org", - "keywords": [ - "templating" - ], - "time": "2016-05-30 09:11:59" - }, - { - "name": "webmozart/assert", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde", - "reference": "30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2015-08-24 13:29:44" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.3.3" - }, - "platform-dev": [] -} diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index 3a9c848e9..d3fbfbeba 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -6160,7 +6160,7 @@ COM_COMPONENTBUILDER_THERE_ARE_NO_OUT_OF_DATE_SNIPPETS_AT_THIS_TIME="There are n COM_COMPONENTBUILDER_THERE_ARE_NO_SNIPPETS_TO_UPDATE_AT_THIS_TIME="There are no snippets to update at this time" COM_COMPONENTBUILDER_THERE_HAS_BEEN_AN_ERROR_IF_THIS_CONTINUES_PLEASE_INFORM_YOUR_SYSTEM_ADMINISTRATOR_OF_A_TYPE_ERROR_IN_THE_FIELDS_DISPLAY_REQUEST="There has been an error, if this continues please inform your system administrator of a type error in the fields display request!" COM_COMPONENTBUILDER_THERE_WAS_A_PROBLEM_BNO_VIEW_OR_ID_FOUND_IN_SESSION_OR_VIEW_NOT_ALLOWED_TO_ACCESS_AREAB_WE_COULD_NOT_LOAD_ANY_LINKED_TO_VALUES_PLEASE_INFORM_YOUR_SYSTEM_ADMINISTRATOR="There was a problem, no view or id found in session or view not allowed to access area, we could not load any linked to values. Please inform your system administrator!" -COM_COMPONENTBUILDER_THE_BPHPSECLIBNETSFTPB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_ADMINHELPERSVENDOR_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The phpseclib\NET\SFTP library\class is not available! This library\class should have been added to your admin/helpers/vendor folder of JCB. Please contact your system administrator for more info" +COM_COMPONENTBUILDER_THE_BPHPSECLIBNETSFTPB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The phpseclib\NET\SFTP library\class is not available! This library\class should have been added to your libraries/vdm_io/vendor folder. Please contact your system administrator for more info" COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_PATH_ON_BSB_SERVER="The %s file could not be moved to %s path on %s server." COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_SERVER="The %s file could not be moved to %s server." COM_COMPONENTBUILDER_THE_BSB_LIBRARY_CAN_NOT_BE_DELETED_OR_THINGS_WILL_BREAK="The %s library can not be deleted, or things will break." diff --git a/componentbuilder.xml b/componentbuilder.xml index d9a248da1..4ca15f511 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,7 +1,7 @@ COM_COMPONENTBUILDER - 27th February, 2018 + 28th February, 2018 Llewellyn van der Merwe llewellyn@joomlacomponentbuilder.com http://joomlacomponentbuilder.com diff --git a/libraries/vdm_io/index.html b/libraries/vdm_io/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vdm_io/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/helpers/vendor/.htaccess b/libraries/vdm_io/vendor/.htaccess similarity index 100% rename from admin/helpers/vendor/.htaccess rename to libraries/vdm_io/vendor/.htaccess diff --git a/admin/helpers/vendor/autoload.php b/libraries/vdm_io/vendor/autoload.php similarity index 64% rename from admin/helpers/vendor/autoload.php rename to libraries/vdm_io/vendor/autoload.php index 60086a81b..87a2a0a05 100644 --- a/admin/helpers/vendor/autoload.php +++ b/libraries/vdm_io/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInite1af6c9ee1d0c9dfa4a8dcea26b35570::getLoader(); +return ComposerAutoloaderInit10d22a526bd476954b93748a871e7ad4::getLoader(); diff --git a/admin/helpers/vendor/composer/ClassLoader.php b/libraries/vdm_io/vendor/composer/ClassLoader.php similarity index 100% rename from admin/helpers/vendor/composer/ClassLoader.php rename to libraries/vdm_io/vendor/composer/ClassLoader.php diff --git a/admin/helpers/vendor/composer/LICENSE b/libraries/vdm_io/vendor/composer/LICENSE similarity index 100% rename from admin/helpers/vendor/composer/LICENSE rename to libraries/vdm_io/vendor/composer/LICENSE diff --git a/admin/helpers/vendor/composer/autoload_classmap.php b/libraries/vdm_io/vendor/composer/autoload_classmap.php similarity index 100% rename from admin/helpers/vendor/composer/autoload_classmap.php rename to libraries/vdm_io/vendor/composer/autoload_classmap.php diff --git a/admin/helpers/vendor/composer/autoload_files.php b/libraries/vdm_io/vendor/composer/autoload_files.php similarity index 100% rename from admin/helpers/vendor/composer/autoload_files.php rename to libraries/vdm_io/vendor/composer/autoload_files.php diff --git a/admin/helpers/vendor/composer/autoload_namespaces.php b/libraries/vdm_io/vendor/composer/autoload_namespaces.php similarity index 100% rename from admin/helpers/vendor/composer/autoload_namespaces.php rename to libraries/vdm_io/vendor/composer/autoload_namespaces.php diff --git a/admin/helpers/vendor/composer/autoload_psr4.php b/libraries/vdm_io/vendor/composer/autoload_psr4.php similarity index 100% rename from admin/helpers/vendor/composer/autoload_psr4.php rename to libraries/vdm_io/vendor/composer/autoload_psr4.php diff --git a/admin/helpers/vendor/composer/autoload_real.php b/libraries/vdm_io/vendor/composer/autoload_real.php similarity index 77% rename from admin/helpers/vendor/composer/autoload_real.php rename to libraries/vdm_io/vendor/composer/autoload_real.php index 0eecfe833..f90786941 100644 --- a/admin/helpers/vendor/composer/autoload_real.php +++ b/libraries/vdm_io/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInite1af6c9ee1d0c9dfa4a8dcea26b35570 +class ComposerAutoloaderInit10d22a526bd476954b93748a871e7ad4 { private static $loader; @@ -19,15 +19,15 @@ class ComposerAutoloaderInite1af6c9ee1d0c9dfa4a8dcea26b35570 return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInite1af6c9ee1d0c9dfa4a8dcea26b35570', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit10d22a526bd476954b93748a871e7ad4', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInite1af6c9ee1d0c9dfa4a8dcea26b35570', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit10d22a526bd476954b93748a871e7ad4', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInite1af6c9ee1d0c9dfa4a8dcea26b35570::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit10d22a526bd476954b93748a871e7ad4::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -48,19 +48,19 @@ class ComposerAutoloaderInite1af6c9ee1d0c9dfa4a8dcea26b35570 $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInite1af6c9ee1d0c9dfa4a8dcea26b35570::$files; + $includeFiles = Composer\Autoload\ComposerStaticInit10d22a526bd476954b93748a871e7ad4::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequiree1af6c9ee1d0c9dfa4a8dcea26b35570($fileIdentifier, $file); + composerRequire10d22a526bd476954b93748a871e7ad4($fileIdentifier, $file); } return $loader; } } -function composerRequiree1af6c9ee1d0c9dfa4a8dcea26b35570($fileIdentifier, $file) +function composerRequire10d22a526bd476954b93748a871e7ad4($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/admin/helpers/vendor/composer/autoload_static.php b/libraries/vdm_io/vendor/composer/autoload_static.php similarity index 89% rename from admin/helpers/vendor/composer/autoload_static.php rename to libraries/vdm_io/vendor/composer/autoload_static.php index b076aa4b4..ea6b0d7d3 100644 --- a/admin/helpers/vendor/composer/autoload_static.php +++ b/libraries/vdm_io/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInite1af6c9ee1d0c9dfa4a8dcea26b35570 +class ComposerStaticInit10d22a526bd476954b93748a871e7ad4 { public static $files = array ( 'decc78cc4436b1292c6c0d151b19445c' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/bootstrap.php', @@ -54,9 +54,9 @@ class ComposerStaticInite1af6c9ee1d0c9dfa4a8dcea26b35570 public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInite1af6c9ee1d0c9dfa4a8dcea26b35570::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInite1af6c9ee1d0c9dfa4a8dcea26b35570::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInite1af6c9ee1d0c9dfa4a8dcea26b35570::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit10d22a526bd476954b93748a871e7ad4::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit10d22a526bd476954b93748a871e7ad4::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit10d22a526bd476954b93748a871e7ad4::$classMap; }, null, ClassLoader::class); } diff --git a/admin/helpers/vendor/composer/installed.json b/libraries/vdm_io/vendor/composer/installed.json similarity index 88% rename from admin/helpers/vendor/composer/installed.json rename to libraries/vdm_io/vendor/composer/installed.json index d434a52a7..4ce92974f 100644 --- a/admin/helpers/vendor/composer/installed.json +++ b/libraries/vdm_io/vendor/composer/installed.json @@ -1,17 +1,17 @@ [ { "name": "phpseclib/phpseclib", - "version": "2.0.9", - "version_normalized": "2.0.9.0", + "version": "2.0.10", + "version_normalized": "2.0.10.0", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "c9a3fe35e20eb6eeaca716d6a23cde03f52d1558" + "reference": "d305b780829ea4252ed9400b3f5937c2c99b51d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c9a3fe35e20eb6eeaca716d6a23cde03f52d1558", - "reference": "c9a3fe35e20eb6eeaca716d6a23cde03f52d1558", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d305b780829ea4252ed9400b3f5937c2c99b51d4", + "reference": "d305b780829ea4252ed9400b3f5937c2c99b51d4", "shasum": "" }, "require": { @@ -19,7 +19,7 @@ }, "require-dev": { "phing/phing": "~2.7", - "phpunit/phpunit": "~4.0", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", "sami/sami": "~2.0", "squizlabs/php_codesniffer": "~2.0" }, @@ -29,7 +29,7 @@ "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." }, - "time": "2017-11-29T06:38:08+00:00", + "time": "2018-02-19T04:29:13+00:00", "type": "library", "installation-source": "dist", "autoload": { diff --git a/libraries/vdm_io/vendor/htaccess.txt b/libraries/vdm_io/vendor/htaccess.txt new file mode 100644 index 000000000..9afb1a1b3 --- /dev/null +++ b/libraries/vdm_io/vendor/htaccess.txt @@ -0,0 +1,9 @@ +# Apache 2.4+ + + Require all denied + + +# Apache 2.0-2.2 + + Deny from all + diff --git a/libraries/vdm_io/vendor/index.html b/libraries/vdm_io/vendor/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vdm_io/vendor/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/helpers/vendor/phpseclib/phpseclib/AUTHORS b/libraries/vdm_io/vendor/phpseclib/phpseclib/AUTHORS similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/AUTHORS rename to libraries/vdm_io/vendor/phpseclib/phpseclib/AUTHORS diff --git a/admin/helpers/vendor/phpseclib/phpseclib/LICENSE b/libraries/vdm_io/vendor/phpseclib/phpseclib/LICENSE similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/LICENSE rename to libraries/vdm_io/vendor/phpseclib/phpseclib/LICENSE diff --git a/admin/helpers/vendor/phpseclib/phpseclib/README.md b/libraries/vdm_io/vendor/phpseclib/phpseclib/README.md similarity index 88% rename from admin/helpers/vendor/phpseclib/phpseclib/README.md rename to libraries/vdm_io/vendor/phpseclib/phpseclib/README.md index e00e28702..94402bee0 100644 --- a/admin/helpers/vendor/phpseclib/phpseclib/README.md +++ b/libraries/vdm_io/vendor/phpseclib/phpseclib/README.md @@ -8,7 +8,6 @@ AES, Blowfish, Twofish, SSH-1, SSH-2, SFTP, and X.509 * [Browse Git](https://github.com/phpseclib/phpseclib) * [Code Coverage Report](https://coverage.phpseclib.org/2.0/latest/) -* Support phpseclib development by [![Becoming a patron](https://img.shields.io/badge/become-patron-brightgreen.svg)](https://www.patreon.com/phpseclib) ## Documentation @@ -37,7 +36,7 @@ AES, Blowfish, Twofish, SSH-1, SSH-2, SFTP, and X.509 * Composer compatible (PSR-0 autoloading) * Install using Composer: `composer require phpseclib/phpseclib ~1.0` * Install using PEAR: See [phpseclib PEAR Channel Documentation](http://phpseclib.sourceforge.net/pear.htm) -* [Download 1.0.9 as ZIP](http://sourceforge.net/projects/phpseclib/files/phpseclib1.0.9.zip/download) +* [Download 1.0.10 as ZIP](http://sourceforge.net/projects/phpseclib/files/phpseclib1.0.10.zip/download) ## Support diff --git a/admin/helpers/vendor/phpseclib/phpseclib/composer.json b/libraries/vdm_io/vendor/phpseclib/phpseclib/composer.json similarity index 97% rename from admin/helpers/vendor/phpseclib/phpseclib/composer.json rename to libraries/vdm_io/vendor/phpseclib/phpseclib/composer.json index 4b84b110e..b4e8a1c9c 100644 --- a/admin/helpers/vendor/phpseclib/phpseclib/composer.json +++ b/libraries/vdm_io/vendor/phpseclib/phpseclib/composer.json @@ -55,7 +55,7 @@ }, "require-dev": { "phing/phing": "~2.7", - "phpunit/phpunit": "~4.0", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", "sami/sami": "~2.0", "squizlabs/php_codesniffer": "~2.0" }, diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php similarity index 98% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php index 402757b37..54a8997ed 100644 --- a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php +++ b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php @@ -2555,4 +2555,44 @@ abstract class Base return $result . pack('H*', sha1($hash)); } } + + /** + * Convert float to int + * + * On ARM CPUs converting floats to ints doesn't always work + * + * @access private + * @param string $x + * @return int + */ + function safe_intval($x) + { + switch (true) { + case is_int($x): + // PHP 5.3, per http://php.net/releases/5_3_0.php, introduced "more consistent float rounding" + case (php_uname('m') & "\xDF\xDF\xDF") != 'ARM': + return $x; + } + return (fmod($x, 0x80000000) & 0x7FFFFFFF) | + ((fmod(floor($x / 0x80000000), 2) & 1) << 31); + } + + /** + * eval()'able string for in-line float to int + * + * @access private + * @return string + */ + function safe_intval_inline() + { + switch (true) { + case defined('PHP_INT_SIZE') && PHP_INT_SIZE == 8: + case (php_uname('m') & "\xDF\xDF\xDF") != 'ARM': + return '%s'; + break; + default: + $safeint = '(is_int($temp = %s) ? $temp : (fmod($temp, 0x80000000) & 0x7FFFFFFF) | '; + return $safeint . '((fmod(floor($temp / 0x80000000), 2) & 1) << 31))'; + } + } } diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php similarity index 94% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php index 19d0a0200..74cc49de8 100644 --- a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php +++ b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php @@ -294,7 +294,7 @@ class Blowfish extends Base function setKeyLength($length) { if ($length < 32) { - $this->key_length = 7; + $this->key_length = 4; } elseif ($length > 448) { $this->key_length = 56; } else { @@ -408,16 +408,14 @@ class Blowfish extends Base for ($i = 0; $i < 16; $i+= 2) { $l^= $p[$i]; - $r^= ($sb_0[$l >> 24 & 0xff] + - $sb_1[$l >> 16 & 0xff] ^ + $r^= $this->safe_intval(($this->safe_intval($sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]) ^ $sb_2[$l >> 8 & 0xff]) + - $sb_3[$l & 0xff]; + $sb_3[$l & 0xff]); $r^= $p[$i + 1]; - $l^= ($sb_0[$r >> 24 & 0xff] + - $sb_1[$r >> 16 & 0xff] ^ + $l^= $this->safe_intval(($this->safe_intval($sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]) ^ $sb_2[$r >> 8 & 0xff]) + - $sb_3[$r & 0xff]; + $sb_3[$r & 0xff]); } return pack("N*", $r ^ $p[17], $l ^ $p[16]); } @@ -443,16 +441,14 @@ class Blowfish extends Base for ($i = 17; $i > 2; $i-= 2) { $l^= $p[$i]; - $r^= ($sb_0[$l >> 24 & 0xff] + - $sb_1[$l >> 16 & 0xff] ^ + $r^= $this->safe_intval(($this->safe_intval($sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]) ^ $sb_2[$l >> 8 & 0xff]) + - $sb_3[$l & 0xff]; + $sb_3[$l & 0xff]); $r^= $p[$i - 1]; - $l^= ($sb_0[$r >> 24 & 0xff] + - $sb_1[$r >> 16 & 0xff] ^ + $l^= $this->safe_intval(($this->safe_intval($sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]) ^ $sb_2[$r >> 8 & 0xff]) + - $sb_3[$r & 0xff]; + $sb_3[$r & 0xff]); } return pack("N*", $r ^ $p[0], $l ^ $p[1]); } @@ -478,6 +474,8 @@ class Blowfish extends Base $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key); } + $safeint = $this->safe_intval_inline(); + if (!isset($lambda_functions[$code_hash])) { switch (true) { case $gen_hi_opt_code: @@ -513,16 +511,14 @@ class Blowfish extends Base for ($i = 0; $i < 16; $i+= 2) { $encrypt_block.= ' $l^= ' . $p[$i] . '; - $r^= ($sb_0[$l >> 24 & 0xff] + - $sb_1[$l >> 16 & 0xff] ^ + $r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]') . ' ^ $sb_2[$l >> 8 & 0xff]) + - $sb_3[$l & 0xff]; + $sb_3[$l & 0xff]') . '; $r^= ' . $p[$i + 1] . '; - $l^= ($sb_0[$r >> 24 & 0xff] + - $sb_1[$r >> 16 & 0xff] ^ + $l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]') . ' ^ $sb_2[$r >> 8 & 0xff]) + - $sb_3[$r & 0xff]; + $sb_3[$r & 0xff]') . '; '; } $encrypt_block.= ' @@ -542,16 +538,14 @@ class Blowfish extends Base for ($i = 17; $i > 2; $i-= 2) { $decrypt_block.= ' $l^= ' . $p[$i] . '; - $r^= ($sb_0[$l >> 24 & 0xff] + - $sb_1[$l >> 16 & 0xff] ^ + $r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]') . ' ^ $sb_2[$l >> 8 & 0xff]) + - $sb_3[$l & 0xff]; + $sb_3[$l & 0xff]') . '; $r^= ' . $p[$i - 1] . '; - $l^= ($sb_0[$r >> 24 & 0xff] + - $sb_1[$r >> 16 & 0xff] ^ + $l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]') . ' ^ $sb_2[$r >> 8 & 0xff]) + - $sb_3[$r & 0xff]; + $sb_3[$r & 0xff]') . '; '; } diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php similarity index 99% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php index 07665a165..6ae01329e 100644 --- a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php +++ b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php @@ -802,7 +802,12 @@ class Hash $result+= $argument < 0 ? ($argument & 0x7FFFFFFF) + 0x80000000 : $argument; } - return fmod($result, $mod); + if ((php_uname('m') & "\xDF\xDF\xDF") != 'ARM') { + return fmod($result, $mod); + } + + return (fmod($result, 0x80000000) & 0x7FFFFFFF) | + ((fmod(floor($result / 0x80000000), 2) & 1) << 31); } /** diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php similarity index 99% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php index e9cfa3f83..b2b9d48ea 100644 --- a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php +++ b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php @@ -296,7 +296,7 @@ class RC2 extends Base function setKeyLength($length) { if ($length < 8) { - $this->default_key_length = 8; + $this->default_key_length = 1; } elseif ($length > 1024) { $this->default_key_length = 128; } else { diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php similarity index 99% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php index 6b29e7518..01e34cc36 100644 --- a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php +++ b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php @@ -45,6 +45,10 @@ class Random */ static function string($length) { + if (!$length) { + return ''; + } + if (version_compare(PHP_VERSION, '7.0.0', '>=')) { try { return \random_bytes($length); diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php similarity index 93% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php index 3dd4ea1d3..70980a2ff 100644 --- a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php +++ b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php @@ -432,8 +432,10 @@ class Twofish extends Base $m2[$q1[$q0[$j] ^ $key[15]] ^ $key[7]] ^ $m3[$q1[$q1[$j] ^ $key[16]] ^ $key[8]]; $B = ($B << 8) | ($B >> 24 & 0xff); - $K[] = $A+= $B; - $K[] = (($A+= $B) << 9 | $A >> 23 & 0x1ff); + $A = $this->safe_intval($A + $B); + $K[] = $A; + $A = $this->safe_intval($A + $B); + $K[] = ($A << 9 | $A >> 23 & 0x1ff); } for ($i = 0; $i < 256; ++$i) { $S0[$i] = $m0[$q0[$q0[$i] ^ $s4] ^ $s0]; @@ -456,8 +458,10 @@ class Twofish extends Base $m2[$q1[$q0[$q0[$j] ^ $key[23]] ^ $key[15]] ^ $key[7]] ^ $m3[$q1[$q1[$q0[$j] ^ $key[24]] ^ $key[16]] ^ $key[8]]; $B = ($B << 8) | ($B >> 24 & 0xff); - $K[] = $A+= $B; - $K[] = (($A+= $B) << 9 | $A >> 23 & 0x1ff); + $A = $this->safe_intval($A + $B); + $K[] = $A; + $A = $this->safe_intval($A + $B); + $K[] = ($A << 9 | $A >> 23 & 0x1ff); } for ($i = 0; $i < 256; ++$i) { $S0[$i] = $m0[$q0[$q0[$q1[$i] ^ $s8] ^ $s4] ^ $s0]; @@ -481,8 +485,10 @@ class Twofish extends Base $m2[$q1[$q0[$q0[$q0[$j] ^ $key[31]] ^ $key[23]] ^ $key[15]] ^ $key[7]] ^ $m3[$q1[$q1[$q0[$q1[$j] ^ $key[32]] ^ $key[24]] ^ $key[16]] ^ $key[8]]; $B = ($B << 8) | ($B >> 24 & 0xff); - $K[] = $A+= $B; - $K[] = (($A+= $B) << 9 | $A >> 23 & 0x1ff); + $A = $this->safe_intval($A + $B); + $K[] = $A; + $A = $this->safe_intval($A + $B); + $K[] = ($A << 9 | $A >> 23 & 0x1ff); } for ($i = 0; $i < 256; ++$i) { $S0[$i] = $m0[$q0[$q0[$q1[$q1[$i] ^ $sc] ^ $s8] ^ $s4] ^ $s0]; @@ -578,9 +584,9 @@ class Twofish extends Base $S1[ $R1 & 0xff] ^ $S2[($R1 >> 8) & 0xff] ^ $S3[($R1 >> 16) & 0xff]; - $R2^= $t0 + $t1 + $K[++$ki]; + $R2^= $this->safe_intval($t0 + $t1 + $K[++$ki]); $R2 = ($R2 >> 1 & 0x7fffffff) | ($R2 << 31); - $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ ($t0 + ($t1 << 1) + $K[++$ki]); + $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ $this->safe_intval($t0 + ($t1 << 1) + $K[++$ki]); $t0 = $S0[ $R2 & 0xff] ^ $S1[($R2 >> 8) & 0xff] ^ @@ -590,9 +596,9 @@ class Twofish extends Base $S1[ $R3 & 0xff] ^ $S2[($R3 >> 8) & 0xff] ^ $S3[($R3 >> 16) & 0xff]; - $R0^= ($t0 + $t1 + $K[++$ki]); + $R0^= $this->safe_intval($t0 + $t1 + $K[++$ki]); $R0 = ($R0 >> 1 & 0x7fffffff) | ($R0 << 31); - $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ ($t0 + ($t1 << 1) + $K[++$ki]); + $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ $this->safe_intval($t0 + ($t1 << 1) + $K[++$ki]); } // @codingStandardsIgnoreStart @@ -634,9 +640,9 @@ class Twofish extends Base $S1[$R1 & 0xff] ^ $S2[$R1 >> 8 & 0xff] ^ $S3[$R1 >> 16 & 0xff]; - $R3^= $t0 + ($t1 << 1) + $K[--$ki]; + $R3^= $this->safe_intval($t0 + ($t1 << 1) + $K[--$ki]); $R3 = $R3 >> 1 & 0x7fffffff | $R3 << 31; - $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ ($t0 + $t1 + $K[--$ki]); + $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ $this->safe_intval($t0 + $t1 + $K[--$ki]); $t0 = $S0[$R2 & 0xff] ^ $S1[$R2 >> 8 & 0xff] ^ @@ -646,9 +652,9 @@ class Twofish extends Base $S1[$R3 & 0xff] ^ $S2[$R3 >> 8 & 0xff] ^ $S3[$R3 >> 16 & 0xff]; - $R1^= $t0 + ($t1 << 1) + $K[--$ki]; + $R1^= $this->safe_intval($t0 + ($t1 << 1) + $K[--$ki]); $R1 = $R1 >> 1 & 0x7fffffff | $R1 << 31; - $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ ($t0 + $t1 + $K[--$ki]); + $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ $this->safe_intval($t0 + $t1 + $K[--$ki]); } // @codingStandardsIgnoreStart @@ -679,6 +685,8 @@ class Twofish extends Base $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key); } + $safeint = $this->safe_intval_inline(); + if (!isset($lambda_functions[$code_hash])) { switch (true) { case $gen_hi_opt_code: @@ -727,9 +735,9 @@ class Twofish extends Base $S1[ $R1 & 0xff] ^ $S2[($R1 >> 8) & 0xff] ^ $S3[($R1 >> 16) & 0xff]; - $R2^= ($t0 + $t1 + '.$K[++$ki].'); + $R2^= ' . sprintf($safeint, '$t0 + $t1 + ' . $K[++$ki]) . '; $R2 = ($R2 >> 1 & 0x7fffffff) | ($R2 << 31); - $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ ($t0 + ($t1 << 1) + '.$K[++$ki].'); + $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ ' . sprintf($safeint, '($t0 + ($t1 << 1) + ' . $K[++$ki] . ')') . '; $t0 = $S0[ $R2 & 0xff] ^ $S1[($R2 >> 8) & 0xff] ^ @@ -739,16 +747,16 @@ class Twofish extends Base $S1[ $R3 & 0xff] ^ $S2[($R3 >> 8) & 0xff] ^ $S3[($R3 >> 16) & 0xff]; - $R0^= ($t0 + $t1 + '.$K[++$ki].'); + $R0^= ' . sprintf($safeint, '($t0 + $t1 + ' . $K[++$ki] . ')') . '; $R0 = ($R0 >> 1 & 0x7fffffff) | ($R0 << 31); - $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ ($t0 + ($t1 << 1) + '.$K[++$ki].'); + $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ ' . sprintf($safeint, '($t0 + ($t1 << 1) + ' . $K[++$ki] . ')') . '; '; } $encrypt_block.= ' - $in = pack("V4", '.$K[4].' ^ $R2, - '.$K[5].' ^ $R3, - '.$K[6].' ^ $R0, - '.$K[7].' ^ $R1); + $in = pack("V4", ' . $K[4] . ' ^ $R2, + ' . $K[5] . ' ^ $R3, + ' . $K[6] . ' ^ $R0, + ' . $K[7] . ' ^ $R1); '; // Generating decrypt code: @@ -769,9 +777,9 @@ class Twofish extends Base $S1[$R1 & 0xff] ^ $S2[$R1 >> 8 & 0xff] ^ $S3[$R1 >> 16 & 0xff]; - $R3^= $t0 + ($t1 << 1) + '.$K[--$ki].'; + $R3^= ' . sprintf($safeint, '$t0 + ($t1 << 1) + ' . $K[--$ki]) . '; $R3 = $R3 >> 1 & 0x7fffffff | $R3 << 31; - $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ ($t0 + $t1 + '.$K[--$ki].'); + $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ ' . sprintf($safeint, '($t0 + $t1 + '.$K[--$ki] . ')') . '; $t0 = $S0[$R2 & 0xff] ^ $S1[$R2 >> 8 & 0xff] ^ @@ -781,16 +789,16 @@ class Twofish extends Base $S1[$R3 & 0xff] ^ $S2[$R3 >> 8 & 0xff] ^ $S3[$R3 >> 16 & 0xff]; - $R1^= $t0 + ($t1 << 1) + '.$K[--$ki].'; + $R1^= ' . sprintf($safeint, '$t0 + ($t1 << 1) + ' . $K[--$ki]) . '; $R1 = $R1 >> 1 & 0x7fffffff | $R1 << 31; - $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ ($t0 + $t1 + '.$K[--$ki].'); + $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ ' . sprintf($safeint, '($t0 + $t1 + '.$K[--$ki] . ')') . '; '; } $decrypt_block.= ' - $in = pack("V4", '.$K[0].' ^ $R2, - '.$K[1].' ^ $R3, - '.$K[2].' ^ $R0, - '.$K[3].' ^ $R1); + $in = pack("V4", ' . $K[0] . ' ^ $R2, + ' . $K[1] . ' ^ $R3, + ' . $K[2] . ' ^ $R0, + ' . $K[3] . ' ^ $R1); '; $lambda_functions[$code_hash] = $this->_createInlineCryptFunction( diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/File/X509.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/File/X509.php similarity index 99% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/File/X509.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/File/X509.php index c1d591adf..67317db23 100644 --- a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/File/X509.php +++ b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/File/X509.php @@ -2141,7 +2141,8 @@ class X509 $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier'); switch (true) { case !is_array($authorityKey): - case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: + case !$subjectKeyID: + case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: $signingCert = $this->currentCert; // working cert } } @@ -2158,7 +2159,11 @@ class X509 $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca); switch (true) { case !is_array($authorityKey): - case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: + case !$subjectKeyID: + case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: + if (is_array($authorityKey) && isset($authorityKey['authorityCertSerialNumber']) && !$authorityKey['authorityCertSerialNumber']->equals($ca['tbsCertificate']['serialNumber'])) { + break 2; // serial mismatch - check other ca + } $signingCert = $ca; // working cert break 3; } @@ -2204,7 +2209,11 @@ class X509 $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca); switch (true) { case !is_array($authorityKey): - case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: + case !$subjectKeyID: + case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: + if (is_array($authorityKey) && isset($authorityKey['authorityCertSerialNumber']) && !$authorityKey['authorityCertSerialNumber']->equals($ca['tbsCertificate']['serialNumber'])) { + break 2; // serial mismatch - check other ca + } $signingCert = $ca; // working cert break 3; } @@ -2476,6 +2485,10 @@ class X509 } $dn = array_values($dn); + // fix for https://bugs.php.net/75433 affecting PHP 7.2 + if (!isset($dn[0])) { + $dn = array_splice($dn, 0, 0); + } } /** @@ -2719,7 +2732,9 @@ class X509 $value = array_pop($value); // Always strip data type. } } elseif (is_object($value) && $value instanceof Element) { - $callback = create_function('$x', 'return "\x" . bin2hex($x[0]);'); + $callback = function ($x) { + return "\x" . bin2hex($x[0]); + }; $value = strtoupper(preg_replace_callback('#[^\x20-\x7E]#', $callback, $value->element)); } $output.= $desc . '=' . $value; @@ -4079,6 +4094,10 @@ class X509 } $extensions = array_values($extensions); + // fix for https://bugs.php.net/75433 affecting PHP 7.2 + if (!isset($extensions[0])) { + $extensions = array_splice($extensions, 0, 0); + } return $result; } diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php similarity index 99% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php index b6f2aaf64..2aa39a50a 100644 --- a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php +++ b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php @@ -2868,8 +2868,7 @@ class BigInteger switch (MATH_BIGINTEGER_MODE) { case self::MODE_GMP: $temp = new static(); - $temp->value = gmp_xor($this->value, $x->value); - + $temp->value = gmp_xor(gmp_abs($this->value), gmp_abs($x->value)); return $this->_normalize($temp); case self::MODE_BCMATH: $left = $this->toBytes(); @@ -2885,6 +2884,7 @@ class BigInteger $length = max(count($this->value), count($x->value)); $result = $this->copy(); + $result->is_negative = false; $result->value = array_pad($result->value, $length, 0); $x->value = array_pad($x->value, $length, 0); diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php similarity index 99% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php index eeaceca2c..8825f30cf 100644 --- a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php +++ b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php @@ -349,7 +349,7 @@ class SFTP extends SSH2 // yields inconsistent behavior depending on how php is compiled. so we left shift -1 (which, in // two's compliment, consists of all 1 bits) by 31. on 64-bit systems this'll yield 0xFFFFFFFF80000000. // that's not a problem, however, and 'anded' and a 32-bit number, as all the leading 1 bits are ignored. - -1 << 31 => 'NET_SFTP_ATTR_EXTENDED' + (-1 << 31) & 0xFFFFFFFF => 'NET_SFTP_ATTR_EXTENDED' ); // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3 // the flag definitions change somewhat in SFTPv5+. if SFTPv5+ support is added to this library, maybe name @@ -1147,7 +1147,7 @@ class SFTP extends SSH2 $temp[$dir] = array(); } if ($i === $max) { - if (is_object($temp[$dir])) { + if (is_object($temp[$dir]) && is_object($value)) { if (!isset($value->stat) && isset($temp[$dir]->stat)) { $value->stat = $temp[$dir]->stat; } diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php similarity index 99% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php index 08d726ca8..d2c4425de 100644 --- a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php +++ b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php @@ -179,7 +179,7 @@ class Stream if ($host[0] == '$') { $host = substr($host, 1); - global $$host; + global ${$host}; if (($$host instanceof SFTP) === false) { return false; } diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Net/SSH1.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Net/SSH1.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Net/SSH1.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Net/SSH1.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php similarity index 97% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php index 60e4408c4..cdb7cb39e 100644 --- a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php +++ b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php @@ -3623,31 +3623,80 @@ class SSH2 $this->window_size_server_to_client[$channel]+= $this->window_size; } - if ($type == NET_SSH2_MSG_CHANNEL_EXTENDED_DATA) { - /* - if ($client_channel == NET_SSH2_CHANNEL_EXEC) { - $this->_send_channel_packet($client_channel, chr(0)); - } - */ - // currently, there's only one possible value for $data_type_code: NET_SSH2_EXTENDED_DATA_STDERR - if (strlen($response) < 8) { - return false; - } - extract(unpack('Ndata_type_code/Nlength', $this->_string_shift($response, 8))); - $data = $this->_string_shift($response, $length); - $this->stdErrorLog.= $data; - if ($skip_extended || $this->quiet_mode) { - continue; - } - if ($client_channel == $channel && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA) { - return $data; - } - if (!isset($this->channel_buffers[$channel])) { - $this->channel_buffers[$channel] = array(); - } - $this->channel_buffers[$channel][] = $data; + switch ($type) { + case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA: + /* + if ($client_channel == NET_SSH2_CHANNEL_EXEC) { + $this->_send_channel_packet($client_channel, chr(0)); + } + */ + // currently, there's only one possible value for $data_type_code: NET_SSH2_EXTENDED_DATA_STDERR + if (strlen($response) < 8) { + return false; + } + extract(unpack('Ndata_type_code/Nlength', $this->_string_shift($response, 8))); + $data = $this->_string_shift($response, $length); + $this->stdErrorLog.= $data; + if ($skip_extended || $this->quiet_mode) { + continue 2; + } + if ($client_channel == $channel && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA) { + return $data; + } + if (!isset($this->channel_buffers[$channel])) { + $this->channel_buffers[$channel] = array(); + } + $this->channel_buffers[$channel][] = $data; - continue; + continue 2; + case NET_SSH2_MSG_CHANNEL_REQUEST: + if ($this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_CLOSE) { + continue 2; + } + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $value = $this->_string_shift($response, $length); + switch ($value) { + case 'exit-signal': + $this->_string_shift($response, 1); + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->errors[] = 'SSH_MSG_CHANNEL_REQUEST (exit-signal): ' . $this->_string_shift($response, $length); + $this->_string_shift($response, 1); + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + if ($length) { + $this->errors[count($this->errors)].= "\r\n" . $this->_string_shift($response, $length); + } + + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel])); + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel])); + + $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_EOF; + + continue 3; + case 'exit-status': + if (strlen($response) < 5) { + return false; + } + extract(unpack('Cfalse/Nexit_status', $this->_string_shift($response, 5))); + $this->exit_status = $exit_status; + + // "The client MAY ignore these messages." + // -- http://tools.ietf.org/html/rfc4254#section-6.10 + + continue 3; + default: + // "Some systems may not implement signals, in which case they SHOULD ignore this message." + // -- http://tools.ietf.org/html/rfc4254#section-6.9 + continue 3; + } } switch ($this->channel_status[$channel]) { @@ -3732,52 +3781,6 @@ class SSH2 } $this->channel_buffers[$channel][] = $data; break; - case NET_SSH2_MSG_CHANNEL_REQUEST: - if (strlen($response) < 4) { - return false; - } - extract(unpack('Nlength', $this->_string_shift($response, 4))); - $value = $this->_string_shift($response, $length); - switch ($value) { - case 'exit-signal': - $this->_string_shift($response, 1); - if (strlen($response) < 4) { - return false; - } - extract(unpack('Nlength', $this->_string_shift($response, 4))); - $this->errors[] = 'SSH_MSG_CHANNEL_REQUEST (exit-signal): ' . $this->_string_shift($response, $length); - $this->_string_shift($response, 1); - if (strlen($response) < 4) { - return false; - } - extract(unpack('Nlength', $this->_string_shift($response, 4))); - if ($length) { - $this->errors[count($this->errors)].= "\r\n" . $this->_string_shift($response, $length); - } - - $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel])); - $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel])); - - $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_EOF; - - break; - case 'exit-status': - if (strlen($response) < 5) { - return false; - } - extract(unpack('Cfalse/Nexit_status', $this->_string_shift($response, 5))); - $this->exit_status = $exit_status; - - // "The client MAY ignore these messages." - // -- http://tools.ietf.org/html/rfc4254#section-6.10 - - break; - default: - // "Some systems may not implement signals, in which case they SHOULD ignore this message." - // -- http://tools.ietf.org/html/rfc4254#section-6.9 - break; - } - break; case NET_SSH2_MSG_CHANNEL_CLOSE: $this->curTimeout = 0; diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/bootstrap.php b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/bootstrap.php similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/bootstrap.php rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/bootstrap.php diff --git a/admin/helpers/vendor/phpseclib/phpseclib/phpseclib/openssl.cnf b/libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/openssl.cnf similarity index 100% rename from admin/helpers/vendor/phpseclib/phpseclib/phpseclib/openssl.cnf rename to libraries/vdm_io/vendor/phpseclib/phpseclib/phpseclib/openssl.cnf diff --git a/admin/helpers/vendor/web.config b/libraries/vdm_io/vendor/web.config similarity index 100% rename from admin/helpers/vendor/web.config rename to libraries/vdm_io/vendor/web.config diff --git a/script.php b/script.php index 80a1309dc..8531b5a37 100644 --- a/script.php +++ b/script.php @@ -3194,6 +3194,10 @@ class com_componentbuilderInstallerScript */ function postflight($type, $parent) { + // get application + $app = JFactory::getApplication(); + // We check if we have dynamic folders to copy + $this->setDynamicF0ld3rs($app, $parent); // set the default component settings if ($type == 'install') { @@ -4735,11 +4739,54 @@ class com_componentbuilderInstallerScript } } } + } + // check if this install has the libraries in the helper folder, if so remove it + $vendorPath = JPATH_ADMINISTRATOR . '/components/com_componentbuilder/helpers/vendor'; + if (JFolder::exists($vendorPath)) + { + ComponentbuilderHelper::removeFolder($vendorPath); + // set a notice that this was done + $app->enqueueMessage('

Best Practice!
We have removed the composer-vendor folder from the /administrator/components/com_componentbuilder/helpers/ folder and placed it in the /libraries/vdm_io/ folder.

', 'Notice'); } echo '

Upgrade to Version 2.6.17 Was Successful! Let us know if anything is not working as expected.

'; } + } + + /** + * Method to set/copy dynamic folders into place (use with caution) + * + * @return void + */ + protected function setDynamicF0ld3rs($app, $parent) + { + // get the instalation path + $installer = $parent->getParent(); + $installPath = $installer->getPath('source'); + // get all the folders + $folders = JFolder::folders($installPath); + // check if we have folders we may want to copy + $doNotCopy = array('media','admin','site'); // Joomla already deals with these + if (count($folders) > 1) + { + foreach ($folders as $folder) + { + // Only copy if not a standard folders + if (!in_array($folder, $doNotCopy)) + { + // set the source path + $src = $installPath.'/'.$folder; + // set the destination path + $dest = JPATH_ROOT.'/'.$folder; + // now try to copy the folder + if (!JFolder::copy($src, $dest, '', true)) + { + $app->enqueueMessage('Could not copy '.$folder.' folder into place, please make sure destination is writable!', 'error'); + } + } + } + } } } diff --git a/site/controllers/api.php b/site/controllers/api.php index d06725dff..ba5e7ad4b 100644 --- a/site/controllers/api.php +++ b/site/controllers/api.php @@ -50,115 +50,6 @@ class ComponentbuilderControllerApi extends JControllerForm } - public function handshake() - { - // get input values - $input = JFactory::getApplication()->input; - // get Trust - $PUBLIC = $input->post->get('VDM_PUBLIC', null, 'STRING'); - $SECRET = $input->post->get('VDM_SECRET', null, 'STRING'); - $ID = $input->post->get('VDM_ID', null, 'STRING'); - // check if correct value is given - if (ComponentbuilderHelper::checkString($PUBLIC) && ComponentbuilderHelper::checkString($SECRET) && ComponentbuilderHelper::checkString($ID)) - { - // use the JCB open public protocol to open this - $opened = ComponentbuilderHelper::openPublicProtocol($SECRET, $ID, $PUBLIC); - // simple check to have a little more hoops - if (ComponentbuilderHelper::checkString($opened['public']) && ComponentbuilderHelper::checkString($opened['id']) - && strpos($opened['public'], '-----BEGIN PUBLIC KEY-----') !== false - && strpos($opened['public'], '-----END PUBLIC KEY-----') !== false - && strpos($opened['id'], 'VDM_') !== false - && strpos($opened['id'], '_SP') !== false) - && ComponentbuilderHelper::checkObject(ComponentbuilderHelper::crypt('RSA'))) - { -array('public' => ComponentbuilderHelper::getPublicKey($opened['id'], $opened['public']), 'id' => $opened['id']), $opened['public'] - ComponentbuilderHelper::crypt(); - // clear session - JFactory::getApplication()->getSession()->destroy(); - jexit(); - } - } - } - // die since have no trust - echo 12; - // clear session - JFactory::getApplication()->getSession()->destroy(); - jexit(); - } - - public function trust() - { - // get input values - $input = JFactory::getApplication()->input; - // get Trust - $TRUST = $input->post->get('VDM_TRUST', null, 'STRING'); - // check if correct value is given - if (ComponentbuilderHelper::checkString($TRUST)) - { - $key = ComponentbuilderHelper::salt(1, 2); - // get the trust - $trustArray = ComponentbuilderHelper::unlock($TRUST, $key, null); - // check the array - if (ComponentbuilderHelper::checkArray($trustArray) - && isset($trustArray['request_id']) && is_numeric($trustArray['request_id']) - && isset($trustArray['chain']) && ComponentbuilderHelper::checkArray($trustArray['chain']) - && isset($trustArray['url']) && ComponentbuilderHelper::checkString($trustArray['url']) - && isset($trustArray['path']) && ComponentbuilderHelper::checkString($trustArray['path']) - && isset($trustArray['email']) && ComponentbuilderHelper::checkString($trustArray['email']) - && isset($trustArray['name']) && ComponentbuilderHelper::checkString($trustArray['name']) - && isset($trustArray['method']) && is_numeric($trustArray['method']) && $trustArray['method'] > 0) - { - // send the request - echo ComponentbuilderHelper::requestTrust($trustArray); - // clear session - JFactory::getApplication()->getSession()->destroy(); - jexit(); - } - } - // die since have no trust - echo 12; - // clear session - JFactory::getApplication()->getSession()->destroy(); - jexit(); - } - - public function itrust() - { - // get input values - $input = JFactory::getApplication()->input; - // get allowed string - $allow = $input->get('allow', null, 'STRING'); - // check if correct value is given - if (ComponentbuilderHelper::checkString($allow)) - { - // get the request ID - $request_id = ComponentbuilderHelper::unlock($allow, null, 4); - // check the array - if (ComponentbuilderHelper::checkString($request_id) - && strpos($request_id, 'VDM_') !== false - && strpos($request_id, '_SP') !== false) - { - $request_id = str_replace(array('VDM_', '_SP'), '', $request_id); - $request_id = (string) 'VDM_' . preg_replace("/[^0-9]/", "", $request_id) . '_SP'; - if ($id = ComponentbuilderHelper::getVar('trust_site', $request_id, 'request_id', 'id')) - { - if ($message = ComponentbuilderHelper::confirmTrust($id)) - { - // push out the message - echo $message; - // clear session - JFactory::getApplication()->getSession()->destroy(); - jexit(); - } - } - } - } - // clear session - JFactory::getApplication()->getSession()->destroy(); - // die since have no trust - jexit('Restricted access'); - } - public function backup() { // get params first diff --git a/site/helpers/componentbuilder.php b/site/helpers/componentbuilder.php index 8d312f13c..df2b25263 100644 --- a/site/helpers/componentbuilder.php +++ b/site/helpers/componentbuilder.php @@ -1050,7 +1050,7 @@ abstract class ComponentbuilderHelper if (!self::$composer) { // load the autoloader - require_once JPATH_ADMINISTRATOR.'/components/com_componentbuilder/helpers/vendor/autoload.php'; + require_once JPATH_SITE.'/libraries/vdm_io/vendor/autoload.php'; // do not load again self::$composer = true; } @@ -1160,7 +1160,7 @@ abstract class ComponentbuilderHelper if (!class_exists('\phpseclib\Net\SFTP')) { // class not in place so send out error - JFactory::getApplication()->enqueueMessage(JText::_('COM_COMPONENTBUILDER_THE_BPHPSECLIBNETSFTPB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_ADMINHELPERSVENDOR_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO'), 'Error'); + JFactory::getApplication()->enqueueMessage(JText::_('COM_COMPONENTBUILDER_THE_BPHPSECLIBNETSFTPB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO'), 'Error'); return false; } // insure the port is set diff --git a/site/language/en-GB/en-GB.com_componentbuilder.ini b/site/language/en-GB/en-GB.com_componentbuilder.ini index 9a74d9c42..fe21b6200 100644 --- a/site/language/en-GB/en-GB.com_componentbuilder.ini +++ b/site/language/en-GB/en-GB.com_componentbuilder.ini @@ -38,7 +38,7 @@ COM_COMPONENTBUILDER_SINCE_THE_OWNER_DETAILS_ARE_DISPLAYED_DURING_BIMPORT_PROCES COM_COMPONENTBUILDER_SINCE_THE_OWNER_DETAILS_ARE_DISPLAYED_DURING_IMPORT_PROCESS_BEFORE_ADDING_THE_KEY_THIS_WAY_IF_THE_USERDEV_DOES_NOT_HAVE_THE_KEY_THEY_CAN_SEE_WHERE_TO_GET_IT="Since the owner details are displayed during import process before adding the key, this way if the user/dev does not have the key they can see where to get it." COM_COMPONENTBUILDER_THAT_MEANS_ANYONE_WHO_HAS_THIS_PACKAGE_CAN_INSTALL_IT_INTO_JCB_TO_ADD_AN_EXPORT_KEY_SIMPLY_OPEN_THE_COMPONENT_GO_TO_THE_TAB_CALLED_BSETTINGSB_BOTTOM_RIGHT_THERE_IS_A_FIELD_CALLED_BEXPORT_KEYB="That means anyone who has this package can install it into JCB. To add an export key simply open the component, go to the tab called settings, bottom right there is a field called Export Key." COM_COMPONENTBUILDER_THAT_MEANS_ANYONE_WHO_HAS_THIS_PACKAGE_CAN_INSTALL_IT_INTO_JCB_TO_ADD_AN_EXPORT_KEY_SIMPLY_OPEN_THE_COMPONENT_GO_TO_THE_TAB_CALLED_SETTINGS_BOTTOM_RIGHT_THERE_IS_A_FIELD_CALLED_EXPORT_KEY="That means anyone who has this package can install it into JCB. To add an export key simply open the component, go to the tab called settings, bottom right there is a field called Export Key." -COM_COMPONENTBUILDER_THE_BPHPSECLIBNETSFTPB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_ADMINHELPERSVENDOR_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The phpseclib\NET\SFTP library\class is not available! This library\class should have been added to your admin/helpers/vendor folder of JCB. Please contact your system administrator for more info" +COM_COMPONENTBUILDER_THE_BPHPSECLIBNETSFTPB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The phpseclib\NET\SFTP library\class is not available! This library\class should have been added to your libraries/vdm_io/vendor folder. Please contact your system administrator for more info" COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_PATH_ON_BSB_SERVER="The %s file could not be moved to %s path on %s server." COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_SERVER="The %s file could not be moved to %s server." COM_COMPONENTBUILDER_THE_FTP_CONNECTION_FOR_BSB_COULD_NOT_BE_MADE_PLEASE_CHECK_YOUR_SIGNATURE_DETAILS="The FTP connection for %s could not be made. Please check your signature details!" -- 2.40.1 From 272427489616a0692a097ba7cb95fbedeb9a67f7 Mon Sep 17 00:00:00 2001 From: Llewellyn van der Merwe Date: Wed, 28 Feb 2018 05:03:19 +0200 Subject: [PATCH 02/22] Added crypt method to helper class, and fixed the std folder array issue --- README.md | 2 +- admin/README.txt | 2 +- admin/helpers/compiler/b_Structure.php | 2 ++ admin/helpers/componentbuilder.php | 34 +++++++++++++++++++ .../en-GB/en-GB.com_componentbuilder.ini | 1 + site/helpers/componentbuilder.php | 34 +++++++++++++++++++ .../en-GB/en-GB.com_componentbuilder.ini | 1 + 7 files changed, 74 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ea8c3cfa5..e5d9dd09b 100644 --- a/README.md +++ b/README.md @@ -130,7 +130,7 @@ Component Builder is mapped as a component in itself on my local development env + *Version*: 2.6.17 + *Copyright*: Copyright (C) 2015. All Rights Reserved + *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html -+ *Line count*: **183036** ++ *Line count*: **183106** + *Field count*: **1641** + *File count*: **1169** + *Folder count*: **189** diff --git a/admin/README.txt b/admin/README.txt index ea8c3cfa5..e5d9dd09b 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -130,7 +130,7 @@ Component Builder is mapped as a component in itself on my local development env + *Version*: 2.6.17 + *Copyright*: Copyright (C) 2015. All Rights Reserved + *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html -+ *Line count*: **183036** ++ *Line count*: **183106** + *Field count*: **1641** + *File count*: **1169** + *Folder count*: **189** diff --git a/admin/helpers/compiler/b_Structure.php b/admin/helpers/compiler/b_Structure.php index dfaf18d1c..53a8a6f9c 100644 --- a/admin/helpers/compiler/b_Structure.php +++ b/admin/helpers/compiler/b_Structure.php @@ -739,6 +739,8 @@ class Structure extends Get { $README = true; } + // set the standard folders + $stdFolders = array('site','admin','media'); // start moving foreach ($this->joomlaVersionData->move->static as $ftem => $details) { diff --git a/admin/helpers/componentbuilder.php b/admin/helpers/componentbuilder.php index 5c1b388fc..4eb896c3b 100644 --- a/admin/helpers/componentbuilder.php +++ b/admin/helpers/componentbuilder.php @@ -2409,6 +2409,40 @@ abstract class ComponentbuilderHelper JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_THE_SERVER_DETAILS_FOR_BID_SB_COULD_NOT_BE_RETRIEVED', $serverID), 'Error'); return false; } + + /** + * the Crypt objects + **/ + protected static $CRYPT = array(); + + /** + * get the Crypt object + * + * @return object on success with Crypt power + **/ + public static function crypt($TYPE) + { + // check if it was already set + if (isset(self::$CRYPT[$TYPE]) && self::checkObject(self::$CRYPT[$TYPE])) + { + return self::$CRYPT[$TYPE]; + } + // make sure we have the composer classes loaded + self::composerAutoload(); + // build class name + $CLASS = '\phpseclib\Crypt\\'.$TYPE; + // make sure we have the phpseclib classes + if (!class_exists($CLASS)) + { + // class not in place so send out error + JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_THE_BSB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO', $CLASS), 'Error'); + return false; + } + // set the + self::$CRYPT[$TYPE] = new $CLASS(); + // return the object + return self::$CRYPT[$TYPE]; + } /** * Load the Component xml manifest. **/ diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index d3fbfbeba..f7976ce32 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -6163,6 +6163,7 @@ COM_COMPONENTBUILDER_THERE_WAS_A_PROBLEM_BNO_VIEW_OR_ID_FOUND_IN_SESSION_OR_VIEW COM_COMPONENTBUILDER_THE_BPHPSECLIBNETSFTPB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The phpseclib\NET\SFTP library\class is not available! This library\class should have been added to your libraries/vdm_io/vendor folder. Please contact your system administrator for more info" COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_PATH_ON_BSB_SERVER="The %s file could not be moved to %s path on %s server." COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_SERVER="The %s file could not be moved to %s server." +COM_COMPONENTBUILDER_THE_BSB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The %s library\class is not available! This library\class should have been added to your libraries/vdm_io/vendor folder of JCB. Please contact your system administrator for more info!" COM_COMPONENTBUILDER_THE_BSB_LIBRARY_CAN_NOT_BE_DELETED_OR_THINGS_WILL_BREAK="The %s library can not be deleted, or things will break." COM_COMPONENTBUILDER_THE_COMPONENT_ADMIN_VIEWS="The component admin views" COM_COMPONENTBUILDER_THE_COMPONENT_CONFIG="The component config" diff --git a/site/helpers/componentbuilder.php b/site/helpers/componentbuilder.php index df2b25263..f0e036c3f 100644 --- a/site/helpers/componentbuilder.php +++ b/site/helpers/componentbuilder.php @@ -1475,6 +1475,40 @@ abstract class ComponentbuilderHelper JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_THE_SERVER_DETAILS_FOR_BID_SB_COULD_NOT_BE_RETRIEVED', $serverID), 'Error'); return false; } + + /** + * the Crypt objects + **/ + protected static $CRYPT = array(); + + /** + * get the Crypt object + * + * @return object on success with Crypt power + **/ + public static function crypt($TYPE) + { + // check if it was already set + if (isset(self::$CRYPT[$TYPE]) && self::checkObject(self::$CRYPT[$TYPE])) + { + return self::$CRYPT[$TYPE]; + } + // make sure we have the composer classes loaded + self::composerAutoload(); + // build class name + $CLASS = '\phpseclib\Crypt\\'.$TYPE; + // make sure we have the phpseclib classes + if (!class_exists($CLASS)) + { + // class not in place so send out error + JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_THE_BSB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO', $CLASS), 'Error'); + return false; + } + // set the + self::$CRYPT[$TYPE] = new $CLASS(); + // return the object + return self::$CRYPT[$TYPE]; + } public static function jsonToString($value, $sperator = ", ", $table = null) { diff --git a/site/language/en-GB/en-GB.com_componentbuilder.ini b/site/language/en-GB/en-GB.com_componentbuilder.ini index fe21b6200..867b8b961 100644 --- a/site/language/en-GB/en-GB.com_componentbuilder.ini +++ b/site/language/en-GB/en-GB.com_componentbuilder.ini @@ -41,6 +41,7 @@ COM_COMPONENTBUILDER_THAT_MEANS_ANYONE_WHO_HAS_THIS_PACKAGE_CAN_INSTALL_IT_INTO_ COM_COMPONENTBUILDER_THE_BPHPSECLIBNETSFTPB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The phpseclib\NET\SFTP library\class is not available! This library\class should have been added to your libraries/vdm_io/vendor folder. Please contact your system administrator for more info" COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_PATH_ON_BSB_SERVER="The %s file could not be moved to %s path on %s server." COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_SERVER="The %s file could not be moved to %s server." +COM_COMPONENTBUILDER_THE_BSB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The %s library\class is not available! This library\class should have been added to your libraries/vdm_io/vendor folder of JCB. Please contact your system administrator for more info!" COM_COMPONENTBUILDER_THE_FTP_CONNECTION_FOR_BSB_COULD_NOT_BE_MADE_PLEASE_CHECK_YOUR_SIGNATURE_DETAILS="The FTP connection for %s could not be made. Please check your signature details!" COM_COMPONENTBUILDER_THE_FTP_SIGNATURE_FOR_BSB_WAS_NOT_WELL_FORMED_PLEASE_CHECK_YOUR_SIGNATURE_DETAILS="The FTP signature for %s was not well formed, please check your signature details!" COM_COMPONENTBUILDER_THE_LOGIN_TO_BSB_HAS_FAILED_PLEASE_CHECK_THAT_YOUR_DETAILS_ARE_CORRECT="The login to %s has failed, please check that your details are correct!" -- 2.40.1 From 593a4c7c896443a87a16d4e97e5d89e06715b8d7 Mon Sep 17 00:00:00 2001 From: Llewellyn van der Merwe Date: Thu, 1 Mar 2018 16:49:04 +0200 Subject: [PATCH 03/22] Fixed gh-237 passing th 4th value as zero to insure the onContentPrepare method signature match. --- README.md | 2 +- admin/README.txt | 2 +- admin/helpers/compiler/e_Interpretation.php | 2 +- admin/helpers/componentbuilder.php | 2 +- admin/language/en-GB/en-GB.com_componentbuilder.ini | 2 +- admin/models/compiler.php | 2 +- componentbuilder.xml | 2 +- site/helpers/componentbuilder.php | 2 +- site/language/en-GB/en-GB.com_componentbuilder.ini | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index e5d9dd09b..a4db0ca5e 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,7 @@ Component Builder is mapped as a component in itself on my local development env + *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) + *Name*: [Component Builder](http://joomlacomponentbuilder.com) + *First Build*: 30th April, 2015 -+ *Last Build*: 28th February, 2018 ++ *Last Build*: 1st March, 2018 + *Version*: 2.6.17 + *Copyright*: Copyright (C) 2015. All Rights Reserved + *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html diff --git a/admin/README.txt b/admin/README.txt index e5d9dd09b..a4db0ca5e 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -126,7 +126,7 @@ Component Builder is mapped as a component in itself on my local development env + *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) + *Name*: [Component Builder](http://joomlacomponentbuilder.com) + *First Build*: 30th April, 2015 -+ *Last Build*: 28th February, 2018 ++ *Last Build*: 1st March, 2018 + *Version*: 2.6.17 + *Copyright*: Copyright (C) 2015. All Rights Reserved + *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html diff --git a/admin/helpers/compiler/e_Interpretation.php b/admin/helpers/compiler/e_Interpretation.php index ae09d5844..77fe0eb84 100644 --- a/admin/helpers/compiler/e_Interpretation.php +++ b/admin/helpers/compiler/e_Interpretation.php @@ -1671,7 +1671,7 @@ class Interpretation extends Fields $fieldPrepare .= PHP_EOL . "\t" . $tab . "\t\$_" . $field . " = new stdClass();"; $fieldPrepare .= PHP_EOL . "\t" . $tab . "\t\$_" . $field . '->text =& ' . $string . '->' . $field . '; //' . $this->setLine(__LINE__) . ' value must be in text'; $fieldPrepare .= PHP_EOL . "\t" . $tab . "\t//" . $this->setLine(__LINE__) . " Since all values are now in text (Joomla Limitation), we also add the field name (" . $field . ") to context"; - $fieldPrepare .= PHP_EOL . "\t" . $tab . "\t" . '$this->_dispatcher->trigger("onContentPrepare",array(\'' . $context . '.' . $field . '\',&$_' . $field . ',&$this->params));'; // we can improve the params later (TODO) + $fieldPrepare .= PHP_EOL . "\t" . $tab . "\t" . '$this->_dispatcher->trigger("onContentPrepare", array(\'' . $context . '.' . $field . '\', &$_' . $field . ', &$this->params, 0));'; // we can improve the params later (TODO) } } // load dispatcher diff --git a/admin/helpers/componentbuilder.php b/admin/helpers/componentbuilder.php index 4eb896c3b..d883f35cb 100644 --- a/admin/helpers/componentbuilder.php +++ b/admin/helpers/componentbuilder.php @@ -2435,7 +2435,7 @@ abstract class ComponentbuilderHelper if (!class_exists($CLASS)) { // class not in place so send out error - JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_THE_BSB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO', $CLASS), 'Error'); + JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_THE_BSB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO', $CLASS), 'Error'); return false; } // set the diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index f7976ce32..91e632bfd 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -6163,7 +6163,7 @@ COM_COMPONENTBUILDER_THERE_WAS_A_PROBLEM_BNO_VIEW_OR_ID_FOUND_IN_SESSION_OR_VIEW COM_COMPONENTBUILDER_THE_BPHPSECLIBNETSFTPB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The phpseclib\NET\SFTP library\class is not available! This library\class should have been added to your libraries/vdm_io/vendor folder. Please contact your system administrator for more info" COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_PATH_ON_BSB_SERVER="The %s file could not be moved to %s path on %s server." COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_SERVER="The %s file could not be moved to %s server." -COM_COMPONENTBUILDER_THE_BSB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The %s library\class is not available! This library\class should have been added to your libraries/vdm_io/vendor folder of JCB. Please contact your system administrator for more info!" +COM_COMPONENTBUILDER_THE_BSB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The %s library\class is not available! This library\class should have been added to your libraries/vdm_io/vendor folder. Please contact your system administrator for more info!" COM_COMPONENTBUILDER_THE_BSB_LIBRARY_CAN_NOT_BE_DELETED_OR_THINGS_WILL_BREAK="The %s library can not be deleted, or things will break." COM_COMPONENTBUILDER_THE_COMPONENT_ADMIN_VIEWS="The component admin views" COM_COMPONENTBUILDER_THE_COMPONENT_CONFIG="The component config" diff --git a/admin/models/compiler.php b/admin/models/compiler.php index f430b2cd2..dc2228a78 100644 --- a/admin/models/compiler.php +++ b/admin/models/compiler.php @@ -124,7 +124,7 @@ class ComponentbuilderModelCompiler extends JModelList $_copyright = new stdClass(); $_copyright->text =& $item->copyright; // value must be in text // Since all values are now in text (Joomla Limitation), we also add the field name (copyright) to context - $this->_dispatcher->trigger("onContentPrepare",array('com_componentbuilder.compiler.copyright',&$_copyright,&$this->params)); + $this->_dispatcher->trigger("onContentPrepare", array('com_componentbuilder.compiler.copyright', &$_copyright, &$this->params, 0)); // Checking if copyright has uikit components that must be loaded. $this->uikitComp = ComponentbuilderHelper::getUikitComp($item->copyright,$this->uikitComp); } diff --git a/componentbuilder.xml b/componentbuilder.xml index 4ca15f511..644a1046d 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,7 +1,7 @@ COM_COMPONENTBUILDER - 28th February, 2018 + 1st March, 2018 Llewellyn van der Merwe llewellyn@joomlacomponentbuilder.com http://joomlacomponentbuilder.com diff --git a/site/helpers/componentbuilder.php b/site/helpers/componentbuilder.php index f0e036c3f..e9c0a3937 100644 --- a/site/helpers/componentbuilder.php +++ b/site/helpers/componentbuilder.php @@ -1501,7 +1501,7 @@ abstract class ComponentbuilderHelper if (!class_exists($CLASS)) { // class not in place so send out error - JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_THE_BSB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO', $CLASS), 'Error'); + JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_THE_BSB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO', $CLASS), 'Error'); return false; } // set the diff --git a/site/language/en-GB/en-GB.com_componentbuilder.ini b/site/language/en-GB/en-GB.com_componentbuilder.ini index 867b8b961..9952a6abf 100644 --- a/site/language/en-GB/en-GB.com_componentbuilder.ini +++ b/site/language/en-GB/en-GB.com_componentbuilder.ini @@ -41,7 +41,7 @@ COM_COMPONENTBUILDER_THAT_MEANS_ANYONE_WHO_HAS_THIS_PACKAGE_CAN_INSTALL_IT_INTO_ COM_COMPONENTBUILDER_THE_BPHPSECLIBNETSFTPB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The phpseclib\NET\SFTP library\class is not available! This library\class should have been added to your libraries/vdm_io/vendor folder. Please contact your system administrator for more info" COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_PATH_ON_BSB_SERVER="The %s file could not be moved to %s path on %s server." COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_SERVER="The %s file could not be moved to %s server." -COM_COMPONENTBUILDER_THE_BSB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The %s library\class is not available! This library\class should have been added to your libraries/vdm_io/vendor folder of JCB. Please contact your system administrator for more info!" +COM_COMPONENTBUILDER_THE_BSB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHOULD_HAVE_BEEN_ADDED_TO_YOUR_BLIBRARIESVDM_IOVENDORB_FOLDER_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The %s library\class is not available! This library\class should have been added to your libraries/vdm_io/vendor folder. Please contact your system administrator for more info!" COM_COMPONENTBUILDER_THE_FTP_CONNECTION_FOR_BSB_COULD_NOT_BE_MADE_PLEASE_CHECK_YOUR_SIGNATURE_DETAILS="The FTP connection for %s could not be made. Please check your signature details!" COM_COMPONENTBUILDER_THE_FTP_SIGNATURE_FOR_BSB_WAS_NOT_WELL_FORMED_PLEASE_CHECK_YOUR_SIGNATURE_DETAILS="The FTP signature for %s was not well formed, please check your signature details!" COM_COMPONENTBUILDER_THE_LOGIN_TO_BSB_HAS_FAILED_PLEASE_CHECK_THAT_YOUR_DETAILS_ARE_CORRECT="The login to %s has failed, please check that your details are correct!" -- 2.40.1 From 836df43fcc0f2abce43f61b4875697c5909dabb8 Mon Sep 17 00:00:00 2001 From: Llewellyn van der Merwe Date: Fri, 2 Mar 2018 03:37:04 +0200 Subject: [PATCH 04/22] Improved the JCB package export/import feature to insure that the new full paths are also moved, also made a few bug fixes in this area to better deal with divergent data id managment --- README.md | 4 +- admin/README.txt | 4 +- admin/helpers/compiler/b_Structure.php | 52 +--- admin/helpers/componentbuilder.php | 51 ++++ .../en-GB/en-GB.com_componentbuilder.ini | 2 + admin/models/import_joomla_components.php | 229 ++++++++++++++---- admin/models/joomla_components.php | 144 ++++++++--- .../import_joomla_components/view.html.php | 2 +- componentbuilder.xml | 2 +- site/helpers/componentbuilder.php | 51 ++++ 10 files changed, 403 insertions(+), 138 deletions(-) diff --git a/README.md b/README.md index a4db0ca5e..292f53f63 100644 --- a/README.md +++ b/README.md @@ -126,11 +126,11 @@ Component Builder is mapped as a component in itself on my local development env + *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) + *Name*: [Component Builder](http://joomlacomponentbuilder.com) + *First Build*: 30th April, 2015 -+ *Last Build*: 1st March, 2018 ++ *Last Build*: 2nd March, 2018 + *Version*: 2.6.17 + *Copyright*: Copyright (C) 2015. All Rights Reserved + *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html -+ *Line count*: **183106** ++ *Line count*: **183421** + *Field count*: **1641** + *File count*: **1169** + *Folder count*: **189** diff --git a/admin/README.txt b/admin/README.txt index a4db0ca5e..292f53f63 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -126,11 +126,11 @@ Component Builder is mapped as a component in itself on my local development env + *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) + *Name*: [Component Builder](http://joomlacomponentbuilder.com) + *First Build*: 30th April, 2015 -+ *Last Build*: 1st March, 2018 ++ *Last Build*: 2nd March, 2018 + *Version*: 2.6.17 + *Copyright*: Copyright (C) 2015. All Rights Reserved + *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html -+ *Line count*: **183106** ++ *Line count*: **183421** + *Field count*: **1641** + *File count*: **1169** + *Folder count*: **189** diff --git a/admin/helpers/compiler/b_Structure.php b/admin/helpers/compiler/b_Structure.php index 53a8a6f9c..d0a82d443 100644 --- a/admin/helpers/compiler/b_Structure.php +++ b/admin/helpers/compiler/b_Structure.php @@ -319,56 +319,6 @@ class Structure extends Get * @var array */ protected $lastModifiedDate = array(); - - /** - * The array of dynamic paths - * - * JPATH_SITE is meant to represent the root path of the JSite application, just as JPATH_ADMINISTRATOR is mean to represent the root path of the JAdministrator application. - * - * JPATH_BASE is the root path for the current requested application.... so if you are in the administrator application: - * - * JPATH_BASE == JPATH_ADMINISTRATOR - * - * If you are in the site application: - * - * JPATH_BASE == JPATH_SITE - * - * If you are in the installation application: - * - * JPATH_BASE == JPATH_INSTALLATION. - * - * JPATH_ROOT is the root path for the Joomla install and does not depend upon any application. - * - * @var array - */ - protected $constantPaths = array( - // The path to the administrator folder. - 'JPATH_ADMINISTRATOR' => JPATH_ADMINISTRATOR, - // The path to the installed Joomla! site, or JPATH_ROOT/administrator if executed from the backend. - 'JPATH_BASE' => JPATH_BASE, - // The path to the cache folder. - 'JPATH_CACHE' => JPATH_CACHE, - // The path to the administration folder of the current component being executed. - 'JPATH_COMPONENT_ADMINISTRATOR' => JPATH_COMPONENT_ADMINISTRATOR, - // The path to the site folder of the current component being executed. - 'JPATH_COMPONENT_SITE' => JPATH_COMPONENT_SITE, - // The path to the current component being executed. - 'JPATH_COMPONENT' => JPATH_COMPONENT, - // The path to folder containing the configuration.php file. - 'JPATH_CONFIGURATION' => JPATH_CONFIGURATION, - // The path to the installation folder. - 'JPATH_INSTALLATION' => JPATH_INSTALLATION, - // The path to the libraries folder. - 'JPATH_LIBRARIES' => JPATH_LIBRARIES, - // The path to the plugins folder. - 'JPATH_PLUGINS' => JPATH_PLUGINS, - // The path to the installed Joomla! site. - 'JPATH_ROOT' => JPATH_ROOT, - // The path to the installed Joomla! site. - 'JPATH_SITE' => JPATH_SITE, - // The path to the templates folder. - 'JPATH_THEMES' => JPATH_THEMES - ); /** * Constructor @@ -1403,7 +1353,7 @@ class Structure extends Get */ protected function updateDynamicPath($path) { - return $this->setPlaceholders($path, $this->constantPaths); + return $this->setPlaceholders($path, ComponentbuilderHelper::$constantPaths); } /** diff --git a/admin/helpers/componentbuilder.php b/admin/helpers/componentbuilder.php index d883f35cb..21315c31c 100644 --- a/admin/helpers/componentbuilder.php +++ b/admin/helpers/componentbuilder.php @@ -986,6 +986,57 @@ abstract class ComponentbuilderHelper **/ public static $snippetPath = 'https://raw.githubusercontent.com/vdm-io/Joomla-Component-Builder-Snippets/master/'; public static $snippetsPath = 'https://api.github.com/repos/vdm-io/Joomla-Component-Builder-Snippets/git/trees/master'; + + /** + * The array of constant paths + * + * JPATH_SITE is meant to represent the root path of the JSite application, + * just as JPATH_ADMINISTRATOR is mean to represent the root path of the JAdministrator application. + * + * JPATH_BASE is the root path for the current requested application.... so if you are in the administrator application: + * + * JPATH_BASE == JPATH_ADMINISTRATOR + * + * If you are in the site application: + * + * JPATH_BASE == JPATH_SITE + * + * If you are in the installation application: + * + * JPATH_BASE == JPATH_INSTALLATION. + * + * JPATH_ROOT is the root path for the Joomla install and does not depend upon any application. + * + * @var array + */ + public static $constantPaths = array( + // The path to the administrator folder. + 'JPATH_ADMINISTRATOR' => JPATH_ADMINISTRATOR, + // The path to the installed Joomla! site, or JPATH_ROOT/administrator if executed from the backend. + 'JPATH_BASE' => JPATH_BASE, + // The path to the cache folder. + 'JPATH_CACHE' => JPATH_CACHE, + // The path to the administration folder of the current component being executed. + 'JPATH_COMPONENT_ADMINISTRATOR' => JPATH_COMPONENT_ADMINISTRATOR, + // The path to the site folder of the current component being executed. + 'JPATH_COMPONENT_SITE' => JPATH_COMPONENT_SITE, + // The path to the current component being executed. + 'JPATH_COMPONENT' => JPATH_COMPONENT, + // The path to folder containing the configuration.php file. + 'JPATH_CONFIGURATION' => JPATH_CONFIGURATION, + // The path to the installation folder. + 'JPATH_INSTALLATION' => JPATH_INSTALLATION, + // The path to the libraries folder. + 'JPATH_LIBRARIES' => JPATH_LIBRARIES, + // The path to the plugins folder. + 'JPATH_PLUGINS' => JPATH_PLUGINS, + // The path to the installed Joomla! site. + 'JPATH_ROOT' => JPATH_ROOT, + // The path to the installed Joomla! site. + 'JPATH_SITE' => JPATH_SITE, + // The path to the templates folder. + 'JPATH_THEMES' => JPATH_THEMES + ); /** * Get the snippet contributor details diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index 91e632bfd..af0813049 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -3831,8 +3831,10 @@ COM_COMPONENTBUILDER_FIELD_XML_LABEL="XML field definition (Please set the field COM_COMPONENTBUILDER_FIELD_YES="Yes" COM_COMPONENTBUILDER_FIELD_ZERO="0" COM_COMPONENTBUILDER_FILE="File" +COM_COMPONENTBUILDER_FILE_BSB_WAS_NOT_MOVE_TO_S="File %s was not move to (%s)!" COM_COMPONENTBUILDER_FILTER="Filter" COM_COMPONENTBUILDER_FOLDER="Folder" +COM_COMPONENTBUILDER_FOLDER_BSB_WAS_NOT_MOVE_TO_S="Folder %s was not move to (%s)!" COM_COMPONENTBUILDER_FORCE_LOCAL_UPDATE="Force Local Update" COM_COMPONENTBUILDER_FULL_WIDTH_IN_TAB="Full Width in Tab" COM_COMPONENTBUILDER_GENERAL_OVERVIEW_OF_HOW_THINGS_WORK_BSB="General overview of how things work: %s" diff --git a/admin/models/import_joomla_components.php b/admin/models/import_joomla_components.php index f8da89216..cce8383ae 100644 --- a/admin/models/import_joomla_components.php +++ b/admin/models/import_joomla_components.php @@ -767,7 +767,7 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy protected function moveSmartStuff() { // make sure to first unlock files - $this->unLockFiles($this->dir); + $this->unLockFiles(); // set params $params = JComponentHelper::getParams('com_componentbuilder'); // set custom folder path @@ -796,6 +796,43 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy $success = false; } } + // now move the dynamic files if found + $dynamicDir = str_replace('//', '/', $this->dir . '/dynamic'); + if (JFolder::exists($dynamicDir)) + { + // get a list of folders + $folders = JFolder::folders($dynamicDir); + // check if we have files + if(ComponentbuilderHelper::checkArray($folders)) + { + foreach ($folders as $folder) + { + $destination = $this->setDynamicPath($folder); + $fullPath = str_replace('//', '/', $dynamicDir . '/' . $folder); + if (!JFolder::exists($fullPath) || !JFolder::copy($fullPath, $destination,'',true)) + { + $this->app->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_FOLDER_BSB_WAS_NOT_MOVE_TO_S', $folder, $destination), 'error'); + $success = false; + } + } + } + // get a list of files + $files = JFolder::files($dynamicDir); + // check if we have files + if(ComponentbuilderHelper::checkArray($files)) + { + foreach ($files as $file) + { + $destination = $this->setDynamicPath($file); + $fullPath = str_replace('//', '/', $dynamicDir . '/' . $file); + if (!JFile::exists($fullPath) || !JFile::copy($fullPath, $destination)) + { + $this->app->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_FILE_BSB_WAS_NOT_MOVE_TO_S', $file, $destination), 'error'); + $success = false; + } + } + } + } return $success; } @@ -812,19 +849,17 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy $unlocker = new FOFEncryptAes($this->sleutle, 128); // we must first store the current working directory $joomla = getcwd(); - // setup the type path - $customPath = str_replace('//', '/', $this->dir . '/custom'); - // go to the custom folder if found - if (JFolder::exists($customPath)) + // to avoid that it decrypt the db and info file again we must move per/folder + $folders = array('images', 'custom', 'dynamic'); + // loop the folders + foreach ($folders as $folder) { - $this->unlock($customPath, $unlocker); - } - // setup the type path - $imagesPath = str_replace('//', '/', $this->dir . '/images'); - // go to the custom folder if found - if (JFolder::exists($imagesPath)) - { - $this->unlock($imagesPath, $unlocker); + $subPath = str_replace('//', '/', $this->dir . '/' . $folder); + // go to the package sub folder if found + if (JFolder::exists($subPath)) + { + $this->unlock($subPath, $unlocker); + } } // change back to working dir chdir($joomla); @@ -983,10 +1018,10 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy foreach($values as $value) { // first check if exist (only add if it does not) - if (!$this->getLocalItem($value, $table, 1)) + if (!$this->getLocalItem($value, $table, 1, 1, true)) { // add the diverged data - $this->addLocalItem($value, $table); + $this->addLocalItem($value, $table, true); } } } @@ -1223,15 +1258,16 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy /** * Prep the item * - * @param object $item The item to prep - * @param string $type The type of values - * @param string $action The action (add/update) + * @param object $item The item to prep + * @param string $type The type of values + * @param string $action The action (add/update) + * @param bool $diverged The diverged data switch * * @return mixed false on failure * object on success * **/ - protected function prepItem($item, &$type, $action) + protected function prepItem($item, &$type, $action, $diverged = false) { // remove access if (isset($item->access)) @@ -1528,8 +1564,12 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy $item = ComponentbuilderHelper::convertRepeatableFields($item, $updaterR); break; case 'component_admin_views': - // update the joomla_component ID where needed - $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + // diverged id already updated + if (!$diverged) + { + // update the joomla_component ID where needed + $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + } // repeatable fields to update $updaterR = array( // repeatablefield => checker @@ -1546,8 +1586,12 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy $this->updateSubformsIDs($item, 'component_admin_views', $updaterT); break; case 'component_site_views': - // update the joomla_component ID where needed - $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + // diverged id already updated + if (!$diverged) + { + // update the joomla_component ID where needed + $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + } // repeatable fields to update $updaterR = array( // repeatablefield => checker @@ -1564,8 +1608,12 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy $this->updateSubformsIDs($item, 'component_site_views', $updaterT); break; case 'component_custom_admin_views': - // update the joomla_component ID where needed - $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + // diverged id already updated + if (!$diverged) + { + // update the joomla_component ID where needed + $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + } // repeatable fields to update $updaterR = array( // repeatablefield => checker @@ -1582,8 +1630,12 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy $this->updateSubformsIDs($item, 'component_custom_admin_views', $updaterT); break; case 'component_updates': - // update the joomla_component ID where needed - $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + // diverged id already updated + if (!$diverged) + { + // update the joomla_component ID where needed + $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + } // repeatable fields to update $updaterR = array( // repeatablefield => checker @@ -1593,8 +1645,12 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy $item = ComponentbuilderHelper::convertRepeatableFields($item, $updaterR); break; case 'component_mysql_tweaks': - // update the joomla_component ID where needed - $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + // diverged id already updated + if (!$diverged) + { + // update the joomla_component ID where needed + $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + } // repeatable fields to update $updaterR = array( // repeatablefield => checker @@ -1611,8 +1667,12 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy $this->updateSubformsIDs($item, 'component_mysql_tweaks', $updaterT); break; case 'component_custom_admin_menus': - // update the joomla_component ID where needed - $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + // diverged id already updated + if (!$diverged) + { + // update the joomla_component ID where needed + $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + } // repeatable fields to update $updaterR = array( // repeatablefield => checker @@ -1629,8 +1689,12 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy $this->updateSubformsIDs($item, 'component_custom_admin_menus', $updaterT); break; case 'component_config': - // update the joomla_component ID where needed - $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + // diverged id already updated + if (!$diverged) + { + // update the joomla_component ID where needed + $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + } // repeatable fields to update $updaterR = array( // repeatablefield => checker @@ -1647,8 +1711,12 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy $this->updateSubformsIDs($item, 'component_config', $updaterT); break; case 'component_dashboard': - // update the joomla_component ID where needed - $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + // diverged id already updated + if (!$diverged) + { + // update the joomla_component ID where needed + $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + } // repeatable fields to update $updaterR = array( // repeatablefield => checker @@ -1658,8 +1726,12 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy $item = ComponentbuilderHelper::convertRepeatableFields($item, $updaterR); break; case 'component_files_folders': - // update the joomla_component ID where needed - $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + // diverged id already updated + if (!$diverged) + { + // update the joomla_component ID where needed + $item = $this->setNewID($item, 'joomla_component', 'joomla_component', $type); + } // repeatable fields to update $updaterR = array( // repeatablefield => checker @@ -1784,8 +1856,12 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy break; case 'admin_fields': case 'admin_fields_conditions': - // update the admin_view ID where needed - $item = $this->setNewID($item, 'admin_view', 'admin_view', $type); + // diverged id already updated + if (!$diverged) + { + // update the admin_view ID where needed + $item = $this->setNewID($item, 'admin_view', 'admin_view', $type); + } // set the updater if ('admin_fields' === $type) { @@ -2006,17 +2082,18 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy /** * add the local item * - * @param object $item The item to update - * @param string $type The type of values + * @param object $item The item to update + * @param string $type The type of values + * @param bool $diverged The diverged data switch * * @return mixed false on failure * ID int on success * **/ - protected function addLocalItem(&$item, &$type) + protected function addLocalItem(&$item, &$type, $diverged = false) { // prep the item - if ($add = $this->prepItem($item, $type, 'add')) + if ($add = $this->prepItem($item, $type, 'add', $diverged)) { // insert/add the item if ($result = $this->_db->insertObject('#__componentbuilder_' . $type, $add)) @@ -2034,16 +2111,17 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy /** * Get the local item * - * @param object $item The item to get - * @param string $type The type of values - * @param bool $retry The retry switch - * @param bool $get The query get switch + * @param object $item The item to get + * @param string $type The type of values + * @param bool $retry The retry switch + * @param bool $get The query get switch + * @param bool $diverged The diverged data switch * * @return mixed false on failure * ID int on success * **/ - protected function getLocalItem(&$item, &$type, $retry = false, $get = 1) + protected function getLocalItem(&$item, &$type, $retry = false, $get = 1, $diverged = false) { $query = $this->_db->getQuery(true); $query->select('a.*'); @@ -2154,7 +2232,15 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy // get by admin_view (since there should only be one of each name) $getter = array('admin_view'); $this->specialValue = array(); - $this->specialValue['admin_view'] = $this->newID['admin_view'][(int) $item->admin_view]; + // Yet if diverged it makes sense that the ID is updated. + if ($diverged) + { + $this->specialValue['admin_view'] = (int) $item->admin_view; + } + elseif (isset($this->newID['admin_view'][(int) $item->admin_view])) + { + $this->specialValue['admin_view'] = $this->newID['admin_view'][(int) $item->admin_view]; + } break; case 'fieldtype': // get by name (since there should only be one of each name) @@ -2304,10 +2390,23 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy case 'component_config': case 'component_dashboard': case 'component_files_folders': - // get by admin_view (since there should only be one of each name) + // get by joomla_component (since there should only be one of each component) $getter = array('joomla_component'); $this->specialValue = array(); - $this->specialValue['joomla_component'] = $this->newID['joomla_component'][(int) $item->joomla_component]; + // Yet if diverged it makes sense that the ID is updated. + if ($diverged) + { + $this->specialValue['joomla_component'] = (int) $item->joomla_component; + } + elseif (isset($this->newID['joomla_component'][(int) $item->joomla_component])) + { + $this->specialValue['joomla_component'] = $this->newID['joomla_component'][(int) $item->joomla_component]; + } + // (TODO) I have seen this happen, seems dangerous! + else + { + return false; + } break; case 'language_translation': // get by English translation since there should just be one @@ -2544,6 +2643,34 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy } return false; } + + /** + * Update constant path with real full path value + * + * @param string $path The full path + * + * @return string The updated path + * + */ + protected function setFullPath($path) + { + return str_replace(array_keys(ComponentbuilderHelper::$constantPaths), array_values(ComponentbuilderHelper::$constantPaths), $path); + } + + /** + * Convert the name to a path + * + * @param string $path The path name + * + * @return string The full path * + */ + protected function setDynamicPath($path) + { + // now convert to path + $path = str_replace('__v_d_m__', '/', $path); + // add the full path if possible + return str_replace('//', '/', $this->setFullPath($path)); + } protected function getAlias($name,$type = false) { diff --git a/admin/models/joomla_components.php b/admin/models/joomla_components.php index 2322b7896..5f9d6156d 100644 --- a/admin/models/joomla_components.php +++ b/admin/models/joomla_components.php @@ -273,17 +273,24 @@ class ComponentbuilderModelJoomla_components extends JModelList // add to pks $pks[] = $item->id; } + // array of tables linked to joomla_component + $linkedTables = array( + 'custom_code' => 'component', + 'component_files_folders' => 'joomla_component', + 'component_admin_views' => 'joomla_component', + 'component_config' => 'joomla_component', + 'component_site_views' => 'joomla_component', + 'component_custom_admin_views' => 'joomla_component', + 'component_updates' => 'joomla_component', + 'component_mysql_tweaks' => 'joomla_component', + 'component_custom_admin_menus' => 'joomla_component', + 'component_dashboard' => 'joomla_component' ); // load all tables linked to joomla_component - $this->setData('custom_code', $pks, 'component'); - $this->setData('component_files_folders', $pks, 'joomla_component'); - $this->setData('component_admin_views', $pks, 'joomla_component'); - $this->setData('component_config', $pks, 'joomla_component'); - $this->setData('component_site_views', $pks, 'joomla_component'); - $this->setData('component_custom_admin_views', $pks, 'joomla_component'); - $this->setData('component_updates', $pks, 'joomla_component'); - $this->setData('component_mysql_tweaks', $pks, 'joomla_component'); - $this->setData('component_custom_admin_menus', $pks, 'joomla_component'); - $this->setData('component_dashboard', $pks, 'joomla_component'); + foreach($linkedTables as $table => $field) + { + $this->setData($table, $pks, $field); + } + // add fields and conditions if (isset($this->exportIDs['admin_view']) && ComponentbuilderHelper::checkArray($this->exportIDs['admin_view'])) { @@ -320,7 +327,8 @@ class ComponentbuilderModelJoomla_components extends JModelList { $this->setData('custom_code', array_values($this->exportIDs['custom_code']), 'id'); } - // has any data been set + + // has any data been set for this component if (isset($this->smartExport['joomla_component']) && ComponentbuilderHelper::checkArray($this->smartExport['joomla_component'])) { // set the folder and move the files of each component to the folder @@ -553,6 +561,10 @@ class ComponentbuilderModelJoomla_components extends JModelList $this->moveIt($this->getValues($item->addfiles, 'subform', 'file', null), 'file'); // build folders $this->moveIt($this->getValues($item->addfolders, 'subform', 'folder', null), 'folder'); + // build full path files + $this->moveIt($this->getValues($item->addfilesfullpath, 'subform', 'filepath', null), 'file', true); + // build full path folders + $this->moveIt($this->getValues($item->addfoldersfullpath, 'subform', 'folderpath', null), 'folder', true); } // actions to take if table is component_config if ('component_config' === $table) @@ -777,19 +789,18 @@ class ComponentbuilderModelJoomla_components extends JModelList $locker = new FOFEncryptAes($this->key, 128); // we must first store the current working directory $joomla = getcwd(); - // setup the type path - $customPath = $this->packagePath . '/custom'; - // go to the custom folder if found - if (JFolder::exists($customPath)) + // to avoid that it encrypt the db and info file again we must move per/folder + $folders = array('images', 'custom', 'dynamic'); + // loop the folders + foreach ($folders as $folder) { - $this->lock($customPath, $locker); - } - // setup the type path - $imagesPath = $this->packagePath . '/images'; - // go to the custom folder if found - if (JFolder::exists($imagesPath)) - { - $this->lock($imagesPath, $locker); + // the sub path + $subPath = $this->packagePath.'/'.$folder; + // go to the package sub folder if found + if (JFolder::exists($subPath)) + { + $this->lock($subPath, $locker); + } } // change back to working dir chdir($joomla); @@ -823,7 +834,7 @@ class ComponentbuilderModelJoomla_components extends JModelList * * @return bool */ - protected function moveIt($paths, $type) + protected function moveIt($paths, $type, $dynamic = false) { // make sure we have an array if (!ComponentbuilderHelper::checkArray($paths)) @@ -834,11 +845,20 @@ class ComponentbuilderModelJoomla_components extends JModelList if ('file' === $type || 'folder' === $type) { $folderName = 'custom'; + // if these are full paths use dynamic folder + if ($dynamic) + { + $folderName = 'dynamic'; + } } - if ('image' === $type) + elseif ('image' === $type) { $folderName = 'images'; } + else + { + return false; + } // setup the type path $tmpPath = str_replace('//', '/', $this->packagePath . '/' . $folderName); // create type path if not set @@ -850,19 +870,31 @@ class ComponentbuilderModelJoomla_components extends JModelList // now move it foreach ($paths as $item) { + // make sure we have a string if (ComponentbuilderHelper::checkString($item)) { + // if the file type if ('file' === $type) { - // TODO we must add the new all over files to this... will be a little tricky. - $tmpFilePath = str_replace('//', '/', $tmpPath.'/'.$item); - $customFilePath = str_replace('//', '/', $this->customPath.'/'.$item); + // if dynamic paths + if ($dynamic) + { + $tmpFilePath = $tmpPath.'/'.$this->setDynamicPathName($item); + $customFilePath = str_replace('//', '/', $this->setFullPath($item)); + } + else + { + $tmpFilePath = str_replace('//', '/', $tmpPath.'/'.$item); + $customFilePath = str_replace('//', '/', $this->customPath.'/'.$item); + } + // now check if file exist if (!JFile::exists($tmpFilePath) && JFile::exists($customFilePath)) { // move the file to its place JFile::copy($customFilePath, $tmpFilePath); } } + // if the image type if ('image' === $type) { $imageName = basename($item); @@ -882,10 +914,20 @@ class ComponentbuilderModelJoomla_components extends JModelList JFile::copy($customImagePath, $tmpImagePath); } } + // if the folder type if ('folder' === $type) { - $tmpFolderPath = str_replace('//', '/', $tmpPath.'/'.$item); - $customFolderPath = str_replace('//', '/', $this->customPath.'/'.$item); + // if dynamic paths + if ($dynamic) + { + $tmpFolderPath = $tmpPath.'/'.$this->setDynamicPathName($item); + $customFolderPath = str_replace('//', '/', $this->setFullPath($item)); + } + else + { + $tmpFolderPath = str_replace('//', '/', $tmpPath.'/'.$item); + $customFolderPath = str_replace('//', '/', $this->customPath.'/'.$item); + } if (!JFolder::exists($tmpFolderPath) && JFolder::exists($customFolderPath)) { // move the folder to its place @@ -1252,6 +1294,48 @@ class ComponentbuilderModelJoomla_components extends JModelList } } } + + /** + * Convert the path to a name + * + * @param string $path The full path + * + * @return string The path name + * + */ + protected function setDynamicPathName($path) + { + // remove the full path if possible + $path = str_replace('//', '/', $this->setConstantPath($path)); + // now convert to string + return str_replace('/', '__v_d_m__', $path); + } + + /** + * Update real full path value with constant path string + * + * @param string $path The full path + * + * @return string The updated path + * + */ + protected function setConstantPath($path) + { + return str_replace(array_values(ComponentbuilderHelper::$constantPaths), array_keys(ComponentbuilderHelper::$constantPaths), $path); + } + + /** + * Update constant path with real full path value + * + * @param string $path The full path + * + * @return string The updated path + * + */ + protected function setFullPath($path) + { + return str_replace(array_keys(ComponentbuilderHelper::$constantPaths), array_values(ComponentbuilderHelper::$constantPaths), $path); + } /** * Get the keys of the values to search custom code in diff --git a/admin/views/import_joomla_components/view.html.php b/admin/views/import_joomla_components/view.html.php index 21e2ab2e8..9e283625f 100644 --- a/admin/views/import_joomla_components/view.html.php +++ b/admin/views/import_joomla_components/view.html.php @@ -138,7 +138,7 @@ class ComponentbuilderViewImport_joomla_components extends JViewLegacy $text1 = JFormHelper::loadFieldType('text',true); // add the key - $xml = ''; + $xml = ''; // prepare the xml $sleutle = new SimpleXMLElement($xml); // set components to form diff --git a/componentbuilder.xml b/componentbuilder.xml index 644a1046d..ce72ccee7 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,7 +1,7 @@ COM_COMPONENTBUILDER - 1st March, 2018 + 2nd March, 2018 Llewellyn van der Merwe llewellyn@joomlacomponentbuilder.com http://joomlacomponentbuilder.com diff --git a/site/helpers/componentbuilder.php b/site/helpers/componentbuilder.php index e9c0a3937..feac8153b 100644 --- a/site/helpers/componentbuilder.php +++ b/site/helpers/componentbuilder.php @@ -52,6 +52,57 @@ abstract class ComponentbuilderHelper **/ public static $snippetPath = 'https://raw.githubusercontent.com/vdm-io/Joomla-Component-Builder-Snippets/master/'; public static $snippetsPath = 'https://api.github.com/repos/vdm-io/Joomla-Component-Builder-Snippets/git/trees/master'; + + /** + * The array of constant paths + * + * JPATH_SITE is meant to represent the root path of the JSite application, + * just as JPATH_ADMINISTRATOR is mean to represent the root path of the JAdministrator application. + * + * JPATH_BASE is the root path for the current requested application.... so if you are in the administrator application: + * + * JPATH_BASE == JPATH_ADMINISTRATOR + * + * If you are in the site application: + * + * JPATH_BASE == JPATH_SITE + * + * If you are in the installation application: + * + * JPATH_BASE == JPATH_INSTALLATION. + * + * JPATH_ROOT is the root path for the Joomla install and does not depend upon any application. + * + * @var array + */ + public static $constantPaths = array( + // The path to the administrator folder. + 'JPATH_ADMINISTRATOR' => JPATH_ADMINISTRATOR, + // The path to the installed Joomla! site, or JPATH_ROOT/administrator if executed from the backend. + 'JPATH_BASE' => JPATH_BASE, + // The path to the cache folder. + 'JPATH_CACHE' => JPATH_CACHE, + // The path to the administration folder of the current component being executed. + 'JPATH_COMPONENT_ADMINISTRATOR' => JPATH_COMPONENT_ADMINISTRATOR, + // The path to the site folder of the current component being executed. + 'JPATH_COMPONENT_SITE' => JPATH_COMPONENT_SITE, + // The path to the current component being executed. + 'JPATH_COMPONENT' => JPATH_COMPONENT, + // The path to folder containing the configuration.php file. + 'JPATH_CONFIGURATION' => JPATH_CONFIGURATION, + // The path to the installation folder. + 'JPATH_INSTALLATION' => JPATH_INSTALLATION, + // The path to the libraries folder. + 'JPATH_LIBRARIES' => JPATH_LIBRARIES, + // The path to the plugins folder. + 'JPATH_PLUGINS' => JPATH_PLUGINS, + // The path to the installed Joomla! site. + 'JPATH_ROOT' => JPATH_ROOT, + // The path to the installed Joomla! site. + 'JPATH_SITE' => JPATH_SITE, + // The path to the templates folder. + 'JPATH_THEMES' => JPATH_THEMES + ); /** * Get the snippet contributor details -- 2.40.1 From 19026043282ca134b990e09caf6281ede4c685e7 Mon Sep 17 00:00:00 2001 From: Llewellyn van der Merwe Date: Fri, 2 Mar 2018 04:08:40 +0200 Subject: [PATCH 05/22] added some updated notes to the paths area --- README.md | 4 +- admin/README.txt | 4 +- .../en-GB/en-GB.com_componentbuilder.ini | 82 ++++++- .../advance_fullwidth.php | 3 +- .../advance_fullwidth.php | 3 +- admin/models/component_files_folders.php | 94 ++++---- .../models/forms/component_files_folders.xml | 189 ++++++++------- .../forms/library_files_folders_urls.xml | 225 +++++++++--------- admin/models/library_files_folders_urls.php | 84 +++---- 9 files changed, 389 insertions(+), 299 deletions(-) diff --git a/README.md b/README.md index 292f53f63..025918f48 100644 --- a/README.md +++ b/README.md @@ -130,8 +130,8 @@ Component Builder is mapped as a component in itself on my local development env + *Version*: 2.6.17 + *Copyright*: Copyright (C) 2015. All Rights Reserved + *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html -+ *Line count*: **183421** -+ *Field count*: **1641** ++ *Line count*: **183511** ++ *Field count*: **1645** + *File count*: **1169** + *Folder count*: **189** diff --git a/admin/README.txt b/admin/README.txt index 292f53f63..025918f48 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -130,8 +130,8 @@ Component Builder is mapped as a component in itself on my local development env + *Version*: 2.6.17 + *Copyright*: Copyright (C) 2015. All Rights Reserved + *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html -+ *Line count*: **183421** -+ *Field count*: **1641** ++ *Line count*: **183511** ++ *Field count*: **1645** + *File count*: **1169** + *Folder count*: **189** diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index af0813049..03d0f1a0e 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -2001,13 +2001,50 @@ COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_MODIFIED_DATE_DESC="The date this C COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_MODIFIED_DATE_LABEL="Modified Date" COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NEW="A New Component Files & Folders" COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTE_ADD_FILES_DESCRIPTION="You can add custom files to the component, simply add the files to the administrator/components/com_componentbuilder/custom folder and then select them here." -COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTE_ADD_FILES_FULLPATH_DESCRIPTION="You can add any files to the component, by using the full system path. Example: /home/user/folder/file.php (make sure that php has permission to read the file)" +COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTE_ADD_FILES_FULLPATH_DESCRIPTION="You can add any files to the component, by using the full system path. Example: /home/user/folder/file.php (make sure that php has permission to read the file)
Please note that you can also use constant paths in your full path (directly without quotes), this is highly recommended to insure portability.
To see a list of constant paths please read the notes below. Example: JPATH_ROOT/file.php or JPATH_ROOT/components/com_yourcomponentname/helpers/file.php" COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTE_ADD_FILES_FULLPATH_LABEL="Adding Files" COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTE_ADD_FILES_LABEL="Adding Custom Files" COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTE_ADD_FOLDERS_DESCRIPTION="You can add custom folders to the component, simply add the folders to the administrator/components/com_componentbuilder/custom folder and then select them here." -COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTE_ADD_FOLDERS_FULLPATH_DESCRIPTION="You can any folders to the component, by using the full system path. Example: /home/user/folder (make sure that php has permission to read the folder)" +COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTE_ADD_FOLDERS_FULLPATH_DESCRIPTION="You can any folders to the component, by using the full system path. Example: /home/user/folder (make sure that php has permission to read the folder)
Please note that you can also use constant paths in your full path (directly without quotes), this is highly recommended to insure portability.
To see a list of constant paths please read the notes below. Example: JPATH_ROOT/folder or JPATH_ROOT/components/com_yourcomponentname/helpers/folder" COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTE_ADD_FOLDERS_FULLPATH_LABEL="Adding Folders" COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTE_ADD_FOLDERS_LABEL="Adding Custom Folders" +COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTE_CONSTANT_PATHS_DESCRIPTION="

// The path to the administrator folder.
+JPATH_ADMINISTRATOR
+// The path to the installed Joomla! site, or JPATH_ROOT/administrator if executed from the backend.
+JPATH_BASE
+// The path to the cache folder.
+JPATH_CACHE
+// The path to the administration folder of the current component being executed.
+JPATH_COMPONENT_ADMINISTRATOR
+// The path to the site folder of the current component being executed.
+JPATH_COMPONENT_SITE
+// The path to the current component being executed.
+JPATH_COMPONENT
+// The path to folder containing the configuration.php file.
+JPATH_CONFIGURATION
+// The path to the installation folder.
+JPATH_INSTALLATION
+// The path to the libraries folder.
+JPATH_LIBRARIES
+// The path to the plugins folder.
+JPATH_PLUGINS
+// The path to the installed Joomla! site.
+JPATH_ROOT
+// The path to the installed Joomla! site.
+JPATH_SITE
+// The path to the templates folder.
+JPATH_THEMES

+ +

JPATH_SITE is meant to represent the root path of the JSite application,
+just as JPATH_ADMINISTRATOR is mean to represent the root path of the JAdministrator application.
+JPATH_BASE is the root path for the current requested application.... so if you are in the administrator application:
+JPATH_BASE == JPATH_ADMINISTRATOR
+If you are in the site application:
+JPATH_BASE == JPATH_SITE
+If you are in the installation application:
+JPATH_BASE == JPATH_INSTALLATION.
+JPATH_ROOT is the root path for the Joomla install and does not depend upon any application.

" +COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTE_CONSTANT_PATHS_LABEL="Constant Paths" COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTNEW_DESCRIPTION="Should file be updated." COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_NOTNEW_LABEL="Update" COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_ORDERING_LABEL="Ordering" @@ -5004,15 +5041,52 @@ COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_MODIFIED_DATE_DESC="The date thi COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_MODIFIED_DATE_LABEL="Modified Date" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NEW="A New Library Files, Folders & URLs" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_ADD_FILES_DESCRIPTION="You can add custom files to the component, simply add the files to the administrator/components/com_componentbuilder/custom folder and then select them here." -COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_ADD_FILES_FULLPATH_DESCRIPTION="You can add any files to the component, by using the full system path. Example: /home/user/folder/file.php (make sure that php has permission to read the file)" +COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_ADD_FILES_FULLPATH_DESCRIPTION="You can add any files to the component, by using the full system path. Example: /home/user/folder/file.php (make sure that php has permission to read the file)
Please note that you can also use constant paths in your full path (directly without quotes), this is highly recommended to insure portability.
To see a list of constant paths please read the notes below. Example: JPATH_ROOT/file.php or JPATH_ROOT/components/com_yourcomponentname/helpers/file.php" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_ADD_FILES_FULLPATH_LABEL="Adding Files" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_ADD_FILES_LABEL="Adding Custom Files" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_ADD_FOLDERS_DESCRIPTION="You can add custom folders to the component, simply add the folders to the administrator/components/com_componentbuilder/custom folder and then select them here." -COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_ADD_FOLDERS_FULLPATH_DESCRIPTION="You can any folders to the component, by using the full system path. Example: /home/user/folder (make sure that php has permission to read the folder)" +COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_ADD_FOLDERS_FULLPATH_DESCRIPTION="You can any folders to the component, by using the full system path. Example: /home/user/folder (make sure that php has permission to read the folder)
Please note that you can also use constant paths in your full path (directly without quotes), this is highly recommended to insure portability.
To see a list of constant paths please read the notes below. Example: JPATH_ROOT/folder or JPATH_ROOT/components/com_yourcomponentname/helpers/folder" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_ADD_FOLDERS_FULLPATH_LABEL="Adding Folders" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_ADD_FOLDERS_LABEL="Adding Custom Folders" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_ADD_URLS_DESCRIPTION="You can add urls here, and it can be used in three ways. As a direct link (default) or to get the file content and add it to the component (get) or as both local and link (dynamic)" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_ADD_URLS_LABEL="Adding Urls" +COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_CONSTANT_PATHS_DESCRIPTION="

// The path to the administrator folder.
+JPATH_ADMINISTRATOR
+// The path to the installed Joomla! site, or JPATH_ROOT/administrator if executed from the backend.
+JPATH_BASE
+// The path to the cache folder.
+JPATH_CACHE
+// The path to the administration folder of the current component being executed.
+JPATH_COMPONENT_ADMINISTRATOR
+// The path to the site folder of the current component being executed.
+JPATH_COMPONENT_SITE
+// The path to the current component being executed.
+JPATH_COMPONENT
+// The path to folder containing the configuration.php file.
+JPATH_CONFIGURATION
+// The path to the installation folder.
+JPATH_INSTALLATION
+// The path to the libraries folder.
+JPATH_LIBRARIES
+// The path to the plugins folder.
+JPATH_PLUGINS
+// The path to the installed Joomla! site.
+JPATH_ROOT
+// The path to the installed Joomla! site.
+JPATH_SITE
+// The path to the templates folder.
+JPATH_THEMES

+ +

JPATH_SITE is meant to represent the root path of the JSite application,
+just as JPATH_ADMINISTRATOR is mean to represent the root path of the JAdministrator application.
+JPATH_BASE is the root path for the current requested application.... so if you are in the administrator application:
+JPATH_BASE == JPATH_ADMINISTRATOR
+If you are in the site application:
+JPATH_BASE == JPATH_SITE
+If you are in the installation application:
+JPATH_BASE == JPATH_INSTALLATION.
+JPATH_ROOT is the root path for the Joomla install and does not depend upon any application.

" +COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTE_CONSTANT_PATHS_LABEL="Constant Paths" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTNEW_DESCRIPTION="Should file be updated." COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_NOTNEW_LABEL="Update" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_ORDERING_LABEL="Ordering" diff --git a/admin/layouts/component_files_folders/advance_fullwidth.php b/admin/layouts/component_files_folders/advance_fullwidth.php index 36f1ccd1e..2fda89c69 100644 --- a/admin/layouts/component_files_folders/advance_fullwidth.php +++ b/admin/layouts/component_files_folders/advance_fullwidth.php @@ -33,7 +33,8 @@ $fields = $displayData->get('fields') ?: array( 'note_add_files_fullpath', 'addfilesfullpath', 'note_add_folders_fullpath', - 'addfoldersfullpath' + 'addfoldersfullpath', + 'note_constant_paths' ); ?> diff --git a/admin/layouts/library_files_folders_urls/advance_fullwidth.php b/admin/layouts/library_files_folders_urls/advance_fullwidth.php index 36f1ccd1e..2fda89c69 100644 --- a/admin/layouts/library_files_folders_urls/advance_fullwidth.php +++ b/admin/layouts/library_files_folders_urls/advance_fullwidth.php @@ -33,7 +33,8 @@ $fields = $displayData->get('fields') ?: array( 'note_add_files_fullpath', 'addfilesfullpath', 'note_add_folders_fullpath', - 'addfoldersfullpath' + 'addfoldersfullpath', + 'note_constant_paths' ); ?> diff --git a/admin/models/component_files_folders.php b/admin/models/component_files_folders.php index fc73d1254..93cd931ee 100644 --- a/admin/models/component_files_folders.php +++ b/admin/models/component_files_folders.php @@ -95,20 +95,12 @@ class ComponentbuilderModelComponent_files_folders extends JModelAdmin $item->metadata = $registry->toArray(); } - if (!empty($item->addfiles)) + if (!empty($item->addfoldersfullpath)) { - // Convert the addfiles field to an array. - $addfiles = new Registry; - $addfiles->loadString($item->addfiles); - $item->addfiles = $addfiles->toArray(); - } - - if (!empty($item->addfolders)) - { - // Convert the addfolders field to an array. - $addfolders = new Registry; - $addfolders->loadString($item->addfolders); - $item->addfolders = $addfolders->toArray(); + // Convert the addfoldersfullpath field to an array. + $addfoldersfullpath = new Registry; + $addfoldersfullpath->loadString($item->addfoldersfullpath); + $item->addfoldersfullpath = $addfoldersfullpath->toArray(); } if (!empty($item->addfilesfullpath)) @@ -119,12 +111,20 @@ class ComponentbuilderModelComponent_files_folders extends JModelAdmin $item->addfilesfullpath = $addfilesfullpath->toArray(); } - if (!empty($item->addfoldersfullpath)) + if (!empty($item->addfolders)) { - // Convert the addfoldersfullpath field to an array. - $addfoldersfullpath = new Registry; - $addfoldersfullpath->loadString($item->addfoldersfullpath); - $item->addfoldersfullpath = $addfoldersfullpath->toArray(); + // Convert the addfolders field to an array. + $addfolders = new Registry; + $addfolders->loadString($item->addfolders); + $item->addfolders = $addfolders->toArray(); + } + + if (!empty($item->addfiles)) + { + // Convert the addfiles field to an array. + $addfiles = new Registry; + $addfiles->loadString($item->addfiles); + $item->addfiles = $addfiles->toArray(); } // update the fields @@ -838,30 +838,17 @@ class ComponentbuilderModelComponent_files_folders extends JModelAdmin $data['metadata'] = (string) $metadata; } - // Set the addfiles items to data. - if (isset($data['addfiles']) && is_array($data['addfiles'])) + // Set the addfoldersfullpath items to data. + if (isset($data['addfoldersfullpath']) && is_array($data['addfoldersfullpath'])) { - $addfiles = new JRegistry; - $addfiles->loadArray($data['addfiles']); - $data['addfiles'] = (string) $addfiles; + $addfoldersfullpath = new JRegistry; + $addfoldersfullpath->loadArray($data['addfoldersfullpath']); + $data['addfoldersfullpath'] = (string) $addfoldersfullpath; } - elseif (!isset($data['addfiles'])) + elseif (!isset($data['addfoldersfullpath'])) { - // Set the empty addfiles to data - $data['addfiles'] = ''; - } - - // Set the addfolders items to data. - if (isset($data['addfolders']) && is_array($data['addfolders'])) - { - $addfolders = new JRegistry; - $addfolders->loadArray($data['addfolders']); - $data['addfolders'] = (string) $addfolders; - } - elseif (!isset($data['addfolders'])) - { - // Set the empty addfolders to data - $data['addfolders'] = ''; + // Set the empty addfoldersfullpath to data + $data['addfoldersfullpath'] = ''; } // Set the addfilesfullpath items to data. @@ -877,17 +864,30 @@ class ComponentbuilderModelComponent_files_folders extends JModelAdmin $data['addfilesfullpath'] = ''; } - // Set the addfoldersfullpath items to data. - if (isset($data['addfoldersfullpath']) && is_array($data['addfoldersfullpath'])) + // Set the addfolders items to data. + if (isset($data['addfolders']) && is_array($data['addfolders'])) { - $addfoldersfullpath = new JRegistry; - $addfoldersfullpath->loadArray($data['addfoldersfullpath']); - $data['addfoldersfullpath'] = (string) $addfoldersfullpath; + $addfolders = new JRegistry; + $addfolders->loadArray($data['addfolders']); + $data['addfolders'] = (string) $addfolders; } - elseif (!isset($data['addfoldersfullpath'])) + elseif (!isset($data['addfolders'])) { - // Set the empty addfoldersfullpath to data - $data['addfoldersfullpath'] = ''; + // Set the empty addfolders to data + $data['addfolders'] = ''; + } + + // Set the addfiles items to data. + if (isset($data['addfiles']) && is_array($data['addfiles'])) + { + $addfiles = new JRegistry; + $addfiles->loadArray($data['addfiles']); + $data['addfiles'] = (string) $addfiles; + } + elseif (!isset($data['addfiles'])) + { + // Set the empty addfiles to data + $data['addfiles'] = ''; } // Set the Params Items to data diff --git a/admin/models/forms/component_files_folders.xml b/admin/models/forms/component_files_folders.xml index 6cc00f6a7..704690f7e 100644 --- a/admin/models/forms/component_files_folders.xml +++ b/admin/models/forms/component_files_folders.xml @@ -89,20 +89,53 @@ required="true" readonly="true" button="false" /> - - - - + + +