forked from joomla/Component-Builder
Fixed gh-234 to insure that the FTP server option works. Added the server option to the JCB package backup area.
This commit is contained in:
parent
ab88bd49a0
commit
9d64afe138
10
README.md
10
README.md
@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo
|
|||||||
|
|
||||||
Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will safe you lots of time and money. A real must have!
|
Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will safe you lots of time and money. A real must have!
|
||||||
|
|
||||||
You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (2.6.15) with **ALL** its features and **ALL** concepts totally open-source and free!
|
You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (2.6.16) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||||
|
|
||||||
> Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45)
|
> Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45)
|
||||||
|
|
||||||
@ -126,13 +126,13 @@ Component Builder is mapped as a component in itself on my local development env
|
|||||||
+ *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com)
|
+ *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com)
|
||||||
+ *Name*: [Component Builder](http://joomlacomponentbuilder.com)
|
+ *Name*: [Component Builder](http://joomlacomponentbuilder.com)
|
||||||
+ *First Build*: 30th April, 2015
|
+ *First Build*: 30th April, 2015
|
||||||
+ *Last Build*: 19th February, 2018
|
+ *Last Build*: 20th February, 2018
|
||||||
+ *Version*: 2.6.15
|
+ *Version*: 2.6.16
|
||||||
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
|
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
|
||||||
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||||
+ *Line count*: **182095**
|
+ *Line count*: **182404**
|
||||||
+ *Field count*: **1639**
|
+ *Field count*: **1639**
|
||||||
+ *File count*: **1167**
|
+ *File count*: **1168**
|
||||||
+ *Folder count*: **188**
|
+ *Folder count*: **188**
|
||||||
|
|
||||||
> This **component** was build with a Joomla [Automated Component Builder](http://joomlacomponentbuilder.com).
|
> This **component** was build with a Joomla [Automated Component Builder](http://joomlacomponentbuilder.com).
|
||||||
|
@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo
|
|||||||
|
|
||||||
Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will safe you lots of time and money. A real must have!
|
Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will safe you lots of time and money. A real must have!
|
||||||
|
|
||||||
You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (2.6.15) with **ALL** its features and **ALL** concepts totally open-source and free!
|
You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (2.6.16) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||||
|
|
||||||
> Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45)
|
> Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45)
|
||||||
|
|
||||||
@ -126,13 +126,13 @@ Component Builder is mapped as a component in itself on my local development env
|
|||||||
+ *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com)
|
+ *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com)
|
||||||
+ *Name*: [Component Builder](http://joomlacomponentbuilder.com)
|
+ *Name*: [Component Builder](http://joomlacomponentbuilder.com)
|
||||||
+ *First Build*: 30th April, 2015
|
+ *First Build*: 30th April, 2015
|
||||||
+ *Last Build*: 19th February, 2018
|
+ *Last Build*: 20th February, 2018
|
||||||
+ *Version*: 2.6.15
|
+ *Version*: 2.6.16
|
||||||
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
|
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
|
||||||
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||||
+ *Line count*: **182095**
|
+ *Line count*: **182404**
|
||||||
+ *Field count*: **1639**
|
+ *Field count*: **1639**
|
||||||
+ *File count*: **1167**
|
+ *File count*: **1168**
|
||||||
+ *Folder count*: **188**
|
+ *Folder count*: **188**
|
||||||
|
|
||||||
> This **component** was build with a Joomla [Automated Component Builder](http://joomlacomponentbuilder.com).
|
> This **component** was build with a Joomla [Automated Component Builder](http://joomlacomponentbuilder.com).
|
||||||
|
@ -547,6 +547,27 @@
|
|||||||
description="COM_COMPONENTBUILDER_CONFIG_BACKUPCRONJOB_NOTE_DESCRIPTION"
|
description="COM_COMPONENTBUILDER_CONFIG_BACKUPCRONJOB_NOTE_DESCRIPTION"
|
||||||
heading="h4"
|
heading="h4"
|
||||||
class="backupcronjob_note" />
|
class="backupcronjob_note" />
|
||||||
|
<!-- Cronjob_backup_type Field. Type: Radio. (joomla) -->
|
||||||
|
<field type="radio"
|
||||||
|
name="cronjob_backup_type"
|
||||||
|
label="COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_TYPE_LABEL"
|
||||||
|
description="COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_TYPE_DESCRIPTION"
|
||||||
|
class="btn-group btn-group-yesno"
|
||||||
|
default="1">
|
||||||
|
<!-- Option Set.-->
|
||||||
|
<option value="1">COM_COMPONENTBUILDER_CONFIG_LOCAL_FOLDER</option>
|
||||||
|
<option value="2">COM_COMPONENTBUILDER_CONFIG_REMOTE_SERVER</option>
|
||||||
|
</field>
|
||||||
|
<!-- Cronjob_backup_server Field. Type: Servers. (custom) -->
|
||||||
|
<field type="servers"
|
||||||
|
name="cronjob_backup_server"
|
||||||
|
label="COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_SERVER_LABEL"
|
||||||
|
description="COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_SERVER_DESCRIPTION"
|
||||||
|
class="list_class"
|
||||||
|
multiple="false"
|
||||||
|
default="0"
|
||||||
|
showon="cronjob_backup_type:2"
|
||||||
|
button="true" />
|
||||||
<!-- Cronjob_backup_folder_path Field. Type: Text. (joomla) -->
|
<!-- Cronjob_backup_folder_path Field. Type: Text. (joomla) -->
|
||||||
<field type="text"
|
<field type="text"
|
||||||
name="cronjob_backup_folder_path"
|
name="cronjob_backup_folder_path"
|
||||||
@ -560,7 +581,8 @@
|
|||||||
required="false"
|
required="false"
|
||||||
filter="PATH"
|
filter="PATH"
|
||||||
message="COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_MESSAGE"
|
message="COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_MESSAGE"
|
||||||
hint="COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_HINT" />
|
hint="COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_HINT"
|
||||||
|
showon="cronjob_backup_type:1" />
|
||||||
<!-- Backup_email Field. Type: Text. (joomla) -->
|
<!-- Backup_email Field. Type: Text. (joomla) -->
|
||||||
<field type="text"
|
<field type="text"
|
||||||
name="backup_email"
|
name="backup_email"
|
||||||
|
@ -242,17 +242,20 @@ class ComponentbuilderControllerJoomla_components extends JControllerAdmin
|
|||||||
|
|
||||||
public function backup()
|
public function backup()
|
||||||
{
|
{
|
||||||
// get params
|
// get params first
|
||||||
if (!isset($this->params) || !ComponentbuilderHelper::checkObject($this->params))
|
if (!isset($this->params) || !ComponentbuilderHelper::checkObject($this->params))
|
||||||
{
|
{
|
||||||
$this->params = JComponentHelper::getParams('com_componentbuilder');
|
$this->params = JComponentHelper::getParams('com_componentbuilder');
|
||||||
}
|
}
|
||||||
// get all component IDs to backup
|
|
||||||
$pks = componentbuilderHelper::getComponentIDs();
|
|
||||||
// Get the model
|
// Get the model
|
||||||
$model = componentbuilderHelper::getModel('joomla_components', JPATH_ADMINISTRATOR . '/components/com_componentbuilder');
|
$model = componentbuilderHelper::getModel('joomla_components', JPATH_ADMINISTRATOR . '/components/com_componentbuilder');
|
||||||
// set user
|
// set user
|
||||||
$model->user = $this->getApiUser();
|
$model->user = $this->getApiUser();
|
||||||
|
// check if export is allowed for this user. (we need this sorry)
|
||||||
|
if ($model->user->authorise('joomla_component.export', 'com_componentbuilder') && $model->user->authorise('core.export', 'com_componentbuilder'))
|
||||||
|
{
|
||||||
|
// get all component IDs to backup
|
||||||
|
$pks = componentbuilderHelper::getComponentIDs();
|
||||||
// make sure to set active type to backup
|
// make sure to set active type to backup
|
||||||
$model->activeType = 'manualBackup';
|
$model->activeType = 'manualBackup';
|
||||||
// set auto loader
|
// set auto loader
|
||||||
@ -378,11 +381,24 @@ class ComponentbuilderControllerJoomla_components extends JControllerAdmin
|
|||||||
if ('backup' === 'manualBackup')
|
if ('backup' === 'manualBackup')
|
||||||
{
|
{
|
||||||
echo "# " . $backupNoticeStatus . "\n" .implode("\n", $backupNotice);
|
echo "# " . $backupNoticeStatus . "\n" .implode("\n", $backupNotice);
|
||||||
|
// clear session
|
||||||
|
JFactory::getApplication()->getSession()->destroy();
|
||||||
jexit();
|
jexit();
|
||||||
}
|
}
|
||||||
$this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=joomla_components', false), implode("<br />", $backupNotice), $backupNoticeStatus);
|
$this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=joomla_components', false), implode("<br />", $backupNotice), $backupNoticeStatus);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// quite only if auto backup (adding this script from custom code :)
|
||||||
|
if ('backup' === 'manualBackup')
|
||||||
|
{
|
||||||
|
echo "# Error\n".JText::_('COM_COMPONENTBUILDER_ACCESS_DENIED');
|
||||||
|
// clear session
|
||||||
|
JFactory::getApplication()->getSession()->destroy();
|
||||||
|
jexit();
|
||||||
|
}
|
||||||
|
$this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=joomla_components', false), JText::_('COM_COMPONENTBUILDER_ACCESS_DENIED'), 'Error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
protected function getApiUser()
|
protected function getApiUser()
|
||||||
{
|
{
|
||||||
|
@ -318,37 +318,10 @@ class Compiler extends Infusion
|
|||||||
// make sure we have the correct file
|
// make sure we have the correct file
|
||||||
if (JFile::exists($xml_update_server_path) && isset($this->componentData->update_server))
|
if (JFile::exists($xml_update_server_path) && isset($this->componentData->update_server))
|
||||||
{
|
{
|
||||||
// use FTP
|
// move to server
|
||||||
if ($this->componentData->update_server_protocol == 1)
|
ComponentbuilderHelper::moveToServer($xml_update_server_path, $this->updateServerFileName . '.xml', (int) $this->componentData->update_server, $this->componentData->update_server_protocol);
|
||||||
{
|
|
||||||
// get server details
|
|
||||||
if ($ftp = ComponentbuilderHelper::getServer((int) $this->componentData->update_server, 1))
|
|
||||||
{
|
|
||||||
// now move the file
|
|
||||||
if (!$ftp->store($xml_update_server_path, null))
|
|
||||||
{
|
|
||||||
$this->app->enqueueMessage(JText::sprintf('The <b>%s</b> file could not be moved to <b>%s</b> server.', $this->updateServerFileName . '.xml', $$ftp->remote_server_name[(int) $this->componentData->update_server]), 'Error');
|
|
||||||
}
|
|
||||||
// remove the local file
|
// remove the local file
|
||||||
JFile::delete($xml_update_server_path);
|
JFile::delete($xml_update_server_path);
|
||||||
// close the connection
|
|
||||||
$ftp->quit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// use SFTP
|
|
||||||
elseif ($this->componentData->update_server_protocol == 2)
|
|
||||||
{
|
|
||||||
if ($sftp = ComponentbuilderHelper::getServer((int) $this->componentData->update_server, 2))
|
|
||||||
{
|
|
||||||
// now move the file
|
|
||||||
if (!$sftp->put($sftp->remote_server_path[(int) $this->componentData->update_server] . $this->updateServerFileName . '.xml', ComponentbuilderHelper::getFileContents($xml_update_server_path, null)))
|
|
||||||
{
|
|
||||||
$this->app->enqueueMessage(JText::sprintf('The <b>%s</b> file could not be moved to <b>%s</b> path on <b>%s</b> server.', $this->updateServerFileName . '.xml', $sftp->remote_server_path[(int) $this->componentData->update_server], $sftp->remote_server_name[(int) $this->componentData->update_server]), 'Error');
|
|
||||||
}
|
|
||||||
// remove the local file
|
|
||||||
JFile::delete($xml_update_server_path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -519,32 +492,8 @@ class Compiler extends Infusion
|
|||||||
// make sure we have the correct file
|
// make sure we have the correct file
|
||||||
if (isset($this->componentData->sales_server))
|
if (isset($this->componentData->sales_server))
|
||||||
{
|
{
|
||||||
// use FTP
|
// move to server
|
||||||
if ($this->componentData->sales_server_protocol == 1)
|
ComponentbuilderHelper::moveToServer($this->filepath, $this->componentSalesName . '.zip', (int) $this->componentData->sales_server, $this->componentData->sales_server_protocol);
|
||||||
{
|
|
||||||
if ($ftp = ComponentbuilderHelper::getServer((int) $this->componentData->sales_server, 1))
|
|
||||||
{
|
|
||||||
// now move the file
|
|
||||||
if (!$ftp->store($xml_update_server_path, $this->componentSalesName . '.zip'))
|
|
||||||
{
|
|
||||||
$this->app->enqueueMessage(JText::sprintf('The <b>%s</b> file could not be moved to <b>%s</b> server.', $this->componentSalesName . '.zip', $ftp->remote_server_name[(int) $this->componentData->sales_server]), 'Error');
|
|
||||||
}
|
|
||||||
// close the connection
|
|
||||||
$ftp->quit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// use SFTP
|
|
||||||
elseif ($this->componentData->sales_server_protocol == 2)
|
|
||||||
{
|
|
||||||
if ($sftp = ComponentbuilderHelper::getServer((int) $this->componentData->sales_server, 2))
|
|
||||||
{
|
|
||||||
// now move the file
|
|
||||||
if (!$sftp->put($sftp->remote_server_path[(int) $this->componentData->sales_server] . $this->componentSalesName . '.zip', ComponentbuilderHelper::getFileContents($this->filepath, null)))
|
|
||||||
{
|
|
||||||
$this->app->enqueueMessage(JText::sprintf('The <b>%s</b> file could not be moved to <b>%s</b> path on <b>%s</b> server.', $this->componentSalesName . '.zip', $sftp->remote_server_path[(int) $this->componentData->sales_server], $sftp->remote_server_name[(int) $this->componentData->sales_server]), 'Error');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// remove the component folder since we are done
|
// remove the component folder since we are done
|
||||||
|
@ -1953,6 +1953,49 @@ abstract class ComponentbuilderHelper
|
|||||||
require_once JPATH_ADMINISTRATOR.'/components/com_componentbuilder/helpers/vendor/autoload.php';
|
require_once JPATH_ADMINISTRATOR.'/components/com_componentbuilder/helpers/vendor/autoload.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move File to Server
|
||||||
|
*
|
||||||
|
* @param string $localPath The local path to the file
|
||||||
|
* @param string $fileName The the actual file name
|
||||||
|
* @param int $serverID The server local id to use
|
||||||
|
* @param int $protocol The server protocol to use
|
||||||
|
* @param string $permission The permission validation area
|
||||||
|
*
|
||||||
|
* @return bool true on success
|
||||||
|
**/
|
||||||
|
public static function moveToServer($localPath, $fileName, $serverID, $protocol = null, $permission = 'core.export')
|
||||||
|
{
|
||||||
|
// get the server
|
||||||
|
if ($server = self::getServer( (int) $serverID, $protocol, $permission))
|
||||||
|
{
|
||||||
|
// use the FTP protocol
|
||||||
|
if (1 == $server->jcb_protocol)
|
||||||
|
{
|
||||||
|
// now move the file
|
||||||
|
if (!$server->store($localPath, $fileName))
|
||||||
|
{
|
||||||
|
JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_SERVER', $fileName, $server->jcb_remote_server_name[(int) $serverID]), 'Error');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// close the connection
|
||||||
|
$server->quit();
|
||||||
|
}
|
||||||
|
// use the SFTP protocol
|
||||||
|
elseif (2 == $server->jcb_protocol)
|
||||||
|
{
|
||||||
|
// now move the file
|
||||||
|
if (!$server->put($server->jcb_remote_server_path[(int) $serverID] . $fileName, self::getFileContents($localPath, null)))
|
||||||
|
{
|
||||||
|
JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_PATH_ON_BSB_SERVER', $fileName, $server->jcb_remote_server_path[(int) $serverID], $server->jcb_remote_server_name[(int) $serverID]), 'Error');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the SFTP objects
|
* the SFTP objects
|
||||||
**/
|
**/
|
||||||
@ -1972,8 +2015,13 @@ abstract class ComponentbuilderHelper
|
|||||||
*
|
*
|
||||||
* @return object on success server object
|
* @return object on success server object
|
||||||
**/
|
**/
|
||||||
public static function getServer($serverID, $protocol, $permission = 'core.export')
|
public static function getServer($serverID, $protocol = null, $permission = 'core.export')
|
||||||
{
|
{
|
||||||
|
// if not protocol is given get it (sad I know)
|
||||||
|
if (!$protocol)
|
||||||
|
{
|
||||||
|
$protocol = self::getVar('server', (int) $serverID, 'id', 'protocol');
|
||||||
|
}
|
||||||
// return the server object
|
// return the server object
|
||||||
switch ($protocol)
|
switch ($protocol)
|
||||||
{
|
{
|
||||||
@ -2016,6 +2064,8 @@ abstract class ComponentbuilderHelper
|
|||||||
$server->port = (isset($server->port) && is_int($server->port) && $server->port > 0) ? $server->port : 22;
|
$server->port = (isset($server->port) && is_int($server->port) && $server->port > 0) ? $server->port : 22;
|
||||||
// open the connection
|
// open the connection
|
||||||
self::$sftp[$server->cache] = new phpseclib\Net\SFTP($server->host, $server->port);
|
self::$sftp[$server->cache] = new phpseclib\Net\SFTP($server->host, $server->port);
|
||||||
|
// heads-up on protocol
|
||||||
|
self::$sftp[$server->cache]->jcb_protocol = 2; // SFTP <-- if called not knowing what type of protocol is being used
|
||||||
// now login based on authentication type
|
// now login based on authentication type
|
||||||
switch($server->authentication)
|
switch($server->authentication)
|
||||||
{
|
{
|
||||||
@ -2077,14 +2127,14 @@ abstract class ComponentbuilderHelper
|
|||||||
if (isset(self::$sftp[$server->cache]) && self::checkObject(self::$sftp[$server->cache]))
|
if (isset(self::$sftp[$server->cache]) && self::checkObject(self::$sftp[$server->cache]))
|
||||||
{
|
{
|
||||||
// set the unique buckets
|
// set the unique buckets
|
||||||
if (!isset(self::$sftp[$server->cache]->remote_server_name))
|
if (!isset(self::$sftp[$server->cache]->jcb_remote_server_name))
|
||||||
{
|
{
|
||||||
self::$sftp[$server->cache]->remote_server_name = array();
|
self::$sftp[$server->cache]->jcb_remote_server_name = array();
|
||||||
self::$sftp[$server->cache]->remote_server_path = array();
|
self::$sftp[$server->cache]->jcb_remote_server_path = array();
|
||||||
}
|
}
|
||||||
// always set the name and remote server path
|
// always set the name and remote server path
|
||||||
self::$sftp[$server->cache]->remote_server_name[$serverID] = $server->name;
|
self::$sftp[$server->cache]->jcb_remote_server_name[$serverID] = $server->name;
|
||||||
self::$sftp[$server->cache]->remote_server_path[$serverID] = (self::checkString($server->path) && $server->path !== '/') ? $server->path : '';
|
self::$sftp[$server->cache]->jcb_remote_server_path[$serverID] = (self::checkString($server->path) && $server->path !== '/') ? $server->path : '';
|
||||||
// return the sftp object
|
// return the sftp object
|
||||||
return self::$sftp[$server->cache];
|
return self::$sftp[$server->cache];
|
||||||
}
|
}
|
||||||
@ -2109,7 +2159,7 @@ abstract class ComponentbuilderHelper
|
|||||||
if (isset(self::$ftp[$server->cache]) && self::$ftp[$server->cache] instanceof JClientFtp)
|
if (isset(self::$ftp[$server->cache]) && self::$ftp[$server->cache] instanceof JClientFtp)
|
||||||
{
|
{
|
||||||
// always set the name and remote server path
|
// always set the name and remote server path
|
||||||
self::$ftp[$server->cache]->remote_server_name[$serverID] = $server->name;
|
self::$ftp[$server->cache]->jcb_remote_server_name[$serverID] = $server->name;
|
||||||
// if still connected we are ready to go
|
// if still connected we are ready to go
|
||||||
if (self::$ftp[$server->cache]->isConnected())
|
if (self::$ftp[$server->cache]->isConnected())
|
||||||
{
|
{
|
||||||
@ -2162,13 +2212,15 @@ abstract class ComponentbuilderHelper
|
|||||||
// check if we are connected
|
// check if we are connected
|
||||||
if (self::$ftp[$server->cache] instanceof JClientFtp && self::$ftp[$server->cache]->isConnected())
|
if (self::$ftp[$server->cache] instanceof JClientFtp && self::$ftp[$server->cache]->isConnected())
|
||||||
{
|
{
|
||||||
|
// heads-up on protocol
|
||||||
|
self::$ftp[$server->cache]->jcb_protocol = 1; // FTP <-- if called not knowing what type of protocol is being used
|
||||||
// set the unique buckets
|
// set the unique buckets
|
||||||
if (!isset(self::$ftp[$server->cache]->remote_server_name))
|
if (!isset(self::$ftp[$server->cache]->jcb_remote_server_name))
|
||||||
{
|
{
|
||||||
self::$ftp[$server->cache]->remote_server_name = array();
|
self::$ftp[$server->cache]->jcb_remote_server_name = array();
|
||||||
}
|
}
|
||||||
// always set the name and remote server path
|
// always set the name and remote server path
|
||||||
self::$ftp[$server->cache]->remote_server_name[$serverID] = $server->name;
|
self::$ftp[$server->cache]->jcb_remote_server_name[$serverID] = $server->name;
|
||||||
// return the FTP instance
|
// return the FTP instance
|
||||||
return self::$ftp[$server->cache];
|
return self::$ftp[$server->cache];
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
COM_COMPONENTBUILDER="Component Builder"
|
COM_COMPONENTBUILDER="Component Builder"
|
||||||
COM_COMPONENTBUILDER_ABOVE_TABS="Above Tabs"
|
COM_COMPONENTBUILDER_ABOVE_TABS="Above Tabs"
|
||||||
COM_COMPONENTBUILDER_ACCESS_BULK_TOOLS="Access Bulk Tools"
|
COM_COMPONENTBUILDER_ACCESS_BULK_TOOLS="Access Bulk Tools"
|
||||||
|
COM_COMPONENTBUILDER_ACCESS_DENIED="Access denied!"
|
||||||
COM_COMPONENTBUILDER_ACTIVE_ONLY_FOUR_TEXT_FIELD="Active (only 4 text_field)"
|
COM_COMPONENTBUILDER_ACTIVE_ONLY_FOUR_TEXT_FIELD="Active (only 4 text_field)"
|
||||||
COM_COMPONENTBUILDER_ADD_ACCESS="Add Access"
|
COM_COMPONENTBUILDER_ADD_ACCESS="Add Access"
|
||||||
COM_COMPONENTBUILDER_ADD_CORRESPONDING_LINE_NUMBERS_TO_THE_DYNAMIC_COMMENTS_SO_TO_SEE_WHERE_IN_THE_COMPILER_THE_LINES_OF_CODE_WAS_BUILD_THIS_WILL_HELP_IF_YOU_NEED_TO_GET_MORE_TECHNICAL_WITH_AN_ISSUE_ON_GITHUB_OR_EVEN_FOR_YOUR_OWN_DEBUGGING="Add corresponding line numbers to the dynamic comments, so to see where in the compiler the lines of code was build. This will help if you need to get more technical with an issue on github, or even for your own debugging."
|
COM_COMPONENTBUILDER_ADD_CORRESPONDING_LINE_NUMBERS_TO_THE_DYNAMIC_COMMENTS_SO_TO_SEE_WHERE_IN_THE_COMPILER_THE_LINES_OF_CODE_WAS_BUILD_THIS_WILL_HELP_IF_YOU_NEED_TO_GET_MORE_TECHNICAL_WITH_AN_ISSUE_ON_GITHUB_OR_EVEN_FOR_YOUR_OWN_DEBUGGING="Add corresponding line numbers to the dynamic comments, so to see where in the compiler the lines of code was build. This will help if you need to get more technical with an issue on github, or even for your own debugging."
|
||||||
@ -2241,6 +2242,10 @@ COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_DESCRIPTION="Here you can
|
|||||||
COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_HINT="/home/user/fullbackup"
|
COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_HINT="/home/user/fullbackup"
|
||||||
COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_LABEL="Cronjob Backup Folder Path"
|
COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_LABEL="Cronjob Backup Folder Path"
|
||||||
COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_MESSAGE="Error! Please add some text here."
|
COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_MESSAGE="Error! Please add some text here."
|
||||||
|
COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_SERVER_DESCRIPTION="Select your backup server for JCB package backups."
|
||||||
|
COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_SERVER_LABEL="Cronjob Backup Server"
|
||||||
|
COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_TYPE_DESCRIPTION="Select how you would like to backup JCB"
|
||||||
|
COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_TYPE_LABEL="Cronjob Backup type"
|
||||||
COM_COMPONENTBUILDER_CONFIG_CUSTOM_FOLDER_PATH_DESCRIPTION="Here you can set the path to the custom folder"
|
COM_COMPONENTBUILDER_CONFIG_CUSTOM_FOLDER_PATH_DESCRIPTION="Here you can set the path to the custom folder"
|
||||||
COM_COMPONENTBUILDER_CONFIG_CUSTOM_FOLDER_PATH_HINT="/home/user/custom"
|
COM_COMPONENTBUILDER_CONFIG_CUSTOM_FOLDER_PATH_HINT="/home/user/custom"
|
||||||
COM_COMPONENTBUILDER_CONFIG_CUSTOM_FOLDER_PATH_LABEL="Custom Folder Path"
|
COM_COMPONENTBUILDER_CONFIG_CUSTOM_FOLDER_PATH_LABEL="Custom Folder Path"
|
||||||
@ -2330,6 +2335,7 @@ COM_COMPONENTBUILDER_CONFIG_GLOBAL_DESC="The Global Parameters"
|
|||||||
COM_COMPONENTBUILDER_CONFIG_GLOBAL_LABEL="Global"
|
COM_COMPONENTBUILDER_CONFIG_GLOBAL_LABEL="Global"
|
||||||
COM_COMPONENTBUILDER_CONFIG_GRADIANT_LOAD="Gradient"
|
COM_COMPONENTBUILDER_CONFIG_GRADIANT_LOAD="Gradient"
|
||||||
COM_COMPONENTBUILDER_CONFIG_INACTIVE="Inactive"
|
COM_COMPONENTBUILDER_CONFIG_INACTIVE="Inactive"
|
||||||
|
COM_COMPONENTBUILDER_CONFIG_LOCAL_FOLDER="Local Folder"
|
||||||
COM_COMPONENTBUILDER_CONFIG_MAILER_DESCRIPTION="Select what mailer you would like to use to send emails."
|
COM_COMPONENTBUILDER_CONFIG_MAILER_DESCRIPTION="Select what mailer you would like to use to send emails."
|
||||||
COM_COMPONENTBUILDER_CONFIG_MAILER_LABEL="Mailer"
|
COM_COMPONENTBUILDER_CONFIG_MAILER_LABEL="Mailer"
|
||||||
COM_COMPONENTBUILDER_CONFIG_MAILONLINE_DESCRIPTION="Warning this will stop all emails from going out."
|
COM_COMPONENTBUILDER_CONFIG_MAILONLINE_DESCRIPTION="Warning this will stop all emails from going out."
|
||||||
@ -2384,6 +2390,7 @@ COM_COMPONENTBUILDER_CONFIG_PACKAGE_NAME_PLAEHOLDERS_LABEL="Package Name Placeho
|
|||||||
COM_COMPONENTBUILDER_CONFIG_PERCENTAGELANGUAGEADD_DESCRIPTION="Select percentage any language should be translated before the system should add the language to the component during compilation."
|
COM_COMPONENTBUILDER_CONFIG_PERCENTAGELANGUAGEADD_DESCRIPTION="Select percentage any language should be translated before the system should add the language to the component during compilation."
|
||||||
COM_COMPONENTBUILDER_CONFIG_PERCENTAGELANGUAGEADD_LABEL="Add Language if %? ready."
|
COM_COMPONENTBUILDER_CONFIG_PERCENTAGELANGUAGEADD_LABEL="Add Language if %? ready."
|
||||||
COM_COMPONENTBUILDER_CONFIG_PHP_MAIL="PHP Mail"
|
COM_COMPONENTBUILDER_CONFIG_PHP_MAIL="PHP Mail"
|
||||||
|
COM_COMPONENTBUILDER_CONFIG_REMOTE_SERVER="Remote Server"
|
||||||
COM_COMPONENTBUILDER_CONFIG_REPLYNAME_DESCRIPTION="Text displayed in the header "Reply To:" field when replying to the site email. Usually the the person that receives the response. (leave blank for none)"
|
COM_COMPONENTBUILDER_CONFIG_REPLYNAME_DESCRIPTION="Text displayed in the header "Reply To:" field when replying to the site email. Usually the the person that receives the response. (leave blank for none)"
|
||||||
COM_COMPONENTBUILDER_CONFIG_REPLYNAME_HINT="Reply Name Here"
|
COM_COMPONENTBUILDER_CONFIG_REPLYNAME_HINT="Reply Name Here"
|
||||||
COM_COMPONENTBUILDER_CONFIG_REPLYNAME_LABEL="Reply to Name"
|
COM_COMPONENTBUILDER_CONFIG_REPLYNAME_LABEL="Reply to Name"
|
||||||
@ -6134,6 +6141,8 @@ COM_COMPONENTBUILDER_THERE_ARE_NO_SNIPPETS_TO_UPDATE_AT_THIS_TIME="There are no
|
|||||||
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_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, <b>no view or id found in session or view not allowed to access area</b>, we could not load any linked to values. Please inform your system administrator!"
|
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, <b>no view or id found in session or view not allowed to access area</b>, 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 <b>phpseclib\NET\SFTP</b> 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_ADMINHELPERSVENDOR_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The <b>phpseclib\NET\SFTP</b> 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_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_PATH_ON_BSB_SERVER="The <b>%s</b> file could not be moved to <b>%s</b> path on <b>%s</b> server."
|
||||||
|
COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_SERVER="The <b>%s</b> file could not be moved to <b>%s</b> server."
|
||||||
COM_COMPONENTBUILDER_THE_BSB_LIBRARY_CAN_NOT_BE_DELETED_OR_THINGS_WILL_BREAK="The <b>%s</b> library can not be deleted, or things will break."
|
COM_COMPONENTBUILDER_THE_BSB_LIBRARY_CAN_NOT_BE_DELETED_OR_THINGS_WILL_BREAK="The <b>%s</b> library can not be deleted, or things will break."
|
||||||
COM_COMPONENTBUILDER_THE_COMPONENT_ADMIN_VIEWS="The component admin views"
|
COM_COMPONENTBUILDER_THE_COMPONENT_ADMIN_VIEWS="The component admin views"
|
||||||
COM_COMPONENTBUILDER_THE_COMPONENT_CONFIG="The component config"
|
COM_COMPONENTBUILDER_THE_COMPONENT_CONFIG="The component config"
|
||||||
|
@ -1772,7 +1772,7 @@ class ComponentbuilderModelAjax extends JModelList
|
|||||||
public function usedin($functioName, $id, $targeting)
|
public function usedin($functioName, $id, $targeting)
|
||||||
{
|
{
|
||||||
// get the table being targeted
|
// get the table being targeted
|
||||||
if ($target = $this->getTableQueryOptions($targeting))
|
if ($target = $this->getCodeSearchKeys($targeting, 'query'))
|
||||||
{
|
{
|
||||||
$db = JFactory::getDbo();
|
$db = JFactory::getDbo();
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
@ -1842,114 +1842,139 @@ class ComponentbuilderModelAjax extends JModelList
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the table query to search for function used in
|
* Get the keys of the values to search custom code in
|
||||||
*
|
*
|
||||||
* @param string $targe The table targeted
|
* @param string $targe The table targeted
|
||||||
|
* @param string $type The type of get
|
||||||
*
|
*
|
||||||
* @return array The query options
|
* @return array The query options
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
protected function getTableQueryOptions($target)
|
protected function getCodeSearchKeys($target, $type = null)
|
||||||
{
|
{
|
||||||
$query = array();
|
// set the template if type is query
|
||||||
// #__componentbuilder_joomla_component as a
|
if ('query' === $type)
|
||||||
$query['a'] = array();
|
{
|
||||||
$query['a']['table'] = 'joomla_component';
|
$tables = array(
|
||||||
$query['a']['view'] = 'joomla_components';
|
'a' => 'joomla_component',
|
||||||
$query['a']['select'] = array('id', 'system_name', 'php_preflight_install','php_postflight_install',
|
'b' => 'admin_view',
|
||||||
|
'c' => 'custom_admin_view',
|
||||||
|
'd' => 'site_view',
|
||||||
|
'e' => 'field',
|
||||||
|
'f' => 'dynamic_get',
|
||||||
|
'g' => 'template',
|
||||||
|
'h' => 'layout',
|
||||||
|
'i' => 'component_dashboard',
|
||||||
|
'j' => 'library',
|
||||||
|
);
|
||||||
|
// check if we have a match
|
||||||
|
if (isset($tables[$target]))
|
||||||
|
{
|
||||||
|
$target = $tables[$target];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// start target arrays
|
||||||
|
$targets = array();
|
||||||
|
// #__componentbuilder_joomla_component
|
||||||
|
$targets['joomla_component'] = array();
|
||||||
|
$targets['joomla_component']['search'] = array('id', 'system_name', 'php_preflight_install','php_postflight_install',
|
||||||
'php_preflight_update','php_postflight_update','php_method_uninstall',
|
'php_preflight_update','php_postflight_update','php_method_uninstall',
|
||||||
'php_helper_admin','php_admin_event','php_helper_both','php_helper_site',
|
'php_helper_admin','php_admin_event','php_helper_both','php_helper_site',
|
||||||
'php_site_event','javascript');
|
'php_site_event','javascript');
|
||||||
$query['a']['not_base64'] = array();
|
$targets['joomla_component']['view'] = 'joomla_components';
|
||||||
$query['a']['name'] = 'system_name';
|
$targets['joomla_component']['not_base64'] = array();
|
||||||
|
$targets['joomla_component']['name'] = 'system_name';
|
||||||
|
|
||||||
// #__componentbuilder_admin_view as b
|
// #__componentbuilder_component_dashboard
|
||||||
$query['b'] = array();
|
$targets['component_dashboard'] = array();
|
||||||
$query['b']['table'] = 'admin_view';
|
$targets['component_dashboard']['search'] = array('id', 'joomla_component', 'php_dashboard_methods','dashboard_tab');
|
||||||
$query['b']['view'] = 'admin_views';
|
$targets['component_dashboard']['view'] = 'components_dashboard';
|
||||||
$query['b']['select'] = array('id', 'system_name', 'javascript_view_file','javascript_view_footer','javascript_views_file',
|
$targets['component_dashboard']['not_base64'] = array('dashboard_tab' => 'json');
|
||||||
'javascript_views_footer','php_getitem','php_save','php_postsavehook','php_getitems',
|
$targets['component_dashboard']['name'] = 'joomla_component->id:joomla_component.system_name';
|
||||||
'php_getitems_after_all','php_getlistquery','php_allowedit','php_before_delete',
|
|
||||||
'php_after_delete','php_before_publish','php_after_publish','php_batchcopy',
|
|
||||||
'php_batchmove','php_document','php_model','php_controller','php_import_display',
|
|
||||||
'php_import','php_import_setdata','php_import_save','html_import_view','php_ajaxmethod');
|
|
||||||
$query['b']['not_base64'] = array();
|
|
||||||
$query['b']['name'] = 'system_name';
|
|
||||||
|
|
||||||
// #__componentbuilder_custom_admin_view as c
|
// #__componentbuilder_admin_view
|
||||||
$query['c'] = array();
|
$targets['admin_view'] = array();
|
||||||
$query['c']['table'] = 'custom_admin_view';
|
$targets['admin_view']['search'] = array('id', 'system_name', 'javascript_view_file','javascript_view_footer',
|
||||||
$query['c']['view'] = 'custom_admin_views';
|
'javascript_views_file','javascript_views_footer','html_import_view',
|
||||||
$query['c']['select'] = array('id', 'system_name', 'default','php_view','php_jview','php_jview_display','php_document',
|
'php_after_delete','php_after_publish','php_ajaxmethod','php_allowedit','php_batchcopy',
|
||||||
|
'php_batchmove','php_before_delete','php_before_publish','php_before_save','php_controller',
|
||||||
|
'php_controller_list','php_document','php_getitem','php_getitems','php_getitems_after_all',
|
||||||
|
'php_getlistquery','php_import','php_import_display','php_import_ext','php_import_headers',
|
||||||
|
'php_import_save','php_import_setdata','php_model','php_model_list','php_postsavehook','php_save');
|
||||||
|
$targets['admin_view']['view'] = 'admin_views';
|
||||||
|
$targets['admin_view']['not_base64'] = array();
|
||||||
|
$targets['admin_view']['name'] = 'system_name';
|
||||||
|
|
||||||
|
// #__componentbuilder_custom_admin_view
|
||||||
|
$targets['custom_admin_view'] = array();
|
||||||
|
$targets['custom_admin_view']['search'] = array('id', 'system_name', 'default','php_view','php_jview','php_jview_display','php_document',
|
||||||
'js_document','css_document','css','php_ajaxmethod','php_model','php_controller');
|
'js_document','css_document','css','php_ajaxmethod','php_model','php_controller');
|
||||||
$query['c']['not_base64'] = array();
|
$targets['custom_admin_view']['view'] = 'custom_admin_views';
|
||||||
$query['c']['name'] = 'system_name';
|
$targets['custom_admin_view']['not_base64'] = array();
|
||||||
|
$targets['custom_admin_view']['name'] = 'system_name';
|
||||||
|
|
||||||
// #__componentbuilder_site_view as d
|
// #__componentbuilder_site_view
|
||||||
$query['d'] = array();
|
$targets['site_view'] = array();
|
||||||
$query['d']['table'] = 'site_view';
|
$targets['site_view']['search'] = array('id', 'system_name', 'default','php_view','php_jview','php_jview_display','php_document',
|
||||||
$query['d']['view'] = 'site_views';
|
|
||||||
$query['d']['select'] = array('id', 'system_name', 'default','php_view','php_jview','php_jview_display','php_document',
|
|
||||||
'js_document','css_document','css','php_ajaxmethod','php_model','php_controller');
|
'js_document','css_document','css','php_ajaxmethod','php_model','php_controller');
|
||||||
$query['d']['not_base64'] = array();
|
$targets['site_view']['view'] = 'site_views';
|
||||||
$query['d']['name'] = 'system_name';
|
$targets['site_view']['not_base64'] = array();
|
||||||
|
$targets['site_view']['name'] = 'system_name';
|
||||||
|
|
||||||
// #__componentbuilder_field as e
|
// #__componentbuilder_field
|
||||||
$query['e'] = array();
|
$targets['field'] = array();
|
||||||
$query['e']['table'] = 'field';
|
$targets['field']['search'] = array('id', 'name', 'xml','javascript_view_footer','javascript_views_footer');
|
||||||
$query['e']['view'] = 'fields';
|
$targets['field']['view'] = 'fields';
|
||||||
$query['e']['select'] = array('id', 'name', 'xml','javascript_view_footer','javascript_views_footer');
|
$targets['field']['not_base64'] = array('xml' => 'json');
|
||||||
$query['e']['not_base64'] = array('xml' => 'json');
|
$targets['field']['name'] = 'name';
|
||||||
$query['e']['name'] = 'name';
|
|
||||||
|
|
||||||
// #__componentbuilder_dynamic_get as f
|
// #__componentbuilder_dynamic_get
|
||||||
$query['f'] = array();
|
$targets['dynamic_get'] = array();
|
||||||
$query['f']['table'] = 'dynamic_get';
|
$targets['dynamic_get']['search'] = array('id', 'name', 'php_before_getitem','php_after_getitem','php_before_getitems','php_after_getitems',
|
||||||
$query['f']['view'] = 'dynamic_gets';
|
|
||||||
$query['f']['select'] = array('id', 'name', 'php_before_getitem','php_after_getitem','php_before_getitems','php_after_getitems',
|
|
||||||
'php_getlistquery');
|
'php_getlistquery');
|
||||||
$query['f']['not_base64'] = array();
|
$targets['dynamic_get']['view'] = 'dynamic_gets';
|
||||||
$query['f']['name'] = 'name';
|
$targets['dynamic_get']['not_base64'] = array();
|
||||||
|
$targets['dynamic_get']['name'] = 'name';
|
||||||
|
|
||||||
// #__componentbuilder_template as g
|
// #__componentbuilder_template
|
||||||
$query['g'] = array();
|
$targets['template'] = array();
|
||||||
$query['g']['table'] = 'template';
|
$targets['template']['search'] = array('id', 'name', 'php_view','template');
|
||||||
$query['g']['view'] = 'templates';
|
$targets['template']['view'] = 'templates';
|
||||||
$query['g']['select'] = array('id', 'name', 'php_view','template');
|
$targets['template']['not_base64'] = array();
|
||||||
$query['g']['not_base64'] = array();
|
$targets['template']['name'] = 'name';
|
||||||
$query['g']['name'] = 'name';
|
|
||||||
|
|
||||||
// #__componentbuilder_layout as h
|
// #__componentbuilder_layout
|
||||||
$query['h'] = array();
|
$targets['layout'] = array();
|
||||||
$query['h']['table'] = 'layout';
|
$targets['layout']['search'] = array('id', 'name', 'php_view','layout');
|
||||||
$query['h']['view'] = 'layouts';
|
$targets['layout']['view'] = 'layouts';
|
||||||
$query['h']['select'] = array('id', 'name', 'php_view','layout');
|
$targets['layout']['not_base64'] = array();
|
||||||
$query['h']['not_base64'] = array();
|
$targets['layout']['name'] = 'name';
|
||||||
$query['h']['name'] = 'name';
|
|
||||||
|
|
||||||
// #__componentbuilder_component_dashboard as i
|
// #__componentbuilder_library
|
||||||
$query['i'] = array();
|
$targets['library'] = array();
|
||||||
$query['i']['table'] = 'component_dashboard';
|
$targets['library']['view'] = 'libraries';
|
||||||
$query['i']['view'] = 'components_dashboard';
|
$targets['library']['search'] = array('id', 'name', 'php_setdocument');
|
||||||
$query['i']['select'] = array('id', 'joomla_component', 'php_dashboard_methods','dashboard_tab');
|
$targets['library']['view'] = 'libraries';
|
||||||
$query['i']['not_base64'] = array('dashboard_tab' => 'json');
|
$targets['library']['not_base64'] = array();
|
||||||
$query['i']['name'] = 'joomla_component->id:joomla_component.system_name';
|
$targets['library']['name'] = 'name';
|
||||||
|
|
||||||
// #__componentbuilder_library as j
|
// return result ready for a.query
|
||||||
$query['j'] = array();
|
if ('query' === $type && isset($targets[$target]))
|
||||||
$query['j']['table'] = 'library';
|
|
||||||
$query['j']['view'] = 'libraries';
|
|
||||||
$query['j']['select'] = array('id', 'name', 'php_setdocument');
|
|
||||||
$query['j']['not_base64'] = array();
|
|
||||||
$query['j']['name'] = 'name';
|
|
||||||
|
|
||||||
// return the query string to search
|
|
||||||
if (isset($query[$target]))
|
|
||||||
{
|
{
|
||||||
// add the .a to the selection array
|
// add the .a to the selection array
|
||||||
$query[$target]['select'] = array_map( function($select) { return 'a.'.$select; },$query[$target]['select']);
|
$targets[$target]['select'] = array_map( function($select) { return 'a.'.$select; }, $targets[$target]['search']);
|
||||||
|
// also set the table
|
||||||
|
$targets[$target]['table'] = $target;
|
||||||
|
// remove search
|
||||||
|
unset($targets[$target]['search']);
|
||||||
// return
|
// return
|
||||||
return $query[$target];
|
return $targets[$target];
|
||||||
|
}
|
||||||
|
// return the query string to search
|
||||||
|
elseif (isset($targets[$target]))
|
||||||
|
{
|
||||||
|
// remove name and id
|
||||||
|
return $targets[$target];
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -151,7 +151,7 @@ class JFormFieldServers extends JFormFieldList
|
|||||||
{
|
{
|
||||||
$db = JFactory::getDBO();
|
$db = JFactory::getDBO();
|
||||||
$query = $db->getQuery(true);
|
$query = $db->getQuery(true);
|
||||||
$query->select($db->quoteName(array('a.id','a.name','a.protocol'),array('id','update_server_name', 'protocol')));
|
$query->select($db->quoteName(array('a.id','a.name','a.protocol'),array('id','cronjob_backup_server_name', 'protocol')));
|
||||||
$query->from($db->quoteName('#__componentbuilder_server', 'a'));
|
$query->from($db->quoteName('#__componentbuilder_server', 'a'));
|
||||||
$query->where($db->quoteName('a.published') . ' >= 1');
|
$query->where($db->quoteName('a.published') . ' >= 1');
|
||||||
$query->order('a.name ASC');
|
$query->order('a.name ASC');
|
||||||
@ -163,8 +163,8 @@ class JFormFieldServers extends JFormFieldList
|
|||||||
$options[] = JHtml::_('select.option', '', 'Select an option');
|
$options[] = JHtml::_('select.option', '', 'Select an option');
|
||||||
foreach($items as $item)
|
foreach($items as $item)
|
||||||
{
|
{
|
||||||
$item->protocol = ($item->protocol == 2) ? JText::_('SSH') : JText::_('FTP');
|
$item->protocol = ($item->protocol == 2) ? JText::_('SFTP') : JText::_('FTP');
|
||||||
$options[] = JHtml::_('select.option', $item->id, $item->update_server_name.' ['.$item->protocol.']');
|
$options[] = JHtml::_('select.option', $item->id, $item->cronjob_backup_server_name.' ['.$item->protocol.']');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $options;
|
return $options;
|
||||||
|
@ -136,7 +136,10 @@ class ComponentbuilderModelJoomla_components extends JModelList
|
|||||||
if (ComponentbuilderHelper::checkArray($items))
|
if (ComponentbuilderHelper::checkArray($items))
|
||||||
{
|
{
|
||||||
// set params
|
// set params
|
||||||
|
if (!ComponentbuilderHelper::checkObject($this->params))
|
||||||
|
{
|
||||||
$this->params = JComponentHelper::getParams('com_componentbuilder');
|
$this->params = JComponentHelper::getParams('com_componentbuilder');
|
||||||
|
}
|
||||||
// set custom folder path
|
// set custom folder path
|
||||||
$this->customPath = $this->params->get('custom_folder_path', JPATH_COMPONENT_ADMINISTRATOR.'/custom');
|
$this->customPath = $this->params->get('custom_folder_path', JPATH_COMPONENT_ADMINISTRATOR.'/custom');
|
||||||
// check what type of export or backup this is
|
// check what type of export or backup this is
|
||||||
@ -149,6 +152,13 @@ class ComponentbuilderModelJoomla_components extends JModelList
|
|||||||
$comConfig = JFactory::getConfig();
|
$comConfig = JFactory::getConfig();
|
||||||
$this->backupPath = $comConfig->get('tmp_path');
|
$this->backupPath = $comConfig->get('tmp_path');
|
||||||
}
|
}
|
||||||
|
// check what backup type we are working with here
|
||||||
|
$this->backupType = $this->params->get('cronjob_backup_type', 1); // 1 = local folder; 2 = remote server (default is local)
|
||||||
|
// if remote server get the ID
|
||||||
|
if (2 == $this->backupType)
|
||||||
|
{
|
||||||
|
$this->backupServer = $this->params->get('cronjob_backup_server', null);
|
||||||
|
}
|
||||||
// set the date array
|
// set the date array
|
||||||
$date = JFactory::getDate();
|
$date = JFactory::getDate();
|
||||||
$placeholderDate = array();
|
$placeholderDate = array();
|
||||||
@ -636,14 +646,20 @@ class ComponentbuilderModelJoomla_components extends JModelList
|
|||||||
// view icon
|
// view icon
|
||||||
$this->moveIt(array($item->icon), 'image');
|
$this->moveIt(array($item->icon), 'image');
|
||||||
}
|
}
|
||||||
// add snippets
|
// add snippets (was removed please use snippet importer)
|
||||||
|
if (isset($item->snippet) && is_numeric($item->snippet))
|
||||||
|
{
|
||||||
$this->setExportIDs((int) $item->snippet, 'snippet');
|
$this->setExportIDs((int) $item->snippet, 'snippet');
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// actions to take if table is template and layout
|
// actions to take if table is template and layout
|
||||||
if ('layout' === $table || 'template' === $table)
|
if ('layout' === $table || 'template' === $table)
|
||||||
{
|
{
|
||||||
// add snippets
|
// add snippets (was removed please use snippet importer)
|
||||||
|
if (isset($item->snippet) && is_numeric($item->snippet))
|
||||||
|
{
|
||||||
$this->setExportIDs((int) $item->snippet, 'snippet');
|
$this->setExportIDs((int) $item->snippet, 'snippet');
|
||||||
|
}
|
||||||
// search for templates & layouts
|
// search for templates & layouts
|
||||||
$this->getTemplateLayout(base64_decode($item->$table), $this->user);
|
$this->getTemplateLayout(base64_decode($item->$table), $this->user);
|
||||||
// add search array templates and layouts
|
// add search array templates and layouts
|
||||||
@ -730,6 +746,16 @@ class ComponentbuilderModelJoomla_components extends JModelList
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
// move to remote server if needed
|
||||||
|
if (2 == $this->backupType)
|
||||||
|
{
|
||||||
|
if (!ComponentbuilderHelper::moveToServer($this->zipPath, $this->packageName.'.zip', $this->backupServer, null, 'joomla_component.export'))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// remove the local file
|
||||||
|
JFile::delete($this->zipPath);
|
||||||
|
}
|
||||||
// remove the folder
|
// remove the folder
|
||||||
if (!ComponentbuilderHelper::removeFolder($this->packagePath))
|
if (!ComponentbuilderHelper::removeFolder($this->packagePath))
|
||||||
{
|
{
|
||||||
@ -828,6 +854,7 @@ class ComponentbuilderModelJoomla_components extends JModelList
|
|||||||
{
|
{
|
||||||
if ('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);
|
$tmpFilePath = str_replace('//', '/', $tmpPath.'/'.$item);
|
||||||
$customFilePath = str_replace('//', '/', $this->customPath.'/'.$item);
|
$customFilePath = str_replace('//', '/', $this->customPath.'/'.$item);
|
||||||
if (!JFile::exists($tmpFilePath) && JFile::exists($customFilePath))
|
if (!JFile::exists($tmpFilePath) && JFile::exists($customFilePath))
|
||||||
@ -1099,7 +1126,11 @@ class ComponentbuilderModelJoomla_components extends JModelList
|
|||||||
{
|
{
|
||||||
foreach ($keys['search'] as $key)
|
foreach ($keys['search'] as $key)
|
||||||
{
|
{
|
||||||
if (!isset($keys['not_base64'][$key]))
|
if ('id' === $key || 'name' === $key || 'system_name' === $key)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
elseif (!isset($keys['not_base64'][$key]))
|
||||||
{
|
{
|
||||||
$value = base64_decode($item->{$key});
|
$value = base64_decode($item->{$key});
|
||||||
}
|
}
|
||||||
@ -1226,72 +1257,135 @@ class ComponentbuilderModelJoomla_components extends JModelList
|
|||||||
* Get the keys of the values to search custom code in
|
* Get the keys of the values to search custom code in
|
||||||
*
|
*
|
||||||
* @param string $targe The table targeted
|
* @param string $targe The table targeted
|
||||||
|
* @param string $type The type of get
|
||||||
*
|
*
|
||||||
* @return array The query options
|
* @return array The query options
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
protected function getCodeSearchKeys($target)
|
protected function getCodeSearchKeys($target, $type = null)
|
||||||
{
|
{
|
||||||
|
// set the template if type is query
|
||||||
|
if ('query' === $type)
|
||||||
|
{
|
||||||
|
$tables = array(
|
||||||
|
'a' => 'joomla_component',
|
||||||
|
'b' => 'admin_view',
|
||||||
|
'c' => 'custom_admin_view',
|
||||||
|
'd' => 'site_view',
|
||||||
|
'e' => 'field',
|
||||||
|
'f' => 'dynamic_get',
|
||||||
|
'g' => 'template',
|
||||||
|
'h' => 'layout',
|
||||||
|
'i' => 'component_dashboard',
|
||||||
|
'j' => 'library',
|
||||||
|
);
|
||||||
|
// check if we have a match
|
||||||
|
if (isset($tables[$target]))
|
||||||
|
{
|
||||||
|
$target = $tables[$target];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// start target arrays
|
||||||
$targets = array();
|
$targets = array();
|
||||||
// #__componentbuilder_joomla_component
|
// #__componentbuilder_joomla_component
|
||||||
$targets['joomla_component'] = array();
|
$targets['joomla_component'] = array();
|
||||||
$targets['joomla_component']['search'] = array('php_preflight_install','php_postflight_install',
|
$targets['joomla_component']['search'] = array('id', 'system_name', 'php_preflight_install','php_postflight_install',
|
||||||
'php_preflight_update','php_postflight_update','php_method_uninstall',
|
'php_preflight_update','php_postflight_update','php_method_uninstall',
|
||||||
'php_helper_admin','php_admin_event','php_helper_both','php_helper_site',
|
'php_helper_admin','php_admin_event','php_helper_both','php_helper_site',
|
||||||
'php_site_event');
|
'php_site_event','javascript');
|
||||||
|
$targets['joomla_component']['view'] = 'joomla_components';
|
||||||
$targets['joomla_component']['not_base64'] = array();
|
$targets['joomla_component']['not_base64'] = array();
|
||||||
|
$targets['joomla_component']['name'] = 'system_name';
|
||||||
|
|
||||||
// #__componentbuilder_component_dashboard
|
// #__componentbuilder_component_dashboard
|
||||||
$targets['component_dashboard'] = array();
|
$targets['component_dashboard'] = array();
|
||||||
$targets['component_dashboard']['search'] = array('php_dashboard_methods','dashboard_tab');
|
$targets['component_dashboard']['search'] = array('id', 'joomla_component', 'php_dashboard_methods','dashboard_tab');
|
||||||
|
$targets['component_dashboard']['view'] = 'components_dashboard';
|
||||||
$targets['component_dashboard']['not_base64'] = array('dashboard_tab' => 'json');
|
$targets['component_dashboard']['not_base64'] = array('dashboard_tab' => 'json');
|
||||||
|
$targets['component_dashboard']['name'] = 'joomla_component->id:joomla_component.system_name';
|
||||||
|
|
||||||
// #__componentbuilder_admin_view
|
// #__componentbuilder_admin_view
|
||||||
$targets['admin_view'] = array();
|
$targets['admin_view'] = array();
|
||||||
$targets['admin_view']['search'] = array('javascript_view_file','javascript_view_footer','javascript_views_file',
|
$targets['admin_view']['search'] = array('id', 'system_name', 'javascript_view_file','javascript_view_footer',
|
||||||
'javascript_views_footer','php_getitem','php_save','php_postsavehook','php_getitems',
|
'javascript_views_file','javascript_views_footer','html_import_view',
|
||||||
'php_getitems_after_all','php_getlistquery','php_allowedit','php_before_delete',
|
'php_after_delete','php_after_publish','php_ajaxmethod','php_allowedit','php_batchcopy',
|
||||||
'php_after_delete','php_before_publish','php_after_publish','php_batchcopy',
|
'php_batchmove','php_before_delete','php_before_publish','php_before_save','php_controller',
|
||||||
'php_batchmove','php_document','php_model','php_controller','php_import_display',
|
'php_controller_list','php_document','php_getitem','php_getitems','php_getitems_after_all',
|
||||||
'php_import','php_import_setdata','php_import_save','html_import_view','php_ajaxmethod');
|
'php_getlistquery','php_import','php_import_display','php_import_ext','php_import_headers',
|
||||||
|
'php_import_save','php_import_setdata','php_model','php_model_list','php_postsavehook','php_save');
|
||||||
|
$targets['admin_view']['view'] = 'admin_views';
|
||||||
$targets['admin_view']['not_base64'] = array();
|
$targets['admin_view']['not_base64'] = array();
|
||||||
|
$targets['admin_view']['name'] = 'system_name';
|
||||||
|
|
||||||
// #__componentbuilder_custom_admin_view
|
// #__componentbuilder_custom_admin_view
|
||||||
$targets['custom_admin_view'] = array();
|
$targets['custom_admin_view'] = array();
|
||||||
$targets['custom_admin_view']['search'] = array('default','php_view','php_jview','php_jview_display','php_document',
|
$targets['custom_admin_view']['search'] = array('id', 'system_name', 'default','php_view','php_jview','php_jview_display','php_document',
|
||||||
'js_document','css_document','css','php_model','php_controller');
|
'js_document','css_document','css','php_ajaxmethod','php_model','php_controller');
|
||||||
|
$targets['custom_admin_view']['view'] = 'custom_admin_views';
|
||||||
$targets['custom_admin_view']['not_base64'] = array();
|
$targets['custom_admin_view']['not_base64'] = array();
|
||||||
|
$targets['custom_admin_view']['name'] = 'system_name';
|
||||||
|
|
||||||
// #__componentbuilder_site_view
|
// #__componentbuilder_site_view
|
||||||
$targets['site_view'] = array();
|
$targets['site_view'] = array();
|
||||||
$targets['site_view']['search'] = array('default','php_view','php_jview','php_jview_display','php_document',
|
$targets['site_view']['search'] = array('id', 'system_name', 'default','php_view','php_jview','php_jview_display','php_document',
|
||||||
'js_document','css_document','css','php_ajaxmethod','php_model','php_controller');
|
'js_document','css_document','css','php_ajaxmethod','php_model','php_controller');
|
||||||
|
$targets['site_view']['view'] = 'site_views';
|
||||||
$targets['site_view']['not_base64'] = array();
|
$targets['site_view']['not_base64'] = array();
|
||||||
|
$targets['site_view']['name'] = 'system_name';
|
||||||
|
|
||||||
// #__componentbuilder_field
|
// #__componentbuilder_field
|
||||||
$targets['field'] = array();
|
$targets['field'] = array();
|
||||||
$targets['field']['search'] = array('xml','javascript_view_footer','javascript_views_footer');
|
$targets['field']['search'] = array('id', 'name', 'xml','javascript_view_footer','javascript_views_footer');
|
||||||
|
$targets['field']['view'] = 'fields';
|
||||||
$targets['field']['not_base64'] = array('xml' => 'json');
|
$targets['field']['not_base64'] = array('xml' => 'json');
|
||||||
|
$targets['field']['name'] = 'name';
|
||||||
|
|
||||||
// #__componentbuilder_dynamic_get
|
// #__componentbuilder_dynamic_get
|
||||||
$targets['dynamic_get'] = array();
|
$targets['dynamic_get'] = array();
|
||||||
$targets['dynamic_get']['search'] = array('php_before_getitem','php_after_getitem','php_before_getitems','php_after_getitems',
|
$targets['dynamic_get']['search'] = array('id', 'name', 'php_before_getitem','php_after_getitem','php_before_getitems','php_after_getitems',
|
||||||
'php_getlistquery');
|
'php_getlistquery');
|
||||||
|
$targets['dynamic_get']['view'] = 'dynamic_gets';
|
||||||
$targets['dynamic_get']['not_base64'] = array();
|
$targets['dynamic_get']['not_base64'] = array();
|
||||||
|
$targets['dynamic_get']['name'] = 'name';
|
||||||
|
|
||||||
// #__componentbuilder_template
|
// #__componentbuilder_template
|
||||||
$targets['template'] = array();
|
$targets['template'] = array();
|
||||||
$targets['template']['search'] = array('php_view','template');
|
$targets['template']['search'] = array('id', 'name', 'php_view','template');
|
||||||
|
$targets['template']['view'] = 'templates';
|
||||||
$targets['template']['not_base64'] = array();
|
$targets['template']['not_base64'] = array();
|
||||||
|
$targets['template']['name'] = 'name';
|
||||||
|
|
||||||
// #__componentbuilder_layout
|
// #__componentbuilder_layout
|
||||||
$targets['layout'] = array();
|
$targets['layout'] = array();
|
||||||
$targets['layout']['search'] = array('php_view','layout');
|
$targets['layout']['search'] = array('id', 'name', 'php_view','layout');
|
||||||
|
$targets['layout']['view'] = 'layouts';
|
||||||
$targets['layout']['not_base64'] = array();
|
$targets['layout']['not_base64'] = array();
|
||||||
|
$targets['layout']['name'] = 'name';
|
||||||
|
|
||||||
// return the query string to search
|
// #__componentbuilder_library
|
||||||
if (isset($targets[$target]))
|
$targets['library'] = array();
|
||||||
|
$targets['library']['view'] = 'libraries';
|
||||||
|
$targets['library']['search'] = array('id', 'name', 'php_setdocument');
|
||||||
|
$targets['library']['view'] = 'libraries';
|
||||||
|
$targets['library']['not_base64'] = array();
|
||||||
|
$targets['library']['name'] = 'name';
|
||||||
|
|
||||||
|
// return result ready for a.query
|
||||||
|
if ('query' === $type && isset($targets[$target]))
|
||||||
{
|
{
|
||||||
|
// add the .a to the selection array
|
||||||
|
$targets[$target]['select'] = array_map( function($select) { return 'a.'.$select; }, $targets[$target]['search']);
|
||||||
|
// also set the table
|
||||||
|
$targets[$target]['table'] = $target;
|
||||||
|
// remove search
|
||||||
|
unset($targets[$target]['search']);
|
||||||
|
// return
|
||||||
|
return $targets[$target];
|
||||||
|
}
|
||||||
|
// return the query string to search
|
||||||
|
elseif (isset($targets[$target]))
|
||||||
|
{
|
||||||
|
// remove name and id
|
||||||
return $targets[$target];
|
return $targets[$target];
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
1
admin/sql/updates/mysql/2.6.15.sql
Normal file
1
admin/sql/updates/mysql/2.6.15.sql
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
@ -1,15 +1,15 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<extension type="component" version="3.2" method="upgrade">
|
<extension type="component" version="3.2" method="upgrade">
|
||||||
<name>COM_COMPONENTBUILDER</name>
|
<name>COM_COMPONENTBUILDER</name>
|
||||||
<creationDate>19th February, 2018</creationDate>
|
<creationDate>20th February, 2018</creationDate>
|
||||||
<author>Llewellyn van der Merwe</author>
|
<author>Llewellyn van der Merwe</author>
|
||||||
<authorEmail>llewellyn@joomlacomponentbuilder.com</authorEmail>
|
<authorEmail>llewellyn@joomlacomponentbuilder.com</authorEmail>
|
||||||
<authorUrl>http://joomlacomponentbuilder.com</authorUrl>
|
<authorUrl>http://joomlacomponentbuilder.com</authorUrl>
|
||||||
<copyright>Copyright (C) 2015. All Rights Reserved</copyright>
|
<copyright>Copyright (C) 2015. All Rights Reserved</copyright>
|
||||||
<license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
|
<license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
|
||||||
<version>2.6.15</version>
|
<version>2.6.16</version>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
<h1>Component Builder (v.2.6.15)</h1>
|
<h1>Component Builder (v.2.6.16)</h1>
|
||||||
<div style="clear: both;"></div>
|
<div style="clear: both;"></div>
|
||||||
<p>The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.
|
<p>The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.
|
||||||
|
|
||||||
|
@ -424,4 +424,21 @@
|
|||||||
<maintainerurl>http://joomlacomponentbuilder.com</maintainerurl>
|
<maintainerurl>http://joomlacomponentbuilder.com</maintainerurl>
|
||||||
<targetplatform name="joomla" version="3.*"/>
|
<targetplatform name="joomla" version="3.*"/>
|
||||||
</update>
|
</update>
|
||||||
|
<update>
|
||||||
|
<name>Component Builder</name>
|
||||||
|
<description>Builds Complex Joomla Components</description>
|
||||||
|
<element>com_componentbuilder</element>
|
||||||
|
<type>component</type>
|
||||||
|
<version>2.6.16</version>
|
||||||
|
<infourl title="Component Builder!">http://joomlacomponentbuilder.com</infourl>
|
||||||
|
<downloads>
|
||||||
|
<downloadurl type="full" format="zip">https://github.com/vdm-io/Joomla-Component-Builder/releases/download/v2.6.16/JCB_v2.6.16.zip</downloadurl>
|
||||||
|
</downloads>
|
||||||
|
<tags>
|
||||||
|
<tag>stable</tag>
|
||||||
|
</tags>
|
||||||
|
<maintainer>Llewellyn van der Merwe</maintainer>
|
||||||
|
<maintainerurl>http://joomlacomponentbuilder.com</maintainerurl>
|
||||||
|
<targetplatform name="joomla" version="3.*"/>
|
||||||
|
</update>
|
||||||
</updates>
|
</updates>
|
@ -3590,7 +3590,7 @@ class com_componentbuilderInstallerScript
|
|||||||
$query = $db->getQuery(true);
|
$query = $db->getQuery(true);
|
||||||
// Field to update.
|
// Field to update.
|
||||||
$fields = array(
|
$fields = array(
|
||||||
$db->quoteName('params') . ' = ' . $db->quote('{"autorName":"Llewellyn van der Merwe","autorEmail":"llewellyn@joomlacomponentbuilder.com","minify":"0","percentagelanguageadd":"50","set_browser_storage":"1","storage_time_to_live":"global","backup_package_name":"JCB_Backup_[YEAR]_[MONTH]_[DAY]","export_license":"GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html","export_copyright":"Copyright (C) 2015. All Rights Reserved","check_in":"-1 day","save_history":"1","history_limit":"10","uikit_load":"1","uikit_min":"","uikit_style":""}'),
|
$db->quoteName('params') . ' = ' . $db->quote('{"autorName":"Llewellyn van der Merwe","autorEmail":"llewellyn@joomlacomponentbuilder.com","minify":"0","percentagelanguageadd":"50","set_browser_storage":"1","storage_time_to_live":"global","cronjob_backup_type":"1","cronjob_backup_server":"0","backup_package_name":"JCB_Backup_[YEAR]_[MONTH]_[DAY]","export_license":"GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html","export_copyright":"Copyright (C) 2015. All Rights Reserved","check_in":"-1 day","save_history":"1","history_limit":"10","uikit_load":"1","uikit_min":"","uikit_style":""}'),
|
||||||
);
|
);
|
||||||
// Condition.
|
// Condition.
|
||||||
$conditions = array(
|
$conditions = array(
|
||||||
@ -4739,7 +4739,7 @@ class com_componentbuilderInstallerScript
|
|||||||
echo '<a target="_blank" href="http://joomlacomponentbuilder.com" title="Component Builder">
|
echo '<a target="_blank" href="http://joomlacomponentbuilder.com" title="Component Builder">
|
||||||
<img src="components/com_componentbuilder/assets/images/vdm-component.jpg"/>
|
<img src="components/com_componentbuilder/assets/images/vdm-component.jpg"/>
|
||||||
</a>
|
</a>
|
||||||
<h3>Upgrade to Version 2.6.15 Was Successful! Let us know if anything is not working as expected.</h3>';
|
<h3>Upgrade to Version 2.6.16 Was Successful! Let us know if anything is not working as expected.</h3>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,17 +52,20 @@ class ComponentbuilderControllerApi extends JControllerForm
|
|||||||
|
|
||||||
public function backup()
|
public function backup()
|
||||||
{
|
{
|
||||||
// get params
|
// get params first
|
||||||
if (!isset($this->params) || !ComponentbuilderHelper::checkObject($this->params))
|
if (!isset($this->params) || !ComponentbuilderHelper::checkObject($this->params))
|
||||||
{
|
{
|
||||||
$this->params = JComponentHelper::getParams('com_componentbuilder');
|
$this->params = JComponentHelper::getParams('com_componentbuilder');
|
||||||
}
|
}
|
||||||
// get all component IDs to backup
|
|
||||||
$pks = componentbuilderHelper::getComponentIDs();
|
|
||||||
// Get the model
|
// Get the model
|
||||||
$model = componentbuilderHelper::getModel('joomla_components', JPATH_ADMINISTRATOR . '/components/com_componentbuilder');
|
$model = componentbuilderHelper::getModel('joomla_components', JPATH_ADMINISTRATOR . '/components/com_componentbuilder');
|
||||||
// set user
|
// set user
|
||||||
$model->user = $this->getApiUser();
|
$model->user = $this->getApiUser();
|
||||||
|
// check if export is allowed for this user. (we need this sorry)
|
||||||
|
if ($model->user->authorise('joomla_component.export', 'com_componentbuilder') && $model->user->authorise('core.export', 'com_componentbuilder'))
|
||||||
|
{
|
||||||
|
// get all component IDs to backup
|
||||||
|
$pks = componentbuilderHelper::getComponentIDs();
|
||||||
// make sure to set active type to backup
|
// make sure to set active type to backup
|
||||||
$model->activeType = 'backup';
|
$model->activeType = 'backup';
|
||||||
// set auto loader
|
// set auto loader
|
||||||
@ -188,11 +191,24 @@ class ComponentbuilderControllerApi extends JControllerForm
|
|||||||
if ('backup' === 'backup')
|
if ('backup' === 'backup')
|
||||||
{
|
{
|
||||||
echo "# " . $backupNoticeStatus . "\n" .implode("\n", $backupNotice);
|
echo "# " . $backupNoticeStatus . "\n" .implode("\n", $backupNotice);
|
||||||
|
// clear session
|
||||||
|
JFactory::getApplication()->getSession()->destroy();
|
||||||
jexit();
|
jexit();
|
||||||
}
|
}
|
||||||
$this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=joomla_components', false), implode("<br />", $backupNotice), $backupNoticeStatus);
|
$this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=joomla_components', false), implode("<br />", $backupNotice), $backupNoticeStatus);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// quite only if auto backup (adding this script from custom code :)
|
||||||
|
if ('backup' === 'backup')
|
||||||
|
{
|
||||||
|
echo "# Error\n".JText::_('COM_COMPONENTBUILDER_ACCESS_DENIED');
|
||||||
|
// clear session
|
||||||
|
JFactory::getApplication()->getSession()->destroy();
|
||||||
|
jexit();
|
||||||
|
}
|
||||||
|
$this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=joomla_components', false), JText::_('COM_COMPONENTBUILDER_ACCESS_DENIED'), 'Error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
protected function getApiUser()
|
protected function getApiUser()
|
||||||
{
|
{
|
||||||
|
@ -1019,6 +1019,49 @@ abstract class ComponentbuilderHelper
|
|||||||
require_once JPATH_ADMINISTRATOR.'/components/com_componentbuilder/helpers/vendor/autoload.php';
|
require_once JPATH_ADMINISTRATOR.'/components/com_componentbuilder/helpers/vendor/autoload.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move File to Server
|
||||||
|
*
|
||||||
|
* @param string $localPath The local path to the file
|
||||||
|
* @param string $fileName The the actual file name
|
||||||
|
* @param int $serverID The server local id to use
|
||||||
|
* @param int $protocol The server protocol to use
|
||||||
|
* @param string $permission The permission validation area
|
||||||
|
*
|
||||||
|
* @return bool true on success
|
||||||
|
**/
|
||||||
|
public static function moveToServer($localPath, $fileName, $serverID, $protocol = null, $permission = 'core.export')
|
||||||
|
{
|
||||||
|
// get the server
|
||||||
|
if ($server = self::getServer( (int) $serverID, $protocol, $permission))
|
||||||
|
{
|
||||||
|
// use the FTP protocol
|
||||||
|
if (1 == $server->jcb_protocol)
|
||||||
|
{
|
||||||
|
// now move the file
|
||||||
|
if (!$server->store($localPath, $fileName))
|
||||||
|
{
|
||||||
|
JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_SERVER', $fileName, $server->jcb_remote_server_name[(int) $serverID]), 'Error');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// close the connection
|
||||||
|
$server->quit();
|
||||||
|
}
|
||||||
|
// use the SFTP protocol
|
||||||
|
elseif (2 == $server->jcb_protocol)
|
||||||
|
{
|
||||||
|
// now move the file
|
||||||
|
if (!$server->put($server->jcb_remote_server_path[(int) $serverID] . $fileName, self::getFileContents($localPath, null)))
|
||||||
|
{
|
||||||
|
JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_PATH_ON_BSB_SERVER', $fileName, $server->jcb_remote_server_path[(int) $serverID], $server->jcb_remote_server_name[(int) $serverID]), 'Error');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the SFTP objects
|
* the SFTP objects
|
||||||
**/
|
**/
|
||||||
@ -1038,8 +1081,13 @@ abstract class ComponentbuilderHelper
|
|||||||
*
|
*
|
||||||
* @return object on success server object
|
* @return object on success server object
|
||||||
**/
|
**/
|
||||||
public static function getServer($serverID, $protocol, $permission = 'core.export')
|
public static function getServer($serverID, $protocol = null, $permission = 'core.export')
|
||||||
{
|
{
|
||||||
|
// if not protocol is given get it (sad I know)
|
||||||
|
if (!$protocol)
|
||||||
|
{
|
||||||
|
$protocol = self::getVar('server', (int) $serverID, 'id', 'protocol');
|
||||||
|
}
|
||||||
// return the server object
|
// return the server object
|
||||||
switch ($protocol)
|
switch ($protocol)
|
||||||
{
|
{
|
||||||
@ -1082,6 +1130,8 @@ abstract class ComponentbuilderHelper
|
|||||||
$server->port = (isset($server->port) && is_int($server->port) && $server->port > 0) ? $server->port : 22;
|
$server->port = (isset($server->port) && is_int($server->port) && $server->port > 0) ? $server->port : 22;
|
||||||
// open the connection
|
// open the connection
|
||||||
self::$sftp[$server->cache] = new phpseclib\Net\SFTP($server->host, $server->port);
|
self::$sftp[$server->cache] = new phpseclib\Net\SFTP($server->host, $server->port);
|
||||||
|
// heads-up on protocol
|
||||||
|
self::$sftp[$server->cache]->jcb_protocol = 2; // SFTP <-- if called not knowing what type of protocol is being used
|
||||||
// now login based on authentication type
|
// now login based on authentication type
|
||||||
switch($server->authentication)
|
switch($server->authentication)
|
||||||
{
|
{
|
||||||
@ -1143,14 +1193,14 @@ abstract class ComponentbuilderHelper
|
|||||||
if (isset(self::$sftp[$server->cache]) && self::checkObject(self::$sftp[$server->cache]))
|
if (isset(self::$sftp[$server->cache]) && self::checkObject(self::$sftp[$server->cache]))
|
||||||
{
|
{
|
||||||
// set the unique buckets
|
// set the unique buckets
|
||||||
if (!isset(self::$sftp[$server->cache]->remote_server_name))
|
if (!isset(self::$sftp[$server->cache]->jcb_remote_server_name))
|
||||||
{
|
{
|
||||||
self::$sftp[$server->cache]->remote_server_name = array();
|
self::$sftp[$server->cache]->jcb_remote_server_name = array();
|
||||||
self::$sftp[$server->cache]->remote_server_path = array();
|
self::$sftp[$server->cache]->jcb_remote_server_path = array();
|
||||||
}
|
}
|
||||||
// always set the name and remote server path
|
// always set the name and remote server path
|
||||||
self::$sftp[$server->cache]->remote_server_name[$serverID] = $server->name;
|
self::$sftp[$server->cache]->jcb_remote_server_name[$serverID] = $server->name;
|
||||||
self::$sftp[$server->cache]->remote_server_path[$serverID] = (self::checkString($server->path) && $server->path !== '/') ? $server->path : '';
|
self::$sftp[$server->cache]->jcb_remote_server_path[$serverID] = (self::checkString($server->path) && $server->path !== '/') ? $server->path : '';
|
||||||
// return the sftp object
|
// return the sftp object
|
||||||
return self::$sftp[$server->cache];
|
return self::$sftp[$server->cache];
|
||||||
}
|
}
|
||||||
@ -1175,7 +1225,7 @@ abstract class ComponentbuilderHelper
|
|||||||
if (isset(self::$ftp[$server->cache]) && self::$ftp[$server->cache] instanceof JClientFtp)
|
if (isset(self::$ftp[$server->cache]) && self::$ftp[$server->cache] instanceof JClientFtp)
|
||||||
{
|
{
|
||||||
// always set the name and remote server path
|
// always set the name and remote server path
|
||||||
self::$ftp[$server->cache]->remote_server_name[$serverID] = $server->name;
|
self::$ftp[$server->cache]->jcb_remote_server_name[$serverID] = $server->name;
|
||||||
// if still connected we are ready to go
|
// if still connected we are ready to go
|
||||||
if (self::$ftp[$server->cache]->isConnected())
|
if (self::$ftp[$server->cache]->isConnected())
|
||||||
{
|
{
|
||||||
@ -1228,13 +1278,15 @@ abstract class ComponentbuilderHelper
|
|||||||
// check if we are connected
|
// check if we are connected
|
||||||
if (self::$ftp[$server->cache] instanceof JClientFtp && self::$ftp[$server->cache]->isConnected())
|
if (self::$ftp[$server->cache] instanceof JClientFtp && self::$ftp[$server->cache]->isConnected())
|
||||||
{
|
{
|
||||||
|
// heads-up on protocol
|
||||||
|
self::$ftp[$server->cache]->jcb_protocol = 1; // FTP <-- if called not knowing what type of protocol is being used
|
||||||
// set the unique buckets
|
// set the unique buckets
|
||||||
if (!isset(self::$ftp[$server->cache]->remote_server_name))
|
if (!isset(self::$ftp[$server->cache]->jcb_remote_server_name))
|
||||||
{
|
{
|
||||||
self::$ftp[$server->cache]->remote_server_name = array();
|
self::$ftp[$server->cache]->jcb_remote_server_name = array();
|
||||||
}
|
}
|
||||||
// always set the name and remote server path
|
// always set the name and remote server path
|
||||||
self::$ftp[$server->cache]->remote_server_name[$serverID] = $server->name;
|
self::$ftp[$server->cache]->jcb_remote_server_name[$serverID] = $server->name;
|
||||||
// return the FTP instance
|
// return the FTP instance
|
||||||
return self::$ftp[$server->cache];
|
return self::$ftp[$server->cache];
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
COM_COMPONENTBUILDER="Component Builder"
|
COM_COMPONENTBUILDER="Component Builder"
|
||||||
|
COM_COMPONENTBUILDER_ACCESS_DENIED="Access denied!"
|
||||||
COM_COMPONENTBUILDER_API="Api"
|
COM_COMPONENTBUILDER_API="Api"
|
||||||
COM_COMPONENTBUILDER_API_DESC="Sync Portal API"
|
COM_COMPONENTBUILDER_API_DESC="Sync Portal API"
|
||||||
COM_COMPONENTBUILDER_BACKUP_FAILED_PLEASE_TRY_AGAIN_IF_THE_ERROR_CONTINUE_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR="Backup failed, please try again. If the error continue, please contact your system administrator."
|
COM_COMPONENTBUILDER_BACKUP_FAILED_PLEASE_TRY_AGAIN_IF_THE_ERROR_CONTINUE_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR="Backup failed, please try again. If the error continue, please contact your system administrator."
|
||||||
@ -38,6 +39,8 @@ COM_COMPONENTBUILDER_SINCE_THE_OWNER_DETAILS_ARE_DISPLAYED_DURING_IMPORT_PROCESS
|
|||||||
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 <b>settings</b>, bottom right there is a field called <b>Export Key</b>."
|
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 <b>settings</b>, bottom right there is a field called <b>Export Key</b>."
|
||||||
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_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 <b>phpseclib\NET\SFTP</b> 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_ADMINHELPERSVENDOR_FOLDER_OF_JCB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="The <b>phpseclib\NET\SFTP</b> 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_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_PATH_ON_BSB_SERVER="The <b>%s</b> file could not be moved to <b>%s</b> path on <b>%s</b> server."
|
||||||
|
COM_COMPONENTBUILDER_THE_BSB_FILE_COULD_NOT_BE_MOVED_TO_BSB_SERVER="The <b>%s</b> file could not be moved to <b>%s</b> server."
|
||||||
COM_COMPONENTBUILDER_THE_FTP_CONNECTION_FOR_BSB_COULD_NOT_BE_MADE_PLEASE_CHECK_YOUR_SIGNATURE_DETAILS="The FTP connection for <b>%s</b> could not be made. Please check your signature details!"
|
COM_COMPONENTBUILDER_THE_FTP_CONNECTION_FOR_BSB_COULD_NOT_BE_MADE_PLEASE_CHECK_YOUR_SIGNATURE_DETAILS="The FTP connection for <b>%s</b> 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 <b>%s</b> was not well formed, 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 <b>%s</b> 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 <b>%s</b> has failed, please check that your details are correct!"
|
COM_COMPONENTBUILDER_THE_LOGIN_TO_BSB_HAS_FAILED_PLEASE_CHECK_THAT_YOUR_DETAILS_ARE_CORRECT="The login to <b>%s</b> has failed, please check that your details are correct!"
|
||||||
|
@ -45,6 +45,8 @@ class ComponentbuilderViewApi extends JViewLegacy
|
|||||||
$this->user = JFactory::getUser();
|
$this->user = JFactory::getUser();
|
||||||
// Initialise variables.
|
// Initialise variables.
|
||||||
$this->item = $this->get('Item');
|
$this->item = $this->get('Item');
|
||||||
|
// do not load the display
|
||||||
|
jexit('Access Denied!');
|
||||||
|
|
||||||
// Set the toolbar
|
// Set the toolbar
|
||||||
$this->addToolBar();
|
$this->addToolBar();
|
||||||
|
Loading…
Reference in New Issue
Block a user