Robot
0ec95282ee
Improved the Schema Table update engine (more). Fix autoloader timing, and loading. Implement the Joomla Powers in JCB code, to move away from JClasses.
297 lines
9.5 KiB
PHP
297 lines
9.5 KiB
PHP
<?php
|
|
/**
|
|
* @package Joomla.Component.Builder
|
|
*
|
|
* @created 30th April, 2015
|
|
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
|
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
|
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
|
*/
|
|
namespace VDM\Component\Componentbuilder\Administrator\View\Power;
|
|
|
|
use Joomla\CMS\Factory;
|
|
use Joomla\CMS\Language\Text;
|
|
use Joomla\CMS\Toolbar\Toolbar;
|
|
use Joomla\CMS\Form\FormHelper;
|
|
use Joomla\CMS\Session\Session;
|
|
use Joomla\CMS\Uri\Uri;
|
|
use Joomla\CMS\Component\ComponentHelper;
|
|
use Joomla\CMS\HTML\HTMLHelper as Html;
|
|
use Joomla\CMS\Layout\FileLayout;
|
|
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
|
|
use Joomla\CMS\Plugin\PluginHelper;
|
|
use Joomla\CMS\Toolbar\ToolbarHelper;
|
|
use Joomla\CMS\Document\Document;
|
|
use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper;
|
|
use VDM\Joomla\Utilities\StringHelper;
|
|
|
|
// No direct access to this file
|
|
\defined('_JEXEC') or die;
|
|
|
|
/**
|
|
* Power Html View class
|
|
*
|
|
* @since 1.6
|
|
*/
|
|
class HtmlView extends BaseHtmlView
|
|
{
|
|
/**
|
|
* Power view display method
|
|
*
|
|
* @param string $tpl The name of the template file to parse; automatically searches through the template paths.
|
|
*
|
|
* @return void
|
|
* @since 1.6
|
|
*/
|
|
public function display($tpl = null)
|
|
{
|
|
// set params
|
|
$this->params = ComponentHelper::getParams('com_componentbuilder');
|
|
$this->useCoreUI = true;
|
|
// Assign the variables
|
|
$this->form = $this->get('Form');
|
|
$this->item = $this->get('Item');
|
|
$this->styles = $this->get('Styles');
|
|
$this->scripts = $this->get('Scripts');
|
|
$this->state = $this->get('State');
|
|
// get action permissions
|
|
$this->canDo = ComponentbuilderHelper::getActions('power', $this->item);
|
|
// get input
|
|
$jinput = Factory::getApplication()->input;
|
|
$this->ref = $jinput->get('ref', 0, 'word');
|
|
$this->refid = $jinput->get('refid', 0, 'int');
|
|
$return = $jinput->get('return', null, 'base64');
|
|
// set the referral string
|
|
$this->referral = '';
|
|
if ($this->refid && $this->ref)
|
|
{
|
|
// return to the item that referred to this item
|
|
$this->referral = '&ref=' . (string) $this->ref . '&refid=' . (int) $this->refid;
|
|
}
|
|
elseif($this->ref)
|
|
{
|
|
// return to the list view that referred to this item
|
|
$this->referral = '&ref=' . (string) $this->ref;
|
|
}
|
|
// check return value
|
|
if (!is_null($return))
|
|
{
|
|
// add the return value
|
|
$this->referral .= '&return=' . (string) $return;
|
|
}
|
|
|
|
// Set the toolbar
|
|
$this->addToolBar();
|
|
|
|
// Check for errors.
|
|
if (count($errors = $this->get('Errors')))
|
|
{
|
|
throw new \Exception(implode("\n", $errors), 500);
|
|
}
|
|
|
|
// Set the html view document stuff
|
|
$this->_prepareDocument();
|
|
|
|
// Display the template
|
|
parent::display($tpl);
|
|
}
|
|
|
|
|
|
/**
|
|
* Add the page title and toolbar.
|
|
*
|
|
* @return void
|
|
* @since 1.6
|
|
*/
|
|
protected function addToolbar(): void
|
|
{
|
|
Factory::getApplication()->input->set('hidemainmenu', true);
|
|
$user = Factory::getApplication()->getIdentity();
|
|
$userId = $user->id;
|
|
$isNew = $this->item->id == 0;
|
|
|
|
ToolbarHelper::title( Text::_($isNew ? 'COM_COMPONENTBUILDER_POWER_NEW' : 'COM_COMPONENTBUILDER_POWER_EDIT'), 'pencil-2 article-add');
|
|
// Built the actions for new and existing records.
|
|
if (StringHelper::check($this->referral))
|
|
{
|
|
if ($this->canDo->get('power.create') && $isNew)
|
|
{
|
|
// We can create the record.
|
|
ToolbarHelper::save('power.save', 'JTOOLBAR_SAVE');
|
|
}
|
|
elseif ($this->canDo->get('power.edit'))
|
|
{
|
|
// We can save the record.
|
|
ToolbarHelper::save('power.save', 'JTOOLBAR_SAVE');
|
|
}
|
|
if ($isNew)
|
|
{
|
|
// Do not creat but cancel.
|
|
ToolbarHelper::cancel('power.cancel', 'JTOOLBAR_CANCEL');
|
|
}
|
|
else
|
|
{
|
|
// We can close it.
|
|
ToolbarHelper::cancel('power.cancel', 'JTOOLBAR_CLOSE');
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ($isNew)
|
|
{
|
|
// For new records, check the create permission.
|
|
if ($this->canDo->get('power.create'))
|
|
{
|
|
ToolbarHelper::apply('power.apply', 'JTOOLBAR_APPLY');
|
|
ToolbarHelper::save('power.save', 'JTOOLBAR_SAVE');
|
|
ToolbarHelper::custom('power.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false);
|
|
};
|
|
ToolbarHelper::cancel('power.cancel', 'JTOOLBAR_CANCEL');
|
|
}
|
|
else
|
|
{
|
|
if ($this->canDo->get('power.edit'))
|
|
{
|
|
// We can save the new record
|
|
ToolbarHelper::apply('power.apply', 'JTOOLBAR_APPLY');
|
|
ToolbarHelper::save('power.save', 'JTOOLBAR_SAVE');
|
|
// We can save this record, but check the create permission to see
|
|
// if we can return to make a new one.
|
|
if ($this->canDo->get('power.create'))
|
|
{
|
|
ToolbarHelper::custom('power.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false);
|
|
}
|
|
}
|
|
$canVersion = ($this->canDo->get('core.version') && $this->canDo->get('power.version'));
|
|
if ($this->state->params->get('save_history', 1) && $this->canDo->get('power.edit') && $canVersion)
|
|
{
|
|
ToolbarHelper::versions('com_componentbuilder.power', $this->item->id);
|
|
}
|
|
if ($this->canDo->get('power.create'))
|
|
{
|
|
ToolbarHelper::custom('power.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false);
|
|
}
|
|
if ($this->canDo->get('power.reset'))
|
|
{
|
|
// add Reset button.
|
|
ToolbarHelper::custom('power.resetPowers', 'joomla custom-button-resetpowers', '', 'COM_COMPONENTBUILDER_RESET', false);
|
|
}
|
|
ToolbarHelper::cancel('power.cancel', 'JTOOLBAR_CLOSE');
|
|
}
|
|
}
|
|
ToolbarHelper::divider();
|
|
ToolbarHelper::inlinehelp();
|
|
// set help url for this view if found
|
|
$this->help_url = ComponentbuilderHelper::getHelpUrl('power');
|
|
if (StringHelper::check($this->help_url))
|
|
{
|
|
ToolbarHelper::help('COM_COMPONENTBUILDER_HELP_MANAGER', false, $this->help_url);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Escapes a value for output in a view script.
|
|
*
|
|
* @param mixed $var The output to escape.
|
|
* @param bool $shorten The switch to shorten.
|
|
* @param int $length The shorting length.
|
|
*
|
|
* @return mixed The escaped value.
|
|
* @since 1.6
|
|
*/
|
|
public function escape($var, bool $shorten = true, int $length = 30)
|
|
{
|
|
if (!is_string($var))
|
|
{
|
|
return $var;
|
|
}
|
|
|
|
return StringHelper::html($var, $this->_charset ?? 'UTF-8', $shorten, $length);
|
|
}
|
|
|
|
/**
|
|
* Prepare some document related stuff.
|
|
*
|
|
* @return void
|
|
* @since 1.6
|
|
*/
|
|
protected function _prepareDocument(): void
|
|
{
|
|
// Load jQuery
|
|
Html::_('jquery.framework');
|
|
$isNew = ($this->item->id < 1);
|
|
$this->getDocument()->setTitle(Text::_($isNew ? 'COM_COMPONENTBUILDER_POWER_NEW' : 'COM_COMPONENTBUILDER_POWER_EDIT'));
|
|
// add styles
|
|
foreach ($this->styles as $style)
|
|
{
|
|
Html::_('stylesheet', $style, ['version' => 'auto']);
|
|
}
|
|
// Add Ajax Token
|
|
$this->getDocument()->addScriptDeclaration("var token = '" . Session::getFormToken() . "';");
|
|
// add scripts
|
|
foreach ($this->scripts as $script)
|
|
{
|
|
Html::_('script', $script, ['version' => 'auto']);
|
|
}
|
|
|
|
|
|
// add the Uikit v2 style sheets
|
|
Html::_('stylesheet', 'media/com_componentbuilder/uikit-v2/css/uikit.gradient.min.css', ['version' => 'auto']);
|
|
// add Uikit v2 JavaScripts
|
|
Html::_('script', 'media/com_componentbuilder/uikit-v2/js/uikit.min.js', ['version' => 'auto']);
|
|
|
|
// add the Uikit v2 extra style sheets
|
|
Html::_('stylesheet', 'media/com_componentbuilder/uikit-v2/css/components/notify.gradient.min.css', ['version' => 'auto']);
|
|
// add Uikit v2 extra JavaScripts
|
|
Html::_('script', 'media/com_componentbuilder/uikit-v2/js/components/lightbox.min.js', ['version' => 'auto']);
|
|
Html::_('script', 'media/com_componentbuilder/uikit-v2/js/components/notify.min.js', ['version' => 'auto']);
|
|
// Add the JavaScript for JStore
|
|
Html::_('script', 'media/com_componentbuilder/js/jquery.json.min.js', ['version' => 'auto']);
|
|
Html::_('script', 'media/com_componentbuilder/js/jstorage.min.js', ['version' => 'auto']);
|
|
Html::_('script', 'media/com_componentbuilder/js/strtotime.js', ['version' => 'auto']);
|
|
// add var key
|
|
$this->document->addScriptDeclaration("var vastDevMod = '" . $this->get('VDM') . "';");
|
|
// add return_here
|
|
$this->document->addScriptDeclaration("var return_here = '" . urlencode(base64_encode((string) Uri::getInstance())) . "';");
|
|
// set some lang
|
|
Text::script('COM_COMPONENTBUILDER_ALREADY_SELECTED_TRY_ANOTHER');
|
|
Text::script('COM_COMPONENTBUILDER_TYPE_OR_SELECT_SOME_OPTIONS');
|
|
Text::script('COM_COMPONENTBUILDER_NO_RESULTS_MATCH');
|
|
Text::script('COM_COMPONENTBUILDER_SELECT_A_PROPERTY');
|
|
Text::script('COM_COMPONENTBUILDER_NO_DESCRIPTION_FOUND');
|
|
// check if we should use browser storage
|
|
$setBrowserStorage = $this->params->get('set_browser_storage', null);
|
|
if ($setBrowserStorage)
|
|
{
|
|
// check what (Time To Live) show we use
|
|
$storageTimeToLive = $this->params->get('storage_time_to_live', 'global');
|
|
if ('global' == $storageTimeToLive)
|
|
{
|
|
// use the global session time
|
|
$session = Factory::getSession();
|
|
// must have itin milliseconds
|
|
$expire = ($session->getExpire()*60)* 1000;
|
|
}
|
|
else
|
|
{
|
|
// use the Componentbuilder Global setting
|
|
if (0 != $storageTimeToLive)
|
|
{
|
|
// this will convert the time into milliseconds
|
|
$storageTimeToLive = $storageTimeToLive * 1000;
|
|
}
|
|
$expire = $storageTimeToLive;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// set to use no storage
|
|
$expire = 30000; // only 30 seconds
|
|
}
|
|
// Set the Time To Live To JavaScript
|
|
$this->document->addScriptDeclaration("var expire = ". (int) $expire.";");
|
|
$this->document->addScriptDeclaration("selectionArray = {'property':{},'method':{}};");
|
|
}
|
|
}
|