Version 4.6.0

This commit is contained in:
Neo committed 2025-12-19 05:55:31 -08:00
1 parent f79dcf067a
commit 517a5e1f70
2036 files changed
+110041 -26162

No files matched your search

+2 -1
View File
@@ -4,5 +4,6 @@
"app_directory": "gallery",
"app_protected": 0,
"app_website": null,
"app_update_check": null
"app_update_check": null,
"app_hide_tab": 0
}
+1 -1
View File
@@ -5,7 +5,7 @@
<module key="front/gallery"><![CDATA[{"default_controller":"browse","protected":0,"default":1}]]></module>
<task frequency="P0Y0M1DT0H0M0S">clearBandwidthLog</task>
<task frequency="P0Y0M1DT0H0M0S">clearUploads</task>
<setting key="gallery_bandwidth_period"><![CDATA[{"key":"gallery_bandwidth_period","default":"-1","report":"full"}]]></setting>
<setting key="gallery_bandwidth_period"><![CDATA[{"key":"gallery_bandwidth_period","default":"8760","report":"full"}]]></setting>
<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>
+13 -13
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/browse" javascript_name="ips.browse.lightbox.js" javascript_type="controller" javascript_version="105100" javascript_position="1000200"><![CDATA[/**
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.lightbox.js" javascript_type="controller" javascript_version="106107" javascript_position="1000200"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -193,7 +193,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.list.js" javascript_type="controller" javascript_version="105100" javascript_position="1000200">/**
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.list.js" javascript_type="controller" javascript_version="106107" javascript_position="1000200">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -241,7 +241,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="105100" 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="106107" javascript_position="1000050">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -298,7 +298,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="105100" 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="106107" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -498,7 +498,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="105100" 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="106107" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -545,7 +545,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="105100" 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="106107" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -676,7 +676,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="105100" 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="106107" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -1409,7 +1409,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="105100" javascript_position="1000150"><![CDATA[/**
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.image.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -2184,7 +2184,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.note.js" javascript_type="controller" javascript_version="105100" javascript_position="1000150"><![CDATA[/**
<file javascript_app="gallery" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.note.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -2650,7 +2650,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="105100" 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="106107" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -2733,7 +2733,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="gallery" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.browse.js" javascript_type="template" javascript_version="105100" javascript_position="1000050"><![CDATA[ips.templates.set('gallery.patchwork.indexItem', " \
<file javascript_app="gallery" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.browse.js" javascript_type="template" javascript_version="106107" javascript_position="1000050"><![CDATA[ips.templates.set('gallery.patchwork.indexItem', " \
{{#showThumb}}\
<span class='cGalleryPatchwork_item' style='width: {{dims.width}}px; height: {{dims.height}}px; margin: {{dims.margin}}px {{dims.marginRight}}px {{dims.margin}}px {{dims.marginLeft}}px'>\
{{/showThumb}}\
@@ -2848,7 +2848,7 @@ ips.templates.set('gallery.lightbox.wrapper', " \
<div class='cLightboxBack'></div>\
</div>\
");]]></file>
<file javascript_app="gallery" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.submit.js" javascript_type="template" javascript_version="105100" javascript_position="1000050"><![CDATA[ips.templates.set('gallery.submit.imageItem', " \
<file javascript_app="gallery" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.submit.js" javascript_type="template" javascript_version="106107" javascript_position="1000050"><![CDATA[ips.templates.set('gallery.submit.imageItem', " \
<div class='ipsAttach ipsImageAttach ipsPad_half ipsAreaBackground_light {{#done}}ipsAttach_done{{/done}}' id='{{id}}' data-role='file' data-fileid='{{id}}' data-fullsizeurl='{{imagesrc}}' data-thumbnailurl='{{thumbnail}}' data-isImage='1'>\
<ul class='ipsList_inline 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 fa-plus'></i></a></li>\
@@ -2875,7 +2875,7 @@ ips.templates.set('gallery.lightbox.wrapper', " \
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="105100" 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="106107" 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'>\
+12 -2
View File
@@ -1,21 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="gallery" version="105100">
<app key="gallery" version="106107">
<word key="__app_gallery" js="0">Gallery</word>
<word key="frontnavigation_gallery" js="0">Gallery</word>
<word key="gallery_title" js="0">Gallery</word>
<word key="__indefart_gallery_image_comment" js="0">a comment on a gallery image</word>
<word key="__indefart_gallery_image" js="0">a gallery image</word>
<word key="__defart_gallery_image_comment" js="0">comment on a gallery image</word>
<word key="__defart_gallery_image_comment_plural" js="0">{!#[1:comment][?:comments]} on a gallery image</word>
<word key="__defart_gallery_image" js="0">gallery image</word>
<word key="__defart_gallery_image_plural" js="0">gallery {!#[1:image][?:images]}</word>
<word key="__indefart_gallery_album_comment" js="0">a comment on a gallery album</word>
<word key="__indefart_gallery_album" js="0">a gallery album</word>
<word key="__defart_gallery_album_comment" js="0">comment on a gallery album</word>
<word key="__defart_gallery_album_comment_plural" js="0">{!#[1:comment][?:comments]} on a gallery album</word>
<word key="__defart_gallery_album" js="0">gallery album</word>
<word key="__defart_gallery_album_plural" js="0">gallery {!#[1:album][?:albums]}</word>
<word key="__indefart_gallery_image_review" js="0">a review on a gallery image</word>
<word key="__defart_gallery_image_review" js="0">review on a gallery image</word>
<word key="__defart_gallery_image_review_plural" js="0">{!#[1:review][?:reviews]} on a gallery image</word>
<word key="__indefart_gallery_album_review" js="0">a review on a gallery album</word>
<word key="__defart_gallery_album_review" js="0">review on a gallery album</word>
<word key="__defart_gallery_album_review_plural" js="0">{!#[1:review][?:reviews]} on a gallery album</word>
<word key="module__gallery_stats" js="0">Statistics</word>
<word key="search_contextual_item_gallery_image" js="0">This Image</word>
<word key="album_user_own_activity_item" js="0">%2$s added images to %1$s in </word>
@@ -244,7 +250,8 @@
<word key="gallery_bandwidth" js="0">Bandwidth Logging</word>
<word key="gallery_detailed_bandwidth" js="0">Store detailed bandwidth logs</word>
<word key="gallery_detailed_bandwidth_desc" js="0">Enabling this setting will cause Gallery image views to tracked. You can then use the bandwidth logs to see how much bandwidth image views consume over periods of time, and you can view bandwidth statistics on a per-member basis when editing members.</word>
<word key="gallery_bandwidth_period" js="0">Number of hours to keep bandwidth logs</word>
<word key="gallery_bandwidth_period" js="0">Keep logs for</word>
<word key="gallery_bandwidth_period_desc" js="0">Detailed bandwidth logs older than this timeframe will be pruned to improve performance. Certain statistics requiring these logs will no longer be available once the bandwidth logs are pruned.</word>
<word key="gallery_options" js="0">General Options</word>
<word key="gallery_rss_enabled" js="0">Enable latest images RSS feed</word>
<word key="gallery_rebuildimages" js="0">Rebuilding images</word>
@@ -438,6 +445,9 @@
<word key="image_tools" js="0">Image Tools</word>
<word key="image_share" js="0">Share</word>
<word key="cannot_download_original_image" js="0">You do not have permission to download images</word>
<word key="gallery_unset_cover" js="0">Remove cover photo</word>
<word key="gallery_unset_cover_error" js="0">You do not have permission to remove the cover photo</word>
<word key="gallery_cover_photo_isunset" js="0">The cover photo has been removed</word>
<word key="cat_img_count" js="0">{# [1:image][?:images]}</word>
<word key="cat_album_count" js="0">{# [1:album][?:albums]}</word>
<word key="cat_comment_count" js="0">{# [1:comment][?:comments]}</word>
+122 -4
View File
@@ -647,6 +647,20 @@
"album_type",
"album_name"
]
},
"album_type": {
"type": "key",
"name": "album_type",
"columns": [
"album_type",
"album_owner_id",
"album_hidden"
],
"length": [
null,
null,
null
]
}
},
"comment": "",
@@ -1219,6 +1233,30 @@
"zerofill": false,
"auto_increment": false,
"binary": false
},
"category_allow_anonymous": {
"name": "category_allow_anonymous",
"type": "TINYINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": true,
"auto_increment": false
},
"category_last_poster_anon": {
"name": "category_last_poster_anon",
"type": "TINYINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": true,
"auto_increment": false
}
},
"indexes": {
@@ -1443,6 +1481,18 @@
"unsigned": false,
"values": [],
"zerofill": false
},
"comment_is_anon": {
"name": "comment_is_anon",
"type": "TINYINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": true,
"auto_increment": false
}
},
"indexes": {
@@ -2184,6 +2234,30 @@
"comment": "",
"unsigned": true,
"auto_increment": false
},
"image_last_poster_anon": {
"name": "image_last_poster_anon",
"type": "TINYINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": "",
"comment": "",
"unsigned": true,
"auto_increment": false
},
"image_is_anon": {
"name": "image_is_anon",
"type": "TINYINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": true,
"auto_increment": false
}
},
"indexes": {
@@ -2200,11 +2274,15 @@
"member_id": {
"type": "key",
"name": "member_id",
"length": [
null
],
"columns": [
"image_member_id"
"image_member_id",
"image_approved",
"image_date"
],
"length": [
null,
null,
null
]
},
"im_select": {
@@ -2328,6 +2406,34 @@
"image_pinned",
"image_updated"
]
},
"image_comments": {
"type": "key",
"name": "image_comments",
"columns": [
"image_category_id",
"image_approved",
"image_comments"
],
"length": [
null,
null,
null
]
},
"image_comments_unapproved": {
"type": "key",
"name": "image_comments_unapproved",
"columns": [
"image_category_id",
"image_approved",
"image_unapproved_comments"
],
"length": [
null,
null,
null
]
}
},
"collation": "utf8mb4_unicode_ci",
@@ -2952,6 +3058,18 @@
"unsigned": false,
"values": [],
"zerofill": false
},
"comment_is_anon": {
"name": "comment_is_anon",
"type": "TINYINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": false,
"auto_increment": false
}
},
"indexes": {
+1 -1
View File
@@ -1,7 +1,7 @@
[
{
"key": "gallery_bandwidth_period",
"default": "-1",
"default": "8760",
"report": "full"
},
{
+239 -77
View File
@@ -105,12 +105,12 @@
<ul id='elAlbumActions_menu' class='ipsMenu ipsMenu_auto ipsHide'>
{{if $album->asItem()->canReportOrRevoke() === TRUE}}
<li class='ipsMenu_item'>
<a href='{$album->url()->setQueryString('do', 'report')}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_album"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_album"}">{lang="report_album"}</a>
<a href='{$album->url()->setQueryString('do', 'report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_album"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}"{{endif}} title="{lang="report_album"}">{lang="report_album"}</a>
</li>
<li class='ipsMenu_sep'><hr></li>
{{endif}}
{{if $album->asItem()->canEdit() }}
<li class='ipsMenu_item'><a href='{$album->url()->setQueryString( array( 'do' => 'editAlbum', 'csrfKey' => \IPS\Session::i()->csrfKey ) )}' title="{lang="edit_album"}" data-ipsDialog data-ipsDialog-title="{lang="edit_album"}">{lang="edit_album"}</a></li>
<li class='ipsMenu_item'><a href='{$album->url()->setQueryString( array( 'do' => 'editAlbum' ) )}' title="{lang="edit_album"}" data-ipsDialog data-ipsDialog-title="{lang="edit_album"}">{lang="edit_album"}</a></li>
{{endif}}
{{if $album->asItem()->canFeature()}}
@@ -120,7 +120,7 @@
<li class='ipsMenu_item'><a href='{$album->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unfeature' ) )}' title="{lang="unfeature_title_album"}">{lang="unfeature"}</a></li>
{{endif}}
{{if $album->asItem()->canHide()}}
<li class='ipsMenu_item'><a href='{$album->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}' title="{lang="hide_title_album"}" data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
<li class='ipsMenu_item'><a href='{$album->url()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}' title="{lang="hide_title_album"}" data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
{{endif}}
{{if $album->asItem()->canUnhide()}}
<li class='ipsMenu_item'><a href='{$album->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unhide' ) )}' title="{{if $album->asItem()->hidden() === 1}}{lang="approve_title_album"}{{else}}{lang="unhide_title_album"}{{endif}}">{{if $album->asItem()->hidden() === 1}}{lang="approve"}{{else}}{lang="unhide"}{{endif}}</a></li>
@@ -136,17 +136,21 @@
{{endif}}
{{if $album->canDelete() }}
<li class='ipsMenu_item'><a href='{$album->url()->setQueryString( array( 'do' => 'deleteAlbum', 'csrfKey' => \IPS\Session::i()->csrfKey ) )}' data-ipsDialog data-ipsDialog-title="{lang="delete_album"}" title="{lang="delete_album"}">{lang="delete_album"}</a></li>
<li class='ipsMenu_item'><a href='{$album->url()->csrf()->setQueryString( array( 'do' => 'deleteAlbum' ) )}' data-ipsDialog data-ipsDialog-title="{lang="delete_album"}" title="{lang="delete_album"}">{lang="delete_album"}</a></li>
{{endif}}
{{if $album->cover_img_id AND \IPS\gallery\Image::modPermission( 'edit', \IPS\Member::loggedIn(), $album )}}
<li class='ipsMenu_item'><a href='{$album->url()->setQueryString( array( 'do' => 'unsetCoverPhoto', 'csrfKey' => \IPS\Session::i()->csrfKey ) )}' title='{lang="gallery_unset_cover"}'>{lang="gallery_unset_cover"}</a></li>
{{endif}}
{{if $album->asItem()->canOnMessage( 'add' )}}
<li class='ipsMenu_item'><a href='{$album->url()->csrf()->setQueryString( array( 'do' => 'messageForm' ) )}' data-ipsDialog data-ipsDialog-title='{lang="add_message"}'>{lang="add_message"}</a></li>
<li class='ipsMenu_item'><a href='{$album->url()->setQueryString( array( 'do' => 'messageForm' ) )}' data-ipsDialog data-ipsDialog-title='{lang="add_message"}'>{lang="add_message"}</a></li>
{{endif}}
</ul>
</li>
{{elseif $album->asItem()->canReportOrRevoke() === TRUE}}
<li>
<a href='{$album->url()->setQueryString('do', 'report')}' class='ipsButton ipsButton_link ipsButton_verySmall ipsButton_fullWidth' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_album"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_album"}">{lang="report_album"}</a>
<a href='{$album->url()->setQueryString('do', 'report')}' class='ipsButton ipsButton_link ipsButton_verySmall ipsButton_fullWidth' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_album"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}"{{endif}} title="{lang="report_album"}">{lang="report_album"}</a>
</li>
{{endif}}
</ul>
@@ -511,7 +515,7 @@
</div>
</div>
{{if $category->can('add')}}
{{if $category->can('add') and ( $category->allow_albums != 2 or member.group['g_create_albums'] or \IPS\gallery\Album::loadForSubmit( $category ) )}}
<ul class="ipsToolList ipsToolList_horizontal ipsClearfix ipsSpacer_bottom">
{template="categoryButtons" group="browse" params="$category->can('add'), $category, NULL"}
</ul>
@@ -545,7 +549,13 @@
{{endif}}]]></template>
<template template_group="browse" template_name="categoryButtons" template_data="$canSubmitImages, $currentCategory=NULL, $currentAlbum=NULL" template_location="front" template_app="gallery"><![CDATA[<li class='ipsToolList_primaryAction'>
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" data-ipsDialog data-ipsDialog-close='false' data-ipsDialog-size='medium' data-ipsDialog-extraClass='cGalleryDialog_outer' data-ipsDialog-destructOnClose='true' data-ipsDialog-remoteSubmit='true' {{if $currentAlbum}}href="{url="app=gallery&module=gallery&controller=submit&category={$currentCategory->id}&album={$currentAlbum->id}&_new=1" seoTemplate="gallery_submit"}" {{elseif $currentCategory}} href="{url="app=gallery&module=gallery&controller=submit&category={$currentCategory->id}&_new=1" seoTemplate="gallery_submit"}" {{else}} href="{url="app=gallery&module=gallery&controller=submit&_new=1" seoTemplate="gallery_submit"}" {{endif}}>{lang="add_gallery_image"}</a>
</li>]]></template>
</li>
{{if $currentCategory AND $currentCategory->cover_img_id AND \IPS\gallery\Image::modPermission( 'edit', \IPS\Member::loggedIn(), $currentCategory )}}
<li>
<a href="{$currentCategory->url()->setQueryString( array( 'do' => 'unsetCoverPhoto' ) )->csrf()}" title='{lang="gallery_unset_cover"}' class='ipsButton ipsButton_medium ipsButton_fullWidth ipsButton_link'>{lang="gallery_unset_cover"}</a>
</li>
{{endif}}]]></template>
<template template_group="browse" template_name="categoryGrid" template_data="$categories" template_location="front" template_app="gallery"><![CDATA[
{{if \count( $categories )}}
<div class='cGalleryCats ipsBox_alt ipsClear ipsClearfix'>
@@ -569,7 +579,11 @@
{{if $category->allow_albums}}
<li class='ipsPos_right' data-ipsTooltip title='{lang="cat_album_count" pluralize="$category->public_albums"}'><i class='fa fa-th-large'></i> {$category->public_albums}</li>
{{endif}}
<li class='ipsPos_right' data-ipsTooltip title='{lang="cat_img_count" pluralize="\IPS\gallery\Image::contentCount( $category )"}'><i class='fa fa-camera'></i> {expression="\IPS\gallery\Image::contentCount( $category )"}</li>
{{$imageCount = $category->count_imgs;}}
{{if $category->_items === NULL AND $imageCount < 1000}}
{{$imageCount = \IPS\gallery\Image::contentCount( $category );}}
{{endif}}
<li class='ipsPos_right' data-ipsTooltip title='{lang="cat_img_count" pluralize="$imageCount"}'><i class='fa fa-camera'></i> {expression="$imageCount"}</li>
</ul>
</a>
</li>
@@ -700,11 +714,9 @@
</ul>
</form>
{{if $table->pages > 1}}
<div data-role="tablePagination">
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit"}
</div>
{{endif}}
<div data-role="tablePagination" {{if $table->pages <= 1}}class='ipsHide'{{endif}}>
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit"}
</div>
</div>
{{endif}}
@@ -799,14 +811,10 @@
</div>
</form>
{{endif}}
{{if $table->pages > 1}}
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear">
<div data-role="tablePagination">
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit"}
</div>
</div>
{{endif}}
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear {{if $table->pages <= 1}}ipsHide{{endif}}" data-role="tablePagination">
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit"}
</div>
</div>]]></template>
<template template_group="browse" template_name="index" template_data="$featured, $new" template_location="front" template_app="gallery"><![CDATA[<div class="ipsPageHeader ipsClearfix ipsMargin_bottom ipsHeaderButtons ipsFlex ipsFlex-ai:center ipsFlex-jc:between">
<h1 class="ipsType_pageTitle ipsFlex-flex:11 ipsType_break">{lang="gallery_title"}</h1>
@@ -1169,6 +1177,162 @@
</div>
</div>
</div>]]></template>
<template template_group="forms" template_name="imageUpload" template_data="$name, $value, $minimize, $maxFileSize, $maxFiles, $maxChunkSize, $totalMaxSize, $allowedFileTypes, $pluploadKey, $multiple=FALSE, $editor=FALSE, $forceNoscript=FALSE, $template='core.attachments.fileItem', $existing=array(), $default=NULL, $supportsDelete = TRUE, $maxImageDims = NULL, $allowStockPhotos=FALSE" template_location="front" template_app="gallery"><![CDATA[<input name="{$name}" type="hidden" value="{$pluploadKey}">
{{if $forceNoscript}}
<input name="{$name}_noscript[]" type="file" {{if $multiple}}multiple{{endif}}>
<span class="ipsType_light ipsType_small">
{{if $allowedFileTypes !== NULL}}
<strong>{lang="form_upload_accepted"}</strong>
{expression="implode( ', ', $allowedFileTypes )"}
{{endif}}
{{if $multiple and $totalMaxSize}}
{{if $allowedFileTypes !== NULL}}
&middot;
{{endif}}
<strong>{lang="form_upload_total_max"}</strong>
{filesize="$totalMaxSize * 1048576"}
{{endif}}
{{if !$multiple or !$totalMaxSize or $maxChunkSize < $totalMaxSize}}
{{if $allowedFileTypes !== NULL or ( $multiple and $totalMaxSize )}}
&middot;
{{endif}}
<strong>{lang="form_upload_max"}</strong>
{$maxChunkSize}MB
{{endif}}
{{if $maxFiles}}
<br>{lang="form_upload_max_files" pluralize="$maxFiles"}
{{endif}}
</span>
{{else}}
<noscript>
<input name="{$name}_noscript[]" type="file" {{if $multiple}}multiple{{endif}}>
<span class="ipsType_light ipsType_small">
{{if $allowedFileTypes !== NULL}}
<strong>{lang="form_upload_accepted"}</strong>
{expression="implode( ', ', $allowedFileTypes )"}
{{endif}}
{{if $multiple and $totalMaxSize}}
{{if $allowedFileTypes !== NULL}}
&middot;
{{endif}}
<strong>{lang="form_upload_total_max"}</strong>
{filesize="$totalMaxSize * 1048576"}
{{endif}}
{{if !$multiple or !$totalMaxSize or $maxChunkSize < $totalMaxSize}}
{{if $allowedFileTypes !== NULL or ( $multiple and $totalMaxSize )}}
&middot;
{{endif}}
<strong>{lang="form_upload_max"}</strong>
{$maxChunkSize}MB
{{endif}}
{{if $maxFiles}}
<br>{lang="form_upload_max_files" pluralize="$maxFiles"}
{{endif}}
</span>
</noscript>
{{if $value}}
{{foreach $value as $id => $file}}
<input type="hidden" name="{$name}_existing[{$id}]" value="{$file->tempId}">
{{endforeach}}
{{endif}}
<div id="{$name}_drop_{expression="md5( mt_rand() )"}"
data-ipsUploader
{{if $maxFileSize}}data-ipsUploader-maxFileSize="{expression="number_format( $maxFileSize, 3, '.', '' )"}"{{endif}}
{{if $maxFiles}}data-ipsUploader-maxFiles="{$maxFiles}"{{endif}}
data-ipsUploader-maxChunkSize="{expression="number_format( $maxChunkSize, 3, '.', '' )"}"
{{if $allowedFileTypes}}data-ipsUploader-allowedFileTypes='{expression="json_encode( $allowedFileTypes )"}'{{endif}}
data-ipsUploader-name="{$name}"
data-ipsUploader-key="{$pluploadKey}"
{{if $multiple}}data-ipsUploader-multiple {{if $totalMaxSize}}data-ipsUploader-maxTotalSize="{expression="number_format( $totalMaxSize, 3, '.', '' )"}"{{endif}}{{endif}}
{{if $minimize}}data-ipsUploader-minimized{{endif}}
{{if $editor}}data-ipsUploader-insertable{{endif}}
data-ipsUploader-template='{$template}'
data-ipsUploader-existingFiles='{expression="json_encode( $existing )"}'
{{if isset( $default )}}data-ipsUploader-default='{$default}'{{endif}}
{{if $supportsDelete}}data-ipsUploader-supportsDelete{{else}}data-ipsUploader-supportsDelete='false'{{endif}}
{{if $maxImageDims}}data-ipsUploader-maxImageDims="{$maxImageDims}"{{endif}}
{{if $allowStockPhotos}}data-ipsUploader-allowStockPhotos="{$allowStockPhotos}"{{endif}}
>
<div class="ipsAttachment_dropZone {{if $minimize}}ipsAttachment_dropZoneSmall{{endif}} ipsClearfix">
{{if $minimize}}
<a href="#" data-action='uploadFile' class="ipsButton ipsButton_small ipsButton_primary ipsPos_left" id="{$name}_browse_{expression="md5( mt_rand() )"}">{{if $multiple}}{lang="form_upload_choose"}{{else}}{lang="form_upload_choose_one"}{{endif}}</a>
{{if $allowStockPhotos}}
<a href="#" data-action='stockPhoto' class="ipsButton ipsButton_small ipsButton_veryLight ipsPos_left" id="{$name}_stockphoto_{expression="md5( mt_rand() )"}">{lang="form_upload_stockart_choose"}</a>
{{endif}}
<div class="ipsAttachment_loading ipsLoading_small ipsPos_left ipsHide"><i class='fa fa-circle-o-notch fa-spin fa-fw'></i></div>
<div class='ipsAttachment_dropZoneSmall_info'>
<span class="ipsAttachment_supportDrag">{{if $multiple}}{lang="form_upload_dad_mini"}{{else}}{lang="form_upload_dad_mini_one"}{{endif}}<br></span>
<span class="ipsType_light ipsType_small">
{{if $allowedFileTypes !== NULL}}
<strong>{lang="form_upload_accepted"}</strong>
{expression="implode( ', ', $allowedFileTypes )"}
{{endif}}
{{if $multiple and $totalMaxSize}}
{{if $allowedFileTypes !== NULL}}
&middot;
{{endif}}
<strong>{lang="form_upload_total_max"}</strong>
{filesize="$totalMaxSize * 1048576"}
{{endif}}
{{if $maxFileSize and ( !$multiple or !$totalMaxSize or $maxFileSize < $totalMaxSize )}}
{{if $allowedFileTypes !== NULL or ( $multiple and $totalMaxSize )}}
&middot;
{{endif}}
<strong>{lang="form_upload_max"}</strong>
{expression="round($maxFileSize,2)"}MB
{{endif}}
{{if $maxFiles}}
<br>{lang="form_upload_max_files" pluralize="$maxFiles"}
{{endif}}
</span>
</div>
{{else}}
<i class="fa fa-cloud-upload"></i>
<span class="ipsAttachment_supportDrag">{{if $multiple}}{lang="form_upload_dad"}{{else}}{lang="form_upload_dad_one"}{{endif}}<br></span>
<a href="#" data-action='uploadFile' class="ipsButton ipsButton_verySmall ipsButton_primary" id="{$name}_browse_{expression="md5( mt_rand() )"}">{{if $multiple}}{lang="form_upload_choose"}{{else}}{lang="form_upload_choose_one"}{{endif}}</a>
{{if $allowStockPhotos}}
<a href="#" data-action='stockPhoto' class="ipsButton ipsButton_verySmall ipsButton_light" id="{$name}_stockphoto_{expression="md5( mt_rand() )"}">{lang="form_upload_stockart_choose"}</a>
{{endif}}
<div class="ipsAttachment_loading ipsLoading_small ipsHide"><i class='fa fa-circle-o-notch fa-spin fa-fw'></i></div>
<br>
<span class="ipsType_light ipsType_small">
{{if $allowedFileTypes !== NULL}}
<strong>{lang="form_upload_accepted"}</strong>
{expression="implode( ', ', $allowedFileTypes )"}
{{endif}}
{{if $multiple and $totalMaxSize}}
{{if $allowedFileTypes !== NULL}}
&middot;
{{endif}}
<strong>{lang="form_upload_total_max"}</strong>
{filesize="$totalMaxSize * 1048576"}
{{endif}}
{{if $maxFileSize and ( !$multiple or !$totalMaxSize or $maxFileSize < $totalMaxSize )}}
{{if $allowedFileTypes !== NULL or ( $multiple and $totalMaxSize )}}
&middot;
{{endif}}
<strong>{lang="form_upload_max"}</strong>
{expression="round($maxFileSize,2)"}MB
{{endif}}
{{if $maxFiles}}
<br>{lang="form_upload_max_files" pluralize="$maxFiles"}
{{endif}}
</span>
{{endif}}
</div>
<div class="ipsAttachment_fileList ipsScrollbar">
<div data-role='fileList'></div>
<noscript>
{{if $value}}
{{foreach $value as $id => $file}}
{template="uploadFile" group="forms" location="global" app="core" params="$id, $file, $name, $editor, ( $template === 'core.attachments.imageItem' )"}
{{endforeach}}
{{endif}}
</noscript>
</div>
</div>
{{endif}}]]></template>
<template template_group="forms" template_name="reviewTemplate" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class=''" template_location="front" template_app="gallery"><![CDATA[<div class='ipsClearfix' data-controller='core.front.core.reviewForm'>
<div>
<form accept-charset='utf-8' class="ipsForm" action="{$action->setQueryString( '_review', 1 )}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}}>
@@ -1292,7 +1456,10 @@
{template="userPhoto" app="core" group="global" params="$comment->author(), 'mini', $comment->warningRef()"}
<div>
<h3 class='ipsComment_author ipsType_blendLinks'>
<strong class='ipsType_normal'>{template="userLink" app="core" group="global" params="$comment->author(), $comment->warningRef()"}</strong>
<strong class='ipsType_normal'>{template="userLink" app="core" group="global" params="$comment->author(), $comment->warningRef(), NULL, $comment->isAnonymous()"}</strong>
{{if $comment instanceof \IPS\Content\Anonymous and $comment->isAnonymous() and \IPS\Member::loggedIn()->modPermission('can_view_anonymous_posters')}}
<a data-ipsHover data-ipsHover-width="370" data-ipsHover-onClick href="{$comment->url( 'reveal' )->csrf()}"><span class="cAuthorPane_badge cAuthorPane_badge_small cAuthorPane_badge--anon" data-ipsTooltip title="{lang="post_anonymously_reveal"}"></span></a>
{{endif}}
{template="reputationBadge" group="global" app="core" params="$comment->author()"}
</h3>
<p class='ipsComment_meta ipsType_light ipsType_medium'>
@@ -1319,14 +1486,12 @@
{{if $comment->hidden() !== 1 && ( $comment->canReportOrRevoke() === TRUE || \count( $comment->sharelinks() ) || $comment->canEdit() || $comment->canPromoteToSocialMedia() || $comment->canDelete() || $comment->canSplit() || ( $comment instanceof \IPS\Content\Hideable AND ( ( !$comment->hidden() and $comment->canHide() ) || ( $comment->hidden() and $comment->canUnhide() ) ) ) || ( $comment->hidden() == -2 AND \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content') ) || \count( $item->commentMultimodActions() ) )}}
<ul class='ipsList_reset ipsComment_tools'>
<li>
<a href='#elControls_{$comment->$idField}_menu' class='ipsComment_ellipsis' id='elControls_{$comment->$idField}' data-ipsMenu data-ipsMenu-appendTo='#comment-{$comment->$idField}_wrap'><i class='fa fa-ellipsis-h'></i></a>
<ul id='elControls_{$comment->$idField}_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
<a href='#elControlsComments_{$comment->$idField}_menu' class='ipsComment_ellipsis' id='elControlsComments_{$comment->$idField}' data-ipsMenu data-ipsMenu-appendTo='#comment-{$comment->$idField}_wrap'><i class='fa fa-ellipsis-h'></i></a>
<ul id='elControlsComments_{$comment->$idField}_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
{{if $comment->canReportOrRevoke() === TRUE}}
<li class='ipsMenu_item'><a href='{$comment->url('report')}' data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}" data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a></li>
<li class='ipsMenu_item'><a href='{$comment->url('report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}"{{endif}} data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a></li>
{{endif}}
{{if \count( $comment->sharelinks() )}}
<li class='ipsMenu_item'><a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-content='#elShareComment_{$comment->id}_menu' data-ipsDialog-title="{lang="share_this_comment"}" id='elShareComment_{$comment->id}' data-role='shareComment'>{lang="share"}</a></li>
{{endif}}
{{if $comment->canReportOrRevoke() === TRUE || \count( $comment->sharelinks() )}}
{{if $comment->canEdit() || $comment->canPromoteToSocialMedia() || $comment->canDelete() || $comment->canSplit() || ( $comment instanceof \IPS\Content\Hideable AND ( ( !$comment->hidden() and $comment->canHide() ) || ( $comment->hidden() and $comment->canUnhide() ) ) ) || ( $comment->hidden() == -2 AND \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content') )}}
<li class='ipsMenu_sep'><hr></li>
@@ -1346,7 +1511,7 @@
{{else}}
{{if $comment instanceof \IPS\Content\Hideable}}
{{if !$comment->hidden() and $comment->canHide()}}
<li class='ipsMenu_item'><a href='{$comment->url('hide')->csrf()}' data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
<li class='ipsMenu_item'><a href='{$comment->url('hide')}' data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
{{elseif $comment->hidden() and $comment->canUnhide()}}
<li class='ipsMenu_item'><a href='{$comment->url('unhide')->csrf()}'>{lang="unhide"}</a></li>
{{endif}}
@@ -1361,7 +1526,7 @@
<li class='ipsMenu_item'><a href='{$comment->url('unfeature')->csrf()->setPage('page',\IPS\Request::i()->page)}' data-action="unrecommendComment">{lang="unrecommend_content"}</a></li>
{{endif}}
{{if !$comment->isFeatured() AND $item->canFeatureComment()}}
<li class='ipsMenu_item'><a href='{$comment->url('feature')->csrf()->setPage('page', \IPS\Request::i()->page)}' data-ipsDialog data-ipsDialog-title='{lang="recommend_comment"}' data-ipsDialog-remoteSubmit data-ipsDialog-size='narrow' data-action="recommendComment">{lang="recommend_content"}</a></li>
<li class='ipsMenu_item'><a href='{$comment->url('feature')->setPage('page', \IPS\Request::i()->page)}' data-ipsDialog data-ipsDialog-title='{lang="recommend_comment"}' data-ipsDialog-remoteSubmit data-ipsDialog-size='narrow' data-action="recommendComment">{lang="recommend_content"}</a></li>
{{endif}}
{{if $comment->canPromoteToSocialMedia()}}
<li class='ipsMenu_item'>{template="promoteLink" app="core" group="global" params="$comment"}</li>
@@ -1406,8 +1571,8 @@
{{endif}}
{{if $comment->canEdit() || $comment->canSplit() || $comment->canHide()}}
<li>
<a href='#elControls_{$comment->$idField}_menu' id='elControls_{$comment->$idField}' data-ipsMenu data-ipsMenu-appendTo='#comment-{$comment->$idField}_wrap'>{lang="moderator_tools"} &nbsp;<i class='fa fa-caret-down'></i></a>
<ul id='elControls_{$comment->$idField}_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
<a href='#elControlsCommentsSub_{$comment->$idField}_menu' id='elControlsCommentsSub_{$comment->$idField}' data-ipsMenu data-ipsMenu-appendTo='#comment-{$comment->$idField}_wrap'>{lang="moderator_tools"} &nbsp;<i class='fa fa-caret-down'></i></a>
<ul id='elControlsCommentsSub_{$comment->$idField}_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
{{if $comment->canEdit()}}
{{if $comment->mapped('first') and $comment->item()->canEdit()}}
<li class='ipsMenu_item'><a href='{$comment->item()->url()->setQueryString( 'do', 'edit' )}'>{lang="edit"}</a></li>
@@ -1448,14 +1613,7 @@
<a href='{url="app=core&module=modcp&controller=modcp&tab=ip_tools&ip=$comment->ip_address" seoTemplate="modcp_ip_tools"}' class='ipsButton ipsButton_light ipsButton_small ipsButton_fullWidth'>{lang="more_about_ip_address"} <i class='fa fa-angle-right'></i></a>
</div>
{{endif}}
<div class='ipsPadding ipsHide cPostShareMenu' id='elShareComment_{$comment->id}_menu'>
<h5 class='ipsType_normal ipsType_reset'>{lang="link_to_comment"}</h5>
<input type='text' value='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' class='ipsField_fullWidth'>
{{if \count( $comment->sharelinks() )}}
<h5 class='ipsType_normal ipsType_reset ipsSpacer_top'>{lang="share_externally"}</h5>
{template="sharelinks" group="global" app="core" params="$comment"}
{{endif}}
</div>
{template="sharemenu" group="global" app="core" params="$comment"}
</div>]]></template>
<template template_group="global" template_name="commentContainer" template_data="$item, $comment" template_location="front" template_app="gallery"><![CDATA[{{$idField = $comment::$databaseColumnId;}}
{{$itemClassSafe = str_replace( '\\', '_', mb_substr( $comment::$itemClass, 4 ) );}}
@@ -2006,12 +2164,9 @@
</div>]]></template>
<template template_group="global" template_name="profileAlbumTable" template_data="$table, $headers, $rows, $quickSearch" template_location="front" template_app="gallery"><![CDATA[
<div data-baseurl='{$table->baseUrl}' data-resort='{$table->resortKey}' data-pageParam='albumPage' data-controller='core.global.core.table{{if $table->canModerate()}},core.front.core.moderation{{endif}}'>
{{if $table->pages > 1}}
<div data-role="tablePagination">
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, 'albumPage'"}
</div>
<br>
{{endif}}
<div data-role="tablePagination" class='ipsSpacer_bottom {{if $table->pages <= 1}}ipsHide{{endif}}'>
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, 'albumPage'"}
</div>
<ol class='ipsList_reset ipsClear ipsGrid ipsGrid_collapsePhone' data-role='tableRows' data-controller='gallery.front.browse.list' id='elTable_{$table->uniqueId}'>
{template="$table->rowsTemplate[1]" params="$table, $headers, $rows" object="$table->rowsTemplate[0]"}
@@ -2054,11 +2209,11 @@
<div class='ipsType_reset ipsType_light ipsType_blendLinks ipsComment_toolWrap'>
<ul class='ipsList_reset ipsComment_tools'>
<li>
<a href='#elControls_{$review->id}_menu' class='ipsComment_ellipsis' id='elControls_{$review->id}' title='{lang="more_options"}' data-ipsMenu data-ipsMenu-appendTo='#review-{$review->id}_wrap'><i class='fa fa-ellipsis-h'></i></a>
<ul id='elControls_{$review->id}_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
<a href='#elControlsReviews_{$review->id}_menu' class='ipsComment_ellipsis' id='elControlsReviews_{$review->id}' title='{lang="more_options"}' data-ipsMenu data-ipsMenu-appendTo='#review-{$review->id}_wrap'><i class='fa fa-ellipsis-h'></i></a>
<ul id='elControlsReviews_{$review->id}_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
{{if $review->canReportOrRevoke() === TRUE}}
<li class='ipsMenu_item'>
<a href='{$review->url('report')}' data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}" data-action='reportComment' title='{lang="report"}'>{lang="report"}</a>
<a href='{$review->url('report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}"{{endif}} data-action='reportComment' title='{lang="report"}'>{lang="report"}</a>
</li>
{{endif}}
<li class='ipsMenu_item'>
@@ -2080,7 +2235,7 @@
{{else}}
{{if $review instanceof \IPS\Content\Hideable}}
{{if !$review->hidden() and $review->canHide()}}
<li class='ipsMenu_item'><a href='{$review->url('hide')->csrf()}' data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
<li class='ipsMenu_item'><a href='{$review->url('hide')}' data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
{{elseif $review->hidden() and $review->canUnhide()}}
<li class='ipsMenu_item'><a href='{$review->url('unhide')->csrf()}'>{lang="unhide"}</a></li>
{{endif}}
@@ -2129,8 +2284,8 @@
{{endif}}
{{if $review->canEdit() || $review->canSplit()}}
<li>
<a href='#elControls_{$review->id}_menu' id='elControls_{$review->id}' data-ipsMenu data-ipsMenu-appendTo='#review-{$review->id}_wrap'>{lang="options"} &nbsp;<i class='fa fa-caret-down'></i></a>
<ul id='elControls_{$review->id}_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
<a href='#elControlsReviewsSub_{$review->id}_menu' id='elControlsReviewsSub_{$review->id}' data-ipsMenu data-ipsMenu-appendTo='#review-{$review->id}_wrap'>{lang="options"} &nbsp;<i class='fa fa-caret-down'></i></a>
<ul id='elControlsReviewsSub_{$review->id}_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
{{if $review->canEdit()}}
{{if $review->mapped('first') and $review->item()->canEdit()}}
<li class='ipsMenu_item'><a href='{$review->item()->url()->setQueryString( 'do', 'edit' )}'>{lang="edit"}</a></li>
@@ -2152,11 +2307,8 @@
{{endif}}
</div>
{{endif}}
<div class='ipsPadding ipsHide cPostShareMenu' id='elShareReview_{$review->id}_menu'>
<h5 class='ipsType_normal ipsType_reset'>{lang="link_to_comment"}</h5>
<input type='text' value='{$review->item()->url()->setQueryString( array( 'do' => 'findReview', 'review' => $review->id ) )}' class='ipsField_fullWidth'>
</div>
{template="sharemenu" group="global" app="core" params="$review"}
</div>]]></template>
<template template_group="global" template_name="reviewContainer" template_data="$item, $review" template_location="front" template_app="gallery"><![CDATA[{{$idField = $review::$databaseColumnId;}}
{{if $review->isIgnored()}}
@@ -2462,7 +2614,7 @@
</div>
{{endif}}
</div>]]></template>
<template template_group="submit" template_name="chooseCategory" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="front" template_app="gallery"><![CDATA[<div data-controller='gallery.front.submit.chooseCategory' data-preselected-album="{expression="\IPS\Request::i()->album"}" class='cGallerySubmit_chooseCategory'>
<template template_group="submit" template_name="chooseCategory" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="gallery"><![CDATA[<div data-controller='gallery.front.submit.chooseCategory' data-preselected-album="{expression="\IPS\Request::i()->album"}" class='cGallerySubmit_chooseCategory'>
<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm data-role='categoryForm'>
<input type="hidden" name="{$id}_submitted" value="1">
{{foreach $hiddenValues as $k => $v}}
@@ -2491,7 +2643,7 @@
{lang="gallery_submit_prefix_cat" sprintf="$container['category']->_title"}
{{endif}}
</div>]]></template>
<template template_group="submit" template_name="createAlbum" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="front" template_app="gallery"><![CDATA[<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
<template template_group="submit" template_name="createAlbum" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="gallery"><![CDATA[<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
<input type="hidden" name="{$id}_submitted" value="1">
{{foreach $hiddenValues as $k => $v}}
{{if \is_array($v)}}
@@ -2581,7 +2733,7 @@
</div>
</div>
</form>]]></template>
<template template_group="submit" template_name="existingAlbumForm" template_data="$category, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="front" template_app="gallery"><![CDATA[
<template template_group="submit" template_name="existingAlbumForm" template_data="$category, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="gallery"><![CDATA[
{{$existingAlbums = \IPS\gallery\Album::loadForSubmit( $category );}}
<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm data-ipsFormSubmit data-controller='gallery.front.submit.existingAlbums'>
@@ -3287,7 +3439,7 @@
<ul id='elImageActions_menu' class='ipsMenu ipsMenu_auto ipsHide'>
{{if $image->canReportOrRevoke() === TRUE}}
<li class='ipsMenu_item'>
<a href='{$image->url('report')}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_image"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_image"}">{lang="report_image"}</a>
<a href='{$image->url('report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_image"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}"{{endif}} title="{lang="report_image"}">{lang="report_image"}</a>
</li>
<li class='ipsMenu_sep'><hr></li>
{{endif}}
@@ -3315,7 +3467,7 @@
<li class='ipsMenu_item'><a href='{$image->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unpin' ) )}' title="{lang="unpin_title_image"}">{lang="unpin"}</a></li>
{{endif}}
{{if $image->canHide()}}
<li class='ipsMenu_item'><a href='{$image->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}' title="{lang="hide_title_image"}" data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
<li class='ipsMenu_item'><a href='{$image->url()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}' title="{lang="hide_title_image"}" data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
{{endif}}
{{if $image->canUnhide()}}
<li class='ipsMenu_item'><a href='{$image->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unhide' ) )}' title="{{if $image->hidden() === 1}}{lang="approve_title_image"}{{else}}{lang="unhide_title_image"}{{endif}}">{{if $image->hidden() === 1}}{lang="approve"}{{else}}{lang="unhide"}{{endif}}</a></li>
@@ -3333,18 +3485,18 @@
<li class='ipsMenu_item'><a href='{$image->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'delete' ) )}' data-confirm title="{lang="delete_title_image"}">{lang="delete"}</a></li>
{{endif}}
{{if $image->canOnMessage( 'add' )}}
<li class='ipsMenu_item'><a href='{$image->url()->csrf()->setQueryString( array( 'do' => 'messageForm' ) )}' data-ipsDialog data-ipsDialog-title='{lang="add_message"}'>{lang="add_message"}</a></li>
<li class='ipsMenu_item'><a href='{$image->url()->setQueryString( array( 'do' => 'messageForm' ) )}' data-ipsDialog data-ipsDialog-title='{lang="add_message"}'>{lang="add_message"}</a></li>
{{endif}}
{{if \IPS\Member::loggedIn()->modPermission('can_view_moderation_log')}}
<li class='ipsMenu_sep'><hr></li>
<li class="ipsMenu_item"><a href='{$image->url()->csrf()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
<li class="ipsMenu_item"><a href='{$image->url()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
{{endif}}
{{endif}}
</ul>
</li>
{{elseif $image->canReportOrRevoke() === TRUE}}
<li>
<a href='{$image->url('report')}' class='ipsButton ipsButton_link ipsButton_verySmall ipsButton_fullWidth' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_image"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_image"}">{lang="report_image"}</a>
<a href='{$image->url('report')}' class='ipsButton ipsButton_link ipsButton_verySmall ipsButton_fullWidth' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_image"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}"{{endif}} title="{lang="report_image"}">{lang="report_image"}</a>
</li>
{{endif}}
</ul>
@@ -3723,7 +3875,7 @@
<li class='ipsMenu_item'><a href='{$image->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unpin' ) )}' title="{lang="unpin_title_image"}">{lang="unpin"}</a></li>
{{endif}}
{{if $image->canHide()}}
<li class='ipsMenu_item'><a href='{$image->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}' title="{lang="hide_title_image"}" data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
<li class='ipsMenu_item'><a href='{$image->url()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}' title="{lang="hide_title_image"}" data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
{{endif}}
{{if $image->canUnhide()}}
<li class='ipsMenu_item'><a href='{$image->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unhide' ) )}' title="{{if $image->hidden() === 1}}{lang="approve_title_image"}{{else}}{lang="unhide_title_image"}{{endif}}">{{if $image->hidden() === 1}}{lang="approve"}{{else}}{lang="unhide"}{{endif}}</a></li>
@@ -3741,11 +3893,11 @@
<li class='ipsMenu_item'><a href='{$image->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'delete' ) )}' data-confirm title="{lang="delete_title_image"}">{lang="delete"}</a></li>
{{endif}}
{{if $image->canOnMessage( 'add' )}}
<li class='ipsMenu_item'><a href='{$image->url()->csrf()->setQueryString( array( 'do' => 'messageForm' ) )}' data-ipsDialog data-ipsDialog-title='{lang="add_message"}'>{lang="add_message"}</a></li>
<li class='ipsMenu_item'><a href='{$image->url()->setQueryString( array( 'do' => 'messageForm' ) )}' data-ipsDialog data-ipsDialog-title='{lang="add_message"}'>{lang="add_message"}</a></li>
{{endif}}
{{if \IPS\Member::loggedIn()->modPermission('can_view_moderation_log')}}
<li class='ipsMenu_sep'><hr></li>
<li class="ipsMenu_item"><a href='{$image->url()->csrf()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
<li class="ipsMenu_item"><a href='{$image->url()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
{{endif}}
{{endif}}
</ul>
@@ -3758,7 +3910,7 @@
<li>{lang="num_views_with_number" pluralize="$image->views"}</li>
{{if $image->canReportOrRevoke() === TRUE}}
<li>
<a href='{$image->url('report')}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_image"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_image"}">{lang="report_image"}</a>
<a href='{$image->url('report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_image"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}"{{endif}} title="{lang="report_image"}">{lang="report_image"}</a>
</li>
{{endif}}
</ul>
@@ -3864,14 +4016,14 @@
<strong>{lang="map_not_being_shown"}</strong>
<a href='#' id='elMapLightboxForm' data-ipsMenu data-ipsMenu-closeOnClick='false'>{lang="map_privacy"} <i class='fa fa-caret-down'></i></a>
<div class='ipsMenu ipsMenu_auto ipsHide ipsPad' id='elMapLightboxForm_menu'>
{$image->enableMapForm()|raw}
{$image->enableMapForm( TRUE )|raw}
</div>
</div>
</div>
{{endif}}
</div>
<div data-role='imageComments'>
<div data-role='imageComments' data-commentsContainer="lightbox">
{{if $commentsAndReviews}}
{{if ( $image->directContainer()->allow_reviews && $image->container()->allow_reviews ) && ( $image->directContainer()->allow_comments && $image->container()->allow_comments ) }}
<a id="replies"></a>
@@ -4031,7 +4183,7 @@
<strong>{lang="total_images_front_v" pluralize="$stats['totalImages']"}</strong>
</div>
<div class='ipsDataItem_stats ipsDataItem_statsLarge'>
<span class='ipsDataItem_stats_number'>{number="$stats['totalImages']"}</span>
<span class='ipsDataItem_stats_number'>{number="$stats['totalImages']" format="short"}</span>
</div>
</li>
{{if $stats['totalComments']}}
@@ -4040,7 +4192,7 @@
<strong>{lang="stats_total_comments_v" pluralize="$stats['totalComments']"}</strong>
</div>
<div class='ipsDataItem_stats ipsDataItem_statsLarge'>
<span class='ipsDataItem_stats_number'>{number="$stats['totalComments']"}</span>
<span class='ipsDataItem_stats_number'>{number="$stats['totalComments']" format="short"}</span>
</div>
</li>
{{endif}}
@@ -4050,7 +4202,7 @@
<strong>{lang="total_albums_v" pluralize="$stats['totalAlbums']"}</strong>
</div>
<div class='ipsDataItem_stats ipsDataItem_statsLarge'>
<span class='ipsDataItem_stats_number'>{number="$stats['totalAlbums']"}</span>
<span class='ipsDataItem_stats_number'>{number="$stats['totalAlbums']" format="short"}</span>
</div>
</li>
{{endif}}
@@ -4067,18 +4219,18 @@
{{$span = 12 / $columns;}}
<div class='ipsGrid ipsGrid_collapsePhone ipsWidget_stats'>
<div class='ipsGrid_span{$span} ipsType_center'>
<span class='ipsType_large ipsWidget_statsCount'>{number="$stats['totalImages']"}</span><br>
<span class='ipsType_large ipsWidget_statsCount'>{number="$stats['totalImages']" format="short"}</span><br>
<span class='ipsType_light ipsType_medium'>{lang="total_images_front_h" pluralize="$stats['totalImages']"}</span>
</div>
{{if $stats['totalComments']}}
<div class='ipsGrid_span{$span} ipsType_center'>
<span class='ipsType_large ipsWidget_statsCount'>{number="$stats['totalComments']"}</span><br>
<span class='ipsType_large ipsWidget_statsCount'>{number="$stats['totalComments']" format="short"}</span><br>
<span class='ipsType_light ipsType_medium'>{lang="stats_total_comments_h" pluralize="$stats['totalComments']"}</span>
</div>
{{endif}}
{{if $stats['totalAlbums']}}
<div class='ipsGrid_span{$span} ipsType_center'>
<span class='ipsType_large ipsWidget_statsCount'>{number="$stats['totalAlbums']"}</span><br>
<span class='ipsType_large ipsWidget_statsCount'>{number="$stats['totalAlbums']" format="short"}</span><br>
<span class='ipsType_light ipsType_medium'>{lang="total_albums_h" pluralize="$stats['totalAlbums']"}</span>
</div>
{{endif}}
@@ -6093,6 +6245,7 @@ html[dir="rtl"] .cGallerySubmit_albumInfo {
/* Step 2: Upload files */
.cGallerySubmit_uploadImages {
overflow-y: auto;
height: 100%;
}
.cGallerySubmit_details {
padding-bottom: 20px;
@@ -6140,6 +6293,10 @@ html[dir="rtl"] .cGallerySubmit_albumInfo {
overflow: auto;
}
#elGallerySubmit {
height: 100%;
}
#elGallerySubmit > .ipsGrid {
position: absolute;
top: 30px;
@@ -6178,6 +6335,11 @@ html[dir="rtl"] .cGallerySubmit_albumInfo {
#elGallerySubmit_imageUploader {
position: relative;
min-height: 200px;
height: 100%;
}
.cGallerySubmit_uploadForm {
height: calc( 100% - 20px );
}
#elGallerySubmit_imageUploader .ipsAttachment_dropZone {
+39 -1
View File
@@ -354,6 +354,7 @@
"104067": "4.4.10",
"104068": "4.4.10",
"104069": "4.4.10",
"104070": "4.4.11",
"105013": "4.5.0 Beta 1",
"105014": "4.5.0 Beta 1",
"105015": "4.5.0 Beta 2",
@@ -374,5 +375,42 @@
"105030": "4.5.0 Beta 11",
"105031": "4.5.0 Beta 11",
"105032": "4.5.0 Beta 12",
"105100": "4.5.0"
"105100": "4.5.0",
"105101": "4.5.0",
"105102": "4.5.1 Beta 1",
"105103": "4.5.1 Beta 1",
"105104": "4.5.1 Beta 2",
"105105": "4.5.1 Beta 3",
"105106": "4.5.1",
"105107": "4.5.2",
"105108": "4.5.2",
"105109": "4.5.2",
"105110": "4.5.2",
"105111": "4.5.2",
"105112": "4.5.3",
"105113": "4.5.3",
"105114": "4.5.3",
"105115": "4.5.3",
"105116": "4.5.4",
"105117": "4.5.4",
"105118": "4.5.4",
"105119": "4.5.4",
"105120": "4.5.4",
"105121": "4.5.4",
"105122": "4.5.4",
"105123": "4.5.4",
"105124": "4.5.4.1",
"105125": "4.5.4.2",
"105126": "4.5.4.2",
"105127": "4.5.4.2",
"105128": "4.5.4.2",
"105129": "4.5.4.2",
"105130": "4.5.4.2",
"106100": "4.6.0 Beta 1",
"106101": "4.6.0 Beta 1.1",
"106103": "4.6.0 Beta 2",
"106104": "4.6.0 Beta 3",
"106105": "4.6.0 Beta 3.1",
"106106": "4.6.0 Beta 4",
"106107": "4.6.0"
}
@@ -61,4 +61,30 @@ class _Gallery
$album->save();
}
}
/**
* Member is flagged as spammer
*
* @param $member \IPS\Member The member
* @return void
*/
public function onSetAsSpammer( $member )
{
$actions = explode( ',', \IPS\Settings::i()->spm_option );
/* Hide or delete */
if ( \in_array( 'unapprove', $actions ) or \in_array( 'delete', $actions ) )
{
foreach( \IPS\gallery\Album::loadByOwner( $member ) as $album )
{
$album->hidden = -1;
$album->save();
if( \in_array( 'delete', $actions ) )
{
\IPS\Task::queue( 'core', 'DeleteOrMoveContent', array( 'class' => 'IPS\gallery\Album', 'id' => $album->id, 'deleteWhenDone' => TRUE ), 3 );
}
}
}
}
}
@@ -26,7 +26,7 @@ class _RebuildGalleryImages
/**
* @brief Number of content items to rebuild per cycle
*/
public $rebuild = \IPS\REBUILD_SLOW;
public $rebuild = \IPS\REBUILD_INTENSE;
/**
* Parse data before queuing
@@ -163,7 +163,7 @@ class _categories extends \IPS\Node\Controller
$itemDeletionWhere = $node->massMoveorDeleteWhere( $data );
$itemDeletionWhere[] = array( 'image_album_id=?', 0 );
return \IPS\Theme::i()->getTemplate( 'global', 'gallery' )->nodeMoveDeleteContent( $this->url->setQueryString( array( 'do' => 'massManageContent', 'id' => $node->_id ) ), \IPS\Member::loggedIn()->language()->addToStack( $contentItemClass::$title . '_pl_lc' ), $node->getContentItems( NULL, NULL, $itemDeletionWhere, TRUE ), isset( $data['moveTo'] ) ? $data['moveToClass']::load( $data['moveTo'] ) : NULL, $albumCount, isset( $data['moveToAlbums'] ) ? $data['moveToClassAlbums']::load( $data['moveToAlbums'] ) : NULL );
return \IPS\Theme::i()->getTemplate( 'global', 'gallery' )->nodeMoveDeleteContent( $this->url->setQueryString( array( 'do' => 'massManageContent', 'id' => $node->_id ) )->csrf(), \IPS\Member::loggedIn()->language()->addToStack( $contentItemClass::$title . '_pl_lc' ), $node->getContentItems( NULL, NULL, $itemDeletionWhere, TRUE ), isset( $data['moveTo'] ) ? $data['moveToClass']::load( $data['moveTo'] ) : NULL, $albumCount, isset( $data['moveToAlbums'] ) ? $data['moveToClassAlbums']::load( $data['moveToAlbums'] ) : NULL );
}
}
}
@@ -76,7 +76,7 @@ class _settings extends \IPS\Dispatcher\Controller
$form->addHeader( 'gallery_bandwidth' );
$form->add( new \IPS\Helpers\Form\YesNo( 'gallery_detailed_bandwidth', \IPS\Settings::i()->gallery_detailed_bandwidth ) );
$form->add( new \IPS\Helpers\Form\Number( 'gallery_bandwidth_period', \IPS\Settings::i()->gallery_bandwidth_period, FALSE, array( 'unlimited' => -1 ) ) );
$form->add( new \IPS\Helpers\Form\Interval( 'gallery_bandwidth_period', \IPS\Settings::i()->gallery_bandwidth_period, FALSE, array( 'valueAs' => \IPS\Helpers\Form\Interval::HOURS, 'min' => NULL, 'unlimited' => -1 ), NULL, NULL, NULL, 'easypost_delivery_adjustment' ) );
$form->addHeader( 'gallery_options' );
$form->add( new \IPS\Helpers\Form\YesNo( 'gallery_rss_enabled', \IPS\Settings::i()->gallery_rss_enabled ) );
@@ -98,6 +98,7 @@ class _settings extends \IPS\Dispatcher\Controller
'gallery_rss_enabled' => $values['gallery_rss_enabled'],
'gallery_watermark_images' => implode( ',', $values['gallery_watermark_images'] ),
'gallery_use_watermarks' => $values['gallery_use_watermarks'],
'gallery_maps_default' => $values['gallery_maps_default']
) );
\IPS\Session::i()->log( 'acplogs__gallery_settings' );
@@ -27,6 +27,11 @@ class _bandwidth extends \IPS\Dispatcher\Controller
* @brief Has been CSRF-protected
*/
public static $csrfProtected = TRUE;
/**
* @brief Allow MySQL RW separation for efficiency
*/
public static $allowRWSeparation = TRUE;
/**
* Execute
@@ -30,6 +30,11 @@ class _diskspace extends \IPS\Dispatcher\Controller
*/
public static $csrfProtected = TRUE;
/**
* @brief Allow MySQL RW separation for efficiency
*/
public static $allowRWSeparation = TRUE;
/**
* Execute
*
@@ -27,6 +27,11 @@ class _member extends \IPS\Dispatcher\Controller
* @brief Has been CSRF-protected
*/
public static $csrfProtected = TRUE;
/**
* @brief Allow MySQL RW separation for efficiency
*/
public static $allowRWSeparation = TRUE;
/**
* Images
@@ -154,6 +154,37 @@ class _browse extends \IPS\Content\Controller
}
}
/**
* Unset the cover photo
*
* @return void
*/
protected function unsetCoverPhoto()
{
\IPS\Session::i()->csrfCheck();
if( \IPS\Request::i()->category )
{
$container = \IPS\gallery\Category::loadAndCheckPerms( \IPS\Request::i()->category, 'view' );
}
elseif( \IPS\Request::i()->album )
{
$container = \IPS\gallery\Album::loadAndCheckPerms( \IPS\Request::i()->album, 'view' );
}
if( \IPS\gallery\Image::modPermission( 'edit', \IPS\Member::loggedIn(), $container ) )
{
$container->cover_img_id = 0;
$container->save();
}
else
{
\IPS\Output::i()->error( 'gallery_unset_cover_error', '2G189/E', 403, '' );
}
\IPS\Output::i()->redirect( $container->url(), 'gallery_cover_photo_isunset' );
}
/**
* Show Index
*
@@ -163,7 +194,7 @@ class _browse extends \IPS\Content\Controller
{
/* Get stuff */
$featured = iterator_to_array( \IPS\gallery\Image::featured( 20, NULL ) );
$new = iterator_to_array( \IPS\gallery\Image::getItemsWithPermission( ( \IPS\Settings::i()->club_nodes_in_apps ? array() : array( array( 'category_club_id IS NULL' ) ) ), NULL, 30, 'read', \IPS\Content\Hideable::FILTER_AUTOMATIC, 0, NULL, !\IPS\Settings::i()->club_nodes_in_apps ) );
$new = iterator_to_array( \IPS\gallery\Image::getItemsWithPermission( \IPS\gallery\Image::clubImageExclusion(), NULL, 30, 'read', \IPS\Content\Hideable::FILTER_AUTOMATIC, 0, NULL, !\IPS\Settings::i()->club_nodes_in_apps ) );
/* Online User Location */
\IPS\Session::i()->setLocation( \IPS\Http\Url::internal( 'app=gallery', 'front', 'gallery' ), array(), 'loc_gallery_browsing' );
@@ -229,7 +229,7 @@ class _submit extends \IPS\Dispatcher\Controller
/* If it's an album, make sure we grab the current category */
try
{
$category = \IPS\gallery\Category::load( $album->category_id );
$category = \IPS\gallery\Category::loadAndCheckPerms( $album->category_id, 'add' );
}
catch ( \OutOfRangeException $e ) { }
}
@@ -261,19 +261,11 @@ class _submit extends \IPS\Dispatcher\Controller
'url' => $url,
'class' => 'IPS\gallery\Category',
'permissionCheck' => function( $node ){
// If we don't have permission to add to this node, return FALSE
if( !$node->can('add') )
if( $node->can('add') and ( $node->allow_albums != 2 or \IPS\Member::loggedIn()->group['g_create_albums'] or \IPS\gallery\Album::loadForSubmit( $node ) ) )
{
return FALSE;
return TRUE;
}
// Otherwise, if the node *requires* albums but we don't have permission to create albums, also return FALSE
if( !\IPS\Member::loggedIn()->group['g_create_albums'] AND $node->allow_albums == 2 )
{
return FALSE;
}
return TRUE;
return FALSE;
},
'clubs' => \IPS\Settings::i()->club_nodes_in_apps
) ) );
@@ -384,8 +376,12 @@ class _submit extends \IPS\Dispatcher\Controller
}
/* If there's nothing we can do, we can just continue */
if ( !$canCreateAlbum )
if ( !$canCreateAlbum and !$albumsInCategory )
{
if ( $category->allow_albums == 2 )
{
\IPS\Output::i()->error( 'node_error_no_perm', '2G376/2', 403, '' );
}
return array( 'category' => $category, 'album' => NULL, 'guest_email' => isset( \IPS\Request::i()->guest_email ) ? \IPS\Request::i()->guest_email : NULL );
}
/* Otherwise, ask the user what they want to do */
@@ -447,25 +443,33 @@ class _submit extends \IPS\Dispatcher\Controller
$options['maxFiles'] = $maxNumberOfImages;
}
$unlimitedMaxSize = TRUE;
if ( \IPS\Member::loggedIn()->group['g_max_upload'] )
{
$maxFileSizes['image'] = \IPS\Member::loggedIn()->group['g_max_upload'] / 1024;
$unlimitedMaxSize = FALSE;
}
if ( \IPS\Member::loggedIn()->group['g_movies'] )
{
$options['image'] = NULL;
$options['allowedFileTypes'] = array_merge( \IPS\Image::$imageExtensions, array( 'flv', 'f4v', 'wmv', 'mpg', 'mpeg', 'mp4', 'mkv', 'm4a', 'm4v', '3gp', 'mov', 'avi', 'webm', 'ogg', 'ogv' ) );
$options['allowedFileTypes'] = array_merge( \IPS\Image::supportedExtensions(), array( 'flv', 'f4v', 'wmv', 'mpg', 'mpeg', 'mp4', 'mkv', 'm4a', 'm4v', '3gp', 'mov', 'avi', 'webm', 'ogg', 'ogv' ) );
if ( \IPS\Member::loggedIn()->group['g_movie_size'] )
{
$maxFileSizes['movie'] = \IPS\Member::loggedIn()->group['g_movie_size'] / 1024;
$unlimitedMaxSize = FALSE;
}
else
{
$unlimitedMaxSize = TRUE;
}
}
if ( \count( $maxFileSizes ) )
if ( \count( $maxFileSizes ) AND !$unlimitedMaxSize )
{
$options['maxFileSize'] = max( $maxFileSizes );
}
$form->add( new \IPS\Helpers\Form\Upload( 'images', array(), TRUE, $options, function( $val ) use ( $maxNumberOfImages, $maxFileSizes ) {
$uploader = new \IPS\Helpers\Form\Upload( 'images', array(), TRUE, $options, function( $val ) use ( $maxNumberOfImages, $maxFileSizes ) {
if ( $maxNumberOfImages !== NULL and \count( $val ) > $maxNumberOfImages )
{
if ( $maxNumberOfImages < 1 )
@@ -481,21 +485,24 @@ class _submit extends \IPS\Dispatcher\Controller
foreach ( $val as $file )
{
$ext = mb_substr( $file->filename, ( mb_strrpos( $file->filename, '.' ) + 1 ) );
if ( \in_array( mb_strtolower( $ext ), \IPS\Image::$imageExtensions ) )
if ( \in_array( mb_strtolower( $ext ), \IPS\Image::supportedExtensions() ) )
{
/* The size was saved as kb, then divided by 1024 above to figure out how many MB to allow. So now we have '2' for 2MB for instance, so we need
to multiply that by 1024*1024 in order to get the byte size again */
if ( \count( $maxFileSizes ) == 2 and $file->filesize() > ( $maxFileSizes['image'] * 1048576 ) )
if ( isset( $maxFileSizes['image'] ) and $file->filesize() > ( $maxFileSizes['image'] * 1048576 ) )
{
throw new \DomainException( \IPS\Member::loggedIn()->language()->addToStack( 'upload_image_too_big', FALSE, array( 'sprintf' => array( \IPS\Output\Plugin\Filesize::humanReadableFilesize( $maxFileSizes['image'] * 1048576 ) ) ) ) );
}
}
elseif ( \count( $maxFileSizes ) == 2 and $file->filesize() > ( $maxFileSizes['movie'] * 1048576 ) )
elseif ( isset( $maxFileSizes['movie'] ) and $file->filesize() > ( $maxFileSizes['movie'] * 1048576 ) )
{
throw new \DomainException( \IPS\Member::loggedIn()->language()->addToStack( 'upload_movie_too_big', FALSE, array( 'sprintf' => array( \IPS\Output\Plugin\Filesize::humanReadableFilesize( $maxFileSizes['movie'] * 1048576 ) ) ) ) );
}
}
} ) );
} );
$uploader->template = array( \IPS\Theme::i()->getTemplate( 'forms', 'gallery', 'front' ), 'imageUpload' );
$form->add( $uploader );
/* Add tag fields so we can validate it */
if( isset( \IPS\Request::i()->images_info ) AND \IPS\gallery\Image::canTag( NULL, $category ) )
@@ -696,7 +703,7 @@ class _submit extends \IPS\Dispatcher\Controller
}
/* Get the total number of images now as it will decrease each cycle moving forward */
$totalImages = \IPS\Db::i()->select( 'count(*)', 'gallery_images_uploads', array( 'upload_session=?', session_id() ) )->first();
$totalImages = \IPS\Db::i()->select( 'count(*)', 'gallery_images_uploads', array( 'upload_session=?', session_id() ), NULL, NULL, NULL, NULL, \IPS\Db::SELECT_FROM_WRITE_SERVER )->first();
$url = $url->setQueryString( 'totalImages', $totalImages );
if ( isset( $data['guest_email'] ) )
@@ -726,12 +733,13 @@ class _submit extends \IPS\Dispatcher\Controller
{
$offset = \intval( $offset );
$existing = \IPS\Db::i()->select( '*', 'gallery_images_uploads', array( 'upload_session=?', session_id() ), 'upload_order ASC', array( 0, 1 ) )->setKeyField( 'upload_location' );
$existing = \IPS\Db::i()->select( '*', 'gallery_images_uploads', array( 'upload_session=?', session_id() ), 'upload_order ASC', array( 0, 1 ), NULL, NULL, \IPS\Db::SELECT_FROM_WRITE_SERVER )->setKeyField( 'upload_location' );
/* Get category and album data */
$data = $this->chooseContainerForm( $url );
foreach( $existing as $location => $file )
{
/* Get category and album data */
$data = $this->chooseContainerForm( $url );
/* Start with the basic data */
$values = array(
@@ -874,7 +882,18 @@ class _submit extends \IPS\Dispatcher\Controller
\IPS\Db::i()->delete( 'gallery_images_uploads', array( 'upload_unique_id=?', $file['upload_unique_id'] ) );
/* Go to next */
return array( ++$offset, \IPS\Member::loggedIn()->language()->addToStack('processing'), 100 / ( \IPS\Request::i()->totalImages ?: $offset ) * $offset );
return array( ++$offset, \IPS\Member::loggedIn()->language()->addToStack('processing'), number_format( 100 / ( \IPS\Request::i()->totalImages ?: $offset ) * $offset, 2 ) );
}
/* Update last image info */
$data['category']->setLastImage();
$data['category']->save();
/* And Album */
if( $data['album'] )
{
$data['album']->setLastImage();
$data['album']->save();
}
return NULL;
@@ -889,7 +908,7 @@ class _submit extends \IPS\Dispatcher\Controller
}
elseif ( \IPS\Request::i()->totalImages === 1 )
{
/* If we are only sending one image, send a normal notification */
/* If we are only sending one image, send a normal notification and award points */
$image = \IPS\gallery\Image::constructFromData( \IPS\Db::i()->select( '*', 'gallery_images', NULL, 'image_id DESC', 1 )->first() );
if ( !$image->hidden() )
{
@@ -899,7 +918,8 @@ class _submit extends \IPS\Dispatcher\Controller
{
$image->sendUnapprovedNotification();
}
/* Then redirect */
\IPS\Output::i()->redirect( $image->url() );
}
else
@@ -200,7 +200,7 @@ class _view extends \IPS\Content\Controller
'author' => array(
'@type' => 'Person',
'name' => \IPS\Member::load( $this->image->member_id )->name,
'image' => \IPS\Member::load( $this->image->member_id )->get_photo()
'image' => \IPS\Member::load( $this->image->member_id )->get_photo( TRUE, TRUE )
),
'interactionStatistic' => array(
array(
@@ -359,7 +359,11 @@ class _view extends \IPS\Content\Controller
case \IPS\gallery\Image::DOWNLOAD_ORIGINAL_WATERMARKED:
/* We need to watermark the original image on the fly in this case */
$file = \IPS\File::get( 'gallery_Images', $this->image->original_file_name );
$image = $this->image->createImageFile( $file, NULL );
if( $file->isImage() )
{
$image = $this->image->createImageFile( $file, NULL );
}
break;
case \IPS\gallery\Image::DOWNLOAD_ORIGINAL_RAW:
@@ -426,7 +430,7 @@ class _view extends \IPS\Content\Controller
/* We also want to update the views */
$countUpdated = false;
if ( \IPS\REDIS_ENABLED and \IPS\CACHE_METHOD == 'Redis' and \IPS\CACHE_CONFIG )
if ( \IPS\REDIS_ENABLED and \IPS\CACHE_METHOD == 'Redis' and ( \IPS\CACHE_CONFIG or \IPS\REDIS_CONFIG ) )
{
try
{
@@ -0,0 +1,24 @@
{
"id": 105101,
"name": "4.5.0",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105102,
"name": "4.5.1 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105103,
"name": "4.5.1 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105104,
"name": "4.5.1 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105105,
"name": "4.5.1 Beta 3",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105106,
"name": "4.5.1",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105107,
"name": "4.5.2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105108,
"name": "4.5.2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105109,
"name": "4.5.2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105110,
"name": "4.5.2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,20 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css",
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105111,
"name": "4.5.2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105112,
"name": "4.5.3",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"html": {
"added": [],
"edited": [
"front\/global\/comment",
"front\/global\/review"
],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105113,
"name": "4.5.3",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105114,
"name": "4.5.3",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105115,
"name": "4.5.3",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105116,
"name": "4.5.4",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105117,
"name": "4.5.4",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105118,
"name": "4.5.4",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105119,
"name": "4.5.4",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105120,
"name": "4.5.4",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105121,
"name": "4.5.4",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105122,
"name": "4.5.4",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105123,
"name": "4.5.4",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105124,
"name": "4.5.4.1",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105125,
"name": "4.5.4.2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105126,
"name": "4.5.4.2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105127,
"name": "4.5.4.2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,21 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css",
"front\/global.css",
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105128,
"name": "4.5.4.2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,20 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css",
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105129,
"name": "4.5.4.2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 105130,
"name": "4.5.4.2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106100,
"name": "4.6.0 Beta 1",
"steps": {
"queries": true,
"lang": true,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": true,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,25 @@
{
"normal": {
"added": [
"__defart_gallery_image_comment_plural",
"__defart_gallery_image_plural",
"__defart_gallery_album_comment_plural",
"__defart_gallery_album_plural",
"__defart_gallery_image_review_plural",
"__defart_gallery_album_review_plural",
"gallery_bandwidth_period_desc",
"gallery_unset_cover",
"gallery_unset_cover_error",
"gallery_cover_photo_isunset"
],
"edited": [
"gallery_bandwidth_period"
],
"removed": []
},
"js": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,191 @@
{
"1": {
"method": "addColumn",
"params": [
"gallery_categories",
{
"name": "category_allow_anonymous",
"type": "TINYINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": true,
"auto_increment": false
}
]
},
"2": {
"method": "addColumn",
"params": [
"gallery_categories",
{
"name": "category_last_poster_anon",
"type": "TINYINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": true,
"auto_increment": false
}
]
},
"3": {
"method": "addColumn",
"params": [
"gallery_comments",
{
"name": "comment_is_anon",
"type": "TINYINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": true,
"auto_increment": false
}
]
},
"4": {
"method": "addColumn",
"params": [
"gallery_images",
{
"name": "image_last_poster_anon",
"type": "TINYINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": "",
"comment": "",
"unsigned": true,
"auto_increment": false
}
]
},
"5": {
"method": "addColumn",
"params": [
"gallery_images",
{
"name": "image_is_anon",
"type": "TINYINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": true,
"auto_increment": false
}
]
},
"6": {
"method": "addColumn",
"params": [
"gallery_album_comments",
{
"name": "comment_is_anon",
"type": "TINYINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": false,
"auto_increment": false
}
]
},
"7": {
"method": "changeIndex",
"params": [
"gallery_images",
"member_id",
{
"type": "key",
"name": "member_id",
"columns": [
"image_member_id",
"image_approved",
"image_date"
],
"length": [
null,
null,
null
]
}
]
},
"8": {
"method": "addIndex",
"params": [
"gallery_images",
{
"type": "key",
"name": "image_comments",
"columns": [
"image_category_id",
"image_approved",
"image_comments"
],
"length": [
null,
null,
null
]
}
]
},
"9": {
"method": "addIndex",
"params": [
"gallery_images",
{
"type": "key",
"name": "image_comments_unapproved",
"columns": [
"image_category_id",
"image_approved",
"image_unapproved_comments"
],
"length": [
null,
null,
null
]
}
]
},
"10": {
"method": "addIndex",
"params": [
"gallery_albums",
{
"type": "key",
"name": "album_type",
"columns": [
"album_type",
"album_owner_id",
"album_hidden"
],
"length": [
null,
null,
null
]
}
]
}
}
@@ -0,0 +1,7 @@
{
"added": [],
"edited": [
"gallery_bandwidth_period"
],
"removed": []
}
@@ -0,0 +1,37 @@
{
"html": {
"added": [
"front\/forms\/imageUpload"
],
"edited": [
"front\/browse\/album",
"front\/browse\/category",
"front\/browse\/categoryButtons",
"front\/browse\/categoryGrid",
"front\/browse\/imageTable",
"front\/global\/comment",
"front\/global\/profileAlbumTable",
"front\/global\/review",
"front\/submit\/chooseCategory",
"front\/submit\/createAlbum",
"front\/submit\/existingAlbumForm",
"front\/view\/imageInfo",
"front\/view\/imageLightboxInfo",
"front\/widgets\/galleryStats"
],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css",
"front\/submit.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106101,
"name": "4.6.0 Beta 1.1",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106103,
"name": "4.6.0 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106104,
"name": "4.6.0 Beta 3",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106105,
"name": "4.6.0 Beta 3.1",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106106,
"name": "4.6.0 Beta 4",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106107,
"name": "4.6.0",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/global.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
+20 -2
View File
@@ -157,7 +157,12 @@ class _Album extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\
if ( !$obj->can( $perm ) )
{
throw new \OutOfRangeException;
/* If we are adding and the member has mod permissions to edit in the category, they can create an album for another user. In that case
we need to allow the add permissions or they won't be able to add images to the new album */
if( $perm != 'add' OR !\IPS\gallery\Album\Item::modPermission( 'edit', $member, $obj->category() ) )
{
throw new \OutOfRangeException;
}
}
return $obj;
@@ -555,7 +560,7 @@ class _Album extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\
$return[] = new \IPS\Helpers\Form\SocialGroup( 'album_submit_access_members', ( $album AND $album->submit_type == static::AUTH_SUBMIT_MEMBERS ) ? (int) $album->submit_access : NULL, FALSE, array( 'owner' => $album ? \IPS\Member::load( $album->owner_id ) : ( \IPS\Request::i()->album_owner ? \IPS\Member::load( \IPS\Request::i()->album_owner, 'name' ) : \IPS\Member::loggedIn() ) ), NULL, NULL, NULL, 'album_submit_access_members' );
$groups = array_combine( array_keys( \IPS\Member\Group::groups( TRUE, FALSE ) ), array_map( function( $_group ) { return (string) $_group; }, \IPS\Member\Group::groups( TRUE, FALSE ) ) );
$return[] = new \IPS\Helpers\Form\Select( 'album_submit_access_groups', ( $album and $album->submit_type == static::AUTH_SUBMIT_GROUPS ) ? explode( ',', $album->submit_access ) : NULL, FALSE, array( 'options' => $groups, 'multiple' => true ), NULL, NULL, NULL, 'album_submit_access_groups' );
$return[] = new \IPS\Helpers\Form\CheckboxSet( 'album_submit_access_groups', ( $album and $album->submit_type == static::AUTH_SUBMIT_GROUPS ) ? explode( ',', $album->submit_access ) : NULL, FALSE, array( 'options' => $groups, 'multiple' => true ), NULL, NULL, NULL, 'album_submit_access_groups' );
$return[] = new \IPS\Helpers\Form\Select( 'album_sort_options', ( $album and $album->sort_options ) ? $album->sort_options : '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, 'album_sort_options' );
@@ -1494,4 +1499,17 @@ class _Album extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\
return array( \IPS\Theme::i()->getTemplate( 'global', 'gallery' ), 'manageFollowNodeRow' );
}
/**
* Get the title for a node using the specified language object
* This is commonly used where we cannot use the logged in member's language, such as sending emails
*
* @param \IPS\Lang $language Language object to fetch the title with
* @param array $options What options to use for language parsing
* @return string
*/
public function getTitleForLanguage( $language, $options=array() )
{
return $this->name;
}
}
@@ -21,7 +21,7 @@ if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
/**
* Album Comment Model
*/
class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory, \IPS\Content\Hideable, \IPS\Content\Searchable, \IPS\Content\Embeddable
class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory, \IPS\Content\Hideable, \IPS\Content\Searchable, \IPS\Content\Embeddable, \IPS\Content\Anonymous
{
use \IPS\Content\Reactable, \IPS\Content\Reportable;
@@ -58,7 +58,8 @@ class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory,
'edit_time' => 'edit_time',
'edit_member_name' => 'edit_name',
'edit_show' => 'append_edit',
'approved' => 'approved'
'approved' => 'approved',
'is_anon' => 'is_anon'
);
/**
@@ -141,7 +142,7 @@ class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory,
* @param string $view 'expanded' or 'condensed'
* @return callable
*/
public static function searchResultSnippet( array $indexData, array $authorData, array $itemData, array $containerData = NULL, array $reputationData, $reviewRating, $view )
public static function searchResultSnippet( array $indexData, array $authorData, array $itemData, ?array $containerData, array $reputationData, $reviewRating, $view )
{
$url = \IPS\Http\Url::internal( \IPS\gallery\Album\Item::$urlBase . $indexData['index_item_id'], 'front', \IPS\gallery\Album\Item::$urlTemplate, \IPS\Http\Url\Friendly::seoTitle( $indexData['index_title'] ?: $itemData[ \IPS\gallery\Album\Item::$databasePrefix . \IPS\gallery\Album\Item::$databaseColumnMap['title'] ] ) );
$images = ( isset( $itemData['extra'] ) AND \count( $itemData['extra'] ) ) ? $itemData['extra'] : array();
+1 -1
View File
@@ -469,7 +469,7 @@ class _Item extends \IPS\Content\Item implements
* @param string $view 'expanded' or 'condensed'
* @return callable
*/
public static function searchResultSnippet( array $indexData, array $authorData, array $itemData, array $containerData = NULL, array $reputationData, $reviewRating, $view )
public static function searchResultSnippet( array $indexData, array $authorData, array $itemData, ?array $containerData, array $reputationData, $reviewRating, $view )
{
$url = \IPS\Http\Url::internal( static::$urlBase . $indexData['index_item_id'], 'front', static::$urlTemplate, \IPS\Http\Url\Friendly::seoTitle( $indexData['index_title'] ?: $itemData[ static::$databasePrefix . static::$databaseColumnMap['title'] ] ) );
$images = ( isset( $itemData['extra'] ) AND \count( $itemData['extra'] ) ) ? $itemData['extra'] : array();
@@ -124,7 +124,7 @@ class _Review extends \IPS\Content\Review implements \IPS\Content\EditHistory, \
* @param string $view 'expanded' or 'condensed'
* @return callable
*/
public static function searchResultSnippet( array $indexData, array $authorData, array $itemData, array $containerData = NULL, array $reputationData, $reviewRating, $view )
public static function searchResultSnippet( array $indexData, array $authorData, array $itemData, ?array $containerData, array $reputationData, $reviewRating, $view )
{
return \IPS\gallery\Album\Comment::searchResultSnippet( $indexData, $authorData, $itemData, $containerData, $reputationData, $reviewRating, $view );
}
@@ -319,6 +319,8 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
{
$form->add( new \IPS\Helpers\Form\YesNo( 'category_watermark', $this->id ? $this->watermark : TRUE, FALSE ) );
}
$form->add( new \IPS\Helpers\Form\YesNo( 'allow_anonymous_comments', $this->id ? $this->allow_anonymous : FALSE, FALSE, array() ) );
$form->addHeader( 'category_comments_and_ratings' );
$form->add( new \IPS\Helpers\Form\YesNo( 'category_allow_comments', $this->id ? $this->allow_comments : TRUE, FALSE, array( 'togglesOn' => array( 'category_approve_com' ) ), NULL, NULL, NULL, 'category_allow_comments' ) );
@@ -380,7 +382,13 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
$values['category_parent_id'] = $values['gcategory_parent_id'];
unset( $values['gcategory_parent_id'] );
}
if( isset( $values['allow_anonymous_comments'] ) )
{
$values['allow_anonymous'] = ( $values['allow_anonymous_comments'] ? 2 : 0 );
unset( $values['allow_anonymous_comments'] );
}
/* If watermarks are disabled, enable them at the category level so that if you later enable watermarks they work in your existing categories */
if( !\IPS\Settings::i()->gallery_watermark_path )
{
@@ -573,16 +581,19 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
{
/* Reset counts */
$this->resetCommentCounts();
$this->commentCountsReset = TRUE;
/* Reset last image */
if( $image === NULL )
{
try
{
$image = \IPS\gallery\Image::constructFromData( \IPS\Db::i()->select( '*', 'gallery_images', array( 'image_category_id=? AND image_approved=1 AND ( image_album_id = 0 OR album_type NOT IN ( 2, 3 ) )', $this->id ), 'image_date DESC', 1, NULL, NULL, \IPS\Db::SELECT_FROM_WRITE_SERVER )->join(
$result = \IPS\Db::i()->select( '*', 'gallery_images', array( 'image_category_id=? AND image_approved=1 AND ( image_album_id = 0 OR album_type NOT IN ( 2, 3 ) )', $this->id ), 'image_date DESC', 1, NULL, NULL, \IPS\Db::SELECT_FROM_WRITE_SERVER )->join(
'gallery_albums',
"image_album_id=album_id"
)->first() );
)->first();
$image = \IPS\gallery\Image::constructFromData( $result );
}
catch ( \UnderflowException $e )
{
@@ -597,12 +608,17 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
if( $image->album_id )
{
$album = \IPS\gallery\Album::load( $image->album_id );
$album->setLastImage( $image );
$album = \IPS\gallery\Album::constructFromData( $result );
$album->setLastImage();
$album->save();
}
}
/**
* @brief Track if we've already reset comment counts so we don't do it more than once between saves
*/
protected $commentCountsReset = FALSE;
/**
* Set the comment/approved/hidden counts
*
@@ -610,6 +626,11 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
*/
public function resetCommentCounts()
{
if( $this->commentCountsReset )
{
return;
}
parent::resetCommentCounts();
/* If we allow albums, add album comment/review counts too */
@@ -625,14 +646,27 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
catch( \UnderflowException $e ){}
}
}
/**
* [ActiveRecord] Save Changed Columns
*
* @return void
*/
public function save()
{
parent::save();
$this->commentCountsReset = FALSE;
}
/**
* Get last comment time
*
* @note This should return the last comment time for this node only, not for children nodes
* @param \IPS\Member|NULL $member MemberObject
* @return \IPS\DateTime|NULL
*/
public function getLastCommentTime()
public function getLastCommentTime( \IPS\Member $member = NULL )
{
return $this->last_img_date ? \IPS\DateTime::ts( $this->last_img_date ) : NULL;
}
@@ -842,42 +876,9 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
return FALSE;
}
/* If we cannot create albums, make sure at least one category does not require them */
if( $permission == 'add' AND !$member->group['g_create_albums'] )
{
$where[] = array( 'gallery_categories.category_allow_albums != ?', 2 );
}
return parent::canOnAny( $permission, $member, $where, $considerPostBeforeRegistering );
}
/**
* Check permissions
*
* @param mixed $permission A key which has a value in static::$permissionMap['view'] matching a column ID in core_permission_index
* @param \IPS\Member|\IPS\Member\Group|NULL $member The member or group to check (NULL for currently logged in member)
* @param bool $considerPostBeforeRegistering If TRUE, and $member is a guest, will return TRUE if "Post Before Registering" feature is enabled
* @return bool
* @throws \OutOfBoundsException If $permission does not exist in static::$permissionMap
*/
public function can( $permission, $member=NULL, $considerPostBeforeRegistering = TRUE )
{
$member = $member ?: \IPS\Member::loggedIn();
$result = parent::can( $permission, $member, $considerPostBeforeRegistering );
if( $result === FALSE )
{
return FALSE;
}
if( $permission == 'add' AND $this->allow_albums == 2 AND !$member->group['g_create_albums'] )
{
return FALSE;
}
return TRUE;
}
/**
* [ActiveRecord] Duplicate
*
@@ -916,6 +917,16 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
return 'x';
}
/**
* [Node] Get the fully qualified node type (mostly for Pages because Pages is Pages)
*
* @return string
*/
public static function fullyQualifiedType()
{
return \IPS\Member::loggedIn()->language()->addToStack('__app_gallery') . ' ' . \IPS\Member::loggedIn()->language()->addToStack( static::$nodeTitle . '_sg');
}
/* !Clubs */
/**
Loaded 100 of 2036 files, more files were not shown because too many files have changed in this diff. Show more