diff --git a/modules/backend/ServiceProvider.php b/modules/backend/ServiceProvider.php index eafe022ea..9ea60b84d 100644 --- a/modules/backend/ServiceProvider.php +++ b/modules/backend/ServiceProvider.php @@ -75,10 +75,29 @@ class ServiceProvider extends ModuleServiceProvider 'editor' => [ 'label' => 'backend::lang.editor.menu_label', 'description' => 'backend::lang.editor.menu_description', - 'category' => 'System', + 'category' => 'My Settings', 'icon' => 'icon-code', - 'url' => Backend::URL('backend/editorsettings'), - 'sort' => 200 + 'url' => Backend::URL('backend/editorpreferences'), + 'sort' => 200, + 'context' => 'mysettings' + ], + 'backend_preferences' => [ + 'label' => 'backend::lang.backend_preferences.menu_label', + 'description' => 'backend::lang.backend_preferences.menu_description', + 'category' => 'My Settings', + 'icon' => 'icon-laptop', + 'class' => 'Backend\Models\BackendPreferences', + 'sort' => 200, + 'context' => 'mysettings' + ], + 'myaccount' => [ + 'label' => 'backend::lang.myaccount.menu_label', + 'description' => 'backend::lang.myaccount.menu_description', + 'category' => 'My Settings', + 'icon' => 'icon-user', + 'url' => Backend::URL('backend/users/myaccount'), + 'sort' => 200, + 'context' => 'mysettings' ], ]); }); diff --git a/modules/backend/assets/css/october.css b/modules/backend/assets/css/october.css index 2fd6c3954..cad0ea24f 100644 --- a/modules/backend/assets/css/october.css +++ b/modules/backend/assets/css/october.css @@ -6373,6 +6373,787 @@ a .icon-flip-vertical:before { .oc-icon-plus-square-o:before { content: "\f196"; } +[class^="flag-"], +[class*=" flag-"] { + background: url(../images/flag-icons-small.png) no-repeat; + width: 16px; + height: 16px; + line-height: 16px; + vertical-align: middle; + display: inline-block; + margin: -1 2px 0 2px; +} +.flag-AfricanUnion { + background-position: 0 -16px; +} +.flag-ArabLeague { + background-position: 0 -32px; +} +.flag-ASEAN { + background-position: 0 -48px; +} +.flag-CARICOM { + background-position: 0 -64px; +} +.flag-CIS { + background-position: 0 -80px; +} +.flag-Commonwealth { + background-position: 0 -96px; +} +.flag-England { + background-position: 0 -112px; +} +.flag-European_Union { + background-position: 0 -128px; +} +.flag-Islamic_Conference { + background-position: 0 -144px; +} +.flag-Kosovo { + background-position: 0 -160px; +} +.flag-NATO { + background-position: 0 -176px; +} +.flag-NorthernCyprus { + background-position: 0 -192px; +} +.flag-NorthernIreland { + background-position: 0 -208px; +} +.flag-OlimpicMovement { + background-position: 0 -224px; +} +.flag-OPEC { + background-position: 0 -240px; +} +.flag-RedCross { + background-position: 0 -256px; +} +.flag-Scotland { + background-position: 0 -272px; +} +.flag-Somaliland { + background-position: 0 -288px; +} +.flag-Tibet { + background-position: 0 -304px; +} +.flag-United_Nations { + background-position: 0 -320px; +} +.flag-Wales { + background-position: 0 -336px; +} +.flag-eu { + background-position: 0 -128px; +} +.flag-ad { + background-position: 0 -352px; +} +.flag-ae { + background-position: 0 -368px; +} +.flag-af { + background-position: 0 -384px; +} +.flag-ag { + background-position: 0 -400px; +} +.flag-ai { + background-position: 0 -416px; +} +.flag-al { + background-position: 0 -432px; +} +.flag-am { + background-position: 0 -448px; +} +.flag-ao { + background-position: 0 -464px; +} +.flag-aq { + background-position: 0 -480px; +} +.flag-ar { + background-position: 0 -496px; +} +.flag-as { + background-position: 0 -512px; +} +.flag-at { + background-position: 0 -528px; +} +.flag-au { + background-position: 0 -544px; +} +.flag-aw { + background-position: 0 -560px; +} +.flag-ax { + background-position: 0 -576px; +} +.flag-az { + background-position: 0 -592px; +} +.flag-ba { + background-position: 0 -608px; +} +.flag-bb { + background-position: 0 -624px; +} +.flag-bd { + background-position: 0 -640px; +} +.flag-be { + background-position: 0 -656px; +} +.flag-bf { + background-position: 0 -672px; +} +.flag-bg { + background-position: 0 -688px; +} +.flag-bh { + background-position: 0 -704px; +} +.flag-bi { + background-position: 0 -720px; +} +.flag-bj { + background-position: 0 -736px; +} +.flag-bm { + background-position: 0 -752px; +} +.flag-bn { + background-position: 0 -768px; +} +.flag-bo { + background-position: 0 -784px; +} +.flag-br { + background-position: 0 -800px; +} +.flag-bs { + background-position: 0 -816px; +} +.flag-bt { + background-position: 0 -832px; +} +.flag-bw { + background-position: 0 -848px; +} +.flag-by { + background-position: 0 -864px; +} +.flag-bz { + background-position: 0 -880px; +} +.flag-ca { + background-position: 0 -896px; +} +.flag-cg { + background-position: 0 -912px; +} +.flag-cf { + background-position: 0 -928px; +} +.flag-cd { + background-position: 0 -944px; +} +.flag-ch { + background-position: 0 -960px; +} +.flag-ci { + background-position: 0 -976px; +} +.flag-ck { + background-position: 0 -992px; +} +.flag-cl { + background-position: 0 -1008px; +} +.flag-cm { + background-position: 0 -1024px; +} +.flag-cn { + background-position: 0 -1040px; +} +.flag-co { + background-position: 0 -1056px; +} +.flag-cr { + background-position: 0 -1072px; +} +.flag-cu { + background-position: 0 -1088px; +} +.flag-cv { + background-position: 0 -1104px; +} +.flag-cy { + background-position: 0 -1120px; +} +.flag-cz { + background-position: 0 -1136px; +} +.flag-de { + background-position: 0 -1152px; +} +.flag-dj { + background-position: 0 -1168px; +} +.flag-dk { + background-position: 0 -1184px; +} +.flag-dm { + background-position: 0 -1200px; +} +.flag-do { + background-position: 0 -1216px; +} +.flag-dz { + background-position: 0 -1232px; +} +.flag-ec { + background-position: 0 -1248px; +} +.flag-ee { + background-position: 0 -1264px; +} +.flag-eg { + background-position: 0 -1280px; +} +.flag-eh { + background-position: 0 -1296px; +} +.flag-er { + background-position: 0 -1312px; +} +.flag-es { + background-position: 0 -1328px; +} +.flag-et { + background-position: 0 -1344px; +} +.flag-fi { + background-position: 0 -1360px; +} +.flag-fj { + background-position: 0 -1376px; +} +.flag-fm { + background-position: 0 -1392px; +} +.flag-fo { + background-position: 0 -1408px; +} +.flag-fr { + background-position: 0 -1424px; +} +.flag-bl { + background-position: 0 -1424px; +} +.flag-cp { + background-position: 0 -1424px; +} +.flag-mf { + background-position: 0 -1424px; +} +.flag-yt { + background-position: 0 -1424px; +} +.flag-ga { + background-position: 0 -1440px; +} +.flag-gb { + background-position: 0 -1456px; +} +.flag-sh { + background-position: 0 -1456px; +} +.flag-gd { + background-position: 0 -1472px; +} +.flag-ge { + background-position: 0 -1488px; +} +.flag-gg { + background-position: 0 -1504px; +} +.flag-gh { + background-position: 0 -1520px; +} +.flag-gi { + background-position: 0 -1536px; +} +.flag-gl { + background-position: 0 -1552px; +} +.flag-gm { + background-position: 0 -1568px; +} +.flag-gn { + background-position: 0 -1584px; +} +.flag-gp { + background-position: 0 -1600px; +} +.flag-gq { + background-position: 0 -1616px; +} +.flag-gr { + background-position: 0 -1632px; +} +.flag-gt { + background-position: 0 -1648px; +} +.flag-gu { + background-position: 0 -1664px; +} +.flag-gw { + background-position: 0 -1680px; +} +.flag-gy { + background-position: 0 -1696px; +} +.flag-hk { + background-position: 0 -1712px; +} +.flag-hn { + background-position: 0 -1728px; +} +.flag-hr { + background-position: 0 -1744px; +} +.flag-ht { + background-position: 0 -1760px; +} +.flag-hu { + background-position: 0 -1776px; +} +.flag-id { + background-position: 0 -1792px; +} +.flag-mc { + background-position: 0 -1792px; +} +.flag-ie { + background-position: 0 -1808px; +} +.flag-il { + background-position: 0 -1824px; +} +.flag-im { + background-position: 0 -1840px; +} +.flag-in { + background-position: 0 -1856px; +} +.flag-iq { + background-position: 0 -1872px; +} +.flag-ir { + background-position: 0 -1888px; +} +.flag-is { + background-position: 0 -1904px; +} +.flag-it { + background-position: 0 -1920px; +} +.flag-je { + background-position: 0 -1936px; +} +.flag-jm { + background-position: 0 -1952px; +} +.flag-jo { + background-position: 0 -1968px; +} +.flag-jp { + background-position: 0 -1984px; +} +.flag-ke { + background-position: 0 -2000px; +} +.flag-kg { + background-position: 0 -2016px; +} +.flag-kh { + background-position: 0 -2032px; +} +.flag-ki { + background-position: 0 -2048px; +} +.flag-km { + background-position: 0 -2064px; +} +.flag-kn { + background-position: 0 -2080px; +} +.flag-kp { + background-position: 0 -2096px; +} +.flag-kr { + background-position: 0 -2112px; +} +.flag-kw { + background-position: 0 -2128px; +} +.flag-ky { + background-position: 0 -2144px; +} +.flag-kz { + background-position: 0 -2160px; +} +.flag-la { + background-position: 0 -2176px; +} +.flag-lb { + background-position: 0 -2192px; +} +.flag-lc { + background-position: 0 -2208px; +} +.flag-li { + background-position: 0 -2224px; +} +.flag-lk { + background-position: 0 -2240px; +} +.flag-lr { + background-position: 0 -2256px; +} +.flag-ls { + background-position: 0 -2272px; +} +.flag-lt { + background-position: 0 -2288px; +} +.flag-lu { + background-position: 0 -2304px; +} +.flag-lv { + background-position: 0 -2320px; +} +.flag-ly { + background-position: 0 -2336px; +} +.flag-ma { + background-position: 0 -2352px; +} +.flag-md { + background-position: 0 -2368px; +} +.flag-me { + background-position: 0 -2384px; +} +.flag-mg { + background-position: 0 -2400px; +} +.flag-mh { + background-position: 0 -2416px; +} +.flag-mk { + background-position: 0 -2432px; +} +.flag-ml { + background-position: 0 -2448px; +} +.flag-mm { + background-position: 0 -2464px; +} +.flag-mn { + background-position: 0 -2480px; +} +.flag-mo { + background-position: 0 -2496px; +} +.flag-mq { + background-position: 0 -2512px; +} +.flag-mr { + background-position: 0 -2528px; +} +.flag-ms { + background-position: 0 -2544px; +} +.flag-mt { + background-position: 0 -2560px; +} +.flag-mu { + background-position: 0 -2576px; +} +.flag-mv { + background-position: 0 -2592px; +} +.flag-mw { + background-position: 0 -2608px; +} +.flag-mx { + background-position: 0 -2624px; +} +.flag-my { + background-position: 0 -2640px; +} +.flag-mz { + background-position: 0 -2656px; +} +.flag-na { + background-position: 0 -2672px; +} +.flag-nc { + background-position: 0 -2688px; +} +.flag-ne { + background-position: 0 -2704px; +} +.flag-ng { + background-position: 0 -2720px; +} +.flag-ni { + background-position: 0 -2736px; +} +.flag-nl { + background-position: 0 -2752px; +} +.flag-bq { + background-position: 0 -2752px; +} +.flag-no { + background-position: 0 -2768px; +} +.flag-bv { + background-position: 0 -2768px; +} +.flag-nq { + background-position: 0 -2768px; +} +.flag-sj { + background-position: 0 -2768px; +} +.flag-np { + background-position: 0 -2784px; +} +.flag-nr { + background-position: 0 -2800px; +} +.flag-nz { + background-position: 0 -2816px; +} +.flag-om { + background-position: 0 -2832px; +} +.flag-pa { + background-position: 0 -2848px; +} +.flag-pe { + background-position: 0 -2864px; +} +.flag-pf { + background-position: 0 -2880px; +} +.flag-pg { + background-position: 0 -2896px; +} +.flag-ph { + background-position: 0 -2912px; +} +.flag-pk { + background-position: 0 -2928px; +} +.flag-pl { + background-position: 0 -2944px; +} +.flag-pr { + background-position: 0 -2960px; +} +.flag-ps { + background-position: 0 -2976px; +} +.flag-pt { + background-position: 0 -2992px; +} +.flag-pw { + background-position: 0 -3008px; +} +.flag-py { + background-position: 0 -3024px; +} +.flag-qa { + background-position: 0 -3040px; +} +.flag-re { + background-position: 0 -3056px; +} +.flag-ro { + background-position: 0 -3072px; +} +.flag-rs { + background-position: 0 -3088px; +} +.flag-ru { + background-position: 0 -3104px; +} +.flag-rw { + background-position: 0 -3120px; +} +.flag-sa { + background-position: 0 -3136px; +} +.flag-sb { + background-position: 0 -3152px; +} +.flag-sc { + background-position: 0 -3168px; +} +.flag-sd { + background-position: 0 -3184px; +} +.flag-se { + background-position: 0 -3200px; +} +.flag-sg { + background-position: 0 -3216px; +} +.flag-si { + background-position: 0 -3232px; +} +.flag-sk { + background-position: 0 -3248px; +} +.flag-sl { + background-position: 0 -3264px; +} +.flag-sm { + background-position: 0 -3280px; +} +.flag-sn { + background-position: 0 -3296px; +} +.flag-so { + background-position: 0 -3312px; +} +.flag-sr { + background-position: 0 -3328px; +} +.flag-st { + background-position: 0 -3344px; +} +.flag-sv { + background-position: 0 -3360px; +} +.flag-sy { + background-position: 0 -3376px; +} +.flag-sz { + background-position: 0 -3392px; +} +.flag-tc { + background-position: 0 -3408px; +} +.flag-td { + background-position: 0 -3424px; +} +.flag-tg { + background-position: 0 -3440px; +} +.flag-th { + background-position: 0 -3456px; +} +.flag-tj { + background-position: 0 -3472px; +} +.flag-tl { + background-position: 0 -3488px; +} +.flag-tm { + background-position: 0 -3504px; +} +.flag-tn { + background-position: 0 -3520px; +} +.flag-to { + background-position: 0 -3536px; +} +.flag-tr { + background-position: 0 -3552px; +} +.flag-tt { + background-position: 0 -3568px; +} +.flag-tv { + background-position: 0 -3584px; +} +.flag-tw { + background-position: 0 -3600px; +} +.flag-tz { + background-position: 0 -3616px; +} +.flag-ua { + background-position: 0 -3632px; +} +.flag-ug { + background-position: 0 -3648px; +} +.flag-us { + background-position: 0 -3664px; +} +.flag-uy { + background-position: 0 -3680px; +} +.flag-uz { + background-position: 0 -3696px; +} +.flag-va { + background-position: 0 -3712px; +} +.flag-vc { + background-position: 0 -3728px; +} +.flag-ve { + background-position: 0 -3744px; +} +.flag-vg { + background-position: 0 -3760px; +} +.flag-vi { + background-position: 0 -3776px; +} +.flag-vn { + background-position: 0 -3792px; +} +.flag-vu { + background-position: 0 -3808px; +} +.flag-ws { + background-position: 0 -3824px; +} +.flag-ye { + background-position: 0 -3840px; +} +.flag-za { + background-position: 0 -3856px; +} +.flag-zm { + background-position: 0 -3872px; +} +.flag-zw { + background-position: 0 -3888px; +} +.flag-sx { + background-position: 0 -3904px; +} +.flag-cw { + background-position: 0 -3920px; +} +.flag-ss { + background-position: 0 -3936px; +} @font-face { font-family: 'Open Sans'; src: url('../font/OpenSans-Light.eot'); diff --git a/modules/backend/assets/images/flag-icons-large.png b/modules/backend/assets/images/flag-icons-large.png new file mode 100644 index 000000000..66a0d1515 Binary files /dev/null and b/modules/backend/assets/images/flag-icons-large.png differ diff --git a/modules/backend/assets/images/flag-icons-small.png b/modules/backend/assets/images/flag-icons-small.png new file mode 100644 index 000000000..5b90d4e6f Binary files /dev/null and b/modules/backend/assets/images/flag-icons-small.png differ diff --git a/modules/backend/assets/js/editorsettings/editorsettings.js b/modules/backend/assets/js/editorpreferences/editorpreferences.js similarity index 53% rename from modules/backend/assets/js/editorsettings/editorsettings.js rename to modules/backend/assets/js/editorpreferences/editorpreferences.js index b26910db7..7838669c8 100644 --- a/modules/backend/assets/js/editorsettings/editorsettings.js +++ b/modules/backend/assets/js/editorpreferences/editorpreferences.js @@ -1,45 +1,45 @@ $(document).ready(function(){ - var editorEl = $('#editorsettingsCodeeditor'), + var editorEl = $('#editorpreferencesCodeeditor'), editor = editorEl.codeEditor('getEditorObject'), session = editor.getSession(), renderer = editor.renderer editorEl.height($('#editorSettingsForm').height() - 23) - $('#Form-field-EditorSettings-theme').on('change', function(){ + $('#Form-field-EditorPreferences-theme').on('change', function(){ editorEl.codeEditor('setTheme', $(this).val()) }) - $('#Form-field-EditorSettings-font_size').on('change', function(){ + $('#Form-field-EditorPreferences-font_size').on('change', function(){ editor.setFontSize(parseInt($(this).val())) }) - $('#Form-field-EditorSettings-word_wrap').on('change', function(){ + $('#Form-field-EditorPreferences-word_wrap').on('change', function(){ editorEl.codeEditor('setWordWrap', $(this).val()) }) - $('#Form-field-EditorSettings-code_folding').on('change', function(){ + $('#Form-field-EditorPreferences-code_folding').on('change', function(){ session.setFoldStyle($(this).val()) }) - $('#Form-field-EditorSettings-tab_size').on('change', function(){ + $('#Form-field-EditorPreferences-tab_size').on('change', function(){ session.setTabSize($(this).val()) }) - $('#Form-field-EditorSettings-show_invisibles').on('change', function(){ + $('#Form-field-EditorPreferences-show_invisibles').on('change', function(){ editor.setShowInvisibles($(this).is(':checked')) }) - $('#Form-field-EditorSettings-highlight_active_line').on('change', function(){ + $('#Form-field-EditorPreferences-highlight_active_line').on('change', function(){ editor.setHighlightActiveLine($(this).is(':checked')) }) - $('#Form-field-EditorSettings-use_hard_tabs').on('change', function(){ + $('#Form-field-EditorPreferences-use_hard_tabs').on('change', function(){ session.setUseSoftTabs(!$(this).is(':checked')) }) - $('#Form-field-EditorSettings-show_gutter').on('change', function(){ + $('#Form-field-EditorPreferences-show_gutter').on('change', function(){ renderer.setShowGutter($(this).is(':checked')) }) diff --git a/modules/backend/assets/js/october.controls.js b/modules/backend/assets/js/october.controls.js index e637f6937..dc94b45c1 100644 --- a/modules/backend/assets/js/october.controls.js +++ b/modules/backend/assets/js/october.controls.js @@ -29,7 +29,29 @@ if (Modernizr.touch) return - $('select.custom-select').select2() + var formatSelectOption = function(state) { + if (!state.id) + return state.text; // optgroup + + var $option = $(state.element), + iconClass = $option.data('icon'), + imageSrc = $option.data('image') + + if (iconClass) + return ' ' + state.text + + if (imageSrc) + return ' ' + state.text + + return state.text + } + + $('select.custom-select').select2({ + formatResult: formatSelectOption, + formatSelection: formatSelectOption, + escapeMarkup: function(m) { return m; } + }) + $(document).on('disable', 'select.custom-select', function(event, status){ $(this).select2('enable', !status) }) diff --git a/modules/backend/assets/less/core/flags.less b/modules/backend/assets/less/core/flags.less new file mode 100644 index 000000000..884a38ab0 --- /dev/null +++ b/modules/backend/assets/less/core/flags.less @@ -0,0 +1,270 @@ + +[class^="flag-"], +[class*=" flag-"] { + background:url(../images/flag-icons-small.png) no-repeat; + width: 16px; + height: 16px; + line-height: 16px; + vertical-align: middle; + display: inline-block; + margin: -1 2px 0 2px; +} + +.flag-AfricanUnion { background-position:0 -16px } +.flag-ArabLeague { background-position:0 -32px } +.flag-ASEAN { background-position:0 -48px } +.flag-CARICOM { background-position:0 -64px } +.flag-CIS { background-position:0 -80px } +.flag-Commonwealth { background-position:0 -96px } +.flag-England { background-position:0 -112px } +.flag-European_Union { background-position:0 -128px } +.flag-Islamic_Conference { background-position:0 -144px } +.flag-Kosovo { background-position:0 -160px } +.flag-NATO { background-position:0 -176px } +.flag-NorthernCyprus { background-position:0 -192px } +.flag-NorthernIreland { background-position:0 -208px } +.flag-OlimpicMovement { background-position:0 -224px } +.flag-OPEC { background-position:0 -240px } +.flag-RedCross { background-position:0 -256px } +.flag-Scotland { background-position:0 -272px } +.flag-Somaliland { background-position:0 -288px } +.flag-Tibet { background-position:0 -304px } +.flag-United_Nations { background-position:0 -320px } +.flag-Wales { background-position:0 -336px } + +.flag-eu { background-position:0 -128px } +.flag-ad { background-position:0 -352px } +.flag-ae { background-position:0 -368px } +.flag-af { background-position:0 -384px } +.flag-ag { background-position:0 -400px } +.flag-ai { background-position:0 -416px } +.flag-al { background-position:0 -432px } +.flag-am { background-position:0 -448px } +.flag-ao { background-position:0 -464px } +.flag-aq { background-position:0 -480px } +.flag-ar { background-position:0 -496px } +.flag-as { background-position:0 -512px } +.flag-at { background-position:0 -528px } +.flag-au { background-position:0 -544px } +.flag-aw { background-position:0 -560px } +.flag-ax { background-position:0 -576px } +.flag-az { background-position:0 -592px } +.flag-ba { background-position:0 -608px } +.flag-bb { background-position:0 -624px } +.flag-bd { background-position:0 -640px } +.flag-be { background-position:0 -656px } +.flag-bf { background-position:0 -672px } +.flag-bg { background-position:0 -688px } +.flag-bh { background-position:0 -704px } +.flag-bi { background-position:0 -720px } +.flag-bj { background-position:0 -736px } +.flag-bm { background-position:0 -752px } +.flag-bn { background-position:0 -768px } +.flag-bo { background-position:0 -784px } +.flag-br { background-position:0 -800px } +.flag-bs { background-position:0 -816px } +.flag-bt { background-position:0 -832px } +.flag-bw { background-position:0 -848px } +.flag-by { background-position:0 -864px } +.flag-bz { background-position:0 -880px } +.flag-ca { background-position:0 -896px } +.flag-cg { background-position:0 -912px } +.flag-cf { background-position:0 -928px } +.flag-cd { background-position:0 -944px } +.flag-ch { background-position:0 -960px } +.flag-ci { background-position:0 -976px } +.flag-ck { background-position:0 -992px } +.flag-cl { background-position:0 -1008px } +.flag-cm { background-position:0 -1024px } +.flag-cn { background-position:0 -1040px } +.flag-co { background-position:0 -1056px } +.flag-cr { background-position:0 -1072px } +.flag-cu { background-position:0 -1088px } +.flag-cv { background-position:0 -1104px } +.flag-cy { background-position:0 -1120px } +.flag-cz { background-position:0 -1136px } +.flag-de { background-position:0 -1152px } +.flag-dj { background-position:0 -1168px } +.flag-dk { background-position:0 -1184px } +.flag-dm { background-position:0 -1200px } +.flag-do { background-position:0 -1216px } +.flag-dz { background-position:0 -1232px } +.flag-ec { background-position:0 -1248px } +.flag-ee { background-position:0 -1264px } +.flag-eg { background-position:0 -1280px } +.flag-eh { background-position:0 -1296px } +.flag-er { background-position:0 -1312px } +.flag-es { background-position:0 -1328px } +.flag-et { background-position:0 -1344px } +.flag-fi { background-position:0 -1360px } +.flag-fj { background-position:0 -1376px } +.flag-fm { background-position:0 -1392px } +.flag-fo { background-position:0 -1408px } +.flag-fr { background-position:0 -1424px } +.flag-bl { background-position:0 -1424px } +.flag-cp { background-position:0 -1424px } +.flag-mf { background-position:0 -1424px } +.flag-yt { background-position:0 -1424px } +.flag-ga { background-position:0 -1440px } +.flag-gb { background-position:0 -1456px } +.flag-sh { background-position:0 -1456px } +.flag-gd { background-position:0 -1472px } +.flag-ge { background-position:0 -1488px } +.flag-gg { background-position:0 -1504px } +.flag-gh { background-position:0 -1520px } +.flag-gi { background-position:0 -1536px } +.flag-gl { background-position:0 -1552px } +.flag-gm { background-position:0 -1568px } +.flag-gn { background-position:0 -1584px } +.flag-gp { background-position:0 -1600px } +.flag-gq { background-position:0 -1616px } +.flag-gr { background-position:0 -1632px } +.flag-gt { background-position:0 -1648px } +.flag-gu { background-position:0 -1664px } +.flag-gw { background-position:0 -1680px } +.flag-gy { background-position:0 -1696px } +.flag-hk { background-position:0 -1712px } +.flag-hn { background-position:0 -1728px } +.flag-hr { background-position:0 -1744px } +.flag-ht { background-position:0 -1760px } +.flag-hu { background-position:0 -1776px } +.flag-id { background-position:0 -1792px } +.flag-mc { background-position:0 -1792px } +.flag-ie { background-position:0 -1808px } +.flag-il { background-position:0 -1824px } +.flag-im { background-position:0 -1840px } +.flag-in { background-position:0 -1856px } +.flag-iq { background-position:0 -1872px } +.flag-ir { background-position:0 -1888px } +.flag-is { background-position:0 -1904px } +.flag-it { background-position:0 -1920px } +.flag-je { background-position:0 -1936px } +.flag-jm { background-position:0 -1952px } +.flag-jo { background-position:0 -1968px } +.flag-jp { background-position:0 -1984px } +.flag-ke { background-position:0 -2000px } +.flag-kg { background-position:0 -2016px } +.flag-kh { background-position:0 -2032px } +.flag-ki { background-position:0 -2048px } +.flag-km { background-position:0 -2064px } +.flag-kn { background-position:0 -2080px } +.flag-kp { background-position:0 -2096px } +.flag-kr { background-position:0 -2112px } +.flag-kw { background-position:0 -2128px } +.flag-ky { background-position:0 -2144px } +.flag-kz { background-position:0 -2160px } +.flag-la { background-position:0 -2176px } +.flag-lb { background-position:0 -2192px } +.flag-lc { background-position:0 -2208px } +.flag-li { background-position:0 -2224px } +.flag-lk { background-position:0 -2240px } +.flag-lr { background-position:0 -2256px } +.flag-ls { background-position:0 -2272px } +.flag-lt { background-position:0 -2288px } +.flag-lu { background-position:0 -2304px } +.flag-lv { background-position:0 -2320px } +.flag-ly { background-position:0 -2336px } +.flag-ma { background-position:0 -2352px } +.flag-md { background-position:0 -2368px } +.flag-me { background-position:0 -2384px } +.flag-mg { background-position:0 -2400px } +.flag-mh { background-position:0 -2416px } +.flag-mk { background-position:0 -2432px } +.flag-ml { background-position:0 -2448px } +.flag-mm { background-position:0 -2464px } +.flag-mn { background-position:0 -2480px } +.flag-mo { background-position:0 -2496px } +.flag-mq { background-position:0 -2512px } +.flag-mr { background-position:0 -2528px } +.flag-ms { background-position:0 -2544px } +.flag-mt { background-position:0 -2560px } +.flag-mu { background-position:0 -2576px } +.flag-mv { background-position:0 -2592px } +.flag-mw { background-position:0 -2608px } +.flag-mx { background-position:0 -2624px } +.flag-my { background-position:0 -2640px } +.flag-mz { background-position:0 -2656px } +.flag-na { background-position:0 -2672px } +.flag-nc { background-position:0 -2688px } +.flag-ne { background-position:0 -2704px } +.flag-ng { background-position:0 -2720px } +.flag-ni { background-position:0 -2736px } +.flag-nl { background-position:0 -2752px } +.flag-bq { background-position:0 -2752px } +.flag-no { background-position:0 -2768px } +.flag-bv { background-position:0 -2768px } +.flag-nq { background-position:0 -2768px } +.flag-sj { background-position:0 -2768px } +.flag-np { background-position:0 -2784px } +.flag-nr { background-position:0 -2800px } +.flag-nz { background-position:0 -2816px } +.flag-om { background-position:0 -2832px } +.flag-pa { background-position:0 -2848px } +.flag-pe { background-position:0 -2864px } +.flag-pf { background-position:0 -2880px } +.flag-pg { background-position:0 -2896px } +.flag-ph { background-position:0 -2912px } +.flag-pk { background-position:0 -2928px } +.flag-pl { background-position:0 -2944px } +.flag-pr { background-position:0 -2960px } +.flag-ps { background-position:0 -2976px } +.flag-pt { background-position:0 -2992px } +.flag-pw { background-position:0 -3008px } +.flag-py { background-position:0 -3024px } +.flag-qa { background-position:0 -3040px } +.flag-re { background-position:0 -3056px } +.flag-ro { background-position:0 -3072px } +.flag-rs { background-position:0 -3088px } +.flag-ru { background-position:0 -3104px } +.flag-rw { background-position:0 -3120px } +.flag-sa { background-position:0 -3136px } +.flag-sb { background-position:0 -3152px } +.flag-sc { background-position:0 -3168px } +.flag-sd { background-position:0 -3184px } +.flag-se { background-position:0 -3200px } +.flag-sg { background-position:0 -3216px } +.flag-si { background-position:0 -3232px } +.flag-sk { background-position:0 -3248px } +.flag-sl { background-position:0 -3264px } +.flag-sm { background-position:0 -3280px } +.flag-sn { background-position:0 -3296px } +.flag-so { background-position:0 -3312px } +.flag-sr { background-position:0 -3328px } +.flag-st { background-position:0 -3344px } +.flag-sv { background-position:0 -3360px } +.flag-sy { background-position:0 -3376px } +.flag-sz { background-position:0 -3392px } +.flag-tc { background-position:0 -3408px } +.flag-td { background-position:0 -3424px } +.flag-tg { background-position:0 -3440px } +.flag-th { background-position:0 -3456px } +.flag-tj { background-position:0 -3472px } +.flag-tl { background-position:0 -3488px } +.flag-tm { background-position:0 -3504px } +.flag-tn { background-position:0 -3520px } +.flag-to { background-position:0 -3536px } +.flag-tr { background-position:0 -3552px } +.flag-tt { background-position:0 -3568px } +.flag-tv { background-position:0 -3584px } +.flag-tw { background-position:0 -3600px } +.flag-tz { background-position:0 -3616px } +.flag-ua { background-position:0 -3632px } +.flag-ug { background-position:0 -3648px } +.flag-us { background-position:0 -3664px } +.flag-uy { background-position:0 -3680px } +.flag-uz { background-position:0 -3696px } +.flag-va { background-position:0 -3712px } +.flag-vc { background-position:0 -3728px } +.flag-ve { background-position:0 -3744px } +.flag-vg { background-position:0 -3760px } +.flag-vi { background-position:0 -3776px } +.flag-vn { background-position:0 -3792px } +.flag-vu { background-position:0 -3808px } +.flag-ws { background-position:0 -3824px } +.flag-ye { background-position:0 -3840px } +.flag-za { background-position:0 -3856px } +.flag-zm { background-position:0 -3872px } +.flag-zw { background-position:0 -3888px } +.flag-sx { background-position:0 -3904px } +.flag-cw { background-position:0 -3920px } +.flag-ss { background-position:0 -3936px } diff --git a/modules/backend/assets/less/october.less b/modules/backend/assets/less/october.less index be62c0a23..4a3c0b359 100644 --- a/modules/backend/assets/less/october.less +++ b/modules/backend/assets/less/october.less @@ -2,6 +2,7 @@ @import "core/bootstrap.less"; @import "../../../system/assets/vendor/font-autumn/less/font-autumn.less"; @import "core/icons.less"; +@import "core/flags.less"; @import "core/fonts.less"; // Boot variables and mixins diff --git a/modules/backend/behaviors/UserSettingsModel.php b/modules/backend/behaviors/UserPreferencesModel.php similarity index 92% rename from modules/backend/behaviors/UserSettingsModel.php rename to modules/backend/behaviors/UserPreferencesModel.php index 6d630f037..6df2ddda0 100644 --- a/modules/backend/behaviors/UserSettingsModel.php +++ b/modules/backend/behaviors/UserPreferencesModel.php @@ -4,19 +4,19 @@ use System\Behaviors\SettingsModel; use Backend\Models\UserPreferences; /** - * User Settings model extension, identical to System.Behaviors.SettingsModel + * User Preferences model extension, identical to System.Behaviors.SettingsModel * except values are set against the logged in user's preferences via Backend\Models\UserPreferences. * * Usage: * * In the model class definition: * - * public $implement = ['Backend.Behaviors.UserSettingsModel']; + * public $implement = ['Backend.Behaviors.UserPreferencesModel']; * public $settingsCode = 'author.plugin::code'; * public $settingsFields = 'fields.yaml'; * */ -class UserSettingsModel extends SettingsModel +class UserPreferencesModel extends SettingsModel { private static $instances = []; diff --git a/modules/backend/classes/Controller.php b/modules/backend/classes/Controller.php index 4594c3d07..2e072068a 100644 --- a/modules/backend/classes/Controller.php +++ b/modules/backend/classes/Controller.php @@ -1,5 +1,6 @@ addCss('/modules/backend/formwidgets/codeeditor/assets/css/codeeditor.css', 'core'); $this->addJs('/modules/backend/formwidgets/codeeditor/assets/vendor/ace/ace.js', 'core'); $this->addJs('/modules/backend/formwidgets/codeeditor/assets/js/codeeditor.js', 'core'); - $this->addJs('/modules/backend/assets/js/editorsettings/editorsettings.js', 'core'); + $this->addJs('/modules/backend/assets/js/editorpreferences/editorpreferences.js', 'core'); - BackendMenu::setContext('October.System', 'system', 'settings'); + BackendMenu::setContext('October.System', 'system', 'mysettings'); } public function index() { // Load the editor system settings - $editorSettings = EditorSettingsModel::instance(); + $editorSettings = EditorPreferencesModel::instance(); $this->vars['fontSize'] = $editorSettings->font_size; $this->vars['wordWrap'] = $editorSettings->word_wrap; @@ -64,6 +64,6 @@ class EditorSettings extends Controller public function formFindModelObject() { - return EditorSettingsModel::instance(); + return EditorPreferencesModel::instance(); } } \ No newline at end of file diff --git a/modules/backend/controllers/Users.php b/modules/backend/controllers/Users.php index 7b6675c01..5ff369d7b 100644 --- a/modules/backend/controllers/Users.php +++ b/modules/backend/controllers/Users.php @@ -1,5 +1,6 @@ action == 'mysettings') + if ($this->action == 'myaccount') $this->requiredPermissions = null; BackendMenu::setContext('October.System', 'system', 'users'); @@ -43,8 +44,8 @@ class Users extends Controller public function update($recordId, $context = null) { // Users cannot edit themselves, only use My Settings - if ($context != 'mysettings' && $recordId == $this->user->id) - return Redirect::to(Backend::url('backend/users/mysettings')); + if ($context != 'myaccount' && $recordId == $this->user->id) + return Redirect::to(Backend::url('backend/users/myaccount')); return $this->getClassExtension('Backend.Behaviors.FormController')->update($recordId, $context); } @@ -52,16 +53,17 @@ class Users extends Controller /** * My Settings controller */ - public function mysettings() + public function myaccount() { - $this->pageTitle = 'My Settings'; - return $this->update($this->user->id, 'mysettings'); + BackendMenu::setContextSideMenu('mysettings'); + $this->pageTitle = Lang::get('backend::lang.myaccount.menu_label'); + return $this->update($this->user->id, 'myaccount'); } /** * Proxy update onSave event */ - public function mysettings_onSave() + public function myaccount_onSave() { $result = $this->getClassExtension('Backend.Behaviors.FormController')->update_onSave($this->user->id); @@ -81,7 +83,7 @@ class Users extends Controller */ protected function formExtendFields($host) { - if ($host->getContext() == 'mysettings') + if ($host->getContext() == 'myaccount') return; $permissionFields = []; diff --git a/modules/backend/controllers/editorsettings/_example_code.htm b/modules/backend/controllers/editorpreferences/_example_code.htm similarity index 100% rename from modules/backend/controllers/editorsettings/_example_code.htm rename to modules/backend/controllers/editorpreferences/_example_code.htm diff --git a/modules/backend/controllers/editorsettings/config_form.yaml b/modules/backend/controllers/editorpreferences/config_form.yaml similarity index 56% rename from modules/backend/controllers/editorsettings/config_form.yaml rename to modules/backend/controllers/editorpreferences/config_form.yaml index 46cf0ac8d..954284a78 100644 --- a/modules/backend/controllers/editorsettings/config_form.yaml +++ b/modules/backend/controllers/editorpreferences/config_form.yaml @@ -2,6 +2,6 @@ # Form Behavior Config # =================================== -form: @/modules/backend/models/editorsettings/fields.yaml -modelClass: Backend\Models\EditorSettings +form: @/modules/backend/models/editorpreferences/fields.yaml +modelClass: Backend\Models\EditorPreferences defaultRedirect: system/emailtemplates diff --git a/modules/backend/controllers/editorsettings/index.htm b/modules/backend/controllers/editorpreferences/index.htm similarity index 88% rename from modules/backend/controllers/editorsettings/index.htm rename to modules/backend/controllers/editorpreferences/index.htm index 66e193bb6..a66351741 100644 --- a/modules/backend/controllers/editorsettings/index.htm +++ b/modules/backend/controllers/editorpreferences/index.htm @@ -1,6 +1,6 @@ @@ -18,7 +18,7 @@
- +
diff --git a/modules/backend/controllers/users/mysettings.htm b/modules/backend/controllers/users/myaccount.htm similarity index 93% rename from modules/backend/controllers/users/mysettings.htm rename to modules/backend/controllers/users/myaccount.htm index 157c5edd2..e046fa852 100644 --- a/modules/backend/controllers/users/mysettings.htm +++ b/modules/backend/controllers/users/myaccount.htm @@ -1,6 +1,6 @@ diff --git a/modules/backend/formwidgets/CodeEditor.php b/modules/backend/formwidgets/CodeEditor.php index 1c5467026..a58ac875e 100644 --- a/modules/backend/formwidgets/CodeEditor.php +++ b/modules/backend/formwidgets/CodeEditor.php @@ -1,6 +1,6 @@ fontSize = $this->getConfig('fontSize', $editorSettings->font_size); $this->wordWrap = $this->getConfig('wordWrap', $editorSettings->word_wrap); diff --git a/modules/backend/lang/en/lang.php b/modules/backend/lang/en/lang.php index 1504c2133..e29f83f33 100644 --- a/modules/backend/lang/en/lang.php +++ b/modules/backend/lang/en/lang.php @@ -156,8 +156,8 @@ return [ 'extension' => 'The PHP extension :name is not installed. Please install this library and activate the extension.' ], 'editor' => [ - 'menu_label' => 'Editor Preferences', - 'menu_description' => 'Manage code editor preferences.', + 'menu_label' => 'Code Editor Preferences', + 'menu_description' => 'Customize the code editor preferences, such as font size and color scheme.', 'font_size' => 'Font size', 'tab_size' => 'Tab size', 'use_hard_tabs' => 'Indent using tabs', @@ -170,5 +170,22 @@ return [ ], 'tooltips' => [ 'preview_website' => 'Preview the website' - ] + ], + 'settings' => [ + 'menu_label' => 'Settings', + ], + 'mysettings' => [ + 'menu_label' => 'My Settings', + 'menu_description' => 'Settings relate to your administration account', + ], + 'myaccount' => [ + 'menu_label' => 'My Account', + 'menu_description' => 'Update your account details such as name, email address and password.', + ], + 'backend_preferences' => [ + 'menu_label' => 'Backend Preferences', + 'menu_description' => 'Manage language preference and the appearance of the backend.', + 'locale' => 'Language', + 'locale_comment' => 'Select your desired locale for language use.', + ], ]; diff --git a/modules/backend/layouts/_mainmenu.htm b/modules/backend/layouts/_mainmenu.htm index 07ba919b2..a0f16e5c1 100644 --- a/modules/backend/layouts/_mainmenu.htm +++ b/modules/backend/layouts/_mainmenu.htm @@ -29,7 +29,7 @@
  • - + user->first_name.' '.$this->user->last_name) ?> diff --git a/modules/backend/models/BackendPreferences.php b/modules/backend/models/BackendPreferences.php new file mode 100644 index 000000000..010c8cb52 --- /dev/null +++ b/modules/backend/models/BackendPreferences.php @@ -0,0 +1,46 @@ +locale = $config->get('app.locale', 'en'); + } + + public static function applyConfigValues() + { + $config = App::make('config'); + $settings = self::instance(); + $config->set('app.locale', $settings->locale); + } + + public function getLocaleOptions() + { + return [ + 'en' => [Lang::get('system::lang.locale.en'), 'flag-gb'], + 'ru' => [Lang::get('system::lang.locale.ru'), 'flag-ru'], + 'nl' => [Lang::get('system::lang.locale.nl'), 'flag-nl'], + 'ja' => [Lang::get('system::lang.locale.ja'), 'flag-jp'], + 'sv' => [Lang::get('system::lang.locale.sv'), 'flag-sv'], + 'tr' => [Lang::get('system::lang.locale.tr'), 'flag-tr'], + 'br' => [Lang::get('system::lang.locale.br'), 'flag-br'], + 'de' => [Lang::get('system::lang.locale.de'), 'flag-de'], + ]; + } + + public function afterSave() + { + Session::put('locale', $this->locale); + } +} \ No newline at end of file diff --git a/modules/backend/models/EditorSettings.php b/modules/backend/models/EditorPreferences.php similarity index 94% rename from modules/backend/models/EditorSettings.php rename to modules/backend/models/EditorPreferences.php index 778e65bd6..9d021ccd9 100644 --- a/modules/backend/models/EditorSettings.php +++ b/modules/backend/models/EditorPreferences.php @@ -4,10 +4,10 @@ use App; use Model; use DirectoryIterator; -class EditorSettings extends Model +class EditorPreferences extends Model { - public $implement = ['Backend.Behaviors.UserSettingsModel']; - public $settingsCode = 'system::editor.settings'; + public $implement = ['Backend.Behaviors.UserPreferencesModel']; + public $settingsCode = 'backend::editor.preferences'; public $settingsFields = 'fields.yaml'; const DEFAULT_THEME = 'twilight'; diff --git a/modules/backend/models/backendpreferences/fields.yaml b/modules/backend/models/backendpreferences/fields.yaml new file mode 100644 index 000000000..ab5c4bd73 --- /dev/null +++ b/modules/backend/models/backendpreferences/fields.yaml @@ -0,0 +1,10 @@ +# =================================== +# Field Definitions +# =================================== + +fields: + locale: + label: backend::lang.backend_preferences.locale + comment: backend::lang.backend_preferences.locale_comment + type: dropdown + span: left diff --git a/modules/backend/models/editorsettings/fields.yaml b/modules/backend/models/editorpreferences/fields.yaml similarity index 100% rename from modules/backend/models/editorsettings/fields.yaml rename to modules/backend/models/editorpreferences/fields.yaml diff --git a/modules/backend/widgets/form/assets/js/october.form.js b/modules/backend/widgets/form/assets/js/october.form.js index 1a9379ba0..20dd440cf 100644 --- a/modules/backend/widgets/form/assets/js/october.form.js +++ b/modules/backend/widgets/form/assets/js/october.form.js @@ -61,17 +61,6 @@ }) }) - - // dependants.on('change', 'select, input', function(){ - // var depends = $(this).closest('[data-field-depends]').data('field-depends'), - // form = $(this).closest('form') - - // if (!form.length || !self.options.refreshHandler) - // return - - // form.request(self.options.refreshHandler) - // }) - } diff --git a/modules/backend/widgets/form/partials/_field_checkboxlist.htm b/modules/backend/widgets/form/partials/_field_checkboxlist.htm index 51d47f93e..ce03fb0df 100644 --- a/modules/backend/widgets/form/partials/_field_checkboxlist.htm +++ b/modules/backend/widgets/form/partials/_field_checkboxlist.htm @@ -22,8 +22,7 @@ columnName.'_'.$index; - if (is_string($option)) - $option = array($option); + if (is_string($option)) $option = [$option]; ?>
    placeholder): ?> - $text): ?> + $option): ?> + - + \ No newline at end of file diff --git a/modules/system/ServiceProvider.php b/modules/system/ServiceProvider.php index 28815dd3c..614cf0cb2 100644 --- a/modules/system/ServiceProvider.php +++ b/modules/system/ServiceProvider.php @@ -144,7 +144,7 @@ class ServiceProvider extends ModuleServiceProvider ], 'users' => [ 'label' => 'backend::lang.user.menu_label', - 'icon' => 'icon-user', + 'icon' => 'icon-users', 'url' => Backend::url('backend/users'), 'permissions' => ['backend.manage_users'] ], diff --git a/modules/system/classes/SettingsManager.php b/modules/system/classes/SettingsManager.php index 5a4dc6b7d..69f9b5a52 100644 --- a/modules/system/classes/SettingsManager.php +++ b/modules/system/classes/SettingsManager.php @@ -36,7 +36,8 @@ class SettingsManager 'icon' => null, 'url' => null, 'permissions' => [], - 'order' => 100 + 'order' => 100, + 'context' => 'system', ]; /** @@ -107,14 +108,42 @@ class SettingsManager /** * Returns a collection of all settings */ - public function listItems() + public function listItems($context = null) { if ($this->items === null) $this->loadItems(); + if ($context !== null) + return $this->filterByContext($this->items, $context); + return $this->items; } + /** + * Filters a set of items by a given context. + * @param array $items + * @param string $context + * @return array + */ + protected function filterByContext($items, $context) + { + $filteredItems = []; + foreach ($items as $categoryName => $category) { + + $filteredCategory = []; + foreach ($category as $item) { + $itemContext = is_array($item->context) ? $item->context : [$item->context]; + if (in_array($context, $itemContext)) + $filteredCategory[] = $item; + } + + if (count($filteredCategory)) + $filteredItems[$categoryName] = $filteredCategory; + } + + return $filteredItems; + } + /** * Registers a callback function that defines setting items. * The callback function should register setting items by calling the manager's diff --git a/modules/system/controllers/Settings.php b/modules/system/controllers/Settings.php index 796fad75c..9d2a68b15 100644 --- a/modules/system/controllers/Settings.php +++ b/modules/system/controllers/Settings.php @@ -38,8 +38,16 @@ class Settings extends Controller public function index() { - $this->pageTitle = 'Settings'; - $this->vars['items'] = SettingsManager::instance()->listItems(); + $this->pageTitle = Lang::get('backend::lang.settings.menu_label'); + $this->vars['items'] = SettingsManager::instance()->listItems('system'); + $this->bodyClass = 'compact-container'; + } + + public function mysettings() + { + BackendMenu::setContextSideMenu('mysettings'); + $this->pageTitle = Lang::get('backend::lang.mysettings.menu_label'); + $this->vars['items'] = SettingsManager::instance()->listItems('mysettings'); $this->bodyClass = 'compact-container'; } diff --git a/modules/system/controllers/settings/mysettings.htm b/modules/system/controllers/settings/mysettings.htm new file mode 100644 index 000000000..32d8c0220 --- /dev/null +++ b/modules/system/controllers/settings/mysettings.htm @@ -0,0 +1,24 @@ +
    + + $items): ?> + +
    +

    +
    + + + + +
    diff --git a/modules/system/lang/en/lang.php b/modules/system/lang/en/lang.php index c907fe74f..82965752a 100644 --- a/modules/system/lang/en/lang.php +++ b/modules/system/lang/en/lang.php @@ -5,6 +5,16 @@ return [ 'name' => 'October CMS', 'motto' => 'Getting back to basics', ], + 'locale' => [ + 'en' => 'English', + 'nl' => 'Dutch', + 'ja' => 'Japanese', + 'sv' => 'Swedish', + 'tr' => 'Turkish', + 'br' => 'Brazilian Portuguese', + 'de' => 'Germen', + 'ru' => 'Russian', + ], 'directory' => [ 'create_fail' => "Cannot create directory: :name", ],