Version 4.7.0

This commit is contained in:
Neo committed 2025-12-19 16:00:35 -08:00
1 parent 517a5e1f70
commit 8ba7d43898
1933 files changed
+65613 -11332

No files matched your search

+1 -13
View File
@@ -30,7 +30,7 @@ class _Application extends \IPS\Application
if( \IPS\Request::i()->member AND \IPS\Request::i()->key )
{
$member = \IPS\Member::load( \IPS\Request::i()->member );
if( !\IPS\Login::compareHashes( md5( ( $member->members_pass_hash ?: $member->email ) . $member->members_pass_salt ), (string) \IPS\Request::i()->key ) )
if( !\IPS\Login::compareHashes( $member->getUniqueMemberHash(), (string) \IPS\Request::i()->key ) )
{
$member = NULL;
}
@@ -155,16 +155,4 @@ class _Application extends \IPS\Application
return array( 'idm_watermarkpath' );
}
/**
* Return an array of specific links to add to the sitemap
*
* @return array
*/
public function sitemapLinks()
{
return array(
\IPS\Http\Url::internal( 'app=downloads&module=downloads&controller=browse&do=categories', 'front', 'downloads_categories' ),
\IPS\Http\Url::internal( 'app=downloads&module=downloads&controller=browse', 'front', 'downloads' ),
);
}
}
+64 -2
View File
@@ -91,6 +91,7 @@ class _comments extends \IPS\Content\Api\CommentController
* @apiparam datetime date The date/time that should be used for the comment date. If not provided, will use the current date/time. Ignored for requests using an OAuth Access Token for a particular member
* @apiparam string ip_address The IP address that should be stored for the comment. If not provided, will use the IP address from the API request. Ignored for requests using an OAuth Access Token for a particular member
* @apiparam int hidden 0 = unhidden; 1 = hidden, pending moderator approval; -1 = hidden (as if hidden by a moderator)
* @apiparam bool anonymous If 1, the item will be posted anonymously.
* @throws 2D304/2 INVALID_ID The comment ID does not exist
* @throws 1D304/3 NO_AUTHOR The author ID does not exist
* @throws 1D304/4 NO_CONTENT No content was supplied
@@ -130,8 +131,15 @@ class _comments extends \IPS\Content\Api\CommentController
}
else
{
$author = new \IPS\Member;
$author->name = \IPS\Request::i()->author_name;
if ( \IPS\Request::i()->author === 0 )
{
$author = new \IPS\Member;
$author->name = \IPS\Request::i()->author_name;
}
else
{
throw new \IPS\Api\Exception( 'NO_AUTHOR', '1D304/3', 400 );
}
}
}
@@ -155,6 +163,7 @@ class _comments extends \IPS\Content\Api\CommentController
* @apiparam string author_name If author is 0, the guest name that should be used
* @apiparam string content The comment content as HTML (e.g. "<p>This is a comment.</p>"). Will be sanatized for requests using an OAuth Access Token for a particular member; will be saved unaltered for requests made using an API Key or the Client Credentials Grant Type.
* @apiparam int hidden 1/0 indicating if the comment should be hidden
* @apiparam bool anonymous If 1, the item will be posted anonymously.
* @throws 2D304/5 INVALID_ID The comment ID does not exist or the authorized user does not have permission to view it
* @throws 1D304/6 NO_AUTHOR The author ID does not exist
* @throws 2D304/9 NO_PERMISSION The authorized user does not have permission to edit the comment
@@ -219,4 +228,57 @@ class _comments extends \IPS\Content\Api\CommentController
throw new \IPS\Api\Exception( 'INVALID_ID', '2D304/7', 404 );
}
}
/**
* POST /downloads/comments/{id}/react
* Add a reaction
*
* @param int $id ID Number
* @apiparam int id ID of the reaction to add
* @apiparam int author ID of the member reacting
* @return \IPS\downloads\File\Comment
* @throws 1S425/2 NO_REACTION The reaction ID does not exist
* @throws 1S425/3 NO_AUTHOR The author ID does not exist
* @throws 1S425/4 REACT_ERROR Error adding the reaction
* @throws 1S425/5 INVALID_ID Object ID does not exist
* @note If the author has already reacted to this content, any existing reaction will be removed first
*/
public function POSTitem_react( $id )
{
return $this->_reactAdd( $id );
}
/**
* DELETE /downloads/comments/{id}/react
* Delete a reaction
*
* @param int $id ID Number
* @apiparam int author ID of the member who reacted
* @return \IPS\downloads\File\Comment
* @throws 1S425/6 NO_AUTHOR The author ID does not exist
* @throws 1S425/7 REACT_ERROR Error adding the reaction
* @throws 1S425/8 INVALID_ID Object ID does not exist
* @note If the author has already reacted to this content, any existing reaction will be removed first
*/
public function DELETEitem_react( $id )
{
return $this->_reactRemove( $id );
}
/**
* POST /downloads/comments/{id}/report
* Reports a post
*
* @param int $id ID Number
* @apiparam int author ID of the member reporting
* @apiparam int report_type Report type (0 is default and is for letting CMGR team know, more options via core_automatic_moderation_types)
* @apiparam string message Optional message
* @return \IPS\downloads\File\Comment
* @throws 1S425/B NO_AUTHOR The author ID does not exist
* @throws 1S425/C REPORTED_ALREADY The member has reported this item in the past 24 hours
*/
public function POSTitem_report( $id )
{
return $this->_report( $id );
}
}
+13 -4
View File
@@ -126,6 +126,7 @@ class _files extends \IPS\Content\Api\ItemController
* @apiparam int hidden 0 = unhidden; 1 = hidden, pending moderator approval; -1 = hidden (as if hidden by a moderator)
* @apiparam int pinned 1/0 indicating if the file should be featured
* @apiparam int featured 1/0 indicating if the file should be featured
* @apiparam bool anonymous If 1, the item will be posted anonymously.
* @throws 1S303/7 NO_CATEGEORY The category ID does not exist
* @throws 1S303/8 NO_AUTHOR The author ID does not exist
* @throws 1S303/9 NO_TITLE No title was supplied
@@ -173,7 +174,15 @@ class _files extends \IPS\Content\Api\ItemController
}
else
{
$author = new \IPS\Member;
if ( \IPS\Request::i()->author === 0 )
{
$author = new \IPS\Member;
$author->name = \IPS\Request::i()->author_name;
}
else
{
throw new \IPS\Api\Exception( 'NO_AUTHOR', '1S303/8', 400 );
}
}
}
@@ -321,7 +330,7 @@ class _files extends \IPS\Content\Api\ItemController
* @apiparam int locked 1/0 indicating if the file should be locked
* @apiparam int hidden 0 = unhidden; 1 = hidden, pending moderator approval; -1 = hidden (as if hidden by a moderator)
* @apiparam int featured 1/0 indicating if the file should be featured
* @param int $id ID Number
* @apiparam bool anonymous If 1, the item will be posted anonymously.
* @throws 2S303/C INVALID_ID The file ID is invalid or the authorized user does not have permission to view it
* @throws 1S303/D NO_CATEGORY The category ID does not exist or the authorized user does not have permission to post in it
* @throws 1S303/E NO_AUTHOR The author ID does not exist
@@ -530,8 +539,8 @@ class _files extends \IPS\Content\Api\ItemController
'dip' => \IPS\Request::i()->ipAddress(),
'dmid' => (int) $this->member->member_id,
'dsize' => 0,
'dua' => 'REST API',
'dbrowsers' => '',
'dua' => $_SERVER['HTTP_USER_AGENT'] ?? '',
'dbrowsers' => 'REST API',
'dos' => ''
) );
}
+64 -2
View File
@@ -91,6 +91,7 @@ class _reviews extends \IPS\Content\Api\CommentController
* @apiparam datetime date The date/time that should be used for the review date. If not provided, will use the current date/time. Ignored for requests using an OAuth Access Token for a particular member
* @apiparam string ip_address The IP address that should be stored for the review. If not provided, will use the IP address from the API request. Ignored for requests using an OAuth Access Token for a particular member
* @apiparam int hidden 0 = unhidden; 1 = hidden, pending moderator approval; -1 = hidden (as if hidden by a moderator)
* @apiparam bool anonymous If 1, the item will be posted anonymously.
* @reqapiparam int rating Star rating
* @throws 2D305/2 INVALID_ID The forum ID does not exist
* @throws 1D305/3 NO_AUTHOR The author ID does not exist
@@ -132,8 +133,15 @@ class _reviews extends \IPS\Content\Api\CommentController
}
else
{
$author = new \IPS\Member;
$author->name = \IPS\Request::i()->author_name;
if ( \IPS\Request::i()->author === 0 )
{
$author = new \IPS\Member;
$author->name = \IPS\Request::i()->author_name;
}
else
{
throw new \IPS\Api\Exception( 'NO_AUTHOR', '1D305/3', 400 );
}
}
}
@@ -164,6 +172,7 @@ class _reviews extends \IPS\Content\Api\CommentController
* @apiparam string content The review content as HTML (e.g. "<p>This is a review.</p>"). Will be sanatized for requests using an OAuth Access Token for a particular member; will be saved unaltered for requests made using an API Key or the Client Credentials Grant Type.
* @apiparam int hidden 1/0 indicating if the review should be hidden
* @apiparam int rating Star rating
* @apiparam bool anonymous If 1, the item will be posted anonymously.
* @throws 2D305/6 INVALID_ID The review ID does not exist or the authorized user does not have permission to view it
* @throws 1D305/7 NO_AUTHOR The author ID does not exist
* @throws 1D305/8 INVALID_RATING The rating is not a valid number up to the maximum rating
@@ -234,4 +243,57 @@ class _reviews extends \IPS\Content\Api\CommentController
throw new \IPS\Api\Exception( 'INVALID_ID', '2D305/9', 404 );
}
}
/**
* POST /downloads/reviews/{id}/react
* Add a reaction
*
* @param int $id ID Number
* @apiparam int id ID of the reaction to add
* @apiparam int author ID of the member reacting
* @return \IPS\downloads\File\Reviews
* @throws 1S425/2 NO_REACTION The reaction ID does not exist
* @throws 1S425/3 NO_AUTHOR The author ID does not exist
* @throws 1S425/4 REACT_ERROR Error adding the reaction
* @throws 1S425/5 INVALID_ID Object ID does not exist
* @note If the author has already reacted to this content, any existing reaction will be removed first
*/
public function POSTitem_react( $id )
{
return $this->_reactAdd( $id );
}
/**
* DELETE /downloads/reviews/{id}/react
* Delete a reaction
*
* @param int $id ID Number
* @apiparam int author ID of the member who reacted
* @return \IPS\downloads\File\Reviews
* @throws 1S425/6 NO_AUTHOR The author ID does not exist
* @throws 1S425/7 REACT_ERROR Error adding the reaction
* @throws 1S425/8 INVALID_ID Object ID does not exist
* @note If the author has already reacted to this content, any existing reaction will be removed first
*/
public function DELETEitem_react( $id )
{
return $this->_reactRemove( $id );
}
/**
* POST /downloads/reviews/{id}/report
* Reports a post
*
* @param int $id ID Number
* @apiparam int author ID of the member reporting
* @apiparam int report_type Report type (0 is default and is for letting CMGR team know, more options via core_automatic_moderation_types)
* @apiparam string message Optional message
* @return \IPS\downloads\File\Reviews
* @throws 1S425/B NO_AUTHOR The author ID does not exist
* @throws 1S425/C REPORTED_ALREADY The member has reported this item in the past 24 hours
*/
public function POSTitem_report( $id )
{
return $this->_report( $id );
}
}
+45 -42
View File
@@ -1,69 +1,72 @@
{
"core": {
"Announcements": {
"Categories": "IPS\\downloads\\extensions\\core\\Announcements\\Categories"
"MemberACPProfileContentTab": {
"Downloads": "IPS\\downloads\\extensions\\core\\MemberACPProfileContentTab\\Downloads"
},
"ContentRouter": {
"Files": "IPS\\downloads\\extensions\\core\\ContentRouter\\Files"
},
"AchievementAction": {
"DownloadFile": "IPS\\downloads\\extensions\\core\\AchievementAction\\DownloadFile"
},
"LiveSearch": {
"Downloads": "IPS\\downloads\\extensions\\core\\LiveSearch\\Downloads"
},
"ModeratorPermissions": {
"Files": "IPS\\downloads\\extensions\\core\\ModeratorPermissions\\Files"
},
"FileStorage": {
"FileField": "IPS\\downloads\\extensions\\core\\FileStorage\\FileField",
"Files": "IPS\\downloads\\extensions\\core\\FileStorage\\Files",
"Screenshots": "IPS\\downloads\\extensions\\core\\FileStorage\\Screenshots"
},
"Announcements": {
"Categories": "IPS\\downloads\\extensions\\core\\Announcements\\Categories"
},
"GroupForm": {
"Downloads": "IPS\\downloads\\extensions\\core\\GroupForm\\Downloads"
},
"EditorLocations": {
"Downloads": "IPS\\downloads\\extensions\\core\\EditorLocations\\Downloads",
"Categories": "IPS\\downloads\\extensions\\core\\EditorLocations\\Categories"
},
"Permissions": {
"Permissions": "IPS\\downloads\\extensions\\core\\Permissions\\Permissions"
},
"CreateMenu": {
"File": "IPS\\downloads\\extensions\\core\\CreateMenu\\File"
},
"Dashboard": {
"Overview": "IPS\\downloads\\extensions\\core\\Dashboard\\Overview"
},
"EditorLocations": {
"Categories": "IPS\\downloads\\extensions\\core\\EditorLocations\\Categories",
"Downloads": "IPS\\downloads\\extensions\\core\\EditorLocations\\Downloads"
"MemberRestrictions": {
"Downloads": "IPS\\downloads\\extensions\\core\\MemberRestrictions\\Downloads"
},
"EditorMedia": {
"Files": "IPS\\downloads\\extensions\\core\\EditorMedia\\Files"
},
"FileStorage": {
"FileField": "IPS\\downloads\\extensions\\core\\FileStorage\\FileField",
"Files": "IPS\\downloads\\extensions\\core\\FileStorage\\Files",
"Screenshots": "IPS\\downloads\\extensions\\core\\FileStorage\\Screenshots"
},
"FrontNavigation": {
"Downloads": "IPS\\downloads\\extensions\\core\\FrontNavigation\\Downloads"
},
"GroupForm": {
"Downloads": "IPS\\downloads\\extensions\\core\\GroupForm\\Downloads"
},
"GroupLimits": {
"Downloads": "IPS\\downloads\\extensions\\core\\GroupLimits\\Downloads"
},
"IpAddresses": {
"DownloadLog": "IPS\\downloads\\extensions\\core\\IpAddresses\\DownloadLog"
},
"LiveSearch": {
"Downloads": "IPS\\downloads\\extensions\\core\\LiveSearch\\Downloads"
},
"MemberACPProfileContentTab": {
"Downloads": "IPS\\downloads\\extensions\\core\\MemberACPProfileContentTab\\Downloads"
},
"MemberRestrictions": {
"Downloads": "IPS\\downloads\\extensions\\core\\MemberRestrictions\\Downloads"
},
"MemberSync": {
"Downloads": "IPS\\downloads\\extensions\\core\\MemberSync\\Downloads"
},
"ModeratorPermissions": {
"Files": "IPS\\downloads\\extensions\\core\\ModeratorPermissions\\Files"
},
"Notifications": {
"Files": "IPS\\downloads\\extensions\\core\\Notifications\\Files"
"Queue": {
"RebuildScreenshotWatermarks": "IPS\\downloads\\extensions\\core\\Queue\\RebuildScreenshotWatermarks",
"Follow": "IPS\\downloads\\extensions\\core\\Queue\\Follow",
"Notify": "IPS\\downloads\\extensions\\core\\Queue\\Notify"
},
"OverviewStatistics": {
"Downloads": "IPS\\downloads\\extensions\\core\\OverviewStatistics\\Downloads"
},
"Permissions": {
"Permissions": "IPS\\downloads\\extensions\\core\\Permissions\\Permissions"
"IpAddresses": {
"DownloadLog": "IPS\\downloads\\extensions\\core\\IpAddresses\\DownloadLog"
},
"Queue": {
"Follow": "IPS\\downloads\\extensions\\core\\Queue\\Follow",
"Notify": "IPS\\downloads\\extensions\\core\\Queue\\Notify",
"RebuildScreenshotWatermarks": "IPS\\downloads\\extensions\\core\\Queue\\RebuildScreenshotWatermarks"
"FrontNavigation": {
"Downloads": "IPS\\downloads\\extensions\\core\\FrontNavigation\\Downloads"
},
"MemberSync": {
"Downloads": "IPS\\downloads\\extensions\\core\\MemberSync\\Downloads"
},
"Notifications": {
"Files": "IPS\\downloads\\extensions\\core\\Notifications\\Files"
}
},
"nexus": {
+40 -9
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<javascript app="downloads">
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/downloads" javascript_name="ips.downloads.browse.js" javascript_type="controller" javascript_version="106107" javascript_position="1000200">/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/downloads" javascript_name="ips.downloads.browse.js" javascript_type="controller" javascript_version="107014" javascript_position="1000200">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -59,7 +59,35 @@
}
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="admin" javascript_path="controllers/settings" javascript_name="ips.settings.settings.js" javascript_type="controller" javascript_version="106107" javascript_position="1000050">/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/pending" javascript_name="ips.pending.buttons.js" javascript_type="controller" javascript_version="107014" javascript_position="1000250">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
* ips.pending.buttons.js - Pending Version
*
* Author: Stuart Silvester
*/
;( function($, _, undefined){
&quot;use strict&quot;;
ips.controller.register('downloads.front.pending.buttons', {
initialize: function () {
this.on( 'click', 'a', this.processButton );
},
processButton: function(e) {
if( $(e.currentTarget).hasClass('ipsButton_disabled') )
{
e.preventDefault();
}
$(e.currentTarget).addClass('ipsButton_disabled');
}
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="admin" javascript_path="controllers/settings" javascript_name="ips.settings.settings.js" javascript_type="controller" javascript_version="107014" javascript_position="1000050">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -112,7 +140,7 @@
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.linkedScreenshots.js" javascript_type="controller" javascript_version="106107" javascript_position="1000100">/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.linkedScreenshots.js" javascript_type="controller" javascript_version="107014" javascript_position="1000100">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -184,7 +212,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.main.js" javascript_type="controller" javascript_version="106107" javascript_position="1000100"><![CDATA[/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.main.js" javascript_type="controller" javascript_version="107014" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -627,7 +655,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.changeLog.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150"><![CDATA[/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.changeLog.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -750,7 +778,7 @@
});
}(jQuery, _));]]></file>
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.download.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150">/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.download.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -838,9 +866,12 @@
var that = this;
if ( $( e.currentTarget ).attr('data-wait') ) {
e.preventDefault();
ips.getAjax()( $( e.currentTarget ).attr('href') )
.done( function (response) {
// The download succeeded so we should get the cached session event
$(e.currentTarget).trigger('ipsDataLayerSync');
var secondsRemaining = response.download - response.currentTime;
$( e.currentTarget )
@@ -875,7 +906,7 @@
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.subscribe.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150">/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.subscribe.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -938,7 +969,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.submit.js" javascript_type="template" javascript_version="106107" javascript_position="1000050"><![CDATA[/* VIEW TEMPLATES */
<file javascript_app="downloads" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.submit.js" javascript_type="template" javascript_version="107014" javascript_position="1000050"><![CDATA[/* VIEW TEMPLATES */
ips.templates.set('downloads.submit.screenshot', " \
<div class='ipsUploader__row ipsUploader__row--withBorder ipsUploader__row--image ipsAttach ipsContained {{#done}}ipsAttach_done{{/done}}' id='{{id}}' data-role='file' data-fileid='{{id}}' data-filesize='{{sizeRaw}}' data-fullsizeurl='{{imagesrc}}' data-thumbnailurl='{{thumbnail}}' data-fileType='image'>\
<div class='ipsUploader__rowPreview ipsType_center' data-role='preview'>\
+15 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="downloads" version="106107">
<app key="downloads" version="107014">
<word key="__app_downloads" js="0">Downloads</word>
<word key="frontnavigation_downloads" js="0">Downloads</word>
<word key="__indefart_downloads_file_comment" js="0">a comment on a file</word>
@@ -13,6 +13,7 @@
<word key="__defart_downloads_file_plural" js="0">{!#[1:file][?:files]}</word>
<word key="__defart_downloads_file_review" js="0">review on a file</word>
<word key="__defart_downloads_file_review_plural" js="0">{!#[1:review][?:reviews]} on a file</word>
<word key="__defart_downloads_file_pending" js="0">new versions</word>
<word key="menu__downloads_downloads" js="0">Downloads</word>
<word key="module__downloads_downloads" js="0">Downloads</word>
<word key="menu__downloads_stats" js="0">Downloads</word>
@@ -22,11 +23,13 @@
<word key="search_contextual_item_downloads_categories" js="0">This Category</word>
<word key="search_contextual_item_downloads_file" js="0">This File</word>
<word key="downloads_categories" js="0">Downloads Categories</word>
<word key="download_categories_lc" js="0">downloads categories</word>
<word key="filestorage__downloads_Files" js="0">Downloads Files</word>
<word key="filestorage__downloads_Screenshots" js="0">Downloads Screenshots</word>
<word key="filestorage__downloads_FileField" js="0">Downloads Custom Fields</word>
<word key="downloads_files" js="0">Downloads Files</word>
<word key="downloads_file" js="0">File</word>
<word key="downloads_file_sg_lc" js="0">downloads file</word>
<word key="modlog__action_restorebackup" js="0"><![CDATA[Restored a previous version for a file: <a href='%s'>%s</a>]]></word>
<word key="modlog__action_visibilitybackup" js="0"><![CDATA[Toggled visibility for a previous version for a file: <a href='%s'>%s</a>]]></word>
<word key="modlog__action_deletebackup" js="0"><![CDATA[Deleted a previous version for a file: <a href='%s'>%s</a>]]></word>
@@ -320,6 +323,7 @@
<word key="file_requires_approval_g" js="0">The file you submitted must be approved by a staff member before it will be visible</word>
<word key="file_no_changelog" js="0">No changelog available for this version.</word>
<word key="file_version_released" js="0">Released %s</word>
<word key="file_published" js="0">Published</word>
<word key="restore" js="0">Restore</word>
<word key="hide_from_members" js="0">Hide from members</word>
<word key="unhide_from_members" js="0">Unhide from members</word>
@@ -479,6 +483,8 @@
<word key="r__topdownloads_manage" js="0">Can view Top Files?</word>
<word key="stats_overview_downloads" js="0">File Downloads</word>
<word key="stats_overview_downloads_desc" js="0">Logging of downloads and the retention period for logs can be adjusted on a per-category basis</word>
<word key="downloads_stats_uploader_count" js="0">{# [1:member][?:members]} uploaded files.</word>
<word key="downloads_stats_downloader_count" js="0">{# [1:member][?:members]} downloaded files.</word>
<word key="ipAddresses__downloads_DownloadLog" js="0">Downloads</word>
<word key="block_fileFeed" js="0">Files Feed</word>
<word key="block_fileFeed_desc" js="0">Create a feed of files</word>
@@ -590,6 +596,7 @@
<word key="file_notify_current" js="0">You are currently receiving these notifications by %s</word>
<word key="file_notify_none" js="0">You do not have any notification methods set up</word>
<word key="file_version_pending_approval" js="0">The new version of this file is not yet approved and is only visible to staff. The previous version of the file remains visible to members.</word>
<word key="file_version_pending_cannot_approve" js="0">The base version of this file is pending approval, this base version must be approved before this version can be approved.</word>
<word key="pending_no_new_files" js="0">This version does not have any updated files.</word>
<word key="pending_no_changelog" js="0">The author did not provide a change log for this version.</word>
<word key="pending_version" js="0">Pending version</word>
@@ -597,6 +604,13 @@
<word key="pending_version_reject_title" js="0">Reject this version?</word>
<word key="pending_version_reject_desc" js="0">This will delete this pending version and leave the current version of the file visible</word>
<word key="file_new_version_date" js="0">New Version Submitted: %s</word>
<word key="achievement_filter_DownloadFile_nth_suffix" js="0">th download</word>
<word key="achievement_filter_DownloadFile_receiver" js="0">To the user who uploaded the file</word>
<word key="achievement_filter_DownloadFile_giver" js="0">To the user who downloaded the file</word>
<word key="AchievementAction__DownloadFile_log" js="0">Downloaded the file %s</word>
<word key="AchievementAction__DownloadFile_title_generic" js="0">file downloaded</word>
<word key="AchievementAction__DownloadFile_title" js="0">User downloads a file</word>
<word key="AchievementAction__DownloadFile" js="0">Member downloads a Downloads File</word>
<word key="makePrimaryScreenshot" js="1">Make this the primary screenshot for this file</word>
<word key="makePrimary" js="1">Primary</word>
<word key="removeScreenshot" js="1">Remove this screenshot</word>
+40 -20
View File
@@ -341,6 +341,18 @@
"comment": "Is changelog required?",
"unsigned": false,
"auto_increment": false
},
"cfiles": {
"name": "cfiles",
"type": "BIGINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": 0,
"comment": "",
"unsigned": false,
"auto_increment": false
}
},
"indexes": {
@@ -801,18 +813,16 @@
"zerofill": false
},
"file_desc": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
"length": 0,
"name": "file_desc",
"type": "TEXT",
"unsigned": false,
"type": "MEDIUMTEXT",
"length": 0,
"decimals": null,
"values": [],
"zerofill": false
"allow_null": true,
"default": null,
"comment": "",
"unsigned": false,
"auto_increment": false
},
"file_size": {
"name": "file_size",
@@ -1367,6 +1377,18 @@
"comment": "",
"unsigned": true,
"auto_increment": false
},
"file_published": {
"name": "file_published",
"type": "INT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": 0,
"comment": "",
"unsigned": false,
"auto_increment": false
}
},
"indexes": {
@@ -2509,18 +2531,16 @@
"zerofill": false
},
"b_filedesc": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
"length": 0,
"name": "b_filedesc",
"type": "TEXT",
"unsigned": false,
"type": "MEDIUMTEXT",
"length": 0,
"decimals": null,
"values": [],
"zerofill": false
"allow_null": true,
"default": null,
"comment": "",
"unsigned": false,
"auto_increment": false
},
"b_hidden": {
"allow_null": false,
+29 -12
View File
@@ -136,16 +136,16 @@
<li class='ipsToolList_primaryAction'>
{{if $currentCategory OR $currentCategory = \IPS\downloads\Category::theOnlyNode()}}
{{if \IPS\Member::loggedIn()->group['idm_bulk_submit']}}
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&category={$currentCategory->id}&_new=1" seoTemplate="downloads_submit"}" data-ipsDialog data-ipsDialog-title='{lang="submit_a_file"}' data-ipsDialog-size='narrow'>
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&category={$currentCategory->id}&_new=1" seoTemplate="downloads_submit"}" data-ipsDialog data-ipsDialog-title='{lang="submit_a_file"}' data-ipsDialog-size='narrow' rel='nofollow noindex'>
{lang="submit_a_file"}
</a>
{{else}}
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&category={$currentCategory->id}&_new=1&do=submit" seoTemplate="downloads_submit"}">
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&category={$currentCategory->id}&_new=1&do=submit" seoTemplate="downloads_submit"}" rel='nofollow noindex'>
{lang="submit_a_file"}
</a>
{{endif}}
{{else}}
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&_new=1" seoTemplate="downloads_submit"}" data-ipsDialog data-ipsDialog-title='{lang="submit_a_file"}' data-ipsDialog-size='narrow'>
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&_new=1" seoTemplate="downloads_submit"}" data-ipsDialog data-ipsDialog-title='{lang="submit_a_file"}' data-ipsDialog-size='narrow' rel='nofollow noindex'>
{lang="submit_a_file"}
</a>
{{endif}}
@@ -691,7 +691,7 @@
{{if $item->canDownload()}}
<a href='{{if settings.idm_antileech AND !$item->requiresDownloadConfirmation()}}{$item->url('download')->csrf()}{{else}}{$item->url('download')}{{endif}}' class='ipsButton ipsButton_fullWidth ipsButton_small ipsButton_primary' {{if $item->requiresDownloadConfirmation()}}data-dialog{{endif}}>{lang="download_now"}</a>
{{else}}
<a href='{{if !$item->container()->message('disclaimer') OR !\in_array( $item->container()->disclaimer_location, [ 'purchase', 'both' ] )}}{$item->url('buy')->csrf()}{{else}}{$item->url('buy')}{{endif}}' class='ipsButton ipsButton_fullWidth ipsButton_small ipsButton_primary'><i class='fa fa-shopping-cart'></i> &nbsp;{lang="buy_now"}{{if $price = $item->price()}} - {$price|raw}{{endif}}</a>
<a href='{$item->url('buy')->csrf()}' class='ipsButton ipsButton_fullWidth ipsButton_small ipsButton_primary'><i class='fa fa-shopping-cart'></i> &nbsp;{lang="buy_now"}{{if $price = $item->price()}} - {$price|raw}{{endif}}</a>
{{endif}}
{{elseif !$item->isPurchasable( FALSE )}}
{lang="purchasing_disabled"}
@@ -1084,7 +1084,10 @@
{{if !$file->canView()}}
<p class='ipsType_light'>{lang="nexus_file_no_longer_available"}</p>
{{endif}}]]></template>
<template template_group="stats" template_name="downloadsTable" template_data="$select, $pagination, $members" template_location="admin" template_app="downloads"><![CDATA[
<template template_group="stats" template_name="downloadsTable" template_data="$select, $pagination, $members, $total" template_location="admin" template_app="downloads"><![CDATA[
<div class="acpBlock">
<h1 class="ipsBox_titleBar">{lang="downloads_stats_downloader_count" pluralize="$total"}</h1></div>
<br>
{{if trim( $pagination )}}
{$pagination|raw}
<br><br>
@@ -1119,7 +1122,9 @@
</div>]]></template>
<template template_group="stats" template_name="link" template_data="$member, $type, $lang" template_location="admin" template_app="downloads"><![CDATA[
&nbsp;&nbsp;<a href="{url="app=core&module=members&controller=members&do=editBlock&block=IPS\\downloads\\extensions\\core\\MemberACPProfileContentTab\\Downloads&id={$member->member_id}&chart={$type}"}" data-ipsDialog data-ipsDialog-title="{lang="$lang"}">({lang="$lang"})</a>]]></template>
<template template_group="stats" template_name="submittersTable" template_data="$select, $pagination, $members" template_location="admin" template_app="downloads"><![CDATA[
<template template_group="stats" template_name="submittersTable" template_data="$select, $pagination, $members, $total" template_location="admin" template_app="downloads"><![CDATA[<div class="acpBlock">
<h1 class="ipsBox_titleBar">{lang="downloads_stats_uploader_count" pluralize="$total"}</h1></div>
<br>
{{if trim( $pagination )}}
{$pagination|raw}
<br><br>
@@ -1657,7 +1662,7 @@
<span class="ipsType_light ipsType_blendLinks ipsResponsive_hidePhone ipsResponsive_inline"><i class="fa fa-info-circle"></i> {lang="download_no_permission"}</span>
{{endif}}
{{else}}
<a href='{{if settings.idm_antileech AND !$file->requiresDownloadConfirmation()}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}' class='ipsButton ipsButton_fullWidth ipsButton_large ipsButton_important' {{if $file->requiresDownloadConfirmation()}}data-ipsDialog{{endif}}>{lang="download_now"}</a>
<a href='{{if settings.idm_antileech AND !$file->requiresDownloadConfirmation()}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}' class='ipsButton ipsButton_fullWidth ipsButton_large ipsButton_important' {{if $file->requiresDownloadConfirmation()}}data-ipsDialog{{endif}} data-datalayer-postfetch >{lang="download_now"}</a>
{{endif}}
</li>
]]></template>
@@ -1827,10 +1832,16 @@
{{if $pendingVersion->hidden() === 1 and $pendingVersion->canUnhide()}}
<div class="ipsMessage ipsMessage_warning ipsSpacer_both">
<p class="ipsType_reset">{lang="file_version_pending_approval"}</p>
{{if $file->hidden() === 1}}
<br>
<p class="ipsType_reset">{lang="file_version_pending_cannot_approve"}</p>
{{endif}}
<br>
<ul class='ipsList_inline'>
<ul class='ipsList_inline' data-controller="downloads.front.pending.buttons">
{{if $file->hidden() !== 1}}
<li><a href="{$pendingVersion->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unhide' ) )}" class="ipsButton ipsButton_positive ipsButton_verySmall" title='{lang="approve_title_file"}'><i class="fa fa-check"></i> {lang="approve"}</a></li>
<li><a href='{$pendingVersion->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'delete' ) )}' data-confirm title='{lang="downloads_delete_title"}' data-confirmMessage="{lang="pending_version_reject_title"}" data-confirmSubMessage="{lang="pending_version_reject_desc"}" class='ipsButton ipsButton_negative ipsButton_verySmall'><i class='fa fa-times'></i> {lang="pending_version_reject"}</a></li>
{{endif}}
<li><a href='{$pendingVersion->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'delete' ) )}' data-confirm title='{lang="pending_version_reject_title"}' data-confirmMessage="{lang="pending_version_reject_title"}" data-confirmSubMessage="{lang="pending_version_reject_desc"}" class='ipsButton ipsButton_negative ipsButton_verySmall'><i class='fa fa-times'></i> {lang="pending_version_reject"}</a></li>
</ul>
</div>
{{endif}}
@@ -2213,7 +2224,7 @@
{template="changeLog" group="view" params="$file, $versionData"}
</div>
<ul class='ipsMenu ipsMenu_selectable ipsMenu_auto ipsHide' id='elChangelog_menu'>
{{$versionNumber = $file->version ?: (string) \IPS\DateTime::ts( $file->updated );}}
{{$versionNumber = $file->version ?: (string) \IPS\DateTime::ts( $file->published );}}
<li class='ipsMenu_item {{if !request.changelog}}ipsMenu_itemChecked{{endif}}' data-ipsMenuValue='{$versionNumber}'><a href='{$file->url()->setQuerystring( 'changelog', 0 )}' title='{lang="see_changelog_for" sprintf="$versionNumber"}'>{$versionNumber}</a></li>
{{foreach $previousVersions as $version}}
{{$versionNumber = $version['b_version'] ?: (string) \IPS\DateTime::ts( $version['b_backup'] );}}
@@ -2319,6 +2330,12 @@
<span class="ipsDataItem_generic ipsDataItem_size3"><strong>{lang="submitted"}</strong></span>
<span class="ipsDataItem_generic cFileInfoData">{datetime="$file->submitted"}</span>
</li>
{{if $file->published}}
<li class="ipsDataItem">
<span class="ipsDataItem_generic ipsDataItem_size3"><strong>{lang="file_published"}</strong></span>
<span class="ipsDataItem_generic cFileInfoData">{datetime="$file->published"}</span>
</li>
{{endif}}
{{if $file->updated != $file->submitted}}
<li class="ipsDataItem">
<span class="ipsDataItem_generic ipsDataItem_size3"><strong>{lang="updated"}</strong></span>
@@ -2375,7 +2392,7 @@
{{if $file->canEdit() AND $file->container()->can('add')}}
{{if $file->hasPendingVersion()}}
<li class='ipsMenu_item ipsMenu_itemDisabled'><a href='#'>{lang="upload_new_version_pending"}</a></li>
{{else}}
{{else}}
<li class='ipsMenu_item'><a href='{$file->url()->setQueryString( array( 'do' => 'newVersion' ) )}' title='{lang="upload_new_version_title"}'>{lang="upload_new_version"}</a></li>
{{endif}}
{{endif}}
@@ -2395,7 +2412,7 @@
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unpin' ) )}' title='{lang="unpin_title_file"}'>{lang="unpin"}</a></li>
{{endif}}
{{if $file->canHide()}}
<li class='ipsMenu_item'><a href='{$file->url()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}' title='{lang="hide_title_file"}' data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}' title='{lang="hide_title_file"}' data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
{{endif}}
{{if $file->canUnhide()}}
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unhide' ) )}' title='{{if $file->hidden() === 1}}{lang="approve_title_file"}{{else}}{lang="unhide_title_file"}{{endif}}'>{{if $file->hidden() === 1}}{lang="approve"}{{else}}{lang="unhide"}{{endif}}</a></li>
+76 -1
View File
@@ -407,5 +407,80 @@
"106104": "4.6.0 Beta 3",
"106105": "4.6.0 Beta 3.1",
"106106": "4.6.0 Beta 4",
"106107": "4.6.0"
"106107": "4.6.0",
"106108": "4.6.0",
"106109": "4.6.0",
"106110": "4.6.1",
"106111": "4.6.1",
"106112": "4.6.1",
"106113": "4.6.2",
"106114": "4.6.2",
"106115": "4.6.2",
"106116": "4.6.3",
"106117": "4.6.3",
"106118": "4.6.4",
"106119": "4.6.4",
"106120": "4.6.4",
"106121": "4.6.4",
"106122": "4.6.5",
"106123": "4.6.5.1",
"106125": "4.6.5.1",
"106126": "4.6.5.1",
"106127": "4.6.5.1",
"106128": "4.6.5.1",
"106129": "4.6.5.1",
"106130": "4.6.5.1",
"106131": "4.6.5.1",
"106132": "4.6.6",
"106133": "4.6.6",
"106134": "4.6.7 Beta 1",
"106135": "4.6.7 Beta 2",
"106136": "4.6.7",
"106137": "4.6.7",
"106138": "4.6.8 Beta 1",
"106139": "4.6.8 Beta 2",
"106140": "4.6.8",
"106141": "4.6.8",
"106142": "4.6.8",
"106143": "4.6.8",
"106144": "4.6.9 Beta 1",
"106145": "4.6.9 Beta 2",
"106146": "4.6.9 Beta 3",
"106147": "4.6.9",
"106148": "4.6.9",
"106149": "4.6.10 Beta 1",
"106150": "4.6.10 Beta 2",
"106151": "4.6.10",
"106152": "4.6.10",
"106153": "4.6.10",
"106154": "4.6.10",
"106155": "4.6.10",
"106156": "4.6.11 Beta 1",
"106157": "4.6.11 Beta 1",
"106158": "4.6.11 Beta 2",
"106159": "4.6.11",
"106160": "4.6.11",
"106161": "4.6.12 Beta 1",
"106162": "4.6.12 Beta 1",
"106163": "4.6.12 Beta 2",
"106164": "4.6.12",
"106165": "4.6.12",
"106166": "4.6.12",
"106167": "4.6.12.1",
"106168": "4.6.13 Beta 1",
"107000": "4.7.0 Beta 1",
"107001": "4.7.0 Beta 1",
"107002": "4.7.0 Beta 2",
"107003": "4.7.0 Beta 2",
"107004": "4.7.0 Beta 3",
"107005": "4.7.0 Beta 4",
"107006": "4.7.0 Beta 4.1",
"107007": "4.7.0 Beta 5",
"107008": "4.7.0 Beta 6",
"107009": "4.7.0 Beta 7",
"107010": "4.7.0 Beta 8",
"107011": "4.7.0 Beta 9",
"107012": "4.7.0 Beta 10",
"107013": "4.7.0",
"107014": "4.7.0"
}
@@ -0,0 +1,271 @@
<?php
/**
* @brief Achievement Action Extension
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
* @copyright (c) Invision Power Services, Inc.
* @license https://www.invisioncommunity.com/legal/standards/
* @subpackage Downloads
* @since 30 Sep 2021
*/
namespace IPS\downloads\extensions\core\AchievementAction;
/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
exit;
}
/**
* Achievement Action Extension
*/
class _DownloadFile extends \IPS\core\Achievements\Actions\AbstractAchievementAction
{
/**
* Get filter form elements
*
* @param array|NULL $filters Current filter values (if editing)
* @param \IPS\Http\Url $url The URL the form is being shown on
* @return array
*/
public function filters( ?array $filters, \IPS\Http\Url $url ): array
{
$return = array();
$return['nodes'] = new \IPS\Helpers\Form\Node( 'achievement_filter_DownloadFile_nodes', ( $filters and isset( $filters['nodes'] ) and $filters['nodes'] ) ? $filters['nodes'] : 0, FALSE, [
'url' => $url,
'class' => 'IPS\downloads\Category',
'showAllNodes' => TRUE,
'multiple' => TRUE,
], NULL, \IPS\Member::loggedIn()->language()->addToStack( 'achievement_filter_NewContentItem_node_prefix', FALSE, [ 'sprintf' => [
\IPS\Member::loggedIn()->language()->addToStack( 'downloads_file_sg_lc', FALSE ),
\IPS\Member::loggedIn()->language()->addToStack( 'categories_sg_lc', FALSE )
] ] ) );
$return['nodes']->label = \IPS\Member::loggedIn()->language()->addToStack( 'achievement_filter_NewContentItem_node', FALSE, [ 'sprintf' => [ \IPS\Member::loggedIn()->language()->addToStack( 'downloads_file_sg_lc', FALSE, [ 'strtolower' => TRUE ] ) ] ] );
$return['milestone'] = new \IPS\Helpers\Form\Number( 'achievement_filter_DownloadFile_nth', ( $filters and isset( $filters['milestone'] ) and $filters['milestone'] ) ? $filters['milestone'] : 0, FALSE, [], NULL, \IPS\Member::loggedIn()->language()->addToStack('achievement_filter_nth_their'), \IPS\Member::loggedIn()->language()->addToStack('achievement_filter_DownloadFile_nth_suffix') );
$return['milestone']->label = \IPS\Member::loggedIn()->language()->addToStack('achievement_filter_NewContentItem_nth');
return $return;
}
/**
* Format filter form values
*
* @param array $values The values from the form
* @return array
*/
public function formatFilterValues( array $values ): array
{
$return = [];
if ( isset( $values['achievement_filter_DownloadFile_nodes'] ) )
{
$return['nodes'] = array_keys( $values['achievement_filter_DownloadFile_nodes'] );
}
if ( isset( $values['achievement_filter_DownloadFile_nth'] ) )
{
$return['milestone'] = $values['achievement_filter_DownloadFile_nth'];
}
return $return;
}
/**
* Work out if the filters applies for a given action
*
* Important note for milestones: consider the context. This method is called by \IPS\Member::achievementAction(). If your code
* calls that BEFORE making its change in the database (or there is read/write separation), you will need to add
* 1 to the value being considered for milestones
*
* @param \IPS\Member $subject The subject member
* @param array $filters The value returned by formatFilterValues()
* @param mixed $extra Any additional information about what is happening (e.g. if a post is being made: the post object)
* @return bool
*/
public function filtersMatch( \IPS\Member $subject, array $filters, $extra = NULL ): bool
{
if ( isset( $filters['nodes'] ) )
{
if ( !\in_array( $extra['file']->container()->_id, $filters['nodes'] ) )
{
return FALSE;
}
}
if ( isset( $filters['milestone'] ) )
{
if ( \IPS\Db::i()->select( 'COUNT(*)', 'downloads_downloads', [ 'dmid=?', $subject->member_id ] )->first() < $filters['milestone'] )
{
return FALSE;
}
}
return TRUE;
}
/**
* Get the labels for the people this action might give awards to
*
* @param array|NULL $filters Current filter values
*
* @return array
*/
public function awardOptions( ?array $filters ): array
{
return [
'subject' => 'achievement_filter_DownloadFile_receiver',
'other' => 'achievement_filter_DownloadFile_giver'
];
}
/**
* Get the "other" people we need to award =stuff to
*
* @param mixed $extra Any additional information about what is happening (e.g. if a post is being made: the post object)
* @param array|NULL $filters Current filter values
* @return array
*/
public function awardOther( $extra = NULL, ?array $filters = NULL ): array
{
return [ $extra['downloader'] ];
}
/**
* Get identifier to prevent the member being awarded points for the same action twice
* Must be unique within within of this domain, must not exceed 32 chars.
*
* @param \IPS\Member $subject The subject member
* @param mixed $extra Any additional information about what is happening (e.g. if a post is being made: the post object)
* @return string
*/
public function identifier( \IPS\Member $subject, $extra = NULL ): string
{
return (string) $extra['file']->id . '.' . $extra['downloader']->member_id;
}
/**
* Return a description for this action to show in the log
*
* @param string $identifier The identifier as returned by identifier()
* @param array $actor If the member was the "subject", "other", or both
* @return string
*/
public function logRow( string $identifier, array $actor ): string
{
list( $fileId, $memberId ) = explode( '.', $identifier );
try
{
$item = \IPS\downloads\File::load( $fileId );
$sprintf = [ 'htmlsprintf' => [
\IPS\Theme::i()->getTemplate( 'global', 'core', 'global' )->basicUrl( $item->url(), TRUE, $item->mapped('title') ?: $item->indefiniteArticle(), FALSE )
] ];
}
catch ( \OutOfRangeException $e )
{
$sprintf = [ 'sprintf' => [ \IPS\Member::loggedIn()->language()->addToStack('modcp_deleted') ] ];
}
return \IPS\Member::loggedIn()->language()->addToStack( 'AchievementAction__DownloadFile_log', FALSE, $sprintf );
}
/**
* Get "description" for rule
*
* @param \IPS\core\Achievements\Rule $rule The rule
* @return string|NULL
*/
public function ruleDescription( \IPS\core\Achievements\Rule $rule ): ?string
{
$conditions = [];
if ( isset( $rule->filters['milestone'] ) )
{
$conditions[] = \IPS\Member::loggedIn()->language()->addToStack( 'achievements_title_filter_milestone', FALSE, [
'htmlsprintf' => [
\IPS\Theme::i()->getTemplate( 'achievements' )->ruleDescriptionBadge( 'milestone', \IPS\Member::loggedIn()->language()->addToStack( 'achievements_title_filter_milestone_nth', FALSE, [ 'pluralize' => [ $rule->filters['milestone'] ] ] ) )
],
'sprintf' => [ \IPS\Member::loggedIn()->language()->addToStack('AchievementAction__DownloadFile_title_generic') ]
] );
}
if ( $nodeCondition = $this->_nodeFilterDescription( $rule ) )
{
$conditions[] = $nodeCondition;
}
return \IPS\Theme::i()->getTemplate( 'achievements' )->ruleDescription(
\IPS\Member::loggedIn()->language()->addToStack( 'AchievementAction__DownloadFile_title' ),
$conditions
);
}
/**
* Get "description" for rule (usually a description of the rule's filters)
*
* @param \IPS\core\Achievements\Rule $rule The rule
* @return string|NULL
*/
protected function _nodeFilterDescription( \IPS\core\Achievements\Rule $rule ): ?string
{
if ( isset( $rule->filters['nodes'] ) )
{
$nodeNames = [];
foreach ( $rule->filters['nodes'] as $id )
{
try
{
$nodeNames[] = \IPS\downloads\Category::load( $id )->_title;
}
catch ( \OutOfRangeException $e ) {}
}
if ( $nodeNames )
{
return \IPS\Member::loggedIn()->language()->addToStack( 'achievements_title_filter_location', FALSE, [
'htmlsprintf' => [
\IPS\Theme::i()->getTemplate( 'achievements' )->ruleDescriptionBadge( 'location',
\count( $nodeNames ) === 1 ? $nodeNames[0] : \IPS\Member::loggedIn()->language()->addToStack( 'achievements_title_filter_location_val', FALSE, [ 'sprintf' => [
\count( $nodeNames ),
\IPS\Member::loggedIn()->language()->addToStack( 'download_categories_lc', FALSE, [ 'strtolower' => TRUE ] )
] ] ),
\count( $nodeNames ) === 1 ? NULL : $nodeNames
)
],
] );
}
}
return NULL;
}
/**
* Get rebuild data
*
* @return array
*/
static public function rebuildData()
{
return [ [
'table' => 'downloads_downloads',
'pkey' => 'did',
'date' => 'dtime',
'where' => [],
] ];
}
/**
* Process the rebuild row
*
* @param array $row Row from database
* @param array $data Data collected when starting rebuild [table, pkey...]
* @return void
*/
public static function rebuildRow( $row, $data )
{
$file = \IPS\downloads\File::load( $row['dfid'] );
$file->author()->achievementAction( 'downloads', 'DownloadFile', [
'file' => $file,
'downloader' => \IPS\Member::load( $row['dmid'] )
] );
}
}
@@ -45,6 +45,52 @@ class _Downloads
{
return NULL;
}
/**
* Can whatever is posted in this editor be moderated?
* If this returns TRUE, we must ensure the content is ran through word, link and image filters
*
* @param \IPS\Member $member The member
* @param \IPS\Helpers\Form\Editor $field The editor field
* @return bool
*/
public function canBeModerated( $member, $field )
{
/* Uploading a new file */
if ( preg_match( '/^(?:filedata_\d+_)?downloads\-new\-file$/', $field->options['autoSaveKey'] ) )
{
return TRUE;
}
/* Uploading a new version */
elseif ( preg_match( '/^downloads\-\d+\-changelog$/', $field->options['autoSaveKey'] ) )
{
return TRUE;
}
/* Editing a file's details */
if ( preg_match( '/^downloads\-file\-\d+$/', $field->options['autoSaveKey'] ) )
{
return TRUE;
}
/* Custom fields */
elseif ( preg_match( '/^[a-z0-9]{32}$/', $field->options['autoSaveKey'] ) )
{
return TRUE;
}
/* Creating/editing a comment/review */
elseif ( preg_match( '/^(?:editComment|reply|review)\-downloads\/downloads\-\d+/', $field->options['autoSaveKey'] ) )
{
return TRUE;
}
/* Unknown */
else
{
if ( \IPS\IN_DEV )
{
throw new \RuntimeException( 'Unknown canBeModerated: ' . $field->options['autoSaveKey'] );
}
return FALSE;
}
}
/**
* Permission check for attachments
@@ -71,7 +71,7 @@ class _Downloads
$form->add( new \IPS\Helpers\Form\Number( 'min_posts', isset( $restrictions['min_posts'] ) ? $restrictions['min_posts'] : 0, FALSE, array( 'unlimited' => 0, 'unlimitedLang' => 'idm_throttling_unlimited' ), NULL, NULL, \IPS\Member::loggedIn()->language()->addToStack('approved_posts_comments') ) );
}
$form->add( new \IPS\Helpers\Form\Number( 'idm_throttling', $group->idm_throttling, FALSE, array( 'unlimited' => 0, 'unlimitedLang' => 'idm_throttling_unlimited' ), NULL, NULL, \IPS\Member::loggedIn()->language()->addToStack('idm_throttling_suffix') ) );
$form->add( new \IPS\Helpers\Form\Interval( 'idm_wait_period', $group->idm_wait_period, FALSE, array( 'valueAs' => \IPS\Helpers\Form\Interval::SECONDS, 'unlimited' => 0, 'unlimitedLang' => 'idm_throttling_unlimited' ) ) );
$form->add( new \IPS\Helpers\Form\Interval( 'idm_wait_period', $group->g_id ? $group->idm_wait_period : 0, FALSE, array( 'valueAs' => \IPS\Helpers\Form\Interval::SECONDS, 'unlimited' => 0, 'unlimitedLang' => 'idm_throttling_unlimited' ) ) );
$form->add( new \IPS\Helpers\Form\Number( 'limit_sim', isset( $restrictions['limit_sim'] ) ? $restrictions['limit_sim'] : 0, FALSE, array( 'unlimited' => 0 ) ) );
if ( \IPS\Application::appIsEnabled( 'nexus' ) and \IPS\Settings::i()->idm_nexus_on )
{
@@ -68,14 +68,15 @@ class _Downloads extends \IPS\core\MemberACPProfile\Restriction
return $return;
}
/**
* Get details of a change to show on history
*
* @param array $changes Changes as set in save()
* @param array $row Row of data from member history table.
* @return array
*/
public static function changesForHistory( $changes )
public static function changesForHistory( array $changes, array $row ): array
{
if ( isset( $changes['idm_block_submissions'] ) )
{
@@ -104,7 +104,20 @@ class _File extends \IPS\nexus\Invoice\Item\Purchase
return parent::clientAreaAction( $purchase );
}
$renewalCosts = json_decode( $file->renewal_price, TRUE );
$currency = $purchase->original_invoice->currency;
/* If invoice doesn't exist, or currency no longer exists, use default */
try
{
$currency = $purchase->original_invoice->currency;
if( !isset( $renewalCosts[ $currency ] ) )
{
throw \OutOfRangeException();
}
}
catch( \OutOfRangeException $e )
{
$currency = \IPS\nexus\Customer::loggedIn()->defaultCurrency();
}
$tax = NULL;
if ( $purchase->tax )
@@ -143,7 +143,7 @@ class _downloaders extends \IPS\Dispatcher\Controller
FALSE
);
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate('stats')->downloadsTable( $select, $pagination, $members );
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate('stats')->downloadsTable( $select, $pagination, $members, $total );
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('menu__downloads_stats_downloaders');
}
else
@@ -144,7 +144,7 @@ class _submitters extends \IPS\Dispatcher\Controller
);
\IPS\Output::i()->output .= \IPS\Theme::i()->getTemplate( 'global', 'core' )->message( \IPS\Member::loggedIn()->language()->addToStack( 'stats_include_hidden_content' ), 'info' );
\IPS\Output::i()->output .= \IPS\Theme::i()->getTemplate('stats')->submittersTable( $select, $pagination, $members );
\IPS\Output::i()->output .= \IPS\Theme::i()->getTemplate('stats')->submittersTable( $select, $pagination, $members, $total );
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('menu__downloads_stats_submitters');
}
else
@@ -101,7 +101,7 @@ class _browse extends \IPS\Dispatcher\Controller
if ( \IPS\Member::loggedIn()->member_id )
{
$key = md5( ( \IPS\Member::loggedIn()->members_pass_hash ?: \IPS\Member::loggedIn()->email ) . \IPS\Member::loggedIn()->members_pass_salt );
$key = \IPS\Member::loggedIn()->getUniqueMemberHash();
\IPS\Output::i()->rssFeeds['idm_rss_title'] = \IPS\Output::i()->rssFeeds['idm_rss_title']->setQueryString( array( 'member' => \IPS\Member::loggedIn()->member_id , 'key' => $key ) );
}
@@ -50,6 +50,11 @@ class _pending extends \IPS\Content\Controller
$this->file = \IPS\downloads\File::load( \IPS\Request::i()->file_id );
$this->version = \IPS\downloads\File\PendingVersion::load( \IPS\Request::i()->id );
if( $this->file->id !== $this->version->file()->id )
{
throw new \OutOfRangeException;
}
if ( !$this->version->canUnhide() )
{
\IPS\Output::i()->error( 'node_error', '2D417/1', 404, '' );
@@ -67,6 +72,7 @@ class _pending extends \IPS\Content\Controller
}
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_view.js', 'downloads', 'front' ) );
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_pending.js', 'downloads', 'front' ) );
parent::execute();
}
@@ -138,4 +144,19 @@ class _pending extends \IPS\Content\Controller
$file->printFile();
exit;
}
/**
* Moderate
*
* @return void
*/
protected function moderate()
{
if( $this->file->hidden() === 1 AND \IPS\Request::i()->action == 'unhide' )
{
\IPS\Output::i()->error( 'file_version_pending_cannot_approve', '2D417/4', 403, '' );
}
return parent::moderate();
}
}
@@ -238,27 +238,31 @@ class _submit extends \IPS\Dispatcher\Controller
$linkedScreenshots = array();
/* Files may not be an array since we have an option to limit to a single upload */
if( !\is_array( $values['files'] ) )
{
$values['files'] = [ $values['files'] ];
}
foreach ( $values['files'] as $file )
if( $values['files'] !== NULL )
{
$files[ $k ] = (string) $file;
if ( !isset( $existing[ (string) $file ] ) )
if ( !\is_array( $values['files'] ) )
{
\IPS\Db::i()->insert( 'downloads_files_records', array(
'record_post_key' => isset( \IPS\Request::i()->bulk ) ? md5( \IPS\Request::i()->postKey . "-{$k}" ) : \IPS\Request::i()->postKey,
'record_type' => 'upload',
'record_location' => (string) $file,
'record_realname' => $file->originalFilename,
'record_size' => $file->filesize(),
'record_time' => time(),
) );
$values['files'] = [ $values['files'] ];
}
foreach ( $values['files'] as $file )
{
$files[ $k ] = (string) $file;
if ( !isset( $existing[ (string) $file ] ) )
{
\IPS\Db::i()->insert( 'downloads_files_records', array(
'record_post_key' => isset( \IPS\Request::i()->bulk ) ? md5( \IPS\Request::i()->postKey . "-{$k}" ) : \IPS\Request::i()->postKey,
'record_type' => 'upload',
'record_location' => (string) $file,
'record_realname' => $file->originalFilename,
'record_size' => $file->filesize(),
'record_time' => time(),
) );
}
$k++;
unset( $existing[ (string) $file ] );
}
$k++;
unset( $existing[ (string) $file ] );
}
if ( isset( $values['import_files'] ) )
{
@@ -85,7 +85,7 @@ class _view extends \IPS\Content\Controller
}
/* Any previous versions? */
$versionData = array( 'b_version' => $this->file->version, 'b_changelog' => $this->file->changelog, 'b_backup' => $this->file->updated );
$versionData = array( 'b_version' => $this->file->version, 'b_changelog' => $this->file->changelog, 'b_backup' => $this->file->published );
$versionWhere = array( array( "b_fileid=?", $this->file->id ) );
if ( !\IPS\downloads\File::canViewHiddenItems( NULL, $this->file->container() ) )
{
@@ -554,7 +554,22 @@ class _view extends \IPS\Content\Controller
{
\IPS\nexus\Customer::loggedIn()->log( 'download', array( 'type' => 'idm', 'id' => $this->file->id, 'name' => $this->file->name ) );
}
$this->file->author()->achievementAction( 'downloads', 'DownloadFile', [
'file' => $this->file,
'downloader' => \IPS\Member::loggedIn()
] );
/* Data Layer Event */
if ( \IPS\Settings::i()->core_datalayer_enabled )
{
$properties = $this->file->getDataLayerProperties();
$properties['file_name'] = $data['record_realname'] ?: $file->originalFilename;
\IPS\core\DataLayer::i()->addEvent( 'file_download', $properties );
\IPS\core\DataLayer::i()->cache();
}
/* Download */
if ( $data['record_type'] === 'link' )
{
@@ -912,7 +927,7 @@ class _view extends \IPS\Content\Controller
$defaultFiles = array_pop( $defaultFiles );
}
$fileField = new \IPS\Helpers\Form\Upload( 'files', $defaultFiles, ( !\IPS\Member::loggedIn()->group['idm_linked_files'] and !\IPS\Member::loggedIn()->group['idm_import_files'] ), array( 'storageExtension' => 'downloads_Files', 'allowedFileTypes' => $category->types, 'maxFileSize' => $category->maxfile ? ( $category->maxfile / 1024 ) : NULL, 'multiple' => $category->multiple_files, 'retainDeleted' => TRUE ) );
$fileField = new \IPS\Helpers\Form\Upload( 'files', $defaultFiles, ( !\IPS\Member::loggedIn()->group['idm_linked_files'] and !\IPS\Member::loggedIn()->group['idm_import_files'] ), array( 'storageExtension' => 'downloads_Files', 'allowedFileTypes' => $category->types, 'maxFileSize' => $category->maxfile ? ( $category->maxfile / 1024 ) : NULL, 'multiple' => $category->multiple_files, 'retainDeleted' => TRUE, 'canBeModerated' => TRUE ) );
$fileField->label = \IPS\Member::loggedIn()->language()->addToStack('downloads_file');
$form->add( $fileField );
@@ -967,6 +982,7 @@ class _view extends \IPS\Content\Controller
'multiple' => TRUE,
'retainDeleted' => TRUE,
'template' => "downloads.submit.screenshot",
'canBeModerated' => TRUE,
) ) );
if ( \IPS\Member::loggedIn()->group['idm_linked_files'] )
@@ -1006,6 +1022,17 @@ class _view extends \IPS\Content\Controller
return (string) $form;
}
/* Filters */
$imageUploads = isset( $values['files'] ) ? $values['files'] : [];
if ( isset( $values['screenshots'] ) )
{
$imageUploads = array_merge( $imageUploads, $values['screenshots'] );
}
if ( $this->file->shouldTriggerProfanityFilters( FALSE, FALSE, $values['file_changelog'], $values['file_version'], 'downloads_Downloads', ["downloads-{$this->file->id}-changelog"], $imageUploads ) )
{
$requireApproval = TRUE;
}
/* Versioning */
if( $requireApproval )
{
@@ -1017,12 +1044,15 @@ class _view extends \IPS\Content\Controller
else
{
$fileObj = $this->file;
$fileObj->published = time();
}
$existingRecords = array();
$existingScreenshots = array();
$existingThumbnails = array();
$existingLinks = array();
$existingScreenshotLinks = array();
$existingThumbnails = array();
if ( $category->versioning !== 0 and ( !\IPS\Member::loggedIn()->group['idm_bypass_revision'] or $values['file_save_revision'] ) )
{
$fileObj->saveVersion();
@@ -1397,4 +1427,4 @@ class _view extends \IPS\Content\Controller
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'view' )->notifyBlurb( $this->file, $options );
}
}
}
@@ -0,0 +1,24 @@
{
"id": 106108,
"name": "4.6.0",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106109,
"name": "4.6.0",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106110,
"name": "4.6.1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106111,
"name": "4.6.1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106112,
"name": "4.6.1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106113,
"name": "4.6.2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106114,
"name": "4.6.2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106115,
"name": "4.6.2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106116,
"name": "4.6.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": [
"front\/view\/view"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106117,
"name": "4.6.3",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106118,
"name": "4.6.4",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106119,
"name": "4.6.4",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106120,
"name": "4.6.4",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106121,
"name": "4.6.4",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106122,
"name": "4.6.5",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106123,
"name": "4.6.5.1",
"steps": {
"queries": true,
"lang": false,
"theme": false,
"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,9 @@
{
"added": [],
"edited": [
"digests__comment",
"notification_new_file_version",
"digests__item"
],
"removed": []
}
@@ -0,0 +1,26 @@
{
"files": {
"added": [],
"edited": [
"downloads\/front\/controllers\/downloads\/ips.downloads.browse.js",
"downloads\/admin\/controllers\/settings\/ips.settings.settings.js",
"downloads\/front\/controllers\/submit\/ips.submit.linkedScreenshots.js",
"downloads\/front\/controllers\/submit\/ips.submit.main.js",
"downloads\/front\/controllers\/view\/ips.view.changeLog.js",
"downloads\/front\/controllers\/view\/ips.view.download.js",
"downloads\/front\/controllers\/view\/ips.view.subscribe.js",
"downloads\/front\/templates\/ips.templates.submit.js"
],
"removed": []
},
"orders": {
"added": [],
"edited": [
"global\/\/dev\/js\/\/framework\/",
"global\/\/dev\/js\/\/library\/",
"global\/\/dev\/js\/\/library\/\/jquery",
"global\/\/dev\/js\/\/library\/\/linkify"
],
"removed": []
}
}
@@ -0,0 +1,21 @@
{
"1": {
"method": "changeColumn",
"params": [
"downloads_files",
"file_desc",
{
"name": "file_desc",
"type": "MEDIUMTEXT",
"length": 0,
"decimals": null,
"values": [],
"allow_null": true,
"default": null,
"comment": "",
"unsigned": false,
"auto_increment": false
}
]
}
}
@@ -0,0 +1,84 @@
{
"html": {
"added": [],
"edited": [
"front\/browse\/categories",
"front\/browse\/categoriesSidebar",
"front\/browse\/category",
"front\/browse\/categoryButtons",
"front\/browse\/categoryMenu",
"front\/browse\/categoryRow",
"front\/browse\/featuredFile",
"front\/browse\/index",
"front\/browse\/indexBlock",
"front\/browse\/noFiles",
"front\/browse\/rows",
"admin\/dashboard\/overview",
"front\/global\/commentTableHeader",
"front\/global\/embedFile",
"front\/global\/embedFileComment",
"front\/global\/embedFileItemSnippet",
"front\/global\/embedFileReview",
"front\/global\/manageFollowRow",
"front\/global\/searchResultCommentSnippet",
"front\/global\/searchResultFileSnippet",
"admin\/livesearch\/category",
"front\/nexus\/chooseProduct",
"admin\/nexus\/fileInfo",
"front\/nexus\/filePurchaseInfo",
"admin\/stats\/downloadsTable",
"admin\/stats\/graphs",
"admin\/stats\/information",
"admin\/stats\/link",
"admin\/stats\/submittersTable",
"admin\/stats\/topDownloadsTable",
"front\/submit\/bulkForm",
"front\/submit\/categorySelector",
"front\/submit\/linkedScreenshotField",
"front\/submit\/submissionForm",
"front\/submit\/topic",
"front\/submit\/wizardForm",
"front\/view\/changeLog",
"front\/view\/commentForm",
"front\/view\/comments",
"front\/view\/download",
"front\/view\/downloadButton",
"front\/view\/downloadTeaser",
"front\/view\/downloadTerms",
"front\/view\/log",
"front\/view\/logRows",
"front\/view\/logTable",
"front\/view\/multipleFiles",
"front\/view\/notify",
"front\/view\/notifyBlurb",
"front\/view\/pendingView",
"front\/view\/purchaseTerms",
"front\/view\/reviews",
"front\/view\/view",
"front\/widgets\/downloadsCommentFeed",
"front\/widgets\/downloadsReviewFeed",
"front\/widgets\/downloadStats",
"front\/widgets\/fileFeed",
"front\/widgets\/fileRow",
"front\/widgets\/topDownloads",
"front\/widgets\/topSubmitterRow",
"front\/widgets\/topSubmitters"
],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/downloads_responsive.css",
"front\/downloads.css",
"front\/embed.css",
"front\/widgets.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106125,
"name": "4.6.5.1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,9 @@
{
"added": [],
"edited": [
"digests__comment",
"notification_new_file_version",
"digests__item"
],
"removed": []
}
@@ -0,0 +1,16 @@
{
"files": {
"added": [],
"edited": [
"downloads\/front\/controllers\/submit\/ips.submit.main.js",
"downloads\/front\/controllers\/view\/ips.view.changeLog.js",
"downloads\/front\/templates\/ips.templates.submit.js"
],
"removed": []
},
"orders": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,81 @@
{
"html": {
"added": [],
"edited": [
"front\/browse\/categories",
"front\/browse\/categoriesSidebar",
"front\/browse\/category",
"front\/browse\/categoryButtons",
"front\/browse\/categoryMenu",
"front\/browse\/categoryRow",
"front\/browse\/featuredFile",
"front\/browse\/index",
"front\/browse\/indexBlock",
"front\/browse\/noFiles",
"front\/browse\/rows",
"admin\/dashboard\/overview",
"front\/global\/commentTableHeader",
"front\/global\/embedFile",
"front\/global\/embedFileComment",
"front\/global\/embedFileItemSnippet",
"front\/global\/embedFileReview",
"front\/global\/manageFollowRow",
"front\/global\/searchResultCommentSnippet",
"front\/global\/searchResultFileSnippet",
"admin\/livesearch\/category",
"front\/nexus\/chooseProduct",
"admin\/nexus\/fileInfo",
"front\/nexus\/filePurchaseInfo",
"admin\/stats\/downloadsTable",
"admin\/stats\/graphs",
"admin\/stats\/information",
"admin\/stats\/link",
"admin\/stats\/submittersTable",
"admin\/stats\/topDownloadsTable",
"front\/submit\/bulkForm",
"front\/submit\/categorySelector",
"front\/submit\/linkedScreenshotField",
"front\/submit\/submissionForm",
"front\/submit\/topic",
"front\/submit\/wizardForm",
"front\/view\/changeLog",
"front\/view\/commentForm",
"front\/view\/comments",
"front\/view\/download",
"front\/view\/downloadButton",
"front\/view\/downloadTeaser",
"front\/view\/downloadTerms",
"front\/view\/log",
"front\/view\/logRows",
"front\/view\/logTable",
"front\/view\/multipleFiles",
"front\/view\/notify",
"front\/view\/notifyBlurb",
"front\/view\/pendingView",
"front\/view\/purchaseTerms",
"front\/view\/reviews",
"front\/view\/view",
"front\/widgets\/downloadsCommentFeed",
"front\/widgets\/downloadsReviewFeed",
"front\/widgets\/downloadStats",
"front\/widgets\/fileFeed",
"front\/widgets\/fileRow",
"front\/widgets\/topDownloads",
"front\/widgets\/topSubmitterRow",
"front\/widgets\/topSubmitters"
],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/downloads.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106126,
"name": "4.6.5.1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,9 @@
{
"added": [],
"edited": [
"digests__comment",
"notification_new_file_version",
"digests__item"
],
"removed": []
}
@@ -0,0 +1,16 @@
{
"files": {
"added": [],
"edited": [
"downloads\/front\/controllers\/submit\/ips.submit.main.js",
"downloads\/front\/controllers\/view\/ips.view.changeLog.js",
"downloads\/front\/templates\/ips.templates.submit.js"
],
"removed": []
},
"orders": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,81 @@
{
"html": {
"added": [],
"edited": [
"front\/browse\/categories",
"front\/browse\/categoriesSidebar",
"front\/browse\/category",
"front\/browse\/categoryButtons",
"front\/browse\/categoryMenu",
"front\/browse\/categoryRow",
"front\/browse\/featuredFile",
"front\/browse\/index",
"front\/browse\/indexBlock",
"front\/browse\/noFiles",
"front\/browse\/rows",
"admin\/dashboard\/overview",
"front\/global\/commentTableHeader",
"front\/global\/embedFile",
"front\/global\/embedFileComment",
"front\/global\/embedFileItemSnippet",
"front\/global\/embedFileReview",
"front\/global\/manageFollowRow",
"front\/global\/searchResultCommentSnippet",
"front\/global\/searchResultFileSnippet",
"admin\/livesearch\/category",
"front\/nexus\/chooseProduct",
"admin\/nexus\/fileInfo",
"front\/nexus\/filePurchaseInfo",
"admin\/stats\/downloadsTable",
"admin\/stats\/graphs",
"admin\/stats\/information",
"admin\/stats\/link",
"admin\/stats\/submittersTable",
"admin\/stats\/topDownloadsTable",
"front\/submit\/bulkForm",
"front\/submit\/categorySelector",
"front\/submit\/linkedScreenshotField",
"front\/submit\/submissionForm",
"front\/submit\/topic",
"front\/submit\/wizardForm",
"front\/view\/changeLog",
"front\/view\/commentForm",
"front\/view\/comments",
"front\/view\/download",
"front\/view\/downloadButton",
"front\/view\/downloadTeaser",
"front\/view\/downloadTerms",
"front\/view\/log",
"front\/view\/logRows",
"front\/view\/logTable",
"front\/view\/multipleFiles",
"front\/view\/notify",
"front\/view\/notifyBlurb",
"front\/view\/pendingView",
"front\/view\/purchaseTerms",
"front\/view\/reviews",
"front\/view\/view",
"front\/widgets\/downloadsCommentFeed",
"front\/widgets\/downloadsReviewFeed",
"front\/widgets\/downloadStats",
"front\/widgets\/fileFeed",
"front\/widgets\/fileRow",
"front\/widgets\/topDownloads",
"front\/widgets\/topSubmitterRow",
"front\/widgets\/topSubmitters"
],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/downloads.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106127,
"name": "4.6.5.1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106128,
"name": "4.6.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,21 @@
{
"html": {
"added": [],
"edited": [],
"removed": []
},
"css": {
"added": [],
"edited": [
"front\/downloads_responsive.css",
"front\/embed.css",
"front\/widgets.css"
],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106129,
"name": "4.6.5.1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106130,
"name": "4.6.5.1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106131,
"name": "4.6.5.1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106132,
"name": "4.6.6",
"steps": {
"queries": true,
"lang": true,
"theme": true,
"themeSettings": false,
"javascript": true,
"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,14 @@
{
"files": {
"added": [
"downloads\/front\/controllers\/pending\/ips.pending.buttons.js"
],
"edited": [],
"removed": []
},
"orders": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,14 @@
{
"normal": {
"added": [
"file_published"
],
"edited": [],
"removed": []
},
"js": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,39 @@
{
"1": {
"method": "addColumn",
"params": [
"downloads_files",
{
"name": "file_published",
"type": "INT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": 0,
"comment": "",
"unsigned": false,
"auto_increment": false
}
]
},
"2": {
"method": "changeColumn",
"params": [
"downloads_filebackup",
"b_filedesc",
{
"name": "b_filedesc",
"type": "MEDIUMTEXT",
"length": 0,
"decimals": null,
"values": [],
"allow_null": true,
"default": null,
"comment": "",
"unsigned": false,
"auto_increment": false
}
]
}
}
@@ -0,0 +1,20 @@
{
"html": {
"added": [],
"edited": [
"front\/view\/pendingView",
"front\/view\/view"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106133,
"name": "4.6.6",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106134,
"name": "4.6.7 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": [
"front\/global\/embedFile"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106135,
"name": "4.6.7 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106136,
"name": "4.6.7",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106137,
"name": "4.6.7",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106138,
"name": "4.6.8 Beta 1",
"steps": {
"queries": false,
"lang": true,
"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,24 @@
{
"normal": {
"added": [
"download_categories_lc",
"downloads_file_sg_lc",
"downloads_stats_uploader_count",
"downloads_stats_downloader_count",
"achievement_filter_DownloadFile_nth_suffix",
"achievement_filter_DownloadFile_receiver",
"achievement_filter_DownloadFile_giver",
"AchievementAction__DownloadFile_log",
"AchievementAction__DownloadFile_title_generic",
"AchievementAction__DownloadFile_title",
"AchievementAction__DownloadFile"
],
"edited": [],
"removed": []
},
"js": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,20 @@
{
"html": {
"added": [],
"edited": [
"admin\/stats\/downloadsTable",
"admin\/stats\/submittersTable"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106139,
"name": "4.6.8 Beta 2",
"steps": {
"queries": false,
"lang": true,
"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,15 @@
{
"normal": {
"added": [
"__defart_downloads_file_pending",
"file_version_pending_cannot_approve"
],
"edited": [],
"removed": []
},
"js": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,20 @@
{
"html": {
"added": [],
"edited": [
"front\/view\/pendingView",
"front\/view\/view"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106140,
"name": "4.6.8",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106141,
"name": "4.6.8",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106142,
"name": "4.6.8",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106143,
"name": "4.6.8",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106144,
"name": "4.6.9 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": [
"front\/browse\/categoryButtons"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,24 @@
{
"id": 106145,
"name": "4.6.9 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106146,
"name": "4.6.9 Beta 3",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106147,
"name": "4.6.9",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106148,
"name": "4.6.9",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106149,
"name": "4.6.10 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106150,
"name": "4.6.10 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106151,
"name": "4.6.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106152,
"name": "4.6.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106153,
"name": "4.6.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106154,
"name": "4.6.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106155,
"name": "4.6.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106156,
"name": "4.6.11 Beta 1",
"steps": {
"queries": true,
"lang": false,
"theme": false,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"whatsnew": false,
"customOptions": false,
"customRoutines": true
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,20 @@
{
"1": {
"method": "addColumn",
"params": [
"downloads_categories",
{
"name": "cfiles",
"type": "BIGINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": 0,
"comment": "",
"unsigned": false,
"auto_increment": false
}
]
}
}
@@ -0,0 +1,37 @@
<?php
/**
* @brief 4.6.11 Beta 1 Upgrade Code
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
* @copyright (c) Invision Power Services, Inc.
* @license https://www.invisioncommunity.com/legal/standards/
* @package Invision Community
* @subpackage Downloads
* @since 14 Feb 2022
*/
namespace IPS\downloads\setup\upg_106156;
/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
exit;
}
/**
* 4.6.11 Beta 1 Upgrade Code
*/
class _Upgrade
{
/**
* Finish Upgrade
*
* @return bool|array If returns TRUE, upgrader will proceed to next step. If it returns any other value, it will set this as the value of the 'extra' GET parameter and rerun this step (useful for loops)
*/
public function step1()
{
\IPS\Task::queue( 'core', 'RebuildContainerCounts', array( 'class' => 'IPS\downloads\Category', 'count' => 0 ), 5, array( 'class' ) );
return TRUE;
}
}
@@ -0,0 +1,24 @@
{
"id": 106157,
"name": "4.6.11 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106158,
"name": "4.6.11 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106159,
"name": "4.6.11",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106160,
"name": "4.6.11",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106161,
"name": "4.6.12",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106162,
"name": "4.6.12 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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,24 @@
{
"id": 106163,
"name": "4.6.12 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"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
}
Loaded 100 of 1933 files, more files were not shown because too many files have changed in this diff. Show more