@heurteph-ei opened this Issue on April 12th 2021

Expected Behavior

Matomo logo and favicon customization feature
When I upload a new logo or favicon, it should not be saved until I use the submit button

Current Behavior / Steps to Reproduce

  1. Go to Administration > System > General Settings menu (or something like that, as my Matomo is in French, I am not sure of the English wording)
  2. In section Branding, just upload a logo or a favicon, but do not click on the Submit (or Save?) button
  3. Refresh the page ([Ctrl] + [F5])
  4. The logo (or favicon depending on step 2) has changed :cry:

Your Environment

Mandatory checks

Version PHP >= 7.2.5: ✔ 7.3.20
PDO Extension: ✔
PDO\MYSQL Extension: ✔
MYSQLI Extension: ✔
Extensions requises: ✔ zlib ✔ SPL ✔ iconv ✔ json ✔ mbstring ✔ Reflection
Fonctions requises: ✔ debug_backtrace ✔ eval ✔ hash ✔ gzcompress ✔ gzuncompress ✔ pack
Configuration PHP requise (php.ini): ✔ session.auto_start = 0 ✔ max_execution_time = 0 OR >= 30
Répertoires avec les droits d'accès en écriture: ✔ $DOC_ROOT/tmp ✔ $DOC_ROOT/tmp/assets ✔ $DOC_ROOT/tmp/cache ✔ $DOC_ROOT/tmp/climulti ✔ $DOC_ROOT/tmp/latest ✔ $DOC_ROOT/tmp/logs ✔ $DOC_ROOT/tmp/sessions ✔ $DOC_ROOT/tmp/tcpdf ✔ $DOC_ROOT/tmp/templates_c
Répertoires avec accès en écriture pour Gestionnaire de balises: ✔ $DOC_ROOT/js

Optional checks

Intégrité du fichier: ✔
Statut du traqueur: ✔
Limite mémoire: ✔ 128M
Fuseau horaire: ✔
Ouvrez l'URL: ✔ curl
PageSpeed désactivé: ✔
GD > 2.x + Freetype (graphiques): ✔
Autres extensions: ✔ json ✔ libxml ✔ dom ✔ SimpleXML
Autres fonctions: ✔ shell_exec ✔ set_time_limit ✔ mail ✔ parse_ini_file ✔ glob ✔ gzopen ✔ md5_file
Système de fichiers: ✔
Setup Cron (faster report loading): ⚠ Warning: Pour des performances optimales et un Matomo rapide, il est vivement recommandé de mettre en place une entré CRON pour archiver automatiquement vos rapports, et de désactiver le déclanchement depuis l'interface depuis les paramètres Matomo.
Setup Cron - Gestion des processus via la ligne de commande: ✔ Ok
Capacités de la base de données: ✔ UTF8mb4 charset ⚠ Warning: LOAD DATA INFILE
L'utilisation de LOAD DATA INFILE va grandement accélérer la vitesse du processus d'archivage de Matomo. Pour le rendre disponible à Matomo, essayez de mettre à jour PHP & MySQL et assurez-vous que votre utilisateur MySQL a les privilèges de FILE.
Si votre serveur Matomo suit des sites à fort trafic (ex. > 100000 pages par mois), nous recommandons d'essayer de corriger ce problème.
Erreur: LOAD DATA INFILE failed... Error was:
Try 1: LOAD DATA INFILE : SQLSTATE[28000]: Invalid authorization specification: 1045 Access denied for user (using password: YES)[28000],
Try 2: LOAD DATA LOCAL INFILE : SQLSTATE[42000]: Syntax error or access violation: 1148 The used command is not allowed with this MySQL version[42000]
✔ CREATE TEMPORARY TABLES ✔ Changing transaction isolation level
Taille maximale des paquets: ⚠ Warning: Il est important de configurer une taille 'max_allowed_packet' dans votre base de données MySQL d'au moins 64MB. 32MB configuré en ce moment.
Connexion SSL forcée: ⚠ Warning: Nous recommandons d'utiliser Matomo uniquement avec des connexions sécurisées SSL. Pour empêcher l'accès non sécurisée par HTTP, ajoutez force_ssl = 1 à la section General dans votre fichier conf/config.ini.php de Matomo.
Géolocalisation: ⚠ Warning: La géolocalisation fonctionne, mais vous n'utilisez pas un des fournisseurs recommandés. Si vous devez importer des fichiers de journaux ou bien effectuer quoi que ce soit d'autre qui requiert la définition des adresses IP, utilisez l'implémentation PHP GeoIP l'extension maxminddb.
Mettre à jour via HTTPS: ✔
Traceur JavaScript inscriptible ("/matomo.js"): ✔
Heatmap & Session Recording Tracking: ⚠ Warning: Requesting '$MATOMO_URLplugins/HeatmapSessionRecording/configs.php?idsite=1&trackerid=5lX6EM&url=http%3A%2F%2Ftest.test%2F' resulted in an SSL error. Maybe you are using a self signed certificate? Please open the URL manually in a browser to see if the response contains 'Piwik.HeatmapSessionRecording'. If not, you might need to modify your server configuration as this file needs to be accessible via a browser from the Internet or Intranet.

Informational results

Matomo Version: 4.0.5
Matomo Update History: 4.0.5,
Matomo Install Version: 4.0.5
PHP_OS: Linux
PHP SAPI: apache2handler
Timezone Version: 0.system
PHP Timezone: UTC
PHP Time: 1614954151
PHP Datetime: 2021-03-05 14:22:31
PHP INI max_execution_time: 30
PHP INI post_max_size: 8M
PHP INI max_input_vars: 1000
PHP INI zlib.outputcompression:
Curl Version: 7.29.0, NSS/3.44
Suhosin Installed: 0
DB Prefix: matomo

DB Charset: utf8mb4
DB Adapter: PDO\MYSQL
MySQL Version: 5.7.33-enterprise-commercial-advanced-log
Num Tables: 69
Browser Segment Archiving Enabled: 1
Development Mode Enabled: 0
Internet Enabled: 1
Multi Server Environment: 0
Custom User Path: 0
Custom Include Path: 0
Plugins Activated: API, AbTesting 4.0.6, Actions, ActivityLog 4.0.2, Annotations, BulkTracking, Cohorts 4.0.2, Contents, CoreAdminHome, CoreConsole, CoreHome, CorePluginsAdmin, CoreUpdater, CoreVisualizations, CustomDimensions, CustomJsTracker, CustomReports 4.0.4, Dashboard, DevicePlugins, DevicesDetection, Diagnostics, Events, Feedback, FormAnalytics 4.0.2, Funnels 4.0.3, GeoIp2, Goals, Heartbeat, HeatmapSessionRecording 4.0.6, ImageGraph, Insights, Installation, Intl, IntranetMeasurable, LanguagesManager, Live, LoginLdap 4.3.0, MobileMessaging, Monolog, Morpheus, MultiSites, Overlay, PagePerformance, PrivacyManager, ProfessionalServices, Proxy, Referrers, Resolution, RollUpReporting 4.0.1, RssWidget, SEO, ScheduledReports, SearchEngineKeywordsPerformance 4.1.1, SegmentEditor, SitesManager, TagManager, Tour, Transitions, TwoFactorAuth, UserCountry, UserCountryMap, UserId, UserLanguage, UsersFlow 4.0.2, UsersManager, VisitFrequency, VisitTime, VisitorInterest, VisitsSummary, WebsiteMeasurable, Widgetize
Plugins Deactivated: CustomVariables, DBStats, Ecommerce, Login, LoginSaml 4.0.3, Marketplace (yes we had to deactivate it!), MediaAnalytics 4.0.2, MobileAppMeasurable, MultiChannelConversionAttribution 4.0.2, Provider, WhiteLabel 4.0.1, WooCommerceAnalytics 4.0.3
Plugins Invalid:
Server Info: Apache
Had visits in last 1 day: 1
Had visits in last 3 days: 1
Had visits in last 5 days: 1
Archive Time Last Started: 0
Archive Time Last Finished: 0
Num invalidations: 80 queued, 0 in progress
User Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0
Browser Language: fr,fr-fr,en-us,en
Anonymize Referrer:
Do Not Track enabled: 0

@Findus23 commented on April 12th 2021 Member

I'm not entirely sure if this is worth changing as it would be a lot of additional complexity (at the moment the upload just replaces the file) and this would then need additional versioning, a DB lookup to find out which is the correct file, etc. for a very basic feature.

Maybe the better way would be to make the help text more clear that the upload replaces the existing files.

@diosmosis commented on April 12th 2021 Member

@Findus23 I guess we could just have a publish option that needs to be checked as well, and if not checked we display the default favicon. If checked, then we display the uploaded custom logo. This would just need a new boolean setting. Think that would work?

Going to mark this as an enhancement.

@heurteph-ei commented on April 13th 2021

Hi all,
My favorite solution is @diosmosis one. But if we switch to @Findus23 solution, then the save button must be removed...

@Findus23 commented on April 13th 2021 Member

@diosmosis But if the user already had a custom logo and uploads a new one it will be overwritten even if the save button is not hit as the upload of the file itself overwrites the file. I don't know a simple solution for this.

@diosmosis commented on April 13th 2021 Member

@Findus23 would it work to save the file to a different filename (ie, uploaded-favicon.png), then change the name on publish?

@Findus23 commented on April 14th 2021 Member

@diosmosis That might work, I didn't think of this possibility.

@MichaIng commented on April 27th 2021

The PHP temporary directory wound be suitable I guess, which is also a volatile tmpfs often.

That could be of use: https://www.php.net/manual/function.sys-get-temp-dir.php

Powered by GitHub Issue Mirror