Repository navigation
v2.0.4
Zen Cart 2.3.0 and 3.0.0 are now listed among the supported versions in the plugin's manifest. Version 2.0.3 was run on clean Zen Cart 2.3 and 3.0.0 test installs, on every PHP version each supports (8.2 through 8.5 on 2.3, 8.3 through 8.5 on 3.0.0): it installed and uninstalled cleanly, and the admin event list, its add and show-all views and the storefront events page all worked, signed in and out, with nothing logged. There are no code changes.
v2.0.3
Zen Cart 2.2.0 is now listed among the supported versions in the plugin's manifest, which skipped it while listing 2.2.1 through 2.2.3. The Plugin Manager does not use that list to decide whether to offer the install, so stores on 2.2.0 could already install and use the plugin; this corrects the record. There are no code changes.
v2.0.2
This release fixes faults that kept the plugin from installing on Zen Cart 2.0.x, from working on 2.1.x, and from upgrading. All were found on clean test installs of each Zen Cart version.
On Zen Cart 2.0.x the install failed with a fatal error and a blank page. The installer declared its upgrade step in a way 2.0.x does not accept, and it set up and removed its Configuration group with calls whose arguments differ on 2.0.x. Once installed, the storefront events page also failed with "Class EventzService not found", because 2.0.x looks for a plugin's storefront classes in a different folder. All of these now work on every supported version.
On Zen Cart 2.1.x the plugin installed, but Extras > Scheduled Events stopped with an "Undefined constant FILENAME_EVENTZ" fatal error. That name was only defined by a file Zen Cart loads from 2.2.0 on. It is now also defined where 2.0.x and 2.1.x load it.
Upgrading through the Plugin Manager failed with a database "Duplicate entry" error, after adding a second, empty Scheduled Events Configuration group. The upgrade now reuses the existing group and its menu entry, and it removes an empty duplicate group if an earlier upgrade attempt left one behind. Uninstalling removes any such duplicate too.
v2.0.1
This release is a security hardening pass, run before packaging rather than in response to a reported problem.
The admin page now refuses to run unless IS_ADMIN_FLAG is set. Reached normally, as admin/index.php?cmd=eventz, the bootstrap has already defined it, so the check costs nothing. It matters because the zc_plugins folder stays web-reachable wherever the shipped .htaccess isn't honored, which includes nginx, since it reads none at all, and Apache running under AllowOverride None. On those setups a direct request for the file previously produced a fatal error that disclosed the full server path.
The language directory used to build the fallback language-file include path is now constrained to a plain directory name, falling back to english if it is anything else. Zen Cart validates that value before this point, so it was not exploitable as shipped, but it was still a variable sitting in an include path.
Clicking an event in the scrolling sidebox now offsets its jump so the event heading is not hidden beneath a fixed or sticky navbar, such as the one in ZCA Bootstrap.
The readme now ships inside the plugin folder along with its screenshots, and its changelog link points at the right place.
Upgrading from v2.0.0 reconciles an existing installation rather than assuming its state. The active column is added if it is missing, the retired Sidebox Display Mode setting is removed, and the admin menu entry is re-registered so it lands under Extras even if it was previously under Catalog.
v2.0.0
Rebuilt as an encapsulated plugin, replacing the older non-encapsulated version of Scheduled Events. Requires Zen Cart 2.0.0 or later and is not compatible with earlier installations. Developed and tested against Zen Cart v2.2.2 and v2.2.3.
No core Zen Cart files are ever modified. Installing and uninstalling only touches this plugin's own database table, its configuration entries, and its admin menu registration.
The storefront page, reached as main_page=events, lists every event whose display window currently qualifies. Each one shows its name as a heading, followed by place, start and stop dates, and any comments, booth location, event information, and driving directions. A horizontal rule separates consecutive events, and none appears when only one event is listed. When nothing qualifies, the page shows a configurable message naming the current date window.
Booth Location and Event Information are each a plain-text description with a separate, optional URL. The description becomes a link only when a valid URL is given, and otherwise displays as plain text, so the store owner never has to author HTML or worry about a bad link breaking the page.
That URL accepts a full external address or a path to an asset already on the store, such as /images/mapName.jpg, so a locally hosted map image does not require an absolute URL. Any common image format works, including JPG, PNG, GIF, WebP and SVG, since this is only a link rather than a processed product image.
Two things are worth knowing about those images. WebP is known to convert slowly through Zen Cart's Image Manager on stores running Image Handler 5, and images are displayed exactly as uploaded with no resizing, so size and optimize them beforehand.
Driving Directions accepts a plain address or URL, which opens Google Maps in a new tab, or a Google Maps "Embed a map" iframe code, which instead opens as a self-contained pop-up over the page. The pop-up needs no page navigation, goes full-screen on phones and tablets, and closes with its X button, a click outside, or the Escape key. The embedded map is lazy-loaded and never fetched unless a visitor actually opens it.
A link to the events page is always added into the current template's Information sidebox. It uses the same classes that responsive_classic and ZCA Bootstrap already use for their own sidebox links and cards, so a template color or theme customization flows through to it automatically. The events page itself uses this plugin's own stylesheet instead, and so does not follow template theme customizations the same way.
Enabling the Additional Bootstrap Sidebox, found under Configuration and off by default, adds a second, separate promotional listing alongside that link. It is the plugin's own auto-scrolling carousel box, placed through Design and the Layout Boxes Controller. It is intended only for Bootstrap-based templates and has no effect on others.
Because Bootstrap-based templates typically hide the entire sidebar column on phones and tablets, that additional sidebox relocates itself into the main content area as a full-width block below that breakpoint rather than disappearing, then moves back to the sidebar on larger screens. No configuration is needed.
The two listings link slightly differently, by design. The Information sidebox link opens the events page at the top, while clicking an event in the carousel jumps straight to that specific event further down the page.
A master Enable Scheduled Events Display switch can fully hide the storefront page and all of its promotion at any time, without uninstalling.
Events are managed from Extras, under Scheduled Events, which handles adding, editing and deleting, with required-field markers, a sort-order dropdown for the list, and a Help button linking to the plugin's GitHub repository. The add and edit form uses the same field, value and description layout as Zen Cart's own Configuration screen.
Each event also carries an Active setting, so it can be paused without being deleted and without changing its dates. A paused event disappears from the storefront page and every sidebox. The admin list shows active events only by default, with a Show All link that reveals paused ones, dimmed and marked with a Status column, for editing or reactivation.
The configuration group under Configuration covers the page heading, all field labels, the no-events message and its follow-up line, the 30, 60 or 90-day display window, the Additional Bootstrap Sidebox settings, and the master enable and disable switch.