diff --git a/config/global.ini.php b/config/global.ini.php index ff987583d2966fdd7cedc979d3cdf9ce2a898642..d72d5e6150efd19bab20139455d2c6a5c3a8bd3e 100644 --- a/config/global.ini.php +++ b/config/global.ini.php @@ -177,6 +177,11 @@ enable_segment_suggested_values = 1 ; Possible values are "view", "admin", "superuser" adding_segment_requires_access = "view" +; Whether it is allowed for users to add segments that affect all websites or not. If there are many websites +; this admin option can be used to prevent users from performing an action that will have a major impact +; on Piwik performance. +allow_adding_segments_for_all_websites = 1 + ; this action name is used when the URL ends with a slash / ; it is useful to have an actual string to write in the UI action_default_name = index diff --git a/plugins/SegmentEditor/API.php b/plugins/SegmentEditor/API.php index 301fe44a504ee4799ecf24b5d8997d9543eab91e..98b752cc2aea949b899861a508e092767514c94c 100644 --- a/plugins/SegmentEditor/API.php +++ b/plugins/SegmentEditor/API.php @@ -115,7 +115,13 @@ class API extends \Piwik\Plugin\API protected function checkUserCanAddNewSegment($idSite) { - if(!$this->isUserCanAddNewSegment($idSite)) { + if (empty($idSite) + && !SegmentEditor::isAddingSegmentsForAllWebsitesEnabled() + ) { + throw new Exception(Piwik::translate('SegmentEditor_AddingSegmentForAllWebsitesDisabled')); + } + + if (!$this->isUserCanAddNewSegment($idSite)) { throw new Exception(Piwik::translate('SegmentEditor_YouDontHaveAccessToCreateSegments')); } } diff --git a/plugins/SegmentEditor/SegmentEditor.php b/plugins/SegmentEditor/SegmentEditor.php index a79cc0be24da337343020d13edbb6bf97557d995..bd957c54c011dd57278fd0426beade837b968f8e 100644 --- a/plugins/SegmentEditor/SegmentEditor.php +++ b/plugins/SegmentEditor/SegmentEditor.php @@ -8,6 +8,7 @@ */ namespace Piwik\Plugins\SegmentEditor; +use Piwik\Config; use Piwik\Db; use Piwik\DbHelper; use Piwik\Version; @@ -98,4 +99,14 @@ class SegmentEditor extends \Piwik\Plugin { $stylesheets[] = "plugins/SegmentEditor/stylesheets/segmentation.less"; } + + /** + * Returns whether adding segments for all websites is enabled or not. + * + * @return bool + */ + public static function isAddingSegmentsForAllWebsitesEnabled() + { + return Config::getInstance()->General['allow_adding_segments_for_all_websites'] == 1; + } } diff --git a/plugins/SegmentEditor/SegmentSelectorControl.php b/plugins/SegmentEditor/SegmentSelectorControl.php index bb58caa29762c6cf20eeb6ff443569669d46582c..4e88d2191f12803d74d538374c1e1fd84a88473b 100644 --- a/plugins/SegmentEditor/SegmentSelectorControl.php +++ b/plugins/SegmentEditor/SegmentSelectorControl.php @@ -37,6 +37,8 @@ class SegmentSelectorControl extends UIControl $this->selectedSegment = Common::getRequestVar('segment', false, 'string'); + $this->isAddingSegmentsForAllWebsitesEnabled = SegmentEditor::isAddingSegmentsForAllWebsitesEnabled(); + $segments = APIMetadata::getInstance()->getSegmentsMetadata($this->idSite); $segmentsByCategory = array(); diff --git a/plugins/SegmentEditor/lang/en.json b/plugins/SegmentEditor/lang/en.json index 999b0d41bbfb8438a31a8475b6e090842f077958..a3f03751d84d64f5d10d823f80f3b0762b51636e 100644 --- a/plugins/SegmentEditor/lang/en.json +++ b/plugins/SegmentEditor/lang/en.json @@ -24,6 +24,7 @@ "VisibleToMe": "me", "YouMayChangeSetting": "Alternatively you may change the setting in the config file (%s), or edit this Segment and choose '%s'.", "YouMustBeLoggedInToCreateSegments": "You must be logged in to create and edit custom visitor segments.", - "YouDontHaveAccessToCreateSegments": "You don't have the required access level to create and edit segments." + "YouDontHaveAccessToCreateSegments": "You don't have the required access level to create and edit segments.", + "AddingSegmentForAllWebsitesDisabled": "Adding segments for all websites has been disabled." } } \ No newline at end of file diff --git a/plugins/SegmentEditor/templates/_segmentSelector.twig b/plugins/SegmentEditor/templates/_segmentSelector.twig index 89c8a314bf379ba560bee201555f06c77072e190..1d1b2275d84be85b518f9e652457eea502409fd7 100644 --- a/plugins/SegmentEditor/templates/_segmentSelector.twig +++ b/plugins/SegmentEditor/templates/_segmentSelector.twig @@ -122,7 +122,7 @@ {{ 'SegmentEditor_SegmentIsDisplayedForWebsite'|translate }}<span class="visible_to_website"><strong> <select class="visible_to_website_select"> <option selected="" value="{{ idSite }}">{{ 'SegmentEditor_SegmentDisplayedThisWebsiteOnly'|translate }}</option> - <option value="0">{{ 'SegmentEditor_SegmentDisplayedAllWebsites'|translate }}</option> + {% if isAddingSegmentsForAllWebsitesEnabled %}<option value="0">{{ 'SegmentEditor_SegmentDisplayedAllWebsites'|translate }}</option>{% endif %} </select> </strong></span> {{ 'General_And'|translate }} <span class="auto_archive"><strong>