Maps Marker Pro v4.0 is available

Posted on 18 October, 2018

Category:

Pro-Version Releases
Attention: this is not the changelog for the latest stable version 4.28 (see related release notes)

The wait is over. It has been more than 1 year and 3 months or 467 days since our last release v3.1. During this period we got asked several times why there has not been a new release for so long. The answer is simple: when Thorsten took over the lead in developing Maps Marker Pro about 2 years ago, it became pretty clear soon, that a complete rewrite would be needed in order to lift Maps Marker Pro to the next level and build a sustainable codebase for future developments.

By Autopilot (Own work) [CC BY-SA 3.0 or GFDL], via Wikimedia Commons

So instead of tweaking the existing code – with all the known limitations that grew over the last 5 years of development – we decided to start from scratch and implement a complete object-oriented rewrite of the codebase. We also separated JavaScript from PHP completely to allow for caching and significantly increase page loading speed. Additionally we could decrease the download size for marker data, allowing for up to 75% faster map loading and implemented advanced customization for maps by saving settings now on a map basis instead of globally – just to name a few highlights.

To give you an idea about the scope of the changes, here some stats for Maps Marker Pro 4.0 development:

  • 884 files changed
  • 69.760 code lines added
  • 167.498 code lines deleted
  • plugin package size v3.1 unpacked: 16,9 MB (542 files)
  • plugin package size v4.0 unpacked: 4,5 MB only (295 files)
  • uncounted coffees 😉

While this process took quite a few months to complete, the long-term benefits are absolutely worth it. Not only does the new code dramatically decrease load times and enhance security, but it also makes it much easier for us to fix bugs or implement new features – like the often-requested GPX elevations charts for example and lots of minor improvements, which have now been added with v4.0.

During the development process it became also clear very soon, that Maps Marker Pro 4.0 would need to be implemented as a new plugin in order to avoid any technical debt from the older version. Nevertheless we also focused backward compatibility so that the upgrade from 3.1.1 for existing users is as smooth as possible: as you can see from the update tutorial below, we built a migration tool which helps you update your marker shortcodes (which have been depreciated in 4.0). Anyway as v4.0 is a complete new plugin (using the slug maps-marker-pro in contrast to leaflet-maps-marker-pro in v3.1), all data from v3.1.1 is migrated to new database tables – so in case the migration should not work as expected (which we consider unlikely though due to 4 beta releases and 6 release candidates), all you would need to do is to disable v4.0 and enable v3.1.1 again.

Please be aware that the docs and FAQ have not been fully updated to reflect all 4.0 changes – we decided to release v4.0 nevertheless as we did not want to postpone the release any further because of this. An updated user documentation and frequently asked questions will be added soon.

If you want to keep up to date with the latest Maps Marker Pro development, please follow @MapsMarker on twitter (= most current updates), on Facebook or subscribe to news via RSS or via RSS/email.

We would also like to invite you to join our affiliate program which offers commissions up to 50%. If you are interested in becoming a reseller, please visit https://www.mapsmarker.com/reseller

Let us know what you think about this new release by submitting a review or leaving a comment below!

Happy mapping!

Your Maps Marker Pro team


Index


Major changes / hightlights

Please be aware of some profound changes:

  • complete rewrite:
    refactorization of the code base from procedural to object oriented
  • separation of JavaScript from PHP
    allowing for caching and significantly increase page loading speed
  • decreased download size for marker data
    Allowing for up to 75% faster map loading (see comparision video v3.1 vs v4.0):
  • improved database performance
    by reducing the number of database queries needed and the use of caches where possible
  • optimized CSS & JS loading mechanism
    resulting in load time reduction for required files of up to 20%
  • upgraded leaflet.js from v1.0.3 to v1.3.4
    Leaflet.js is “the engine of Maps Marker Pro” and the new version v1.3.4 includes optimizations and bugfixes – please see blog post on leafletjs.com and full changelog for more details
  • changes to map concept
    With v4.0 only maps and markers will be available anymore (the term layer maps is no longer used; marker maps cannot be created anymore – existing marker map shortcodes need to be changed using the input from the migration tool, see section “how to update to 4.0” for details).
  • simplified multi-layer-map concept
    Formerly called multi-layer-maps in v3.1 are now called filters with the option for custom sort order of filters on map edit pages
  • option to sort basemaps and overlays in the layer controlbox (drag & drop)
  • advanced customization for maps and markers
    Settings are now saved on a map/marker basis instead of globally. (All settings for “Map defaults” in the Settings area from v3.1 have been removed – you can now use the link “Save current values as defaults for new maps” instead on map edit pages):

    A similar link “Save current values as defaults for new markers” is available on the marker edit pages:
  • new capability system
    By default, only admins will have access to Maps Marker Pro sub pages on backend. So if on your site also users with other roles like Editor, Author or Subscriber should be able to create or update maps and markers, please navigate to Settings / Misc / Capabilities and adjust the settings accordingly:

    Please be aware that by default only WordPress administrators have access to Maps Marker Pro on backend! So in case you update from v3.1 and non-administrators were also allowed to create maps, you need to configure those settings once after update (see also optional post installation tasks)
  • support for GPX elevation charts and waypoints as well as multiple tracks
    GPX tracks now also support displaying interactive elevation charts and waypoints, example:

    If your GPX file includes multiple tracks, those can now be selected by a new control in the top left corner of the elevation chart:
  • GPX metadata is now displayed in a popup which opens by clicking on the track (instead of a dedicated GPX panel below the map):
  • Leaflet.GestureHandling
    This brings the basic functionality of Maps Gesture Handling into Leaflet and prevents users from getting trapped on the map when scrolling a long page:

    By default this setting is enabled for new maps and can be disabled on the map edit page in the tab “Interaction”:
  • support for HERE basemaps
    You can now also use basemaps from HERE/nokia for your maps – see https://www.mapsmarker.com/here-maps/ for details on how to register an API key:
  • options to display the list of markers right or left to a layer map
  • option to add a link instead of a popup for markers
    This often requested feature has also been added with v4.0. On marker edit pages you now have the option to either add a link or a popuptext to a marker:
  • possibility to override global settings for each map by using new shortcode parameters
    All parameters for maps created in the backend and saved in the database can be overwritten using shortcode parameters. The related reference can be found here.
  • support for condensed attribution
    You can now also condense the attribution field (disabled by default):

    The attribution gets full expanded by mouse hover or click:

    To activate the condensed attribution, please navigate to map edit pages, switch to advanced edit and enable the “Condensed” setting in the tab “Controls”:
  • options to change positions of all available control boxes
    With v4.0 it is now possible to change the position and visibility of all map control boxes on a map basis:

    For further control options please click on the button “Show advanced settings”.
  • add Yoast SEO sitemap integration
    The automatic sitemap integration for maps has been enhanced to now also support sitemaps created with Yoast SEO plugin. The related settings can be found at Settings / Misc / Sitemaps:
  • Backup and restore feature for maps & markers
    In contrast to v3.1 you do not need to use the import & export feature anymore (which had some limitations) to backup/restore or transfer your maps and markers. This can now be done by a dedicated backup & restore feature available on the tools page:
  • support for unlimited custom layers (basemaps and overlays):
    With v3.1 it was only possible to configure up to 3 custom layers. With v4.0 this restriction has been removed and you can now configure unlimited amounts of custom layers via Settings / Custom:

back to index


Minor changes

  • support for bing canvas dark, canvas light and canvays grey basemaps (disabled by default)
  • fractional zoom support (new interaction options: zoomDelta and zoomSnap)

    Known issue: zoom steps smaller than 1 can lead to issues with Google Maps (details)
  • option to set maximum boundaries for maps to limit panning and zooming (map edit pages, tab “Map”, advanced editor, button “Restrict to current view”)
  • separate settings to show address, coordinates (new) and directions of markers in popup
  • batch selection buttons (all/none) for layers in filter controlbox

    This setting can be controlled on map edit pages by switching to advanced editor in the tab “Controls”:
  • Optimized and cleaned-up settings area, no more reloads on save due to AJAX:
  • new widget “Maps Marker Pro – Shortcode”
  • new map setting tabbed for displaying maps in tabs
    If a map is loaded in a tab or hidden on load, depending on the framework used this can lead to maps not loading properly. To fix this, we added new setting “Tabbed” which needs to be enabled in this case:
  • updated language settings to choose frontend and backend language separately:
  • Photon@Mapsmarker: show streetnames+housenumbers for geocoding results if available
  • API dashboard for Photon@Mapsmarker geocoding at https://www.mapsmarker.com/photon showing the API usage of the last hour
  • increased rate limit for Photon@MapsMarker geocoding from 5.000 to 10.000 requests per day and from 10 to 20 requests per second
  • option to add existing markers to maps added with shortcodes only (e.g. [mapsmarker lat="48" lon="16" markers="1,2,3,4"] )
  • compatibility check for LiteSpeed Cache which can cause maps to break
  • removed six compatibility checks for plugins/themes which are not needed anymore due to Maps Marker Pro 4.0 rewrite
  • disabled tooltips by default on mobile devices as hover event is not available (thx Dirk!)
  • set interaction option “tap” to false by default to prevent issues with scrolling over maps on mobile devices (thx Thomas!)
  • automatically parse map shortcodes in category & post tag description and term fields
  • update leaflet-locatecontrol from v0.58 to v0.63
  • update leaflet-fullscreen codebase
  • updated minimap addon from v3.4.0 to v3.5.0
  • optimized plugin folder structure (some plugin compatibility configs might need to be re-applied)
  • updated Algolia autocomplete.js from v0.21.7 to v0.29
  • updated es6-promise for IE11/Google Mutant from v4.1.0 to v4.2.5
  • updated es6-promise for IE11/Google Mutant from v4.1.0 to v4.2.5
  • updated EdgeBuffer plugin for pre-loading tiles beyond the edge of the visible map to v1.0.6

back to index


Breaking changes

Although we focused on backward compatibility, it also became clear that not all features can be fully ported to v4.0, either because the used components are not supported anymore or because it would break other functionality which is essential for Maps Marker Pro v4.0:

  • MapQuest basemap support has been removed:
    due to MapQuest basemaps now requiring their own API, making them incompatible to be implemented into a standard Leaflet installation, existing MapQuest maps will be switched to OpenStreetMap automatically during migration from v3.1.1 to v4.0.
  • depreciated Mapbox v3 integration:
    The (depreciated) Mapbox v3 had to be removed – we plan to re-add Mapbox support (v4) with a future release. Existing maps using custom mapbox basemaps in v3.1 will automatically be switched to OpenStreetMap during migration in v4.0.
  • (retired) Wikitude augmented reality API:
    unfortunately Wikitude has discontinued their APIs, so with Maps Marker Pro v4.0 we replace that API with the augmented-reality API from layar.com, which also allows you to easily display your marker with the augmented-reality app from layar (tutorial), example screenshot:
  • removed Mapzen as geocoding provider:
    unfortunately Mapzen has retired its services and therefore has been removed as geocoding provider for Maps Marker Pro. If you used Mapzen as your default geocoding provider, Algolia Search will be used automatically as replacement in v4.0.
  • (retired) Visualead QR code generator:
    Visualead also has retired their service for generating QR codes with custom backgrounds. With Maps Marker Pro v4.0 this has been replaced with a local JS library QR code generator.
  • CSV/XLS(X)/ODS import/export:
    due to the new database structure, the old import/export feature from v3.1 has been replaced with optimized GeoJSON import/export. CSV or XLS(X) files can still be used in order to allow offline editing of map data, you just need to convert them into GeoJSON before import/export as you can see from this tutorial.
  • MMPAPI API (docs) has been replaced with Database API (docs)
  • REST API (docs) has been depreciated, replacement is planned for v4.1
  • Filters for texts, settings and contents (docs) have been removed
  • removed settings for (depreciated) mobile web app launch images and added simplified support for web app icons instead
  • removed (depreciated) hash URL plugin
  • minimum required WordPress version for Maps Marker Pro increased to 4.5 (needed for Gutenberg compatibility)
  • Bulk actions to bulk update maps and markers (formerly available on the Tools page in v3.1) have been removed & will be readded with v4.1
  • Widget “Maps Marker Pro – recent markers list” has been removed
  • Widget “Maps Marker Pro – latest marker map” has been removed

back to index


Bugfixes

  • load map tiles for OSM Black&White and DE variant via https to prevent mixed-content warnings (thx Annette!)
  • reduced timeouts for license API fallback calls to prevent issues on sites with connection issues
  • do not strip input tags from popuptexts if option “HTML filter for popuptexts (wp_kses)” is enabled
  • shortcode parsing for WordPress audio and video tags in popups on layer maps was broken if wp_keses() was enabled
  • list of markers: show entries only once if marker is assigned to several layers
  • activation & deactivation functions were not processed since v3.0
  • broken permalink compatibility check returning wrong URL
  • incorrect marker count on list of markers when using multi-layer-maps
  • incorrect content-type when using callback for GeoJSON
  • WPML/Polylang: missing string registration for translatable elements if importer is used (thx Laurent!)
  • admin dashboard widget could be broken if PHP 7.1+ was used
  • OOM (Out of memory) error during SPBAS local key validation
  • manual selection of Slovenian as interface language was broken (thx Igor!)
  • Google logo credits link was broken on iOS devices

back to index


Security improvements

  • improved: global sanitation check for all settings instead of individual output filtering

No technology is perfect, and neither is ours. Although security was a high priority for us during v4.0 development, there may be things that we can have overlooked. If you think you found a security issue, please report it to us safely by submitting your report via our hackerone bug bounty program.

back to index


Translations

All included translations have been updated thanks to 100+ translators helping to use Maps Marker Pro in your language.

For credits please see the full changelog at the end of this page.

back to index


How to update to version 4 and migrate existing maps

For a tutorial on how to update to version 4 and migrate existing maps please have a look at this user guide in our knowledge base.

back to index


Optional post-installation tasks

  • by default, only admins will have access to Maps Marker Pro sub pages on backend. So if on your site also users with other roles like Editor, Author or Subscriber should be able to create or update maps and markers, please navigate to Settings / Misc / Capabilities and adjust the settings accordingly:
  • Re-apply any custom CSS modifications:
    If you used any custom CSS modification e.g. in your theme´s style.css to overwrite Maps Marker Pro styles, those likely need to be changed, as the CSS elements have been renamed. In v3.1 a map had the CSS classes “mapsmarker layermap layer-12” for example, whereas in v4.0 this changed to “maps-marker-pro”. The prefix for other CSS elements als changed from “lmm-” to “mmp-“.

That´s it – now you can start using Maps Marker Pro v4.0 – happy mapping 🙂

back to index


Additional information for 4.0 beta testers

It is recommended for 4.0 beta testers to re-run the migration tool, as some bugs have been fixed and settings have been changed with v4.0. In case the migration tool is not re-run, some default settings (especially for settings using checkboxes) will be used instead, unless you re-apply your custom settings manually.

Anyway please be aware that all new maps or markers that were created or any changes made to migrated maps or markers since the installation of any 4.0-beta or 4.0-RC release will be lost if the migration tool is executed again!

back to index


How to install Maps Marker Pro 4.0 from scratch

For directly downloading and installing the v4.0 package as zip file, please click here.

For an archive of all available releases, please click here.

back to index


How to verify the integrity of the plugin package

For the SHA-256 hash value and the number of files for this release please check the following file: https://www.mapsmarker.com/SHA256SUMS.txt

This file is digitally signed with our PGP key, key signature file available at https://www.mapsmarker.com/SHA256SUMS.txt.asc

Click here for a tutorial on how to verify the integrity of the plugin package (recommended if the plugin package for a new installation was not downloaded from https://www.mapsmarker.com – verification is not needed though if the automatic update process is used)

back to index


How to rollback to v3.1.1

If you want to use v3.1.1 again, please first deactivate Maps Marker Pro v4.0 and then activate Maps Marker Pro v3.1.1 again. Then navigate to Settings / Permalinks and press the “Save changes” button once.

Please be aware that any new maps or marker changes which have been made with Maps Marker Prov 4.0 will not be visible with Maps Marker Pro v3.1.1, as a complete new database schema is used!

back to index


Full changelog

Changelog for version 4.0 - released on 18.08.2018 (release notes)

complete rewrite / refactorization of the code base from procedural to object oriented
separation of JavaScript from PHP to allow for caching and significantly increase page loading speed
decreased download size for marker data, allowing for up to 75% faster map loading
advanced customization for maps: settings are now saved on a map basis instead of globally
upgraded leaflet.js ("the engine of Maps Marker Pro") from v1.0.3 to v1.3.4 including optimizations and bugfixes - please see blog post on leafletjs.com and full changelog for more details
support for GPX elevation charts and waypoints as well as multiple tracks
support for HERE basemaps
options to display the list of markers right or left to a layer map
option to add a link instead of a popup for markers
Leaflet.GestureHandling support (prevents users from getting trapped on the map when scrolling a long page)
(retired) Wikitude augmented reality API has been replaced with layar.com API
optimized permission system with Maps Marker Pro capabilities for better access control (attention: by default only admins have access!)
fractional zoom support (new interaction options: zoomDelta and zoomSnap)
separate settings to show address, coordinates (new) and directions of markers in popup
support for bing canvas dark, canvas light and canvays grey basemaps (disabled by default)
option to set maximum boundaries for maps to limit panning (button "Restrict to current view")
possibility to override global settings for each map by using new shortcode parameters
batch selection buttons (all/none) for layers in filter controlbox
API dashboard for Photon@Mapsmarker geocoding at https://www.mapsmarker.com/photon showing the API usage of the last hour
automatically parse map shortcodes in category & post tag description and term fields
support for condensed attribution
options to change positions of all available control boxes
new shortcode parameter tabbed="true" for displaying maps in tabs
Easily change defaults for new maps by using the "Save current values as defaults for new maps" feature
compatibility check for LiteSpeed Cache which can cause maps to break
add Yoast SEO sitemap integration
improved performance by reducing the number of database queries needed and the use of caches where possible
optimized CSS & JS loading mechanism resulting in load time reduction of up to 20%
CSV/XLS(X)/ODS import/export has been replaced with native JSON import/export feature (tutorial for converting JSON into office formats)
simplified map concept: "marker maps" have been removed, "layer maps" were renamed to "maps" (to which you can assign objects like markers)
simplified multi-layer-map concept, now called filters with the option for custom sort order of filters
Photon@Mapsmarker: show streetnames+housenumbers for geocoding results if available
removed MapQuest basemap support (due to MapQuest basemaps now requiring their own API, making them incompatible to be implemented into a standard Leaflet installation; existing MapQuest maps will be switched to OpenStreetMap automatically)
removed depreciated Mapbox v3 integration (will be replaced with v4 with a future release)
removed six compatibility checks for plugins/themes which are not needed anymore due to Maps Marker Pro 4.0 rewrite
removed settings for (depreciated) mobile web app launch images and add simplified support for web app icons
replaced (retired) Visualead QR code generator with local jQuery QR code generator (QR codes can now be accessed on backend / "list all maps" only)
disabled tooltips by default on mobile devices as hover event is not available (thx Dirk!)
set interaction option "tap" to false by default to prevent issues with scrolling over maps on mobile devices (thx Thomas!)
GPX metadata is now displayed in a popup which opens by clicking on the track (instead of a dedicated GPX panel below the map)
updated language settings to choose frontend and backend language separately
increased rate limit for Photon@MapsMarker geocoding from 5.000 to 10.000 requests per day and from 10 to 20 requests per second
update leaflet-locatecontrol from v0.58 to v0.63 (includes bugfixes & leaflet 1.1.0 compatibility)
update leaflet-fullscreen codebase (support AMD and Node/CommonJS module systems, thx mpschaeuble!)
updated minimap addon from v3.4.0 to v3.5.0 (support for miminize/restore events - release notes)
optimized plugin folder structure (some plugin compatibility configs might need to be re-applied)
updated Algolia autocomplete.js from v0.21.7 to v0.29 (changelog)
updated es6-promise for IE11/Google Mutant from v4.1.0 to v4.2.5 (bugfix release)
updated Leaflet.MarkerCluster.LayerSupport from v1.0.3 to v1.0.4 (fixing issues with chunkedLoading)
updated EdgeBuffer plugin for pre-loading tiles beyond the edge of the visible map to v1.0.6
minimum required WordPress version for Maps Marker Pro increased to 4.5 (needed for Gutenberg compatibility)
removed hash plugin
do not strip input tags from popuptexts if option "HTML filter for popuptexts (wp_kses)" is enabled
reduced timeouts for license API fallback calls to prevent issues on sites with connection issues
load map tiles for OSM Black&White and DE variant via https to prevent mixed-content warnings (thx Annette!)
shortcode parsing for WordPress audio and video tags in popups on layer maps was broken if wp_keses() was enabled
list of markers: show entries only once if marker is assigned to several layers
activation & deactivation functions were not processed since v3.0
broken permalink compatibility check returning wrong URL
incorrect marker count on list of markers when using multi-layer-maps
incorrect content-type when using callback for GeoJSON
WPML/Polylang: missing string registration for translatable elements if importer is used (thx Laurent!)
admin dashboard widget could be broken if PHP 7.1+ was used
OOM (Out of memory) error during SPBAS local key validation
manual selection of Slovenian as interface language was broken (thx Igor!)
Google logo credits link was broken on iOS devices
improved: global sanitation check for all settings instead of individual output filtering
updated Bosnian translation thanks to Kenan Dervišević→ contribute
updated Catalan translation thanks to Roc, Efraim Bayarri, Vicent Cubells and Marta Espinalt→ contribute
updated Czech translation thanks to Viktor Kleiner and Vlad Kuzba→ contribute
updated Danish translation thanks to Mark Aabo Pedersen, Mads Dyrmann Larsen and Peter Erfurt→ contribute
updated German translation by Maps Marker Pro team and Daniel Luttermann→ contribute
updated Greek translation thanks to Charalampos Konstantopoulos, Philios Sazeides, Evangelos Athanasiadis and Vardis Vavoulakis→ contribute
updated Spanish translation thanks to David Ramí­rez, Alvaro Lara, Victor Guevara, Ricardo Viteri, Juan Valdes & Marta Espinalt and Fernando Coello→ contribute
updated Spanish/Mexico translation thanks to Victor Guevera and Eze Lazcano→ contribute
updated Finnish translation thanks to Jessi Björk→ contribute
updated French translation thanks to Vincèn Pujol, Rodolphe Quiedeville, Fx Benard, Cazal Cédric, Fabian Hurelle and Thomas Guignard→ contribute
updated Galician translation thanks to Fernando Coello, Jorge Castro Ruso→ contribute
updated Hungarian translation thanks to István Pintér and Csaba Orban→ contribute
updated Croatian translation thanks to Neven Pausic, Alan Benic and Marijan Rajic→ contribute
updated Indonesian translation thanks to Andy Aditya Sastrawikarta & Emir Hartato and Phibu Reza→ contribute
updated Italian translation thanks to Luca Barbetti and Angelo Giammarresi→ contribute
updated Japanese translations thanks to Shu Higash and Taisuke Shimamoto→ contribute
updated Korean translation thanks to Andy Park→ contribute
updated Lithuanian translation thanks to Donatas Liaudaitis and Donatas Liaudaitis→ contribute
updated Latvian translation thanks to Juris Orlovs and Eriks Remess→ contribute
updated Malay translation thanks to Mohd Zulkifli→ contribute
updated Norwegian (Bokmål) translation thanks to Inge Tang→ contribute
updated Dutch translation thanks to Ronald Smeets, Marijke Metz, Patrick Ruers, Fokko van der Leest and Hans Temming→ contribute
updated Polish translation thanks to Pawel Wyszyński, Tomasz Rudnicki, Robert Pawlak, Daniel and Paul Dworniak→ contribute
updated Portuguese - Brazil translation thanks to Fabio Bianchi, Andre Santos and Antonio Hammerl→ contribute
updated Romanian translation thanks to Arian, Daniel Codrea and Flo Bejgu→ contribute
updated Russian translation thanks to Ekaterina Golubina (supported by Teplitsa of Social Technologies - http://te-st.ru) and Vyacheslav Strenadko, http://slavblog.ru→ contribute
updated Slovenian translation thanks to Igor Čabrian→ contribute
updated Slovak translation thanks to Zdenko Podobny→ contribute
updated Swedish translation thanks to Olof Odier, Tedy Warsitha, Dan Paulsson, Elger Lindgren, Anton Andreasson and Tony Lygnersjö→ contribute
updated Thai translation thanks to Makarapong Chathamma and Panupong Siriwichayakul→ contribute
updated Turkish translation thanks to Emre Erkan, Mahir Tosun and Cagatay Demir→ contribute
updated Ukrainian translation thanks to Yaroslav B Yaroshevskyy, Andrexj, Sergey Zhitnitsky and Mykhailo→ contribute
updated Vietnamese translation thanks to Hoai Thu→ contribute
updated Chinese translation thanks to John Shen and ck→ contribute
updated Chinese translation thanks to Jamesho Ho→ contribute

back to index