Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
aa2fc5a
Initial Multilanguage Support
jonmifsud Jun 11, 2013
4df3adc
Add XML Importer Support
jonmifsud Jun 12, 2013
e03a544
add classes & javascript to show only current language; or else chang…
jonmifsud Jun 12, 2013
433fabc
Add Textarea/multirow functionality as well as formatters, allowing t…
jonmifsud Aug 12, 2013
6636222
fix when a new field and there is no old schema, + slidedown formatte…
jonmifsud Aug 12, 2013
e838a16
close options where not applicable
jonmifsud Aug 12, 2013
912ebe2
extension driver change to handle addition of languages for multilingual
jonmifsud Aug 12, 2013
a8b1084
add require of importable field
Sep 5, 2013
d465d00
Merge branch 'multilanguage' of github.com:jonmifsud/dynamictextgroup…
Sep 5, 2013
23ecfa7
dynamic textgroup better multilingual formatting handling
Sep 12, 2013
12a8f43
update multilingual handling on front-end when creating duplicator co…
Sep 18, 2013
cc45516
switch to unformatted if data is null, and sanitize unformatted output
Oct 23, 2013
c3e7228
Merge remote-tracking branch 'source/development' into multilanguage
jonmifsud Mar 17, 2014
bcdae6e
update importable field support
jonmifsud Mar 17, 2014
ea7581e
add gitignore
jonmifsud Mar 26, 2014
2bc5968
support formatters for normal textarea + UI fixes + Version Bump
jonmifsud Jan 19, 2015
36feb96
fix publish output for textfield
jonmifsud Jan 19, 2015
97c6230
import array mode + xml fallback
jonmifsud Jan 21, 2015
0d9cf7c
add proper formatted output
jonmifsud Mar 30, 2015
208d411
fix formatting when there are blank values
jonmifsud Apr 8, 2015
ba7dc67
if field has space treat as empty
jonmifsud May 7, 2015
a72add4
update the retrieval sql function not the deprecated ones
jonmifsud Sep 1, 2015
50a12c2
fix checkbox setting
jonmifsud Sep 18, 2017
9a5fd29
update for php 7.x
jonmifsud Apr 2, 2018
15040ce
Merge branch 'multilanguage' of https://github.com/jonmifsud/dynamict…
jonmifsud Apr 2, 2018
8e97ed7
php 7-adapting
Jul 26, 2018
00c98d0
sorting by extra-fields
Dec 5, 2018
c9b046d
update count script
jonmifsud Mar 22, 2019
e27ca01
Merge branch 'multilanguage' of https://github.com/jonmifsud/dynamict…
jonmifsud Mar 22, 2019
33981d7
make sorting not break when sort fields not used
jonmifsud Mar 22, 2019
8ab12cb
fix saving of checkboxes when no value
jonmifsud Apr 18, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.DS_Store
45 changes: 43 additions & 2 deletions assets/dynamictextgroup.fieldeditor.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,15 @@
renames.handles = [];

$(".box", "#stage").each(function() {
var $this = $(this);
var field = {};
field.label = $('.tfield', $(this)).val();
field.width = Math.round(dtgEditor.parseWidth($(this).innerWidth())*10)/10;
field.options = {};
field.options.required = $('input[name="required"]', $(this)).is(':checked');
field.options.type = $('#fieldType', $(this)).val();
field.options.required = $this.find('input[name="required"]', $(this)).is(':checked');
field.options.multiline = $this.find('input[name="multiline"]', $(this)).is(':checked');
field.options.formatter = $this.find('select[name="fieldFormatter"]', $(this)).val();
field.options.type = $this.find('#fieldType', $(this)).val();
//if (field.options.type == 'select') field.options.selectItems = $('#selectItems', $(this)).val();
if (field.options.type == 'select') {
var str = $('#customSelect', $(this)).val();
Expand Down Expand Up @@ -150,6 +153,7 @@
// Field Type select
var fieldType = $('<select id="fieldType" name="fieldType"></select>')
.append('<option value="text">Textfield</option>')
.append('<option value="multilingual">Multilingual</option>')
.append('<option value="select">Select List</option>')
.append('<option value="checkbox">Checkbox</option>')
.append('<option value="radio">Radio Button</option>');
Expand All @@ -170,16 +174,36 @@
$('<a href="#" class="valOption">email</a>').click(function(){ $(validationRule).val('/^\\w(?:\\.?[\\w%+-]+)*@\\w(?:[\\w-]*\\.)+?[a-z]{2,}$/i'); dtgEditor.buildSchema(); return false; }).appendTo(validationRuleLabel);
$('<a href="#" class="valOption">URI</a>').click(function(){ $(validationRule).val('/^[^\\s:\\/?#]+:(?:\\/{2,3})?[^\\s.\\/?#]+(?:\\.[^\\s.\\/?#]+)*(?:\\/[^\\s?#]*\\??[^\\s?#]*(#[^\\s#]*)?)?$/'); dtgEditor.buildSchema(); return false; }).appendTo(validationRuleLabel);

// Formatter
var fieldFormatter = $('<select id="fieldFormatter" name="fieldFormatter"></select>')
.append('<option value="none">None</option>');
//append real formatters added in SymphonyVar
$.each(Symphony.textFormatters,function(index,value){
fieldFormatter.append('<option value="'+index+'">'+value+'</option>');
});

$(fieldFormatter).val(fOpts.formatter);
var fieldFormatterLabel = $('<label for="fieldFormatter">Field Formatter<br /></label>').append(fieldFormatter);

// Required checkbox
var requiredBox = $('<input type="checkbox" name="required" />');
if (fOpts.required) $(requiredBox).attr('checked','checked');
$(requiredBox).change(function() { dtgEditor.buildSchema(); });
var requiredBoxLabel = $('<label></label>').append(requiredBox).append('Required');

// Row Count Holder
console.log(fOpts);
var multilineBox = $('<input type="checkbox" name="multiline" />');
if (fOpts.multiline) $(multilineBox).attr('checked','checked');
$(multilineBox).change(function() { dtgEditor.buildSchema(); });
var multilineBoxLabel = $('<label></label>').append(multilineBox).append('Multiline');

// Append field type options
var fieldTypeHolder = $('<li></li>').append(fieldTypeLabel).appendTo($(options));
var selectItemsHolder = $('<li></li>').append(selectItemsLabel).append(customSelectLabel).appendTo($(options)).hide();
var validationRuleHolder = $('<li></li>').append(validationRuleLabel).appendTo($(options)).hide();
var fieldFormatterHolder = $('<li></li>').append(fieldFormatterLabel).appendTo($(options)).hide();
var multilineBoxHolder = $('<li></li>').append(multilineBoxLabel).appendTo($(options)).hide();
var requiredBoxHolder = $('<li></li>').append(requiredBoxLabel).appendTo($(options));

// Find current field type and show appropriate options
Expand All @@ -193,6 +217,14 @@
case 'text':
$(validationRuleHolder).show();
$(validationRule).val(fOpts.validationRule);
$(fieldFormatterHolder).show();
$(multilineBoxHolder).show();
break;
case 'multilingual':
$(validationRuleHolder).show();
$(validationRule).val(fOpts.validationRule);
$(fieldFormatterHolder).show();
$(multilineBoxHolder).show();
break;
}

Expand All @@ -204,13 +236,22 @@
// clear options
$(validationRuleHolder).slideUp(250);
$(selectItemsHolder).slideUp(250);
$(fieldFormatterHolder).slideUp(250);
$(multilineBoxHolder).slideUp(250);
// show appropriate options
switch($(this).val()) {
case 'select':
$(selectItemsHolder).slideDown(250);
break;
case 'multilingual':
$(validationRuleHolder).slideDown(250);
$(fieldFormatterHolder).slideDown(250);
$(multilineBoxHolder).slideDown(250);
break;
case 'text':
$(validationRuleHolder).slideDown(250);
$(fieldFormatterHolder).slideDown(250);
$(multilineBoxHolder).slideDown(250);
break;
case 'checkbox':
break;
Expand Down
10 changes: 9 additions & 1 deletion assets/dynamictextgroup.publish.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
$('.fieldtype-'+type).each(function() {
var checker = $('input[type="'+type+'"]', $(this));
var checkData = $('input[type="hidden"]', $(this));
if ($(checker).attr('checked')) {
if ($(checker).prop('checked')) {
$(checkData).val('yes');
} else {
$(checkData).val('');
Expand Down Expand Up @@ -103,6 +103,11 @@
$(this).removeClass('styled');
});
customSelect('.dtg');

$('.field-multilingual').on('click', 'li', function(){
var lang_code = $(this).data('lang_code');
$('.field-dynamictextgroup .fieldHolder.multilingual input,.field-dynamictextgroup .fieldHolder.multilingual textarea').hide().filter('.'+lang_code).show();
});

DynamicTextGroup.parseBadItems();
DynamicTextGroup.constructed();
Expand Down Expand Up @@ -137,6 +142,9 @@
$(this).removeClass('styled');
});
customSelect('.create');
var lang_code = $('.field-multilingual .tabs .active').eq(0).attr('class').substring(0,2);
console.log(lang_code);
$('.field-dynamictextgroup .fieldHolder.multilingual input,.field-dynamictextgroup .fieldHolder.multilingual textarea').hide().filter('.'+lang_code).show();
});

//$('.fields', manager).click(function() { event.stopPropagation(); });
Expand Down
66 changes: 66 additions & 0 deletions extension.driver.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,70 @@ public function uninstall() {
Symphony::Database()->query("DROP TABLE `tbl_fields_dynamictextgroup`");
}

/*------------------------------------------------------------------------------------------------*/
/* Delegates */
/*------------------------------------------------------------------------------------------------*/

public function getSubscribedDelegates(){
return array(
array(
'page' => '/extensions/frontend_localisation/',
'delegate' => 'FLSavePreferences',
'callback' => 'dFLSavePreferences'
),
);
}

/*------------------------------------------------------------------------------------------------*/
/* System preferences */
/*------------------------------------------------------------------------------------------------*/


/**
* Save options from Preferences page
*
* @param array $context
*/
public function dFLSavePreferences($context){
$fieldTable = "tbl_fields_dynamictextgroup";
$fields = Symphony::Database()->fetch(sprintf('SELECT `field_id` FROM `%s`', $fieldTable));

if( $fields ){
// Foreach field check multilanguage values foreach language
foreach( $fields as $field ){
$entries_table = 'tbl_entries_data_'.$field["field_id"];

try{
$columns = Symphony::Database()->fetchCol('Field',"SHOW COLUMNS FROM `{$entries_table}`;");
}
catch( DatabaseException $dbe ){
// Field doesn't exist. Better remove it's settings
Symphony::Database()->query(sprintf(
"DELETE FROM `%s` WHERE `field_id` = %s;",
$fieldTable, $field["field_id"])
);
continue;
}

$fieldObject = FieldManager::fetch($field["field_id"]);
$schema = json_decode($fieldObject->get('schema'));
foreach ($schema as $key => $schemaField) {
if ($schemaField->options->type=='multilingual'){
// var_dump($schemaField->handle);die;


foreach( $context['new_langs'] as $lc ){
// If column lang_code dosen't exist in the laguange drop columns

if( !in_array($schemaField->handle . '-'.$lc, $columns) ){
$fieldObject->__alterTable(1, $schemaField->handle . '-' . $lc ,$schemaField->options->multiline, $schemaField->options->formatter,$schemaField);
}
}
}
}

}
}
}

}
14 changes: 10 additions & 4 deletions extension.meta.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,25 @@
<url type="discuss">http://symphony-cms.com/discuss/thread/70781/</url>
<types>
<type>Field Types</type>
<type>Multilingual</type>
</types>
<authors>
<author>
<name github="brockpetrie" symphony="brockpetrie">Brock Petrie</name>
<website>http://www.brockpetrie.com</website>
</author>
<author>
<name github="jonmifsud" symphony="gunglien">Jon Mifsud</name>
<website>http://jonmifsud.com</website>
</author>
</authors>
<dependencies>
<dependency>stage</dependency>
</dependencies>
<releases>
<release version="3.1" date="2015-01-19" min="2.3.0">
- Added support for Text Formatters and Text Areas
- Added support for Multilanguage interfaces (requires Frontend Localisation)
</release>
<release version="3.0" date="2012-10-28" min="2.3.0">3.0 development</release>
<release version="2.0" date="2012-10-28" min="2.2.0">2.0 release</release>
<release version="2.0" date="2012-10-28" min="2.2.0" max='2.2.x'>2.0 release</release>
<release version="1.0" date="2011-06-05" min="2.2.0">Initial release</release>
</releases>
<media>
Expand Down
Loading