2019-07-17 02:36:05 +00:00
< ? php
2021-03-05 03:08:47 +00:00
/**
* @ package Joomla . Component . Builder
*
* @ created 30 th April , 2015
2022-07-09 15:45:08 +00:00
* @ author Llewellyn van der Merwe < https :// dev . vdm . io >
* @ git Joomla Component Builder < https :// git . vdm . dev / joomla / Component - Builder >
2021-03-05 03:08:47 +00:00
* @ 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' );
2024-03-02 20:10:30 +00:00
use Joomla\CMS\Factory ;
use Joomla\CMS\Language\Text ;
use Joomla\CMS\HTML\HTMLHelper as Html ;
2021-03-05 03:08:47 +00:00
// 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 .
*
2024-03-02 20:10:30 +00:00
* @ var string
2021-03-05 03:08:47 +00:00
*/
2019-08-22 01:54:47 +00:00
public $type = 'joomlaplugins' ;
2022-07-09 15:16:21 +00:00
/**
* 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
2024-03-02 20:10:30 +00:00
$app = Factory :: getApplication ();
2022-07-09 15:16:21 +00:00
$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.
2024-03-02 20:10:30 +00:00
$_uri = ( string ) \Joomla\CMS\Uri\Uri :: getInstance ();
2022-07-09 15:16:21 +00:00
$_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
2024-03-02 20:10:30 +00:00
$user = Factory :: getUser ();
2022-07-09 15:16:21 +00:00
// only add if user allowed to create joomla_plugin
2024-03-02 20:10:30 +00:00
if ( $user -> authorise ( 'joomla_plugin.create' , 'com_componentbuilder' ) && $app -> isClient ( 'administrator' )) // TODO for now only in admin area.
2022-07-09 15:16:21 +00:00
{
// build Create button
2024-03-02 20:10:30 +00:00
$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 : 0 px 4 px 4 px 0 px ; padding : 4 px 4 px 4 px 7 px ; "
2022-07-09 15:16:21 +00:00
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
2024-03-02 20:10:30 +00:00
if ( $user -> authorise ( 'joomla_plugin.edit' , 'com_componentbuilder' ) && $app -> isClient ( 'administrator' )) // TODO for now only in admin area.
2022-07-09 15:16:21 +00:00
{
// build edit button
2024-03-02 20:10:30 +00:00
$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 : 4 px 4 px 4 px 7 px ; " href= " #" >
2022-07-09 15:16:21 +00:00
< 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.
2024-03-02 20:10:30 +00:00
$document = Factory :: getDocument ();
2022-07-09 15:16:21 +00:00
$document -> addScriptDeclaration ( implode ( ' ' , $script ));
// return the button attached to input field.
return '<div class="input-append">' . $html . implode ( '' , $button ) . '</div>' ;
}
}
return $html ;
}
2021-03-05 03:08:47 +00:00
/**
* Method to get a list of options for a list input .
*
2024-03-02 20:10:30 +00:00
* @ return array An array of Html options .
2021-03-05 03:08:47 +00:00
*/
protected function getOptions ()
{
2019-07-17 02:36:05 +00:00
// Get the user object.
2024-03-12 14:01:04 +00:00
$user = Factory :: getUser ();
2019-07-17 02:36:05 +00:00
// Get the databse object.
2024-03-12 14:01:04 +00:00
$db = Factory :: getDBO ();
2019-07-17 02:36:05 +00:00
$query = $db -> getQuery ( true );
2019-07-19 02:17:15 +00:00
$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' )));
2019-07-17 02:36:05 +00:00
$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' );
2019-07-19 02:17:15 +00:00
$query -> order ( 'a.system_name ASC' );
2019-07-17 02:36:05 +00:00
// 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 )
{
2024-03-12 14:01:04 +00:00
$options [] = Html :: _ ( 'select.option' , '' , 'Select a plugin' );
2019-07-17 02:36:05 +00:00
foreach ( $items as $item )
{
// set a full class name
2024-03-12 14:01:04 +00:00
$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 );
2019-07-17 02:36:05 +00:00
}
}
2021-03-05 03:08:47 +00:00
return $options ;
}
}