added interface of the new decoupled libraries concept gh-92

This commit is contained in:
2017-11-26 02:29:08 +02:00
parent 9760ac86a3
commit 82df61aa4a
174 changed files with 11626 additions and 1094 deletions

View File

@ -211,6 +211,8 @@ class ComponentbuilderModelAjax extends JModelList
}
protected $buttonArray = array(
'library_config' => 'libraries_config',
'library_files_folders_urls' => 'libraries_files_folders_urls',
'admin_fields' => 'admins_fields',
'admin_fields_conditions' => 'admins_fields_conditions',
'field' => 'fields',
@ -338,6 +340,10 @@ class ComponentbuilderModelAjax extends JModelList
}
protected $functionArray = array(
// Library
'rename' => 'setYesNo',
'update' => 'setYesNo',
'type' => 'setURLType',
// Admin View
'field' => 'setItemNames',
'list' => 'setYesNo',
@ -379,6 +385,10 @@ class ComponentbuilderModelAjax extends JModelList
protected function getLanguage($key)
{
$language = array(
// Library (folder file url)
'rename' => JText::_('COM_COMPONENTBUILDER_RENAME'),
'path' => JText::_('COM_COMPONENTBUILDER_TARGET_PATH'),
'update' => JText::_('COM_COMPONENTBUILDER_UPDATE'),
// Admin View (fields)
'field' => JText::_('COM_COMPONENTBUILDER_FIELD'),
'list' => JText::_('COM_COMPONENTBUILDER_ADMIN_LIST'),
@ -546,11 +556,17 @@ class ComponentbuilderModelAjax extends JModelList
protected $ref;
protected $fieldsArray = array(
'library_config' => 'addconfig',
'library_files_folders_urls' => array('addurls','addfiles','addfolders'),
'admin_fields' => 'addfields',
'admin_fields_conditions' => 'addconditions',
'component_admin_views' => 'addadmin_views',
'component_site_views' => 'addsite_views',
'component_custom_admin_views' => 'addcustom_admin_views');
protected $allowedViewsArray = array(
'admin_view',
'joomla_component',
'library');
public function getAjaxDisplay($type)
{
@ -561,28 +577,39 @@ class ComponentbuilderModelAjax extends JModelList
// get the view name & id
$values = $this->getViewID();
// check if we are in the correct view.
if (!is_null($values['a_id']) && $values['a_id'] > 0 && strlen($values['a_view']) && ($values['a_view'] === 'admin_view' || $values['a_view'] === 'joomla_component'))
if (!is_null($values['a_id']) && $values['a_id'] > 0 && strlen($values['a_view']) && in_array($values['a_view'], $this->allowedViewsArray))
{
$this->ref = '&ref=' . $values['a_view'] . '&refid=' . $values['a_id'];
// get the field data
if ($fieldsData = ComponentbuilderHelper::getVar($type, (int) $values['a_id'], $values['a_view'], $this->fieldsArray[$type]))
// load the results
$result = array();
// return field table
if (ComponentbuilderHelper::checkArray($this->fieldsArray[$type]))
{
// check repeatable conversion
$this->checkRepeatableConversion($fieldsData, $type, $values['a_id'], $values['a_view']);
// get the table
$table = $this->getSubformTable($type, $fieldsData);
// set notice of bad practice
$notice = '';
if ($values['a_view'] === 'admin_view' && isset($this->rowNumber) && $this->rowNumber > 50)
foreach ($this->fieldsArray[$type] as $fieldName)
{
$notice = '<div class="alert alert-warning">' . JText::sprintf('COM_COMPONENTBUILDER_YOU_HAVE_S_S_ADDING_MORE_THEN_FIFTY_S_IS_CONSIDERED_BAD_PRACTICE_YOUR_S_PAGE_LOAD_IN_JCB_WILL_SLOWDOWN_YOU_SHOULD_CONSIDER_DECOUPLING_SOME_OF_THESE_S', $this->rowNumber, $typeName, $typeName, $typeName, $typeName) . '</div>';
if ($table = $this->getFieldTable($type, $values['a_id'], $values['a_view'], $fieldName, $typeName))
{
$result[] = $table;
}
}
elseif ($values['a_view'] === 'admin_view' && isset($this->rowNumber))
}
elseif (ComponentbuilderHelper::checkString($this->fieldsArray[$type]))
{
if ($table = $this->getFieldTable($type, $values['a_id'], $values['a_view'], $this->fieldsArray[$type], $typeName))
{
$notice = '<div class="alert alert-info">' . JText::sprintf('COM_COMPONENTBUILDER_YOU_HAVE_S_S_ADDING_MORE_THEN_FIFTY_S_IS_CONSIDERED_BAD_PRACTICE', $this->rowNumber, $typeName, $typeName) . '</div>';
$result[] = $table;
}
// return table
return $notice.$table;
}
// check if we have results
if (ComponentbuilderHelper::checkArray($result) && count($result) == 1)
{
// return the display
return implode('', $result);
}
elseif (ComponentbuilderHelper::checkArray($result))
{
// return the display
return '<div>' . implode('</div><div>', $result) . '</div>';
}
}
return '<div class="control-group"><div class="alert alert-info">' . JText::sprintf('COM_COMPONENTBUILDER_NO_S_HAVE_BEEN_LINKED_TO_THIS_VIEW_SOON_AS_THIS_IS_DONE_IT_WILL_BE_DISPLAYED_HERE', $typeName) . '</div></div>';
@ -590,6 +617,31 @@ class ComponentbuilderModelAjax extends JModelList
return '<div class="control-group"><div class="alert alert-error"><h4>' . JText::_('COM_COMPONENTBUILDER_TYPE_ERROR') . '</h4><p>' . JText::_('COM_COMPONENTBUILDER_THERE_HAS_BEEN_AN_ERROR_IF_THIS_CONTINUES_PLEASE_INFORM_YOUR_SYSTEM_ADMINISTRATOR_OF_A_TYPE_ERROR_IN_THE_FIELDS_DISPLAY_REQUEST') . '</p></div></div>';
}
protected function getFieldTable($type, $id, $idName, $fieldName, $typeName)
{
// get the field data
if ($fieldsData = ComponentbuilderHelper::getVar($type, (int) $id, $idName, $fieldName))
{
// check repeatable conversion
$this->checkRepeatableConversion($fieldsData, $fieldName, $id, $idName);
// get the table
$table = $this->getSubformTable($type, $fieldsData);
// set notice of bad practice
$notice = '';
if ($idName === 'admin_view' && isset($this->rowNumber) && $this->rowNumber > 50)
{
$notice = '<div class="alert alert-warning">' . JText::sprintf('COM_COMPONENTBUILDER_YOU_HAVE_S_S_ADDING_MORE_THEN_FIFTY_S_IS_CONSIDERED_BAD_PRACTICE_YOUR_S_PAGE_LOAD_IN_JCB_WILL_SLOWDOWN_YOU_SHOULD_CONSIDER_DECOUPLING_SOME_OF_THESE_S', $this->rowNumber, $typeName, $typeName, $typeName, $typeName) . '</div>';
}
elseif ($idName === 'admin_view' && isset($this->rowNumber))
{
$notice = '<div class="alert alert-info">' . JText::sprintf('COM_COMPONENTBUILDER_YOU_HAVE_S_S_ADDING_MORE_THEN_FIFTY_S_IS_CONSIDERED_BAD_PRACTICE', $this->rowNumber, $typeName, $typeName) . '</div>';
}
// return table
return $notice.$table;
}
return false;
}
protected $conversionCheck = array(
'addfields' => 'field',
'addconditions' => 'target_field',
@ -601,26 +653,26 @@ class ComponentbuilderModelAjax extends JModelList
'sql_tweak' => 'adminview',
'version_update' => 'version');
protected function checkRepeatableConversion(&$fieldsData, $type, $id, $linked_id_name)
protected function checkRepeatableConversion(&$fieldsData, $fieldsArrayType, $id, $linked_id_name)
{
if (ComponentbuilderHelper::checkJson($fieldsData))
if (ComponentbuilderHelper::checkJson($fieldsData) && isset($this->conversionCheck[$fieldsArrayType]))
{
$fieldsData = json_decode($fieldsData, true);
if (isset($fieldsData[$this->conversionCheck[$this->fieldsArray[$type]]]))
if (isset($fieldsData[$this->conversionCheck[$fieldsArrayType]]))
{
$bucket = array();
foreach($fieldsData as $option => $values)
{
foreach($values as $nr => $value)
{
$bucket[$this->fieldsArray[$type].$nr][$option] = $value;
$bucket[$fieldsArrayType.$nr][$option] = $value;
}
}
$fieldsData = json_encode($bucket);
// update the fields
$objectUpdate = new stdClass();
$objectUpdate->{$linked_id_name} = (int) $id;
$objectUpdate->{$this->fieldsArray[$type]} = $fieldsData;
$objectUpdate->{$fieldsArrayType} = $fieldsData;
JFactory::getDbo()->updateObject('#__componentbuilder_'.$type, $objectUpdate, 'admin_view');
}
}
@ -715,6 +767,23 @@ class ComponentbuilderModelAjax extends JModelList
return JText::_('COM_COMPONENTBUILDER_NO_ITEM_FOUND');
}
protected function setURLType($header, $value)
{
switch ($value)
{
case 1:
return JText::_('COM_COMPONENTBUILDER_DEFAULT_LINK');
break;
case 2:
return JText::_('COM_COMPONENTBUILDER_LOCAL_GET');
break;
case 3:
return JText::_('COM_COMPONENTBUILDER_LINK_LOCAL_DYNAMIC');
break;
}
return JText::_('COM_COMPONENTBUILDER_NOT_SET');
}
protected function setIcoMoon($header, $value)
{
if (ComponentbuilderHelper::checkString($value))
@ -1003,6 +1072,39 @@ class ComponentbuilderModelAjax extends JModelList
return false;
}
// Used in site_view
public function getSnippets($libraries)
{
if (ComponentbuilderHelper::checkJson($libraries))
{
$libraries = json_decode($libraries, true);
}
// check if we have an array
if (ComponentbuilderHelper::checkArray($libraries))
{
// insure we only have int values
$libraries = array_map( function($id){ return (int) $id; }, $libraries);
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
$query->select($db->quoteName( array('a.id') ));
$query->from($db->quoteName('#__componentbuilder_snippet', 'a'));
$query->where($db->quoteName('a.published') . ' = 1');
// check for country and region
$query->where($db->quoteName('a.library') . ' IN ('. implode(',',$libraries) .')');
$db->setQuery($query);
$db->execute();
if ($db->getNumRows())
{
return $db->loadColumn();
}
}
return false;
}
// Used in template
public function getTemplateDetails($id)
{