Fixed gh-120 that allows export of component with language translations

This commit is contained in:
2017-09-18 02:18:23 +02:00
parent 72c6136bfb
commit 06416e665d
255 changed files with 801 additions and 850 deletions

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage ajax.php
@ -1085,150 +1085,6 @@ class ComponentbuilderModelAjax extends JModelList
}
// Used in language_translation
protected $functionArray = array(
'translation' => 'checkString',
'language' => 'getLanguageName');
protected function checkString($header, $value)
{
return $value;
}
protected function getLanguageName($header, $value)
{
if ($name = ComponentbuilderHelper::getVar($header, $value, 'langtag', 'name'))
{
return $name . ' (' . $value . ')';
}
return $value;
}
protected function setAutoLangZero()
{
// set the headers
$headers = array(
'translation' => JText::_('COM_COMPONENTBUILDER_TRANSLATION'),
'language' => JText::_('COM_COMPONENTBUILDER_LANGUAGE')
);
// loop the array
foreach ($headers as $key => $lang)
{
$this->setLanguage($key,$lang);
}
}
protected $languageArray = array();
protected function setLanguage($key,$lang)
{
$this->languageArray[$key] = $lang;
}
public function getLanguage()
{
// return the language string that were set
return $this->languageArray;
}
protected function autoLoader()
{
$functions = range(0,10);
foreach ($functions as $function)
{
$function = 'setAutoLang'.ComponentbuilderHelper::safeString($function, 'f');
if (method_exists($this, $function))
{
$this->{$function}();
}
}
foreach ($functions as $function)
{
$function = 'setAutoFunc'.ComponentbuilderHelper::safeString($function, 'f');
if (method_exists($this, $function))
{
$this->{$function}();
}
}
}
public function getBuildTable($idName, $oject)
{
if (ComponentbuilderHelper::checkJson($oject) && ComponentbuilderHelper::checkString($idName))
{
$array = json_decode($oject, true);
if (ComponentbuilderHelper::checkArray($array))
{
// make sure we run the autoloader to insure all is set
$this->autoLoader();
// set the target headers
$targetHeaders = $this->getLanguage();
// start table build
$table = '<table id="table_'.$idName.'" class="uk-table" style="margin: 5px 0 20px;"><thead><tr>';
$rows = array();
foreach ($array as $header => $values)
{
if (ComponentbuilderHelper::checkArray($values))
{
$targetHeader = (isset($targetHeaders[$header])) ? $targetHeaders[$header] : ComponentbuilderHelper::safeString($header, 'W');
$table .= '<th style="padding: 10px; text-align: center; border: 1px solid rgb(221, 221, 221);" scope="col">'.$targetHeader.'</th>';
foreach ($values as $nr => $value)
{
// set the value for the row
$this->setRows($nr, $this->setValue($header, $value), $rows);
}
}
}
// close header start body
$table .= '</tr></thead><tbody>';
// add rows to table
if (ComponentbuilderHelper::checkArray($rows))
{
foreach ($rows as $row)
{
$table .= '<tr>'.$row.'</tr>';
}
}
// close the body and table
$table .= '</tbody></table>';
// return the table
return $table;
}
}
return false;
}
protected function setValue($header, $value)
{
if (array_key_exists($header, $this->functionArray) && method_exists($this, $this->functionArray[$header]))
{
$value = $this->{$this->functionArray[$header]}($header, $value);
}
// if no value are set
if (!ComponentbuilderHelper::checkString($value))
{
$value = '-';
}
// make total stand out
if ('total' == $header)
{
$value = '<b>'.$value.'</b>';
}
return $value;
}
protected function setRows($nr, $value, &$rows)
{
// build rows
if (!isset($rows[$nr]))
{
$rows[$nr] = '<td style="padding: 10px; text-align: center; border: 1px solid rgb(221, 221, 221);">'.$value.'</td>';
}
else
{
$rows[$nr] .= '<td style="padding: 10px; text-align: center; border: 1px solid rgb(221, 221, 221);">'.$value.'</td>';
}
}
protected $viewid = array();

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 53 of this MVC
@build 5th August, 2017
@version @update number 55 of this MVC
@build 13th September, 2017
@created 1st February, 2017
@package Component Builder
@subpackage compiler.php
@ -164,12 +164,12 @@ class ComponentbuilderModelCompiler extends JModelList
return $db->loadObjectList();
}
public function builder($version, $id, $backup, $git, $addPlaceholders, $debugLinenr)
public function builder($version, $id, $backup, $repo, $addPlaceholders, $debugLinenr)
{
$set['joomlaVersion'] = $version;
$set['componentId'] = $id;
$set['addBackup'] = $backup;
$set['addGit'] = $git;
$set['addRepo'] = $repo;
$set['addPlaceholders'] = $addPlaceholders;
$set['debugLinenr'] = $debugLinenr;
// start up Compiler

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage componentbuilder.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage adminviewfolderlist.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage adminviews.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage articles.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage component.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage components.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage customadminviews.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage customfilelist.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage customfolderlist.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage customgets.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage dbtables.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage dynamicget.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage dynamicgets.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage fields.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage fieldsmulti.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage fieldtypes.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage lang.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage maingets.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage siteviewfolderlist.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage siteviews.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage snippets.php

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 366 of this MVC
@build 7th September, 2017
@version @update number 375 of this MVC
@build 17th September, 2017
@created 6th May, 2015
@package Component Builder
@subpackage joomla_component.js

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 39 of this MVC
@build 7th April, 2017
@version @update number 43 of this MVC
@build 16th September, 2017
@created 3rd April, 2017
@package Component Builder
@subpackage language_translation.js
@ -26,39 +26,9 @@
jQuery(document).ready(function($)
{
// build table of translations
var translation = encodeURIComponent(jQuery('#jform_translation').val());
if (translation) {
getBuildTable(translation,'jform_translation');
}
// set button to add more languages
addButton('language','components');
});
function getBuildTable_server(string, idName){
var getUrl = JRouter("index.php?option=com_componentbuilder&task=ajax.getBuildTable&format=json&vdm="+vastDevMod);
if(token.length > 0 && string.length > 0 && idName.length > 0){
var request = 'token='+token+'&idName='+idName+'&object='+string;
}
return jQuery.ajax({
type: 'GET',
url: getUrl,
dataType: 'jsonp',
data: request,
jsonp: 'callback'
});
}
function getBuildTable(string, idName){
getBuildTable_server(string, idName).done(function(result) {
jQuery('#table_'+idName).remove();
if(result){
addData(result, '#'+idName);
}
})
}
function addData(result, where){
jQuery(where).closest('.control-group').parent().append(result);
}
function addButton_server(type){
var getUrl = JRouter("index.php?option=com_componentbuilder&task=ajax.getButton&format=json&vdm="+vastDevMod);
if(token.length > 0 && type.length > 0){

View File

@ -104,44 +104,41 @@
readonly="true"
disabled="true"
/>
<!-- Translation Field. Type: Repeatable. (joomla) -->
<!-- Translation Field. Type: Subform. (joomla) -->
<field
type="repeatable"
type="subform"
name="translation"
label="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATION_TRANSLATION_LABEL"
layout="joomla.form.field.subform.repeatable-table"
multiple="true"
description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATION_TRANSLATION_DESCRIPTION"
id="translation"
class="translations"
select="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATION_TRANSLATION_SELECT"
icon="list"
maximum="50">
<fields name="translation_fields" label="">
<fieldset hidden="true" name="translation_modal" repeat="true">
<!-- Translation Field. Type: Textarea. (joomla) -->
<field
type="textarea"
name="translation"
label="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATION_TRANSLATION_LABEL"
rows="4"
cols="5"
class="text_area span12"
filter="STRING"
hint="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATION_TRANSLATION_HINT"
required="false"
/>
<!-- Language Field. Type: Lang. (custom) -->
<field
type="lang"
name="language"
label="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATION_LANGUAGE_LABEL"
class="list_class"
multiple="false"
default="0"
required="false"
button="false"
/>
</fieldset>
</fields>
maximum="200">
<form hidden="true" name="list_translation_modal" repeat="true">
<!-- Translation Field. Type: Textarea. (joomla) -->
<field
type="textarea"
name="translation"
label="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATION_TRANSLATION_LABEL"
rows="4"
cols="20"
class="text_area translation_text_area"
filter="STRING"
hint="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATION_TRANSLATION_HINT"
required="false"
/>
<!-- Language Field. Type: Lang. (custom) -->
<field
type="lang"
name="language"
label="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATION_LANGUAGE_LABEL"
class="list_class"
multiple="false"
default="0"
required="false"
button="false"
/>
</form>
</field>
<!-- Components Field. Type: Components. (custom) -->
<field

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage import.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.5.4
@build 13th September, 2017
@version 2.5.5
@build 17th September, 2017
@created 30th April, 2015
@package Component Builder
@subpackage import_joomla_components.php
@ -1487,23 +1487,68 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy
}
// merge the translations where needed
if (isset($item->translation) && isset($item->localTranslation)
&& ComponentbuilderHelper::checkJson($item->translation)
&& ComponentbuilderHelper::checkJson($item->translation)
&& ComponentbuilderHelper::checkJson($item->localTranslation))
{
$translations = json_decode($item->translation, true);
$localTranslations = json_decode($item->localTranslation, true);
foreach ($localTranslations['translation'] as $nr => $value)
$newTranslations = json_decode($item->translation, true);
$localTranslations = json_decode($item->localTranslation, true); // always the new format
$translations = array();
$pointer = 0;
$checker = array();
// okay we have the old format lets merge on that basis
if (isset($newTranslations['translation']))
{
// only keep old translation if the new does not have this translation & language
if (!in_array($value, $translations['translation']) && !in_array($localTranslations['language'][$nr], $translations['language']))
foreach ($localTranslations as $value)
{
$translations['translation'][] = $value;
$translations['language'][] = $localTranslations['language'][$nr];
// only keep old translation if the new does not have this translation & language
if (!in_array($value['language'], $newTranslations['language']))
{
$translations['translation' . $pointer] = array('translation' => $value['translation'], 'language' => $value['language']);
$pointer++;
}
}
foreach ($newTranslations['translation'] as $nr => $newTrans)
{
// now convert the new translation array
$translations['translation' . $pointer] = array('translation' => $newTrans, 'language' => $newTranslations['language'][$nr]);
$pointer++;
}
}
$item->translation = json_encode($translations);
// okay this is the new format lets merge on that basis
elseif (ComponentbuilderHelper::checkArray($newTranslations))
{
$translations = $newTranslations;
$pointer = count($translations);
foreach ($localTranslations as $value)
{
$keepLocal = true;
foreach ($newTranslations as $newValue)
{
// only keep old translation if the new does not have this translation & language
if ($value['language'] === $newValue['language'])
{
$keepLocal = false;
}
}
if ($keepLocal)
{
$translations['translation' . $pointer] = array('translation' => $value['translation'], 'language' => $value['language']);
$pointer++;
}
}
}
// okay seem to only have local translations
elseif (ComponentbuilderHelper::checkArray($localTranslations))
{
$translations = $localTranslations;
}
// only update if we have translations
if (ComponentbuilderHelper::checkArray($translations))
{
$item->translation = json_encode($translations);
}
}
elseif (isset($item->localTranslation) && ComponentbuilderHelper::checkJson($item->localTranslation))
elseif (isset($item->localTranslation) && ComponentbuilderHelper::checkJson($item->localTranslation))
{
$item->translation = $item->localTranslation;
}

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 366 of this MVC
@build 7th September, 2017
@version @update number 375 of this MVC
@build 17th September, 2017
@created 6th May, 2015
@package Component Builder
@subpackage joomla_component.php
@ -598,11 +598,15 @@ class ComponentbuilderModelJoomla_component extends JModelAdmin
if (ComponentbuilderHelper::checkJson($item->translation))
{
$translations = json_decode($item->translation, true);
if (ComponentbuilderHelper::checkArray($translations) && isset($translations['language']) && ComponentbuilderHelper::checkArray($translations['language']))
if (ComponentbuilderHelper::checkArray($translations))
{
foreach ($translations['language'] as $language)
foreach ($translations as $language)
{
$langBucket[$language] = $language;
if (isset($language['translation']) && ComponentbuilderHelper::checkString($language['translation'])
&& isset($language['language']) && ComponentbuilderHelper::checkString($language['language']))
{
$langBucket[$language['language']] = $language['language'];
}
}
}
}

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 366 of this MVC
@build 7th September, 2017
@version @update number 375 of this MVC
@build 17th September, 2017
@created 6th May, 2015
@package Component Builder
@subpackage joomla_components.php
@ -530,6 +530,40 @@ class ComponentbuilderModelJoomla_components extends JModelList
{
$values = json_decode($values, true);
}
// check if the key is an array (targeting subform)
if (ComponentbuilderHelper::checkArray($key) && isset($key['subform']) && ComponentbuilderHelper::checkArray($values))
{
$subform = $key['subform'];
$key = $key['key'];
$tmpBucket = array($key => array());
foreach ($values as $value)
{
if (isset($value[$subform]))
{
if ('language' === $subform)
{
$tmpBucket[$key][] = (int) ComponentbuilderHelper::getVar('language', $value[$subform], 'langtag', 'id');
}
else
{
$tmpBucket[$key][] = $value[$subform];
}
}
}
if (ComponentbuilderHelper::checkArray($tmpBucket[$key]))
{
// now set the values back
$values = $tmpBucket;
}
else
{
return false;
}
}
elseif (ComponentbuilderHelper::checkArray($key))
{
return false;
}
// make sure we have an array
if (('custom_code' !== $table && 'component' !== $key && 'custom_get' !== $key) && (!ComponentbuilderHelper::checkArray($values) || !isset($values[$key]) || !ComponentbuilderHelper::checkArray($values[$key])))
{
@ -1013,8 +1047,8 @@ class ComponentbuilderModelJoomla_components extends JModelList
$this->smartExport['language_translation'][$item->id] = $item;
// add languages
if (isset($item->translation))
{
$this->setData('language', $item->translation, 'language');
{
$this->setData('language', $item->translation, array('key' => 'language', 'subform' => 'language'));
}
}
}

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 39 of this MVC
@build 7th April, 2017
@version @update number 43 of this MVC
@build 16th September, 2017
@created 3rd April, 2017
@package Component Builder
@subpackage language_translation.php
@ -100,6 +100,14 @@ class ComponentbuilderModelLanguage_translation extends JModelAdmin
$item->metadata = $registry->toArray();
}
if (!empty($item->translation))
{
// Convert the translation field to an array.
$translation = new Registry;
$translation->loadString($item->translation);
$item->translation = $translation->toArray();
}
if (!empty($item->components))
{
// JSON Decode components.
@ -814,6 +822,19 @@ class ComponentbuilderModelLanguage_translation extends JModelAdmin
$data['metadata'] = (string) $metadata;
}
// Set the translation items to data.
if (isset($data['translation']) && is_array($data['translation']))
{
$translation = new JRegistry;
$translation->loadArray($data['translation']);
$data['translation'] = (string) $translation;
}
elseif (!isset($data['translation']))
{
// Set the empty translation to data
$data['translation'] = '';
}
// Set the components string to JSON string.
if (isset($data['components']))
{

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 39 of this MVC
@build 7th April, 2017
@version @update number 43 of this MVC
@build 16th September, 2017
@created 3rd April, 2017
@package Component Builder
@subpackage language_translations.php
@ -128,11 +128,15 @@ class ComponentbuilderModelLanguage_translations extends JModelList
if (ComponentbuilderHelper::checkJson($item->translation))
{
$translations = json_decode($item->translation, true);
if (ComponentbuilderHelper::checkArray($translations) && isset($translations['language']) && ComponentbuilderHelper::checkArray($translations['language']))
if (ComponentbuilderHelper::checkArray($translations))
{
foreach ($translations['language'] as $language)
foreach ($translations as $language)
{
$langBucket[$language] = $language;
if (isset($language['translation']) && ComponentbuilderHelper::checkString($language['translation'])
&& isset($language['language']) && ComponentbuilderHelper::checkString($language['language']))
{
$langBucket[$language['language']] = $language['language'];
}
}
}
}
@ -310,11 +314,15 @@ class ComponentbuilderModelLanguage_translations extends JModelList
if (ComponentbuilderHelper::checkJson($item->translation))
{
$translations = json_decode($item->translation, true);
if (ComponentbuilderHelper::checkArray($translations) && isset($translations['language']) && ComponentbuilderHelper::checkArray($translations['language']))
if (ComponentbuilderHelper::checkArray($translations))
{
foreach ($translations['language'] as $language)
foreach ($translations as $language)
{
$langBucket[$language] = $language;
if (isset($language['translation']) && ComponentbuilderHelper::checkString($language['translation'])
&& isset($language['language']) && ComponentbuilderHelper::checkString($language['language']))
{
$langBucket[$language['language']] = $language['language'];
}
}
}
}