Customer Cloud Gallery – Google Drive & Dropbox Image Gallery

説明

Tired of subscribing to yet another photo service just to share galleries with your clients? Customer Cloud Gallery lets you deliver beautiful client photo galleries straight from your own Google Drive or Dropbox — on your own WordPress site, with no extra monthly fees.

Connect the Drive or Dropbox folder you already use, add the “Cloud Gallery” block (or the Elementor widget, or a shortcode), and you get a fast, mobile-friendly gallery with downloads, favorites and optional password protection. Your originals stay in the cloud; the plugin streams thumbnails and full-resolution files on demand — so your site stays fast, your hosting disk stays empty, and there are no monthly gallery-hosting fees and no per-gallery limits.

Who it’s for

  • Photographers delivering client work — wedding, portrait, family, event, newborn, real-estate and product photography
  • Studios & agencies that want galleries on their own domain and brand
  • Schools, clubs & teams sharing event photos with parents and members
  • Anyone who already keeps photos in Google Drive or Dropbox

What you get (Free)

  • Google Drive and Dropbox — connect one or both; pick the folder per gallery
  • Folder picker — set your main folder once, then choose each gallery’s subfolder from a dropdown (no more copying folder URLs)
  • Block editor & Elementor — insert the “Cloud Gallery” block or Elementor widget and pick your gallery from a list with a live preview; the shortcode still works in any other builder
  • Fast lazy-loading grid with full-screen lightbox, keyboard navigation and mobile swipe
  • Videos — MP4 films from the same folder play right in the lightbox, streamed in pieces so even large files start within seconds
  • Client favorites — visitors heart their picks and filter to just those
  • Downloads done right — single originals, a whole-gallery ZIP, or a visitor’s hand-picked selection as one streaming ZIP (multi-GB galleries work)
  • Optional password protection for client-only delivery — or keep it public
  • GDPR-ready cookie control — master on/off switch per gallery; visitors can clear their cookie
  • Design options — accent, hover and border colours
  • Works with any theme and builder — block, Elementor widget or shortcode, no template editing

Your files never touch our servers — Drive/Dropbox are accessed with your own OAuth credentials (see “External Services” below).

Earn money with Pro

Don’t just save on fees — earn real money from your galleries. The Pro print shop lets your clients order professional prints right inside their gallery: you set the formats, paper types, prices and shipping, and orders arrive by e-mail with payment via PayPal or SEPA bank transfer. No marketplace commission, no card-processing setup.

Pro also adds:

  • Print shop — clients order prints directly from each gallery, with full order management (New Confirmed Shipped)
  • Title image — a cover photo from the folder or your media library above the grid, with the gallery title and a subtitle on it, adjustable height, soft gradient and an edge-to-edge option
  • Create galleries from the editor — in the block or the Elementor widget, pick a subfolder of your main folder and the gallery is created on the spot
  • Automatic galleries (watch folder) — new subfolders in your main folder become galleries automatically; a notice in the gallery list tells you what was created
  • A page for every automatic gallery — the watch folder clones a template page for each new gallery, with the block, Elementor widget or shortcode already pointed at it
  • Chapters — subfolders of the gallery folder become sections with headings and a jump navigation
  • Layouts — masonry, square grid or filmstrip besides the justified rows, plus spacing and corner radius per gallery
  • Hover, captions & lightbox — hover effect of your choice, file-name captions, light or dark lightbox with a thumbnail strip
  • Watermark on previews — your logo on every preview; downloads stay clean
  • Statistics dashboard — visitors, favorites and downloads over time, the most-loved photos, and who picked what — for all galleries and per gallery
  • CSV export of client favourite selections — ideal for prepping an album or print run
  • Priority support

The Free plugin above is complete and fully functional on its own — Pro adds the print shop, design and automation features, statistics and exports.

Get the most out of it

  1. Keep one Drive/Dropbox folder per client or event — the gallery mirrors it.
  2. Create a gallery, password-protect the page, and send your client the link.
  3. Switch on the Pro print shop to take print orders automatically.

Why cloud storage?

Uploading full-resolution galleries to your web server is slow, wastes disk quota, and makes migration painful. With Customer Cloud Gallery the originals stay in Drive or Dropbox — the plugin fetches thumbnails on first request, caches them locally, and streams originals on demand. Server load is minimal even for 4K RAW previews.

Security

  • OAuth tokens are stored AES-256-CBC encrypted using WordPress’s AUTH_KEY
  • Per-gallery access keys prevent cross-gallery file access (IDOR protection); they are bound to the page the gallery is on and expire after 30–60 days, and gallery data, videos and downloads check that page’s password on every request
  • All file-serving endpoints verify that the requested file actually belongs to the requested gallery
  • Cache directory blocks PHP execution and directory listing via .htaccess
  • Visitor cookies are httponly + SameSite=Lax

External Services

This plugin connects to third-party services to deliver its core functionality. The connections are listed here so you can include them in your site’s privacy policy.

Google Drive API

Used only when the site administrator connects a Google Drive account in the plugin settings. The plugin uses OAuth 2.0 credentials that you generate yourself in your own Google Cloud Console — your data never passes through any server operated by the plugin author.

What is sent: OAuth tokens, folder IDs and file IDs that you choose to display. When a visitor views a gallery, their browser loads preview images and videos directly from Google’s servers, which receive the visitor’s IP address. With “Load previews and videos through this website” (Settings Advanced Privacy) switched on — the default on new installations — everything goes through your server instead and visitors’ browsers never contact Google.
When: whenever a gallery is viewed or downloaded, when an admin browses folders, and on a scheduled cron to refresh thumbnail caches.

  • Service URLs: https://www.googleapis.com/drive/v3/ (files), https://oauth2.googleapis.com/ (sign-in, token refresh), https://*.googleusercontent.com/ (preview images and videos)
  • Terms of Service: https://policies.google.com/terms
  • Privacy Policy: https://policies.google.com/privacy

Dropbox API

Used only when the site administrator connects a Dropbox account in the plugin settings. Uses an OAuth app you register in your own Dropbox developer account.

What is sent: OAuth tokens, folder paths and file IDs that you choose to display. Preview images always come from your server. Videos play in the visitor’s browser from a temporary Dropbox link, which gives Dropbox the visitor’s IP address — unless “Load previews and videos through this website” (Settings Advanced Privacy) is switched on.
When: whenever a gallery is viewed or downloaded, when an admin browses folders, and on a scheduled cron to refresh thumbnail caches.

  • Service URLs: https://api.dropboxapi.com/ and https://content.dropboxapi.com/ (files, sign-in), https://*.dropboxusercontent.com/ (video playback)
  • Terms of Service: https://www.dropbox.com/terms
  • Privacy Policy: https://www.dropbox.com/privacy

Freemius

The plugin uses the Freemius SDK to deliver license management for the optional Pro upgrade. Freemius is contacted only after the site administrator explicitly opts in during plugin activation. If you skip the opt-in, no data is sent to Freemius and the Free version remains fully functional.

What is sent (only after opt-in): site URL, WordPress version, PHP version, plugin version, an anonymized site identifier and — if a Pro license is activated — the license key for validation.

  • Service URL: https://api.freemius.com/
  • Terms of Service: https://freemius.com/terms/
  • Privacy Policy: https://freemius.com/privacy/

Privacy Policy

Customer Cloud Gallery stores the following data in your WordPress database:

Visitor cookie (all visitors)
A random visitor ID is generated server-side on the first gallery visit and stored in a browser cookie. The cookie name is wpg_visitor (the legacy name is kept since 1.12.1 so existing visitor favourites remain attached to the correct cookie after the prefix-rename migration; everything else uses the new ccgal_ prefix). The cookie is valid for 365 days. Its value is a random hexadecimal identifier with no relationship to any real-world identity, and is stored as-is in the database — there is no name, e-mail address, or plain-text IP address recorded against it.

Favourites
When a visitor hearts an image, the random visitor ID, the gallery ID, and the cloud file ID are stored in the wp_ccgal_favorites table. No personal data is included.

Download tracking (Pro, if the statistics module is enabled per gallery)
When the Pro statistics module is loaded and enabled per gallery, downloads are recorded in wp_ccgal_downloads: random visitor ID, gallery ID, file ID, download type, and a salted SHA-256 hash of the visitor’s IP address. The original IP address is never persisted — only the one-way hash, salted with the site’s AUTH_SALT. The Free plugin never writes to this table.

Page-view tracking (Pro, if the statistics module is enabled per gallery)
When the Pro statistics module is loaded and the per-gallery statistics sub-switch is on, page and image views are recorded in wp_ccgal_views: random visitor ID, gallery ID, file ID, salted IP-hash and timestamp. The Free plugin never writes to this table.

Print orders (Pro, if the print shop is enabled)
Stores the customer’s name, shipping address, e-mail address, optional phone number, optional message and the ordered items in wp_ccgal_orders and wp_ccgal_order_items. This data is necessary to fulfil the order and is retained until the site administrator deletes the order.

Personal data export & erasure (WP Privacy Tool)
The plugin integrates with the standard Tools Export Personal Data and Tools Erase Personal Data workflows. Print orders (Pro) are returned/erased by customer e-mail. Anonymous gallery favorites are, by design, not linkable to an e-mail address; the response message will note this explicitly so the requester knows their cookie-based records cannot be associated with their identity.

Data deletion
In addition to the WP Privacy Tool above, site administrators with the Pro statistics module can delete all tracking data for a specific visitor from the Statistics dashboard. Removing the plugin via Plugins Delete erases all options, custom tables, gallery posts, and the thumbnail cache.

Suggested privacy policy text
The plugin contributes a ready-made privacy policy paragraph to Settings Privacy Policy Guide that you can copy into your public privacy page. It follows the privacy setting below.

Connections from the visitor’s browser
With Settings Advanced Privacy Load previews and videos through this website switched on (the default on new installations), visitors’ browsers only connect to your site. With it off, a visitor’s browser loads Google Drive preview images and videos directly from Google’s servers (googleusercontent.com) and Dropbox videos from Dropbox’s servers (dropboxusercontent.com); these providers receive the visitor’s IP address and browser information. Cloud API calls always use the site administrator’s OAuth credentials — visitor sessions are never used for them.

Photographer’s responsibility
If you use this plugin on your site you are the data controller for your visitors’ data. You should inform your visitors about the visitor cookie in your site’s privacy policy and, where required, obtain consent before enabling statistics tracking (Pro module only).

スクリーンショット

ブロック

このプラグインは1個のブロックを提供します。

  • Cloud Gallery A photo gallery served from a Google Drive or Dropbox folder — with lightbox, favorites and downloads.

インストール

  1. Upload the customer-cloud-gallery folder to /wp-content/plugins/ or install via Plugins Add New Upload Plugin.
  2. Activate the plugin.
  3. Go to Customer Cloud Gallery Settings and connect Google Drive or Dropbox (step-by-step OAuth wizard included).
  4. Create your first gallery under Customer Cloud Gallery Add New.
  5. Add the gallery to a page: insert the Cloud Gallery block or the Elementor widget and pick the gallery from the list — or paste the shortcode from the gallery editor (e.g. [ccgal_gallery id="42"]).
  6. Set a page password under Page Visibility Password protected to restrict access.

Minimum Requirements

  • WordPress 6.2 or higher
  • PHP 7.4 or higher (8.1+ recommended)
  • PHP extensions: openssl, gd or imagick
  • Google Drive API credentials or a Dropbox app (free developer accounts work)

FAQ

Do my photos get uploaded to your servers?

No. Photos stay in your Google Drive or Dropbox account. The plugin only fetches thumbnails (cached locally for performance) and streams originals on demand. No image data is sent to any third-party or plugin-developer server.

Do I need a Google account or a Dropbox account?

Yes — at least one. You create a free OAuth app in Google Cloud Console or Dropbox App Console (both free) and paste the credentials into the plugin settings. A step-by-step guide is included.

Can I use both Google Drive and Dropbox at the same time?

Yes. Connect both and choose the storage provider per gallery.

Does it work with any WordPress theme?

Yes. The gallery renders self-contained — as a block, an Elementor widget or a shortcode — and does not depend on theme templates or scripts.

Does the gallery work with page caching?

Yes. Each gallery uses its own access key instead of an expiring WordPress nonce. The key is bound to the page the gallery is on and renews every 30 days, so a cached gallery page keeps loading photos and downloads for weeks; if a cache keeps a page even longer, the gallery reloads itself once. Gallery data is never stored by page caches. Password-protected pages stay protected: the gallery’s photo list, videos and downloads check the page password on every request, so a copied gallery link does not work without it. Preview images the plugin has already cached on your server are plain files with long, random names; a copied preview address keeps working while the gallery is published. When you unpublish, trash or delete a gallery, the plugin deletes its cached previews. Do that before you move or delete the gallery’s cloud folder: the plugin reads the folder to find all of them.

Can I import existing Drive or Dropbox folders?

Yes. Set your main folder once and pick each gallery’s subfolder from a dropdown — or paste any folder URL or folder ID. The plugin reads the folder contents via the cloud API.

Can I show videos?

Yes. Videos in the gallery folder appear in the grid with a play icon and play in the lightbox. MP4 files with H.264 video and AAC audio play in every modern browser; for other formats the lightbox shows a short note, with a download button when downloads are allowed. Very large camera originals (4K at high bitrates) can stutter — export a delivery version for your clients. The watermark applies to preview images, not to the videos themselves. Per gallery you decide whether videos are included in “Download all”; single downloads and selections always include them. With downloads switched off, the player shows no download button and no “Save video as” menu — the browser still streams the file, so this stops casual saving, not a determined copy.

Does the print-order shop handle payment processing?

No direct card processing. Orders are sent by e-mail; payment is collected via PayPal.me link or SEPA bank transfer details that you configure. This keeps the plugin PCI-DSS-free.

Is this plugin GDPR compliant?

The Free plugin stores only a random visitor cookie ID, used to remember a visitor’s favourites between page loads. No e-mail address, no IP address in plain text. A cookie-control switch per gallery lets visitors opt out entirely. On new installations, “Load previews and videos through this website” (Settings Advanced Privacy) is on, so visitors’ browsers only connect to your site. With it off, Google Drive previews and videos load straight from Google’s or Dropbox’s servers, which see the visitor’s IP address. The plugin adds a matching text to WordPress’s privacy policy guide (Settings Privacy). See the External Services section for details.

評価

2026年7月16日
We were looking for a plugin that would let us use images in dropbox folders as client galleries on our websites. A quick google found this plugin and it just worked! The images load quickly and it has the appearance of a native gallery – but without the storage overhead.The support is prompt and detailed – and they are open to listening to feature requests and other suggestions.Looking forward to seeing how this plugin grows!
1件のレビューをすべて表示

貢献者と開発者

Customer Cloud Gallery – Google Drive & Dropbox Image Gallery はオープンソースソフトウェアです。以下の人々がこのプラグインに貢献しています。

貢献者

“Customer Cloud Gallery – Google Drive & Dropbox Image Gallery” をあなたの言語に翻訳しましょう。

開発に興味がありますか ?

コードを閲覧するか、SVN リポジトリをチェックするか、開発ログを RSS で購読してみてください。

変更履歴

1.17.1

  • Improved (Pro): statistics dashboard — “Most popular photos” now has one row per list (favorites, views, downloads and, with the print shop, ordered prints), in rank order with the count written under each photo. Each row switches between the top 10, 50 and 100.
  • Improved (Pro): “Latest activity” shows small previews of the photos involved and is as tall as the chart next to it; longer lists scroll inside the card. A click opens the photos large right away, and with the privacy switch off, Google Drive previews in the dashboard load straight from Google, as in the gallery.
  • Improved (Pro): an expanded visitor shows three tabs — favorites, downloads (including whole-gallery and selection ZIPs) and the photos they opened most often.
  • Fixed: files with the same name could end up twice under one name in a download — for example “Foto.jpg” twice next to a “Foto_1.jpg” — and one photo overwrote the other when unzipping. Every file now gets its own name, also when names differ only in upper and lower case.
  • Fixed: when the server-side ZIP (the fallback for old browsers) could not load a file from the cloud, the file was left out without a word. The ZIP now contains a “MISSING FILES.txt” that lists them, and the statistics only count files that were actually included.
  • Fixed: the shortcode option per_page, for example [ccgal_gallery id=”123″ per_page=”10″], had no effect; the gallery always loaded its own setting.
  • Improved: when you unpublish, trash or delete a gallery, the preview images cached on your server for its photos are deleted too, so a copied preview address stops working. While a gallery is not published, its editors still see previews in the dashboard, but they are no longer stored under a public address.
  • Fixed (Pro): in galleries with chapters that load more photos while scrolling, the chapters stayed empty when the main folder fit into the first batch; with more photos, the first ones appeared twice.
  • Fixed: the daily clean-up of cached preview images could stop running, for example after switching between the free and the Pro version. It is now rescheduled automatically.
  • Fixed: in the folder download (Chrome and Edge save the photos straight into a folder), a photo that could not be loaded left an empty file with its name behind; it is now removed. A download in which no photo arrived no longer counts in the statistics.

1.17.0

  • New: videos. Videos in the gallery folder appear in the grid with a play icon and play in the lightbox. Large files start within seconds: the plugin streams them in pieces instead of loading the whole file first, so seeking works too. Google Drive videos get a poster frame; Dropbox videos show a dark tile.
  • New: per gallery you choose whether videos are included in “Download all” — off by default, because a film can be several gigabytes. Single downloads and hand-picked selections always include them.
  • New: a video the browser cannot play (for example HEVC without codec, MKV or AVI) shows a short note instead of a black player, with a download button when downloads are allowed.
  • Fixed: with the free version installed while a Pro license is active, the gallery no longer shows the “Order prints from selection” button of the print shop, which is not part of the free version.
  • New (Pro): statistics dashboard. One overview for all galleries with time ranges, visitors, views, favorites and downloads compared with the previous period, an activity chart and a feed of what your clients did last. Each gallery gets its own page: the most-loved photos as a podium, a compact visitor list with each visitor’s favorites, “copy file names” for Lightroom, a CSV per visitor, and reset. A small widget on the WordPress dashboard shows the last 7 days.
  • New (Pro): Settings Statistics turns statistics on automatically for new galleries.
  • Improved (Pro): your own visits, downloads and favorites no longer count in the statistics while you are logged in as someone who can edit the gallery.
  • Fixed (Pro): a new visitor no longer counts twice, and a “Download all” in the browser counts each file once instead of twice. The comparison with the previous period reappears once that period lies entirely after the update.
  • Fixed (Pro): print orders are limited per visitor and per email address; before, the limit could be bypassed, so a form script could send any number of order emails. One order now holds up to 150 photos, and the gallery says so when more are selected — before, the order page silently dropped everything after the first 50. The order CSV no longer lets spreadsheet formulas from customer fields run in Excel.
  • New: privacy switch. Settings Advanced Privacy “Load previews and videos through this website”: visitors’ browsers then only connect to your site, never to Google or Dropbox. On for new installations; existing sites keep their current behaviour until you switch it on. The suggested privacy policy text follows the setting.
  • Improved: the settings are split into tabs — cloud storage, design, texts and advanced.
  • Improved (Pro): simpler menu — All galleries, New gallery, Dashboard, Print shop (orders and print settings as tabs, with the number of new orders) and Settings with an extra Statistics tab. The gallery list shows one Activity column instead of three number columns.
  • Improved: “Download all” works for archives over 4 GB and for large videos. Files from 256 MB are streamed instead of being loaded into memory, a dropped connection resumes, and macOS Archive Utility opens the archives.
  • Improved: when the cloud cannot be reached, visitors see a neutral message instead of the raw Drive or Dropbox error.
  • Fixed: galleries behind a page cache stopped loading photos after 12–24 hours. Galleries now use an access key bound to their page and renewed every 30 days instead of an expiring nonce; the photo list, videos and downloads check the page password on every request, and gallery data is never stored by page caches (LiteSpeed Cache stores REST answers by default).
  • Fixed (Pro): the print order page only opens from the gallery. Before, anyone who knew a gallery ID could get its photo list there, even for a password-protected gallery.
  • Fixed (Pro): the statistics compared the site’s local time with the database clock, so depending on the time zone repeat views were counted twice or real visits were missed.
  • Fixed (Pro): “Order prints” stays off while only videos are selected, quantities are capped at 99 on the page and on the server, the print page shows a short note instead of the raw shortcode when Pro is not active, and it no longer shows Drive previews without the watermark.
  • Fixed: with downloads switched off, the video player no longer offers “Save video as” in its right-click menu.

1.16.1

  • Fixed: the “Pay now via PayPal” button in the order confirmation email now works when a PayPal email address is set in the print shop settings (not only a PayPal.Me name), and it passes the shop currency.
  • Fixed: toolbar buttons that should be hidden (“Load more”, “Download favorites”, “Download selection”, “Clear selection”) stayed visible without any function.
  • Fixed: a gallery inside a tab or accordion that is closed when the page loads (Elementor and other page builders) now lays out as soon as it is opened.
  • Fixed: clicking “Show favorites only” while images were still loading no longer leaves the view incomplete.
  • Fixed: umlauts and other non-ASCII characters in the gallery title are kept in the ZIP file name.
  • Fixed: in folders with more than 20,000 images, the images beyond that could not be opened or downloaded.
  • Improved: the lightbox opens with the keyboard (Enter or Space on an image). Focus stays inside the lightbox and returns to the image when it closes.

1.16.0

  • New (Pro): layouts. Besides the justified rows, a gallery can now use a masonry grid, a square grid or a filmstrip that scrolls sideways — plus spacing between the images (0 px for a seamless mosaic) and a corner radius, all per gallery in the editor.
  • New (Pro): hover effect (zoom, darken or none), file-name captions on hover or always, and a light or dark lightbox with an optional thumbnail strip for quick navigation — per gallery in the editor.
  • New (Pro): watermark. Put your logo on every preview — grid and lightbox — with position, size and opacity of your choice. Downloads stay clean: they stream the original file, never the watermarked preview.
  • New (Pro): chapters. Turn it on in the gallery editor and every subfolder of the gallery folder becomes its own section with a heading — “Getting ready”, “Ceremony”, “Party” — with a jump navigation above the grid. Photos in the folder itself come first; a leading number in a folder name (“01 …”) sets the order and is not shown. Favorites, the lightbox and downloads work across all chapters, and “Download all” keeps the chapters as folders inside the ZIP.
  • New (Pro): the watch folder can now create a page for every new gallery as well — a copy of a template page of your choice, with its Cloud Gallery block, Elementor widget or shortcode pointed at the new gallery. Title and status follow the gallery (draft or published). The template’s password is deliberately not copied, so each client gets their own.
  • Fixed: single-image downloads pause while a ZIP download is running, with a short note — instead of silently breaking the running archive.
  • Fixed: no more “textdomain loaded too early” notice in the debug log after activating the plugin. The folder-watch cron schedule is now registered on init, and the print-order page is created on the first request after activation instead of inside the activation hook.
  • Fixed: after activation, the welcome redirect landed on the gallery list instead of the settings page (HTML-escaped redirect URL).

1.15.2

  • The box in the gallery sidebar is now called “Add to a page” and lists all three ways to show a gallery: the block, the Elementor widget and the shortcode. It used to be called “Shortcode”, which hid the block from exactly the people looking for a way around shortcodes.
  • New: a one-time pointer in the gallery list and in the gallery editor points at that box, so the block and the Elementor widget also reach people who dismissed the update notice.
  • Fixed: in the title image settings, a label could stay at the end of one line while its dropdown moved to the next.

1.15.1

  • Fixed: an “&”, an apostrophe or quotation marks in a gallery title were shown as HTML code — “Anna & Tom” appeared as “Anna & Tom”. This affected the preview card in the block editor, the title image above a gallery, the gallery pickers in the block and in the Elementor widget, the gallery list, the statistics dashboard, print-order emails and the order CSV export.
  • Fixed: the folder inside a bulk-download ZIP carried the same HTML code in its name.

1.15.0

  • New (Free): “Cloud Gallery” block for the block editor. Pick a gallery from a list; the editor shows a preview card with the first images, the page shows the full gallery. Wide and full alignment supported.
  • New (Free): Elementor widget “Cloud Gallery” with loading-mode and image-size overrides. Galleries initialise inside the Elementor editor preview.
  • New (Pro): create galleries from the editor. In the block and in the Elementor widget, choose a subfolder of your main folder and the gallery is created on the spot (title taken from the folder name, editable). An existing gallery for that folder is reused.
  • New (Pro): title image. Each gallery can show a cover photo above the grid — from the gallery folder or the media library — with the gallery title and a subtitle on it, adjustable height and image focus, a soft gradient or darkened overlay, at content width or edge to edge.
  • New: after the update, a one-time “What’s new” note on the plugin’s own admin pages lists the new features with a link to the documentation.
  • The gallery editor’s shortcode box now also points to the block and the Elementor widget.
  • New (Free): folder picker. Set a main folder once under Settings “Main folder”, then choose each gallery’s cloud folder from a dropdown in the gallery editor — no more copying folder URLs or typing paths. Works for Google Drive and Dropbox.
  • New (Pro): automatic galleries (“watch folder”). The plugin watches your main folder and creates a gallery for every new subfolder — title taken from the folder name, settings copied from a template gallery of your choice, created as draft (or published directly); a notice in the gallery list tells you what was created. Existing folders are only registered when you enable the feature, so nothing is created retroactively. Includes a “Scan now” button; opening the gallery list also triggers a check.
  • The new subfolder listing endpoint requires the manage-options capability (like the existing folder check), keeping private cloud folder names restricted to administrators.
  • New (Free): “Test connection” button on the settings page for each connected provider. It checks the whole chain step by step — access token, folder listing, a real image download and the thumbnail cache folder — and gives a plain-language hint for anything that fails (e.g. a Dropbox app missing the files.content.read permission, or “App folder” access instead of “Full Dropbox”).
  • New: Pro features are now shown greyed out with a “PRO” badge where they would live (print orders and visitor statistics in the gallery editor, automatic galleries in the settings), so it is clear what the upgrade adds. The free plugin is unchanged.
  • New: after two weeks of use with at least one published gallery, a small, dismissible note on the plugin’s own admin pages asks for a WordPress.org review — with “Maybe later” (30-day snooze) and “Don’t ask again”, remembered per user.
  • Freemius SDK updated to 2.13.4 (configurable API timeout, PHP deprecation fixes).
  • Fixed: ZIP download filenames no longer contain HTML entities when the gallery title has an apostrophe or special characters (e.g. “It’s_a_Madhouse.zip” is now “It’s_a_Madhouse.zip”).

1.13.5

  • Fixed: ZIP downloads finally open correctly in macOS Archive Utility. Root cause found by analysing an affected customer’s actual ZIP file: the archive’s end-of-file record declared the table of contents as 0 bytes long, so macOS found “no readable items” while more tolerant tools opened the same file fine. The size was read from a memory buffer after it had already been handed off to the download stream. Affected every streaming bulk download since 1.13.2, regardless of gallery size. Huge thanks to Chris Tess for the persistent testing that made this diagnosis possible.
  • Fixed: the server-side ZIP fallback (used for very large galleries when the browser download path is unavailable) now also writes each entry’s size and checksum before the data, making its archives readable by strict sequential extractors, and no longer declares ZIP64 for ordinary entries. Failed files are skipped cleanly instead of leaving a broken entry in the archive.

1.13.4

  • Fixed: ZIP downloads still could not be opened with the built-in Archive Utility on macOS (“the archive is empty or contains no readable items”), even after the fix in 1.13.3 — there were two separate causes and only the first one was addressed. Entries were marked as coming from a Unix system but carried no file type and no permissions, so macOS did not recognise anything readable inside. Every entry is now stored as a regular file with normal read permissions. Applies to all bulk downloads (all images, selection, favorites).

1.13.3

  • Fixed: ZIP downloads could not be opened with the built-in Archive Utility on macOS, which reported the archive as empty, while other tools (e.g. The Unarchiver) opened the same file correctly. Each entry’s size and checksum are now written directly into its local header instead of being appended after the data, so extractors that read the archive sequentially can open it. Affects all bulk downloads (all images, selection, favorites). Thanks to Chris Tess for the detailed report.

1.13.2

  • Bulk download: downloading a whole gallery (or a selection) now saves a regular ZIP file straight to your Downloads folder in every modern browser — no more folder-permission prompt in Chrome/Edge. The streaming download path (no memory limit, works for multi-GB galleries) was previously disabled by an overly strict internal check and never actually ran; Firefox and Safari were silently limited to in-memory ZIPs (max ~1.8 GB, iOS 500 MB) or the slow server fallback. The folder-picker mode remains available as an automatic fallback.

1.13.1

  • Bulk download (all / selection / favorites): a ZIP is no longer presented as “done” when files failed to download. If nothing could be retrieved the download is cancelled with a clear error instead of saving an empty ZIP, and partial results now report exactly how many of how many files are missing.
  • Bulk download: permanent errors (e.g. an expired security token) no longer cause three slow retries per file, so a broken download fails fast instead of slowly producing an empty archive. Added flow-control to the streaming-ZIP service worker to keep memory bounded on very large (multi-GB) downloads.
  • Security: the admin image/video preview endpoints and the folder-validation endpoint now require the “manage options” capability (previously “edit posts”), so lower-privileged users cannot probe the connected Drive/Dropbox account. Raw storage-provider error messages are no longer echoed to the browser (they are logged when WP_DEBUG is enabled).
  • Drive/Dropbox: a single visitor can no longer trigger repeated full folder re-listings by probing random file IDs (folder refresh is now rate-limited), protecting your cloud API quota; and a temporary API error no longer hides a real image for several minutes.
  • ZIP archives now carry the UTF-8 filename flag, so names with umlauts or accents (e.g. “Müller_001.jpg”) extract correctly in Windows Explorer.
  • Privacy / GDPR: personal-data export and erasure for print orders now depend on whether order data exists, not on the Pro licence state, so a downgraded site still fulfils data requests. The uninstaller now also removes the Pro statistics tables.
  • Performance (Pro): the statistics tables are no longer re-checked with dbDelta on every request, and a new composite index speeds up view de-duplication.
  • Frontend fixes: marking a favorite no longer flips the heart on a failed request; the lightbox no longer re-opens after being closed mid-load; the “show all favorites” view no longer retries endlessly on a network error; the images-per-batch setting is clamped to a sane range; the “Clear cache” button now also clears the cached folder listings.
  • Pro admin fixes: the inline statistics toggle no longer shows a green “saved” tick when the server rejected the change (e.g. with cookies disabled); the order-status dropdown reverts and warns if saving fails; paper-price-list rows no longer overwrite each other after a row is deleted; renaming a price-list key no longer silently detaches it from the formats that use it.
  • Additional stability fixes: stable visitor-table ordering, defensive guards on Dropbox API responses, and folder validation no longer overwriting text while you are still typing.
  • Image cache: thumbnails and previews are now downloaded to a temporary file first and moved into the cache atomically (both the direct-thumbnail and the resize fallback path). Previously a PHP process killed mid-download (timeout, traffic spike) could leave an empty or truncated image behind that was then served forever; such stale entries now heal themselves on the next request, and transfers that deliver fewer bytes than announced are detected and discarded.
  • Statistics (Pro): top-list entries whose file no longer exists in the connected cloud folder are labelled “No longer in the cloud folder” instead of opening an empty tab.

1.13.0

  • Security hardening: unpublished galleries (draft, private, pending, trashed) can no longer leak original files. The publish-status guard now covers the single-file, ZIP and manifest download endpoints as well as the batch, favorite, order and print-format REST routes. Logged-in editors with access to the gallery are unaffected.
  • Performance: per-gallery statistics are now memoized per request, cutting redundant database queries on the gallery list and detail pages; the cloud folder listing is cached in a short-lived transient so concurrent visitors and infinite-scroll requests collapse to a single Drive/Dropbox API call per page instead of one call per view.
  • Dropbox galleries now honour the gallery’s sort order and “images per page” setting: the Dropbox folder listing is sorted (natural name, name, or date — ascending/descending) and paginated consistently, so the grid order and the ZIP order match. This brings Dropbox in line with the existing Google Drive behaviour.
  • The bundled German (de_DE) translation loads again on self-hosted and Pro installations (the textdomain loader was restored on the init hook). Sites served a translation through WordPress.org language packs are unaffected; the language pack still takes precedence when present.
  • Fixes: Dropbox statistics detail-page thumbnails and full-size links now resolve correctly; the statistics fetch limit was raised from 30 to 50 with an honest item-count badge.
  • Pro statistics detail page UX refactor: the per-gallery statistics page is now collapsible and scales cleanly to galleries with thousands of images. Each of the four top-lists (Top Favorites, Top Viewed, Top Downloaded — single, Top Downloaded — selection) is wrapped in a native HTML5 <details> element with the item count visible in the header even when collapsed. Each section has a per-section limit dropdown (5/10/25/50/All, default 10). The visitor activity table now uses true pagination (25 per page default) so that galleries with hundreds of visitors no longer produce a 10,000-pixel-long scroll page.
  • Pro inline toggles in the gallery list (WP-Admin Customer Cloud Gallery All galleries): two new checkbox columns let you flip a gallery’s Statistics-tracking and Print-shop on or off without entering the gallery editor. Each checkbox saves via its own per-gallery-scoped AJAX endpoint with nonce + capability check; optimistic UI feedback, server-authoritative state correction, screen-reader friendly (each checkbox has an aria-label naming the gallery; the disabled-reason for Stats when cookies are off is reachable by keyboard). The Stats toggle correctly mirrors the existing master-cookies dependency — when cookies are off for a gallery, the Stats sub-switch is locked off too.
  • Pro stats “unique_visitors” consistency fix carried over from the 1.12.2 hotfix: the top-card counter now counts distinct cookies across all activity tables (views ∪ favorites ∪ downloads), matching the “Besucheraktivität” table below.
  • Pro stats deletion fix carried over from the 1.12.2 hotfix: “Reset tracking data” and per-visitor “Daten löschen” now also clear favorites in addition to views and downloads.

1.12.2

  • wp.org Plugin Directory review compliance (round 3):
  • cURL WordPress HTTP API: the four remaining cURL call sites in includes/class-dropbox-adapter.php (download_to_file, stream_to_output, download_thumbnail) and includes/class-google-drive-adapter.php (stream_to_output) have been fully ported to wp_remote_request() / wp_remote_get() with stream => true. File downloads write directly to disk via the WordPress HTTP API (no PHP memory buffering); the streaming-to-browser cases stream the response body to a WordPress temp file via wp_tempnam() and then echo it back in 64 KB chunks, with HTTP 206 Range support preserved by forwarding the Range header. The Dropbox content-type issue is solved by sending Content-Type: application/octet-stream, which Dropbox accepts on /files/download and /files/get_thumbnail_v2. The plugin no longer contains a single curl_*() or CURLOPT_* reference in its own code; only the Freemius licensing SDK in vendor/ still uses cURL, which the Plugin Review Team’s guidelines explicitly permit for third-party vendor libraries.
  • Plugin Assets handbook compliance: verified that no banner-*.{png,jpg}, icon-*.{png,jpg,svg}, screenshot-*.{png,jpg}, blueprints/ or header.png files exist in the plugin ZIP, and that all plugin-resource references use the dynamic functions plugins_url() / plugin_dir_path() / plugin_dir_url() (via the CCGAL_URL / CCGAL_DIR constants) rather than hardcoded /wp-content/plugins/... paths. Listing assets (banner, icon, screenshots) are prepared in the source repository under .wordpress-org/ for deployment to the SVN /assets/ root after approval — they are deliberately excluded from the plugin ZIP per the Plugin Assets handbook.
  • Video files in cloud folders are temporarily excluded from gallery listings (image files only). The in-browser video player and the related streaming endpoint are not exercised by visitors in 1.12.2. Video support will be re-introduced in a later release; existing video files in connected Drive/Dropbox folders are not touched, only hidden from the gallery output.
  • Pro statistics tracking improvements:
    • The JS-level state.viewedInLightbox Set in assets/js/gallery.js is now cleared when the lightbox closes, so a visitor who closes the lightbox and reopens the same image is counted as a new engagement (the server-side 10-minute dedup window still applies on top of this — see below).
    • $wpdb->insert() calls in record_view, record_image_view and record_download now log to error_log() if the insert fails (gated on WP_DEBUG), so future silent-skip failures are observable instead of being swallowed by a 200 OK response.
    • Server-side dedup windows are unchanged: 1 hour per (gallery, visitor) for page-loads, 10 minutes per (gallery, file, visitor) for lightbox image-opens. These are appropriate for both client-delivery galleries and public-page galleries (suppresses bot crawl + reload-spam without losing legitimate re-engagement).
  • Pro stats deletion fix (includes/class-dashboard__premium_only.php): the “Reset tracking data” button on the gallery detail page AND the per-visitor “Daten löschen” button now correctly delete favorites in addition to views and downloads. Previously the favorites table was untouched, so the UI promise (“Deletes all favorites, downloads and views”) was not honoured and the per-visitor delete looked like a no-op when the visitor had only favorited images and no other activity.
  • Pro stats “Eindeutige Besucher” consistency fix (includes/class-tracking__premium_only.php::get_gallery_stats): the top-card counter now counts distinct cookies across ALL activity tables (views ∪ favorites ∪ downloads), not just page-load views. Previously the counter only saw visitors who had a file_id IS NULL row, so visitors whose page-load was suppressed by the 1-hour dedup window or who arrived via a full-page cache (no PHP execution) — and only triggered AJAX-based image-views or downloads — were invisible to the top counter even though they correctly appeared in the “Besucheraktivität” table below. Both numbers now agree.

1.12.1

  • wp.org Plugin Directory review compliance (round 2):
  • Statistics module fully extracted from the Free build. The tracking class, stats tables, the stats sub-switch UI, the views/downloads admin columns, the view/image-view REST endpoints and all download-recording call sites have been removed from the Free codebase and consolidated into a single Pro-only file (class-tracking__premium_only.php). Free has zero stats footprint on disk; Pro hooks into the Free build via generic action/filter names (e.g. ccgal_download_completed, ccgal_gallery_deleted, ccgal_uninstall_tables) so the Free code stays decoupled.
  • Frontend JS Stats-Reste removed: the previous recordView()/recordImageView() functions and the trackBulkComplete() beacon are gone. The Free gallery.js now only dispatches generic ccgal:gallery-opened / ccgal:image-opened CustomEvents; the bulk-download helper calls a renamed notifyBulkCompleted ping to a ccgal_notify_bulk_complete AJAX endpoint. None of those reach a database table in Free.
  • Prefix refactor: every declared name (constants, classes, functions, hook names, option keys, post-meta keys, table names, AJAX/admin-post action slugs, CSS classes, custom properties, JS globals, script/style handles, REST namespace, custom HTTP header, cache directory and the gallery post-type slug) has been renamed to the 5-character ccgal_/CCGAL_/ccgal- prefix to comply with the wp.org “prefix must be over 4 characters” rule. The browser visitor cookie keeps its legacy name wpg_visitor so existing visitor favourites remain attached after the migration — the only intentional exception.
  • Database migration: an idempotent activation-time routine renames all WP options, post-meta keys, the gallery post type, the custom tables (favorites, orders, order_items + Pro: views, downloads), the leading-underscore _system_page meta marker, the daily cron event and the thumbnail cache directory. The routine excludes its own version-marker option from the bulk rename (so the guard can still be read on a re-activation if anything below crashes), extends set_time_limit(300) for large postmeta tables, and writes a transient admin notice if a RENAME TABLE fails (e.g. missing ALTER permission on shared hosting). Shortcodes in existing post_content are rewritten in place ([ccg_gallery], [hochzeitsgalerie], [customer_cloud_gallery] [ccgal_gallery]; same for the print variant). The migration guards against re-runs via the legacy/new db-version markers.
  • Security: the public AJAX endpoints ccgal_serve_image and ccgal_stream_video now require a gallery-scoped nonce (ccgal_gallery_<id>) issued by the gallery renderer, in addition to the existing file-in-folder check. Draft / private / trashed galleries are rejected on the public branch unless the caller has edit_post capability. $_SERVER['HTTP_RANGE'] is now unslashed and length-capped before the strict preg_match validator. $_COOKIE['wpg_visitor'] is now sanitized through a hex-only whitelist matching the generator. $_REQUEST['gallery'], $_REQUEST['count'] and the array-branch of $_REQUEST['files'] are now consistently wp_unslash()-ed before further sanitization. json_decode() of the _REQUEST['files'] payload runs with depth=4 so a JSON bomb cannot DoS the file-IDs parser.
  • The Plugin URI header has been removed from the main plugin file because the SSL certificate for the linked domain is not yet provisioned. The Author URI is unaffected.

1.12.0

  • Faster bulk-download for the “Download all images” button. The button now picks the best path automatically: (1) in browsers with the File System Access API (Chrome/Edge/Opera) the visitor picks a target folder and the photos are written there directly, fetched in parallel (6 connections); (2) on Firefox/Safari/HTTPS sites a service-worker-backed streaming ZIP is built in the browser — no RAM limit, multi-GB galleries work without buffering; (3) small galleries can fall back to a single in-memory ZIP blob; (4) the existing server-streaming ZIP remains as the last-resort fallback. Across realistic gallery sizes this typically reduces wait time by 4–6× on the parallel paths because the server is no longer the single-threaded bottleneck. The hard listing limit per gallery raised from 5,000 to 25,000 files. New endpoint ccgal_download_manifest exposes the gallery’s file …
Sponsor
SponsoredKunjungi sekarang
Promo