=== WP Trip Summary === Contributors: alexandruboia Donate link: https://ko-fi.com/alexandruboia Tags: trip, summary, map, gpx, travel Requires at least: 7.0.0 Tested up to: 7.1.4 Stable tag: 0.3.3 Requires PHP: 8.3.0 License: Modified BSD License License URI: https://opensource.org/licenses/BSD-3-Clause Structured trip summaries, self-hosted GPS tracks and interactive maps for travel bloggers. == Description == = Why WP Trip Summary = Readers of a travel post want answers before they read the story: how long is the route, how much climbing does it involve, how hard is it and how do I get there? WP Trip Summary puts those answers in a clean, consistent box at the top of every trip post, next to an interactive map of the route. - 🧭 **Every trip post becomes a route sheet.** Add distance, total climb, difficulty, seasons, surface type and more. The fields are tailored to each trip type and displayed the same way on every post. - πŸ—ΊοΈ **Your GPS tracks stay on your server.** Upload a GPX, KML or GeoJSON file and it is parsed, stored and rendered by your own WordPress site. You need no third-party map service account, subscription or API key. - ⛰️ **Interactive maps with elevation profiles.** Visitors can pan, zoom, go full screen, magnify parts of the route, see its highest and lowest points and explore the altitude profile. - πŸ““ **Rider's log.** Keep a record of everyone who rode or walked the route, including dates, time spent, gear and notes. You choose which entries are public. - πŸ”Ž **Search-engine friendly.** Optionally add schema.org `Place` structured data (JSON-LD) to posts that have a track. - 🌍 **Ready for your audience.** The plugin is available in English, French, German and Romanian, and it supports metric and imperial units. = Watch WP Trip Summary in action = https://vimeo.com/1238064833 = Who it is for = - **Cycling and bikepacking bloggers** who want every tour to show distance, climb, surface and recommended bike at a glance. - **Hiking and trekking bloggers** who document trails, route markers, seasons and access routes. - **Railway enthusiasts** who write about train journeys, including gauge, operators, electrification and line status. - **Small tour operators, guides and outdoor clubs** that publish routes on a WordPress site and want them presented consistently. WP Trip Summary attaches the trip information to the post itself. You write your story as usual, and the summary, map and log travel with it. = Features = = Structured trip information = Choose a trip type for each post and fill in the fields that matter for it: **Bike trips** - Total distance - Total climb - Difficulty level - Access information - Open during seasons - Path surface type - Recommended bike type **Hiking trips** - Total distance - Total climb - Difficulty level - Access information - Open during seasons - Path surface type - Route markers **Train rides** - Total distance - Number of train changes - Line gauge - Railroad operators - Line status - Electrification - Line type Options such as difficulty levels, seasons and surface types are fully editable from the admin area, in every supported language. = GPS tracks and maps = - Upload **GPX 1.1**, **KML** or **GeoJSON (RFC 7946)** files. Every coordinate is validated before the track is saved. [See how each format is read](https://github.com/alexboia/WP-Trip-Summary/blob/master/readme/docs/file-formats.md). - The map is powered by [Leaflet](https://leafletjs.com/) and uses [OpenStreetMap](https://www.openstreetmap.org/) by default. You can choose a predefined tile layer or set up your own. - Visitors can use full-screen mode, a magnifying glass and the button that re-centers the map on the track. - An altitude profile chart and a box with the minimum and maximum altitude are available. - You can let visitors download the track as a GPX file. - You can change the track's color and line weight. = Rider's log = Add as many log entries as you need to each route, with the rider, date, time spent, vehicle, gear and notes. Public entries appear in a dedicated tab of the viewer. = Easy to place, easy to configure = - The trip summary viewer is added automatically to the post, or you can place it yourself with the `[abp01_trip_summary_viewer]` shortcode. - A **Gutenberg block** and a **classic editor button** insert the shortcode for you. - A **teaser** at the top of the post can invite readers to jump to the trip summary. - You can choose the tab that the viewer opens on and the unit system (metric or imperial). = For site owners = - In the post listing, you can **filter posts by trip type** and see a **trip summary audit log**. - The **maintenance tools** clear cached track data, find posts with missing track files or remove all plugin data. - The **system logs** page lets you view and manage the plugin's error and debug logs. = For developers = - Trip summary data is exposed through the WordPress REST API, in the `wpts_trip_summary` field of posts. - [Actions and filters are documented](https://github.com/alexboia/WP-Trip-Summary/tree/master/hook-docs), so you can customize the plugin. - Optional JSON-LD output (schema.org `Place` with a `GeoShape` bounding box): See an [example of the generated JSON-LD on GitHub](https://github.com/alexboia/WP-Trip-Summary#for-developers). The box is described by its south-west and north-east corners: `Lat1 Lng1 Lat2 Lng2`. = Languages = - English (default): `en_US` - French: `fr_FR` - German: `de_DE` - Romanian: `ro_RO` The German translation was partly contributed by [Nico](https://wordpress.org/support/users/nida78/). Would you like WP Trip Summary in your language? [Open an issue](https://github.com/alexboia/WP-Trip-Summary/issues/new/choose) and help translate it. = Roadmap = Version 0.4 focuses on flexibility and on making the plugin your own: - [ ] **Custom trip types**, plus new built-in ones such as road trips and water activities. - [ ] **Viewer color schemes** that you can customize from the settings page or in code. - [ ] **GPX waypoints** displayed on the map. - [ ] **A public API** for plugin and theme developers. - [ ] **More customizable settings.** You can follow the work in the [milestones](https://github.com/alexboia/WP-Trip-Summary/milestones). Have an idea? [Suggest a feature](https://github.com/alexboia/WP-Trip-Summary/issues/new/choose). = Support and community = - 🐞 **Found a bug or have a question?** [Open an issue](https://github.com/alexboia/WP-Trip-Summary/issues/new/choose) or use the [WordPress.org support forum](https://wordpress.org/support/plugin/wp-trip-summary/). - ⭐ **Enjoying the plugin?** A [review on WordPress.org](https://wordpress.org/support/plugin/wp-trip-summary/reviews/#new-post) helps other travel bloggers find it. - πŸ› οΈ **Want to contribute code or translations?** [Read the contribution guide](https://github.com/alexboia/WP-Trip-Summary/blob/master/CONTRIBUTING.md). = Support the project = WP Trip Summary is built and maintained in my free time. If it helps you share your journeys, you can support its development: [ko-fi](https://ko-fi.com/Q5Q01KGLM) You can also support my paid work on [Gumroad](https://alexboia.gumroad.com/). == Installation == = Getting started = 1. In your WordPress admin area, go to `Plugins` -> `Add New` and search for **WP Trip Summary**. 2. Click `Install Now`, then `Activate`. 3. Open a post, choose the trip type in the **Trip Summary** box, fill in the details and upload your GPS track. 4. Publish your post. The trip summary and map appear on the post. You can fine-tune the plugin from `Trip Summary` -> `Settings`. Prefer a manual install? Download the latest package from the [WordPress plugin directory](https://wordpress.org/plugins/wp-trip-summary/) or from [GitHub releases](https://github.com/alexboia/WP-Trip-Summary/releases), then upload it from `Plugins` -> `Add New` -> `Upload Plugin`. = Requirements = - WordPress 7.0 or newer - PHP 8.3 or newer, with the `libxml`, `SimpleXML` and `mysqli` extensions - MySQL 5.7 or newer, with spatial support - Recommended: the `mbstring` and `zlib` PHP extensions Developer setup and test instructions are in [CONTRIBUTING.md](https://github.com/alexboia/WP-Trip-Summary/blob/master/CONTRIBUTING.md). == Frequently Asked Questions == = Does it work with the block editor (Gutenberg)? = Yes. The plugin works with both the block editor and the classic editor. = Do I need an account with a map provider? = No. The map uses OpenStreetMap tiles by default, and your tracks are stored on your own server. You can switch to another tile provider if you want to. = Which GPS file formats can I upload? = You can upload GPX 1.1, KML and GeoJSON files. [See the parsing details](https://github.com/alexboia/WP-Trip-Summary/blob/master/readme/docs/file-formats.md). = Can my readers download the track? = Yes, if you allow it. Track downloads are optional and can be turned on from the plugin settings. = Can I show the trip summary somewhere else in the post? = Yes. Use the `[abp01_trip_summary_viewer]` shortcode, the Gutenberg block or the classic editor button. The shortcode takes no parameters and is supported once per post, in the post for which the trip summary was defined. = Can I use it with post types other than posts and pages? = Yes, with a filter hook. [See the example in the wiki](https://github.com/alexboia/WP-Trip-Summary/wiki/Changing-the-editor-availability-per-post-type). = Why doesn't the trip summary appear on archive pages? = The viewer is shown only on the post's own page. It does not appear on listing pages, such as archives, even when they display the full post content. = Does it support multisite installations? = WP Trip Summary is designed and tested for single-site installations. Multisite is not officially supported. = Is it free? = Yes. WP Trip Summary is free and open source, under the BSD 3-Clause license. == Screenshots == 1. Your readers get the essentials at a glance: distance, climb, difficulty, access, seasons and surface 2. Your GPS track on an interactive map, served from your own site 3. The altitude profile under the map shows where the climbing happens 4. The public route log shows who did the route, when, how long it took and what they used 5. An optional teaser at the top of the post takes readers straight to the trip summary 6. Your readers can explore the trip map and switch viewer tabs on a phone 7. Expand the map to fill the phone screen and inspect the route in detail 8. Open the trip summary editor right from the post editor 9. Fill in the trip details, choosing from options tailored to each trip type 10. Upload a GPX, KML or GeoJSON file and preview the track before publishing 11. Keep a log of everyone who did the route, alongside the post 12. Add a route log entry and decide whether your readers can see it 13. See which posts have trip information and a track, and filter them by route type 14. Check when a post's trip information and track were last changed, and by whom 15. Set the teaser texts, the tab readers see first and how multi-value fields are displayed 16. Choose the map tiles and controls, the altitude display, track downloads and the track's look 17. Start from a pre-defined tile layer instead of typing the configuration yourself 18. Manage the options offered for difficulty levels, seasons, surfaces and other fields 19. Find the posts whose track files have gone missing 20. Generate Nginx rules that block direct web access to stored track files 21. Read and manage the plugin's debug and error logs from the dashboard == Changelog == = 0.3.3 = - Redesigned the front-end viewer, including trip information, trip type labels and rider's log entries; - Added horizontal scrolling for viewer tabs when they exceed the available width, keeping the active or keyboard-focused tab visible; - Refreshed the admin settings, maintenance, lookup data, system logs and About pages, as well as the trip summary audit log viewer; - Improved the trip summary and rider's log editors with updated layouts, action button icons and better modal sizing; - Added front-end viewer credits, with the `abp01_show_frontend_viewer_credits` filter to control their visibility; - Added front-end viewer subtitle, with the `abp01_show_frontend_viewer_subtitle` filter to provide a custom value (default no subtitle); - Added an Nginx Access Directives Helper to the maintenance tools, generating access rules for protecting the plugin's storage directory; - Updated Romanian, French and German translations, and added German translations for predefined lookup values; - Fixed translation loading errors caused by initializing translated UI labels too early; - Fixed GPX imports incorrectly treating valid track segments as empty; - Added WGS84 coordinate validation for imported GPX, GeoJSON and KML tracks, rejecting files containing invalid coordinates; - Fixed stale track data being reused from the cache when uploading a replacement track, including after a previously failed upload; - Fixed the rider's log viewer ignoring the option to hide entry metadata; - Added password protection checks before rendering the trip summary automatically or through its shortcode, and before serving track data through AJAX; - Hardened map attribution rendering against HTML injection and restricted attribution URLs in settings to HTTP and HTTPS; - Hardened the Leaflet script wrapper's path validation, restricting served JavaScript to the intended directory and checking symbolic links and Windows junctions; - Extended generated storage access rules to protect temporary `.dat` upload files; - Corrected installation and uninstallation hook execution and error handling, and added the dedicated `abp01_uninstall_table_names` filter for custom table cleanup; - Fixed the legacy 0.3.0 upgrade step not reporting successful completion; - Updated Chart.js to 2.9.4 and Monolog to 3.10.0; - Extracted the KML parser into the Composer-managed `myclar/kamel-php` library; - Began migrating internal classes to the `WpTripSummary` namespace, with autoloader support, legacy aliases and additional PHP type declarations; - Migrated several admin scripts and shared UI components to TypeScript; - Expanded action/filter documentation and automated regression coverage, added a custom viewer tab example, and improved contributor and README generation tooling; - Added repository skills for coding conventions and license headers, hook documentation, namespace migrations and conservative typing, and product marketing, with supporting references and utilities (see Repository skills); - Removed the built-in Help page and its bundled resources; - Removed bundled styles targeting individual legacy WordPress themes; - Fixed an issue when filtering by route type, yielding `Notice: WP_Theme_JSON_Resolver::get_user_data(): Error when decoding a theme.json schema for user data`. = 0.3.2 = - Added German translation (issue #90); - Added support for KML files (issue #91); - Bring help contents (mostly) up-to-date with the new features, for ro_RO and en_US (issue #89); - Add route type filter in admin area post listing (issue #92); - Some embarrassing bug fixes; - Add proper error and debug logging infrastructure, including dedicated log management page (go to `Trip Summary` -> `System logs`); - Other stuff which I may not remember. = 0.3.1 = - Fixed bug on some PHP versions. = 0.3.0 = - Fixed bug on unix platforms due to wrong directory naming (upper case first letter, instead of expected lower case). = 0.2.9 = - Added rider's log feature; - Bug fix when validating GPX files that begin with XML comments (courtesy of Philip Flohr); - Fixed some warnings on PHP 8; - Internal installer rework. = 0.2.8 = - Added shortcuts to plug-in's entry from the plug-in listing page; - Added maintenance page with the following tools: clear cached track data, clear all trip summary info, detect posts that have missing track files; - Added JSON-LD structured data to posts or pages that have trip summary track data (type Place, with box GeoShape); - Added additional REST API field to WP-JSON post endpoint to return trip summary data; - Fixed MysqliDb dependency - The MysqliDb generates deprectation warnings and needs to be updated (Issue #79); - Fixed JS warnings caused by including editor scripts in non-editor pages (Issue #78); - Added trip summary audit log to post edit and post listing pages (Issue #80); - Updated UI + UX of the lookup data management editor page (Issue #77); - Fixed trip summary shortcode block not rendering in post/page view; - Fixed trip summary shortcode block editor widget not showing up. = 0.2.7 = - Refactoring: the plug-in now has a more manageable and extensible structure, with the most important change being the splitting of all the code previously in `abp01-plugin-main.php`, into separate plugin modules; - Feature: Added an about page (Issue 59); - Feature: Enhanced display for the frontend viewer information items (Issue 75); - Feature: Added support for GeoJSON file import (Issue 76); - Improved plug-in documentation; - Improved usability and UI for the settings page; - Improved usability and UI for the help page; - Updated help contents; - Improved stability and various bug fixes. = 0.2.6 = - Usability improvement: added a control to the front-end viewer map that allows one to re-center the map to the GPS track bounding area - basically the initial state of the map when it's first loaded (Issue 68). - Usability improvement: within the WP-Trip-Summary, the `Clear Track` and `Clear Info` buttons have been grouped using a `Quick Actions` control, such as in the metabox used to display the summary in the post page (Issue 69). - Usability improvement: added confirmation when attempting to remove trip summary information as well as when attempting to remove track data (Issue 72). - Usability improvement: when removing a lookup data item with existing associations (that is, associated with at least a post), WP-Trip-Summary no longer issues a hard denial, but asks the user to confirm whether he/she wishes to proceed removing the item, as well as sever its associations with the posts (Issue 67). - Feature: added an option (to the WP-Trip-Summary settings page) to specify the initially selected WP-Trip-Summary front-end viewer tab (Issue 71). - Feature: added an option (to the WP-Trip-Summary settings page) to specify the front-end viewer map height (Issue 70). - Improved stability; - Improved documentation. = 0.2.5 = - Trip summary front-end viewer can now inserted at a custom location in the post content for which it has been defined using the [abp01_trip_summary_viewer] shortcode (or a special block, if you're using the block editor); - Support for trip summary front-end viewer customization: https://github.com/alexboia/WP-Trip-Summary/wiki/Customizing-the-front-end-viewer. - Refined error reporting when uploading a new GPS track; - Altitude profile now available; - Min/max altitude info box now available; - Refactoring and stability improvements; - Fixed track uploader not opening on Microsoft Edge browsers; - Fixed Waymark compatibility issue. = 0.2.4 = - French translation now available! - The trip summary editor is now launched from a side metabox, which also displays relevant information and features some quick actions; - The plug-in is now smoothly integrated with the block editor as well; - In the plug-in settings editor a user can now specify the weight used to plot the GPS track on the map; - Added automated tests; - Tested compatibility with WordPress 5.4; - Fixed a GPX file upload issue that occured with certain GPX files; - Updated dependencies: URI.js. = 0.2.3 = - In the plug-in settings editor a user can now specify the color used to plot the GPX track on the map - The post and page listing now have two columns that describe whether or not an article has route information and, respectively, whether or not it has an uploaded GPX track - The plug-in now correctly works for WP pages as well (previously, it would not correctly render on the frontend) - Added automated tests - Added compatibility with Mysql 8.0+ - Fixed an activation issue that occured with certain PHP versions - Updated dependencies: Leaftlet Js, Leaflet Js Magnifying Glass component, NProgress js, MysqliDb = 0.2.2 = - The storage directories have received index.php and .htaccess guard access files to prevent direct access of stored files. These are copied on install and on upgrade, but also created upon storing files, if they do not exist. - Refactoring of view file names: replaced "techbox-" prefix with "wpts-" prefix. - Removed deprecated uploader runtimes (flash and silverlight) from track uploader. - Minor refactoring. = 0.2.1 = - Moved plug-in track & cache storage to a sub-directory of wp-content/uploads, as, previously, the plug-in stored its track & cache files to its own directory, which caused this data to be lost upon upgrade, since WordPress, when upgrading a plug-in, removes all the files that belong to the previous plug-in version. - Minor refactoring = 0.2.0 = - Fixed An activation issue which occurred under certain conditions. - Fixed the trip summary editor not being re-centered upon window resize; - Fixed the settings page not displaying the progress bar when saving, if the page has been scrolled. = 0.2b = - First officially distributed version. == Upgrade Notice == = 0.3.3 = Upgrade to this version for additional features, better user experience and improved plug-in stability. New requirements: minimum PHP 8.3 and minimum WordPress 7.0. = 0.3.2 = Upgrade to this version for additional features, better user experience and improved plug-in stability = 0.2.8 = Upgrade to this version for additional features, better user experience and improved plug-in stability = 0.2.7 = Upgrade to this version for additional features, better user experience and improved plug-in stability = 0.2.6 = Upgrade to this version for additional features, better user experience and improved plug-in stability = 0.2.5 = Upgrade to this version for additional features and improved plug-in stability = 0.2.4 = Upgrade to this version for additional features (including block editor integration) and improved plug-in stability = 0.2.3 = Upgrade to this version for additional features and improved plug-in stability = 0.2.2 = Upgrade to this version for improved security of the track and cache file storage directory = 0.2.1 = Please see here notes on updating to plug-in version 0.2.1: https://github.com/alexboia/WP-Trip-Summary/blob/master/README-UPDATE-021.md = 0.2.0 = This version fixes a plug-in activation issue under certain conditions and other minor bugs. = 0.2b = Use this version as the first officially distributed version.