Table of Contents
- 6.0.0
- 5.7.8
- 5.7.7
- 5.7.6
- 5.7.5
- 5.7.4
- 5.7.3
- 5.7.2
- 5.7.0
- 5.6.0
- 5.5.1
- 5.5.0
- 5.4.11
- 5.4.10
- 5.4.9
- 5.4.8
- 5.4.6
- 5.4.5
- 5.4.4
- 5.4.3
- 5.4.2
- 5.4.1
- 5.4.0
- 5.3.5
- 5.3.4
- 5.3.3
- 5.3.2
- 5.3.1
- 5.3.0
- 5.2.2
- 5.2.1
- 5.1.1
- 5.0.2
- 5.0.1
- 4.3.2
- 4.3.1
- 4.3.0
- 4.2.2
- 4.2.1
- 4.1.2
- 4.1.0
- 4.0.3
- 4.0.1
- 4.0.0
- 3.12.10
- 3.12.8
- 3.12.6
- 3.12.4
- 3.12.2
- 3.12.0
- 3.11.22
- 3.11.20
- 3.11.18
- 3.11.16
- 3.11.14
- 3.11.12
- 3.11.10
- 3.11.8
- 3.11.6
- 3.11.4
- 3.11.2
- 3.11.00
- 3.10.24
- 3.10.22
- 3.10.20
- 3.10.14
- 3.10.12
- 3.10.10
- 3.10.8
- 3.10.6
- 3.10.4
- 3.10.2
- 3.10.0
- 3.9.6
- 3.9.4
- 3.9.2
- 3.9.0
- 3.8.2
- 3.8.0
- 3.7.10
- 3.7.8
- 3.7.6
- 3.7.4
- 3.7.2
- 3.7.0
- 3.6.4
- 3.6.1
- 3.5.5
- 3.5.4
- 3.5.3
- 3.5.2
- 3.5.1
- 3.5.0
- 3.4.5
- 3.4.4
- 3.4.3
- 3.4.2
- 3.4.1
- 3.4.0
- 3.3.3
- 3.3.2
- 3.3.1
- 3.3.0
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.6
- 3.1.5
- 3.1.4
- 3.1.2
- 3.1.0
- 3.0.8
- 3.0.7
- 3.0.6
- 3.0.5
- 3.0.3
- 3.0.1
- 3.0.0
- 2.6.8
- 2.6.7
- 2.6.5
- 2.6.4
- 2.6.3
- 2.6.2
- 2.6.1
- 2.6.0
Migration Hints
-
I removed the option to select Google Photos albums using the API. I described it back then here: https://www.svenbluege.de/blog/updates/217-oops-they-did-it-again-changes-to-the-google-photos-api-integration
If you have still such old events/albums/folders, they’ll get unpublished with this update. They do not work anymore anyhow. You can still use Google Photos via the shared Album links or upload images from your Google Photos collection using the Google Photos Picker.
-
The new promotion engine needs a small manual change to your order mail if you want to use it. Email templates live in the database and are never overwritten by an update, so your existing New Order template does not know about discounts yet. Without the change the mail still shows the correct total, but the discount row is missing, so the listed items and the total do not add up.
Go to → and edit the body of the new_order template. Add this block to the summary table right before the surcharge row:
{if isset($data->order->promotions)} {foreach $data->order->promotions as $promotion} <tr class="promotion"> <td> {$promotion->name} </td> <td> {$promotion->price} </td> </tr> {/foreach} {/if}There can be more than one discount because promotions may stack, which is why this is a loop rather than a single row. Besides
nameandpriceevery entry also offersdescriptionandcode.If you never customised your order mail, use the button in the toolbar of the template instead. It replaces subject and body with the shipped default, which already contains the promotion block. Be aware that this discards any change you made to that template.
-
The Ajax List layout distributes its thumbnails to pages on its own now, so the options Number of thumbs per page and Number of thumbs on first page are gone - globally and on every menu item which used that layout. Your stored values are simply ignored. What replaces them is a single option Maximum height of the thumbnail area, which defaults to 280px, roughly three rows of thumbnails at the default thumbnail size. Set it once if you want a taller or flatter thumbnail area; there is nothing else to migrate.
If you have a template override of
html/com_eventgallery/event/ajaxpaging.phpor of the snippet behind it, note that the markup changed: the template renders all thumbnails into a single.pageelement and the JavaScript splits them up. An override which builds the pages itself keeps rendering, but its pages get replaced on the first distribution. -
#1813 Links which carry an event password (
&password=…) do not open the gallery directly anymore. They land on the password page with the password prefilled, and the visitor has to submit the form once. If you handed such links to your customers they keep working, but they take one more click. See the Minor Changes section below for why. -
The password page of an Event now renders a captcha. If you have a template override of
html/com_eventgallery/password/default.phpand a captcha configured in Joomla, add the captcha to your override, otherwise nobody can pass that form anymore. Your override should also render the prefilled password, otherwise those links lose their value: addvalue="<?php echo $this→escape($this→password); ?>"to the password input. The shipped template does it like this:<?php IF ($this->form != false): ?> <?php foreach ($this->form->getFieldset('password') as $field): ?> <div class="control-group form-group"> <?php if (!$field->hidden): ?> <?php echo $field->label; ?> <?php endif; ?> <div class="controls"> <?php echo $field->input; ?> </div> </div> <?php endforeach; ?> <?php ENDIF; ?>Without a captcha configured in Joomla the block renders nothing, so an override which does not have it keeps working as before.
Major Changes
- Removed support for Google Photos via API. Google shut this down in 2025. You can still use the Google Photos Picker to copy images from Google Photos or use Shared Links to Google Photos albums.
-
New promotion engine. You can now create discounts which either apply automatically or are unlocked by a promotion code. A promotion reduces the price by a percentage or by a fixed amount, either on the whole cart or only on selected image types, and it can also cover the shipping costs. Condition rules decide when a promotion is active, from a simple cart value threshold up to composite rules like "the cart contains 5 images of image type A and 1 image of image type B". Promotions can be limited to a period of time and combined or kept exclusive via a priority.
A promotion can carry any number of codes, each with its own redemption limits. That is what makes personalized codes possible: set up the discount once, then paste one code per recipient into the bulk field and give every code a single redemption. The limits of the promotion itself still apply on top as the budget of the whole campaign.
-
#1806 New sharing option Send Image by eMail. The existing eMail sharing only puts a link into the mail. The new option sends the image itself, embedded into the mail, so the recipient sees the picture right away and does not have to follow a link. It uses the same image size the download uses: if → → → allows the visitor to get the original image, the original goes out, otherwise the largest thumbnail does.
Like every other sharing option you can switch it on globally in → → and turn it off per Event. The visitor gets a small form asking for the recipient address, optionally a name, a reply address and a message. It uses the captcha you configured in Joomla, so leave the captcha empty and there is none. Since images can be large, → → → defines an upper limit. Larger originals are sent as the largest thumbnail instead, and if even that is too big the visitor is asked to use the download.
The mail itself is a new email template named Shared Image, so you can change subject and text in → like any other mail. Every sent image shows up in the download log with the type eMail (large image) or eMail (original image).
-
#842 The Ajax List distributes its thumbnails on its own. The layout no longer assigns a fixed number of thumbnails to each page. It measures how many fit into a row at the current window width and fills up as many rows as the new option → → → allows. Every page is filled completely, only the last one holds the remainder.
That means a narrow window gets more pages instead of more rows, which keeps the thumbnail area from pushing the main image off the screen on a phone. Resizing the browser window redistributes the thumbnails and rebuilds the paging bar right away, and the image the visitor is looking at stays selected and is followed to its new page.
The thumbnails are laid out as a proper grid now: the columns line up across all rows, the remaining space is spread evenly between them, and the last row starts on the left instead of being spread across the full width.
The intro content on the first page is kept. It counts towards the maximum height, so the first page automatically holds fewer thumbnails - which is what the old Number of thumbs on first page option used to do by hand.
Thumbnails of the Ajax List are cropped to the square the Height of the thumbnails option asks for instead of being squeezed into it. The delivered thumbnail keeps the proportions of the original, so a wide image used to end up visibly distorted - the more so the larger the configured thumbnail size was.
The main image of the Ajax List got a stage of its own. Its height now follows the width of the gallery and the viewport instead of the aspect ratio of the image inside it. The image is fitted into that stage without being cropped or distorted, and the space a portrait image leaves next to it is filled with a blurred copy of the same image instead of an empty box.
-
#1809 New menu item type Event Access. It shows a landing page with a single password field. The visitor enters the password of a password-protected Event and lands directly in that gallery. Photographers can hand out one link plus a password instead of a personal link per customer.
The page never opens an Event the visitor could not see anyway, so unpublished Events and Events restricted to a user group stay out of reach. Should one password belong to several Events, all of them are unlocked and the visitor picks one from a short list.
The menu item has an Instructions option: a multilingual text which replaces the generic sentence above the password field, so you can tell your customers where their password came from or whom to ask for it. It accepts HTML, so a link to your contact page works too.
Since this page lets anybody try passwords against every Event of the site, it uses the captcha you configured in Joomla and allows ten wrong passwords per hour. The limit counts per session and per IP address, so dropping the cookies does not reset it. Only a hash of the IP is stored, never the address itself.
Minor Changes
- #1722 Sorting Events in the Joomla backend takes the ordering asc/desc for moving the Events into the right direction into account. Moving items up/down will now also use your current filter so you can sort items as expected even if there are filtered out Events in between.
- #1704 Improve the layout of the password page for events to make its appeal more modern.
- #1763 Adding Joomla 7 support by removing deprecated code and adjusting to modern coding standards.
- Extended the FAQ with the steps to switch from on-demand rendering to pre-rendered images.
- #1807 Switching between on-demand and pre-rendered images does not require deleting htaccess/webconfig files anymore.
- #1808 The backend is full of tabs for different config options. The last open tab will re-open after hitting the save-button.
-
#1810, #1813 The password page of an Event uses the same brute force protection and the same captcha. Until now a wrong password only added a five second delay after ten tries, kept in the session, which a bot could reset by dropping its cookies - and which tied up a PHP process for every attempt. Now the attempts are counted per session and per IP address, and once the budget is used up even the right password is refused for an hour. Both password pages share one budget.
Links which carry the password, like
index.php?option=com_eventgallery&view=event&folder=wedding&password=secret, keep working, but they no longer open the gallery straight away. They now land on the password page with the password already filled in, and the visitor submits the form. That one request is the only one which unlocks anything, and it is the one which passes the captcha and the attempt limit.Letting a GET request unlock a gallery meant that everything which follows a link - a crawler, the link preview of a chat app, a virus scanner in a mail client - unlocked it too, and that an attacker could try passwords without ever meeting the captcha.
If your site sits behind a proxy or a CDN, switch → → → on. Joomla then reads the real visitor address instead of the address of the proxy, which every visitor would otherwise share.
-
#1812 The Track my Order page got the same brute force protection. Order numbers are handed out one after the other, so the email address was the only thing somebody had to guess to see the address, the phone number and the download links of an order. Failed lookups are now counted per session and per IP address, ten per hour. The two forms use separate budgets, so guessing order numbers does not lock anybody out of a protected Event.
The tracking links in your order mails are not affected: they carry the right order number and email address, and only failed lookups count.
-
#1814 Email templates are rendered under a security policy now. A template may use placeholders,
{if},{foreach}and the usual modifiers likeupper,truncateordate_formatexactly as before, but it can no longer call a static method of a PHP class, read a file of the server with{include file="…"}, or look at$_SERVER,$_ENVand PHP constants. Editing an email template only asks for the Edit permission of Event Gallery, which is a lot less than a Super User, and without the policy such a template was able to run code on the server. Every shipped template is unaffected. Should a template of yours use one of the blocked constructs it now reports an error instead of rendering. -
#1815 Payments are better verified before an order counts as paid. Stripe now checks that the checkout session really was paid and that it was paid in the amount and the currency of the order, and PayPal checks that the money went to the configured receiver account and matches the amount and currency of the order. A payment which does not match leaves the order waiting for payment and writes the reason into the plugin log, so look there if an order stays unpaid unexpectedly.
The PayPal payment now also carries the order number inside the message PayPal signs, instead of only in the notification address. Payments which were already started before the update still work; they take the old route and say so in the log.
If you use the deprecated PayPal Adaptive Payments plugin, please read its log after the first payment. PayPal shut that API down, so its notifications could not be tried against a real payment - the plugin now refuses anything it cannot check rather than assuming it was paid. Consider switching to the ordinary PayPal plugin.
-
#1811 The token in the download links of an order now comes from the cryptographic random source instead of
uniqid().uniqid()is mostly the current time, which made the tokens of orders placed around the same moment similar enough to be worth guessing. Links which are already out in your customers' mailboxes keep working - only orders placed from this version on get the new token.
Big Fixes
- #1738 Videos are not displayed in the lightbox if they are inserted with the content plugin in thumbnail mode.
- #1802 Fixes an exception while adding new tags to Events using the batch tool.