camaleon_cms 2.4.3 → 2.4.3.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of camaleon_cms might be problematic. Click here for more details.

Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/assets/javascripts/camaleon_cms/admin/_custom_fields.js +19 -5
  4. data/app/assets/javascripts/camaleon_cms/admin/_translator.js +12 -2
  5. data/app/assets/javascripts/camaleon_cms/admin/jquery_validate/de.js +20 -0
  6. data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/de.js +219 -0
  7. data/app/assets/javascripts/camaleon_cms/admin/uploader/_media_manager.js.coffee +2 -0
  8. data/app/controllers/camaleon_cms/admin/users_controller.rb +1 -1
  9. data/app/helpers/camaleon_cms/admin/category_helper.rb +11 -4
  10. data/app/helpers/camaleon_cms/admin/custom_fields_helper.rb +22 -1
  11. data/app/helpers/camaleon_cms/frontend/seo_helper.rb +2 -0
  12. data/app/helpers/camaleon_cms/frontend/site_helper.rb +5 -0
  13. data/app/helpers/camaleon_cms/short_code_helper.rb +10 -13
  14. data/app/models/camaleon_cms/post_type.rb +1 -2
  15. data/app/models/camaleon_cms/site.rb +1 -1
  16. data/app/models/concerns/camaleon_cms/custom_fields_read.rb +1 -1
  17. data/app/views/camaleon_cms/admin/categories/_form.html.erb +1 -1
  18. data/app/views/camaleon_cms/admin/posts/index.html.erb +1 -1
  19. data/app/views/camaleon_cms/admin/settings/custom_fields/_render.html.erb +2 -2
  20. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_categories.html.erb +11 -0
  21. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_post_types.html.erb +7 -0
  22. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_select.html.erb +3 -3
  23. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_url.html.erb +2 -2
  24. data/app/views/camaleon_cms/admin/users/index.html.erb +1 -1
  25. data/config/initializers/assets.rb +8 -6
  26. data/config/initializers/model_alias.rb +1 -1
  27. data/config/locales/camaleon_cms/admin/de.yml +681 -0
  28. data/config/locales/camaleon_cms/admin/en.yml +3 -3
  29. data/config/locales/camaleon_cms/admin/js.yml +51 -0
  30. data/config/locales/camaleon_cms/common.yml +67 -0
  31. data/config/locales/camaleon_cms/languages.yml +13 -0
  32. data/config/locales/camaleon_cms/routes.yml +8 -0
  33. data/config/system.json +1 -1
  34. data/lib/camaleon_cms/version.rb +1 -1
  35. metadata +8 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 205446e9210d677532d7361988a9383be938b8cb
4
- data.tar.gz: 79bd3290fcc54bc2fe42c2d624c78f6b76287420
3
+ metadata.gz: fdad92687ff9876d42095bdf25e09dd71df9bc23
4
+ data.tar.gz: f8069ba9e8bc54c08b3ef796590651587dcdc1fd
5
5
  SHA512:
6
- metadata.gz: dd2007e5c789b1fbd6470ef61ec9af7bd04b7e976d5bc8b790ea1814d20d51988bd40f2e9ef5259f2739bca67f602730c0a86272642b8afa8beb6f81ce7ad160
7
- data.tar.gz: 9ec35495f3dda62745d76822a2857842ad18c11e94b0f2e103615a0124fea1be0b183962c32e8d60a13c17800d09a70ac6fd31af5d1b5fb851efdc8a37c14f79
6
+ metadata.gz: 2879637c8c2cb01bc633c94d9e1b03971f2a85f8dcee0bf2af2a08a56165f1724e076bdd42eba7403d2037155e38413f1d08ddc77ccbe2b424ae9b25ff49770c
7
+ data.tar.gz: 9918e186699856f064f5392b67db467ac649f39db7cafec4006bec2db7d03c4961e40a575a00c7ce849b53a58044da6dbcd156d23140014d9a891608122a0521
data/README.md CHANGED
@@ -39,7 +39,7 @@
39
39
  * Add the gem in your Gemfile
40
40
 
41
41
  ```
42
- gem "camaleon_cms", '>= 2.4.2' # Stable versions 2.3.6, 2.2.1, 2.1.1, 2.1.0
42
+ gem "camaleon_cms", '>= 2.4.3.1' # Stable versions 2.3.6, 2.2.1, 2.1.1, 2.1.0
43
43
  # gem "camaleon_cms", github: 'owen2345/camaleon-cms' # current development version
44
44
  ```
45
45
  * Only Rails 5 support
@@ -69,13 +69,13 @@ function cama_build_custom_field(panel, field_data, values){
69
69
  field.find('.btn').addClass('disabled').unbind().click(function(){ return false; });
70
70
  }
71
71
 
72
- if (field_data.kind == 'checkbox') {
72
+ if (field_data.kind == 'checkbox'){
73
73
  field.find('input')[0].checked = value;
74
- } else if (value) {
75
- field.find('.input-value').val(value).trigger('change', {field_rendered: true});
74
+ }else if(value){
75
+ field.find('.input-value').val(value).trigger('change', {field_rendered: true}).data('value', value);
76
76
  }
77
77
  $sortable.append(field);
78
- if(callback) eval(callback + "(field, value);");
78
+ if(callback) window[callback](field, value);
79
79
  field_counter ++;
80
80
  }
81
81
  if(field_data.kind != 'checkbox' && values.length <= 0) {
@@ -117,7 +117,7 @@ function custom_field_colorpicker($field) {
117
117
  }
118
118
  function custom_field_colorpicker_val($field, value) {
119
119
  if ($field) {
120
- $field.find(".my-colorpicker").attr('data-color', value).colorpicker();
120
+ $field.find(".my-colorpicker").attr('data-color', value || '').colorpicker();
121
121
  }
122
122
  }
123
123
  function custom_field_checkbox_val($field, values) {
@@ -196,6 +196,20 @@ function custom_field_text_box($field) {
196
196
  }
197
197
  }
198
198
  }
199
+ function custom_field_url_callback($field) {
200
+ if ($field) {
201
+ if ($field.find('input').hasClass('is_translate')) {
202
+ $field.find('input').addClass('translatable').Translatable(ADMIN_TRANSLATIONS);
203
+ }
204
+ }
205
+ }
206
+ function custom_field_select_callback($field, val) {
207
+ if ($field) {
208
+ var sel = $field.find('select.input-value');
209
+ if (!val) sel.data('value', sel.val()); // fix for select translator
210
+ if(sel.hasClass('is_translate')) sel.addClass('translatable').Translatable(ADMIN_TRANSLATIONS);
211
+ }
212
+ }
199
213
 
200
214
  function load_upload_audio_field(thiss) {
201
215
  var $input = $(thiss).prev();
@@ -14,6 +14,7 @@ jQuery(function($){
14
14
  * @param default_language => not important (deprecated)
15
15
  * @returns {$.fn.Translatable}
16
16
  * @constructor
17
+ * select tag fix: save translated value in data-value
17
18
  */
18
19
  var TRANSLATOR_counter = 1;
19
20
  $.fn.Translatable = function(languages, default_language){
@@ -28,7 +29,7 @@ jQuery(function($){
28
29
  get_translations = function(text, language){
29
30
  var translations_per_locale = {};
30
31
  var res = "";
31
- if(text.trim().search("<!--") != 0 || !text){ // not translated string
32
+ if(!text || text.trim().search("<!--") != 0){ // not translated string
32
33
  for(var i in languages){
33
34
  translations_per_locale[languages[i]] = text;
34
35
  }
@@ -63,7 +64,7 @@ jQuery(function($){
63
64
 
64
65
  self.each(function(){
65
66
  var ele = $(this);
66
- var tabs_title = [], tabs_content = [], translations = get_translations(ele.val()), inputs = {};
67
+ var tabs_title = [], tabs_content = [], translations = get_translations(ele.is('select') ? ele.data('value') : ele.val()), inputs = {};
67
68
  var class_group = ele.parent().hasClass("form-group") ? "" : "form-group";
68
69
  // decoding languages
69
70
  for(var ii in languages){
@@ -91,6 +92,15 @@ jQuery(function($){
91
92
  var tabs = $('<div class="trans_panel" role="tabpanel"><ul class="nav nav-tabs" role="tablist"></ul><div class="tab-content"></div></div>');
92
93
  tabs.find(".nav-tabs").append(tabs_title.reverse());
93
94
  tabs.find(".tab-content").append(tabs_content);
95
+
96
+ // unknown fields (fix for select fields)
97
+ if(ele.is('select')){
98
+ var rep_field = $('<input type="hidden">').attr({class: ele.attr('class'), name: ele.attr('name')})
99
+ ele.replaceWith(rep_field);
100
+ ele = rep_field;
101
+ tabs_content[0].find('.translate-item').trigger('change');
102
+ }
103
+
94
104
  ele.addClass("translated-item").hide().after(tabs);
95
105
  //ele.data("tabs_content", tabs_content);
96
106
  ele.data("translation_inputs", inputs);
@@ -0,0 +1,20 @@
1
+ /*
2
+ * Translated default messages for the jQuery validation plugin.
3
+ * Locale: DE (German, Deutsch)
4
+ */
5
+ $.extend( $.validator.messages, {
6
+ required: "Dieses Feld ist ein Pflichtfeld.",
7
+ maxlength: $.validator.format( "Geben Sie bitte maximal {0} Zeichen ein." ),
8
+ minlength: $.validator.format( "Geben Sie bitte mindestens {0} Zeichen ein." ),
9
+ rangelength: $.validator.format( "Geben Sie bitte mindestens {0} und maximal {1} Zeichen ein." ),
10
+ email: "Geben Sie bitte eine gültige E-Mail Adresse ein.",
11
+ url: "Geben Sie bitte eine gültige URL ein.",
12
+ date: "Bitte geben Sie ein gültiges Datum ein.",
13
+ number: "Geben Sie bitte eine Nummer ein.",
14
+ digits: "Geben Sie bitte nur Ziffern ein.",
15
+ equalTo: "Bitte denselben Wert wiederholen.",
16
+ range: $.validator.format( "Geben Sie bitte einen Wert zwischen {0} und {1} ein." ),
17
+ max: $.validator.format( "Geben Sie bitte einen Wert kleiner oder gleich {0} ein." ),
18
+ min: $.validator.format( "Geben Sie bitte einen Wert größer oder gleich {0} ein." ),
19
+ creditcard: "Geben Sie bitte eine gültige Kreditkarten-Nummer ein."
20
+ } );
@@ -0,0 +1,219 @@
1
+ tinymce.addI18n('de',{
2
+ "Cut": "Ausschneiden",
3
+ "Heading 5": "\u00dcberschrift 5",
4
+ "Header 2": "\u00dcberschrift 2",
5
+ "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Ihr Browser unterst\u00fctzt leider keinen direkten Zugriff auf die Zwischenablage. Bitte benutzen Sie die Strg + X \/ C \/ V Tastenkombinationen.",
6
+ "Heading 4": "\u00dcberschrift 4",
7
+ "Div": "Textblock",
8
+ "Heading 2": "\u00dcberschrift 2",
9
+ "Paste": "Einf\u00fcgen",
10
+ "Close": "Schlie\u00dfen",
11
+ "Font Family": "Schriftart",
12
+ "Pre": "Vorformatierter Text",
13
+ "Align right": "Rechtsb\u00fcndig ausrichten",
14
+ "New document": "Neues Dokument",
15
+ "Blockquote": "Zitat",
16
+ "Numbered list": "Nummerierte Liste",
17
+ "Heading 1": "\u00dcberschrift 1",
18
+ "Headings": "\u00dcberschriften",
19
+ "Increase indent": "Einzug vergr\u00f6\u00dfern",
20
+ "Formats": "Formate",
21
+ "Headers": "\u00dcberschriften",
22
+ "Select all": "Alles ausw\u00e4hlen",
23
+ "Header 3": "\u00dcberschrift 3",
24
+ "Blocks": "Absatzformate",
25
+ "Undo": "R\u00fcckg\u00e4ngig",
26
+ "Strikethrough": "Durchgestrichen",
27
+ "Bullet list": "Aufz\u00e4hlung",
28
+ "Header 1": "\u00dcberschrift 1",
29
+ "Superscript": "Hochgestellt",
30
+ "Clear formatting": "Formatierung entfernen",
31
+ "Font Sizes": "Schriftgr\u00f6\u00dfe",
32
+ "Subscript": "Tiefgestellt",
33
+ "Header 6": "\u00dcberschrift 6",
34
+ "Redo": "Wiederholen",
35
+ "Paragraph": "Absatz",
36
+ "Ok": "Ok",
37
+ "Bold": "Fett",
38
+ "Code": "Quelltext",
39
+ "Italic": "Kursiv",
40
+ "Align center": "Zentriert ausrichten",
41
+ "Header 5": "\u00dcberschrift 5",
42
+ "Heading 6": "\u00dcberschrift 6",
43
+ "Heading 3": "\u00dcberschrift 3",
44
+ "Decrease indent": "Einzug verkleinern",
45
+ "Header 4": "\u00dcberschrift 4",
46
+ "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Einf\u00fcgen ist nun im einfachen Textmodus. Inhalte werden ab jetzt als unformatierter Text eingef\u00fcgt, bis Sie diese Einstellung wieder ausschalten!",
47
+ "Underline": "Unterstrichen",
48
+ "Cancel": "Abbrechen",
49
+ "Justify": "Blocksatz",
50
+ "Inline": "Zeichenformate",
51
+ "Copy": "Kopieren",
52
+ "Align left": "Linksb\u00fcndig ausrichten",
53
+ "Visual aids": "Visuelle Hilfen",
54
+ "Lower Greek": "Griechische Kleinbuchstaben",
55
+ "Square": "Quadrat",
56
+ "Default": "Standard",
57
+ "Lower Alpha": "Kleinbuchstaben",
58
+ "Circle": "Kreis",
59
+ "Disc": "Punkt",
60
+ "Upper Alpha": "Gro\u00dfbuchstaben",
61
+ "Upper Roman": "R\u00f6mische Zahlen (Gro\u00dfbuchstaben)",
62
+ "Lower Roman": "R\u00f6mische Zahlen (Kleinbuchstaben)",
63
+ "Name": "Name",
64
+ "Anchor": "Textmarke",
65
+ "You have unsaved changes are you sure you want to navigate away?": "Die \u00c4nderungen wurden noch nicht gespeichert, sind Sie sicher, dass Sie diese Seite verlassen wollen?",
66
+ "Restore last draft": "Letzten Entwurf wiederherstellen",
67
+ "Special character": "Sonderzeichen",
68
+ "Source code": "Quelltext",
69
+ "B": "B",
70
+ "R": "R",
71
+ "G": "G",
72
+ "Color": "Farbe",
73
+ "Right to left": "Von rechts nach links",
74
+ "Left to right": "Von links nach rechts",
75
+ "Emoticons": "Emoticons",
76
+ "Robots": "Robots",
77
+ "Document properties": "Dokumenteigenschaften",
78
+ "Title": "Titel",
79
+ "Keywords": "Sch\u00fcsselw\u00f6rter",
80
+ "Encoding": "Zeichenkodierung",
81
+ "Description": "Beschreibung",
82
+ "Author": "Verfasser",
83
+ "Fullscreen": "Vollbild",
84
+ "Horizontal line": "Horizontale Linie",
85
+ "Horizontal space": "Horizontaler Abstand",
86
+ "Insert\/edit image": "Bild einf\u00fcgen\/bearbeiten",
87
+ "General": "Allgemein",
88
+ "Advanced": "Erweitert",
89
+ "Source": "Quelle",
90
+ "Border": "Rahmen",
91
+ "Constrain proportions": "Seitenverh\u00e4ltnis beibehalten",
92
+ "Vertical space": "Vertikaler Abstand",
93
+ "Image description": "Bildbeschreibung",
94
+ "Style": "Stil",
95
+ "Dimensions": "Abmessungen",
96
+ "Insert image": "Bild einf\u00fcgen",
97
+ "Zoom in": "Ansicht vergr\u00f6\u00dfern",
98
+ "Contrast": "Kontrast",
99
+ "Back": "Zur\u00fcck",
100
+ "Gamma": "Gamma",
101
+ "Flip horizontally": "Horizontal spiegeln",
102
+ "Resize": "Skalieren",
103
+ "Sharpen": "Sch\u00e4rfen",
104
+ "Zoom out": "Ansicht verkleinern",
105
+ "Image options": "Bildeigenschaften",
106
+ "Apply": "Anwenden",
107
+ "Brightness": "Helligkeit",
108
+ "Rotate clockwise": "Im Uhrzeigersinn drehen",
109
+ "Rotate counterclockwise": "Gegen den Uhrzeigersinn drehen",
110
+ "Edit image": "Bild bearbeiten",
111
+ "Color levels": "Farbwerte",
112
+ "Crop": "Bescheiden",
113
+ "Orientation": "Ausrichtung",
114
+ "Flip vertically": "Vertikal spiegeln",
115
+ "Invert": "Invertieren",
116
+ "Insert date\/time": "Datum\/Uhrzeit einf\u00fcgen ",
117
+ "Remove link": "Link entfernen",
118
+ "Url": "URL",
119
+ "Text to display": "Anzuzeigender Text",
120
+ "Anchors": "Textmarken",
121
+ "Insert link": "Link einf\u00fcgen",
122
+ "New window": "Neues Fenster",
123
+ "None": "Keine",
124
+ "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Diese Adresse scheint ein externer Link zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"http:\/\/\" voranstellen?",
125
+ "Target": "Ziel",
126
+ "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Diese Adresse scheint eine E-Mail-Adresse zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"mailto:\" voranstellen?",
127
+ "Insert\/edit link": "Link einf\u00fcgen\/bearbeiten",
128
+ "Insert\/edit video": "Video einf\u00fcgen\/bearbeiten",
129
+ "Poster": "Poster",
130
+ "Alternative source": "Alternative Quelle",
131
+ "Paste your embed code below:": "F\u00fcgen Sie Ihren Einbettungscode hier ein:",
132
+ "Insert video": "Video einf\u00fcgen",
133
+ "Embed": "Einbetten",
134
+ "Nonbreaking space": "Gesch\u00fctztes Leerzeichen",
135
+ "Page break": "Seitenumbruch",
136
+ "Paste as text": "Als Text einf\u00fcgen",
137
+ "Preview": "Vorschau",
138
+ "Print": "Drucken",
139
+ "Save": "Speichern",
140
+ "Could not find the specified string.": "Die Zeichenfolge wurde nicht gefunden.",
141
+ "Replace": "Ersetzen",
142
+ "Next": "Weiter",
143
+ "Whole words": "Nur ganze W\u00f6rter",
144
+ "Find and replace": "Suchen und ersetzen",
145
+ "Replace with": "Ersetzen durch",
146
+ "Find": "Suchen",
147
+ "Replace all": "Alles ersetzen",
148
+ "Match case": "Gro\u00df-\/Kleinschreibung beachten",
149
+ "Prev": "Zur\u00fcck",
150
+ "Spellcheck": "Rechtschreibpr\u00fcfung",
151
+ "Finish": "Ende",
152
+ "Ignore all": "Alles Ignorieren",
153
+ "Ignore": "Ignorieren",
154
+ "Add to Dictionary": "Zum W\u00f6rterbuch hinzuf\u00fcgen",
155
+ "Insert row before": "Neue Zeile davor einf\u00fcgen ",
156
+ "Rows": "Zeilen",
157
+ "Height": "H\u00f6he",
158
+ "Paste row after": "Zeile danach einf\u00fcgen",
159
+ "Alignment": "Ausrichtung",
160
+ "Border color": "Rahmenfarbe",
161
+ "Column group": "Spaltengruppe",
162
+ "Row": "Zeile",
163
+ "Insert column before": "Neue Spalte davor einf\u00fcgen",
164
+ "Split cell": "Zelle aufteilen",
165
+ "Cell padding": "Zelleninnenabstand",
166
+ "Cell spacing": "Zellenabstand",
167
+ "Row type": "Zeilentyp",
168
+ "Insert table": "Tabelle einf\u00fcgen",
169
+ "Body": "Inhalt",
170
+ "Caption": "Beschriftung",
171
+ "Footer": "Fu\u00dfzeile",
172
+ "Delete row": "Zeile l\u00f6schen",
173
+ "Paste row before": "Zeile davor einf\u00fcgen",
174
+ "Scope": "G\u00fcltigkeitsbereich",
175
+ "Delete table": "Tabelle l\u00f6schen",
176
+ "H Align": "Horizontale Ausrichtung",
177
+ "Top": "Oben",
178
+ "Header cell": "Kopfzelle",
179
+ "Column": "Spalte",
180
+ "Row group": "Zeilengruppe",
181
+ "Cell": "Zelle",
182
+ "Middle": "Mitte",
183
+ "Cell type": "Zellentyp",
184
+ "Copy row": "Zeile kopieren",
185
+ "Row properties": "Zeileneigenschaften",
186
+ "Table properties": "Tabelleneigenschaften",
187
+ "Bottom": "Unten",
188
+ "V Align": "Vertikale Ausrichtung",
189
+ "Header": "Kopfzeile",
190
+ "Right": "Rechtsb\u00fcndig",
191
+ "Insert column after": "Neue Spalte danach einf\u00fcgen",
192
+ "Cols": "Spalten",
193
+ "Insert row after": "Neue Zeile danach einf\u00fcgen",
194
+ "Width": "Breite",
195
+ "Cell properties": "Zelleneigenschaften",
196
+ "Left": "Linksb\u00fcndig",
197
+ "Cut row": "Zeile ausschneiden",
198
+ "Delete column": "Spalte l\u00f6schen",
199
+ "Center": "Zentriert",
200
+ "Merge cells": "Zellen verbinden",
201
+ "Insert template": "Vorlage einf\u00fcgen ",
202
+ "Templates": "Vorlagen",
203
+ "Background color": "Hintergrundfarbe",
204
+ "Custom...": "Benutzerdefiniert...",
205
+ "Custom color": "Benutzerdefinierte Farbe",
206
+ "No color": "Keine Farbe",
207
+ "Text color": "Textfarbe",
208
+ "Show blocks": " Bl\u00f6cke anzeigen",
209
+ "Show invisible characters": "Unsichtbare Zeichen anzeigen",
210
+ "Words: {0}": "W\u00f6rter: {0}",
211
+ "Insert": "Einf\u00fcgen",
212
+ "File": "Datei",
213
+ "Edit": "Bearbeiten",
214
+ "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich-Text- Area. Dr\u00fccken Sie ALT-F9 f\u00fcr das Men\u00fc. Dr\u00fccken Sie ALT-F10 f\u00fcr Symbolleiste. Dr\u00fccken Sie ALT-0 f\u00fcr Hilfe",
215
+ "Tools": "Werkzeuge",
216
+ "View": "Ansicht",
217
+ "Table": "Tabelle",
218
+ "Format": "Format"
219
+ });
@@ -213,7 +213,9 @@ window["cama_init_media"] = (media_panel) ->
213
213
  hideLoading()
214
214
  modal.modal("hide")
215
215
  if res.search("folder_item") >= 0 # success upload
216
+ res = $(res)
216
217
  media_files_panel.append(res)
218
+ res.click()
217
219
  else
218
220
  $.fn.alert({type: 'error', content: res, title: "Error"})
219
221
  )
@@ -5,7 +5,7 @@ class CamaleonCms::Admin::UsersController < CamaleonCms::AdminController
5
5
 
6
6
  def index
7
7
  add_breadcrumb I18n.t("camaleon_cms.admin.users.list_users")
8
- @users = current_site.users.paginate(:page => params[:page], :per_page => current_site.admin_per_page).decorate
8
+ @users = current_site.users.paginate(:page => params[:page], :per_page => current_site.admin_per_page)
9
9
  end
10
10
 
11
11
  def profile
@@ -4,12 +4,19 @@ module CamaleonCms::Admin::CategoryHelper
4
4
  # build an array multiple with category items prefixed with - for each level
5
5
  # categories: collection of categories
6
6
  # level: internal iterator control
7
- def cama_category_get_options_html(categories, level = 0)
7
+ # attrs: (Hash) extra params
8
+ # max_level: (Integer) permit to stop iteration in certain level
9
+ # until_cats: (Array of cat ids) permit to stop iteration if current iteration is in this array
10
+ # exclude_cats: (Array of cat ids) exclude this categories from the list
11
+ def cama_category_get_options_html(categories, level = 0, attrs = {})
12
+ attrs = {max_level: 1000, until_cats:[], exclude_cats: []}.merge(attrs)
8
13
  options = []
9
14
  categories.all.decorate.each do |category|
10
- options << [("—"*level) + category.the_title, category.id] unless @category.id == category.id
11
- children = category.children
12
- options += cama_category_get_options_html(children, level + 1) if children.size > 0
15
+ next if attrs[:exclude_cats].include?(category.id)
16
+ options << [("—"*level) + category.the_title, category.id]
17
+ children = attrs[:max_level] < level ? [] : category.children
18
+ children = [] if attrs[:until_cats].include?(category.id)
19
+ options += cama_category_get_options_html(children, level + 1, attrs) if children.size > 0
13
20
  end
14
21
  options
15
22
  end
@@ -31,7 +31,8 @@ module CamaleonCms::Admin::CustomFieldsHelper
31
31
  label: t('camaleon_cms.admin.custom_field.fields.select'),
32
32
  options: {
33
33
  required: true,
34
- multiple: false,
34
+ multiple: true,
35
+ translate: true,
35
36
  multiple_options: {
36
37
  label: t('camaleon_cms.admin.settings.options_select'),
37
38
  default: 'radio'
@@ -232,6 +233,7 @@ module CamaleonCms::Admin::CustomFieldsHelper
232
233
  options: {
233
234
  required: true,
234
235
  multiple: true,
236
+ translate: true,
235
237
  default_value: '',
236
238
  show_frontend: true
237
239
  }
@@ -272,6 +274,25 @@ module CamaleonCms::Admin::CustomFieldsHelper
272
274
  }
273
275
  ]
274
276
  }
277
+
278
+ items[:post_types] = {
279
+ key: 'post_types',
280
+ label: t('camaleon_cms.admin.post_type.post_types'),
281
+ options: {
282
+ required: true,
283
+ multiple: true
284
+ }
285
+ }
286
+
287
+ items[:categories] = {
288
+ key: 'categories',
289
+ label: t('camaleon_cms.admin.table.categories'),
290
+ options: {
291
+ required: true,
292
+ multiple: true
293
+ }
294
+ }
295
+
275
296
  # evaluate the content of command value on listing
276
297
  # sample command: options_from_collection_for_select(current_site.the_posts("commerce").decorate, :id, :the_title)
277
298
  items[:select_eval] = {
@@ -17,6 +17,8 @@ module CamaleonCms::Frontend::SeoHelper
17
17
  data2 = {title: "#{current_site.the_title} | #{@cama_visited_tag.the_title}", description: @cama_visited_tag.the_excerpt, keywords: @cama_visited_tag.the_keywords, object: @cama_visited_tag }
18
18
  elsif is_category?
19
19
  data2 = {image: @cama_visited_category.the_thumb_url, title: "#{current_site.the_title} | #{@cama_visited_category.the_title}", description: @cama_visited_category.the_excerpt, keywords: @cama_visited_category.the_keywords, object: @cama_visited_category }
20
+ elsif is_profile?
21
+ data2 = {image: @user.the_avatar, title: "#{current_site.the_title} | #{@user.the_name}", description: @user.the_slogan, object: @user }
20
22
  else
21
23
  data2 = {}
22
24
  end