Version 5.0.13

This commit is contained in:
Neo committed 2025-12-19 19:04:57 -08:00
1 parent b89858b2ff
commit 5efe744c5f
1407 files changed
+69690 -30177

No files matched your search

+10
View File
@@ -241,5 +241,15 @@
"create albums",
"create albums permission"
]
},
"app=gallery&module=gallery&controller=settings&searchResult=form_gallery_metadata": {
"lang_key": "gallery_metadata",
"restriction": "settings_manage",
"keywords": [
"exif",
"metadata",
"location",
"image data"
]
}
}
+2
View File
@@ -9,6 +9,7 @@
<setting key="gallery_detailed_bandwidth"><![CDATA[{"key":"gallery_detailed_bandwidth","default":"1","report":"full"}]]></setting>
<setting key="gallery_large_dims"><![CDATA[{"key":"gallery_large_dims","default":"1600x1200","report":"full"}]]></setting>
<setting key="gallery_maps_default"><![CDATA[{"key":"gallery_maps_default","default":"0","report":"full"}]]></setting>
<setting key="gallery_metadata"><![CDATA[{"key":"gallery_metadata","default":"1","report":"none"}]]></setting>
<setting key="gallery_new_images_count"><![CDATA[{"key":"gallery_new_images_count","default":"16","report":"none"}]]></setting>
<setting key="gallery_nsfw"><![CDATA[{"key":"gallery_nsfw","default":"0","report":"bool"}]]></setting>
<setting key="gallery_overview_carousel_count"><![CDATA[{"key":"gallery_overview_carousel_count","default":"20","report":"full"}]]></setting>
@@ -59,4 +60,5 @@
<acpsearch key="app=core&amp;module=members&amp;controller=groups&amp;searchResult=4_g_max_upload"><![CDATA[{"lang_key":"g_max_upload","restriction":"groups_manage","keywords":["gallery image size","gallery max image size","gallery maximum image size","max size of image","maximum image size"]}]]></acpsearch>
<acpsearch key="app=core&amp;module=members&amp;controller=groups&amp;searchResult=4_g_movies"><![CDATA[{"lang_key":"g_movies","restriction":"groups_manage","keywords":["ability to upload movies","movie upload ability","movies","upload movie permission","upload movies"]}]]></acpsearch>
<acpsearch key="app=core&amp;module=members&amp;controller=groups&amp;searchResult=4_g_create_albums"><![CDATA[{"lang_key":"g_create_albums","restriction":"groups_manage","keywords":["albums","albums permission","create albums","create albums permission"]}]]></acpsearch>
<acpsearch key="app=gallery&amp;module=gallery&amp;controller=settings&amp;searchResult=form_gallery_metadata"><![CDATA[{"lang_key":"gallery_metadata","restriction":"settings_manage","keywords":["exif","metadata","location","image data"]}]]></acpsearch>
</build>
+386 -33
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<javascript app="gallery">
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/global" javascript_name="ips.global.nsfw.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000200">;( function($, _, undefined){
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/global" javascript_name="ips.global.nsfw.js" javascript_type="controller" javascript_version="5001302" javascript_position="1000200">;( function($, _, undefined){
&quot;use strict&quot;;
ips.controller.register('gallery.front.global.nsfw', {
@@ -20,7 +20,7 @@
});
}(jQuery, _));</file>
<file javascript_app="gallery" javascript_location="admin" javascript_path="controllers/settings" javascript_name="ips.settings.settings.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000050">/**
<file javascript_app="gallery" javascript_location="admin" javascript_path="controllers/settings" javascript_name="ips.settings.settings.js" javascript_type="controller" javascript_version="5001302" javascript_position="1000050">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -77,7 +77,7 @@
});
}(jQuery, _));</file>
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.chooseCategory.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000100"><![CDATA[/**
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.chooseCategory.js" javascript_type="controller" javascript_version="5001302" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -244,7 +244,7 @@
});
}(jQuery, _));
]]></file>
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.existingAlbums.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000100"><![CDATA[/**
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.existingAlbums.js" javascript_type="controller" javascript_version="5001302" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -280,7 +280,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.uploadImages.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000100"><![CDATA[/**
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.uploadImages.js" javascript_type="controller" javascript_version="5001302" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -411,7 +411,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.wrapper.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000100"><![CDATA[/**
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.wrapper.js" javascript_type="controller" javascript_version="5001302" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -450,7 +450,6 @@
this.on( 'click', '[data-role="imageDescriptionUseTextarea"]', this.setUpImageDescriptionPlain );
this.on( 'click', '[data-role="addCopyrightCredit"]', this.showCopyrightCredit );
this.on( 'click', '[data-role="saveDetails"]', this.saveDetails );
this.on( 'click', '[data-role="saveInfo"]', this.saveInfo );
// Handle events from uploader
this.on( 'gallery.activateSubmitButton', this.activateSubmitButton );
@@ -562,16 +561,6 @@
link.hide().next().slideDown();
},
/**
* Closes the copyright/credit menu
*
* @returns {void}
*/
saveInfo: function (e) {
e.preventDefault();
$(e.currentTarget).trigger('closeMenu');
},
/**
* Mobile-specific functionality for 'save' button
*
@@ -1166,7 +1155,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.image.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000150">/**
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.image.js" javascript_type="controller" javascript_version="5001302" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -1175,7 +1164,22 @@
* Author: Rikki Tissier
*/
;( function($, _, undefined){
&quot;use strict&quot;;
"use strict";
/**
* @typedef {{id: number|string, content:string}[]} ImageNavLinks
* @typedef {Object&{image: string, url: string, info: string, title: string, id: string|number, images_prev: ImageNavLinks, images_next: ImageNavLinks, image_link_current:string}} ImageFetchResponse
*/
const selectorPropertyMap = {
comments: '[data-role="imageComments"]',
image: '[data-role="imageFrame"]',
info: '[data-role="imageInfo"]',
breadcrumb_top: 'nav.ipsBreadcrumb--top',
breadcrumb_bottom: 'nav.ipsBreadcrumb--bottom',
breadcrumb_mobile: 'nav.ipsBreadcrumb--mobile',
breadcrumb_off_canvas: 'nav.ipsOffCanvas__breadcrumb'
};
ips.controller.register('gallery.front.view.image', {
@@ -1183,9 +1187,17 @@
this.on( 'menuOpened', this.menuOpened );
this.on( 'menuClosed', this.menuClosed );
this.on( document, 'keydown', this.keyDown );
this.on( 'click', '[data-action=&quot;setAsCover&quot;]', this.setAsCover );
this.on( 'click', '[data-action=&quot;setAsProfile&quot;]', this.setAsProfile );
this.on( 'click', '[data-action=&quot;rotateImage&quot;]', this.rotateImage );
this.on( 'click', '[data-action="setAsCover"]', this.setAsCover );
this.on( 'click', '[data-action="setAsProfile"]', this.setAsProfile );
this.on( 'click', '[data-action="rotateImage"]', this.rotateImage );
this.on( 'click', '[data-action="changeImage"]', this.changeImage );
this._stateUpdate = e => this.stateUpdate(e);
ips.utils.history.replaceState({id: this.getCurrentImageId()}, 'gallery.view.image', window.location.href);
window.addEventListener('historychange', this._stateUpdate);
},
destroy() {
window.removeEventListener('historychange:gallery.view.image', this._stateUpdate);
},
/**
@@ -1220,10 +1232,10 @@
switch( e.keyCode ){
case ips.ui.key.LEFT:
this.scope.find('[data-action=&quot;prevMedia&quot;]')[0].click();
this.scope.find('[data-action="changeImage"][data-direction="prev"]')[0].click();
break;
case ips.ui.key.RIGHT:
this.scope.find('[data-action=&quot;nextMedia&quot;]')[0].click();
this.scope.find('[data-action="changeImage"][data-direction="next"]')[0].click();
break;
}
},
@@ -1297,18 +1309,359 @@
showLoading: true
} )
.done( function (response) {
self.scope.find('[data-role=&quot;theImage&quot;]')[0].src = response.src;
self.scope.find('[data-role=&quot;theImage&quot;]').css( { 'width': response.width + 'px', 'height': response.height + 'px' } );
self.scope.find('[data-role=&quot;theImage&quot;]').closest('.cGalleryViewImage').css( { 'width': response.width + 'px', 'height': response.height + 'px' } );
self.scope.find('[data-role="theImage"]')[0].src = response.src;
self.scope.find('[data-role="theImage"]').css( { 'width': response.width + 'px', 'height': response.height + 'px' } );
self.scope.find('[data-role="theImage"]').closest('.cGalleryViewImage').css( { 'width': response.width + 'px', 'height': response.height + 'px' } );
ips.ui.flashMsg.show( response.message );
})
.fail( function () {
window.location = url;
});
},
/**
* Fetch new image and replace existing HTML so we don't need to refresh the page
*
* @param {Event} e Event object
* @returns {void}
*/
changeImage: async function(e){
e.preventDefault();
let commentTab;
const tabsContainer = this.elem.querySelector(`${selectorPropertyMap.comments} i-tabs`);
if (tabsContainer) {
let tab = tabsContainer.querySelector(`[href][aria-selected="true"]`)?.href;
if (tab && tab.endsWith('comments')) {
commentTab = 'comments';
} else if (tab) {
commentTab = 'reviews';
}
}
let url = $( e.currentTarget ).attr('href');
const currentId = this.getCurrentImageId();
const urlObj = new URL(url, window.location.href);
urlObj.updateSearchParams({param: 'browse', value: '1'});
try {
// Fetch new image data
let selectedId;
if (urlObj.searchParams.get('do') === 'previous' && currentId && currentId in this._prevIdCache) {
selectedId = this._prevIdCache[currentId];
} else if (urlObj.searchParams.get('do') === 'next' && currentId && currentId in this._nextIdCache) {
selectedId = this._nextIdCache[currentId];
} else if (e.currentTarget.closest(`#gallery-image-thumbs > [data-image-id]`)) {
selectedId = e.currentTarget.closest(`#gallery-image-thumbs > [data-image-id]`).dataset.imageId;
}
if (selectedId && selectedId === currentId) {
Debug.log(`Not loading image ${selectedId} from ${urlObj} because it is the current image`);
return;
}
for (const selector of Object.values(selectorPropertyMap)) {
this.elem.querySelectorAll(`${selector}:not(${selector} *)`).forEach(el => el.classList.add('ipsLoading'));
}
const response = await this.fetchImageData(urlObj.toString(), commentTab, selectedId);
// Update browser URL
url = new URL(response.url, window.location.href)
if (commentTab) {
url.updateSearchParams({param: "tab", value: commentTab});
}
ips.utils.history.pushState({url:url.toString(), response, commentTab, id: response.id.toString()}, `gallery.view.image`, url.toString(), e);
if (this.historyPromise) {
await this.historyPromise;
}
const currentThumbIDs = new Set(
[...this.elem.querySelectorAll("#gallery-image-thumbs [data-image-id]")]
.map(elem => elem.dataset.imageId)
);
let thumbsChanged = false;
for (const thumb of this.elem.querySelectorAll("#gallery-image-thumbs [data-image-id]")) {
if (!currentThumbIDs.has(thumb.dataset.imageId)) {
thumbsChanged = true;
break;
}
currentThumbIDs.delete(thumb.dataset.imageId);
}
if (currentThumbIDs.size && !thumbsChanged) {
thumbsChanged = true;
}
selectedId = this.getCurrentImageId();
if (selectedId) {
// We need to clear out the existing prev/next associations if an image was added or deleted, otherwise it will skip images and/or display the cached deleted image and content feed, creating issues
if (thumbsChanged) {
this._prevIdCache = {};
this._nextIdCache = {};
}
const urlObj = new URL(response.url, window.location.href);
if (urlObj.searchParams.get('do') === 'previous' && currentId) {
this._prevIdCache[currentId] = selectedId;
this._nextIdCache[selectedId] = currentId;
} else if (urlObj.searchParams.get('do') === 'next' && currentId) {
this._nextIdCache[currentId] = selectedId;
this._prevIdCache[selectedId] = currentId;
}
}
} catch (e) {
Debug.warn(e);
}
},
/**
* Get the image data based on details
* @param url
* @param commentTab
* @param id
* @return {Promise<ImageFetchResponse>}
*/
async fetchImageData(url, commentTab, id) {
url = new URL(url, window.location.href)
.updateSearchParams({params: {
tab: ['comments','reviews'].includes(commentTab) ? commentTab : null, // null removes this param if it's set
browse: 1,
}})
.toString();
commentTab = commentTab || 'reviews';
const response = this._resultCache?.[commentTab]?.[id] || await ips.fetch(url, {bypassRedirect: 'none'});
if (typeof response !== 'object' || ['image','url','info','title', 'id'].some(prop => !(prop in response))) {
throw new RangeError(`The response from the endpoint ${urlObj} is not a JSON object containing image, url, info and title properties.`);
}
if (id) {
this._resultCache[commentTab] = this._resultCache[commentTab] || {};
this._resultCache[commentTab][id] = response;
}
return response;
},
/**
* Handle a state update
* @param {CustomEvent<Object&{detail: 'replace'|'pop'|'push'|string,state: {"gallery.view.image": Object&{response: Object|undefined, commentTab: string|undefined, id:string|number}}}>}e
* @return {Promise<void>}
*/
async stateUpdate(e) {
if (e.detail.type === 'replace') {
return;
}
let _resolve, _reject;
let {response, commentTab, id} = e.detail.state['gallery.view.image'];
this.historyPromise = new Promise(((resolve, reject) => {
_resolve = resolve;
_reject = reject;
}));
if (!id || id === this.getCurrentImageId()) {
Debug.log(`Not handling a state update for the gallery view because the id has not changed`);
_reject(`The view wasn't actually changed`);
return;
}
if (!response || !commentTab) {
let tab = this.elem.querySelector(`${selectorPropertyMap.comments} i-tabs [href][aria-selected="true"]`)?.href;
if (tab && tab.endsWith('comments')) {
commentTab = 'comments';
} else if (tab) {
commentTab = 'reviews';
}
response = await this.fetchImageData(window.location.href, commentTab, id);
ips.utils.history.replaceState({...e.detail.state['gallery.view.image'], response, commentTab, id, url: response.url});
}
for (const [property, selector] of Object.entries(selectorPropertyMap)) {
const root = ['breadcrumb_top','breadcrumb_bottom','breadcrumb_mobile', 'breadcrumb_off_canvas'].includes(property) ? document.body : this.elem;
root.querySelectorAll(`${selector}:not(${selector} *)`).forEach(el => {
el.insertAdjacentHTML("afterend", response[property] || "");
el.remove();
});
}
this.updateActiveThumb(response);
document.title = response.title;
// Refresh content
$( document ).trigger( 'contentChange', [ $(this.elem) ] );
if (response.dataLayer) {
this.scope.trigger('ipsDataLayerProperties', {_properties: response.dataLayer});
}
_resolve();
},
/**
* @type {Promise<void>|undefined}
*/
historyPromise: undefined,
/**
* Get the id of the currently visible image.
* @return {string | undefined}
*/
getCurrentImageId() {
const id = this.elem.querySelector("[data-role='imageFrame'][data-image-id]")?.dataset.imageId;
if (id === undefined) {
Debug.warn(new RangeError(`Could not determine the current image id from the image frame`));
}
return id;
},
/**
* Since the prev/next buttons use the current image, and do=next in the URL, we have to cache the image ID after the request is done
* @type {Object<string, string>}
*/
_nextIdCache: {},
/**
* Since the prev/next buttons use the current image, and do=next in the URL, we have to cache the image ID after the request is done
* @type {Object<string, string>}
*/
_prevIdCache: {},
/**
*
*/
_resultCache: {},
/**
* @param {ImageFetchResponse|undefined} response
*/
updateActiveThumb(response) {
if (response) {
// merge in images before this one
const allImages = [...this.elem.querySelectorAll(`#gallery-image-thumbs > [data-image-id]`)];
const remainingIds = new Set(allImages.map(img => parseInt(img.dataset.imageId)));
/**
* @type {ImageNavLinks}
*/
const toInsert = [...response.images_prev, {id: response.id, content:response.image_link_current}, ...response.images_next];
// first is there any overlap?
const overlap = toInsert.findIndex(val => remainingIds.has((parseInt(val.id))));
if (overlap !== -1) {
const id = parseInt(toInsert[overlap].id);
const overlapDOMIdx = allImages.findIndex(img => parseInt(img.dataset.imageId) === id);
// merge in any ids that aren't currently in the page
const prevInDOM = allImages.slice(0,overlapDOMIdx).reverse();
const prevIdsRemaining = new Set(prevInDOM.map(img => parseInt(img.dataset.imageId)));
const prevToInsert = toInsert.slice(0, overlap).reverse();
for (let i = 0; i < prevToInsert.length; i++) {
const id = parseInt(prevToInsert[i].id);
// just insert if there's no images before this one in the DOM
if (!prevInDOM.length && !remainingIds.has(id)) {
requestAnimationFrame(() => {
this.elem.querySelector(`#gallery-image-thumbs`).insertAdjacentHTML('afterbegin', prevToInsert[i].content);
});
continue;
}
if (prevIdsRemaining.has(id)) {
prevIdsRemaining.delete(id);
while (prevInDOM.length > 1 && parseInt(prevInDOM[0].dataset.imageId) !== id) {
const skipped = prevInDOM.shift();
prevIdsRemaining.delete(parseInt(skipped.dataset.imageId));
}
continue;
}
// if there's already an element for this, skip it
if (remainingIds.has(id)) {
continue;
}
// insert this before the first image
const chunk = [];
while (i < prevToInsert.length && !remainingIds.has(parseInt(prevToInsert[i].id))) {
chunk.unshift(prevToInsert[i].content);
i++;
}
requestAnimationFrame(() => {
prevInDOM[0].insertAdjacentHTML('beforebegin', chunk.join(''));
});
}
const nextToInsert = toInsert.slice(overlap + 1);
const nextInDOM = allImages.slice(overlapDOMIdx);
const nextIdsRemaining = new Set(nextInDOM.map(img => parseInt(img.dataset.imageId)));
for (let i = 0; i < nextToInsert.length; i++) {
const id = parseInt(nextToInsert[i].id);
// just insert if there's no images before this one in the DOM
if (!nextInDOM.length) {
requestAnimationFrame(() => {
this.elem.querySelector(`#gallery-image-thumbs`).insertAdjacentHTML('beforeend', nextToInsert[i].content);
});
continue;
}
if (nextIdsRemaining.has(id)) {
nextIdsRemaining.delete(id);
while (nextInDOM.length > 1 && parseInt(nextInDOM[0].dataset.imageId) !== id) {
const skipped = nextInDOM.shift();
nextIdsRemaining.delete(parseInt(skipped.dataset.imageId));
}
continue;
}
if (remainingIds.has(id)) {
continue;
}
// insert this before the first image
let chunk = [];
while (i < nextToInsert.length && !remainingIds.has(parseInt(nextToInsert[i].id))) {
chunk.push(nextToInsert[i].content);
i++;
}
requestAnimationFrame(() => {
nextInDOM[0].insertAdjacentHTML('afterend', chunk.join(''));
});
}
} else if (toInsert.length) {
requestAnimationFrame(() => {
// no overlap? Well then we need to replace the links as we have no way to properly merge the lists
this.elem.querySelector('#gallery-image-thumbs').innerHTML = toInsert.map(img => img.content).join('\n');
});
}
}
const currentlyActiveThumb = this.getCurrentImageId();
requestAnimationFrame(() => {
this.elem.querySelectorAll(`#gallery-image-thumbs > [data-active]`).forEach(el => delete el.dataset.active);
});
if (currentlyActiveThumb) {
let img;
requestAnimationFrame(() => {
this.elem.querySelectorAll(`#gallery-image-thumbs > [data-image-id="${currentlyActiveThumb}"]`).forEach(el => {
el.dataset.active = '';
img = el;
});
if (img) {
requestAnimationFrame(() => {
const imgRect = img.getBoundingClientRect();
const scroller = img.closest('#gallery-image-thumbs');
const scrollerRect = scroller.getBoundingClientRect();
if (imgRect.left < scrollerRect.left) {
scroller.scrollBy({left: imgRect.left - scrollerRect.left});
} else if (imgRect.right > scrollerRect.right) {
scroller.scrollBy({left: imgRect.right - scrollerRect.right});
}
});
}
});
}
}
});
}(jQuery, _));</file>
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.note.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000150"><![CDATA[/**
}(jQuery, _));]]></file>
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.note.js" javascript_type="controller" javascript_version="5001302" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -1768,7 +2121,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.notes.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000150"><![CDATA[/**
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.notes.js" javascript_type="controller" javascript_version="5001302" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -1851,8 +2204,8 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="gallery" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.browse.js" javascript_type="template" javascript_version="5000074" javascript_position="1000050">// Empty</file>
<file javascript_app="gallery" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.submit.js" javascript_type="template" javascript_version="5000074" javascript_position="1000050"><![CDATA[ips.templates.set('gallery.submit.imageItem', " \
<file javascript_app="gallery" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.browse.js" javascript_type="template" javascript_version="5001302" javascript_position="1000050">// Empty</file>
<file javascript_app="gallery" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.submit.js" javascript_type="template" javascript_version="5001302" javascript_position="1000050"><![CDATA[ips.templates.set('gallery.submit.imageItem', " \
<div class='ipsAttach ipsImageAttach {{#done}}ipsAttach_done{{/done}}' id='{{id}}' data-role='file' data-fileid='{{id}}' data-fullsizeurl='{{imagesrc}}' data-thumbnailurl='{{thumbnail}}' data-isImage='1'>\
<ul class='ipsImageAttach_controls'>\
<li data-role='insert' {{#insertable}}style='display: none'{{/insertable}}><a href='#' data-action='insertFile' class='ipsAttach_selection' data-ipsTooltip title='{{#lang}}insertIntoPost{{/lang}}'><i class='fa-solid fa-plus'></i></a></li>\
@@ -1879,7 +2232,7 @@
ips.templates.set('gallery.submit.imageItemWrapper', " \
<div class='cGallerySubmit_fileList'>{{{content}}}</div>\
");]]></file>
<file javascript_app="gallery" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.view.js" javascript_type="template" javascript_version="5000074" javascript_position="1000050"><![CDATA[ips.templates.set('gallery.notes.wrapper', " \
<file javascript_app="gallery" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.view.js" javascript_type="template" javascript_version="5001302" javascript_position="1000050"><![CDATA[ips.templates.set('gallery.notes.wrapper', " \
<div class='cGalleryNote' data-controller='gallery.front.view.note' data-noteID='{{id}}' data-note=\"{{note}}\" {{#editable}}data-editable{{/editable}} data-posLeft='{{left}}' data-posTop='{{top}}' data-dimWidth='{{width}}' data-dimHeight='{{height}}'>\
<div class='cGalleryNote_border'></div>\
<div class='cGalleryNote_note' style='display: none'>\
+8 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="gallery" version="5000074">
<app key="gallery" version="5001302">
<word key="__app_gallery" js="0">Gallery</word>
<word key="frontnavigation_gallery" js="0">Gallery</word>
<word key="gallery_title" js="0">Gallery</word>
@@ -261,6 +261,12 @@
<word key="cleaning_up_gallery_images" js="0">Cleaning up Gallery images </word>
<word key="gallery_maps_default" js="0">Enable maps by default</word>
<word key="gallery_maps_default_desc" js="0">Users can choose whether or not to show a map next to images that have geolocation data embedded into the image. This option controls whether those maps are enabled by default or not, however users can override this preference while submitting their images.</word>
<word key="gallery_metadata_none" js="0">Hide all image metadata</word>
<word key="gallery_metadata_sensitive" js="0">Hide sensitive metadata</word>
<word key="gallery_metadata_sensitive_desc" js="0">Hides sensitive details, such as GPS geolocation data from images taken with mobile phones</word>
<word key="gallery_metadata_all" js="0">Show all image metadata</word>
<word key="gallery_metadata_desc_gd" js="0"><![CDATA[<strong>Note:</strong> All EXIF data is stripped from the image file itself and stored separately. The above setting determines what metadata will be visible to other users.]]></word>
<word key="gallery_metadata_desc_imagick" js="0"><![CDATA[<strong>Note:</strong> EXIF data is stripped from the image file based on <a href='{internal.admin.app=core&module=overview&controller=files&do=imagesettings&searchResult=imagick_strip_exif}'>your image settings</a>. The above setting determines what metadata will be visible to other users.]]></word>
<word key="member__gallery_Images" js="0">Gallery</word>
<word key="remove_gallery_access" js="0">Allowed to access gallery?</word>
<word key="remove_gallery_upload" js="0">Allowed to upload images?</word>
@@ -523,6 +529,7 @@
<word key="block_albums" js="0">Album Feed</word>
<word key="block_albums_desc" js="0">Create a listing of albums</word>
<word key="widget_feed_container_gallery_album" js="0">Category</word>
<word key="widget_feed_album_empty" js="0">Include empty albums</word>
<word key="profile_gallery_album" js="0">Albums</word>
<word key="gallery_category_id" js="0">Category</word>
<word key="profile_gallery_gallery" js="0">Albums</word>
+5
View File
@@ -19,6 +19,11 @@
"default": "0",
"report": "full"
},
{
"key": "gallery_metadata",
"default": "1",
"report": "none"
},
{
"key": "gallery_new_images_count",
"default": "16",
File diff suppressed because it is too large. Load diff
+50 -1
View File
@@ -348,5 +348,54 @@
"5000071": "5.0.6 Beta 2",
"5000072": "5.0.6 Beta 3",
"5000073": "5.0.6 Beta 4",
"5000074": "5.0.6"
"5000074": "5.0.6",
"5000075": "5.0.7 Beta 1",
"5000076": "5.0.7 Beta 2",
"5000077": "5.0.7 Beta 2",
"5000078": "5.0.7 Beta 3",
"5000079": "5.0.7 Beta 4",
"5000080": "5.0.7",
"5000081": "5.0.7",
"5000082": "5.0.7",
"5000800": "5.0.8 Alpha 1",
"5000801": "5.0.8 Alpha 2",
"5000802": "5.0.8 Beta 1",
"5000803": "5.0.8 Beta 2",
"5000804": "5.0.8 Beta 3",
"5000805": "5.0.8",
"5000900": "5.0.9 Beta 1",
"5000901": "5.0.9 Beta 1",
"5000902": "5.0.9 Beta 1",
"5000903": "5.0.9 Beta 2",
"5000904": "5.0.9",
"5000905": "5.0.9",
"5000906": "5.0.10 Beta 1",
"5000907": "5.0.10 Beta 1",
"5000908": "5.0.10 Beta 1",
"5000909": "5.0.10 Beta 1",
"5000910": "5.0.10 Beta 2",
"5000911": "5.0.10 Beta 3",
"5000912": "5.0.10 Beta 4",
"5000913": "5.0.10 Beta 4",
"5000914": "5.0.10",
"5000915": "5.0.10",
"5000916": "5.0.10",
"5000917": "5.0.10",
"5000918": "5.0.10",
"5000919": "5.0.10",
"5000920": "5.0.10",
"5001100": "5.0.11 Beta 1",
"5001101": "5.0.11 Beta 1",
"5001102": "5.0.11 Beta 2",
"5001103": "5.0.11",
"5001104": "5.0.11",
"5001105": "5.0.11",
"5001200": "5.0.12 Beta 1",
"5001201": "5.0.12 Beta 2",
"5001202": "5.0.12 Beta 3",
"5001203": "5.0.12",
"5001204": "5.0.12",
"5001300": "5.0.13 Beta 1",
"5001301": "5.0.13 Beta 2",
"5001302": "5.0.13"
}
@@ -13,7 +13,11 @@ namespace IPS\gallery\extensions\core\AdvertisementLocations;
/* To prevent PHP errors (extending class does not exist) revealing path */
use IPS\core\Advertisement;
use IPS\Extensions\AdvertisementLocationsAbstract;
use IPS\gallery\Image;
use IPS\Request;
use OutOfRangeException;
use function defined;
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
@@ -35,7 +39,7 @@ class ImageLightbox extends AdvertisementLocationsAbstract
*/
public function getSettings( array $settings ): array
{
return array( 'locations' => array( 'ad_image_lightbox' => array() ), 'settings' => array() );
return array( 'locations' => array( 'ad_image_lightbox' => array( 'IPS_gallery_Category' ) ), 'settings' => array() );
}
/**
@@ -48,4 +52,28 @@ class ImageLightbox extends AdvertisementLocationsAbstract
{
return array();
}
/**
* Check if the advertisement can be displayed, based on settings
*
* @param Advertisement $advertisement
* @param string $location
* @return bool
*/
public function canShow( Advertisement $advertisement, string $location ) : bool
{
if( isset( $advertisement->_additional_settings['IPS_gallery_Category'] ) and is_array( $advertisement->_additional_settings['IPS_gallery_Category'] ) )
{
try
{
return in_array( Image::load( Request::i()->id )->category_id, $advertisement->_additional_settings['IPS_gallery_Category'] );
}
catch( OutOfRangeException )
{
return false;
}
}
return TRUE;
}
}
@@ -14,6 +14,7 @@ namespace IPS\gallery\extensions\core\ContentRouter;
/* To prevent PHP errors (extending class does not exist) revealing path */
use IPS\Application\Module;
use IPS\Content\Filter;
use IPS\Extensions\ContentRouterAbstract;
use IPS\gallery\Album\Item;
use IPS\gallery\Application;
@@ -81,7 +82,7 @@ class Gallery extends ContentRouterAbstract
{
if( !in_array( $className, $this->classes ) or $className == 'IPS\gallery\Album\Item' )
{
return new Content( $className, $url, $where );
return new Content( $className, $url, $where, null, Filter::FILTER_AUTOMATIC, 'read' );
}
Output::i()->jsFiles = array_merge( Output::i()->jsFiles, Output::i()->js('front_browse.js', 'gallery' ) );
@@ -89,7 +90,7 @@ class Gallery extends ContentRouterAbstract
Application::outputCss();
$table = new Table( $className, $url, $where, NULL, FALSE );
$table = new Table( $className, $url, $where, NULL, Filter::FILTER_AUTOMATIC, 'read' );
$table->tableTemplate = array( Theme::i()->getTemplate( 'browse', 'gallery' ), 'imageTable' );
/* Get rows template */
@@ -13,6 +13,7 @@ namespace IPS\gallery\extensions\core\EditorLocations;
/* To prevent PHP errors (extending class does not exist) revealing path */
use Exception;
use InvalidArgumentException;
use IPS\Content;
use IPS\Db;
@@ -85,7 +86,14 @@ class Albums extends EditorLocationsAbstract
*/
public function attachmentLookup( int $id1=NULL, int $id2=NULL, string $id3=NULL ): Model|Content|Url|Member|null
{
return Album::load( $id1 );
try
{
return Album::load( $id1 );
}
catch( Exception $e )
{
throw new LogicException;
}
}
/**
@@ -159,7 +159,7 @@ class Categories extends EditorLocationsAbstract
}
catch( InvalidArgumentException $e )
{
if( $callback[1] == 'parseStatic' AND $e->getcode() == 103014 )
if( is_array( $callback ) and $callback[1] == 'parseStatic' AND $e->getcode() == 103014 )
{
$rebuilt = preg_replace( "#\[/?([^\]]+?)\]#", '', $word['word_custom'] );
}
@@ -90,10 +90,10 @@ class Gallery extends GroupFormAbstract
if( $group->g_id != Settings::i()->guest_group )
{
$group->g_create_albums = (int) $values['g_create_albums'];
$group->g_create_albums_private = (int) $values['g_create_albums_private'];
$group->g_create_albums_fo = (int) $values['g_create_albums_fo'];
$group->g_album_limit = (int) $values['g_album_limit'];
$group->g_img_album_limit = (int) $values['g_img_album_limit'];
$group->g_create_albums_private = $values['g_create_albums'] ? (int) $values['g_create_albums_private'] : 0;
$group->g_create_albums_fo = $values['g_create_albums'] ? (int) $values['g_create_albums_fo'] : 0;
$group->g_album_limit = $values['g_create_albums'] ? (int) $values['g_album_limit'] : 0;
$group->g_img_album_limit = $values['g_create_albums'] ? (int) $values['g_img_album_limit'] : 0;
}
$group->g_download_original = (int) $values['g_download_original'];
@@ -36,6 +36,7 @@ try
Output::i()->sendHeader( "Content-Length: " . $file->filesize() );
Output::i()->sendHeader( "Content-Security-Policy: default-src 'none'; sandbox" );
Output::i()->sendHeader( "X-Content-Security-Policy: default-src 'none'; sandbox" );
Output::i()->sendHeader( "Cross-Origin-Opener-Policy: same-origin" );
$file->printFile();
exit;
@@ -17,6 +17,7 @@ use IPS\Db;
use IPS\Dispatcher;
use IPS\Dispatcher\Controller;
use IPS\File;
use IPS\gallery\Image;
use IPS\GeoLocation;
use IPS\Helpers\Form;
use IPS\Helpers\Form\CheckboxSet;
@@ -126,10 +127,25 @@ class settings extends Controller
$form->addHeader( 'gallery_options' );
$form->add( new YesNo( 'gallery_rss_enabled', SettingsClass::i()->gallery_rss_enabled ) );
$form->add( new Radio( 'gallery_metadata', SettingsClass::i()->gallery_metadata, false, [
'options' => [
Image::IMAGE_METADATA_NONE => 'gallery_metadata_none',
Image::IMAGE_METADATA_ALL => 'gallery_metadata_all',
Image::IMAGE_METADATA_NOSENSITIVE => 'gallery_metadata_sensitive'
],
'descriptions' => [
Image::IMAGE_METADATA_NOSENSITIVE => 'gallery_metadata_sensitive_desc'
],
'toggles' => [
Image::IMAGE_METADATA_ALL => [ 'gallery_maps_default' ]
]
] ) );
Member::loggedIn()->language()->words['gallery_metadata_desc'] = Member::loggedIn()->language()->addToStack( SettingsClass::i()->image_suite == 'imagemagick' ? 'gallery_metadata_desc_imagick' : 'gallery_metadata_desc_gd' );
if( GeoLocation::enabled() )
{
$form->add( new YesNo( 'gallery_maps_default', SettingsClass::i()->gallery_maps_default ) );
$form->add( new YesNo( 'gallery_maps_default', SettingsClass::i()->gallery_maps_default, id: 'gallery_maps_default' ) );
}
$form->add( new YesNo( 'gallery_nsfw', SettingsClass::i()->gallery_nsfw ) );
@@ -190,6 +206,7 @@ class settings extends Controller
'gallery_recent_updated_albums_count' => $values['gallery_recent_updated_albums_count'],
'gallery_show_new_images' => $values['gallery_show_new_images'],
'gallery_new_images_count' => $values['gallery_new_images_count'],
'gallery_metadata' => $values['gallery_metadata']
) );
Session::i()->log( 'acplogs__gallery_settings' );
@@ -374,7 +374,7 @@ class browse extends Controller
}
/* Data Layer Page Context */
if ( Settings::i()->core_datalayer_enabled AND !Request::i()->isAjax() )
if ( DataLayer::enabled() AND !Request::i()->isAjax() )
{
foreach ( $category->getDataLayerProperties() as $property => $value )
{
@@ -387,6 +387,7 @@ class browse extends Controller
$category->updateViews();
}
Output::i()->bodyAttributes['contentClass'] = Category::class;
Output::i()->contextualSearchOptions[ Member::loggedIn()->language()->addToStack( 'search_contextual_item_categories' ) ] = array( 'type' => 'gallery_image', 'nodes' => $category->_id );
Output::i()->output = Theme::i()->getTemplate( 'browse' )->category( $category, $albums, (string) $table );
}
@@ -523,6 +524,7 @@ class browse extends Controller
$albumItem->updateViews();
}
Output::i()->bodyAttributes['contentClass'] = Album::class;
Output::i()->breadcrumb[] = array( NULL, $album->_title );
Output::i()->output = Theme::i()->getTemplate( 'browse' )->album( $album, (string) $table, $commentsAndReviews );
}
@@ -19,6 +19,7 @@ use DomainException;
use Exception;
use IPS\Content\Controller;
use IPS\Content\Item;
use IPS\core\DataLayer;
use IPS\core\FrontNavigation;
use IPS\DateTime;
use IPS\Db;
@@ -189,7 +190,7 @@ class view extends Controller
if ( count( $tabs ) > 1 )
{
$commentsAndReviews = count( $tabs ) ? Theme::i()->getTemplate( 'global', 'core' )->tabs( $tabs, $tab, $activeTabContents, Request::i()->lightbox ? $this->image->url()->setQueryString( 'lightbox', 1 ) : $this->image->url(), 'tab', FALSE, FALSE, Request::i()->lightbox ? 'ipsTabs--small ipsTabs--stretch' : '' ) : NULL;
$commentsAndReviews = count( $tabs ) ? Theme::i()->getTemplate( 'global', 'core' )->tabs( $tabs, $tab, $activeTabContents, Request::i()->lightbox ? $this->image->url()->setQueryString( 'lightbox', 1 ) : $this->image->url(), 'tab', FALSE, FALSE, Request::i()->lightbox ? 'ipsTabs--small ipsTabs--stretch' : '', forceURLUpdate: true ) : NULL;
}
else
{
@@ -343,19 +344,54 @@ class view extends Controller
/* Display */
if( Request::i()->isAjax() && isset( Request::i()->browse ) )
{
/* Set navigation and title */
$this->_setBreadcrumbAndTitle( $this->image, FALSE );
Output::i()->buildMetaTags();
$return = array(
'title' => htmlspecialchars( $this->image->mapped('title'), ENT_DISALLOWED | ENT_QUOTES, 'UTF-8', FALSE ),
'title' => Output::i()->getTitle( Output::i()->title ),
'breadcrumb_top' => Theme::i()->getTemplate( 'global', 'core' )->breadcrumb( "top" ),
'breadcrumb_bottom' => Theme::i()->getTemplate( 'global', 'core' )->breadcrumb( "bottom" ),
'breadcrumb_mobile' => Theme::i()->getTemplate( 'global', 'core' )->breadcrumb( "mobile" ),
'breadcrumb_off_canvas' => Theme::i()->getTemplate( 'global', 'core' )->mobileFooterNav(),
'image' => Theme::i()->getTemplate( 'view' )->imageFrame( $this->image ),
'info' => Theme::i()->getTemplate( 'view' )->imageInfo( $this->image )
'info' => Theme::i()->getTemplate( 'view' )->imageInfo( $this->image ),
'url' => $this->image->url(),
'id' => $this->image->id,
'images_prev' => [],
'images_next' => [],
'image_link_current' => Theme::i()->getTemplate( 'view' )->imageCarouselLink( $this->image )
);
/* Add the prev and next images to make sure the carousel stays updated */
if ( $this->image->hasPreviousOrNext() )
{
$prev = array_reverse( array_slice( $this->image->fetchNextOrPreviousImages( 9, 'ASC' ), 0, 4 ) );
$next = $this->image->fetchNextOrPreviousImages( 9, 'DESC' );
$counter = 1;
foreach ( $prev as $prevImage )
{
$return['images_prev'][] = [ 'id' => (int) $prevImage->id, 'content' => Theme::i()->getTemplate( 'view' )->imageCarouselLink( $prevImage ) ];
$counter++;
}
foreach ( $next as $nextImage )
{
$return['images_next'][] = [ 'id' => (int) $nextImage->id, 'content' => Theme::i()->getTemplate( 'view' )->imageCarouselLink( $nextImage ) ];
if ( $counter >= 10 )
{
break;
}
}
}
if( $this->image->directContainer()->allow_comments )
{
$return['comments'] = $commentsAndReviews;
$return['comments'] = Theme::i()->getTemplate( 'view' )->imageComments( $this->image, $commentsAndReviews );
}
/* Data Layer Properties */
if ( Settings::i()->core_datalayer_enabled )
if ( DataLayer::enabled() )
{
$return['dataLayer'] = $this->image->getDataLayerProperties();
}
@@ -439,6 +475,7 @@ class view extends Controller
Output::i()->sendHeader( "Content-Security-Policy: default-src 'none'; sandbox" );
Output::i()->sendHeader( "X-Content-Security-Policy: default-src 'none'; sandbox" );
Output::i()->sendHeader( "Cross-Origin-Opener-Policy: same-origin" );
if( $image !== NULL )
{
@@ -1,170 +1,5 @@
{
"1": {
"method": "addColumn",
"params": [
"core_groups",
{
"name": "g_create_albums",
"type": "TINYINT",
"length": 10,
"null": false,
"default": 0,
"comment": "Can create albums?",
"unsigned": true
}
]
},
"2": {
"method": "addColumn",
"params": [
"core_groups",
{
"name": "g_create_albums_private",
"type": "TINYINT",
"length": 10,
"null": false,
"default": 0,
"comment": "Can create private albums?",
"unsigned": true
}
]
},
"3": {
"method": "addColumn",
"params": [
"core_groups",
{
"name": "g_create_albums_fo",
"type": "TINYINT",
"length": 10,
"null": false,
"default": 0,
"comment": "Can create restricted albums?",
"unsigned": true
}
]
},
"4": {
"method": "addColumn",
"params": [
"core_groups",
{
"name": "g_album_limit",
"type": "INT",
"length": 10,
"null": false,
"default": 0,
"comment": "Maximum number of albums",
"unsigned": true
}
]
},
"5": {
"method": "addColumn",
"params": [
"core_groups",
{
"name": "g_img_album_limit",
"type": "INT",
"length": 1,
"null": false,
"default": 0,
"comment": "Maximum number of images per album",
"unsigned": true
}
]
},
"7": {
"method": "addColumn",
"params": [
"core_groups",
{
"name": "g_movies",
"type": "TINYINT",
"length": 1,
"null": false,
"default": 0,
"comment": "Can upload movies?",
"unsigned": true
}
]
},
"8": {
"method": "addColumn",
"params": [
"core_groups",
{
"name": "g_movie_size",
"type": "INT",
"length": 1,
"null": false,
"default": 0,
"comment": "Maximum size of movies",
"unsigned": true
}
]
},
"9": {
"method": "addColumn",
"params": [
"core_groups",
{
"name": "g_max_upload",
"type": "INT",
"length": 1,
"null": false,
"default": 0,
"comment": "Maximum image upload size",
"unsigned": true
}
]
},
"10": {
"method": "addColumn",
"params": [
"core_groups",
{
"name": "g_max_transfer",
"type": "INT",
"length": 1,
"null": false,
"default": 0,
"comment": "Maximum bandwidth consumption",
"unsigned": true
}
]
},
"11": {
"method": "addColumn",
"params": [
"core_groups",
{
"name": "g_max_views",
"type": "INT",
"length": 1,
"null": false,
"default": 0,
"comment": "Maximum daily image views",
"unsigned": true
}
]
},
"12": {
"method": "addColumn",
"params": [
"core_groups",
{
"name": "g_download_original",
"type": "TINYINT",
"length": 1,
"null": false,
"default": 0,
"comment": "Can this group download the original image?",
"unsigned": true
}
]
},
"13": {
"method": "insert",
"params": [
"core_permission_index",
@@ -0,0 +1,22 @@
{
"id": 5000075,
"name": "5.0.7 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeeditor": false,
"javascript": true,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,14 @@
{
"files": {
"added": [],
"edited": [
"gallery\/front\/controllers\/view\/ips.view.image.js"
],
"removed": []
},
"orders": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,28 @@
{
"html": {
"added": [
"front\/view\/imageComments"
],
"edited": [
"front\/browse\/album",
"front\/browse\/categories",
"front\/browse\/category",
"front\/global\/approvalQueueItem",
"front\/view\/image",
"front\/view\/imageFrame",
"front\/view\/imageInfo",
"front\/view\/imageLightboxFrame"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,22 @@
{
"id": 5000076,
"name": "5.0.7 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000077,
"name": "5.0.7 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000078,
"name": "5.0.7 Beta 3",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000079,
"name": "5.0.7 Beta 4",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000080,
"name": "5.0.7",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000081,
"name": "5.0.7",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000082,
"name": "5.0.7",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000800,
"name": "5.0.8 Alpha 1",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeeditor": false,
"javascript": true,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,14 @@
{
"files": {
"added": [],
"edited": [
"gallery\/front\/controllers\/view\/ips.view.image.js"
],
"removed": []
},
"orders": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,29 @@
{
"html": {
"added": [],
"edited": [
"front\/browse\/categories",
"front\/browse\/categoryCarousel",
"front\/browse\/categoryGrid",
"front\/browse\/categoryRow",
"front\/browse\/index",
"front\/browse\/tableRowsThumbs",
"front\/global\/manageFollowNodeRow",
"front\/widgets\/albums",
"front\/widgets\/imageRow",
"front\/widgets\/recentComments",
"front\/widgets\/recentImageReviews"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,22 @@
{
"id": 5000801,
"name": "5.0.8 Alpha 2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,21 @@
{
"html": {
"added": [],
"edited": [
"front\/browse\/imageTable",
"front\/browse\/tableRowsRows",
"front\/widgets\/imageRow"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,22 @@
{
"id": 5000802,
"name": "5.0.8 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000803,
"name": "5.0.8 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeeditor": false,
"javascript": true,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,14 @@
{
"files": {
"added": [],
"edited": [
"gallery\/front\/controllers\/view\/ips.view.image.js"
],
"removed": []
},
"orders": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,22 @@
{
"html": {
"added": [
"front\/view\/imageCarouselLink",
"front\/view\/imageCarouselLinks"
],
"edited": [
"front\/view\/image"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,22 @@
{
"id": 5000804,
"name": "5.0.8 Beta 3",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000805,
"name": "5.0.8",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000900,
"name": "5.0.9 Beta 1",
"steps": {
"queries": false,
"lang": true,
"theme": true,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,14 @@
{
"normal": {
"added": [
"widget_feed_album_empty"
],
"edited": [],
"removed": []
},
"js": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,20 @@
{
"html": {
"added": [],
"edited": [
"front\/browse\/noImages",
"front\/widgets\/albums"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,22 @@
{
"id": 5000901,
"name": "5.0.9 Beta 1",
"steps": {
"queries": true,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000902,
"name": "5.0.9 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000903,
"name": "5.0.9 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000904,
"name": "5.0.9",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000905,
"name": "5.0.9",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000906,
"name": "5.0.10 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,26 @@
{
"html": {
"added": [],
"edited": [
"front\/browse\/album",
"front\/browse\/categoryCarousel",
"front\/browse\/categoryRow",
"front\/global\/manageFollowNodeRow",
"front\/widgets\/albums",
"front\/widgets\/imageRow",
"front\/widgets\/recentComments",
"front\/widgets\/recentImageReviews"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,22 @@
{
"id": 5000907,
"name": "5.0.10 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000908,
"name": "5.0.10 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000909,
"name": "5.0.10 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000910,
"name": "5.0.10 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000911,
"name": "5.0.10 Beta 3",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000912,
"name": "5.0.10 Beta 4",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000913,
"name": "5.0.10 Beta 4",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000914,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000915,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000916,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000917,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000918,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000919,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000920,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001100,
"name": "5.0.11 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,7 @@
{
"added": [
"app=gallery&module=gallery&controller=settings&searchResult=form_gallery_metadata"
],
"edited": [],
"removed": []
}
@@ -0,0 +1,22 @@
{
"id": 5001101,
"name": "5.0.11 Beta 1",
"steps": {
"queries": false,
"lang": true,
"theme": true,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": true,
"settings": true,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"normal": {
"added": [
"gallery_metadata_none",
"gallery_metadata_sensitive",
"gallery_metadata_sensitive_desc",
"gallery_metadata_all",
"gallery_metadata_desc_gd",
"gallery_metadata_desc_imagick"
],
"edited": [],
"removed": []
},
"js": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,7 @@
{
"added": [
"gallery_metadata"
],
"edited": [],
"removed": []
}
@@ -0,0 +1,24 @@
{
"html": {
"added": [],
"edited": [
"front\/browse\/album",
"front\/view\/imageInfo",
"front\/widgets\/albums",
"front\/widgets\/imageRow",
"front\/widgets\/recentComments",
"front\/widgets\/recentImageReviews"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,22 @@
{
"id": 5001102,
"name": "5.0.11 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001103,
"name": "5.0.11",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001104,
"name": "5.0.11",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001105,
"name": "5.0.11",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001200,
"name": "5.0.12 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeeditor": false,
"javascript": true,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,14 @@
{
"files": {
"added": [],
"edited": [
"gallery\/front\/controllers\/submit\/ips.submit.wrapper.js"
],
"removed": []
},
"orders": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,36 @@
{
"html": {
"added": [],
"edited": [
"front\/browse\/albumReviews",
"front\/browse\/categoriesSidebar",
"front\/browse\/imageTable",
"front\/forms\/commentUnavailable",
"front\/forms\/reviewTemplate",
"front\/global\/approvalQueueItem",
"front\/global\/comment",
"front\/global\/commentContainer",
"front\/global\/review",
"front\/global\/searchResultImageSnippet",
"front\/submit\/createAlbum",
"front\/submit\/wrapper",
"front\/view\/image",
"front\/view\/imageFrame",
"front\/view\/imageInfo",
"front\/view\/imageLightboxFrame",
"front\/view\/imageLightboxInfo",
"front\/view\/reviews"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,22 @@
{
"id": 5001201,
"name": "5.0.12 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001202,
"name": "5.0.12 Beta 3",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001203,
"name": "5.0.12",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001204,
"name": "5.0.12",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001300,
"name": "5.0.13 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,29 @@
{
"html": {
"added": [],
"edited": [
"front\/browse\/imageTable",
"front\/global\/approvalQueueItem",
"front\/global\/comment",
"front\/global\/commentContainer",
"front\/global\/review",
"front\/submit\/createAlbum",
"front\/submit\/wrapper",
"front\/view\/imageFrame",
"front\/view\/imageInfo",
"front\/view\/imageLightboxFrame",
"front\/view\/imageLightboxInfo"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,22 @@
{
"id": 5001301,
"name": "5.0.13 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001302,
"name": "5.0.13",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -14,6 +14,7 @@ namespace IPS\gallery\Album;
/* To prevent PHP errors (extending class does not exist) revealing path */
use BadMethodCallException;
use InvalidArgumentException;
use IPS\Content\ContentMenuLink;
use IPS\Content\Embeddable;
use IPS\Content\Filter;
@@ -38,12 +39,14 @@ use IPS\gallery\Category;
use IPS\gallery\Image;
use IPS\Helpers\Badge;
use IPS\Helpers\Menu;
use IPS\Http\Url;
use IPS\Member;
use IPS\Node\Model;
use IPS\Output;
use IPS\Patterns\ActiveRecordIterator;
use IPS\Settings;
use IPS\Theme;
use OutOfRangeException;
use function array_slice;
use function count;
use function defined;
@@ -612,6 +615,28 @@ Filter
return 'album_id';
}
/**
* Load record based on a URL
*
* @param Url $url URL to load from
* @return mixed
* @throws InvalidArgumentException
* @throws OutOfRangeException
*/
public static function loadFromUrl( Url $url ): mixed
{
if ( isset( $url->queryString['album'] ) )
{
return static::load( $url->queryString['album'] );
}
if ( isset( $url->hiddenQueryString['album'] ) )
{
return static::load( $url->hiddenQueryString['album'] );
}
return parent::loadFromUrl( $url );
}
/**
* Get content for embed
*
@@ -374,7 +374,10 @@ class Category extends Model implements Permissions
$form->add( new Select( 'category_sort_options_img', $this->sort_options_img ?: 'updated', FALSE, array( 'options' => array( 'updated' => 'sort_updated', 'last_comment' => 'sort_last_comment', 'title' => 'album_sort_caption', 'rating' => 'sort_rating', 'date' => 'sort_date', 'num_comments' => 'sort_num_comments', 'num_reviews' => 'sort_num_reviews', 'views' => 'sort_views' ) ), NULL, NULL, NULL, 'category_sort_options_img' ) );
$form->add( new Radio( 'category_allow_albums', $this->id ? $this->allow_albums : 1, TRUE, array( 'options' => array( 0 => 'cat_no_allow_albums', 1 => 'cat_allow_albums', 2 => 'cat_require_albums' ) ) ) );
$form->add( new Radio( 'category_allow_albums', $this->id ? $this->allow_albums : 1, TRUE, array(
'options' => array( 0 => 'cat_no_allow_albums', 1 => 'cat_allow_albums', 2 => 'cat_require_albums' ),
'toggles' => array( 1 => array( 'category_sort_options' ), 2 => array( 'category_sort_options' ) )
) ) );
$form->add( new YesNo( 'category_approve_img', $this->approve_img, FALSE ) );
if( Settings::i()->gallery_watermark_path )
@@ -382,11 +385,10 @@ class Category extends Model implements Permissions
$form->add( new YesNo( 'category_watermark', $this->id ? $this->watermark : TRUE, FALSE ) );
}
$form->add( new YesNo( 'allow_anonymous_comments', $this->id ? $this->allow_anonymous : FALSE, FALSE, array() ) );
$form->addHeader( 'category_comments_and_ratings' );
$form->add( new YesNo( 'category_allow_comments', $this->id ? $this->allow_comments : TRUE, FALSE, array( 'togglesOn' => array( 'category_approve_com' ) ), NULL, NULL, NULL, 'category_allow_comments' ) );
$form->add( new YesNo( 'category_allow_comments', $this->id ? $this->allow_comments : TRUE, FALSE, array( 'togglesOn' => array( 'category_approve_com', 'allow_anonymous_comments' ) ), NULL, NULL, NULL, 'category_allow_comments' ) );
$form->add( new YesNo( 'category_approve_com', $this->approve_com, FALSE, array(), NULL, NULL, NULL, 'category_approve_com' ) );
$form->add( new YesNo( 'allow_anonymous_comments', $this->id ? $this->allow_anonymous : FALSE, FALSE, array(), null, null, null, 'allow_anonymous_comments' ) );
$form->add( new YesNo( 'gcategory_allow_rating', $this->id ? $this->allow_rating : TRUE, FALSE ) );
$form->add( new YesNo( 'category_allow_reviews', $this->id ? $this->allow_reviews : FALSE, FALSE, array( 'togglesOn' => array( 'category_review_moderate' ) ) ) );
$form->add( new YesNo( 'category_review_moderate', $this->id ? $this->review_moderate : FALSE, FALSE, array(), NULL, NULL, NULL, 'category_review_moderate' ) );
@@ -927,7 +929,7 @@ class Category extends Model implements Permissions
}
else
{
Task::queue( 'core', 'DeleteOrMoveContent', array( 'class' => 'IPS\gallery\Album', 'id' => $album->_id, 'deleteWhenDone' => TRUE ) );
Task::queue( 'core', 'DeleteOrMoveContent', array( 'class' => 'IPS\gallery\Album', 'id' => $album->_id, 'deleteWhenDone' => TRUE ), priority: 4 );
}
}
}
+52 -4
View File
@@ -230,6 +230,8 @@ Filter
$return[] = 'image_album_id';
$return[] = 'image_copyright';
$return[] = 'image_nsfw';
$return[] = 'image_media';
$return[] = 'image_file_type';
return $return;
}
@@ -279,7 +281,27 @@ Filter
return array();
}
return is_array( $this->_data['metadata'] ) ? $this->_data['metadata'] : ( $this->_data['metadata'] ? json_decode( $this->_data['metadata'], TRUE ) : array() );
/* Did we disable metadata viewing? */
if( Settings::i()->gallery_metadata == static::IMAGE_METADATA_NONE )
{
return array();
}
$metadata = is_array( $this->_data['metadata'] ) ? $this->_data['metadata'] : ( $this->_data['metadata'] ? json_decode( $this->_data['metadata'], TRUE ) : array() );
/* If we're stripping sensitive data, then remove it here */
if( Settings::i()->gallery_metadata == static::IMAGE_METADATA_NOSENSITIVE )
{
foreach( $metadata as $k => $v )
{
if( str_starts_with( $k, 'GPS.' ) )
{
unset( $metadata[ $k ] );
}
}
}
return $metadata;
}
/**
@@ -292,10 +314,9 @@ Filter
if( isset( $this->_data['data'] ) )
{
$data = is_array( $this->_data['data'] ) ? $this->_data['data'] : json_decode( $this->_data['data'], true );
return is_array( $data ) ? $data : [];
}
return [];
return $data ?? [ 'large' => [ null, null ], 'small' => [ null, null ] ];
}
/**
@@ -316,7 +337,17 @@ Filter
*/
public function get__notes(): array
{
return is_array( $this->_data['notes'] ) ? $this->_data['notes'] : ( $this->_data['notes'] ? json_decode( $this->_data['notes'], TRUE ) : array() );
if( is_array( ( $this->_data['notes'] ) ) )
{
return $this->_data['notes'];
}
if( isset( $this->_data['notes'] ) and $data = json_decode( $this->_data['notes'], true ) )
{
return $data;
}
return [];
}
/**
@@ -1587,6 +1618,23 @@ Filter
return $image;
}
/**
* @brief Metadata-related constants
*/
const IMAGE_METADATA_NONE = 0;
const IMAGE_METADATA_ALL = 1;
const IMAGE_METADATA_NOSENSITIVE = 2;
/**
* Determines if the map and location data should be displayed
*
* @return bool
*/
public function showLocation() : bool
{
return GeoLocation::enabled() and Settings::i()->gallery_metadata == static::IMAGE_METADATA_ALL and $this->gps_show;
}
/**
* Return the map for the image if available
*
+35
View File
@@ -14,6 +14,8 @@ namespace IPS\gallery\widgets;
/* To prevent PHP errors (extending class does not exist) revealing path */
use IPS\Content\Widget;
use IPS\Helpers\Form;
use IPS\Helpers\Form\YesNo;
use IPS\Output;
use IPS\Theme;
use function defined;
@@ -62,4 +64,37 @@ class albums extends Widget
Output::i()->cssFiles = array_merge( Output::i()->cssFiles, Theme::i()->css( 'gallery.css', 'gallery', 'front' ) );
parent::init();
}
/**
* Specify widget configuration
*
* @param Form|null $form Form object
* @return Form
*/
public function configuration( Form &$form=null ): Form
{
$form = parent::configuration( $form );
$form->add( new YesNo( 'widget_feed_album_empty', $this->configuration['widget_feed_album_empty'] ?? true, false ), 'widget_feed_author' );
return $form;
}
/**
* Get where clause
*
* @return array
*/
protected function buildWhere(): array
{
$where = parent::buildWhere();
/* We default to true to maintain previous behavior */
if( isset( $this->configuration['widget_feed_album_empty'] ) and !$this->configuration['widget_feed_album_empty'] )
{
$where[] = [ 'album_count_imgs>?', 0 ];
}
return $where;
}
}