Version 4.6.0
This commit is contained in:
1 parent
f79dcf067a
commit
517a5e1f70
2036 files changed
+110041
-26162
No files matched your search
@@ -34,7 +34,7 @@ class _comments extends \IPS\Content\Api\CommentController
|
||||
*
|
||||
* @note For requests using an OAuth Access Token for a particular member, only comments the authorized user can view will be included
|
||||
* @apiparam string categories Comma-delimited list of category IDs
|
||||
* @apiparam string authors Comma-delimited list of member IDs - if provided, only topics started by those members are returned
|
||||
* @apiparam string authors Comma-delimited list of member IDs - if provided, only comments started by those members are returned
|
||||
* @apiparam int locked If 1, only comments from events which are locked are returned, if 0 only unlocked
|
||||
* @apiparam int hidden If 1, only comments which are hidden are returned, if 0 only not hidden
|
||||
* @apiparam int featured If 1, only comments from events which are featured are returned, if 0 only not featured
|
||||
@@ -154,7 +154,7 @@ class _comments extends \IPS\Content\Api\CommentController
|
||||
* @apiparam int author The ID number of the member making the comment (0 for guest). Ignored for requests using an OAuth Access Token for a particular member.
|
||||
* @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 topic should be hidden
|
||||
* @apiparam int hidden 1/0 indicating if the comment should be hidden
|
||||
* @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
|
||||
|
||||
@@ -54,8 +54,8 @@ class _files extends \IPS\Content\Api\ItemController
|
||||
/* Sort by popular files */
|
||||
if( \IPS\Request::i()->sortBy == 'popular' )
|
||||
{
|
||||
\IPS\Request::i()->sortDir = \IPS\Request::i()->sortDir ?: 'ASC';
|
||||
$sortBy = 'file_rating ' . \IPS\Request::i()->sortDir . ', file_reviews';
|
||||
$sortDirection = \strtoupper( \IPS\Request::i()->sortDir ) == 'DESC' ? 'DESC' : 'ASC';
|
||||
$sortBy = 'file_rating ' . $sortDirection . ', file_reviews';
|
||||
$where = array( array( 'file_rating>?', 0 ) );
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@ class _files extends \IPS\Content\Api\ItemController
|
||||
* Upload a file
|
||||
*
|
||||
* @note For requests using an OAuth Access Token for a particular member, any parameters the user doesn't have permission to use are ignored (for example, locked will only be honoured if the authenticated user has permission to lock files).
|
||||
* @reqapiparam int category The ID number of the calendar the file should be created in
|
||||
* @reqapiparam int category The ID number of the category the file should be created in
|
||||
* @reqapiparam int author The ID number of the member creating the file (0 for guest). Required for requests made using an API Key or the Client Credentials Grant Type. For requests using an OAuth Access Token for a particular member, that member will always be the author
|
||||
* @reqapiparam string title The file name
|
||||
* @reqapiparam string description The description as HTML (e.g. "<p>This is an file.</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.
|
||||
@@ -311,7 +311,7 @@ class _files extends \IPS\Content\Api\ItemController
|
||||
* Edit a file
|
||||
*
|
||||
* @note For requests using an OAuth Access Token for a particular member, any parameters the user doesn't have permission to use are ignored (for example, locked will only be honoured if the authenticated user has permission to lock records).
|
||||
* @apiparam int category The ID number of the calendar the file should be created in
|
||||
* @apiparam int category The ID number of the category the file should be created in
|
||||
* @apiparam int author The ID number of the member creating the file (0 for guest). Ignored for requests using an OAuth Access Token for a particular member.
|
||||
* @apiparam string title The file name
|
||||
* @apiparam string description The description as HTML (e.g. "<p>This is an file.</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.
|
||||
@@ -657,7 +657,7 @@ class _files extends \IPS\Content\Api\ItemController
|
||||
{
|
||||
throw new \OutOfRangeException;
|
||||
}
|
||||
if ( $this->member and !$file->canEdit( $this->member ) )
|
||||
if ( $this->member and ( !$file->canEdit( $this->member ) or !$file->container()->can( 'add', $this->member ) ) )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_PERMISSION', '2S303/O', 403 );
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ class _reviews extends \IPS\Content\Api\CommentController
|
||||
*
|
||||
* @note For requests using an OAuth Access Token for a particular member, only reviews the authorized user can view will be included
|
||||
* @apiparam string categories Comma-delimited list of category IDs
|
||||
* @apiparam string authors Comma-delimited list of member IDs - if provided, only topics started by those members are returned
|
||||
* @apiparam string authors Comma-delimited list of member IDs - if provided, only reviews started by those members are returned
|
||||
* @apiparam int locked If 1, only reviews from events which are locked are returned, if 0 only unlocked
|
||||
* @apiparam int hidden If 1, only reviews which are hidden are returned, if 0 only not hidden
|
||||
* @apiparam int featured If 1, only reviews from events which are featured are returned, if 0 only not featured
|
||||
@@ -162,7 +162,7 @@ class _reviews extends \IPS\Content\Api\CommentController
|
||||
* @apiparam int author The ID number of the member making the review (0 for guest). Ignored for requests using an OAuth Access Token for a particular member.
|
||||
* @apiparam string author_name If author is 0, the guest name that should be used
|
||||
* @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 topic should be hidden
|
||||
* @apiparam int hidden 1/0 indicating if the review should be hidden
|
||||
* @apiparam int rating Star rating
|
||||
* @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
|
||||
|
||||
@@ -37,6 +37,13 @@
|
||||
"controller": "submitters",
|
||||
"do": "",
|
||||
"restriction": "submitters_manage"
|
||||
},
|
||||
"topdownloads": {
|
||||
"tab": "stats",
|
||||
"controller": "topdownloads",
|
||||
"do": "",
|
||||
"restriction": "topdownloads_manage",
|
||||
"subcontrollers": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,6 @@
|
||||
"categories_add": "categories_add",
|
||||
"categories_edit": "categories_edit",
|
||||
"categories_permissions": "categories_permissions",
|
||||
"categories_permissions": "categories_permissions",
|
||||
"categories_massManageContent": "categories_massManageContent",
|
||||
"categories_recount_downloads": "categories_recount_downloads"
|
||||
},
|
||||
@@ -23,7 +22,8 @@
|
||||
"downloads": {
|
||||
"downloads_manage": "downloads_manage",
|
||||
"downloaders_manage": "downloaders_manage",
|
||||
"submitters_manage": "submitters_manage"
|
||||
"submitters_manage": "submitters_manage",
|
||||
"topdownloads_manage": "topdownloads_manage"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -66,6 +66,14 @@
|
||||
"downloads category"
|
||||
]
|
||||
},
|
||||
"app=downloads&module=downloads&controller=categories&searchResult=form_1_allow_anonymous": {
|
||||
"lang_key": "allow_anonymous",
|
||||
"restriction": "categories_manage",
|
||||
"keywords": [
|
||||
"anonymous",
|
||||
"anonymously"
|
||||
]
|
||||
},
|
||||
"app=downloads&module=downloads&controller=categories&do=permissions": {
|
||||
"lang_key": "menu__downloads_downloads_categories",
|
||||
"restriction": "categories_manage",
|
||||
@@ -803,5 +811,12 @@
|
||||
"keywords": [
|
||||
"top submitters"
|
||||
]
|
||||
},
|
||||
"app=downloads&module=stats&controller=topdownloads": {
|
||||
"lang_key": "menu__downloads_stats_topdownloads",
|
||||
"restriction": "topdownloads_manage",
|
||||
"keywords": [
|
||||
"top files"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -4,5 +4,6 @@
|
||||
"app_directory": "downloads",
|
||||
"app_protected": 0,
|
||||
"app_website": null,
|
||||
"app_update_check": null
|
||||
"app_update_check": null,
|
||||
"app_hide_tab": 0
|
||||
}
|
||||
@@ -30,6 +30,7 @@
|
||||
<acpsearch key="app=core&module=members&controller=members&searchResult=form_idm_block_submissions"><![CDATA[{"lang_key":"idm_block_submissions","restriction":null,"keywords":["Files","Submit"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=categories"><![CDATA[{"lang_key":"menu__downloads_downloads_categories","restriction":"categories_manage","keywords":["categories","download categories"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=categories&do=form"><![CDATA[{"lang_key":"menu__downloads_downloads_categories","restriction":"categories_manage","keywords":["add category","downloads category"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=categories&searchResult=form_1_allow_anonymous"><![CDATA[{"lang_key":"allow_anonymous","restriction":"categories_manage","keywords":["anonymous","anonymously"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=categories&do=permissions"><![CDATA[{"lang_key":"menu__downloads_downloads_categories","restriction":"categories_manage","keywords":["category permissions"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=categories&searchResult=cbitoptions_allowss"><![CDATA[{"lang_key":"cbitoptions_allowss","restriction":"categories_manage","keywords":["allow screenshots","screenshots"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=categories&searchResult=cbitoptions_comment_moderation"><![CDATA[{"lang_key":"cbitoptions_comment_moderation","restriction":"categories_manage","keywords":["comments approved","comments must","must approved"]}]]></acpsearch>
|
||||
@@ -120,8 +121,10 @@
|
||||
<acpsearch key="app=downloads&module=stats&controller=downloaders"><![CDATA[{"lang_key":"menu__downloads_stats_downloaders","restriction":"downloaders_manage","keywords":["download statistics","downloads stats","top downloaders"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=stats&controller=downloads"><![CDATA[{"lang_key":"menu__downloads_stats_downloads","restriction":"downloads_manage","keywords":["download statistics","downloads stats"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=stats&controller=submitters"><![CDATA[{"lang_key":"menu__downloads_stats_submitters","restriction":"submitters_manage","keywords":["top submitters"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=stats&controller=topdownloads"><![CDATA[{"lang_key":"menu__downloads_stats_topdownloads","restriction":"topdownloads_manage","keywords":["top files"]}]]></acpsearch>
|
||||
<hook key="Forums"><![CDATA[{"type":"C","class":"\\IPS\\forums\\Forum"}]]></hook>
|
||||
<hook key="nexusPackage"><![CDATA[{"type":"C","class":"\\IPS\\nexus\\Package\\Item"}]]></hook>
|
||||
<hook key="frontModcp"><![CDATA[{"type":"C","class":"\\IPS\\core\\modules\\front\\modcp\\modcp"}]]></hook>
|
||||
<hook key="Forum"><![CDATA[{"type":"C","class":"\\IPS\\forums\\modules\\admin\\forums\\forums"}]]></hook>
|
||||
<hook key="apiForum"><![CDATA[{"type":"C","class":"\\IPS\\forums\\api\\forums"}]]></hook>
|
||||
</build>
|
||||
@@ -2,7 +2,7 @@
|
||||
<emails><template><template_app>downloads</template_app><template_name>digests__comment</template_name><template_content_html><![CDATA[<tr style='border-bottom: 1px solid #eeeeee'>
|
||||
<td dir='{dir}' width='120' align='center' valign='top'>
|
||||
{{if $comment->item()->primary_screenshot_thumb}}
|
||||
<img src='{$comment->item()->primary_screenshot_thumb}' style='border: 1px solid #000; vertical-align: middle;' width='100' height='100'>
|
||||
<img src='{file="$comment->item()->primary_screenshot_thumb" extension="downloads_Screenshots"}' style='border: 1px solid #000; vertical-align: middle;' width='100' height='100'>
|
||||
{{else}}
|
||||
<div style='width: 100px; height: 100px; background: #f5f5f5'> </div>
|
||||
{{endif}}
|
||||
@@ -104,7 +104,7 @@
|
||||
-- {setting="board_name"}]]></template_content_plaintext><template_pinned>0</template_pinned></template><template><template_app>downloads</template_app><template_name>digests__item</template_name><template_content_html><![CDATA[<tr style='border-bottom: 1px solid #eeeeee'>
|
||||
<td dir='{dir}' width='120' align='center' valign='top'>
|
||||
{{if $file->primary_screenshot_thumb}}
|
||||
<img src='{$file->primary_screenshot_thumb}' style='border: 1px solid #000; vertical-align: middle;' width='100' height='100'>
|
||||
<img src='{file="$file->primary_screenshot_thumb" extension="downloads_Screenshots"}' style='border: 1px solid #000; vertical-align: middle;' width='100' height='100'>
|
||||
{{else}}
|
||||
<div style='width: 100px; height: 100px; background: #f5f5f5'> </div>
|
||||
{{endif}}
|
||||
|
||||
@@ -14,5 +14,9 @@
|
||||
"Forum": {
|
||||
"type": "C",
|
||||
"class": "\\IPS\\forums\\modules\\admin\\forums\\forums"
|
||||
},
|
||||
"apiForum": {
|
||||
"type": "C",
|
||||
"class": "\\IPS\\forums\\api\\forums"
|
||||
}
|
||||
}
|
||||
@@ -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="105100" 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="106107" javascript_position="1000200">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -59,7 +59,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="downloads" javascript_location="admin" javascript_path="controllers/settings" javascript_name="ips.settings.settings.js" javascript_type="controller" javascript_version="105100" javascript_position="1000050">/**
|
||||
<file javascript_app="downloads" javascript_location="admin" javascript_path="controllers/settings" javascript_name="ips.settings.settings.js" javascript_type="controller" javascript_version="106107" javascript_position="1000050">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -112,7 +112,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="105100" 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="106107" javascript_position="1000100">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -184,7 +184,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="105100" 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="106107" javascript_position="1000100"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -275,8 +275,6 @@
|
||||
if( !this.scope.find('input[name^="files_existing"]').length ){
|
||||
hideProgressBar();
|
||||
} else {
|
||||
this.scope.find('#elDownloadsSubmit_uploader .ipsAttachment_dropZone').hide();
|
||||
this.scope.find('#elDownloadsSubmit_uploader [data-action="uploadMore"]').show();
|
||||
this._hiddenUploader = true;
|
||||
}
|
||||
|
||||
@@ -344,8 +342,6 @@
|
||||
uploadMore: function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
this.scope.find('#elDownloadsSubmit_uploader .ipsAttachment_dropZone').show();
|
||||
this.scope.find('#elDownloadsSubmit_uploader [data-action="uploadMore"]').hide();
|
||||
this._hiddenUploader = false;
|
||||
this._overriddenUploader = true;
|
||||
},
|
||||
@@ -389,9 +385,6 @@
|
||||
});
|
||||
this._ui.progressBar.hide();
|
||||
|
||||
this.scope.find('#elDownloadsSubmit_uploader .ipsAttachment_dropZone').show();
|
||||
this.scope.find('#elDownloadsSubmit_uploader [data-action="uploadMore"]').hide();
|
||||
this.scope.find('#elDownloadsSingleMessage').hide();
|
||||
this._hiddenUploader = false;
|
||||
this._overriddenUploader = true;
|
||||
}
|
||||
@@ -603,9 +596,6 @@
|
||||
_showProgress: function () {
|
||||
if( !this._hiddenUploader && !this._overriddenUploader ){
|
||||
this._ui.progressBar.show().find('.ipsProgressBar').addClass('ipsProgressBar_animated');
|
||||
this.scope.find('#elDownloadsSubmit_uploader .ipsAttachment_dropZone').hide();
|
||||
this.scope.find('#elDownloadsSubmit_uploader [data-action="uploadMore"]').show();
|
||||
this.scope.find('#elDownloadsSubmit_uploader #elDownloadsSingleMessage').show();
|
||||
this._hiddenUploader = true;
|
||||
}
|
||||
},
|
||||
@@ -621,17 +611,15 @@
|
||||
}
|
||||
|
||||
this.scope.find('a[data-action="stackAdd"]').hide();
|
||||
|
||||
if( this._hasExistingFiles() || force ) {
|
||||
this.scope.find('[data-role="stackItem"] input[name^="url_files"], [data-role="stackItem"] input[name^="import_files"]').each( function() {
|
||||
if( $(this).val() == "" ) {
|
||||
$(this).prop( 'disabled', true );
|
||||
}
|
||||
});
|
||||
this.scope.find('#elDownloadsSubmit_uploader .ipsAttachment_dropZone').hide();
|
||||
this.scope.find('#elDownloadsSubmit_uploader #elDownloadsSingleMessage').show();
|
||||
}
|
||||
else {
|
||||
this.scope.find('#elDownloadsSubmit_uploader .ipsAttachment_dropZone').show();
|
||||
this.scope.find('[data-role="stackItem"] input[name^="url_files"], [data-role="stackItem"] input[name^="import_files"]').each( function() {
|
||||
$(this).prop( 'disabled', false );
|
||||
});
|
||||
@@ -639,7 +627,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="105100" 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="106107" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -762,7 +750,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="105100" 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="106107" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -887,7 +875,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="105100" 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="106107" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -950,34 +938,57 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.submit.js" javascript_type="template" javascript_version="105100" 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="106107" javascript_position="1000050"><![CDATA[/* VIEW TEMPLATES */
|
||||
ips.templates.set('downloads.submit.screenshot', " \
|
||||
<div class='ipsGrid_span3 ipsAttach ipsImageAttach ipsPad_half ipsAreaBackground_light' id='{{id}}' data-role='file' data-fileid='{{id}}' data-fullsizeurl='{{imagesrc}}' data-thumbnailurl='{{thumbnail}}' data-fileType='image'>\
|
||||
<ul class='ipsList_inline ipsImageAttach_controls'>\
|
||||
<li><input type='radio' name='{{field_name}}_primary_screenshot' id='{{field_name}}_primary_screenshot_{{id}}' value='{{id}}' title='{{#lang}}makePrimaryScreenshot{{/lang}}' {{#default}}checked{{/default}}></li>\
|
||||
<li class='ipsPos_right' data-role='deleteFileWrapper'>\
|
||||
<input type='hidden' name='{{field_name}}_keep[{{id}}]' value='1'>\
|
||||
<a href='#' data-role='deleteFile' class='ipsButton ipsButton_verySmall ipsButton_light' data-ipsTooltip title='{{#lang}}removeScreenshot{{/lang}}'><i class='fa fa-trash-o'></i></a>\
|
||||
</li>\
|
||||
</ul>\
|
||||
<label for='{{field_name}}_primary_screenshot_{{id}}' class='ipsCursor_pointer'>\
|
||||
<div class='ipsImageAttach_thumb ipsType_center' data-role='preview' data-grid-ratio='65' data-action='insertFile' {{#thumb}}style='background-image: url( \"{{thumbnail_for_css}}\" )'{{/thumb}}>\
|
||||
{{#status}}\
|
||||
<span class='ipsImageAttach_status ipsType_light' data-role='status'>{{{status}}}</span>\
|
||||
<span class='ipsAttachment_progress'><span data-role='progressbar'></span></span>\
|
||||
{{/status}}\
|
||||
{{#thumb}}\
|
||||
{{{thumb}}}\
|
||||
{{/thumb}}\
|
||||
<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'>\
|
||||
<label for='{{field_name}}_primary_screenshot_{{id}}' class='ipsCursor_pointer'>\
|
||||
{{#thumb}}\
|
||||
{{{thumb}}}\
|
||||
{{/thumb}}\
|
||||
<div class='ipsUploader__rowPreview__generic ipsFlex ipsFlex-ai:center ipsFlex-jc:center' {{#thumb}}style='display: none'{{/thumb}}>\
|
||||
<i class='fa fa-{{extIcon}} ipsType_large'></i>\
|
||||
</div>\
|
||||
</label>\
|
||||
</div>\
|
||||
<div class='ipsUploader_rowMeta ipsFlex ipsFlex-fd:column ipsFlex-jc:center ipsFlex-ai:start'>\
|
||||
<h2 class='ipsUploader_rowTitle ipsMargin:none ipsType_reset ipsAttach_title ipsTruncate ipsTruncate_line' data-role='title'>{{title}}</h2>\
|
||||
<p class='ipsDataItem_meta ipsType_medium ipsType_light'>\
|
||||
{{size}} {{#statusText}}· <span class='ipsType_light' data-role='status'>{{statusText}}</span>{{/statusText}}\
|
||||
</p>\
|
||||
{{#status}}<span class='ipsAttachment_progress'><span data-role='progressbar'></span></span>{{/status}}\
|
||||
</div>\
|
||||
<span data-role='insert' {{#insertable}}style='display: none'{{/insertable}}>\
|
||||
<a href='#' class='ipsAttach_selection' data-ipsTooltip title='{{#lang}}insertIntoPost{{/lang}}'>\
|
||||
<i class='fa fa-plus'></i>\
|
||||
</a>\
|
||||
</span>\
|
||||
{{#supportsDelete}}\
|
||||
<div data-role='deleteFileWrapper' {{#newUpload}}style='display: none'{{/newUpload}}>\
|
||||
<input type='hidden' name='{{field_name}}_keep[{{id}}]' value='1'>\
|
||||
<a href='#' data-role='deleteFile' class='ipsUploader__rowDelete' data-ipsTooltip title='{{#lang}}attachRemove{{/lang}}'>\
|
||||
×\
|
||||
</a>\
|
||||
</div>\
|
||||
{{/supportsDelete}}\
|
||||
{{^supportsDelete}}\
|
||||
<div data-role='deleteFileWrapper' style='display: none'>\
|
||||
<input type='hidden' name='{{field_name}}_keep[{{id}}]' value='1'>\
|
||||
<a href='#' class='ipsUploader__rowDelete' data-role='deleteFile' data-ipsTooltip title='{{#lang}}attachRemove{{/lang}}'>×</a>\
|
||||
</div>\
|
||||
{{/supportsDelete}}\
|
||||
<label for='{{field_name}}_primary_screenshot_{{id}}' class='cDownloadsPrimaryRadio' data-ipsTooltip title='{{#lang}}makePrimaryScreenshot{{/lang}}'>\
|
||||
<span class='ipsCustomInput'>\
|
||||
<input type='radio' name='{{field_name}}_primary_screenshot' id='{{field_name}}_primary_screenshot_{{id}}' value='{{id}}' {{#default}}checked{{/default}}>\
|
||||
<span></span>\
|
||||
</span>\
|
||||
{{#lang}}makePrimary{{/lang}}\
|
||||
</label>\
|
||||
<h2 class='ipsType_reset ipsAttach_title ipsType_medium ipsTruncate ipsTruncate_line' data-role='title'>{{title}}</h2>\
|
||||
<p class='ipsType_light'>{{size}} · <span data-role='status'>{{statusText}}</span></p>\
|
||||
</div>\
|
||||
");
|
||||
|
||||
ips.templates.set('downloads.submit.screenshotWrapper', " \
|
||||
<div class='ipsGrid ipsGrid_collapsePhone' data-ipsGrid data-ipsGrid-minItemSize='150' data-ipsGrid-maxItemSize='250'>{{{content}}}</div>\
|
||||
<div class='ipsUploader__container ipsUploader__container--images'>{{{content}}}</div>\
|
||||
");
|
||||
|
||||
ips.templates.set('downloads.submit.linkedScreenshot', " \
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language>
|
||||
<app key="downloads" version="105100">
|
||||
<app key="downloads" version="106107">
|
||||
<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>
|
||||
@@ -8,8 +8,11 @@
|
||||
<word key="__indefart_downloads_file_review" js="0">a review on a file</word>
|
||||
<word key="__indefart_downloads_file_pending" js="0">a new version</word>
|
||||
<word key="__defart_downloads_file_comment" js="0">comment on a file</word>
|
||||
<word key="__defart_downloads_file_comment_plural" js="0">{!#[1:comment][?:comments]} on a file</word>
|
||||
<word key="__defart_downloads_file" js="0">file</word>
|
||||
<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="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>
|
||||
@@ -91,6 +94,7 @@
|
||||
<word key="cversioning_on" js="0">Keep previous versions?</word>
|
||||
<word key="cversioning_on_desc" js="0">If enabled, when a new version of a file is uploaded, the previous version is stored and remains available.</word>
|
||||
<word key="cversioning" js="0">Number of revisions to keep</word>
|
||||
<word key="crequire_changelog" js="0">Require Changelog?</word>
|
||||
<word key="category_moderation" js="0">Moderation</word>
|
||||
<word key="category_downloading" js="0">Downloading</word>
|
||||
<word key="category_comments_and_reviews" js="0">Comments</word>
|
||||
@@ -395,7 +399,6 @@
|
||||
<word key="submit_bulk_information" js="0">Enter File Information</word>
|
||||
<word key="bulk_upload_button" js="0">I want to add multiple records at once</word>
|
||||
<word key="upload_more_files" js="0">Upload more files</word>
|
||||
<word key="downloads_single_upload" js="0">This category allows a single file upload. To upload a new file, delete the existing file then upload the new file.</word>
|
||||
<word key="featured_downloads" js="0">Featured Downloads</word>
|
||||
<word key="next_file" js="0">Next File</word>
|
||||
<word key="prev_file" js="0">Previous File</word>
|
||||
@@ -468,10 +471,12 @@
|
||||
<word key="menu__downloads_stats_downloads" js="0">Downloads</word>
|
||||
<word key="menu__downloads_stats_downloaders" js="0">Top Downloaders</word>
|
||||
<word key="menu__downloads_stats_submitters" js="0">Top Submitters</word>
|
||||
<word key="menu__downloads_stats_topdownloads" js="0">Top Files</word>
|
||||
<word key="r__downloads" js="0">Download Statistics</word>
|
||||
<word key="r__downloads_manage" js="0">Can view Download Statistics?</word>
|
||||
<word key="r__downloaders_manage" js="0">Can view Top Downloaders?</word>
|
||||
<word key="r__submitters_manage" js="0">Can view Top Submitters?</word>
|
||||
<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="ipAddresses__downloads_DownloadLog" js="0">Downloads</word>
|
||||
@@ -554,6 +559,7 @@
|
||||
<word key="email_new_file_version_guest" js="0">%s (Guest) has uploaded a new version of %s,</word>
|
||||
<word key="mailsub__downloads_notification_new_file_version" js="0"><![CDATA[{$content->author()->name|raw} has uploaded a new version of {$content->mapped("title")|raw}]]></word>
|
||||
<word key="notification__new_file_version" js="0">%s uploaded a new version of %s</word>
|
||||
<word key="notification__new_file_version_title" js="0">A file was updated</word>
|
||||
<word key="notification__new_file_version_with" js="0">%s uploaded version %s of %s</word>
|
||||
<word key="emailtpl_notification_new_file_version" js="0">New file version notification</word>
|
||||
<word key="emailstats__notification_new_file_version" js="0">New file version notification</word>
|
||||
@@ -591,7 +597,8 @@
|
||||
<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="makePrimaryScreenshot" js="1">Make this the primary screenshot</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>
|
||||
<word key="markCategoryAsReadConfirm" js="1">Are you sure you want to mark all files as read?</word>
|
||||
<word key="categoryMarkedRead" js="1">The category has been marked as read</word>
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
"cid": {
|
||||
"allow_null": false,
|
||||
"auto_increment": true,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -13,13 +12,11 @@
|
||||
"name": "cid",
|
||||
"type": "INT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"cparent": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -27,13 +24,11 @@
|
||||
"name": "cparent",
|
||||
"type": "INT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"copen": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "1",
|
||||
@@ -41,13 +36,11 @@
|
||||
"name": "copen",
|
||||
"type": "TINYINT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"cposition": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -55,13 +48,11 @@
|
||||
"name": "cposition",
|
||||
"type": "INT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"ccfields": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -69,13 +60,11 @@
|
||||
"name": "ccfields",
|
||||
"type": "TEXT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"cname_furl": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -83,13 +72,11 @@
|
||||
"name": "cname_furl",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"ctags_disabled": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -97,13 +84,11 @@
|
||||
"name": "ctags_disabled",
|
||||
"type": "TINYINT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"ctags_noprefixes": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -111,13 +96,11 @@
|
||||
"name": "ctags_noprefixes",
|
||||
"type": "TINYINT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"ctags_predefined": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -125,13 +108,11 @@
|
||||
"name": "ctags_predefined",
|
||||
"type": "TEXT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"cbitoptions": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Bitwise options",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -139,13 +120,11 @@
|
||||
"name": "cbitoptions",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"ctypes": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "JSON array of allowed file extensions or NULL for no restriction.",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -153,13 +132,11 @@
|
||||
"name": "ctypes",
|
||||
"type": "TEXT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"csortorder": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "The default sort order",
|
||||
"decimals": null,
|
||||
"default": "updated DESC",
|
||||
@@ -167,13 +144,11 @@
|
||||
"name": "csortorder",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"cmaxfile": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Maximum file size",
|
||||
"decimals": null,
|
||||
"default": "512000",
|
||||
@@ -181,13 +156,11 @@
|
||||
"name": "cmaxfile",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"cmaxss": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Maximum screenshot size",
|
||||
"decimals": null,
|
||||
"default": "512",
|
||||
@@ -195,13 +168,11 @@
|
||||
"name": "cmaxss",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"cmaxdims": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Maximum screenshot dimensions",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -209,13 +180,11 @@
|
||||
"name": "cmaxdims",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"cversioning": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Number of versions of files to keep. 0 means disabled, NULL means keep all versions.",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -223,13 +192,11 @@
|
||||
"name": "cversioning",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"clog": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Number of days to keep download logs. 0 means disables, NULL means never delete logs.",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -237,13 +204,11 @@
|
||||
"name": "clog",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"cforum_id": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "IP.Board integration: forum ID",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -251,13 +216,11 @@
|
||||
"name": "cforum_id",
|
||||
"type": "SMALLINT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"ctopic_prefix": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "IP.Board integration: topic prefix",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -265,13 +228,11 @@
|
||||
"name": "ctopic_prefix",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"ctopic_suffix": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "IP.Board integration: topic suffix",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -279,13 +240,11 @@
|
||||
"name": "ctopic_suffix",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"clast_file_id": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Latest file ID in this category or any sub-category",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -293,13 +252,11 @@
|
||||
"name": "clast_file_id",
|
||||
"type": "BIGINT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"clast_file_date": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Latest file date in this category or any sub-category",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -307,48 +264,55 @@
|
||||
"name": "clast_file_date",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"cclub_id": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"comment": "The club ID if this category belongs to a club, or NULL",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 20,
|
||||
"name": "cclub_id",
|
||||
"type": "BIGINT",
|
||||
"length": 20,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "The club ID if this category belongs to a club, or NULL",
|
||||
"unsigned": true,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
"values": []
|
||||
},
|
||||
"cversion_numbers": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"comment": "0 = Disable version numbers, 1 = Allow version numbers, 2 = Require version numbers",
|
||||
"decimals": null,
|
||||
"default": "1",
|
||||
"length": 1,
|
||||
"name": "cversion_numbers",
|
||||
"type": "TINYINT",
|
||||
"length": 1,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "1",
|
||||
"comment": "0 = Disable version numbers, 1 = Allow version numbers, 2 = Require version numbers",
|
||||
"unsigned": false,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
"values": []
|
||||
},
|
||||
"cmultiple_files": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"comment": "Allow multiple files to be uploaded",
|
||||
"decimals": null,
|
||||
"default": "1",
|
||||
"length": 4,
|
||||
"name": "cmultiple_files",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "1",
|
||||
"comment": "Allow multiple files to be uploaded",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
"values": []
|
||||
},
|
||||
"callow_anonymous": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 3,
|
||||
"name": "callow_anonymous",
|
||||
"type": "TINYINT",
|
||||
"unsigned": true,
|
||||
"values": []
|
||||
},
|
||||
"cdisclaimer_location": {
|
||||
"name": "cdisclaimer_location",
|
||||
@@ -365,6 +329,18 @@
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
},
|
||||
"crequire_changelog": {
|
||||
"name": "crequire_changelog",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "Is changelog required?",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
@@ -403,16 +379,17 @@
|
||||
"category_open": {
|
||||
"type": "key",
|
||||
"name": "category_open",
|
||||
"columns": [
|
||||
"copen",
|
||||
"cposition"
|
||||
],
|
||||
"length": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"columns": [
|
||||
"copen",
|
||||
"cposition"
|
||||
]
|
||||
}
|
||||
},
|
||||
"collation": "utf8mb4_unicode_ci",
|
||||
"inserts": [
|
||||
{
|
||||
"cid": "1",
|
||||
@@ -439,7 +416,6 @@
|
||||
"clast_file_date": "0"
|
||||
}
|
||||
],
|
||||
"comment": "",
|
||||
"reporting": "count"
|
||||
},
|
||||
"downloads_cfields": {
|
||||
@@ -502,18 +478,16 @@
|
||||
"zerofill": false
|
||||
},
|
||||
"cf_max_input": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 6,
|
||||
"name": "cf_max_input",
|
||||
"type": "SMALLINT",
|
||||
"unsigned": false,
|
||||
"type": "MEDIUMINT",
|
||||
"length": 6,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
},
|
||||
"cf_input_format": {
|
||||
"allow_null": true,
|
||||
@@ -1369,6 +1343,30 @@
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"file_author_name": {
|
||||
"name": "file_author_name",
|
||||
"type": "VARCHAR",
|
||||
"length": 255,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
},
|
||||
"file_is_anon": {
|
||||
"name": "file_is_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
@@ -1904,6 +1902,18 @@
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"comment_is_anon": {
|
||||
"name": "comment_is_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
@@ -2652,20 +2662,6 @@
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"field_14": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 255,
|
||||
"name": "field_14",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
@@ -2678,16 +2674,6 @@
|
||||
"columns": [
|
||||
"file_id"
|
||||
]
|
||||
},
|
||||
"field_14": {
|
||||
"type": "key",
|
||||
"name": "field_14",
|
||||
"length": [
|
||||
null
|
||||
],
|
||||
"columns": [
|
||||
"field_14"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2909,7 +2895,7 @@
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "",
|
||||
"default": 0,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
@@ -2933,7 +2919,7 @@
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "",
|
||||
"default": 0,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
@@ -2957,7 +2943,7 @@
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "",
|
||||
"default": 0,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
@@ -2988,7 +2974,7 @@
|
||||
},
|
||||
"pending_form_values": {
|
||||
"name": "pending_form_values",
|
||||
"type": "TEXT",
|
||||
"type": "MEDIUMTEXT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
{template="categoryMenu" group="browse" params="$category->children()"}
|
||||
|
||||
<ul class="ipsToolList ipsToolList_horizontal ipsResponsive_hidePhone ipsClearfix ipsSpacer_both">
|
||||
{template="categoryButtons" group="browse" params="\IPS\downloads\Category::canOnAny('add') or $category->can('add'), $category, FALSE"}
|
||||
{template="categoryButtons" group="browse" params="$category->can('add'), $category, FALSE"}
|
||||
</ul>
|
||||
|
||||
<div class='ipsBox ipsResponsive_pull cDownloadsCategoryTable'>
|
||||
@@ -120,7 +120,7 @@
|
||||
</div>
|
||||
|
||||
<ul class="ipsToolList ipsToolList_horizontal ipsResponsive_showPhone ipsResponsive_block ipsClearfix ipsSpacer_top">
|
||||
{template="categoryButtons" group="browse" params="\IPS\downloads\Category::canOnAny('add') or $category->can('add'), $category, TRUE"}
|
||||
{template="categoryButtons" group="browse" params="$category->can('add'), $category, TRUE"}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -205,11 +205,11 @@
|
||||
{{if $lastPost = $category->lastFile()}}
|
||||
<li>{template="userPhoto" app="core" group="global" params="$lastPost->author(), 'tiny'"}</li>
|
||||
<li><a href="{$lastPost->url()}" class='ipsType_break ipsContained'>{$lastPost->name}</a></li>
|
||||
<li class='ipsType_blendLinks'>{lang="byline_nodate" htmlsprintf="$lastPost->author()->link()"}</li>
|
||||
<li class='ipsType_blendLinks'>{lang="byline_nodate" htmlsprintf="$lastPost->author()->link( NULL, NULL, $lastPost->isAnonymous() )"}</li>
|
||||
<li data-short="1 dy" class="ipsType_light">{datetime="$lastPost->submitted"}</li>
|
||||
{{endif}}
|
||||
</ul>
|
||||
{{if method_exists( $table, 'canModerate' ) AND $table->canModerate()}}
|
||||
{{if $table AND method_exists( $table, 'canModerate' ) AND $table->canModerate()}}
|
||||
<div class='ipsDataItem_modCheck'>
|
||||
<span class='ipsCustomInput'>
|
||||
<input type='checkbox' data-role='moderation' name="moderate[{$category->_id}]" data-actions="{expression="implode( ' ', $table->multimodActions( $category ) )"}" data-state=''>
|
||||
@@ -247,7 +247,7 @@
|
||||
{{endif}}
|
||||
</span>
|
||||
{{endif}}
|
||||
<span class='ipsType_large ipsType_light ipsType_unbold ipsType_noBreak'>{lang="byline_nodate" htmlsprintf="$file->author()->link()"}</span>
|
||||
<span class='ipsType_large ipsType_light ipsType_unbold ipsType_noBreak'>{lang="byline_nodate" htmlsprintf="$file->author()->link( NULL, NULL, $file->isAnonymous() )"}</span>
|
||||
</h2>
|
||||
<ul class='ipsList_inline ipsSpacer_top ipsSpacer_half'>
|
||||
{{if $price = $file->price()}}
|
||||
@@ -310,11 +310,11 @@
|
||||
</li>
|
||||
{{if ( $file->canDownload() or ( $file->container()->message('npd') and !$file->canBuy() ) ) && !$file->canBuy()}}
|
||||
<li class='ipsToolList_primaryAction ipsPos_left'>
|
||||
<a href='{{if settings.idm_antileech}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}' class='ipsButton ipsButton_light ipsButton_fullWidth ipsButton_small' {{if $file->container()->message('disclaimer') or \count( $file->files() ) > 1 or member.group['idm_wait_period']}}data-ipsDialog{{endif}}>{lang="download"}</a>
|
||||
<a href='{{if settings.idm_antileech AND !$file->requiresDownloadConfirmation()}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}' class='ipsButton ipsButton_light ipsButton_fullWidth ipsButton_small' {{if $file->requiresDownloadConfirmation()}}data-ipsDialog{{endif}}>{lang="download"}</a>
|
||||
</li>
|
||||
{{elseif $file->canBuy()}}
|
||||
<li class='ipsToolList_primaryAction ipsPos_left'>
|
||||
<a href='{$file->url('buy')->csrf()}' class='ipsButton ipsButton_small ipsButton_fullWidth ipsButton_important'><i class='fa fa-shopping-cart'></i> {lang="buy_now"}{{if $price}} - {expression="strip_tags($price)"}{{endif}}</a>
|
||||
<a href='{{if !$file->container()->message('disclaimer') OR !\in_array( $file->container()->disclaimer_location, [ 'purchase', 'both' ] )}}{$file->url('buy')->csrf()}{{else}}{$file->url('buy')}{{endif}}' class='ipsButton ipsButton_small ipsButton_fullWidth ipsButton_important'><i class='fa fa-shopping-cart'></i> {lang="buy_now"}{{if $price}} - {expression="strip_tags($price)"}{{endif}}</a>
|
||||
</li>
|
||||
{{endif}}
|
||||
</ul>
|
||||
@@ -465,7 +465,7 @@
|
||||
<a href='{$file->url( "getPrefComment" )}' title='{lang="view_this_file" sprintf="$file->name"}'>{$file->name}</a>
|
||||
</h3>
|
||||
|
||||
<p class='ipsType_medium ipsType_reset ipsType_blendLinks ipsTruncate ipsTruncate_line'>{lang="byline_nodate" htmlsprintf="$file->author()->link()"}</p>
|
||||
<p class='ipsType_medium ipsType_reset ipsType_blendLinks ipsTruncate ipsTruncate_line'>{lang="byline_nodate" htmlsprintf="$file->author()->link( NULL, NULL, $file->isAnonymous() )"}</p>
|
||||
{{if $file->container()->bitoptions['reviews']}}
|
||||
{template="rating" group="global" location="front" app="core" params="'medium', $file->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of"}
|
||||
{{endif}}
|
||||
@@ -555,7 +555,7 @@
|
||||
<span class='ipsType_break ipsContained'><a href='{$file->url( "getPrefComment" )}' title='{lang="view_this_file" sprintf="$file->name"} {{if $file->canEdit()}}{lang="click_hold_edit"}{{endif}}' {{if $file->canEdit()}}data-role="editableTitle"{{endif}}>{$file->name}</a></span>
|
||||
</h4>
|
||||
<p class='ipsType_reset ipsType_light ipsType_blendLinks'>
|
||||
{lang="byline_nodate" htmlsprintf="$file->author()->link()"}
|
||||
{lang="byline_nodate" htmlsprintf="$file->author()->link( NULL, NULL, $file->isAnonymous() )"}
|
||||
{{if \IPS\Request::i()->app != 'downloads'}}
|
||||
{lang="in"} <a href="{$file->container()->url()}">{$file->container()->_title}</a>
|
||||
{{endif}}
|
||||
@@ -594,7 +594,7 @@
|
||||
{{endif}}
|
||||
<p class='ipsType_medium'><strong>{{if $file->updated == $file->submitted}}{lang="submitted"} {datetime="$file->submitted" lowercase="true"}{{else}}{lang="updated"} {datetime="$file->updated" lowercase="true"}{{endif}}</strong></p>
|
||||
</div>
|
||||
{{if method_exists( $table, 'canModerate' ) AND $table->canModerate()}}
|
||||
{{if $table AND method_exists( $table, 'canModerate' ) AND $table->canModerate()}}
|
||||
<div class='ipsDataItem_modCheck'>
|
||||
<span class='ipsCustomInput'>
|
||||
<input type='checkbox' data-role='moderation' name="moderate[{$file->id}]" data-actions="{expression="implode( ' ', $table->multimodActions( $file ) )"}" data-state='{{if $file->tableStates()}}{$file->tableStates()}{{endif}}'>
|
||||
@@ -689,15 +689,15 @@
|
||||
<div class='ipsSpacer_top ipsSpacer_half'>
|
||||
{{if $item->canBuy() AND $item->isPurchasable()}}
|
||||
{{if $item->canDownload()}}
|
||||
<a href='{{if settings.idm_antileech}}{$item->url('download')->csrf()}{{else}}{$item->url('download')}{{endif}}' class='ipsButton ipsButton_fullWidth ipsButton_small ipsButton_primary' {{if $item->container()->message('disclaimer') or \count( $item->files() ) > 1 or member.group['idm_wait_period']}}data-dialog{{endif}}>{lang="download_now"}</a>
|
||||
<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='{$item->url('buy')->csrf()}' class='ipsButton ipsButton_fullWidth ipsButton_small ipsButton_primary'><i class='fa fa-shopping-cart'></i> {lang="buy_now"}{{if $price = $item->price()}} - {$price|raw}{{endif}}</a>
|
||||
<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> {lang="buy_now"}{{if $price = $item->price()}} - {$price|raw}{{endif}}</a>
|
||||
{{endif}}
|
||||
{{elseif !$item->isPurchasable( FALSE )}}
|
||||
{lang="purchasing_disabled"}
|
||||
{{else}}
|
||||
{{if $item->canDownload() or !$item->downloadTeaser()}}
|
||||
<a href='{{if settings.idm_antileech}}{$item->url('download')->csrf()}{{else}}{$item->url('download')}{{endif}}' class='ipsButton ipsButton_fullWidth ipsButton_small ipsButton_primary' {{if $item->container()->message('disclaimer') or \count( $item->files() ) > 1 or member.group['idm_wait_period']}}data-dialog{{endif}}>{lang="download_now"}</a>
|
||||
<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}}
|
||||
<span class="ipsButton ipsButton_light ipsButton_fullWidth ipsButton_small ipsButton_disable">{lang="download_teaser"}</span>
|
||||
{{endif}}
|
||||
@@ -1068,12 +1068,19 @@
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="nexus" template_name="fileInfo" template_data="$file" template_location="front" template_app="downloads"></template>
|
||||
<template template_group="nexus" template_name="filePurchaseInfo" template_data="$file" template_location="front" template_app="downloads"><![CDATA[{{if $file->container()->can( 'download' )}}
|
||||
<a {{if $file->canView() }}href='{{if settings.idm_antileech}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}'{{endif}} class='ipsButton ipsButton_medium {{if $file->canView()}}ipsButton_primary{{else}}ipsButton_disabled{{endif}}' {{if $file->container()->message('disclaimer') or \count( $file->files() ) > 1 or member.group['idm_wait_period']}}data-ipsDialog{{endif}}>{lang="download_now"}</a>
|
||||
{{endif}}
|
||||
{{if $file->container()->can( 'view' )}}
|
||||
<a {{if $file->canView() }}href='{$file->url( "getPrefComment" )}'{{endif}} class='ipsButton ipsButton_medium {{if $file->canView()}}ipsButton_alternate{{else}}ipsButton_disabled{{endif}}'>{lang="file_view_details"}</a>
|
||||
{{endif}}
|
||||
<template template_group="nexus" template_name="filePurchaseInfo" template_data="$file, $reactivateUrl=NULL" template_location="front" template_app="downloads"><![CDATA[
|
||||
<ul class='ipsList_inline'>
|
||||
{{if $reactivateUrl}}
|
||||
<li><a href="{$reactivateUrl}" class='ipsButton ipsButton_light'>{lang="reactivate_package"}</a></li>
|
||||
{{endif}}
|
||||
|
||||
{{if $file->canDownload()}}
|
||||
<li><a {{if $file->canView()}}href='{{if settings.idm_antileech AND !$file->requiresDownloadConfirmation()}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}'{{endif}} class='ipsButton ipsButton_medium {{if $file->canView()}}ipsButton_primary{{else}}ipsButton_disabled{{endif}}' {{if $file->requiresDownloadConfirmation()}}data-ipsDialog{{endif}}>{lang="download_now"}</a></li>
|
||||
{{endif}}
|
||||
{{if $file->container()->can( 'view' )}}
|
||||
<li><a {{if $file->canView() }}href='{$file->url( "getPrefComment" )}'{{endif}} class='ipsButton ipsButton_medium {{if $file->canView()}}ipsButton_alternate{{else}}ipsButton_disabled{{endif}}'>{lang="file_view_details"}</a></li>
|
||||
{{endif}}
|
||||
</ul>
|
||||
{{if !$file->canView()}}
|
||||
<p class='ipsType_light'>{lang="nexus_file_no_longer_available"}</p>
|
||||
{{endif}}]]></template>
|
||||
@@ -1150,6 +1157,38 @@
|
||||
{$pagination|raw}
|
||||
{{else}}
|
||||
<p class="ipsPad">{lang="no_results"}</p>
|
||||
{{endif}}]]></template>
|
||||
<template template_group="stats" template_name="topDownloadsTable" template_data="$downloads, $pagination" template_location="admin" template_app="downloads"><![CDATA[
|
||||
{{if trim( $pagination )}}
|
||||
{$pagination|raw}
|
||||
<br><br>
|
||||
{{endif}}
|
||||
{{if \count( $downloads )}}
|
||||
<table class="ipsTable ipsTable_zebra">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{lang="dfid"}</th>
|
||||
<th>{lang="downloads"}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{foreach $downloads as $row}}
|
||||
<tr>
|
||||
<td>
|
||||
{$row['file']|raw}
|
||||
</td>
|
||||
<td>
|
||||
{$row['downloads']}
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
</tbody>
|
||||
</table>
|
||||
<br>
|
||||
|
||||
{$pagination|raw}
|
||||
{{else}}
|
||||
<p class="ipsPad">{lang="no_results"}</p>
|
||||
{{endif}}]]></template>
|
||||
<template template_group="submit" template_name="bulkForm" template_data="$form, $category" template_location="front" template_app="downloads"><![CDATA[
|
||||
{template="pageHeader" group="global" app="core" params="\IPS\Member::loggedIn()->language()->addToStack('submit_bulk_information')"}
|
||||
@@ -1290,8 +1329,6 @@
|
||||
{$form->elements['']['files']->html( $form )|raw}
|
||||
{{if $category->multiple_files}}
|
||||
<button type='button' class='ipsButton ipsButton_light ipsButton_verySmall ipsHide ipsMargin_top' data-action='uploadMore'>{lang="upload_more_files"}</button>
|
||||
{{else}}
|
||||
<p id='elDownloadsSingleMessage' class='ipsHide'><i class="fa fa-exclamation-circle"></i> {lang="downloads_single_upload"}</p>
|
||||
{{endif}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -1453,7 +1490,7 @@
|
||||
<strong>{lang="file_submitter"}</strong>
|
||||
</div>
|
||||
<div class='ipsDataItem_main'>
|
||||
{$file->author()->link()|raw}
|
||||
{$file->author()->link( NULL, NULL, $file->isAnonymous() )|raw}
|
||||
</div>
|
||||
</li>
|
||||
<li class='ipsDataItem'>
|
||||
@@ -1508,7 +1545,7 @@
|
||||
<ul class='ipsList_inline'>
|
||||
<li><img src='{resource="subitem_stem.png" app="core"}' alt=''> <strong>{lang="with_version" sprintf="$versionNumber"}</strong></li>
|
||||
{{if $file->canDownload()}}
|
||||
<li><a href='{$file->url()->setQueryString( array( 'do' => 'download', 'version' => $version['b_id'] ) )->csrf()}' {{if $file->container()->message('disclaimer') or \count( $file->files( $version['b_id'] ) ) > 1}}data-ipsDialog{{endif}}>{lang="download"}</a></li>
|
||||
<li><a href='{{if settings.idm_antileech AND !$file->requiresDownloadConfirmation()}}{$file->url('download')->setQueryString( array( 'version' => $version['b_id'] ) )->csrf()}{{else}}{$file->url('download')->setQueryString( array( 'version' => $version['b_id'] ) )}{{endif}}' {{if $file->requiresDownloadConfirmation()}}data-ipsDialog{{endif}}>{lang="download"}</a></li>
|
||||
{{endif}}
|
||||
{{if $file->canEdit() and member.group['idm_bypass_revision']}}
|
||||
<li><a href="{$file->url()->setQueryString( array( 'do' => 'restorePreviousVersion', 'version' => $version['b_id'] ) )->csrf()}" data-confirm data-confirmMessage="{lang="version_restore_confirm"}" data-confirmSubMessage="{lang="version_restore_confirm_desc" sprintf="$versionNumber"}">{lang="restore"}</a></li>
|
||||
@@ -1603,7 +1640,7 @@
|
||||
</div>
|
||||
{{endif}}
|
||||
</div>]]></template>
|
||||
<template template_group="view" template_name="download" template_data="$file, $terms = NULL, $download = NULL, $confirmUrl, $multipleFiles, $waitingOn=NULL, $waitingFor=0" template_location="front" template_app="downloads"><![CDATA[<div data-controller='downloads.front.view.download'>
|
||||
<template template_group="view" template_name="download" template_data="$file, $terms=NULL, $download=NULL, $confirmUrl=NULL, $multipleFiles=NULL, $waitingOn=NULL, $waitingFor=0" template_location="front" template_app="downloads"><![CDATA[<div data-controller='downloads.front.view.download'>
|
||||
{{if $terms}}
|
||||
{template="downloadTerms" group="view" app="downloads" params="$file, $terms, $confirmUrl, $multipleFiles"}
|
||||
{{else}}
|
||||
@@ -1620,7 +1657,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}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}' class='ipsButton ipsButton_fullWidth ipsButton_large ipsButton_important' {{if $file->container()->message('disclaimer') or \count( $file->files() ) > 1 or ( member.group['idm_wait_period'] AND ( !$file->isPaid() OR member.group['idm_paid_restrictions'] ) )}}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}}>{lang="download_now"}</a>
|
||||
{{endif}}
|
||||
</li>
|
||||
]]></template>
|
||||
@@ -1656,14 +1693,9 @@
|
||||
{{endforeach}}]]></template>
|
||||
<template template_group="view" template_name="logTable" template_data="$table, $headers, $rows, $quickSearch" template_location="front" template_app="downloads"><![CDATA[<div data-baseurl='{$table->baseUrl}' data-resort='{$table->resortKey}' data-controller='core.global.core.table' {{if $table->getPaginationKey() != 'page'}}data-pageParam='{$table->getPaginationKey()}'{{endif}}>
|
||||
|
||||
{{if $table->pages > 1}}
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear">
|
||||
<div data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}
|
||||
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear {{if $table->pages <= 1}}ipsHide{{endif}}" data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
|
||||
{{if \count( $rows )}}
|
||||
<ol class='ipsGrid ipsGrid_collapsePhone ipsPad ipsClear {{foreach $table->classes as $class}}{$class} {{endforeach}}' id='elTable_{$table->uniqueId}' data-role="tableRows">
|
||||
@@ -1682,13 +1714,9 @@
|
||||
</div>
|
||||
{{endif}}
|
||||
|
||||
{{if $table->pages > 1}}
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear">
|
||||
<div data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear {{if $table->pages <= 1}}ipsHide{{endif}}" data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="view" template_name="multipleFiles" template_data="$fileObject, $files, $waitingOn, $waitingFor" template_location="front" template_app="downloads"><![CDATA[<div class='ipsPad'>
|
||||
<h1 class='ipsType_pageTitle'>{lang="download_your_files"}</h1>
|
||||
@@ -1709,7 +1737,7 @@
|
||||
{{endif}}
|
||||
<div class='ipsDataItem_generic ipsDataItem_size4 ipsType_right'>
|
||||
<span class="ipsHide" data-role="downloadCounterContainer">{lang="download_begins_in"} <span data-role="downloadCounter"></span> {lang="seconds"}</span>
|
||||
<a href='{$fileObject->url()->setQueryString( array( 'do' => 'download', 'r' => $k, 'confirm' => 1, 't' => 1, 'version' => isset( \IPS\Request::i()->version ) ? \IPS\Request::i()->version : NULL ) )->csrf()}' class='ipsButton ipsButton_primary ipsButton_small' data-action="download" {{if member.group['idm_wait_period']}}data-wait='true'{{endif}}>{lang="download"}</a>
|
||||
<a href='{$fileObject->url('download')->setQueryString( array( 'r' => $k, 'confirm' => 1, 't' => 1, 'version' => isset( \IPS\Request::i()->version ) ? \IPS\Request::i()->version : NULL ) )->csrf()}' class='ipsButton ipsButton_primary ipsButton_small' data-action="download" {{if member.group['idm_wait_period']}}data-wait='true'{{endif}}>{lang="download"}</a>
|
||||
</div>
|
||||
</li>
|
||||
{{endforeach}}
|
||||
@@ -1733,7 +1761,7 @@
|
||||
{lang="file_notify_none"}
|
||||
{{endif}}
|
||||
<br>
|
||||
<a href="{url='app=core&module=system&controller=notifications&do=options&type=new_file_version'}">Change how the notification is sent</a>
|
||||
<a href="{url='app=core&module=system&controller=notifications&do=options&type=new_file_version'}">{lang="follow_type_immediate_change"}</a>
|
||||
</div>]]></template>
|
||||
<template template_group="view" template_name="pendingView" template_data="$file, $pendingVersion" template_location="front" template_app="downloads"><![CDATA[
|
||||
{{if $club = $file->container()->club()}}
|
||||
@@ -1778,7 +1806,7 @@
|
||||
{template="userPhoto" app="core" group="global" params="$file->author(), 'tiny', $file->warningRef()"}
|
||||
<div>
|
||||
<p class='ipsType_reset ipsType_large ipsType_blendLinks'>
|
||||
{lang="byline_nodate_itemprop" htmlsprintf="$file->author()->link( $file->warningRef() )"}{{if member.group['idm_view_approvers'] and $file->approver}} {lang="file_approved_by" sprintf="\IPS\Member::load( $file->approver )->name" htmlsprintf="\IPS\DateTime::ts( $file->approvedon )->html()"}{{endif}}
|
||||
{lang="byline_nodate_itemprop" htmlsprintf="$file->author()->link( $file->warningRef(), NULL, $file->isAnonymous() )"}{{if member.group['idm_view_approvers'] and $file->approver}} {lang="file_approved_by" sprintf="\IPS\Member::load( $file->approver )->name" htmlsprintf="\IPS\DateTime::ts( $file->approvedon )->html()"}{{endif}}
|
||||
</p>
|
||||
{{if $file->author()->member_id}}
|
||||
<ul class='ipsList_inline'>
|
||||
@@ -1854,12 +1882,12 @@
|
||||
{{$data = $files->data();}}
|
||||
<li class='ipsDataItem'>
|
||||
<div class='ipsDataItem_main'>
|
||||
<h4 class='ipsDataItem_title ipsContained_container'><a href="{$pendingVersion->url('download')->csrf()->setQueryString( 'fileId', $data['record_id'] )}">{$f->originalFilename}</a></h4>
|
||||
<h4 class='ipsDataItem_title ipsContained_container'><a href="{{if settings.idm_antileech AND !$file->requiresDownloadConfirmation()}}{$pendingVersion->url('download')->csrf()->setQueryString( 'fileId', $data['record_id'] )}{{else}}{$pendingVersion->url('download')->setQueryString( 'fileId', $data['record_id'] )}{{endif}}">{$f->originalFilename}</a></h4>
|
||||
{{if $data['record_size']}}<p class='ipsType_reset ipsDataItem_meta'>{filesize="$data['record_size']"}</p>{{endif}}
|
||||
</div>
|
||||
<div class='ipsDataItem_generic ipsDataItem_size4'>
|
||||
<span class="ipsHide" data-role="downloadCounterContainer">{lang="download_begins_in"} <span data-role="downloadCounter"></span> {lang="seconds"}</span>
|
||||
<a href="{$pendingVersion->url('download')->csrf()->setQueryString( 'fileId', $data['record_id'] )}" class='ipsButton ipsButton_primary ipsButton_small'>{lang="download"}</a>
|
||||
<a href="{{if settings.idm_antileech AND !$file->requiresDownloadConfirmation()}}{$pendingVersion->url('download')->csrf()->setQueryString( 'fileId', $data['record_id'] )}{{else}}{$pendingVersion->url('download')->setQueryString( 'fileId', $data['record_id'] )}{{endif}}" class='ipsButton ipsButton_primary ipsButton_small'>{lang="download"}</a>
|
||||
</div>
|
||||
</li>
|
||||
{{endforeach}}
|
||||
@@ -2054,7 +2082,10 @@
|
||||
{template="userPhoto" app="core" group="global" params="$file->author(), 'tiny', $file->warningRef()"}
|
||||
<div>
|
||||
<p class='ipsType_reset ipsType_large ipsType_blendLinks'>
|
||||
{lang="byline_nodate_itemprop" htmlsprintf="$file->author()->link( $file->warningRef() )"}{{if member.group['idm_view_approvers'] and $file->approver}} {lang="file_approved_by" sprintf="\IPS\Member::load( $file->approver )->name" htmlsprintf="\IPS\DateTime::ts( $file->approvedon )->html()"}{{endif}}
|
||||
{lang="byline_nodate_itemprop" htmlsprintf="$file->author()->link( $file->warningRef(), NULL, $file->isAnonymous() )"}{{if member.group['idm_view_approvers'] and $file->approver}} {lang="file_approved_by" sprintf="\IPS\Member::load( $file->approver )->name" htmlsprintf="\IPS\DateTime::ts( $file->approvedon )->html()"}{{endif}}
|
||||
{{if $file->isAnonymous() and \IPS\Member::loggedIn()->modPermission('can_view_anonymous_posters')}}
|
||||
<a data-ipsHover data-ipsHover-width="370" data-ipsHover-onClick href="{$file->url( 'reveal' )->csrf()}"><span class="cAuthorPane_badge cAuthorPane_badge_small cAuthorPane_badge--anon" data-ipsTooltip title="{lang="post_anonymously_reveal"}"></span></a>
|
||||
{{endif}}
|
||||
</p>
|
||||
{{if $file->author()->member_id OR $file->canChangeAuthor()}}
|
||||
<ul class='ipsList_inline ipsType_light ipsType_blendLinks'>
|
||||
@@ -2087,11 +2118,11 @@
|
||||
{template="contentItemMessages" group="global" app="core" params="$file->getMessages(), $file"}
|
||||
|
||||
{{if ( \IPS\Member::loggedIn()->member_id == $file->author()->member_id OR $file->canUnhide() OR $file->canHide() ) AND $file->hasPendingVersion()}}
|
||||
<div class="ipsMessage ipsMessage_warning ipsSpacer_both">
|
||||
<div class="ipsMessage ipsMessage_warning ipsSpacer_both ipsClearfix">
|
||||
<p class="ipsType_reset">
|
||||
{lang="file_pending_approval_version"}
|
||||
{{if $file->canUnhide() OR $file->canHide()}}
|
||||
<a href="{expression="\IPS\downloads\File\PendingVersion::load($file->id, 'pending_file_id')->url()"}" class="ipsPos_right ipsButton ipsButton_positive ipsButton_verySmall" title='{lang="file_pending_version_button"}'>{lang="file_pending_version_button"}</a>
|
||||
<a href="{expression="\IPS\downloads\File\PendingVersion::load($file->id, 'pending_file_id')->url()"}" class="ipsPos_right ipsButton ipsButton_positive ipsButton_verySmall sm:ipsMargin_top:half sm:ipsPos_left" title='{lang="file_pending_version_button"}'>{lang="file_pending_version_button"}</a>
|
||||
{{endif}}
|
||||
</p>
|
||||
</div>
|
||||
@@ -2233,7 +2264,7 @@
|
||||
{{if !$file->isPurchasable( FALSE )}}
|
||||
<span class="ipsType_light ipsType_blendLinks ipsResponsive_hidePhone ipsResponsive_inline"><i class="fa fa-info-circle"></i> {lang="purchasing_disabled"}</span>
|
||||
{{else}}
|
||||
<a href='{$file->url('buy')->csrf()}' class='ipsButton ipsButton_fullWidth ipsButton_large ipsButton_important' {{if $file->container()->message('disclaimer') AND \in_array( $file->container()->disclaimer_location, [ 'purchase', 'both'])}}data-ipsDialog{{endif}}><i class='fa fa-shopping-cart'></i> {lang="buy_now"}{{if $price = $file->price()}} - {$price|raw}{{endif}}</a>
|
||||
<a href='{{if !$file->container()->message('disclaimer') OR !\in_array( $file->container()->disclaimer_location, [ 'purchase', 'both' ] )}}{$file->url('buy')->csrf()}{{else}}{$file->url('buy')}{{endif}}' class='ipsButton ipsButton_fullWidth ipsButton_large ipsButton_important' {{if $file->container()->message('disclaimer') AND \in_array( $file->container()->disclaimer_location, [ 'purchase', 'both'])}}data-ipsDialog{{endif}}><i class='fa fa-shopping-cart'></i> {lang="buy_now"}{{if $price = $file->price()}} - {$price|raw}{{endif}}</a>
|
||||
{{endif}}
|
||||
</li>
|
||||
{{else}}
|
||||
@@ -2332,7 +2363,7 @@
|
||||
<ul id='elFileActions_menu' class='ipsMenu ipsMenu_auto ipsHide'>
|
||||
{{if $file->canReportOrRevoke() === TRUE}}
|
||||
<li class='ipsMenu_item'>
|
||||
<a href='{$file->url('report')}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_file"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_file"}" >{lang="report"}</a>
|
||||
<a href='{$file->url('report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_file"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}"{{endif}} title="{lang="report_file"}" >{lang="report"}</a>
|
||||
</li>
|
||||
<li class='ipsMenu_sep'><hr></li>
|
||||
{{endif}}
|
||||
@@ -2341,12 +2372,14 @@
|
||||
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'restoreAsHidden' ) )}' data-confirm data-confirmSubMessage='{lang="restore_as_hidden_desc"}'>{lang="restore_as_hidden"}</a></li>
|
||||
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'delete', 'immediate' => 1 ) )}' data-confirm data-confirmSubMessage='{lang="delete_immediately_desc"}'>{lang="delete_immediately"}</a></li>
|
||||
{{else}}
|
||||
{{if $file->canEdit()}}
|
||||
{{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}}
|
||||
<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}}
|
||||
{{if $file->canEdit()}}
|
||||
<li class='ipsMenu_item'><a href='{$file->url()->setQueryString( array( 'do' => 'edit' ) )}' title='{lang="downloads_edit_details_title"}'>{lang="downloads_edit_details"}</a></li>
|
||||
{{endif}}
|
||||
{{if $file->canFeature()}}
|
||||
@@ -2362,7 +2395,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()->csrf()->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()->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>
|
||||
@@ -2380,7 +2413,7 @@
|
||||
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'delete' ) )}' data-confirm title='{lang="downloads_delete_title"}'>{lang="delete"}</a></li>
|
||||
{{endif}}
|
||||
{{if $file->canOnMessage( 'add' )}}
|
||||
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'messageForm' ) )}' data-ipsDialog data-ipsDialog-title='{lang="add_message"}'>{lang='add_message'}</a></li>
|
||||
<li class='ipsMenu_item'><a href='{$file->url()->setQueryString( array( 'do' => 'messageForm' ) )}' data-ipsDialog data-ipsDialog-title='{lang="add_message"}'>{lang='add_message'}</a></li>
|
||||
{{endif}}
|
||||
{{if $file->isPurchasable() AND $file->canDisablePurchases()}}
|
||||
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'purchaseStatus', 'value' => 0 ) )}' data-confirm>{lang="disable_purchases"}</a></li>
|
||||
@@ -2390,14 +2423,14 @@
|
||||
{{endif}}
|
||||
{{if \IPS\Member::loggedIn()->modPermission('can_view_moderation_log')}}
|
||||
<li class='ipsMenu_sep'><hr></li>
|
||||
<li class="ipsMenu_item"><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
|
||||
<li class="ipsMenu_item"><a href='{$file->url()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
|
||||
{{endif}}
|
||||
{{endif}}
|
||||
</ul>
|
||||
</li>
|
||||
{{elseif $file->canReportOrRevoke() === TRUE}}
|
||||
<li>
|
||||
<a href='{$file->url('report')}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_file"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_file"}" class='ipsButton ipsButton_link ipsButton_verySmall ipsButton_fullWidth'>{lang="report"}</a>
|
||||
<a href='{$file->url('report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_file"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}"{{endif}} title="{lang="report_file"}" class='ipsButton ipsButton_link ipsButton_verySmall ipsButton_fullWidth'>{lang="report"}</a>
|
||||
</li>
|
||||
{{endif}}
|
||||
</ul>
|
||||
@@ -2469,7 +2502,7 @@
|
||||
</div>
|
||||
<div class='ipsDataItem_main'>
|
||||
<div class='ipsType_break ipsContained'><a href="{$comment->url()}" class='ipsType_medium ipsTruncate ipsTruncate_line'>{$comment->item()->name}</a></div>
|
||||
<p class='ipsType_reset ipsType_light ipsType_medium ipsType_blendLinks'>{lang="byline_nodate" htmlsprintf="$comment->author()->link()"} · <a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' class='ipsType_blendLinks'>{$comment->dateLine()|raw}</a></p>
|
||||
<p class='ipsType_reset ipsType_light ipsType_medium ipsType_blendLinks'>{lang="byline_nodate" htmlsprintf="$comment->author()->link( NULL, NULL, $comment->isAnonymous() )"} · <a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' class='ipsType_blendLinks'>{$comment->dateLine()|raw}</a></p>
|
||||
<div class='ipsType_medium ipsType_textBlock ipsType_richText ipsType_break ipsContained ipsSpacer_top ipsSpacer_half' data-ipsTruncate data-ipsTruncate-type='remove' data-ipsTruncate-size='{{if $orientation == 'vertical'}}6 lines{{else}}2 lines{{endif}}' data-ipsTruncate-watch='false'>
|
||||
{$comment->truncated( true )|raw}
|
||||
</div>
|
||||
@@ -2501,7 +2534,7 @@
|
||||
</div>
|
||||
{{endif}}
|
||||
<h3 class='ipsComment_author ipsType_blendLinks'>
|
||||
<strong class='ipsType_normal'>{template="userLink" app="core" group="global" params="$comment->author(), $comment->warningRef()"}</strong>
|
||||
<strong class='ipsType_normal'>{template="userLink" app="core" group="global" params="$comment->author(), $comment->warningRef(), NULL, $comment->isAnonymous()"}</strong>
|
||||
{template="reputationBadge" group="global" app="core" params="$comment->author()"}
|
||||
</h3>
|
||||
<p class='ipsComment_meta ipsType_light ipsType_medium'>
|
||||
@@ -2536,7 +2569,7 @@
|
||||
<div class='ipsItemControls'>
|
||||
<ul class='ipsComment_controls ipsClearfix ipsItemControls_left' data-role="commentControls">
|
||||
{{if $comment->canReportOrRevoke() === TRUE}}
|
||||
<li><a href='{$comment->url('report')}' data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}" data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a></li>
|
||||
<li><a href='{$comment->url('report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}"{{endif}} data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a></li>
|
||||
{{endif}}
|
||||
</ul>
|
||||
{{if $comment->hidden() !== 1 && \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_enabled}}
|
||||
@@ -2619,7 +2652,7 @@
|
||||
<div class='ipsItemControls'>
|
||||
<ul class='ipsComment_controls ipsClearfix ipsItemControls_left' data-role="commentControls">
|
||||
{{if $comment->canReportOrRevoke() === TRUE}}
|
||||
<li><a href='{$comment->url('report')}' data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}" data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a></li>
|
||||
<li><a href='{$comment->url('report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}"{{endif}} data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a></li>
|
||||
{{endif}}
|
||||
|
||||
<li><a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findReview', 'review' => $comment->id ) )}' data-ipsMenu data-ipsMenu-closeOnClick='false' id='elShareComment_{$comment->id}'>{lang="share_this_comment"}</a></li>
|
||||
@@ -2676,7 +2709,7 @@
|
||||
<div class='ipsWidget_latestItem'>
|
||||
<strong class='ipsType_small ipsType_uppercase'>{lang="latest_file"}</strong><br>
|
||||
<div class='ipsType_break ipsContained'><a href="{$latestFile->url( "getPrefComment" )}" title='{lang="view_this_file" sprintf="$latestFile->name"}' class='ipsTruncate ipsTruncate_line'>{$latestFile->name}</a></div>
|
||||
<span class='ipsType_light ipsType_medium'>{lang="byline_nodate" htmlsprintf="$latestFile->author()->link()"}</span>
|
||||
<span class='ipsType_light ipsType_medium'>{lang="byline_nodate" htmlsprintf="$latestFile->author()->link( NULL, NULL, $latestFile->isAnonymous() )"}</span>
|
||||
<p class='ipsType_medium ipsType_reset'>{{if !$latestFile->downloads}}<span class='ipsType_light'>{{endif}}<i class='fa fa-arrow-circle-down'></i> {number="$latestFile->downloads"}{{if !$latestFile->downloads}}</span>{{endif}} {{if $latestFile->container()->bitoptions['comments']}} {{if !$latestFile->comments}}<span class='ipsType_light'>{{endif}}<i class='fa fa-comment'></i> {$latestFile->comments}{{endif}}{{if !$latestFile->comments}}</span>{{endif}}</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -2771,7 +2804,7 @@
|
||||
</div>
|
||||
<div class='ipsDataItem_main'>
|
||||
<div class='ipsType_break ipsContained'><a href="{$file->url( "getPrefComment" )}" title='{lang="view_this_file" sprintf="$file->name"}' class='ipsTruncate ipsTruncate_line'>{$file->name}</a></div>
|
||||
<span class='ipsType_light ipsType_medium ipsType_blendLinks'>{lang="byline_nodate" htmlsprintf="$file->author()->link()"}</span><br>
|
||||
<span class='ipsType_light ipsType_medium ipsType_blendLinks'>{lang="byline_nodate" htmlsprintf="$file->author()->link( NULL, NULL, $file->isAnonymous() )"}</span><br>
|
||||
{{if $file->container()->bitoptions['reviews']}}
|
||||
{template="rating" group="global" location="front" app="core" params="'small', $file->rating, \IPS\Settings::i()->reviews_rating_out_of"}
|
||||
{{endif}}
|
||||
@@ -3209,11 +3242,40 @@ html[dir="rtl"] #elDownloadStatsLatest > .ipsWidget_latestItem {
|
||||
}
|
||||
|
||||
#elDownloadsSubmit .ipsAttachment_dropZone {
|
||||
background: rgb( var(--theme-area_background_reset) );
|
||||
border: 3px dashed rgba( var(--theme-text_color), 0.15 );
|
||||
margin-top: 7px;
|
||||
background: rgb( var(--theme-area_background_light) );
|
||||
border: 2px dashed rgba( var(--theme-text_light), 0.3 );
|
||||
background-clip: padding-box;
|
||||
}
|
||||
|
||||
#elDownloadsSubmit .ipsUploader__row {
|
||||
border: 1px solid rgba(var(--theme-text_light), 0.2);
|
||||
}
|
||||
|
||||
.cDownloadsPrimaryRadio {
|
||||
background: rgb(var(--theme-area_background_reset));
|
||||
border-radius: 40px;
|
||||
position: absolute;
|
||||
top: 110px;
|
||||
left: var(--sp-3);
|
||||
padding: var(--sp-1) var(--sp-2) var(--sp-1) var(--sp-1);
|
||||
font-size: {fontsize="11"} !important;
|
||||
}
|
||||
|
||||
.cDownloadsPrimaryRadio .ipsCustomInput {
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
.ipsUploader__row.ipsAttach_error .cDownloadsPrimaryRadio {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*#elDownloadsSubmit .ipsUploader__container {
|
||||
background: rgb(var(--theme-area_background));
|
||||
margin: var(--sp-6) calc(var(--sp-4) * -1) calc(var(--sp-4) * -1);
|
||||
padding: var(--sp-2) var(--sp-2) var(--sp-2);
|
||||
}*/
|
||||
|
||||
.cDownloadsSubmit_step {
|
||||
display: block;
|
||||
width: 40px;
|
||||
|
||||
@@ -349,6 +349,7 @@
|
||||
"104067": "4.4.10",
|
||||
"104068": "4.4.10",
|
||||
"104069": "4.4.10",
|
||||
"104070": "4.4.11",
|
||||
"105013": "4.5.0 Beta 1",
|
||||
"105014": "4.5.0 Beta 1",
|
||||
"105015": "4.5.0 Beta 2",
|
||||
@@ -369,5 +370,42 @@
|
||||
"105030": "4.5.0 Beta 11",
|
||||
"105031": "4.5.0 Beta 11",
|
||||
"105032": "4.5.0 Beta 12",
|
||||
"105100": "4.5.0"
|
||||
"105100": "4.5.0",
|
||||
"105101": "4.5.0",
|
||||
"105102": "4.5.1 Beta 1",
|
||||
"105103": "4.5.1 Beta 1",
|
||||
"105104": "4.5.1 Beta 2",
|
||||
"105105": "4.5.1 Beta 3",
|
||||
"105106": "4.5.1",
|
||||
"105107": "4.5.2",
|
||||
"105108": "4.5.2",
|
||||
"105109": "4.5.2",
|
||||
"105110": "4.5.2",
|
||||
"105111": "4.5.2",
|
||||
"105112": "4.5.3",
|
||||
"105113": "4.5.3",
|
||||
"105114": "4.5.3",
|
||||
"105115": "4.5.3",
|
||||
"105116": "4.5.4",
|
||||
"105117": "4.5.4",
|
||||
"105118": "4.5.4",
|
||||
"105119": "4.5.4",
|
||||
"105120": "4.5.4",
|
||||
"105121": "4.5.4",
|
||||
"105122": "4.5.4",
|
||||
"105123": "4.5.4",
|
||||
"105124": "4.5.4.1",
|
||||
"105125": "4.5.4.2",
|
||||
"105126": "4.5.4.2",
|
||||
"105127": "4.5.4.2",
|
||||
"105128": "4.5.4.2",
|
||||
"105129": "4.5.4.2",
|
||||
"105130": "4.5.4.2",
|
||||
"106100": "4.6.0 Beta 1",
|
||||
"106101": "4.6.0 Beta 1.1",
|
||||
"106103": "4.6.0 Beta 2",
|
||||
"106104": "4.6.0 Beta 3",
|
||||
"106105": "4.6.0 Beta 3.1",
|
||||
"106106": "4.6.0 Beta 4",
|
||||
"106107": "4.6.0"
|
||||
}
|
||||
@@ -44,28 +44,44 @@ class _Screenshots
|
||||
*/
|
||||
public function move( $offset, $storageConfiguration, $oldConfiguration=NULL )
|
||||
{
|
||||
$record = \IPS\Db::i()->select( '*', 'downloads_files_records', array( 'record_type=?', 'ssupload' ), 'record_id', array( $offset, 1 ) )->first();
|
||||
|
||||
$record = \IPS\Db::i()->select( '*', 'downloads_files_records', array( 'record_type=?', 'ssupload' ), 'record_id', array( $offset, 1 ) )->first();
|
||||
$updates = array();
|
||||
|
||||
try
|
||||
{
|
||||
$file = \IPS\File::get( $oldConfiguration ?: 'downloads_Screenshots', $record['record_location'] )->move( $storageConfiguration );
|
||||
|
||||
if ( (string) $file != $record['record_location'] )
|
||||
{
|
||||
\IPS\Db::i()->update( 'downloads_files_records', array( 'record_location' => (string) $file ), array( 'record_id=?', $record['record_id'] ) );
|
||||
$updates['record_location'] = (string) $file;
|
||||
}
|
||||
|
||||
$file = \IPS\File::get( $oldConfiguration ?: 'downloads_Screenshots', $record['record_thumb'] )->move( $storageConfiguration );
|
||||
|
||||
if ( (string) $file != $record['record_thumb'] )
|
||||
{
|
||||
\IPS\Db::i()->update( 'downloads_files_records', array( 'record_thumb' => (string) $file ), array( 'record_id=?', $record['record_id'] ) );
|
||||
$updates['record_thumb'] = (string) $file;
|
||||
}
|
||||
|
||||
if( $record['record_no_watermark'] )
|
||||
{
|
||||
$file = \IPS\File::get( $oldConfiguration ?: 'downloads_Screenshots', $record['record_no_watermark'] )->move( $storageConfiguration );
|
||||
|
||||
if ( (string) $file != $record['record_no_watermark'] )
|
||||
{
|
||||
$updates['record_no_watermark'] = (string) $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch( \Exception $e )
|
||||
{
|
||||
/* Any issues are logged */
|
||||
}
|
||||
|
||||
if( \count( $updates ) )
|
||||
{
|
||||
\IPS\Db::i()->update( 'downloads_files_records', $updates, array( 'record_id=?', $record['record_id'] ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -87,6 +103,11 @@ class _Screenshots
|
||||
{
|
||||
\IPS\Db::i()->update( 'downloads_files_records', array( 'record_thumb' => $new ), array( 'record_id=?', $record['record_id'] ) );
|
||||
}
|
||||
|
||||
if ( $record['record_no_watermark'] and $new = \IPS\File::repairUrl( $record['record_no_watermark'] ) )
|
||||
{
|
||||
\IPS\Db::i()->update( 'downloads_files_records', array( 'record_no_watermark' => $new ), array( 'record_id=?', $record['record_id'] ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -99,7 +120,8 @@ class _Screenshots
|
||||
{
|
||||
try
|
||||
{
|
||||
$record = \IPS\Db::i()->select( '*', 'downloads_files_records', array( '( record_location=? OR record_thumb=? ) AND record_type=?', (string) $file, (string) $file, 'ssupload' ) )->first();
|
||||
$fileName = (string) $file;
|
||||
$record = \IPS\Db::i()->select( '*', 'downloads_files_records', array( '( record_location=? OR record_thumb=? OR record_no_watermark=? ) AND record_type=?', $fileName, $fileName, $fileName, 'ssupload' ) )->first();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ class _Downloads
|
||||
return array (
|
||||
'exclude' => array(),
|
||||
'lessIsMore' => array( 'idm_wait_period' ),
|
||||
'neg1IsBest' => array(),
|
||||
'neg1IsBest' => array( 'idm_max_size' ),
|
||||
'zeroIsBest' => array( 'idm_throttling' ),
|
||||
'callback' => array( 'idm_restrictions' => function( $a, $b, $k )
|
||||
{
|
||||
|
||||
@@ -88,6 +88,7 @@ class _Files
|
||||
public static function parse_mobile_new_file_version( \IPS\Lang $language, \IPS\downloads\File $file )
|
||||
{
|
||||
return array(
|
||||
'title' => $language->addToStack( 'notification__new_file_version_title' ),
|
||||
'body' => $language->addToStack( 'notification__new_file_version', FALSE, array( 'htmlsprintf' => array(
|
||||
$file->author()->name,
|
||||
$file->mapped('title')
|
||||
|
||||
@@ -71,7 +71,7 @@ class _RebuildScreenshotWatermarks
|
||||
* @return int New offset
|
||||
* @throws \IPS\Task\Queue\OutOfRangeException Indicates offset doesn't exist and thus task is complete
|
||||
*/
|
||||
public function run( $data, $offset )
|
||||
public function run( &$data, $offset )
|
||||
{
|
||||
$last = NULL;
|
||||
$watermark = \IPS\Settings::i()->idm_watermarkpath ? \IPS\Image::create( \IPS\File::get( 'core_Theme', \IPS\Settings::i()->idm_watermarkpath )->contents() ) : NULL;
|
||||
|
||||
@@ -77,6 +77,64 @@ class _File extends \IPS\nexus\Invoice\Item\Purchase
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Client Area Action
|
||||
*
|
||||
* @param \IPS\nexus\Purchase $purchase The purchase
|
||||
* @return string
|
||||
*/
|
||||
public static function clientAreaAction( \IPS\nexus\Purchase $purchase )
|
||||
{
|
||||
if( \IPS\Request::i()->act == 'reactivate' AND $purchase->can_reactivate )
|
||||
{
|
||||
/* Cannot renew, do not set renewal periods */
|
||||
$file = \IPS\downloads\File::load( $purchase->item_id );
|
||||
if( !$file->container()->can( 'download', $purchase->member ) )
|
||||
{
|
||||
return parent::clientAreaAction( $purchase );
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
$file = \IPS\downloads\File::load( $purchase->item_id );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
return parent::clientAreaAction( $purchase );
|
||||
}
|
||||
$renewalCosts = json_decode( $file->renewal_price, TRUE );
|
||||
$currency = $purchase->original_invoice->currency;
|
||||
|
||||
$tax = NULL;
|
||||
if ( $purchase->tax )
|
||||
{
|
||||
try
|
||||
{
|
||||
$tax = \IPS\nexus\Tax::load( $purchase->tax );
|
||||
}
|
||||
catch ( \Exception $e ) { }
|
||||
}
|
||||
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
$purchase->renewals = new \IPS\nexus\Purchase\RenewalTerm( new \IPS\nexus\Money( $renewalCosts[ $currency ]['amount'], $currency ), new \DateInterval( 'P' . $file->renewal_term . mb_strtoupper( $file->renewal_units ) ), $tax );
|
||||
$purchase->cancelled = FALSE;
|
||||
$purchase->save();
|
||||
|
||||
$purchase->member->log( 'purchase', array( 'type' => 'info', 'id' => $purchase->id, 'name' => $purchase->name, 'info' => 'change_renewals', 'to' => array( 'cost' => $purchase->renewals->cost->amount, 'currency' => $purchase->renewals->cost->currency, 'term' => $purchase->renewals->getTerm() ) ) );
|
||||
|
||||
if ( !$purchase->active and $cycles = $purchase->canRenewUntil( NULL, TRUE ) AND $cycles !== FALSE )
|
||||
{
|
||||
$url = $cycles === 1 ? $purchase->url()->setQueryString( 'do', 'renew' )->csrf() : $purchase->url()->setQueryString( 'do', 'renew' );
|
||||
\IPS\Output::i()->redirect( $url );
|
||||
}
|
||||
else
|
||||
{
|
||||
\IPS\Output::i()->redirect( $purchase->url() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Client Area Page HTML
|
||||
@@ -89,8 +147,15 @@ class _File extends \IPS\nexus\Invoice\Item\Purchase
|
||||
try
|
||||
{
|
||||
$file = \IPS\downloads\File::load( $purchase->item_id );
|
||||
|
||||
/* Reactivate */
|
||||
$reactivateUrl = NULL;
|
||||
if ( $file->container()->can( 'download', $purchase->member ) and !$purchase->renewals and $file->renewal_term and $file->renewal_units and $file->renewal_price and $purchase->can_reactivate and ( !$purchase->billing_agreement or $purchase->billing_agreement->canceled ) )
|
||||
{
|
||||
$reactivateUrl = \IPS\Http\Url::internal( "app=nexus&module=clients&controller=purchases&id={$purchase->id}&do=extra&act=reactivate", 'front', 'clientspurchaseextra', \IPS\Http\Url::seoTitle( $purchase->name ) )->csrf();
|
||||
}
|
||||
|
||||
return array( 'packageInfo' => \IPS\Theme::i()->getTemplate( 'nexus', 'downloads' )->fileInfo( $file ), 'purchaseInfo' => \IPS\Theme::i()->getTemplate( 'nexus', 'downloads' )->filePurchaseInfo( $file ) );
|
||||
return array( 'packageInfo' => \IPS\Theme::i()->getTemplate( 'nexus', 'downloads' )->fileInfo( $file ), 'purchaseInfo' => \IPS\Theme::i()->getTemplate( 'nexus', 'downloads' )->filePurchaseInfo( $file, $reactivateUrl ) );
|
||||
}
|
||||
catch ( \OutOfRangeException $e ) { }
|
||||
|
||||
@@ -171,7 +236,8 @@ class _File extends \IPS\nexus\Invoice\Item\Purchase
|
||||
{
|
||||
$file = \IPS\downloads\File::load( $purchase->item_id );
|
||||
|
||||
if( $file->canView( \IPS\Member::load( $purchase->member_id ) ) )
|
||||
/* File is viewable and basic download permission check is good */
|
||||
if( $file->canView( $purchase->member ) AND $file->container()->can( 'download', $purchase->member ) )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
//<?php
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
class downloads_hook_apiForum extends _HOOK_CLASS_
|
||||
{
|
||||
/**
|
||||
* Delete
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @param int|NULL $deleteChildrenOrMove -1 to delete all child nodes, or the new parent node ID to move the children to
|
||||
* @throws 2F363/8 The node ID does not exist
|
||||
* @throws 2F363/9 The target node cannot be deleted because it is in use by a Downloads Category
|
||||
* @return \IPS\Api\Response
|
||||
*/
|
||||
public function _delete( $id, $deleteChildrenOrMove = NULL )
|
||||
{
|
||||
/* Load forum and verify that it is not used for comments */
|
||||
$nodeClass = $this->class;
|
||||
if ( \IPS\Request::i()->subnode )
|
||||
{
|
||||
$nodeClass = $nodeClass::$subnodeClass;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
$node = $nodeClass::load( $id );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'INVALID_ID', '2F363/8', 404 );
|
||||
}
|
||||
|
||||
if ( $dbCategory = $node->isUsedByADownloadsCategory() )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'FORUM_USED_BY_DOWNLOADS', '2F363/9', 403 );
|
||||
}
|
||||
else
|
||||
{
|
||||
return parent::_delete( $id, $deleteChildrenOrMove );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,11 @@ class _downloaders extends \IPS\Dispatcher\Controller
|
||||
* @brief Has been CSRF-protected
|
||||
*/
|
||||
public static $csrfProtected = TRUE;
|
||||
|
||||
/**
|
||||
* @brief Allow MySQL RW separation for efficiency
|
||||
*/
|
||||
public static $allowRWSeparation = TRUE;
|
||||
|
||||
/**
|
||||
* @brief Number of results per page
|
||||
@@ -103,7 +108,17 @@ class _downloaders extends \IPS\Dispatcher\Controller
|
||||
$total = 0;
|
||||
}
|
||||
|
||||
if( $total )
|
||||
/* Add the date range button */
|
||||
\IPS\Output::i()->sidebar['actions'] = array(
|
||||
'settings' => array(
|
||||
'title' => 'stats_date_range',
|
||||
'icon' => 'calendar',
|
||||
'link' => \IPS\Http\Url::internal( 'app=downloads&module=stats&controller=downloaders&form=1' )->setQueryString( $params ),
|
||||
'data' => array( 'ipsDialog' => '', 'ipsDialog-title' => \IPS\Member::loggedIn()->language()->addToStack('stats_date_range') )
|
||||
)
|
||||
);
|
||||
|
||||
if( $total > 0 )
|
||||
{
|
||||
$select = \IPS\Db::i()->select( 'dmid, count(*) as downloads', 'downloads_downloads', $where, 'downloads DESC', array( ( $page - 1 ) * static::PER_PAGE, static::PER_PAGE ), 'dmid' );
|
||||
$mids = array();
|
||||
@@ -128,15 +143,6 @@ class _downloaders extends \IPS\Dispatcher\Controller
|
||||
FALSE
|
||||
);
|
||||
|
||||
\IPS\Output::i()->sidebar['actions'] = array(
|
||||
'settings' => array(
|
||||
'title' => 'stats_date_range',
|
||||
'icon' => 'calendar',
|
||||
'link' => \IPS\Http\Url::internal( 'app=downloads&module=stats&controller=downloaders&form=1' )->setQueryString( $params ),
|
||||
'data' => array( 'ipsDialog' => '', 'ipsDialog-title' => \IPS\Member::loggedIn()->language()->addToStack('stats_date_range') )
|
||||
)
|
||||
);
|
||||
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate('stats')->downloadsTable( $select, $pagination, $members );
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('menu__downloads_stats_downloaders');
|
||||
}
|
||||
|
||||
@@ -27,6 +27,11 @@ class _downloads extends \IPS\Dispatcher\Controller
|
||||
* @brief Has been CSRF-protected
|
||||
*/
|
||||
public static $csrfProtected = TRUE;
|
||||
|
||||
/**
|
||||
* @brief Allow MySQL RW separation for efficiency
|
||||
*/
|
||||
public static $allowRWSeparation = TRUE;
|
||||
|
||||
/**
|
||||
* Execute
|
||||
|
||||
@@ -27,6 +27,11 @@ class _submitters extends \IPS\Dispatcher\Controller
|
||||
* @brief Has been CSRF-protected
|
||||
*/
|
||||
public static $csrfProtected = TRUE;
|
||||
|
||||
/**
|
||||
* @brief Allow MySQL RW separation for efficiency
|
||||
*/
|
||||
public static $allowRWSeparation = TRUE;
|
||||
|
||||
/**
|
||||
* @brief Number of results per page
|
||||
@@ -103,6 +108,16 @@ class _submitters extends \IPS\Dispatcher\Controller
|
||||
$total = 0;
|
||||
}
|
||||
|
||||
/* Add the date range button */
|
||||
\IPS\Output::i()->sidebar['actions'] = array(
|
||||
'settings' => array(
|
||||
'title' => 'stats_date_range',
|
||||
'icon' => 'calendar',
|
||||
'link' => \IPS\Http\Url::internal( 'app=downloads&module=stats&controller=submitters&form=1' )->setQueryString( $params ),
|
||||
'data' => array( 'ipsDialog' => '', 'ipsDialog-title' => \IPS\Member::loggedIn()->language()->addToStack('stats_date_range') )
|
||||
)
|
||||
);
|
||||
|
||||
if( $total > 0 )
|
||||
{
|
||||
$select = \IPS\Db::i()->select( 'file_submitter, count(*) as files', 'downloads_files', $where, 'files DESC', array( ( $page - 1 ) * static::PER_PAGE, static::PER_PAGE ), 'file_submitter' )->join( 'core_members', 'core_members.member_id=downloads_files.file_submitter' );
|
||||
@@ -127,15 +142,7 @@ class _submitters extends \IPS\Dispatcher\Controller
|
||||
static::PER_PAGE,
|
||||
FALSE
|
||||
);
|
||||
|
||||
\IPS\Output::i()->sidebar['actions'] = array(
|
||||
'settings' => array(
|
||||
'title' => 'stats_date_range',
|
||||
'icon' => 'calendar',
|
||||
'link' => \IPS\Http\Url::internal( 'app=downloads&module=stats&controller=submitters&form=1' )->setQueryString( $params ),
|
||||
'data' => array( 'ipsDialog' => '', 'ipsDialog-title' => \IPS\Member::loggedIn()->language()->addToStack('stats_date_range') )
|
||||
)
|
||||
);
|
||||
|
||||
\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()->title = \IPS\Member::loggedIn()->language()->addToStack('menu__downloads_stats_submitters');
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Top Downloads
|
||||
* @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 19 Apr 2021
|
||||
*/
|
||||
|
||||
namespace IPS\downloads\modules\admin\stats;
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* topdownloads
|
||||
*/
|
||||
class _topdownloads extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
/**
|
||||
* @brief Has been CSRF-protected
|
||||
*/
|
||||
public static $csrfProtected = TRUE;
|
||||
|
||||
/**
|
||||
* @brief Allow MySQL RW separation for efficiency
|
||||
*/
|
||||
public static $allowRWSeparation = TRUE;
|
||||
|
||||
/**
|
||||
* @brief Number of results per page
|
||||
*/
|
||||
const PER_PAGE = 25;
|
||||
|
||||
/**
|
||||
* Execute
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function execute()
|
||||
{
|
||||
\IPS\Dispatcher::i()->checkAcpPermission( 'topdownloads_manage' );
|
||||
parent::execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* Manage
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function manage()
|
||||
{
|
||||
$where = array();
|
||||
|
||||
if ( isset( \IPS\Request::i()->form ) )
|
||||
{
|
||||
$form = new \IPS\Helpers\Form( 'form', 'go' );
|
||||
|
||||
$default = array(
|
||||
'start' => \IPS\Request::i()->start ? \IPS\DateTime::ts( \IPS\Request::i()->start ) : NULL,
|
||||
'end' => \IPS\Request::i()->end ? \IPS\DateTime::ts( \IPS\Request::i()->end ) : NULL
|
||||
);
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\DateRange( 'stats_date_range', $default, FALSE, array( 'start' => array( 'max' => \IPS\DateTime::ts( time() )->setTime( 0, 0, 0 ), 'time' => FALSE ), 'end' => array( 'max' => \IPS\DateTime::ts( time() )->setTime( 23, 59, 59 ), 'time' => FALSE ) ) ) );
|
||||
|
||||
if ( !$values = $form->values() )
|
||||
{
|
||||
\IPS\Output::i()->output = $form;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Figure out start and end parameters for links */
|
||||
$params = array(
|
||||
'start' => !empty( $values['stats_date_range']['start'] ) ? $values['stats_date_range']['start']->getTimestamp() : \IPS\Request::i()->start,
|
||||
'end' => !empty( $values['stats_date_range']['end'] ) ? $values['stats_date_range']['end']->getTimestamp() : \IPS\Request::i()->end
|
||||
);
|
||||
|
||||
if ( $params['start'] )
|
||||
{
|
||||
$where[] = array( 'dtime>?', $params['start'] );
|
||||
}
|
||||
|
||||
if ( $params['end'] )
|
||||
{
|
||||
$where[] = array( 'dtime<?', $params['end'] );
|
||||
}
|
||||
|
||||
$page = isset( \IPS\Request::i()->page ) ? \intval( \IPS\Request::i()->page ) : 1;
|
||||
|
||||
if ( $page < 1 )
|
||||
{
|
||||
$page = 1;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
$total = \IPS\Db::i()->select( 'COUNT(DISTINCT(dfid))', 'downloads_downloads', $where )->first();
|
||||
}
|
||||
catch ( \UnderflowException $e )
|
||||
{
|
||||
$total = 0;
|
||||
}
|
||||
|
||||
/* Add date range selector */
|
||||
\IPS\Output::i()->sidebar['actions'] = array(
|
||||
'settings' => array(
|
||||
'title' => 'stats_date_range',
|
||||
'icon' => 'calendar',
|
||||
'link' => \IPS\Http\Url::internal( 'app=downloads&module=stats&controller=topdownloads&form=1' )->setQueryString( $params ),
|
||||
'data' => array( 'ipsDialog' => '', 'ipsDialog-title' => \IPS\Member::loggedIn()->language()->addToStack( 'stats_date_range' ) )
|
||||
)
|
||||
);
|
||||
|
||||
if ( $total > 0 )
|
||||
{
|
||||
$select = iterator_to_array( \IPS\Db::i()->select( 'dfid, count(*) as downloads', 'downloads_downloads', $where, 'downloads DESC', array( ( $page - 1 ) * static::PER_PAGE, static::PER_PAGE ), 'dfid' )->join( 'downloads_files', 'downloads_files.file_id=downloads_downloads.dfid' ) );
|
||||
$files = iterator_to_array( \IPS\Db::i()->select( '*', 'downloads_files', \IPS\Db::i()->in( 'file_id', array_column( $select, 'dfid' ) ) )->setKeyField( 'file_id' ) );
|
||||
$downloads = array();
|
||||
if ( \count( $select ) )
|
||||
{
|
||||
foreach ( $select as $row )
|
||||
{
|
||||
$file = \IPS\downloads\File::constructFromData( $files[ $row['dfid'] ] );
|
||||
$downloads[] = array(
|
||||
'dfid' => $row['dfid'],
|
||||
'downloads' => $row['downloads'],
|
||||
'file' => \IPS\Theme::i()->getTemplate( 'global', 'core', 'global' )->basicUrl( $file->url(), TRUE, $file->name )
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$pagination = \IPS\Theme::i()->getTemplate( 'global', 'core', 'global' )->pagination(
|
||||
\IPS\Http\Url::internal( 'app=downloads&module=stats&controller=topdownloads' )->setQueryString( $params ),
|
||||
ceil( $total / static::PER_PAGE ),
|
||||
$page,
|
||||
static::PER_PAGE,
|
||||
FALSE
|
||||
);
|
||||
|
||||
\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' )->topDownloadsTable( $downloads, $pagination );
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack( 'menu__downloads_stats_topdownloads' );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Return the no results message */
|
||||
\IPS\Output::i()->output .= \IPS\Theme::i()->getTemplate( 'global', 'core' )->block( \IPS\Member::loggedIn()->language()->addToStack( 'menu__downloads_stats_topdownloads' ), \IPS\Member::loggedIn()->language()->addToStack( 'no_results' ), FALSE, 'ipsPad', NULL, TRUE );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -100,7 +100,7 @@ class _submit extends \IPS\Dispatcher\Controller
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=downloads&module=downloads&controller=submit&_step=select_category', 'front', 'downloads_submit' ) );
|
||||
}
|
||||
|
||||
if( !$category->can('add') )
|
||||
if( !$category->can('add') OR !\IPS\Member::loggedIn()->group['idm_max_size'] )
|
||||
{
|
||||
\IPS\Output::i()->error( 'add_files_no_perm', '3D286/1', 403, '' );
|
||||
}
|
||||
@@ -177,7 +177,7 @@ class _submit extends \IPS\Dispatcher\Controller
|
||||
if ( $category->bitoptions['allowss'] )
|
||||
{
|
||||
$image = TRUE;
|
||||
if ( $category->maxdims )
|
||||
if ( $category->maxdims and $category->maxdims != '0x0' )
|
||||
{
|
||||
$maxDims = explode( 'x', $category->maxdims );
|
||||
$image = array( 'maxWidth' => $maxDims[0], 'maxHeight' => $maxDims[1] );
|
||||
@@ -495,10 +495,17 @@ class _submit extends \IPS\Dispatcher\Controller
|
||||
if ( $category->bitoptions['allowss'] )
|
||||
{
|
||||
$existing[ $key ] = iterator_to_array( new \IPS\File\Iterator( \IPS\Db::i()->select( '*', 'downloads_files_records', array( 'record_post_key=? AND record_type=?', md5( "{$data['postKey']}-{$key}" ), 'ssupload' ) )->setValueField( function( $row ) { return $row['record_no_watermark'] ?: $row['record_location']; } )->setKeyField( function( $row ) { return $row['record_no_watermark'] ?: $row['record_location']; } ), 'downloads_Screenshots' ) );
|
||||
|
||||
|
||||
$image = TRUE;
|
||||
if ( $category->maxdims and $category->maxdims != '0x0' )
|
||||
{
|
||||
$maxDims = explode( 'x', $category->maxdims );
|
||||
$image = array( 'maxWidth' => $maxDims[0], 'maxHeight' => $maxDims[1] );
|
||||
}
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Upload( "screenshots_{$key}", $existing[ $key ], ( $category->bitoptions['reqss'] and !\IPS\Member::loggedIn()->group['idm_linked_files'] ), array(
|
||||
'storageExtension' => 'downloads_Screenshots',
|
||||
'image' => $category->maxssdims ? explode( 'x', $category->maxssdims ) : TRUE,
|
||||
'image' => $image,
|
||||
'maxFileSize' => $category->maxss ? ( $category->maxss / 1024 ) : NULL,
|
||||
'multiple' => TRUE
|
||||
) ) );
|
||||
|
||||
@@ -148,7 +148,7 @@ class _view extends \IPS\Content\Controller
|
||||
'author' => array(
|
||||
'@type' => 'Person',
|
||||
'name' => \IPS\Member::load( $this->file->submitter )->name,
|
||||
'image' => \IPS\Member::load( $this->file->submitter )->get_photo()
|
||||
'image' => \IPS\Member::load( $this->file->submitter )->get_photo( TRUE, TRUE )
|
||||
),
|
||||
'interactionStatistic' => array(
|
||||
array(
|
||||
@@ -314,7 +314,7 @@ class _view extends \IPS\Content\Controller
|
||||
}
|
||||
|
||||
/* Have we accepted the terms? */
|
||||
if ( $downloadTerms = $this->file->container()->message('disclaimer') and \in_array( $this->file->container()->disclaimer_location, [ 'purchase', 'both'] ) and !isset( \IPS\Request::i()->confirm ) )
|
||||
if ( $downloadTerms = $this->file->container()->message('disclaimer') and \in_array( $this->file->container()->disclaimer_location, [ 'purchase', 'both' ] ) and !isset( \IPS\Request::i()->confirm ) )
|
||||
{
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'view' )->purchaseTerms( $this->file, $downloadTerms, $this->file->url('buy')->csrf()->setQueryString( 'confirm', 1 ) );
|
||||
return;
|
||||
@@ -401,15 +401,16 @@ class _view extends \IPS\Content\Controller
|
||||
*/
|
||||
protected function download()
|
||||
{
|
||||
\IPS\Output::i()->metaTags['robots'] = 'noindex';
|
||||
|
||||
/* No direct linking check */
|
||||
if ( \IPS\Settings::i()->idm_antileech )
|
||||
if ( \IPS\Settings::i()->idm_antileech AND !$this->file->requiresDownloadConfirmation() )
|
||||
{
|
||||
if ( !isset( \IPS\Request::i()->csrfKey ) )
|
||||
{
|
||||
\IPS\Output::i()->redirect( $this->file->url() );
|
||||
}
|
||||
|
||||
\IPS\Output::i()->metaTags['robots'] = 'noindex';
|
||||
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
}
|
||||
|
||||
@@ -453,7 +454,7 @@ class _view extends \IPS\Content\Controller
|
||||
$files = $this->file->files( isset( \IPS\Request::i()->version ) ? \IPS\Request::i()->version : NULL );
|
||||
|
||||
/* Have we accepted the terms? */
|
||||
if ( $downloadTerms = $category->message('disclaimer') and \in_array( $this->file->container()->disclaimer_location, [ 'download', 'both'] ) and !isset( \IPS\Request::i()->confirm ) )
|
||||
if ( $downloadTerms = $category->message('disclaimer') and \in_array( $category->disclaimer_location, [ 'download', 'both' ] ) and !isset( \IPS\Request::i()->confirm ) )
|
||||
{
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'view' )->download( $this->file, $downloadTerms, null, $confirmUrl, \count( $files ) > 1 );
|
||||
return;
|
||||
@@ -860,7 +861,7 @@ class _view extends \IPS\Content\Controller
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_submit.js', 'downloads', 'front' ) );
|
||||
|
||||
/* Permission check */
|
||||
if ( !$this->file->canEdit() OR $this->file->hasPendingVersion() )
|
||||
if ( !$this->file->canEdit() OR !$this->file->container()->can('add') OR $this->file->hasPendingVersion() )
|
||||
{
|
||||
\IPS\Output::i()->error( 'no_module_permission', '2D161/C', 403, '' );
|
||||
}
|
||||
@@ -903,7 +904,7 @@ class _view extends \IPS\Content\Controller
|
||||
{
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'file_version', $this->file->version, ( $category->version_numbers == 2 ) ? TRUE : FALSE, array( 'maxLength' => 32 ) ) );
|
||||
}
|
||||
$form->add( new \IPS\Helpers\Form\Editor( 'file_changelog', NULL, FALSE, array( 'app' => 'downloads', 'key' => 'Downloads', 'autoSaveKey' => "downloads-{$this->file->id}-changelog", 'allowAttachments' => FALSE ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\Editor( 'file_changelog', NULL, $category->require_changelog, array( 'app' => 'downloads', 'key' => 'Downloads', 'autoSaveKey' => "downloads-{$this->file->id}-changelog", 'allowAttachments' => FALSE ) ) );
|
||||
|
||||
$defaultFiles = iterator_to_array( $this->file->files( NULL, FALSE ) );
|
||||
if( !$category->multiple_files )
|
||||
@@ -952,9 +953,16 @@ class _view extends \IPS\Content\Controller
|
||||
$screenshots[ $this->file->_primary_screenshot ] = array( 'fileurl' => $screenshots[ $this->file->_primary_screenshot ], 'default' => true );
|
||||
}
|
||||
|
||||
$image = TRUE;
|
||||
if ( $category->maxdims and $category->maxdims != '0x0' )
|
||||
{
|
||||
$maxDims = explode( 'x', $category->maxdims );
|
||||
$image = array( 'maxWidth' => $maxDims[0], 'maxHeight' => $maxDims[1] );
|
||||
}
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Upload( 'screenshots', $screenshots, ( $category->bitoptions['reqss'] and !\IPS\Member::loggedIn()->group['idm_linked_files'] ), array(
|
||||
'storageExtension' => 'downloads_Screenshots',
|
||||
'image' => $category->maxssdims ? explode( 'x', $category->maxssdims ) : TRUE,
|
||||
'image' => $image,
|
||||
'maxFileSize' => $category->maxss ? ( $category->maxss / 1024 ) : NULL,
|
||||
'multiple' => TRUE,
|
||||
'retainDeleted' => TRUE,
|
||||
@@ -1023,6 +1031,7 @@ class _view extends \IPS\Content\Controller
|
||||
{
|
||||
$existingRecords = array_unique( iterator_to_array( \IPS\Db::i()->select( 'record_id, record_location', 'downloads_files_records', array( 'record_file_id=? AND record_type=? AND record_backup=?', $this->file->id, 'upload', 0 ) )->setKeyField('record_id')->setValueField('record_location') ) );
|
||||
$existingScreenshots = array_unique( iterator_to_array( \IPS\Db::i()->select( 'record_id, record_location', 'downloads_files_records', array( 'record_file_id=? AND record_type=? AND record_backup=?', $this->file->id, 'ssupload', 0 ) )->setKeyField('record_id')->setValueField('record_location') ) );
|
||||
$existingThumbnails = array_unique( iterator_to_array( \IPS\Db::i()->select( 'record_id, record_thumb', 'downloads_files_records', array( 'record_file_id=? AND record_type=? AND record_backup=?', $this->file->id, 'ssupload', 0 ) )->setKeyField('record_id')->setValueField('record_thumb') ) );
|
||||
$existingLinks = array_unique( iterator_to_array( \IPS\Db::i()->select( 'record_id, record_location', 'downloads_files_records', array( 'record_file_id=? AND record_type=? AND record_backup=?', $this->file->id, 'link', 0 ) )->setKeyField('record_id')->setValueField('record_location') ) );
|
||||
$existingScreenshotLinks = array_unique( iterator_to_array( \IPS\Db::i()->select( 'record_id, record_location', 'downloads_files_records', array( 'record_file_id=? AND record_type=? AND record_backup=?', $this->file->id, 'sslink', 0 ) )->setKeyField('record_id')->setValueField('record_location') ) );
|
||||
}
|
||||
@@ -1124,6 +1133,11 @@ class _view extends \IPS\Content\Controller
|
||||
), array( 'record_id=?', $_key ) );
|
||||
|
||||
unset( $existingScreenshots[ $key ] );
|
||||
|
||||
if( isset( $existingThumbnails[ $key ] ) )
|
||||
{
|
||||
unset( $existingThumbnails[ $key ] );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1202,7 +1216,7 @@ class _view extends \IPS\Content\Controller
|
||||
}
|
||||
}
|
||||
|
||||
$deletions = array( 'records' => array(), 'links' => array() );
|
||||
$deletions = array( 'records' => array(), 'links' => array(), 'thumbs' => array() );
|
||||
|
||||
/* Delete any we're not using anymore */
|
||||
foreach ( $existingRecords as $recordId => $url )
|
||||
@@ -1213,11 +1227,13 @@ class _view extends \IPS\Content\Controller
|
||||
{
|
||||
$deletions['records'][ $recordId ] = array( 'handler' => 'downloads_Screenshots', 'url' => $url );
|
||||
}
|
||||
foreach ( array_merge( $existingLinks, $existingScreenshotLinks ) as $id => $url )
|
||||
foreach ( ( $existingLinks + $existingScreenshotLinks ) as $id => $url )
|
||||
{
|
||||
$deletions['links'][ $id ] = $id;
|
||||
}
|
||||
|
||||
$deletions['thumbs'] = $existingThumbnails;
|
||||
|
||||
if( $requireApproval )
|
||||
{
|
||||
$fileObj->record_deletions = $deletions;
|
||||
@@ -1229,6 +1245,15 @@ class _view extends \IPS\Content\Controller
|
||||
});
|
||||
$fileObj->deleteRecords( $deletions['links'] );
|
||||
|
||||
foreach( $deletions['thumbs'] as $url )
|
||||
{
|
||||
try
|
||||
{
|
||||
\IPS\File::get( 'downloads_Screenshots', $url )->delete();
|
||||
}
|
||||
catch( \Exception $e ){}
|
||||
}
|
||||
|
||||
/* Set the new details */
|
||||
$fileObj->version = ( isset( $values['file_version'] ) ) ? $values['file_version'] : NULL;
|
||||
$fileObj->changelog = $values['file_changelog'];
|
||||
|
||||
@@ -30,7 +30,7 @@ class _Upgrade
|
||||
*/
|
||||
public function step1()
|
||||
{
|
||||
\IPS\Db::i()->query( "DELETE " . \IPS\Db::i()->prefix . "downloads_files_notify FROM " . \IPS\Db::i()->prefix . "downloads_files_notify LEFT JOIN " . \IPS\Db::i()->prefix . "downloads_files ON (" . \IPS\Db::i()->prefix . "downloads_files.file_id=" . \IPS\Db::i()->prefix . "downloads_files_notify.notify_file_id AND " . \IPS\Db::i()->prefix . "downloads_files.file_submitter=" . \IPS\Db::i()->prefix . "downloads_files_notify.notify_member_id) WHERE " . \IPS\Db::i()->prefix . "downloads_files.file_id IS NOT NULL" );
|
||||
\IPS\Db::i()->query( "DELETE `" . \IPS\Db::i()->prefix . "downloads_files_notify` FROM `" . \IPS\Db::i()->prefix . "downloads_files_notify` LEFT JOIN `" . \IPS\Db::i()->prefix . "downloads_files` ON (`" . \IPS\Db::i()->prefix . "downloads_files`.file_id=`" . \IPS\Db::i()->prefix . "downloads_files_notify`.notify_file_id AND `" . \IPS\Db::i()->prefix . "downloads_files`.file_submitter=`" . \IPS\Db::i()->prefix . "downloads_files_notify`.notify_member_id) WHERE `" . \IPS\Db::i()->prefix . "downloads_files`.file_id IS NOT NULL" );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105101,
|
||||
"name": "4.5.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": 105102,
|
||||
"name": "4.5.1 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/view\/view"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105103,
|
||||
"name": "4.5.1 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": 105104,
|
||||
"name": "4.5.1 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": 105105,
|
||||
"name": "4.5.1 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": 105106,
|
||||
"name": "4.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": 105107,
|
||||
"name": "4.5.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": 105108,
|
||||
"name": "4.5.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": 105109,
|
||||
"name": "4.5.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": 105110,
|
||||
"name": "4.5.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": 105111,
|
||||
"name": "4.5.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": 105112,
|
||||
"name": "4.5.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": 105113,
|
||||
"name": "4.5.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": 105114,
|
||||
"name": "4.5.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": 105115,
|
||||
"name": "4.5.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": 105116,
|
||||
"name": "4.5.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/view\/downloadButton"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105117,
|
||||
"name": "4.5.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": 105118,
|
||||
"name": "4.5.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": 105119,
|
||||
"name": "4.5.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": 105120,
|
||||
"name": "4.5.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": 105121,
|
||||
"name": "4.5.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": 105122,
|
||||
"name": "4.5.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": 105123,
|
||||
"name": "4.5.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": 105124,
|
||||
"name": "4.5.4.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": 105125,
|
||||
"name": "4.5.4.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": 105126,
|
||||
"name": "4.5.4.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": 105127,
|
||||
"name": "4.5.4.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": 105128,
|
||||
"name": "4.5.4.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": 105129,
|
||||
"name": "4.5.4.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": 105130,
|
||||
"name": "4.5.4.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,8 @@
|
||||
{
|
||||
"added": [
|
||||
"app=downloads&module=downloads&controller=categories&do=form&searchResult=form_1_allow_anonymous",
|
||||
"app=downloads&module=stats&controller=topdownloads"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106100,
|
||||
"name": "4.6.0 Beta 1",
|
||||
"steps": {
|
||||
"queries": true,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": true,
|
||||
"emailTemplates": true,
|
||||
"hooks": true,
|
||||
"acpSearchKeywords": true,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"added": [],
|
||||
"edited": [
|
||||
"digests__comment",
|
||||
"digests__item"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"added": [
|
||||
"apiForum"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"downloads\/front\/controllers\/submit\/ips.submit.main.js",
|
||||
"downloads\/front\/templates\/ips.templates.submit.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"__defart_downloads_file_comment_plural",
|
||||
"__defart_downloads_file_plural",
|
||||
"__defart_downloads_file_review_plural",
|
||||
"crequire_changelog",
|
||||
"menu__downloads_stats_topdownloads",
|
||||
"r__topdownloads_manage",
|
||||
"notification__new_file_version_title"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": [
|
||||
"downloads_single_upload"
|
||||
]
|
||||
},
|
||||
"js": {
|
||||
"added": [
|
||||
"makePrimary"
|
||||
],
|
||||
"edited": [
|
||||
"makePrimaryScreenshot"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
{
|
||||
"1": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"downloads_categories",
|
||||
{
|
||||
"name": "callow_anonymous",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"2": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"downloads_files",
|
||||
{
|
||||
"name": "file_author_name",
|
||||
"type": "VARCHAR",
|
||||
"length": 255,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"downloads_files",
|
||||
{
|
||||
"name": "file_is_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"4": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"downloads_comments",
|
||||
{
|
||||
"name": "comment_is_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"5": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"downloads_categories",
|
||||
{
|
||||
"name": "crequire_changelog",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "Is changelog required?",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"6": {
|
||||
"method": "changeColumn",
|
||||
"params": [
|
||||
"downloads_cfields",
|
||||
"cf_max_input",
|
||||
{
|
||||
"name": "cf_max_input",
|
||||
"type": "MEDIUMINT",
|
||||
"length": 6,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"7": {
|
||||
"method": "changeColumn",
|
||||
"params": [
|
||||
"downloads_files_pending",
|
||||
"pending_form_values",
|
||||
{
|
||||
"name": "pending_form_values",
|
||||
"type": "MEDIUMTEXT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [
|
||||
"admin\/stats\/topDownloadsTable"
|
||||
],
|
||||
"edited": [
|
||||
"front\/browse\/category",
|
||||
"front\/browse\/categoryRow",
|
||||
"front\/browse\/featuredFile",
|
||||
"front\/browse\/indexBlock",
|
||||
"front\/browse\/rows",
|
||||
"front\/global\/embedFile",
|
||||
"front\/nexus\/filePurchaseInfo",
|
||||
"front\/submit\/submissionForm",
|
||||
"front\/submit\/topic",
|
||||
"front\/view\/changeLog",
|
||||
"front\/view\/download",
|
||||
"front\/view\/downloadButton",
|
||||
"front\/view\/logTable",
|
||||
"front\/view\/multipleFiles",
|
||||
"front\/view\/notifyBlurb",
|
||||
"front\/view\/pendingView",
|
||||
"front\/view\/view",
|
||||
"front\/widgets\/downloadsCommentFeed",
|
||||
"front\/widgets\/downloadsReviewFeed",
|
||||
"front\/widgets\/downloadStats",
|
||||
"front\/widgets\/fileRow"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/downloads.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106101,
|
||||
"name": "4.6.0 Beta 1.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": 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": [
|
||||
"app=downloads&module=downloads&controller=categories&searchResult=form_1_allow_anonymous"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": [
|
||||
"app=downloads&module=downloads&controller=categories&do=form&searchResult=form_1_allow_anonymous"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106103,
|
||||
"name": "4.6.0 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": true,
|
||||
"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": 106104,
|
||||
"name": "4.6.0 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": 106105,
|
||||
"name": "4.6.0 Beta 3.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": 106106,
|
||||
"name": "4.6.0 Beta 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": 106107,
|
||||
"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
|
||||
}
|
||||
@@ -272,8 +272,10 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
|
||||
) ) );
|
||||
if ( !empty( $customFields ) )
|
||||
{
|
||||
$form->add( new \IPS\Helpers\Form\Select( 'ccfields', $this->id ? explode( ',', $this->_data['cfields'] ) : array(), FALSE, array( 'options' => $customFields, 'multiple' => TRUE ), NULL, NULL, NULL, 'ccfields' ) );
|
||||
$form->add( new \IPS\Helpers\Form\CheckboxSet( 'ccfields', $this->id ? explode( ',', $this->_data['cfields'] ) : array(), FALSE, array( 'options' => $customFields, 'multiple' => TRUE ), NULL, NULL, NULL, 'ccfields' ) );
|
||||
}
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'allow_anonymous', $this->id ? $this->allow_anonymous : FALSE, FALSE, array() ) );
|
||||
|
||||
$form->addHeader( 'category_comments_and_reviews' );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'cbitoptions_comments', $this->id ? $this->bitoptions['comments'] : TRUE, FALSE, array( 'togglesOn' => array( 'cbitoptions_comment_moderation' ) ), NULL, NULL, NULL, 'cbitoptions_comments' ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'cbitoptions_comment_moderation', $this->bitoptions['comment_moderation'], FALSE, array(), NULL, NULL, NULL, 'cbitoptions_comment_moderation' ) );
|
||||
@@ -305,9 +307,10 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
|
||||
$form->add( new \IPS\Helpers\Form\Translatable( 'csubmissionterms', $this->submissionterms, FALSE, array( 'app' => 'downloads', 'key' => ( $this->id ? "downloads_category_{$this->id}_subterms" : NULL ), 'editor' => array( 'app' => 'downloads', 'key' => 'Categories', 'autoSaveKey' => ( $this->id ? "downloads-cat-{$this->id}-subt" : "downloads-new-cat-subt" ), 'attachIds' => $this->id ? array( $this->id, NULL, 'subt' ) : NULL, 'minimize' => 'csubmissionterms_placeholder' ) ) ) );
|
||||
$form->addHeader( 'category_versioning' );
|
||||
$form->add( new \IPS\Helpers\Form\Radio( 'cversion_numbers', $this->id ? $this->version_numbers : 1, TRUE, array( 'options' => array( 0 => 'version_numbers_disabled', 1 => 'version_numbers_enabled', 2 => 'version_numbers_required' ) ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'cversioning_on', $this->versioning !== 0, FALSE, array( 'togglesOn' => array( 'cversioning' ) ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'cversioning_on', $this->versioning !== 0, FALSE, array( 'togglesOn' => array( 'cversioning', 'crequire_changelog' ) ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\Number( 'cversioning', $this->versioning === NULL ? -1 : $this->versioning, FALSE, array( 'unlimited' => -1 ), NULL, NULL, NULL, 'cversioning' ) );
|
||||
$form->addHeader( 'category_moderation' );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'crequire_changelog', $this->require_changelog, FALSE, array( ), NULL, NULL, NULL, 'crequire_changelog' ) );
|
||||
$form->addHeader( 'category_moderation' );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'cbitoptions_moderation', $this->bitoptions['moderation'], FALSE, array( 'togglesOn' => array( 'cbitoptions_moderation_edits' ) ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'cbitoptions_moderation_edits', $this->bitoptions['moderation_edits'], FALSE, array(), NULL, NULL, NULL, 'cbitoptions_moderation_edits' ) );
|
||||
$form->addHeader( 'category_screenshots' );
|
||||
@@ -682,14 +685,15 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
|
||||
{
|
||||
return array( \IPS\Theme::i()->getTemplate( 'browse', 'downloads' ), 'categoryRow' );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get last comment time
|
||||
*
|
||||
* @note This should return the last comment time for this node only, not for children nodes
|
||||
* @param \IPS\Member|NULL $member MemberObject
|
||||
* @return \IPS\DateTime|NULL
|
||||
*/
|
||||
public function getLastCommentTime()
|
||||
public function getLastCommentTime( \IPS\Member $member = NULL )
|
||||
{
|
||||
return $this->last_file_date ? \IPS\DateTime::ts( $this->last_file_date ) : NULL;
|
||||
}
|
||||
@@ -755,6 +759,16 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* [Node] Get the fully qualified node type (mostly for Pages because Pages is Pages)
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function fullyQualifiedType()
|
||||
{
|
||||
return \IPS\Member::loggedIn()->language()->addToStack('__app_downloads') . ' ' . \IPS\Member::loggedIn()->language()->addToStack( static::$nodeTitle . '_sg' );
|
||||
}
|
||||
|
||||
/* !Clubs */
|
||||
|
||||
/**
|
||||
|
||||
@@ -109,6 +109,10 @@ class _Field extends \IPS\CustomField
|
||||
{
|
||||
parent::form( $form );
|
||||
|
||||
|
||||
unset( $form->elements['']['pf_search_type'] );
|
||||
\IPS\Member::loggedIn()->language()->words['pfield_displayoptions'] = \IPS\Member::loggedIn()->language()->addToStack('field_displayoptions');
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Radio( 'downloads_field_location', $this->id ? $this->display_location : 'below', FALSE, array( 'options' => array( 'sidebar' => 'idm_cfield_sidebar', 'below' => 'idm_cfield_below', 'tab' => 'idm_cfield_tab' ) ), NULL, NULL, NULL, 'idm_field_location' ) );
|
||||
|
||||
if ( \IPS\Application::appIsEnabled( 'nexus' ) and \IPS\Settings::i()->idm_nexus_on )
|
||||
@@ -141,13 +145,12 @@ class _Field extends \IPS\CustomField
|
||||
unset( $values['cf_topic'] );
|
||||
}
|
||||
|
||||
$values['search_type'] = ( $values['pf_search_type'] === NULL ) ? '' : $values['pf_search_type'];
|
||||
$values['allow_attachments'] = $values['pf_allow_attachments'];
|
||||
unset( $values['pf_search_type'] );
|
||||
unset( $values['pf_allow_attachments'] );
|
||||
|
||||
$values['display_location'] = $values['downloads_field_location'];
|
||||
$values['paid_field'] = $values['downloads_field_paid'];
|
||||
$values['paid_field'] = ( isset( $values['downloads_field_paid'] ) ) ? $values['downloads_field_paid'] : 0;
|
||||
unset( $values['downloads_field_location'], $values['downloads_field_paid'] );
|
||||
|
||||
return parent::formatFormValues( $values );
|
||||
|
||||
@@ -21,7 +21,7 @@ if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
/**
|
||||
* File Comment Model
|
||||
*/
|
||||
class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory, \IPS\Content\Hideable, \IPS\Content\Searchable, \IPS\Content\Embeddable, \IPS\Content\Shareable
|
||||
class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory, \IPS\Content\Hideable, \IPS\Content\Searchable, \IPS\Content\Embeddable, \IPS\Content\Shareable, \IPS\Content\Anonymous
|
||||
{
|
||||
use \IPS\Content\Reactable, \IPS\Content\Reportable;
|
||||
|
||||
@@ -58,7 +58,8 @@ class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory,
|
||||
'edit_time' => 'edit_time',
|
||||
'edit_member_name' => 'edit_name',
|
||||
'edit_show' => 'append_edit',
|
||||
'approved' => 'open'
|
||||
'approved' => 'open',
|
||||
'is_anon' => 'is_anon'
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -104,7 +105,7 @@ class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory,
|
||||
* @param string $view 'expanded' or 'condensed'
|
||||
* @return callable
|
||||
*/
|
||||
public static function searchResultSnippet( array $indexData, array $authorData, array $itemData, array $containerData = NULL, array $reputationData, $reviewRating, $view )
|
||||
public static function searchResultSnippet( array $indexData, array $authorData, array $itemData, ?array $containerData, array $reputationData, $reviewRating, $view )
|
||||
{
|
||||
$screenshot = NULL;
|
||||
if ( isset( $itemData['extra'] ) )
|
||||
|
||||
@@ -32,7 +32,8 @@ class _File extends \IPS\Content\Item implements
|
||||
\IPS\Content\Searchable,
|
||||
\IPS\Content\Embeddable,
|
||||
\IPS\Content\MetaData,
|
||||
\IPS\Content\EditHistory
|
||||
\IPS\Content\EditHistory,
|
||||
\IPS\Content\Anonymous
|
||||
{
|
||||
use \IPS\Content\Reactable, \IPS\Content\Reportable, \IPS\Content\ItemTopic
|
||||
{
|
||||
@@ -85,6 +86,7 @@ class _File extends \IPS\Content\Item implements
|
||||
public static $databaseColumnMap = array(
|
||||
'container' => 'cat',
|
||||
'author' => 'submitter',
|
||||
'author_name' => 'author_name',
|
||||
'views' => 'views',
|
||||
'title' => 'name',
|
||||
'content' => 'desc',
|
||||
@@ -111,6 +113,7 @@ class _File extends \IPS\Content\Item implements
|
||||
'edit_member_name' => 'edit_name',
|
||||
'edit_show' => 'append_edit',
|
||||
'edit_reason' => 'edit_reason',
|
||||
'is_anon' => 'is_anon'
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -781,7 +784,7 @@ class _File extends \IPS\Content\Item implements
|
||||
$this->_primaryScreenshotThumb = NULL;
|
||||
return $this->_primaryScreenshotThumb;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Custom Field Cache
|
||||
*/
|
||||
@@ -1117,6 +1120,48 @@ class _File extends \IPS\Content\Item implements
|
||||
|
||||
return $this->canDownload;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Requires download confirmation? Used to determine if CSRF key should be included in download URL.
|
||||
*/
|
||||
protected $requiresDownloadConfirmation = NULL;
|
||||
|
||||
/**
|
||||
* Can the member download this file?
|
||||
*
|
||||
* @param \IPS\Member|NULL $member The member to check or NULL for currently logged in member
|
||||
* @return bool
|
||||
*/
|
||||
public function requiresDownloadConfirmation( \IPS\Member $member = NULL )
|
||||
{
|
||||
$member = $member ?: \IPS\Member::loggedIn();
|
||||
|
||||
if ( $this->requiresDownloadConfirmation === NULL )
|
||||
{
|
||||
$this->requiresDownloadConfirmation = FALSE;
|
||||
|
||||
$category = $this->container();
|
||||
|
||||
if( $category->message('disclaimer') and \in_array( $category->disclaimer_location, [ 'download', 'both' ] ) )
|
||||
{
|
||||
$this->requiresDownloadConfirmation = TRUE;
|
||||
}
|
||||
|
||||
$files = $this->files( isset( \IPS\Request::i()->version ) ? \IPS\Request::i()->version : NULL );
|
||||
|
||||
if( \count( $files ) > 1 AND !isset( \IPS\Request::i()->r ) )
|
||||
{
|
||||
$this->requiresDownloadConfirmation = TRUE;
|
||||
}
|
||||
|
||||
if( $member->group['idm_wait_period'] AND ( !$this->isPaid() OR $member->group['idm_paid_restrictions'] ) )
|
||||
{
|
||||
$this->requiresDownloadConfirmation = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->requiresDownloadConfirmation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can the member buy this file?
|
||||
@@ -1408,19 +1453,6 @@ class _File extends \IPS\Content\Item implements
|
||||
return $member->group['idm_view_downloads'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Build form to edit
|
||||
*
|
||||
* @return \IPS\Helpers\Form
|
||||
*/
|
||||
public function buildEditForm()
|
||||
{
|
||||
$form = parent::buildEditForm();
|
||||
$form->class = 'ipsPadding ipsForm_vertical';
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get elements for add/edit form
|
||||
*
|
||||
@@ -1779,6 +1811,11 @@ class _File extends \IPS\Content\Item implements
|
||||
{
|
||||
$topic->logDelete( $member );
|
||||
}
|
||||
|
||||
if ( $this->hasPendingVersion() )
|
||||
{
|
||||
\IPS\downloads\File\PendingVersion::load( $this->id, 'pending_file_id' )->delete();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1841,7 +1878,13 @@ class _File extends \IPS\Content\Item implements
|
||||
\IPS\Db::i()->delete( 'downloads_filebackup', array( 'b_fileid=?', $this->id ) );
|
||||
\IPS\Db::i()->delete( 'downloads_files_records', array( 'record_file_id=?', $this->id ) );
|
||||
\IPS\Db::i()->delete( 'downloads_files_notify', array( 'notify_file_id=?', $this->id ) );
|
||||
|
||||
|
||||
/* Delete pending version */
|
||||
if( $this->hasPendingVersion() )
|
||||
{
|
||||
\IPS\downloads\File\PendingVersion::load($this->id, 'pending_file_id' )->delete();
|
||||
}
|
||||
|
||||
/* Update Category */
|
||||
$this->container()->setLastFile();
|
||||
$this->container()->save();
|
||||
@@ -1854,7 +1897,7 @@ class _File extends \IPS\Content\Item implements
|
||||
* @param string $url Record location
|
||||
* @param string $handler File storage handler key
|
||||
*/
|
||||
public function deleteRecords( $ids, string $url=NULL, string $handler=NULL ): void
|
||||
public function deleteRecords( $ids, string $url=NULL, string $handler=NULL )
|
||||
{
|
||||
if( $ids AND $handler AND $url )
|
||||
{
|
||||
@@ -1879,13 +1922,13 @@ class _File extends \IPS\Content\Item implements
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* URL Blacklist Check
|
||||
*
|
||||
* @param array $val URLs to check
|
||||
* @return void
|
||||
* @throws \DomainException
|
||||
*/
|
||||
/**
|
||||
* URL Blacklist Check
|
||||
*
|
||||
* @param array $val URLs to check
|
||||
* @return void
|
||||
* @throws \DomainException
|
||||
*/
|
||||
public static function blacklistCheck( $val )
|
||||
{
|
||||
if ( \is_array( $val ) )
|
||||
@@ -2295,6 +2338,7 @@ class _File extends \IPS\Content\Item implements
|
||||
{
|
||||
$this->sendUpdateNotifications();
|
||||
}
|
||||
$this->sendAuthorApprovalNotification();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2368,7 +2412,7 @@ class _File extends \IPS\Content\Item implements
|
||||
* @param string $view 'expanded' or 'condensed'
|
||||
* @return callable
|
||||
*/
|
||||
public static function searchResultSnippet( array $indexData, array $authorData, array $itemData, array $containerData = NULL, array $reputationData, $reviewRating, $view )
|
||||
public static function searchResultSnippet( array $indexData, array $authorData, array $itemData, ?array $containerData, array $reputationData, $reviewRating, $view )
|
||||
{
|
||||
$screenshot = NULL;
|
||||
if ( isset( $itemData['extra'] ) )
|
||||
@@ -2466,7 +2510,7 @@ class _File extends \IPS\Content\Item implements
|
||||
'canDownload' => $authorizedMember ? (bool) $this->canDownload( $authorizedMember ) : NULL,
|
||||
'canBuy' => $authorizedMember ? (bool) $this->canBuy( $authorizedMember ) : NULL,
|
||||
'canReview' => (bool) $authorizedMember ? ( $this->canReview( $authorizedMember ) AND !$this->hasReviewed( $authorizedMember ) ) : NULL,
|
||||
'rating' => $this->rating,
|
||||
'rating' => $this->averageReviewRating(),
|
||||
'purchases' => $this->purchaseCount(),
|
||||
'renewalTerm' => $this->isPaid() ? $this->renewalTerm() : NULL,
|
||||
'hasPendingVersion' => ( !$authorizedMember OR $this->canEdit( $authorizedMember ) ) ? $this->hasPendingVersion() : NULL
|
||||
@@ -2628,8 +2672,34 @@ class _File extends \IPS\Content\Item implements
|
||||
* @param \IPS\Helpers\Form $form
|
||||
* @return void
|
||||
*/
|
||||
public function newVersionFormElements( \IPS\Helpers\Form &$form ): void
|
||||
public function newVersionFormElements( \IPS\Helpers\Form &$form )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Do Moderator Action
|
||||
*
|
||||
* @param string $action The action
|
||||
* @param \IPS\Member|NULL $member The member doing the action (NULL for currently logged in member)
|
||||
* @param string|NULL $reason Reason (for hides)
|
||||
* @param bool $immediately Delete immediately
|
||||
* @return void
|
||||
* @throws \OutOfRangeException|\InvalidArgumentException|\RuntimeException
|
||||
*/
|
||||
public function modAction( $action, \IPS\Member $member = NULL, $reason = NULL, $immediately = FALSE )
|
||||
{
|
||||
if ( $action == 'delete' )
|
||||
{
|
||||
/* Delete pending version */
|
||||
if( $this->hasPendingVersion() )
|
||||
{
|
||||
\IPS\downloads\File\PendingVersion::load($this->id, 'pending_file_id' )->delete();
|
||||
$this->_pendingVersion = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return parent::modAction( $action, $member, $reason, $immediately );
|
||||
}
|
||||
}
|
||||
@@ -193,7 +193,7 @@ class _PendingVersion extends \IPS\Content\Item implements \IPS\Content\Hideable
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function saveVersion(): void
|
||||
public function saveVersion()
|
||||
{
|
||||
$this->save_version = 1;
|
||||
}
|
||||
@@ -203,8 +203,26 @@ class _PendingVersion extends \IPS\Content\Item implements \IPS\Content\Hideable
|
||||
*
|
||||
* @param array $values
|
||||
*/
|
||||
public function set_form_values( array $values ): void
|
||||
public function set_form_values( array $values )
|
||||
{
|
||||
foreach( $values as $k => $v )
|
||||
{
|
||||
if( $v instanceof \IPS\File )
|
||||
{
|
||||
$values[ $k ] = (string) $v;
|
||||
}
|
||||
elseif( \is_array( $v ) )
|
||||
{
|
||||
foreach( $v as $_key => $_value )
|
||||
{
|
||||
if( $_value instanceof \IPS\File )
|
||||
{
|
||||
$values[ $k ][ $_key ] = (string) $_value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->_formValues = $values;
|
||||
$this->_data['form_values'] = json_encode( $values );
|
||||
}
|
||||
@@ -214,7 +232,7 @@ class _PendingVersion extends \IPS\Content\Item implements \IPS\Content\Hideable
|
||||
*
|
||||
* @param array $ids
|
||||
*/
|
||||
public function set_record_deletions( array $ids ): void
|
||||
public function set_record_deletions( array $ids )
|
||||
{
|
||||
$this->_data['record_deletions'] = json_encode( $ids );
|
||||
}
|
||||
@@ -224,7 +242,7 @@ class _PendingVersion extends \IPS\Content\Item implements \IPS\Content\Hideable
|
||||
*
|
||||
* @param $value New date
|
||||
*/
|
||||
public function set_updated( $value ): void
|
||||
public function set_updated( $value )
|
||||
{
|
||||
$this->date = $value;
|
||||
}
|
||||
@@ -284,7 +302,16 @@ class _PendingVersion extends \IPS\Content\Item implements \IPS\Content\Hideable
|
||||
{
|
||||
case 'upload':
|
||||
case 'ssupload':
|
||||
$this->file()->deleteRecords( $record['record_id'], $record['record_location'], ( $record['record_location'] == 'ssupload' ) ? 'downloads_Screenshots' : 'downloads_Files' );
|
||||
$this->file()->deleteRecords( $record['record_id'], $record['record_location'], ( $record['record_type'] == 'ssupload' ) ? 'downloads_Screenshots' : 'downloads_Files' );
|
||||
|
||||
if( $record['record_type'] == 'ssupload' AND !empty( $record['record_thumb'] ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
\IPS\File::get( 'downloads_Screenshots', $record['record_thumb'] )->delete();
|
||||
}
|
||||
catch( \Exception $e ){}
|
||||
}
|
||||
break;
|
||||
case 'link':
|
||||
case 'sslink':
|
||||
@@ -336,6 +363,15 @@ class _PendingVersion extends \IPS\Content\Item implements \IPS\Content\Hideable
|
||||
});
|
||||
$file->deleteRecords( $deletions['links'] );
|
||||
|
||||
foreach( $deletions['thumbs'] as $url )
|
||||
{
|
||||
try
|
||||
{
|
||||
\IPS\File::get( 'downloads_Screenshots', $url )->delete();
|
||||
}
|
||||
catch( \Exception $e ){}
|
||||
}
|
||||
|
||||
$file->size = \floatval( \IPS\Db::i()->select( 'SUM(record_size)', 'downloads_files_records', array( 'record_file_id=? AND record_type=? AND record_backup=0', $file->id, 'upload' ), NULL, NULL, NULL, NULL, \IPS\Db::SELECT_FROM_WRITE_SERVER )->first() );
|
||||
|
||||
/* Work out the new primary screenshot */
|
||||
@@ -366,7 +402,7 @@ class _PendingVersion extends \IPS\Content\Item implements \IPS\Content\Hideable
|
||||
/* Send notifications */
|
||||
if ( $file->open )
|
||||
{
|
||||
$file->sendUpdateNotifications();
|
||||
$file->sendApprovedNotification();
|
||||
}
|
||||
|
||||
$file->processAfterNewVersion( $formValues );
|
||||
|
||||
@@ -112,7 +112,7 @@ class _Review extends \IPS\Content\Review implements \IPS\Content\EditHistory, \
|
||||
* @param string $view 'expanded' or 'condensed'
|
||||
* @return callable
|
||||
*/
|
||||
public static function searchResultSnippet( array $indexData, array $authorData, array $itemData, array $containerData = NULL, array $reputationData, $reviewRating, $view )
|
||||
public static function searchResultSnippet( array $indexData, array $authorData, array $itemData, ?array $containerData, array $reputationData, $reviewRating, $view )
|
||||
{
|
||||
return \IPS\downloads\File\Comment::searchResultSnippet( $indexData, $authorData, $itemData, $containerData, $reputationData, $reviewRating, $view );
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user