Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -110,13 +110,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);
Copy link
Contributor Author

@tzi tzi Jan 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ This argument already exists and it is false by default. I only made it available in a higher level.

}

/**
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 on lines +166 to +168
Copy link
Contributor Author

@tzi tzi Jan 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ This create a large border after the last item in a row with the class dataTable_row-group.

Only "All Visits" has this class "All Visits" and "zefzef" are brothers and have this class
Image Image


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 on lines +6 to +23
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ Inspired from the "All Websites" design, but now available everywhere.

Image

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);
Copy link
Contributor Author

@tzi tzi Jan 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ This function already exists (and is useful!) but it is now available outside of the piwikHelper.

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);
Copy link
Contributor Author

@tzi tzi Jan 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ Goals item should be higher in the Administration Menu. It is more obvious now that we add a "Segments" item.

}
}

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
2 changes: 1 addition & 1 deletion plugins/ScheduledReports/ScheduledReports.php
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,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