2016-01-30 20:28:43 +00:00
< ? php
/*--------------------------------------------------------------------------------------------------------| www . vdm . io |------/
__ __ _ _____ _ _ __ __ _ _ _
\ \ / / | | | __ \ | | | | | \ / | | | | | | |
\ \ / / _ _ ___ | | _ | | | | _____ _____ | | ___ _ __ _ __ ___ ___ _ __ | | _ | \ / | ___ | | _ | | __ ___ __ | |
\ \ / / _ ` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| ' _ \ / _ \ / _ ` |
\ / ( _ | \__ \ | _ | | __ | | __ / \ V / __ / | ( _ ) | | _ ) | | | | | | __ / | | | | _ | | | | __ / | _ | | | | ( _ ) | ( _ | |
\ / \__ , _ | ___ / \__ | | _____ / \___ | \_ / \___ | _ | \___ /| . __ /| _ | | _ | | _ | \___ | _ | | _ | \__ | | _ | | _ | \___ | \__ | _ | | _ | \___ / \__ , _ |
| |
| _ |
/-------------------------------------------------------------------------------------------------------------------------------/
2017-10-26 16:43:51 +00:00
@ version 2.5 . 9
2017-10-28 03:25:33 +00:00
@ build 28 th October , 2017
2016-01-30 20:28:43 +00:00
@ created 30 th April , 2015
@ package Component Builder
2017-10-16 17:14:23 +00:00
@ subpackage matchfield . php
2016-12-22 21:32:13 +00:00
@ author Llewellyn van der Merwe < http :// vdm . bz / component - builder >
2016-01-30 20:28:43 +00:00
@ copyright Copyright ( C ) 2015. All Rights Reserved
@ license GNU / GPL Version 2 or later - http :// www . gnu . org / licenses / gpl - 2.0 . html
Builds Complex Joomla Components
/-----------------------------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined ( '_JEXEC' ) or die ( 'Restricted access' );
// import the list field type
jimport ( 'joomla.form.helper' );
JFormHelper :: loadFieldClass ( 'list' );
/**
2017-10-16 17:14:23 +00:00
* Matchfield Form Field class for the Componentbuilder component
2016-01-30 20:28:43 +00:00
*/
2017-10-16 17:14:23 +00:00
class JFormFieldMatchfield extends JFormFieldList
2016-01-30 20:28:43 +00:00
{
/**
2017-10-16 17:14:23 +00:00
* The matchfield field type .
2016-01-30 20:28:43 +00:00
*
* @ var string
*/
2017-10-16 17:14:23 +00:00
public $type = 'matchfield' ;
2016-01-30 20:28:43 +00:00
/**
* Override to add new button
*
* @ return string The field input markup .
*
* @ since 3.2
*/
2016-02-26 12:46:15 +00:00
protected function getInput ()
2016-01-30 20:28:43 +00:00
{
// see if we should add buttons
$setButton = $this -> getAttribute ( 'button' );
// get html
$html = parent :: getInput ();
// if true set button
if ( $setButton === 'true' )
{
2016-05-06 23:41:41 +00:00
$button = array ();
$script = array ();
$buttonName = $this -> getAttribute ( 'name' );
// get the input from url
2016-12-22 21:32:13 +00:00
$app = JFactory :: getApplication ();
$jinput = $app -> input ;
2016-05-06 23:41:41 +00:00
// 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 referal if not new item.
$ref = '&ref=' . $values [ 'view' ] . '&refid=' . $values [ 'id' ];
$refJ = '&ref=' . $values [ 'view' ] . '&refid=' . $values [ 'id' ];
}
2016-01-30 20:28:43 +00:00
$user = JFactory :: getUser ();
// only add if user allowed to create field
2016-12-22 21:32:13 +00:00
if ( $user -> authorise ( 'field.create' , 'com_componentbuilder' ) && $app -> isAdmin ()) // TODO for now only in admin area.
2016-01-30 20:28:43 +00:00
{
2016-05-06 23:41:41 +00:00
// build Create button
2016-05-31 05:11:07 +00:00
$buttonNamee = trim ( $buttonName );
$buttonNamee = preg_replace ( '/_+/' , ' ' , $buttonNamee );
$buttonNamee = preg_replace ( '/\s+/' , ' ' , $buttonNamee );
$buttonNamee = preg_replace ( " /[^A-Za-z ]/ " , '' , $buttonNamee );
$buttonNamee = ucfirst ( strtolower ( $buttonNamee ));
$button [] = '<a id="' . $buttonName . 'Create" class="btn btn-small btn-success hasTooltip" title="' . JText :: sprintf ( 'COM_COMPONENTBUILDER_CREATE_NEW_S' , $buttonNamee ) . ' " style= " border - radius : 0 px 4 px 4 px 0 px ; padding : 4 px 4 px 4 px 7 px ; "
2016-01-30 20:28:43 +00:00
href = " index.php?option=com_componentbuilder&view=field&layout=edit'. $ref .' " >
2016-05-06 23:41:41 +00:00
< span class = " icon-new icon-white " ></ span ></ a > ' ;
}
// only add if user allowed to edit field
2017-02-01 13:17:04 +00:00
if (( $buttonName === 'field' || $buttonName === 'fields' ) && $user -> authorise ( 'field.edit' , 'com_componentbuilder' ) && $app -> isAdmin ()) // TODO for now only in admin area.
2016-05-06 23:41:41 +00:00
{
// build edit button
2016-05-31 05:11:07 +00:00
$buttonNamee = trim ( $buttonName );
$buttonNamee = preg_replace ( '/_+/' , ' ' , $buttonNamee );
$buttonNamee = preg_replace ( '/\s+/' , ' ' , $buttonNamee );
$buttonNamee = preg_replace ( " /[^A-Za-z ]/ " , '' , $buttonNamee );
$buttonNamee = ucfirst ( strtolower ( $buttonNamee ));
$button [] = '<a id="' . $buttonName . 'Edit" class="btn btn-small hasTooltip" title="' . JText :: sprintf ( 'COM_COMPONENTBUILDER_EDIT_S' , $buttonNamee ) . ' " style= " display : none ; padding : 4 px 4 px 4 px 7 px ; " href= " #" >
2016-05-06 23:41:41 +00:00
< span class = " icon-edit " ></ span ></ a > ' ;
// build script
$script [] = "
jQuery ( document ) . ready ( function () {
jQuery ( '#adminForm' ) . on ( 'change' , '#jform_".$buttonName."' , function ( e ) {
e . preventDefault ();
var " . $buttonName . " Value = jQuery ( '#jform_".$buttonName."' ) . val ();
" . $buttonName . " Button ( " . $buttonName . " Value );
});
var " . $buttonName . " Value = jQuery ( '#jform_".$buttonName."' ) . val ();
" . $buttonName . " Button ( " . $buttonName . " Value );
});
function " . $buttonName . " Button ( value ) {
if ( value > 0 ) {
// hide the create button
jQuery ( '#".$buttonName."Create' ) . hide ();
// show edit button
jQuery ( '#".$buttonName."Edit' ) . show ();
var url = 'index.php?option=com_componentbuilder&view=fields&task=field.edit&id=' + value + '".$refJ."' ;
jQuery ( '#".$buttonName."Edit' ) . attr ( 'href' , url );
} else {
// show the create button
jQuery ( '#".$buttonName."Create' ) . show ();
// hide edit button
jQuery ( '#".$buttonName."Edit' ) . hide ();
}
} " ;
}
// check if button was created for field field.
2016-05-31 05:11:07 +00:00
if ( is_array ( $button ) && count ( $button ) > 0 )
2016-05-06 23:41:41 +00:00
{
// Load the needed script.
$document = JFactory :: getDocument ();
$document -> addScriptDeclaration ( implode ( ' ' , $script ));
// return the button attached to input field.
2016-07-12 21:07:55 +00:00
return '<div class="input-append">' . $html . implode ( '' , $button ) . '</div>' ;
2016-01-30 20:28:43 +00:00
}
}
return $html ;
}
/**
* Method to get a list of options for a list input .
*
* @ return array An array of JHtml options .
*/
public function getOptions ()
{
2017-10-16 17:14:23 +00:00
// load the db opbject
$db = JFactory :: getDBO ();
// get the input from url
$jinput = JFactory :: getApplication () -> input ;
// get the id
$ID = $jinput -> getInt ( 'id' , 0 );
// rest the fields ids
$fieldIds = array ();
if ( is_numeric ( $ID ) && $ID >= 1 )
{
// get the admin view ID
2017-10-19 03:53:55 +00:00
$adminView = ComponentbuilderHelper :: getVar ( 'admin_fields_conditions' , ( int ) $ID , 'id' , 'admin_view' );
}
else
{
// get the admin view ID
$adminView = $jinput -> getInt ( 'refid' , 0 );
}
if ( is_numeric ( $adminView ) && $adminView >= 1 )
{
// get all the fields linked to the admin view
if ( $addFields = ComponentbuilderHelper :: getVar ( 'admin_fields' , ( int ) $adminView , 'admin_view' , 'addfields' ))
2017-10-16 17:14:23 +00:00
{
2017-10-19 03:53:55 +00:00
if ( ComponentbuilderHelper :: checkJson ( $addFields ))
2017-10-16 17:14:23 +00:00
{
2017-10-19 03:53:55 +00:00
$addFields = json_decode ( $addFields , true );
if ( ComponentbuilderHelper :: checkArray ( $addFields ))
2017-10-16 17:14:23 +00:00
{
2017-10-19 03:53:55 +00:00
foreach ( $addFields as $addField )
2017-10-16 17:14:23 +00:00
{
2017-10-19 03:53:55 +00:00
if ( isset ( $addField [ 'field' ]))
2017-10-16 17:14:23 +00:00
{
2017-10-19 03:53:55 +00:00
$fieldIds [] = ( int ) $addField [ 'field' ];
2017-10-16 17:14:23 +00:00
}
}
}
}
}
}
$query = $db -> getQuery ( true );
$query -> select ( $db -> quoteName ( array ( 'a.id' , 'a.name' ), array ( 'id' , 'name' )));
$query -> from ( $db -> quoteName ( '#__componentbuilder_field' , 'a' ));
$query -> where ( $db -> quoteName ( 'a.published' ) . ' >= 1' );
// filter by fields linked
if ( ComponentbuilderHelper :: checkArray ( $fieldIds ))
{
// only load these fields
$query -> where ( $db -> quoteName ( 'a.id' ) . ' IN (' . implode ( ',' , $fieldIds ) . ')' );
}
$query -> order ( 'a.name ASC' );
$db -> setQuery (( string ) $query );
$items = $db -> loadObjectList ();
$options = array ();
if ( $items )
{
$options [] = JHtml :: _ ( 'select.option' , '' , 'Select an option' );
foreach ( $items as $item )
{
$options [] = JHtml :: _ ( 'select.option' , $item -> id , $item -> name );
}
}
2016-01-30 20:28:43 +00:00
return $options ;
}
}