diff --git a/.travis.yml b/.travis.yml index 7387f80b..854a120b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,13 @@ php: - 5.3 env: - - DB=MYSQL CORE_RELEASE=master + global: + - "ARTIFACTS_AWS_REGION=us-east-1" + - "ARTIFACTS_S3_BUCKET=silverstripe-travis-artifacts" + - secure: "7V20Qk3bIG2AlTJaA5D/uzB8vUVvRwQp+xjRYUxlahtj9FcuqEV3HIyjwwJe0T6Z1bnRYuu28ZnCT2CfP9BBZ3FE7AwSZbPase9c0/at2qDJNqkvIdC1xZ1H6Fcy2LSwNB9wLQPe613ItVdanitEuwE41iowxBPslxUUTnwx7eY=" + - secure: "f/GWlbnNri2YpCOrJfZl7tkhpMmcRVUbCdmb+beAY90gFBJQPHtljzf8M4KaCP0OkLOtRFuGoMFdIcpadl4J6IG1XP18IJNz+nKzCL/sJj/FF9y77RdMHWE9jr21G9ar5tywkn7JM6vrnTCY89OnHeQx67SKvxqX5CpVx+rdcEU=" + matrix: + - DB=MYSQL CORE_RELEASE=master matrix: include: @@ -16,28 +22,37 @@ matrix: env: DB=MYSQL CORE_RELEASE=master - php: 5.5 env: DB=MYSQL CORE_RELEASE=master + - php: 5.4 + env: DB=MYSQL CORE_RELEASE=master BEHAT_TEST=1 allow_failures: - php: 5.5 env: DB=MYSQL CORE_RELEASE=master before_script: + - composer self-update + - phpenv rehash - git clone git://github.com/silverstripe-labs/silverstripe-travis-support.git ~/travis-support - - php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss + - "if [ \"$BEHAT_TEST\" = \"\" ]; then php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss; fi" + - "if [ \"$BEHAT_TEST\" = \"1\" ]; then php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss --require silverstripe/behat-extension; fi" - cd ~/builds/ss + - php ~/travis-support/travis_setup_selenium.php --if-env BEHAT_TEST + - php ~/travis-support/travis_setup_php54_webserver.php --if-env BEHAT_TEST script: - - phpunit cms/tests/ + - "if [ \"$BEHAT_TEST\" = \"\" ]; then phpunit cms/tests; fi" + - "if [ \"$BEHAT_TEST\" = \"1\" ]; then vendor/bin/behat @cms; fi" + +after_failure: + - php ~/travis-support/travis_upload_artifacts.php --if-env BEHAT_TEST,ARTIFACTS_AWS_SECRET_ACCESS_KEY --target-path $TRAVIS_REPO_SLUG/$TRAVIS_BUILD_ID/$TRAVIS_JOB_ID --artifacts-base-url https://s3.amazonaws.com/$ARTIFACTS_S3_BUCKET/ branches: except: - 2.1 - 2.2 - 2.3 - - 2.4 - - post-2.4 - translation-staging notifications: irc: channels: - - "irc.freenode.org#silverstripe" + - "irc.freenode.org#silverstripe" \ No newline at end of file diff --git a/code/controllers/CMSMain.php b/code/controllers/CMSMain.php index 4eb61963..e427ebe3 100644 --- a/code/controllers/CMSMain.php +++ b/code/controllers/CMSMain.php @@ -446,6 +446,8 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr } } + $this->extend('updateSiteTreeHints', $def); + $json = Convert::raw2json($def); $cache->save($json, $cacheKey); } diff --git a/code/model/SiteConfig.php b/code/model/SiteConfig.php index c80539de..cc1ec1aa 100644 --- a/code/model/SiteConfig.php +++ b/code/model/SiteConfig.php @@ -53,7 +53,11 @@ class SiteConfig extends DataObject implements PermissionProvider { */ public function getCMSFields() { - $groupsMap = Group::get()->map('ID', 'Breadcrumbs')->toArray(); + $groupsMap = array(); + foreach(Group::get() as $group) { + // Listboxfield values are escaped, use ASCII char instead of » + $groupsMap[$group->ID] = $group->getBreadcrumbs(' > '); + } asort($groupsMap); $fields = new FieldList( diff --git a/code/model/SiteTree.php b/code/model/SiteTree.php index 42b3a1ee..53567dc0 100644 --- a/code/model/SiteTree.php +++ b/code/model/SiteTree.php @@ -1978,7 +1978,11 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid * @return FieldList */ public function getSettingsFields() { - $groupsMap = Group::get()->map('ID', 'Breadcrumbs')->toArray(); + $groupsMap = array(); + foreach(Group::get() as $group) { + // Listboxfield values are escaped, use ASCII char instead of » + $groupsMap[$group->ID] = $group->getBreadcrumbs(' > '); + } asort($groupsMap); $fields = new FieldList( diff --git a/javascript/CMSMain.Tree.js b/javascript/CMSMain.Tree.js index 4774d9f0..a2f2ac6a 100644 --- a/javascript/CMSMain.Tree.js +++ b/javascript/CMSMain.Tree.js @@ -15,20 +15,20 @@ var menus = $('#vakata-contextmenu').find("ul ul"); menus.each(function(i){ - var col = "1", + var col = "1", count = $(menus[i]).find('li').length; //Assign columns to menus over 10 items long if(count > 20){ - col = "3"; + col = "3"; }else if(count > 10){ - col = "2"; + col = "2"; } $(menus[i]).addClass('col-' + col).removeClass('right'); //Remove "right" class that jstree adds on mouseenter - $(menus[i]).find('li').on("mouseenter", function (e) { + $(menus[i]).find('li').on("mouseenter", function (e) { $(this).parent('ul').removeClass("right"); }); }); @@ -38,7 +38,7 @@ config.plugins.push('contextmenu'); config.contextmenu = { 'items': function(node) { - + var menuitems = { 'edit': { 'label': ss.i18n._t('Tree.EditPage', 'Edit page', 100, 'Used in the context menu when right-clicking on a page node in the CMS tree'), @@ -64,7 +64,7 @@ } }; } - + // Build a list for allowed children as submenu entries var pagetype = node.data('pagetype'), id = node.data('id'), @@ -100,13 +100,13 @@ } }; }); - + if(hasAllowedChildren) { menuitems['addsubpage'] = { 'label': ss.i18n._t('Tree.AddSubPage', 'Add page under this page', 100, 'Used in the context menu when right-clicking on a page node in the CMS tree'), 'submenu': menuAllowedChildren }; - } + } menuitems['duplicate'] = { 'label': ss.i18n._t('Tree.Duplicate'), @@ -116,7 +116,7 @@ 'action': function(obj) { $('.cms-container').entwine('.ss').loadPanel( $.path.addSearchParams( - ss.i18n.sprintf(self.data('urlDuplicate'), obj.data('id')), + ss.i18n.sprintf(self.data('urlDuplicate'), obj.data('id')), self.data('extraParams') ) ); @@ -126,7 +126,7 @@ 'action': function(obj) { $('.cms-container').entwine('.ss').loadPanel( $.path.addSearchParams( - ss.i18n.sprintf(self.data('urlDuplicatewithchildren'), obj.data('id')), + ss.i18n.sprintf(self.data('urlDuplicatewithchildren'), obj.data('id')), self.data('extraParams') ) ); @@ -136,23 +136,33 @@ }; return menuitems; - } + } }; return config; } }); - - // Scroll tree down to context of the current page - $('.cms-tree a.jstree-clicked').entwine({ - onmatch: function(){ - var self = this, - panel = self.parents('.cms-panel-content'); - panel.animate({ - scrollTop: self.offset().top - (panel.height() / 2) - }, 'slow'); - } - }); + // Scroll tree down to context of the current page, if it isn't + // already visible + $('.cms-tree a.jstree-clicked').entwine({ + onmatch: function(){ + var self = this, + panel = self.parents('.cms-panel-content'), + scrollTo; + + if(self.offset().top < 0 || + self.offset().top > panel.height() - self.height()) { + // Current scroll top + our current offset top is our + // position in the panel + scrollTo = panel.scrollTop() + self.offset().top + + (panel.height() / 2); + + panel.animate({ + scrollTop: scrollTo + }, 'slow'); + } + } + }); }); }(jQuery)); diff --git a/javascript/lang/pl_PL.js b/javascript/lang/pl_PL.js index 668e97e6..860b2dd8 100644 --- a/javascript/lang/pl_PL.js +++ b/javascript/lang/pl_PL.js @@ -19,7 +19,7 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { 'CMSMAIN.ERRORREVERTING': 'Błąd podczas powrotu do opublikowanej strony', 'CMSMAIN.SAVING' : 'Zapisywanie...', 'CMSMAIN.SELECTMOREPAGES' : "Zaznaczono %s stron.\n\nCzy na pewno chcesz wykonać tę akcje?", - 'CMSMAIN.ALERTCLASSNAME': 'Ta strona zostanie zaktualizowana po jej zapisani\'ur', + 'CMSMAIN.ALERTCLASSNAME': 'Ta strona zostanie zaktualizowana po jej zapisaniu', 'CMSMAIN.URLSEGMENTVALIDATION': 'Adres URL może składać się tylko z liter, cyfr i łączników.', 'AssetAdmin.BATCHACTIONSDELETECONFIRM': "Czy na pewno usunąć %s folderów?", 'AssetTableField.REALLYDELETE': 'Czy na pewno usunąć zaznaczone pliki??',