matomo-org / matomo

Empowering People Ethically with the leading open source alternative to Google Analytics that gives you full control over your data. Matomo lets you easily collect data from websites & apps and visualise this data and extract insights. Privacy is built-in. Liberating Web Analytics. Star us on Github? +1. And we love Pull Requests!
https://matomo.org/
GNU General Public License v3.0
19.71k stars 2.62k forks source link

Logo & favicon feature: Change logo or favicon is taken into account even if not submitted #17451

Open heurteph-ei opened 3 years ago

heurteph-ei commented 3 years ago

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 3 years ago

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 3 years ago

@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 3 years ago

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

Findus23 commented 3 years ago

@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 3 years ago

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

Findus23 commented 3 years ago

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

MichaIng commented 3 years ago

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