Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
9f0561b
Initiate the Segment Management Page
tzi Dec 9, 2025
71caaf2
Update UI screenshots and fix tests
tzi Dec 23, 2025
9cf112c
Only display data for pre-processed segments
tzi Feb 20, 2026
e2e3589
Fix the tooltip synchronisation after segment star state change
tzi Feb 24, 2026
cabac88
Revert UI Screenshot change
tzi Feb 24, 2026
6186545
Create Dashboard link with an accessible idSite
tzi Feb 24, 2026
38e9a6b
Build dashboard link on the client side
tzi Feb 24, 2026
97550c5
Handle string enable_only_idsite
tzi Feb 25, 2026
b9e3185
Add tests on title, order, and synchronisation
tzi Feb 25, 2026
d2541b7
Add test on edit button
tzi Feb 25, 2026
0826eb9
Update UI screenshot
tzi Feb 25, 2026
94b768a
Redesign real-time segment notice after team feedback
tzi Feb 25, 2026
063e49d
Consolidate and add more tests
tzi Feb 27, 2026
7f3acca
Create back-end Fixture for #23885 (#24161)
tzi Mar 3, 2026
7a41168
More Stable SegmentSelectorEditor test
tzi Mar 3, 2026
fe7fa0b
Feedback from @chippison
tzi Mar 3, 2026
561dffb
Make listeners return unsubscribe handlers to prevent duplicate handlers
tzi Mar 3, 2026
696a23c
Vue build
tzi Mar 4, 2026
665f4d3
Fix - Allow to remove 'All Visits' from comparisons
tzi Mar 4, 2026
b097d8c
restore browser-trigger archiving state in SegmentEditor ControllerTe…
tzi Mar 6, 2026
0bdb92d
Do not update TagManager
tzi Mar 6, 2026
b538573
Load data for the ManageSegmentPage line by line from front-end async…
tzi Mar 6, 2026
6eb1232
Securize segment data/delete flows and stabilize async ManageSegmentP…
tzi Mar 6, 2026
69006e1
Sanitize segment-data errors and test sequential loading after row fa…
tzi Mar 6, 2026
dadf54a
Fix tests
tzi Mar 7, 2026
8dd7a91
stabilize UI tests
tzi Mar 7, 2026
187d960
add new segment management page to whats new list (#24189)
nathangavin Mar 9, 2026
c709625
stabilize UI tests
tzi Mar 7, 2026
29b7126
Small back-end optimisation
tzi Mar 9, 2026
4127eea
Fix front-end user right to star/edit/delete segment
tzi Mar 9, 2026
c09bc02
Fix segment search in segment panel
tzi Mar 9, 2026
97ee83a
Move SegmentEditor.getSegmentData to API file and rename parameter (#…
tzi Mar 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions core/Menu/MenuAdmin.php
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,14 @@ public function addPluginItem(string $menuName, array $url, int $order = 50, $to
* @param string $menuName
* @param array $url
* @param int $order
* @param bool|string $tooltip
* @param false|string $tooltip
* @param false|string $icon
* @api
* @since 3.0.0
*/
public function addMeasurableItem($menuName, $url, $order = 50, $tooltip = false)
public function addMeasurableItem($menuName, $url, $order = 50, $tooltip = false, $icon = false)
{
$this->addItem('CoreAdminHome_MenuMeasurables', $menuName, $url, $order, $tooltip);
$this->addItem('CoreAdminHome_MenuMeasurables', $menuName, $url, $order, $tooltip, $icon);
Comment thread
caddoo marked this conversation as resolved.
}

/**
Expand Down
8 changes: 8 additions & 0 deletions lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,19 @@
"Cancel": "Cancel",
"CannotUnzipFile": "Cannot unzip file %1$s: %2$s",
"CanNotEditGlobalSegment": "This is a global segment. Only super users can edit global segments.",
"CanNotDeleteGlobalSegment": "This is a global segment. Only super users can delete global segments.",
"CanNotStarGlobalSegment": "This is a global segment. Only super users can star global segments.",
"CanNotUnstarGlobalSegment": "This is a global segment. Only super users can unstar global segments.",
"CanEditGlobalSegment": "This is a global segment. Any changes will apply across all websites.",
"CanDeleteGlobalSegment": "This is a global segment. Deleting will apply across all websites.",
"CanStarGlobalSegment": "This is a global segment. Adding to Starred will apply across all websites.",
"CanUnstarGlobalSegment": "This is a global segment. Removing from Starred will apply across all websites.",
"CanNotEditSiteSegment": "You can only edit the segments you created yourself.",
"CanNotDeleteSiteSegment": "You can only delete the segments you created yourself.",
"CanNotStarSiteSegment": "You can only add to Starred the segments you created yourself.",
"CanNotUnstarSiteSegment": "You can only remove from Starred the segments you created yourself.",
"CanEditSiteSegment": "Edit the segment for this website.",
"CanDeleteSiteSegment": "Delete the segment for this website.",
"CanStarSiteSegment": "Add to Starred segments for this website.",
"CanUnstarSiteSegment": "Remove from Starred segments for this website.",
"ChangeInX": "Change in %1$s",
Expand Down Expand Up @@ -70,6 +74,8 @@
"ColumnDestinationPage": "Destination Page",
"ColumnEntrances": "Entrances",
"ColumnEntrancesDocumentation": "Number of visits that started on this page.",
"ColumnEvolutionVisits": "Evolution Visits",
"ColumnEvolutionVisitsDocumentation": "The percentage change of visits compared to the previous period. A positive value indicates growth, while a negative value signals a decrease.",
"ColumnExitRate": "Exit rate",
"ColumnExitRateDocumentation": "The percentage of visits that left the website after viewing this page.",
"ColumnExits": "Exits",
Expand All @@ -95,6 +101,8 @@
"ColumnPercentageVisits": "%% Visits",
"ColumnPercentageVisitsDocumentation": "The percentage of total visits.",
"ColumnRevenue": "Revenue",
"ColumnSegment": "Segment",
"ColumnSegmentDocumentation": "A segment is a set of criteria used to select only a part of the entire set of visits.",
"ColumnSumTimeOnSite": "Total Time on Website",
"ColumnSumVisitLength": "Total time spent by visitors (in seconds)",
"ColumnTotalPageviews": "Total Pageviews",
Expand Down
11 changes: 9 additions & 2 deletions plugins/CoreHome/stylesheets/dataTable/_dataTable.less
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,9 @@ body>.widget table.dataTable {
}

// for dataTables in report pages (not for widgets in the dashboard)
.theWidgetContent .card .card-content table.dataTable, table.dataTable, table.subDataTable {
.theWidgetContent .card .card-content table.dataTable,
table.dataTable,
table.subDataTable {

th {
background: @theme-color-background-base !important;
Expand Down Expand Up @@ -156,10 +158,15 @@ table.dataTable td.column {
white-space: nowrap;
}

.dataTable tr.highlight td {
.dataTable tr.highlight td,
.dataTable_row-highlight td {
font-weight: bold;
}

tr:nth-last-child(1 of .dataTable_row-group) td {
border-bottom: 3px solid @theme-color-background-tinyContrast !important;
}
Comment thread
caddoo marked this conversation as resolved.

table.dataTable th.label,
table.dataTable td.label,
table.subActionsDataTable td.label,
Expand Down
57 changes: 56 additions & 1 deletion plugins/CoreHome/stylesheets/dataTable/_entityTable.less
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,45 @@ table.entityTable {
}
}
}

th.entityTable_Numeric {
text-align: right !important;
}
td.entityTable_Numeric {
text-align: right;
font-variant-numeric: tabular-nums;
}

.entityTable_Sparkline {
padding: 0;
width: 100px;
}
}

.entityTable_StarCell,
table.entityTable tbody tr .entityTable_StarCell {
width: 40px;
padding-right: 0;
}

.entityTable_Filler,
table.entityTable tbody tr .entityTable_Filler {
padding: 0;
}

.entityTable_ActionCell,
table.entityTable tbody tr .entityTable_ActionCell {
padding: 0 16px;
}

.entityTable_ActionCell-1,
table.entityTable tbody tr .entityTable_ActionCell-1 {
width: 80px;
}

.entityTable_ActionCell-3,
table.entityTable tbody tr .entityTable_ActionCell-3 {
width: 170px;
}

.table-action {
Expand All @@ -71,6 +110,15 @@ table.entityTable {
box-shadow: 0 1px 2px 0 rgba(0,0,0,0.16), 0 1px 5px 0 rgba(0,0,0,0.12);
cursor: pointer;
}

&[data-state="disabled"] {
opacity: 0.2;
cursor: not-allowed;
}

.entityTable_ActionCell & {
display: inline-block;
}
}

.card .tableActionBar {
Expand All @@ -82,6 +130,11 @@ table.entityTable {
}
}

.tableFooterLabel {
margin-bottom: 16px;
font-style: italic;
}

.tableActionBar {
a,
button {
Expand All @@ -105,12 +158,14 @@ table.entityTable {
text-transform: uppercase;
vertical-align: middle;
-webkit-tap-highlight-color: transparent;

&:hover {
text-decoration: none;
}
}

button:first-child, a:first-child {
button:first-child,
a:first-child {
background-color: @theme-color-brand !important;
color: @color-white;
}
Expand Down
19 changes: 19 additions & 0 deletions plugins/CoreHome/vue/src/Sparkline/Sparkline.less
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,22 @@ img.sparklineImg {
width: 100px;
height: 25px;
}

.sparklineEvolution {
color: black;
font-size: 12px;
white-space: nowrap;
}

.sparklineEvolution-positive {
color: green;
}

.sparklineEvolution-negative {
color: red;
}

.sparklineEvolution_icon {
margin-right: 1em;
vertical-align: middle;
}
Comment thread
caddoo marked this conversation as resolved.
1 change: 1 addition & 0 deletions plugins/CoreVue/types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ declare global {
interface PiwikHelperGlobal {
escape(text: string): string;
redirect(params?: any);
getCurrentQueryStringWithParametersModified(newparams: string);
Comment thread
caddoo marked this conversation as resolved.
htmlDecode(encoded: string): string;
htmlEntities(value: string): string;
modalConfirm(element: JQuery|HTMLElement|string, callbacks?: ModalConfirmCallbacks, options?: ModalConfirmOptions);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1565,4 +1565,35 @@
</row>
</widgets>
</row>
</result>
<row>
<uniqueId>General_Visitors.CoreHome_Segments</uniqueId>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
<order>5</order>
<icon>icon-reporting-visitors</icon>
<help>&lt;p&gt;The Visitors pages tell you things about who your visitors are. Things like where your visitors came from, what devices and browsers they're using and when they generally visit your website. Understand, in the aggregate, who your audience is, and look for outliers to see how your audience could grow.&lt;/p&gt;&lt;p&gt;In addition to general information about your visitors, you can also use the &lt;a href="#" onclick="this.href=broadcast.buildReportingUrl('category=General_Visitors&amp;subcategory=Live_VisitorLog')"&gt;Visits Log&lt;/a&gt; to see what occurred in every individual visit.&lt;/p&gt;</help>
<widget/>
</category>
<subcategory>
<id>CoreHome_Segments</id>
<name>Segments</name>
<order>99</order>
<help/>
</subcategory>
<widgets>
<row>
<name>Segments</name>
<module>SegmentEditor</module>
<action>manageSegments</action>
<order>99</order>
<parameters>
<module>SegmentEditor</module>
<action>manageSegments</action>
</parameters>
<uniqueId>widgetSegmentEditormanageSegments</uniqueId>
<isWide>0</isWide>
</row>
</widgets>
</row>
</result>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion plugins/Goals/Menu.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public function configureAdminMenu(MenuAdmin $menu)
$idSite = $this->getIdSite($userPreferences->getDefaultWebsiteId());

if (Piwik::isUserHasWriteAccess($idSite)) {
$menu->addMeasurableItem('Goals_Goals', $this->urlForAction('manage', array('idSite' => $idSite)), 40);
$menu->addMeasurableItem('Goals_Goals', $this->urlForAction('manage', array('idSite' => $idSite)), 15);
Comment thread
caddoo marked this conversation as resolved.
}
}

Expand Down
7 changes: 6 additions & 1 deletion plugins/Morpheus/stylesheets/ui/_cards.less
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,12 @@ h1,
}
}

.card-table + .tableActionBar {
.card-introduction {
max-width: 900px;
}

.card-table + .tableActionBar,
.tableFooterLabel + .tableActionBar {
margin: 0 0 0 -20px;
}

Expand Down
4 changes: 2 additions & 2 deletions plugins/PrivacyManager/vue/dist/umd.metadata.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion plugins/ScheduledReports/ScheduledReports.php
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ public function getClientSideTranslationKeys(&$translationKeys)
$translationKeys[] = 'ScheduledReports_ReportIncludeNWebsites';
$translationKeys[] = 'SegmentEditor_LoadingSegmentedDataMayTakeSomeTime';
$translationKeys[] = 'General_Download';
$translationKeys[] = 'ScheduledReports_Segment_HelpScheduledReport';
$translationKeys[] = 'ScheduledReports_HelpSegmentManagement';
$translationKeys[] = 'SegmentEditor_AddNewSegment';
$translationKeys[] = 'ScheduledReports_SentToMe';
$translationKeys[] = 'ScheduledReports_AlsoSendReportToTheseEmails';
Expand Down
2 changes: 1 addition & 1 deletion plugins/ScheduledReports/lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"ReportUpdated": "Report updated",
"ReportAdded": "Report added",
"Segment_Deletion_Error": "This segment cannot be deleted or made invisible to other users because it is used to generate email report(s) %s. Please retry after removing this segment from this report(s).",
"Segment_HelpScheduledReport": "You can select an existing custom segment to apply to data in this scheduled report. You may create and edit custom segments in your dashboard %1$s(click here to open)%2$s, then click on the \"%3$s\" box, then \"%4$s\".",
"HelpSegmentManagement": "You can select an existing custom segment to apply to data in this scheduled report. You may create and edit custom segments in the dedicated segments management page %1$s(click here to open)%2$s.",
"SegmentAppliedToReports": "The segment '%s' is applied to the reports.",
"SegmentDeleted": "Segment deleted",
"SendReportNow": "Send Report now",
Expand Down
Loading
Loading