EditorSettings -> EditorPreferences (System has settings, User has preferences, App has configuration)

Create a My Settings page, now linked when clicking a User
Create backend preferences form for setting locale
Dropdown options now support an image or icon in their options
This commit is contained in:
Sam Georges 2014-07-01 17:17:53 +10:00
parent 15df09cbe3
commit ddb6337efe
31 changed files with 1312 additions and 67 deletions

View File

@ -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'
],
]);
});

View File

@ -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');

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

View File

@ -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'))
})

View File

@ -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 '<i class="select-icon '+iconClass+'"></i> ' + state.text
if (imageSrc)
return '<img class="select-image" src="'+imageSrc+'" alt="" /> ' + 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)
})

View File

@ -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 }

View File

@ -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

View File

@ -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 = [];

View File

@ -1,5 +1,6 @@
<?php namespace Backend\Classes;
use App;
use Str;
use Log;
use Lang;
@ -7,10 +8,12 @@ use View;
use Flash;
use Request;
use Backend;
use Session;
use Redirect;
use Response;
use Exception;
use BackendAuth;
use Backend\Models\BackendPreferences;
use System\Classes\SystemException;
use October\Rain\Extension\Extendable;
use October\Rain\Support\ValidationException;
@ -169,6 +172,17 @@ class Controller extends Extendable
return Response::make(View::make('backend::access_denied'), 403);
}
/*
* Set the admin preference locale
*/
if (Session::has('locale')) {
App::setLocale(Session::get('locale'));
}
elseif ($locale = BackendPreferences::get('locale')) {
Session::put('locale', $locale);
App::setLocale($locale);
}
/*
* Execute AJAX event
*/

View File

@ -3,7 +3,7 @@
use Lang;
use BackendMenu;
use Backend\Classes\Controller;
use Backend\Models\EditorSettings as EditorSettingsModel;
use Backend\Models\EditorPreferences as EditorPreferencesModel;
/**
* Editor Settings controller
@ -12,7 +12,7 @@ use Backend\Models\EditorSettings as EditorSettingsModel;
* @author Alexey Bobkov, Samuel Georges
*
*/
class EditorSettings extends Controller
class EditorPreferences extends Controller
{
public $implement = [
@ -31,15 +31,15 @@ class EditorSettings extends Controller
$this->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();
}
}

View File

@ -1,5 +1,6 @@
<?php namespace Backend\Controllers;
use Lang;
use Backend;
use Redirect;
use BackendMenu;
@ -31,7 +32,7 @@ class Users extends Controller
{
parent::__construct();
if ($this->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 = [];

View File

@ -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

View File

@ -1,6 +1,6 @@
<?php Block::put('breadcrumb') ?>
<ul>
<li><a href="<?= Backend::url('system/settings') ?>"><?= e(trans('system::lang.settings.menu_label')) ?></a></li>
<li><a href="<?= Backend::url('system/settings/mysettings') ?>"><?= e(trans('backend::lang.mysettings.menu_label')) ?></a></li>
<li><?= e($this->pageTitle) ?></li>
</ul>
<?php Block::endPut() ?>
@ -18,7 +18,7 @@
<div class="col-md-7">
<div
id="editorsettingsCodeeditor"
id="editorpreferencesCodeeditor"
class="field-codeeditor size-large layout-relative"
data-control="codeeditor"
data-font-size="<?= $fontSize ?>"
@ -33,7 +33,7 @@
data-language="<?= $language ?>"
data-margin="<?= $margin ?>"
data-vendor-path="<?= URL::to('/modules/backend/formwidgets/codeeditor/assets/vendor/ace') ?>/">
<textarea name="editorsettings_codeeditor"><?= e($this->makePartial('example_code')) ?></textarea>
<textarea name="editorpreferences_codeeditor"><?= e($this->makePartial('example_code')) ?></textarea>
</div>
</div>

View File

@ -1,6 +1,6 @@
<?php Block::put('breadcrumb') ?>
<ul>
<li><a href="<?= Backend::url('backend/users') ?>"><?= e(trans('backend::lang.user.menu_label')) ?></a></li>
<li><a href="<?= Backend::url('system/settings/mysettings') ?>"><?= e(trans('backend::lang.mysettings.menu_label')) ?></a></li>
<li><?= e($this->pageTitle) ?></li>
</ul>
<?php Block::endPut() ?>

View File

@ -1,6 +1,6 @@
<?php namespace Backend\FormWidgets;
use Backend\Models\EditorSettings;
use Backend\Models\EditorPreferences;
use Backend\Classes\FormWidgetBase;
/**
@ -63,7 +63,7 @@ class CodeEditor extends FormWidgetBase
public function init()
{
// Load the editor system settings
$editorSettings = EditorSettings::instance();
$editorSettings = EditorPreferences::instance();
$this->fontSize = $this->getConfig('fontSize', $editorSettings->font_size);
$this->wordWrap = $this->getConfig('wordWrap', $editorSettings->word_wrap);

View File

@ -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.',
],
];

View File

@ -29,7 +29,7 @@
</a>
</li>
<li class="highlight account">
<a href="<?= Backend::url('backend/users/mysettings') ?>">
<a href="<?= Backend::url('system/settings/mysettings') ?>">
<img src="<?= $this->user->getAvatarThumb() ?>">
<?= e($this->user->first_name.' '.$this->user->last_name) ?>
</a>

View File

@ -0,0 +1,46 @@
<?php namespace Backend\Models;
use App;
use Lang;
use Model;
use Session;
use DirectoryIterator;
class BackendPreferences extends Model
{
public $implement = ['Backend.Behaviors.UserPreferencesModel'];
public $settingsCode = 'backend::backend.preferences';
public $settingsFields = 'fields.yaml';
public function initSettingsData()
{
$config = App::make('config');
$this->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);
}
}

View File

@ -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';

View File

@ -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

View File

@ -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)
// })
}

View File

@ -22,8 +22,7 @@
<?php
$index++;
$checkboxId = 'checkbox_'.$field->columnName.'_'.$index;
if (is_string($option))
$option = array($option);
if (is_string($option)) $option = [$option];
?>
<div class="checkbox custom-checkbox">
<input

View File

@ -13,11 +13,15 @@
<?php if ($field->placeholder): ?>
<option value=""><?= e(trans($field->placeholder)) ?></option>
<?php endif ?>
<?php foreach ($fieldOptions as $value => $text): ?>
<?php foreach ($fieldOptions as $value => $option): ?>
<?php
if (is_string($option)) $option = [$option];
?>
<option
<?= $value == $field->value ? 'selected="selected"' : '' ?>
<?php if (isset($option[1])): ?>data-<?=strpos($option[1],'.')?'image':'icon'?>="<?= $option[1] ?>"<?php endif ?>
value="<?= $value ?>">
<?= e($text) ?>
<?= e($option[0]) ?>
</option>
<?php endforeach ?>
</select>

View File

@ -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']
],

View File

@ -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

View File

@ -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';
}

View File

@ -0,0 +1,24 @@
<div class="control-settings">
<?php foreach ($items as $category => $items): ?>
<div class="settings-category">
<h3><?= $category ?></h3>
</div>
<div class="settings-items row">
<?php foreach ($items as $item): ?>
<div class="settings-item col-xs-12 col-sm-6 col-md-4">
<a href="<?= $item->url ?>">
<div class="item-icon"><i class="<?= $item->icon ?>"></i></div>
<h5><?= e(trans($item->label)) ?></h5>
<p><?= e(trans($item->description)) ?></p>
</a>
</div>
<?php endforeach ?>
</div>
<?php endforeach ?>
</div>

View File

@ -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",
],