forked from joomla/Component-Builder
Robot
ec714566f6
Fix the search area layout. Fix the search area code line selection. Fix the input edit button for custom fields. Add the new layout to list fields (GUI UPDATE).
184 lines
6.9 KiB
PHP
184 lines
6.9 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
|
|
*/
|
|
|
|
// No direct access to this file
|
|
defined('_JEXEC') or die('Restricted access');
|
|
|
|
use Joomla\CMS\Factory;
|
|
use Joomla\CMS\Language\Text;
|
|
use Joomla\CMS\HTML\HTMLHelper as Html;
|
|
|
|
// import the list field type
|
|
jimport('joomla.form.helper');
|
|
JFormHelper::loadFieldClass('list');
|
|
|
|
/**
|
|
* Joomlaplugins Form Field class for the Componentbuilder component
|
|
*/
|
|
class JFormFieldJoomlaplugins extends JFormFieldList
|
|
{
|
|
/**
|
|
* The joomlaplugins field type.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $type = 'joomlaplugins';
|
|
|
|
/**
|
|
* Override to add new button
|
|
*
|
|
* @return string The field input markup.
|
|
*
|
|
* @since 3.2
|
|
*/
|
|
protected function getInput()
|
|
{
|
|
// see if we should add buttons
|
|
$set_button = $this->getAttribute('button');
|
|
// get html
|
|
$html = parent::getInput();
|
|
// if true set button
|
|
if ($set_button === 'true')
|
|
{
|
|
$button = array();
|
|
$script = array();
|
|
$button_code_name = $this->getAttribute('name');
|
|
// get the input from url
|
|
$app = Factory::getApplication();
|
|
$jinput = $app->input;
|
|
// get the view name & id
|
|
$values = $jinput->getArray(array(
|
|
'id' => 'int',
|
|
'view' => 'word'
|
|
));
|
|
// check if new item
|
|
$ref = '';
|
|
$refJ = '';
|
|
if (!is_null($values['id']) && strlen($values['view']))
|
|
{
|
|
// only load referral if not new item.
|
|
$ref = '&ref=' . $values['view'] . '&refid=' . $values['id'];
|
|
$refJ = '&ref=' . $values['view'] . '&refid=' . $values['id'];
|
|
// get the return value.
|
|
$_uri = (string) \Joomla\CMS\Uri\Uri::getInstance();
|
|
$_return = urlencode(base64_encode($_uri));
|
|
// load return value.
|
|
$ref .= '&return=' . $_return;
|
|
$refJ .= '&return=' . $_return;
|
|
}
|
|
// get button label
|
|
$button_label = trim($button_code_name);
|
|
$button_label = preg_replace('/_+/', ' ', $button_label);
|
|
$button_label = preg_replace('/\s+/', ' ', $button_label);
|
|
$button_label = preg_replace("/[^A-Za-z ]/", '', $button_label);
|
|
$button_label = ucfirst(strtolower($button_label));
|
|
// get user object
|
|
$user = Factory::getUser();
|
|
// only add if user allowed to create joomla_plugin
|
|
if ($user->authorise('joomla_plugin.create', 'com_componentbuilder') && $app->isClient('administrator')) // TODO for now only in admin area.
|
|
{
|
|
// build Create button
|
|
$button[] = '<a id="'.$button_code_name.'Create" class="btn btn-small btn-success hasTooltip" title="'.Text::sprintf('PLG_EXTENSION_COMPONENTBUILDERPOWERSAUTOLOADERCOMPILER_CREATE_NEW_S', $button_label).'" style="border-radius: 0px 4px 4px 0px; padding: 4px 4px 4px 7px;"
|
|
href="index.php?option=com_componentbuilder&view=joomla_plugin&layout=edit'.$ref.'" >
|
|
<span class="icon-new icon-white"></span></a>';
|
|
}
|
|
// only add if user allowed to edit joomla_plugin
|
|
if ($user->authorise('joomla_plugin.edit', 'com_componentbuilder') && $app->isClient('administrator')) // TODO for now only in admin area.
|
|
{
|
|
// build edit button
|
|
$button[] = '<a id="'.$button_code_name.'Edit" class="btn btn-small hasTooltip" title="'.Text::sprintf('PLG_EXTENSION_COMPONENTBUILDERPOWERSAUTOLOADERCOMPILER_EDIT_S', $button_label).'" style="display: none; padding: 3px 4px 4px 7px;" href="#" >
|
|
<span class="icon-edit"></span></a>';
|
|
// build script
|
|
$script[] = "
|
|
jQuery(document).ready(function() {
|
|
jQuery('#adminForm').on('change', '#jform_".$button_code_name."',function (e) {
|
|
e.preventDefault();
|
|
var ".$button_code_name."Value = jQuery('#jform_".$button_code_name."').val();
|
|
".$button_code_name."Button(".$button_code_name."Value);
|
|
});
|
|
var ".$button_code_name."Value = jQuery('#jform_".$button_code_name."').val();
|
|
".$button_code_name."Button(".$button_code_name."Value);
|
|
});
|
|
function ".$button_code_name."Button(value) {
|
|
if (value > 0) {
|
|
// hide the create button
|
|
jQuery('#".$button_code_name."Create').hide();
|
|
// show edit button
|
|
jQuery('#".$button_code_name."Edit').show();
|
|
var url = 'index.php?option=com_componentbuilder&view=joomla_plugins&task=joomla_plugin.edit&id='+value+'".$refJ."';
|
|
jQuery('#".$button_code_name."Edit').attr('href', url);
|
|
} else {
|
|
// show the create button
|
|
jQuery('#".$button_code_name."Create').show();
|
|
// hide edit button
|
|
jQuery('#".$button_code_name."Edit').hide();
|
|
}
|
|
}";
|
|
}
|
|
// check if button was created for joomla_plugin field.
|
|
if (is_array($button) && count($button) > 0)
|
|
{
|
|
// Load the needed script.
|
|
$document = Factory::getDocument();
|
|
$document->addScriptDeclaration(implode(' ',$script));
|
|
// return the button attached to input field.
|
|
return '<div class="input-append">' .$html . implode('',$button).'</div>';
|
|
}
|
|
}
|
|
return $html;
|
|
}
|
|
|
|
/**
|
|
* Method to get a list of options for a list input.
|
|
*
|
|
* @return array An array of Html options.
|
|
*/
|
|
protected function getOptions()
|
|
{
|
|
// Get the user object.
|
|
$user = Factory::getUser();
|
|
// Get the databse object.
|
|
$db = Factory::getDBO();
|
|
$query = $db->getQuery(true);
|
|
$query->select($db->quoteName(array('a.id','a.system_name','a.name','b.name','c.name'),array('id','plugin_system_name','name','class_extends_name','joomla_plugin_group_name')));
|
|
$query->from($db->quoteName('#__componentbuilder_joomla_plugin', 'a'));
|
|
$query->join('LEFT', $db->quoteName('#__componentbuilder_class_extends', 'b') . ' ON (' . $db->quoteName('a.class_extends') . ' = ' . $db->quoteName('b.id') . ')');
|
|
$query->join('LEFT', $db->quoteName('#__componentbuilder_joomla_plugin_group', 'c') . ' ON (' . $db->quoteName('a.joomla_plugin_group') . ' = ' . $db->quoteName('c.id') . ')');
|
|
$query->where($db->quoteName('a.published') . ' >= 1');
|
|
$query->order('a.system_name ASC');
|
|
// Implement View Level Access (if set in table)
|
|
if (!$user->authorise('core.options', 'com_componentbuilder'))
|
|
{
|
|
$columns = $db->getTableColumns('#__componentbuilder_joomla_plugin');
|
|
if(isset($columns['access']))
|
|
{
|
|
$groups = implode(',', $user->getAuthorisedViewLevels());
|
|
$query->where('a.access IN (' . $groups . ')');
|
|
}
|
|
}
|
|
$db->setQuery((string)$query);
|
|
$items = $db->loadObjectList();
|
|
$options = array();
|
|
if ($items)
|
|
{
|
|
$options[] = Html::_('select.option', '', 'Select a plugin');
|
|
foreach($items as $item)
|
|
{
|
|
// set a full class name
|
|
$group_name = $item->joomla_plugin_group_name ?? '';
|
|
$name = $item->name ?? '';
|
|
$options[] = Html::_('select.option', $item->id, '( ' . $item->plugin_system_name . ' ) class Plg' . $group_name . $name . ' extends ' . $item->class_extends_name);
|
|
}
|
|
}
|
|
return $options;
|
|
}
|
|
}
|