Version 4.7.8
This commit is contained in:
1 parent
7b7404e741
commit
fd22d99e69
688 files changed
+19814
-10890
No files matched your search
@@ -155,4 +155,14 @@ class _Application extends \IPS\Application
|
||||
return array( 'idm_watermarkpath' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of all existing webhooks and their payload in this app.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getWebhooks(): array
|
||||
{
|
||||
return array_merge( parent::getWebhooks(), [ 'downloads_new_version' => \IPS\downloads\File::class ] );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -33,6 +33,7 @@ class _files extends \IPS\Content\Api\ItemController
|
||||
* Get list of files
|
||||
*
|
||||
* @note For requests using an OAuth Access Token for a particular member, only files the authorized user can view will be included
|
||||
* @apiparam string ids Comma-delimited list of file IDs
|
||||
* @apiparam string categories Comma-delimited list of category IDs
|
||||
* @apiparam string authors Comma-delimited list of member IDs - if provided, only files started by those members are returned
|
||||
* @apiparam int locked If 1, only files which are locked are returned, if 0 only unlocked
|
||||
@@ -859,7 +860,7 @@ class _files extends \IPS\Content\Api\ItemController
|
||||
}
|
||||
else
|
||||
{
|
||||
$price = new \IPS\nexus\Money( $cost, $currency );
|
||||
$price = new \IPS\nexus\Money( $costs, $currency );
|
||||
}
|
||||
|
||||
/* Create the item */
|
||||
|
||||
@@ -66,14 +66,6 @@
|
||||
"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",
|
||||
@@ -215,6 +207,14 @@
|
||||
"revisions"
|
||||
]
|
||||
},
|
||||
"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&searchResult=form_2_cbitoptions_moderation": {
|
||||
"lang_key": "cbitoptions_moderation",
|
||||
"restriction": "categories_manage",
|
||||
@@ -685,6 +685,13 @@
|
||||
"prevent direct linking"
|
||||
]
|
||||
},
|
||||
"app=downloads&module=downloads&controller=settings&searchResult=form_idm_gridview": {
|
||||
"lang_key": "idm_gridview",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"grid"
|
||||
]
|
||||
},
|
||||
"app=downloads&module=downloads&controller=settings&searchResult=form_idm_link_blacklist": {
|
||||
"lang_key": "idm_link_blacklist",
|
||||
"restriction": "settings_manage",
|
||||
|
||||
@@ -6,15 +6,17 @@
|
||||
<task frequency="P0Y0M1DT0H0M0S">tempFileCleanup</task>
|
||||
<task frequency="P0Y0M1DT0H0M0S">logCleanup</task>
|
||||
<setting key="idm_antileech"><![CDATA[{"key":"idm_antileech","default":"1","report":"full"}]]></setting>
|
||||
<setting key="idm_default_view"><![CDATA[{"key":"idm_default_view","default":"table","report":"bool"}]]></setting>
|
||||
<setting key="idm_default_view_choose"><![CDATA[{"key":"idm_default_view_choose","default":"1","report":"bool"}]]></setting>
|
||||
<setting key="idm_featured_count"><![CDATA[{"key":"idm_featured_count","default":"4","report":"full"}]]></setting>
|
||||
<setting key="idm_highest_rated_categories"><![CDATA[{"key":"idm_highest_rated_categories","default":"0","report":"bool"}]]></setting>
|
||||
<setting key="idm_highest_rated_categories"><![CDATA[{"key":"idm_highest_rated_categories","default":"","report":"bool"}]]></setting>
|
||||
<setting key="idm_link_blacklist"><![CDATA[{"key":"idm_link_blacklist","default":"","report":"bool"}]]></setting>
|
||||
<setting key="idm_newest_categories"><![CDATA[{"key":"idm_newest_categories","default":"0","report":"bool"}]]></setting>
|
||||
<setting key="idm_newest_categories"><![CDATA[{"key":"idm_newest_categories","default":"","report":"bool"}]]></setting>
|
||||
<setting key="idm_rss"><![CDATA[{"key":"idm_rss","default":"1","report":"full"}]]></setting>
|
||||
<setting key="idm_show_featured"><![CDATA[{"key":"idm_show_featured","default":"1","report":"full"}]]></setting>
|
||||
<setting key="idm_show_highest_rated"><![CDATA[{"key":"idm_show_highest_rated","default":"1","report":"full"}]]></setting>
|
||||
<setting key="idm_show_most_downloaded"><![CDATA[{"key":"idm_show_most_downloaded","default":"1","report":"full"}]]></setting>
|
||||
<setting key="idm_show_most_downloaded_categories"><![CDATA[{"key":"idm_show_most_downloaded_categories","default":"0","report":"bool"}]]></setting>
|
||||
<setting key="idm_show_most_downloaded_categories"><![CDATA[{"key":"idm_show_most_downloaded_categories","default":"","report":"bool"}]]></setting>
|
||||
<setting key="idm_show_newest"><![CDATA[{"key":"idm_show_newest","default":"1","report":"full"}]]></setting>
|
||||
<setting key="idm_watermarkpath"><![CDATA[{"key":"idm_watermarkpath","default":"","report":"bool"}]]></setting>
|
||||
<widget key="topSubmitters"><![CDATA[{"class":"\\IPS\\Widget\\StaticCache","restrict":[],"default_area":"","allow_reuse":false,"menu_style":"menu","embeddable":true}]]></widget>
|
||||
@@ -30,7 +32,6 @@
|
||||
<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>
|
||||
@@ -48,6 +49,7 @@
|
||||
<acpsearch key="app=downloads&module=downloads&controller=categories&searchResult=ctags_noprefixes"><![CDATA[{"lang_key":"ctags_noprefixes","restriction":"categories_manage","keywords":["allow prefixes","prefixes"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=categories&searchResult=ctypes"><![CDATA[{"lang_key":"ctypes","restriction":"categories_manage","keywords":["allowed extensions","allowed file","allowed file extensions"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=categories&searchResult=cversioning"><![CDATA[{"lang_key":"cversioning","restriction":"categories_manage","keywords":["number revisions","revisions"]}]]></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&searchResult=form_2_cbitoptions_moderation"><![CDATA[{"lang_key":"cbitoptions_moderation","restriction":"categories_manage","keywords":["approved","fies must","files approved"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=categories&searchResult=form_2_cbitoptions_reviews"><![CDATA[{"lang_key":"cbitoptions_reviews","restriction":"categories_manage","keywords":["allow reviews","reviews"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=categories&searchResult=form_2_cdesc"><![CDATA[{"lang_key":"cdesc","restriction":"categories_manage","keywords":["subcategory description"]}]]></acpsearch>
|
||||
@@ -105,6 +107,7 @@
|
||||
<acpsearch key="app=downloads&module=downloads&controller=fields&searchResult=pf_search_type"><![CDATA[{"lang_key":"pf_search_type","restriction":"fields_manage","keywords":["search behavior","search type"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=settings"><![CDATA[{"lang_key":"menu__downloads_downloads_settings","restriction":"settings_manage","keywords":["downloads","downloads settings","files"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=settings&searchResult=form_idm_antileech"><![CDATA[{"lang_key":"idm_antileech","restriction":"settings_manage","keywords":["anti-leech","antileech","direct","hotlink","link","prevent direct linking"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=settings&searchResult=form_idm_gridview"><![CDATA[{"lang_key":"idm_gridview","restriction":"settings_manage","keywords":["grid"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=settings&searchResult=form_idm_link_blacklist"><![CDATA[{"lang_key":"idm_link_blacklist","restriction":"settings_manage","keywords":["blacklist","link","submissions","url"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=settings&searchResult=form_idm_nexus_display"><![CDATA[{"lang_key":"idm_nexus_display","restriction":"settings_manage","keywords":["downloads statistics","statistics"]}]]></acpsearch>
|
||||
<acpsearch key="app=downloads&module=downloads&controller=settings&searchResult=form_idm_nexus_on"><![CDATA[{"lang_key":"idm_nexus_on","restriction":"settings_manage","keywords":["downloads","marketplace","nexus","paid downloads","paid files"]}]]></acpsearch>
|
||||
|
||||
@@ -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="107601" javascript_position="1000050">/**
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/downloads" javascript_name="ips.downloads.browse.js" javascript_type="controller" javascript_version="107643" javascript_position="1000050">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -59,7 +59,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/pending" javascript_name="ips.pending.buttons.js" javascript_type="controller" javascript_version="107601" javascript_position="1000100">/**
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/pending" javascript_name="ips.pending.buttons.js" javascript_type="controller" javascript_version="107643" javascript_position="1000100">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -87,7 +87,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="107601" 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="107643" javascript_position="1000050">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -140,7 +140,7 @@
|
||||
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.linkedScreenshots.js" javascript_type="controller" javascript_version="107601" javascript_position="1000150">/**
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.linkedScreenshots.js" javascript_type="controller" javascript_version="107643" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -212,7 +212,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.main.js" javascript_type="controller" javascript_version="107601" javascript_position="1000150"><![CDATA[/**
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.main.js" javascript_type="controller" javascript_version="107643" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -655,7 +655,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.changeLog.js" javascript_type="controller" javascript_version="107601" javascript_position="1000200"><![CDATA[/**
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.changeLog.js" javascript_type="controller" javascript_version="107643" javascript_position="1000200"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -778,7 +778,7 @@
|
||||
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.download.js" javascript_type="controller" javascript_version="107601" javascript_position="1000200">/**
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.download.js" javascript_type="controller" javascript_version="107643" javascript_position="1000200">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -906,7 +906,7 @@
|
||||
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.subscribe.js" javascript_type="controller" javascript_version="107601" javascript_position="1000200">/**
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.subscribe.js" javascript_type="controller" javascript_version="107643" javascript_position="1000200">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -969,7 +969,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.submit.js" javascript_type="template" javascript_version="107601" javascript_position="1000250"><![CDATA[/* VIEW TEMPLATES */
|
||||
<file javascript_app="downloads" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.submit.js" javascript_type="template" javascript_version="107643" javascript_position="1000250"><![CDATA[/* VIEW TEMPLATES */
|
||||
ips.templates.set('downloads.submit.screenshot', " \
|
||||
<div class='ipsUploader__row ipsUploader__row--withBorder ipsUploader__row--image ipsAttach ipsContained {{#done}}ipsAttach_done{{/done}}' id='{{id}}' data-role='file' data-fileid='{{id}}' data-filesize='{{sizeRaw}}' data-fullsizeurl='{{imagesrc}}' data-thumbnailurl='{{thumbnail}}' data-fileType='image'>\
|
||||
<div class='ipsUploader__rowPreview ipsType_center' data-role='preview'>\
|
||||
@@ -1042,7 +1042,6 @@ controllers</order>
|
||||
<order app="global" path="/dev/js//library/">underscore
|
||||
jquery
|
||||
mustache
|
||||
jstz
|
||||
IntersectionObserver
|
||||
Debug.js
|
||||
app.js</order>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language>
|
||||
<app key="downloads" version="107601">
|
||||
<app key="downloads" version="107643">
|
||||
<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>
|
||||
@@ -189,6 +189,13 @@
|
||||
<word key="idm_watermarkpath_desc" js="0">The image provided will be overlaid on all screenshot images (for example, to show a copyright message). For best results, use a small image with a transparent background.</word>
|
||||
<word key="acplogs__downloads_recount_downloads" js="0">Recounted downloads for category: %s</word>
|
||||
<word key="download_settings_saved_rebuilding" js="0">Saved. Your screenshots are rebuilding in the background.</word>
|
||||
<word key="idm_default_view" js="0">Default category view</word>
|
||||
<word key="idm_default_view_choose" js="0">Member can choose?</word>
|
||||
<word key="downloads_default_view_table" js="0">Table: A traditional table view</word>
|
||||
<word key="downloads_default_view_grid" js="0">Grid: Display files as cards in a grid</word>
|
||||
<word key="downloads_default_view_choose" js="0">Members can choose?</word>
|
||||
<word key="downloads_default_view_choose_desc" js="0">Select the views you will allow members to choose from</word>
|
||||
<word key="downloads_default_view_choose_none" js="0">Do not allow members to choose</word>
|
||||
<word key="idm_view_approvers" js="0">Can view who approved files?</word>
|
||||
<word key="idm_bypass_revision" js="0">Can manage versions?</word>
|
||||
<word key="idm_view_downloads" js="0">Can view who has downloaded files?</word>
|
||||
@@ -612,6 +619,7 @@
|
||||
<word key="AchievementAction__DownloadFile_title_generic" js="0">file downloaded</word>
|
||||
<word key="AchievementAction__DownloadFile_title" js="0">User downloads a file</word>
|
||||
<word key="AchievementAction__DownloadFile" js="0">Member downloads a Downloads File</word>
|
||||
<word key="webhook_downloads_new_version" js="0">Fired when a new version gets available</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>
|
||||
|
||||
@@ -1389,6 +1389,18 @@
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
},
|
||||
"file_last_comment_anon": {
|
||||
"name": "file_last_comment_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
@@ -3027,5 +3039,46 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloads_view_method": {
|
||||
"name": "downloads_view_method",
|
||||
"columns": {
|
||||
"member_id": {
|
||||
"name": "member_id",
|
||||
"type": "BIGINT",
|
||||
"length": "20",
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": 0,
|
||||
"comment": "ID Number",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
},
|
||||
"method": {
|
||||
"name": "method",
|
||||
"type": "VARCHAR",
|
||||
"length": 16,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": "table",
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"uniquemember": {
|
||||
"type": "unique",
|
||||
"name": "uniquemember",
|
||||
"columns": [
|
||||
"member_id"
|
||||
],
|
||||
"length": [
|
||||
null
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,16 @@
|
||||
"default": "1",
|
||||
"report": "full"
|
||||
},
|
||||
{
|
||||
"key": "idm_default_view",
|
||||
"default": "table",
|
||||
"report": "bool"
|
||||
},
|
||||
{
|
||||
"key": "idm_default_view_choose",
|
||||
"default": "1",
|
||||
"report": "bool"
|
||||
},
|
||||
{
|
||||
"key": "idm_featured_count",
|
||||
"default": "4",
|
||||
@@ -11,7 +21,7 @@
|
||||
},
|
||||
{
|
||||
"key": "idm_highest_rated_categories",
|
||||
"default": "0",
|
||||
"default": "",
|
||||
"report": "bool"
|
||||
},
|
||||
{
|
||||
@@ -21,7 +31,7 @@
|
||||
},
|
||||
{
|
||||
"key": "idm_newest_categories",
|
||||
"default": "0",
|
||||
"default": "",
|
||||
"report": "bool"
|
||||
},
|
||||
{
|
||||
@@ -46,7 +56,7 @@
|
||||
},
|
||||
{
|
||||
"key": "idm_show_most_downloaded_categories",
|
||||
"default": "0",
|
||||
"default": "",
|
||||
"report": "bool"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -131,7 +131,9 @@
|
||||
{{if $category->club()}}
|
||||
</div>
|
||||
{{endif}}]]></template>
|
||||
<template template_group="browse" template_name="categoryButtons" template_data="$canSubmitFiles, $currentCategory=NULL, $showReadButtonOnMobile=FALSE" template_location="front" template_app="downloads"><![CDATA[
|
||||
<template template_group="browse" template_name="categoryButtons" template_data="$canSubmitFiles, $currentCategory=NULL, $showReadButtonOnMobile=FALSE" template_location="front" template_app="downloads"><![CDATA[{{if $currentCategory}}
|
||||
{template="viewChange" group="browse" params="$currentCategory" }
|
||||
{{endif}}
|
||||
{{if $canSubmitFiles}}
|
||||
<li class='ipsToolList_primaryAction'>
|
||||
{{if $currentCategory OR $currentCategory = \IPS\downloads\Category::theOnlyNode()}}
|
||||
@@ -321,6 +323,98 @@
|
||||
</div>
|
||||
</div>
|
||||
</li>]]></template>
|
||||
<template template_group="browse" template_name="fileGrid" template_data="$file, $table" template_location="front" template_app="downloads"><![CDATA[<div class="ipsBox ipsBox--child ">
|
||||
{{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}}'>
|
||||
<span></span>
|
||||
</span>
|
||||
</div>
|
||||
{{endif}}
|
||||
{template="thumbImage" group="global" app="core" params="$file->primary_screenshot_thumb, $file->name, 'medium', '', 'view_this', $file->url( 'getPrefComment' ), 'core_Attachment', '', true"}
|
||||
<h4 class='ipsDataItem_title ipsType_sectionHead ipsContained_container'>
|
||||
{{if $file->unread()}}
|
||||
<span><span class='ipsItemStatus ipsItemStatus_small' data-ipsTooltip title='{{if $file->unread() === -1}}{lang="new"}{{else}}{lang="updated"}{{endif}}'><i class="fa fa-circle"></i></span> </span>
|
||||
{{endif}}
|
||||
|
||||
{{if $file->mapped('pinned') || $file->mapped('featured') || $file->hidden() === -1 || $file->hidden() === 1}}
|
||||
{{if $file->hidden() === -1}}
|
||||
<span><span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$file->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span></span>
|
||||
{{elseif $file->hidden() === 1}}
|
||||
<span><span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $file->mapped('pinned')}}
|
||||
<span><span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $file->mapped('featured')}}
|
||||
<span><span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span></span>
|
||||
{{endif}}
|
||||
{{endif}}
|
||||
|
||||
{{if $file->prefix()}}
|
||||
<span>{template="prefix" group="global" app="core" params="$file->prefix( TRUE ), $file->prefix()"}</span>
|
||||
{{endif}}
|
||||
|
||||
<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( NULL, NULL, $file->isAnonymous() )"}
|
||||
{{if \IPS\Request::i()->app != 'downloads'}}
|
||||
{lang="in"} <a href="{$file->container()->url()}">{$file->container()->_title}</a>
|
||||
{{endif}}
|
||||
</p>
|
||||
<div class='ipsDataItem_generic ipsDataItem_size8'>
|
||||
|
||||
|
||||
<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>
|
||||
|
||||
<!-- Rating -->
|
||||
{{if $file->container()->bitoptions['reviews']}}
|
||||
{template="rating" group="global" location="front" app="core" params="'large', $file->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $file->memberReviewRating()"} <span class='ipsType_normal ipsType_light'>({lang="num_reviews" pluralize="$file->reviews"})</span>
|
||||
{{endif}}
|
||||
|
||||
<!-- Comments -->
|
||||
{{if $file->container()->bitoptions['comments']}}
|
||||
<p class='ipsType_normal'>
|
||||
{{if $file->comments}}
|
||||
<a href='{$file->url()->setQueryString( 'tab', 'comments' )->setFragment('replies')}'>
|
||||
{{endif}}
|
||||
<i class='fa fa-comment'></i> {lang="num_comments" pluralize="$file->comments"}
|
||||
{{if $file->comments}}
|
||||
</a>
|
||||
{{endif}}
|
||||
</p>
|
||||
{{endif}}
|
||||
<!-- Price -->
|
||||
{{if \IPS\Application::appIsEnabled( 'nexus' ) and settings.idm_nexus_on}}
|
||||
<p class='ipsType_large ipsType_center ipsType_reset ipsSpacer_top ipsSpacer_half'>
|
||||
<span class='cFilePrice'>
|
||||
{{if $file->isPaid()}}
|
||||
{{if $price = $file->price()}}
|
||||
{$price|raw}
|
||||
{{endif}}
|
||||
{{else}}
|
||||
{lang="file_free"}
|
||||
{{endif}}
|
||||
</span>
|
||||
</p>
|
||||
<!-- Purchase Count -->
|
||||
<p class='ipsType_normal'>
|
||||
{{if $file->isPaid() and !$file->nexus and \in_array( 'purchases', explode( ',', settings.idm_nexus_display ) )}}
|
||||
<span {{if !$file->purchaseCount()}}class='ipsType_light'{{endif}}><i class='fa fa-shopping-cart'></i> {lang="x_purchases" pluralize="$file->purchaseCount()"}</span>
|
||||
{{endif}}
|
||||
{{if !$file->isPaid() or \in_array( 'downloads', explode( ',', settings.idm_nexus_display ) )}}
|
||||
<span {{if !$file->downloads}}class='ipsType_light'{{endif}}><i class='fa fa-arrow-circle-down'></i> {lang="num_downloads" pluralize="$file->downloads"}</span>
|
||||
{{endif}}
|
||||
</p>
|
||||
<!-- Tags -->
|
||||
{{if \count( $file->tags() )}}
|
||||
{template="tags" group="global" app="core" params="$file->tags(), TRUE"}
|
||||
{{endif}}
|
||||
{{endif}}
|
||||
</div>]]></template>
|
||||
<template template_group="browse" template_name="index" template_data="$featured, $new, $rated, $downloaded" template_location="front" template_app="downloads"><![CDATA[<div class="ipsPageHeader ipsClearfix ipsFlex ipsFlex-ai:center ipsFlex-jc:between sm:ipsFlex-fd:column sm:ipsFlex-ai:stretch ipsMargin_bottom sm:ipsMargin:none">
|
||||
<h1 class="ipsType_pageTitle">{lang="downloads"}</h1>
|
||||
<ul class="ipsToolList ipsToolList_horizontal ipsClearfix ipsFlex-flex:11 ipsMargin_bottom:none sm:ipsMargin_bottom sm:ipsMargin_top:half">
|
||||
@@ -509,101 +603,170 @@
|
||||
{lang="submit_first_file"}</a>
|
||||
{{endif}}
|
||||
</div>]]></template>
|
||||
<template template_group="browse" template_name="rows" template_data="$table, $headers, $files" template_location="front" template_app="downloads"><![CDATA[{{if \count( $files )}}
|
||||
{{foreach $files as $file}}
|
||||
<li class='ipsDataItem {{if $file->unread()}}ipsDataItem_unread{{endif}} {{if method_exists( $file, 'tableClass' ) && $file->tableClass()}}ipsDataItem_{$file->tableClass()}{{endif}} {{if $file->hidden()}}ipsModerated{{endif}}' data-ipsLazyLoad>
|
||||
<div class='ipsDataItem_generic ipsDataItem_size3 ipsPos_top'>
|
||||
{template="thumbImage" group="global" app="core" params="$file->primary_screenshot_thumb, $file->name, 'medium', '', 'view_this', $file->url( 'getPrefComment' ), 'core_Attachment', '', true"}
|
||||
<template template_group="browse" template_name="rows" template_data="$table, $headers, $files" template_location="front" template_app="downloads"><![CDATA[
|
||||
{{if \count( $files )}}
|
||||
{{if \IPS\downloads\Category::getMemberView() == 'grid'}}
|
||||
<div class="ipsFluidGrid ipsFluidGrid--downloads">
|
||||
{{foreach $files as $file}}
|
||||
<li>
|
||||
<div class='ipsMargin_bottom:half'>
|
||||
{template="thumbImage" group="global" app="core" params="$file->primary_screenshot_thumb, $file->name, 'large', '', '', $file->url( 'getPrefComment' )"}
|
||||
</div>
|
||||
{{$price = NULL;}}
|
||||
{{if \IPS\Application::appIsEnabled( 'nexus' ) and settings.idm_nexus_on}}
|
||||
<p class='ipsType_large ipsType_center ipsType_reset ipsSpacer_top ipsSpacer_half'>
|
||||
<span class='cFilePrice'>
|
||||
{{if $file->isPaid()}}
|
||||
{{if $price = $file->price()}}
|
||||
{$price|raw}
|
||||
{{endif}}
|
||||
{{else}}
|
||||
{lang="file_free"}
|
||||
<div class="cWidgetPrice ipsType_light ipsType_semiBold">
|
||||
{{if $file->isPaid()}}
|
||||
{{if $price = $file->price()}}
|
||||
{$price|raw}
|
||||
{{endif}}
|
||||
</span>
|
||||
</p>
|
||||
{{else}}
|
||||
{lang="file_free_feed"}
|
||||
{{endif}}
|
||||
</div>
|
||||
{{endif}}
|
||||
</div>
|
||||
<div class='ipsDataItem_main'>
|
||||
<h4 class='ipsDataItem_title ipsType_sectionHead ipsContained_container'>
|
||||
{{if $file->unread()}}
|
||||
<span><span class='ipsItemStatus ipsItemStatus_small' data-ipsTooltip title='{{if $file->unread() === -1}}{lang="new"}{{else}}{lang="updated"}{{endif}}'><i class="fa fa-circle"></i></span> </span>
|
||||
<div class='ipsFlex ipsFlex-jc:between ipsGap:1'>
|
||||
<div class='ipsType_semiBold ipsType_normal ipsType_break ipsContained'><a href="{$file->url( "getPrefComment" )}" title='{lang="view_this_file" sprintf="$file->name"}'>{$file->name}</a></div>
|
||||
{{if $file->container()->bitoptions['reviews']}}
|
||||
<div class='ipsFlex-flex:00'>
|
||||
{template="rating" group="global" location="front" app="core" params="'small', $file->rating, \IPS\Settings::i()->reviews_rating_out_of"}
|
||||
</div>
|
||||
{{endif}}
|
||||
|
||||
{{if $file->mapped('pinned') || $file->mapped('featured') || $file->hidden() === -1 || $file->hidden() === 1}}
|
||||
{{if $file->hidden() === -1}}
|
||||
<span><span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$file->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span></span>
|
||||
{{elseif $file->hidden() === 1}}
|
||||
<span><span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $file->mapped('pinned')}}
|
||||
<span><span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $file->mapped('featured')}}
|
||||
<span><span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span></span>
|
||||
{{endif}}
|
||||
{{endif}}
|
||||
|
||||
{{if $file->prefix()}}
|
||||
<span>{template="prefix" group="global" app="core" params="$file->prefix( TRUE ), $file->prefix()"}</span>
|
||||
{{endif}}
|
||||
|
||||
<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( NULL, NULL, $file->isAnonymous() )"}
|
||||
{{if \IPS\Request::i()->app != 'downloads'}}
|
||||
{lang="in"} <a href="{$file->container()->url()}">{$file->container()->_title}</a>
|
||||
{{endif}}
|
||||
</p>
|
||||
<div class='ipsType_medium ipsType_richText ipsType_break ipsSpacer_top' data-ipsTruncate data-ipsTruncate-type="remove" data-ipsTruncate-size="2 lines">
|
||||
</div>
|
||||
<div class='ipsType_richText ipsType_break ipsMargin_bottom:half' data-ipsTruncate data-ipsTruncate-type="remove" data-ipsTruncate-size="2 lines">
|
||||
{$file->truncated()|raw}
|
||||
</div>
|
||||
|
||||
<p class='ipsType_normal'>
|
||||
{{if $file->isPaid() and !$file->nexus and \in_array( 'purchases', explode( ',', settings.idm_nexus_display ) )}}
|
||||
<span {{if !$file->purchaseCount()}}class='ipsType_light'{{endif}}><i class='fa fa-shopping-cart'></i> {lang="x_purchases" pluralize="$file->purchaseCount()"}</span>
|
||||
{{endif}}
|
||||
{{if !$file->isPaid() or \in_array( 'downloads', explode( ',', settings.idm_nexus_display ) )}}
|
||||
<span {{if !$file->downloads}}class='ipsType_light'{{endif}}><i class='fa fa-arrow-circle-down'></i> {lang="num_downloads" pluralize="$file->downloads"}</span>
|
||||
{{endif}}
|
||||
</p>
|
||||
|
||||
{{if \count( $file->tags() )}}
|
||||
{template="tags" group="global" app="core" params="$file->tags(), TRUE"}
|
||||
{{endif}}
|
||||
</div>
|
||||
<div class='ipsDataItem_generic ipsDataItem_size8'>
|
||||
{{if $file->container()->bitoptions['reviews']}}
|
||||
{template="rating" group="global" location="front" app="core" params="'large', $file->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $file->memberReviewRating()"} <span class='ipsType_normal ipsType_light'>({lang="num_reviews" pluralize="$file->reviews"})</span>
|
||||
{{endif}}
|
||||
{{if $file->container()->bitoptions['comments']}}
|
||||
<p class='ipsType_normal'>
|
||||
{{if $file->comments}}
|
||||
<a href='{$file->url()->setQueryString( 'tab', 'comments' )->setFragment('replies')}'>
|
||||
{{endif}}
|
||||
<i class='fa fa-comment'></i> {lang="num_comments" pluralize="$file->comments"}
|
||||
{{if $file->comments}}
|
||||
</a>
|
||||
{{endif}}
|
||||
</p>
|
||||
{{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 $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}}'>
|
||||
<span></span>
|
||||
</span>
|
||||
<div class='ipsFlex ipsFlex-ai:center ipsFlex-fw:wrap ipsFlex-jc:between ipsGap:1'>
|
||||
<div class='ipsFlex-flex:11 ipsType_light ipsType_medium ipsType_blendLinks'>{lang="byline_nodate" htmlsprintf="$file->author()->link( NULL, NULL, $file->isAnonymous() )"}</div>
|
||||
<div>
|
||||
<div class='ipsFlex ipsFlex-ai:center ipsGap:4 ipsGap_row:2 ipsType_light'>
|
||||
{{if $file->isPaid() and !$file->nexus and \in_array( 'purchases', explode( ',', settings.idm_nexus_display ) )}}
|
||||
<span {{if !$file->purchaseCount()}}class='ipsType_light'{{endif}} title='{lang="idm_purchases"}' data-ipsTooltip><i class='fa fa-shopping-cart'></i> {$file->purchaseCount()}</span>
|
||||
{{endif}}
|
||||
{{if !$file->isPaid() or \in_array( 'downloads', explode( ',', settings.idm_nexus_display ) )}}
|
||||
<span {{if !$file->downloads}}class='ipsType_light'{{endif}} title='{lang="downloads"}' data-ipsTooltip><i class='fa fa-download'></i> {number="$file->downloads"}</span>
|
||||
{{endif}}
|
||||
{{if $file->container()->bitoptions['comments']}}<span {{if !$file->comments}}class='ipsType_light'{{endif}} title='{lang="total_comments"}' data-ipsTooltip><i class='fa fa-comments-o'></i> {$file->comments}</span>{{endif}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}
|
||||
</li>
|
||||
{{endforeach}}
|
||||
</li>
|
||||
{{endforeach}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{foreach $files as $file}}
|
||||
{template="tableRow" group="browse" app="downloads" params="$file, $table"}
|
||||
{{endforeach}}
|
||||
{{endif}}
|
||||
{{endif}}]]></template>
|
||||
<template template_group="browse" template_name="tableRow" template_data="$file, $table" template_location="front" template_app="downloads"><![CDATA[<li class='ipsDataItem {{if $file->unread()}}ipsDataItem_unread{{endif}} {{if method_exists( $file, 'tableClass' ) && $file->tableClass()}}ipsDataItem_{$file->tableClass()}{{endif}} {{if $file->hidden()}}ipsModerated{{endif}}' data-ipsLazyLoad>
|
||||
<div class='ipsDataItem_generic ipsDataItem_size3 ipsPos_top'>
|
||||
{template="thumbImage" group="global" app="core" params="$file->primary_screenshot_thumb, $file->name, 'medium', '', 'view_this', $file->url( 'getPrefComment' ), 'core_Attachment', '', true"}
|
||||
{{if \IPS\Application::appIsEnabled( 'nexus' ) and settings.idm_nexus_on}}
|
||||
<p class='ipsType_large ipsType_center ipsType_reset ipsSpacer_top ipsSpacer_half'>
|
||||
<span class='cFilePrice'>
|
||||
{{if $file->isPaid()}}
|
||||
{{if $price = $file->price()}}
|
||||
{$price|raw}
|
||||
{{endif}}
|
||||
{{else}}
|
||||
{lang="file_free"}
|
||||
{{endif}}
|
||||
</span>
|
||||
</p>
|
||||
{{endif}}
|
||||
</div>
|
||||
<div class='ipsDataItem_main'>
|
||||
<h4 class='ipsDataItem_title ipsType_sectionHead ipsContained_container'>
|
||||
{{if $file->unread()}}
|
||||
<span><span class='ipsItemStatus ipsItemStatus_small' data-ipsTooltip title='{{if $file->unread() === -1}}{lang="new"}{{else}}{lang="updated"}{{endif}}'><i class="fa fa-circle"></i></span> </span>
|
||||
{{endif}}
|
||||
|
||||
{{if $file->mapped('pinned') || $file->mapped('featured') || $file->hidden() === -1 || $file->hidden() === 1}}
|
||||
{{if $file->hidden() === -1}}
|
||||
<span><span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$file->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span></span>
|
||||
{{elseif $file->hidden() === 1}}
|
||||
<span><span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $file->mapped('pinned')}}
|
||||
<span><span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $file->mapped('featured')}}
|
||||
<span><span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span></span>
|
||||
{{endif}}
|
||||
{{endif}}
|
||||
|
||||
{{if $file->prefix()}}
|
||||
<span>{template="prefix" group="global" app="core" params="$file->prefix( TRUE ), $file->prefix()"}</span>
|
||||
{{endif}}
|
||||
|
||||
<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( NULL, NULL, $file->isAnonymous() )"}
|
||||
{{if \IPS\Request::i()->app != 'downloads'}}
|
||||
{lang="in"} <a href="{$file->container()->url()}">{$file->container()->_title}</a>
|
||||
{{endif}}
|
||||
</p>
|
||||
<div class='ipsType_medium ipsType_richText ipsType_break ipsSpacer_top' data-ipsTruncate data-ipsTruncate-type="remove" data-ipsTruncate-size="2 lines">
|
||||
{$file->truncated()|raw}
|
||||
</div>
|
||||
|
||||
<p class='ipsType_normal'>
|
||||
{{if $file->isPaid() and !$file->nexus and \in_array( 'purchases', explode( ',', settings.idm_nexus_display ) )}}
|
||||
<span {{if !$file->purchaseCount()}}class='ipsType_light'{{endif}}><i class='fa fa-shopping-cart'></i> {lang="x_purchases" pluralize="$file->purchaseCount()"}</span>
|
||||
{{endif}}
|
||||
{{if !$file->isPaid() or \in_array( 'downloads', explode( ',', settings.idm_nexus_display ) )}}
|
||||
<span {{if !$file->downloads}}class='ipsType_light'{{endif}}><i class='fa fa-arrow-circle-down'></i> {lang="num_downloads" pluralize="$file->downloads"}</span>
|
||||
{{endif}}
|
||||
</p>
|
||||
|
||||
{{if \count( $file->tags() )}}
|
||||
{template="tags" group="global" app="core" params="$file->tags(), TRUE"}
|
||||
{{endif}}
|
||||
</div>
|
||||
<div class='ipsDataItem_generic ipsDataItem_size8'>
|
||||
{{if $file->container()->bitoptions['reviews']}}
|
||||
{template="rating" group="global" location="front" app="core" params="'large', $file->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $file->memberReviewRating()"} <span class='ipsType_normal ipsType_light'>({lang="num_reviews" pluralize="$file->reviews"})</span>
|
||||
{{endif}}
|
||||
{{if $file->container()->bitoptions['comments']}}
|
||||
<p class='ipsType_normal'>
|
||||
{{if $file->comments}}
|
||||
<a href='{$file->url()->setQueryString( 'tab', 'comments' )->setFragment('replies')}'>
|
||||
{{endif}}
|
||||
<i class='fa fa-comment'></i> {lang="num_comments" pluralize="$file->comments"}
|
||||
{{if $file->comments}}
|
||||
</a>
|
||||
{{endif}}
|
||||
</p>
|
||||
{{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 $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}}'>
|
||||
<span></span>
|
||||
</span>
|
||||
</div>
|
||||
{{endif}}
|
||||
</li>]]></template>
|
||||
<template template_group="browse" template_name="viewChange" template_data="$currentCategory, $hideMobile=FALSE" template_location="front" template_app="downloads"><![CDATA[{{if settings.idm_default_view_choose and member.member_id}}
|
||||
{{$chosen = \IPS\downloads\Category::getMemberView();}}
|
||||
<li>
|
||||
<ul class='ipsButton_split'>
|
||||
<li>
|
||||
<a href='{$currentCategory->url()->setQueryString("do", "setMethod")->setQueryString("method","table")->csrf()}' class='ipsButton {{if $chosen == 'table'}}ipsButton_primary{{else}}ipsButton_veryLight{{endif}} ipsButton_narrow ipsButton_medium' data-ipsTooltip data-ipsTooltip-safe title='{lang='downloads_default_view_table' escape='true'}' rel='nofollow'>
|
||||
<i class='fa fa-align-justify'></i>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='{$currentCategory->url()->setQueryString('do', 'setMethod')->setQueryString('method','grid')->csrf()}' class='ipsButton {{if $chosen == 'grid'}}ipsButton_primary{{else}}ipsButton_veryLight{{endif}} ipsButton_narrow ipsButton_medium' data-ipsTooltip data-ipsTooltip-safe title='{lang='downloads_default_view_grid' escape='true'}' rel='nofollow'>
|
||||
<i class='fa fa-th-large'></i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
{{endif}}]]></template>
|
||||
<template template_group="dashboard" template_name="overview" template_data="$data" template_location="admin" template_app="downloads"><![CDATA[<ul class="ipsDataList">
|
||||
{{foreach $data as $k => $v}}
|
||||
@@ -693,7 +856,7 @@
|
||||
{{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>
|
||||
{{endif}}
|
||||
{{elseif !$item->isPurchasable( FALSE )}}
|
||||
{{elseif $item->isPaid() AND !$item->isPurchasable( FALSE )}}
|
||||
{lang="purchasing_disabled"}
|
||||
{{else}}
|
||||
{{if $item->canDownload() or !$item->downloadTeaser()}}
|
||||
@@ -2112,7 +2275,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class='ipsFlex-flex:01 ipsResponsive_hidePhone'>
|
||||
<div class='ipsFlex ipsFlex-ai:center ipsFlex-jc:center ipsGap:3 ipsGap_row:0'>
|
||||
<div class='ipsShareLinks'>
|
||||
{{if \count( $file->shareLinks() )}}
|
||||
{template="shareButton" app="core" group="sharelinks" params="$file"}
|
||||
{{endif}}
|
||||
@@ -2132,9 +2295,19 @@
|
||||
<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 sm:ipsMargin_top:half sm:ipsPos_left" title='{lang="file_pending_version_button"}'>{lang="file_pending_version_button"}</a>
|
||||
{{endif}}
|
||||
|
||||
<ul class='ipsList_inline ipsPos_right' data-controller="downloads.front.pending.buttons">
|
||||
{{if $file->canUnhide() OR $file->canHide()}}
|
||||
<li>
|
||||
<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>
|
||||
</li>
|
||||
{{endif}}
|
||||
{{if $file->canDeletePendingVersion() }}
|
||||
<li>
|
||||
<a href="{expression="\IPS\downloads\File\PendingVersion::load($file->id, 'pending_file_id')->url()->setQueryString('do','delete')->csrf()"}" class="ipsPos_right ipsButton ipsButton_negative ipsButton_verySmall sm:ipsMargin_top:half sm:ipsPos_left" title='{lang="delete"}' data-confirm>{lang="delete"}</a>
|
||||
</li>
|
||||
{{endif}}
|
||||
</ul>
|
||||
</p>
|
||||
</div>
|
||||
{{endif}}
|
||||
@@ -2457,21 +2630,13 @@
|
||||
</div>
|
||||
|
||||
<div class='ipsBox ipsPadding ipsResponsive_pull ipsResponsive_showPhone ipsMargin_top'>
|
||||
<div class='ipsGap_row:3'>
|
||||
<div>
|
||||
{template="notify" app="downloads" group="view" params="$file"}
|
||||
</div>
|
||||
<div class='ipsShareLinks'>
|
||||
{template="notify" app="downloads" group="view" params="$file"}
|
||||
{{if \count( $file->shareLinks() )}}
|
||||
<div>
|
||||
{template="shareButton" app="core" group="sharelinks" params="$file, 'verySmall', 'light'"}
|
||||
</div>
|
||||
{template="shareButton" app="core" group="sharelinks" params="$file, 'verySmall', 'light'"}
|
||||
{{endif}}
|
||||
<div>
|
||||
{template="follow" app="core" group="global" params="'downloads', 'file', $file->id, $file->followersCount()"}
|
||||
</div>
|
||||
<div>
|
||||
{template="promote" app="core" group="global" params="$file"}
|
||||
</div>
|
||||
{template="follow" app="core" group="global" params="'downloads', 'file', $file->id, $file->followersCount()"}
|
||||
{template="promote" app="core" group="global" params="$file"}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2510,7 +2675,7 @@
|
||||
<template template_group="widgets" template_name="downloadsCommentFeed" template_data="$comments, $title, $orientation='vertical'" template_location="front" template_app="downloads"><![CDATA[{{if !empty( $comments ) }}
|
||||
<h3 class='ipsType_reset ipsWidget_title'>{$title}</h3>
|
||||
{{if $orientation == 'vertical'}}
|
||||
<div class='ipsWidget_inner ipsPad_half'>
|
||||
<div class='ipsWidget_inner'>
|
||||
<ul class='ipsDataList ipsDataList_reducedSpacing'>
|
||||
{{foreach $comments as $comment}}
|
||||
<li class='ipsDataItem'>
|
||||
@@ -2518,8 +2683,8 @@
|
||||
{template="userPhoto" group="global" app="core" params="$comment->author(), 'tiny'"}
|
||||
</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( 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_break ipsContained'><a href="{$comment->url()}" class='ipsDataItem_title'>{$comment->item()->name}</a></div>
|
||||
<p class='ipsType_reset ipsType_light 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>
|
||||
@@ -2603,7 +2768,7 @@
|
||||
<template template_group="widgets" template_name="downloadsReviewFeed" template_data="$comments, $title, $orientation='vertical'" template_location="front" template_app="downloads"><![CDATA[{{if !empty( $comments ) }}
|
||||
<h3 class='ipsType_reset ipsWidget_title'>{$title}</h3>
|
||||
{{if $orientation == 'vertical'}}
|
||||
<div class='ipsWidget_inner ipsPad_half'>
|
||||
<div class='ipsWidget_inner'>
|
||||
<ul class='ipsDataList ipsDataList_reducedSpacing'>
|
||||
{{foreach $comments as $comment}}
|
||||
<li class='ipsDataItem'>
|
||||
@@ -2611,8 +2776,8 @@
|
||||
{template="userPhoto" group="global" app="core" params="$comment->author(), 'tiny'"}
|
||||
</div>
|
||||
<div class='ipsDataItem_main'>
|
||||
<div class='ipsType_break ipsContained'><a href="{$comment->url()}" class='ipsTruncate ipsTruncate_line'>{$comment->item()->name}</a></div>
|
||||
<span class='ipsType_light ipsType_small'>{lang="byline_nodate" htmlsprintf="$comment->author()->link()"} · <a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findReview', 'review' => $comment->id ) )}' class='ipsType_blendLinks'>{$comment->dateLine()|raw}</a></span>
|
||||
<div class='ipsType_break ipsContained'><a href="{$comment->url()}" class='ipsDataItem_title'>{$comment->item()->name}</a></div>
|
||||
<span class='ipsType_light ipsType_blendLinks'>{lang="byline_nodate" htmlsprintf="$comment->author()->link()"} · <a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findReview', 'review' => $comment->id ) )}' class='ipsType_blendLinks'>{$comment->dateLine()|raw}</a></span>
|
||||
{template="rating" group="global" location="front" app="core" params="'small', $comment->rating, \IPS\Settings::i()->reviews_rating_out_of"}
|
||||
<div class='ipsType_medium ipsType_textBlock ipsType_richText ipsType_break ipsContained' 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}
|
||||
@@ -2688,116 +2853,112 @@
|
||||
<template template_group="widgets" template_name="downloadStats" template_data="$stats, $latestFile, $orientation='vertical'" template_location="front" template_app="downloads"><![CDATA[<h3 class='ipsType_reset ipsWidget_title'>{lang="block_downloadStats"}</h3>
|
||||
<div class='ipsWidget_inner'>
|
||||
{{if $orientation == 'vertical'}}
|
||||
<div class='ipsPad_half'>
|
||||
<ul class='ipsDataList' id='elDownloadsStats'>
|
||||
<ul class='ipsDataList' id='elDownloadsStats'>
|
||||
<li class='ipsDataItem'>
|
||||
<div class='ipsDataItem_main ipsPos_middle'>
|
||||
<strong>{lang="total_files_front"}</strong>
|
||||
</div>
|
||||
<div class='ipsDataItem_stats ipsDataItem_statsLarge'>
|
||||
<span class='ipsDataItem_stats_number'>{number="$stats['totalFiles']"}</span>
|
||||
</div>
|
||||
</li>
|
||||
{{if $stats['totalComments']}}
|
||||
<li class='ipsDataItem'>
|
||||
<div class='ipsDataItem_main ipsPos_middle'>
|
||||
<strong>{lang="total_files_front"}</strong>
|
||||
<strong>{lang="total_comments"}</strong>
|
||||
</div>
|
||||
<div class='ipsDataItem_stats ipsDataItem_statsLarge'>
|
||||
<span class='ipsDataItem_stats_number'>{number="$stats['totalFiles']"}</span>
|
||||
<span class='ipsDataItem_stats_number'>{number="$stats['totalComments']"}</span>
|
||||
</div>
|
||||
</li>
|
||||
{{if $stats['totalComments']}}
|
||||
<li class='ipsDataItem'>
|
||||
<div class='ipsDataItem_main ipsPos_middle'>
|
||||
<strong>{lang="total_comments"}</strong>
|
||||
</div>
|
||||
<div class='ipsDataItem_stats ipsDataItem_statsLarge'>
|
||||
<span class='ipsDataItem_stats_number'>{number="$stats['totalComments']"}</span>
|
||||
</div>
|
||||
</li>
|
||||
{{endif}}
|
||||
{{if $stats['totalReviews']}}
|
||||
<li class='ipsDataItem'>
|
||||
<div class='ipsDataItem_main ipsPos_middle'>
|
||||
<strong>{lang="total_reviews"}</strong>
|
||||
</div>
|
||||
<div class='ipsDataItem_stats ipsDataItem_statsLarge'>
|
||||
<span class='ipsDataItem_stats_number'>{number="$stats['totalReviews']"}</span>
|
||||
</div>
|
||||
</li>
|
||||
{{endif}}
|
||||
</ul>
|
||||
<hr class='ipsHr'>
|
||||
{{if $latestFile}}
|
||||
<div id='elDownloadStatsLatest' class='ipsClearfix'>
|
||||
{template="thumbImage" group="global" app="core" params="$latestFile->primary_screenshot, $latestFile->name, 'small', 'ipsPos_left'"}
|
||||
<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( 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>
|
||||
{{endif}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{$columns = 2;}}
|
||||
{{$columns += ( $stats['totalComments'] ) ? 1 : 0;}}
|
||||
{{$columns += ( $stats['totalReviews'] ) ? 1 : 0;}}
|
||||
{{$span = 12 / $columns;}}
|
||||
<div class='ipsGrid ipsGrid_collapsePhone ipsWidget_stats'>
|
||||
<div class='ipsGrid_span{$span} ipsType_center cDownloadsWidget_statsNumber'>
|
||||
<span class='ipsType_large ipsWidget_statsCount'>{number="$stats['totalFiles']"}</span><br>
|
||||
<span class='ipsType_light ipsType_medium'>{lang="total_files_front"}</span>
|
||||
</div>
|
||||
{{if $stats['totalComments']}}
|
||||
<div class='ipsGrid_span{$span} ipsType_center cDownloadsWidget_statsNumber'>
|
||||
<span class='ipsType_large ipsWidget_statsCount'>{number="$stats['totalComments']"}</span><br>
|
||||
<span class='ipsType_light ipsType_medium'>{lang="total_comments"}</span>
|
||||
</div>
|
||||
{{endif}}
|
||||
{{if $stats['totalReviews']}}
|
||||
<div class='ipsGrid_span{$span} ipsType_center cDownloadsWidget_statsNumber'>
|
||||
<span class='ipsType_large ipsWidget_statsCount'>{number="$stats['totalReviews']"}</span><br>
|
||||
<span class='ipsType_light ipsType_medium'>{lang="total_reviews"}</span>
|
||||
</div>
|
||||
{{endif}}
|
||||
{{if $latestFile}}
|
||||
<div class='ipsGrid_span{$span} ipsType_left cNewestMember'>
|
||||
<div id='elDownloadStatsLatest' class='ipsClearfix'>
|
||||
<span class='ipsType_minorHeading'>{lang="latest_file"}</span><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>
|
||||
<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>
|
||||
<li class='ipsDataItem'>
|
||||
<div class='ipsDataItem_main ipsPos_middle'>
|
||||
<strong>{lang="total_reviews"}</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div class='ipsDataItem_stats ipsDataItem_statsLarge'>
|
||||
<span class='ipsDataItem_stats_number'>{number="$stats['totalReviews']"}</span>
|
||||
</div>
|
||||
</li>
|
||||
{{endif}}
|
||||
</ul>
|
||||
<hr class='ipsHr'>
|
||||
{{if $latestFile}}
|
||||
<div id='elDownloadStatsLatest' class='ipsClearfix ipsPadding:half ipsPadding_top:none'>
|
||||
{template="thumbImage" group="global" app="core" params="$latestFile->primary_screenshot, $latestFile->name, 'small', 'ipsPos_left'"}
|
||||
<div class='ipsWidget_latestItem'>
|
||||
<strong class='ipsType_small ipsType_uppercase ipsType_light'>{lang="latest_file"}</strong><br>
|
||||
<div class='ipsType_break ipsContained'><a href="{$latestFile->url( "getPrefComment" )}" title='{lang="view_this_file" sprintf="$latestFile->name"}' class='ipsDataItem_title'>{$latestFile->name}</a></div>
|
||||
<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>
|
||||
{{endif}}
|
||||
{{else}}
|
||||
<div class='ipsPadding'>
|
||||
<div class='ipsFlex ipsFlex-ai:center ipsFlex-fw:wrap ipsGap:5 ipsWidget_stats'>
|
||||
<div class='ipsFlex-flex:11 ipsType_center cDownloadsWidget_statsNumber'>
|
||||
<span class='ipsType_large ipsWidget_statsCount'>{number="$stats['totalFiles']"}</span><br>
|
||||
<span class='ipsType_light ipsType_medium'>{lang="total_files_front"}</span>
|
||||
</div>
|
||||
{{if $stats['totalComments']}}
|
||||
<div class='ipsFlex-flex:11 ipsType_center cDownloadsWidget_statsNumber'>
|
||||
<span class='ipsType_large ipsWidget_statsCount'>{number="$stats['totalComments']"}</span><br>
|
||||
<span class='ipsType_light ipsType_medium'>{lang="total_comments"}</span>
|
||||
</div>
|
||||
{{endif}}
|
||||
{{if $stats['totalReviews']}}
|
||||
<div class='ipsFlex-flex:11 ipsType_center cDownloadsWidget_statsNumber'>
|
||||
<span class='ipsType_large ipsWidget_statsCount'>{number="$stats['totalReviews']"}</span><br>
|
||||
<span class='ipsType_light ipsType_medium'>{lang="total_reviews"}</span>
|
||||
</div>
|
||||
{{endif}}
|
||||
{{if $latestFile}}
|
||||
<div class='cNewestMember'>
|
||||
<div id='elDownloadStatsLatest' class='ipsClearfix'>
|
||||
<span class='ipsType_small ipsType_uppercase ipsType_light'>{lang="latest_file"}</span><br>
|
||||
<div class='ipsType_break ipsContained'><a href="{$latestFile->url( "getPrefComment" )}" title='{lang="view_this_file" sprintf="$latestFile->name"}' class='ipsDataItem_title'>{$latestFile->name}</a></div>
|
||||
<span class='ipsType_light ipsType_medium'>{lang="byline_nodate" htmlsprintf="$latestFile->author()->link()"}</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>
|
||||
{{endif}}
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}
|
||||
</div>]]></template>
|
||||
<template template_group="widgets" template_name="fileFeed" template_data="$files, $title, $orientation='vertical'" template_location="front" template_app="downloads"><![CDATA[<h3 class='ipsType_reset ipsWidget_title'>{$title}</h3>
|
||||
<div class='ipsWidget_inner'>
|
||||
{{if $orientation == 'vertical'}}
|
||||
<div class='ipsPad_half'>
|
||||
{{if \count( $files )}}
|
||||
<ul class='ipsDataList ipsDataList_reducedSpacing'>
|
||||
{{foreach $files as $file}}
|
||||
{template="fileRow" group="widgets" app="downloads" params="$file, $orientation"}
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
{{else}}
|
||||
{{if \count( $files )}}
|
||||
<ul class='ipsDataList ipsDataList_reducedSpacing'>
|
||||
{{foreach $files as $file}}
|
||||
{template="fileRow" group="widgets" app="downloads" params="$file, $orientation"}
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
{{else}}
|
||||
<div class='ipsPad_half'>
|
||||
<p class='ipsType_reset'>{lang="no_new_files"}</p>
|
||||
{{endif}}
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}
|
||||
{{else}}
|
||||
{{if \count( $files )}}
|
||||
<div class='ipsPad'>
|
||||
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots>
|
||||
<div class='ipsCarousel_inner'>
|
||||
<ul class='cDownloadsCarousel' data-role="carouselItems">
|
||||
{{foreach $files as $idx => $file}}
|
||||
{template="indexBlock" group="browse" app="downloads" params="$file"}
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
</div>
|
||||
<span class='ipsCarousel_shadow ipsCarousel_shadowLeft'></span>
|
||||
<span class='ipsCarousel_shadow ipsCarousel_shadowRight'></span>
|
||||
<a href='#' class='ipsCarousel_nav ipsHide' data-action='prev'><i class='fa fa-chevron-left'></i></a>
|
||||
<a href='#' class='ipsCarousel_nav ipsHide' data-action='next'><i class='fa fa-chevron-right'></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class='ipsPad'>
|
||||
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots>
|
||||
<div class='ipsCarousel_inner'>
|
||||
<ul class='cDownloadsCarousel' data-role="carouselItems">
|
||||
{{foreach $files as $idx => $file}}
|
||||
{template="indexBlock" group="browse" app="downloads" params="$file"}
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
</div>
|
||||
<span class='ipsCarousel_shadow ipsCarousel_shadowLeft'></span>
|
||||
<span class='ipsCarousel_shadow ipsCarousel_shadowRight'></span>
|
||||
<a href='#' class='ipsCarousel_nav ipsHide' data-action='prev'><i class='fa fa-chevron-left'></i></a>
|
||||
<a href='#' class='ipsCarousel_nav ipsHide' data-action='next'><i class='fa fa-chevron-right'></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<p class='ipsType_reset'>{lang="no_new_files"}</p>
|
||||
{{endif}}
|
||||
@@ -2820,8 +2981,8 @@
|
||||
{{endif}}
|
||||
</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( NULL, NULL, $file->isAnonymous() )"}</span><br>
|
||||
<div class='ipsType_break ipsContained'><a href="{$file->url( "getPrefComment" )}" title='{lang="view_this_file" sprintf="$file->name"}' class='ipsDataItem_title'>{$file->name}</a></div>
|
||||
<span class='ipsType_light ipsType_blendLinks ipsType_break'>{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}}
|
||||
@@ -3327,7 +3488,17 @@ html[dir="rtl"] #elDownloadStatsLatest > .ipsWidget_latestItem {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
]]></css>
|
||||
|
||||
.ipsFluidGrid--downloads{
|
||||
padding: var(--sp-6);
|
||||
--FluidGrid--width: 280px;
|
||||
--FluidGrid--gap: var(--sp-9) var(--sp-7);
|
||||
}
|
||||
|
||||
.ipsFluidGrid--downloads .ipsThumb{
|
||||
width: 100%;
|
||||
max-width: none;
|
||||
}]]></css>
|
||||
<css css_location="front" css_app="downloads" css_attributes="" css_path="." css_name="embed.css">.cFilePrice {
|
||||
color: rgb( var(--theme-price) );
|
||||
text-transform: uppercase;
|
||||
|
||||
@@ -529,5 +529,19 @@
|
||||
"107504": "4.7.5",
|
||||
"107505": "4.7.5",
|
||||
"107600": "4.7.6 Beta 1",
|
||||
"107601": "4.7.6"
|
||||
"107601": "4.7.6",
|
||||
"107602": "4.7.6",
|
||||
"107620": "4.7.7 Beta 1",
|
||||
"107621": "4.7.7 Beta 2",
|
||||
"107622": "4.7.7 Beta 2",
|
||||
"107623": "4.7.7 Beta 3",
|
||||
"107624": "4.7.7 Beta 4",
|
||||
"107625": "4.7.7",
|
||||
"107626": "4.7.7",
|
||||
"107627": "4.7.7",
|
||||
"107628": "4.7.7",
|
||||
"107640": "4.7.8 Beta 1",
|
||||
"107641": "4.7.8 Beta 2",
|
||||
"107642": "4.7.8 Beta 3",
|
||||
"107643": "4.7.8"
|
||||
}
|
||||
@@ -41,12 +41,14 @@ class _settings extends \IPS\Dispatcher\Controller
|
||||
|
||||
if ( $values = $form->values( TRUE ) )
|
||||
{
|
||||
$this->_saveSettingsForm( $form, $values );
|
||||
$this->_saveSettingsForm( $form, $values, $redirectMessage );
|
||||
|
||||
/* Clear guest page caches */
|
||||
\IPS\Data\Cache::i()->clearAll();
|
||||
|
||||
\IPS\Session::i()->log( 'acplogs__downloads_settings' );
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=downloads&module=downloads&controller=settings' ), $redirectMessage );
|
||||
|
||||
}
|
||||
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('settings');
|
||||
@@ -99,6 +101,13 @@ class _settings extends \IPS\Dispatcher\Controller
|
||||
$form->add( new \IPS\Helpers\Form\Stack( 'idm_link_blacklist', explode( ',', \IPS\Settings::i()->idm_link_blacklist ), FALSE, array( 'placeholder' => 'example.com' ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'idm_antileech', \IPS\Settings::i()->idm_antileech ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'idm_rss', \IPS\Settings::i()->idm_rss ) );
|
||||
$form->add( new \IPS\Helpers\Form\Radio( 'idm_default_view', \IPS\Settings::i()->idm_default_view, FALSE, array(
|
||||
'options' => array(
|
||||
'table' => 'downloads_default_view_table',
|
||||
'grid' => 'downloads_default_view_grid',
|
||||
),
|
||||
) ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'idm_default_view_choose', \IPS\Settings::i()->idm_default_view_choose ) );
|
||||
|
||||
if ( \IPS\Application::appIsEnabled( 'nexus' ) )
|
||||
{
|
||||
@@ -120,8 +129,9 @@ class _settings extends \IPS\Dispatcher\Controller
|
||||
*
|
||||
* @param \IPS\Helpers\Form $form The Form Object
|
||||
* @param array $values Values
|
||||
* @param string $redirectMessage Message to show on redirect
|
||||
*/
|
||||
protected function _saveSettingsForm( \IPS\Helpers\Form $form, array $values )
|
||||
protected function _saveSettingsForm( \IPS\Helpers\Form $form, array $values, ?string &$redirectMessage )
|
||||
{
|
||||
/* We can't store '' for idm_nexus_display as it will fall back to the default */
|
||||
if ( \IPS\Application::appIsEnabled( 'nexus' ) and !$values['idm_nexus_display'] )
|
||||
@@ -141,11 +151,11 @@ class _settings extends \IPS\Dispatcher\Controller
|
||||
\IPS\Db::i()->delete( 'core_queue', array( '`app`=? OR `key`=?', 'downloads', 'RebuildScreenshotWatermarks' ) );
|
||||
|
||||
\IPS\Task::queue( 'downloads', 'RebuildScreenshotWatermarks', array( ), 5 );
|
||||
\IPS\Output::i()->inlineMessage = \IPS\Member::loggedIn()->language()->addToStack('download_settings_saved_rebuilding');
|
||||
$redirectMessage = 'download_settings_saved_rebuilding';
|
||||
}
|
||||
else
|
||||
{
|
||||
\IPS\Output::i()->inlineMessage = \IPS\Member::loggedIn()->language()->addToStack('saved');
|
||||
$redirectMessage ='saved';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -258,4 +258,24 @@ class _browse extends \IPS\Dispatcher\Controller
|
||||
\IPS\Output::i()->breadcrumb[] = array( \IPS\Http\Url::internal( 'app=downloads&module=downloads&controller=browse&do=categories', 'front', 'downloads_categories' ), \IPS\Member::loggedIn()->language()->addToStack('download_categories') );
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'browse' )->categories();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the viewing method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function setMethod()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
$method = ( isset( \IPS\Request::i()->method ) ) ? \IPS\Request::i()->method : \IPS\Settings::i()->idm_default_view;
|
||||
|
||||
\IPS\Request::i()->setCookie( 'idm_category_view', $method, ( new \IPS\DateTime )->add( new \DateInterval( 'P1Y' ) ) );
|
||||
|
||||
if ( \IPS\Member::loggedIn()->member_id )
|
||||
{
|
||||
\IPS\Db::i()->replace( 'downloads_view_method', array( 'member_id' => \IPS\Member::loggedIn()->member_id, 'method' => $method ) );
|
||||
}
|
||||
\IPS\Output::i()->redirect( \IPS\downloads\Category::load( \IPS\Request::i()->id )->url() );
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,7 @@ class _pending extends \IPS\Content\Controller
|
||||
/**
|
||||
* [Content\Controller] Class
|
||||
*/
|
||||
protected static $contentModel = 'IPS\downloads\File\PendingVersion';
|
||||
protected static $contentModel = \IPS\downloads\File\PendingVersion::class;
|
||||
|
||||
/**
|
||||
* @brief Storage for loaded file
|
||||
@@ -55,7 +55,7 @@ class _pending extends \IPS\Content\Controller
|
||||
throw new \OutOfRangeException;
|
||||
}
|
||||
|
||||
if ( !$this->version->canUnhide() )
|
||||
if ( !$this->version->canUnhide() AND !$this->version->canDelete())
|
||||
{
|
||||
\IPS\Output::i()->error( 'node_error', '2D417/1', 404, '' );
|
||||
}
|
||||
@@ -167,4 +167,23 @@ class _pending extends \IPS\Content\Controller
|
||||
|
||||
return parent::moderate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used to allow pending version approval for authors
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function delete()
|
||||
{
|
||||
if( !$this->version->canDelete())
|
||||
{
|
||||
\IPS\Output::i()->error( 'file_version_pending_cannot_delete', '2D417/4', 403, '' ); //TODO error code
|
||||
}
|
||||
/* Make sure the user confirmed the deletion */
|
||||
\IPS\Request::i()->confirmedDelete();
|
||||
|
||||
$this->version->delete();
|
||||
\IPS\Session::i()->modLog( 'modlog__action_deletedpending', array( (string) $this->file->url() => FALSE, $this->file->name => FALSE ), $this->file );
|
||||
\IPS\Output::i()->redirect( $this->file->url() , 'deleted');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107602,
|
||||
"name": "4.7.6",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107620,
|
||||
"name": "4.7.7 Beta 1",
|
||||
"steps": {
|
||||
"queries": true,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": true,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": true,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"global\/\/dev\/js\/\/library\/"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"1": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"downloads_files",
|
||||
{
|
||||
"name": "file_last_comment_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107621,
|
||||
"name": "4.7.7 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107622,
|
||||
"name": "4.7.7 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107623,
|
||||
"name": "4.7.7 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,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107624,
|
||||
"name": "4.7.7 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,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107625,
|
||||
"name": "4.7.7",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107626,
|
||||
"name": "4.7.7",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107627,
|
||||
"name": "4.7.7",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107628,
|
||||
"name": "4.7.7",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"added": [
|
||||
"app=downloads&module=downloads&controller=settings&searchResult=form_idm_gridview"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107640,
|
||||
"name": "4.7.8 Beta 1",
|
||||
"steps": {
|
||||
"queries": true,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": true,
|
||||
"settings": true,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"idm_default_view",
|
||||
"idm_default_view_choose",
|
||||
"downloads_default_view_table",
|
||||
"downloads_default_view_grid",
|
||||
"downloads_default_view_choose",
|
||||
"downloads_default_view_choose_desc",
|
||||
"downloads_default_view_choose_none",
|
||||
"webhook_downloads_new_version"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"1": {
|
||||
"method": "createTable",
|
||||
"params": [
|
||||
{
|
||||
"name": "downloads_view_method",
|
||||
"columns": {
|
||||
"member_id": {
|
||||
"name": "member_id",
|
||||
"type": "BIGINT",
|
||||
"length": "20",
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": 0,
|
||||
"comment": "ID Number",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
},
|
||||
"method": {
|
||||
"name": "method",
|
||||
"type": "VARCHAR",
|
||||
"length": 16,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": "table",
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"uniquemember": {
|
||||
"type": "unique",
|
||||
"name": "uniquemember",
|
||||
"columns": [
|
||||
"member_id"
|
||||
],
|
||||
"length": [
|
||||
null
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"added": [
|
||||
"idm_default_view",
|
||||
"idm_default_view_choose"
|
||||
],
|
||||
"edited": [
|
||||
"idm_highest_rated_categories",
|
||||
"idm_newest_categories",
|
||||
"idm_show_most_downloaded_categories"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [
|
||||
"front\/browse\/fileGrid",
|
||||
"front\/browse\/tableRow",
|
||||
"front\/browse\/viewChange"
|
||||
],
|
||||
"edited": [
|
||||
"front\/browse\/categoryButtons",
|
||||
"front\/browse\/rows",
|
||||
"front\/global\/embedFile",
|
||||
"front\/view\/view",
|
||||
"front\/widgets\/downloadsCommentFeed",
|
||||
"front\/widgets\/downloadsReviewFeed",
|
||||
"front\/widgets\/downloadStats",
|
||||
"front\/widgets\/fileFeed",
|
||||
"front\/widgets\/fileRow"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/downloads.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107641,
|
||||
"name": "4.7.8 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,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107642,
|
||||
"name": "4.7.8 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,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107643,
|
||||
"name": "4.7.8",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -825,7 +825,7 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
|
||||
|
||||
if( $club->type == 'closed' )
|
||||
{
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'club_node_public', $this->id ? $this->isPublic() : FALSE ) );
|
||||
$form->add( new \IPS\Helpers\Form\Radio( 'club_node_public', $this->id ? $this->isPublic() : 0, TRUE, array( 'options' => array( '0' => 'club_node_public_no', '1' => 'club_node_public_view', '2' => 'club_node_public_participate' ) ) ) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -902,4 +902,41 @@ class _Category extends \IPS\Node\Model implements \IPS\Node\Permissions
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the member's view method
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getMemberView()
|
||||
{
|
||||
$method = ( isset( \IPS\Request::i()->cookie['idm_category_view'] ) ) ? \IPS\Request::i()->cookie['idm_category_view'] : NULL;
|
||||
$chooseable = \IPS\Settings::i()->idm_default_view_choose;
|
||||
|
||||
if ( ! $chooseable or !\IPS\Member::loggedIn()->member_id )
|
||||
{
|
||||
return \IPS\Settings::i()->idm_default_view;
|
||||
}
|
||||
|
||||
if ( ! $method )
|
||||
{
|
||||
try
|
||||
{
|
||||
$method = \IPS\Db::i()->select( 'method', 'downloads_view_method', array( 'member_id=?', \IPS\Member::loggedIn()->member_id ) )->first();
|
||||
}
|
||||
catch( \UnderFlowException $e )
|
||||
{
|
||||
$method = \IPS\Settings::i()->idm_default_view;
|
||||
}
|
||||
/* Attempt to set the cookie again */
|
||||
\IPS\Request::i()->setCookie( 'idm_category_view', $method, ( new \IPS\DateTime )->add( new \DateInterval( 'P1Y' ) ) );
|
||||
}
|
||||
|
||||
if ( ! $method or !$chooseable )
|
||||
{
|
||||
$method = \IPS\Settings::i()->idm_default_view;
|
||||
}
|
||||
|
||||
return $method;
|
||||
}
|
||||
}
|
||||
@@ -122,7 +122,7 @@ class _Field extends \IPS\CustomField
|
||||
|
||||
|
||||
unset( $form->elements['']['pf_search_type'] );
|
||||
\IPS\Member::loggedIn()->language()->words['pfield_displayoptions'] = \IPS\Member::loggedIn()->language()->addToStack('field_displayoptions');
|
||||
\IPS\Member::loggedIn()->language()->words['field_displayoptions'] = \IPS\Member::loggedIn()->language()->addToStack('pfield_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' ) );
|
||||
|
||||
@@ -152,7 +152,7 @@ class _Field extends \IPS\CustomField
|
||||
if ( \IPS\Application::appIsEnabled( 'forums' ) AND isset( $values['cf_topic'] ) )
|
||||
{
|
||||
/* Forcibly disable include in topic option if it is a paid field */
|
||||
$values['topic'] = ( isset( $values['downloads_field_paid'] ) AND $values['downloads_field_paid'] ) ? $values['cf_topic'] : 0;
|
||||
$values['topic'] = ( isset( $values['downloads_field_paid'] ) AND $values['downloads_field_paid'] ) ? 0 : $values['cf_topic'];
|
||||
unset( $values['cf_topic'] );
|
||||
}
|
||||
|
||||
|
||||
@@ -81,11 +81,6 @@ class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory,
|
||||
* @brief [Content] Key for hide reasons
|
||||
*/
|
||||
public static $hideLogKey = 'downloads-files';
|
||||
|
||||
/**
|
||||
* @brief Whether to track the sentiment scores in cloud_sentiment_scores for this content
|
||||
*/
|
||||
public $trackSentimentScore = true;
|
||||
|
||||
/**
|
||||
* Get URL for doing stuff
|
||||
|
||||
@@ -113,7 +113,8 @@ class _File extends \IPS\Content\Item implements
|
||||
'edit_member_name' => 'edit_name',
|
||||
'edit_show' => 'append_edit',
|
||||
'edit_reason' => 'edit_reason',
|
||||
'is_anon' => 'is_anon'
|
||||
'is_anon' => 'is_anon',
|
||||
'last_comment_anon' => 'last_comment_anon'
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -2416,6 +2417,7 @@ class _File extends \IPS\Content\Item implements
|
||||
$this->_primaryScreenshotThumb = FALSE;
|
||||
$this->syncTopic();
|
||||
}
|
||||
\IPS\Api\Webhook::fire( 'downloads_new_version', array( $this ) );
|
||||
}
|
||||
|
||||
/* !Embeddable */
|
||||
@@ -2740,4 +2742,25 @@ class _File extends \IPS\Content\Item implements
|
||||
|
||||
return parent::modAction( $action, $member, $reason, $immediately );
|
||||
}
|
||||
|
||||
/**
|
||||
* Can the member delete the pending version
|
||||
*
|
||||
* @param \IPS\Member|NULL $member
|
||||
* @return bool
|
||||
*/
|
||||
public function canDeletePendingVersion( \IPS\Member $member = NULL): bool
|
||||
{
|
||||
if( !$this->hasPendingVersion() )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if( $this->canEdit($member) )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
@@ -109,6 +109,29 @@ class _PendingVersion extends \IPS\Content\Item implements \IPS\Content\Hideable
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can delete pending version?
|
||||
*
|
||||
* @param \IPS\Member|NULL $member The member to check for (NULL for currently logged in member)
|
||||
* @return bool
|
||||
*/
|
||||
public function canDelete( $member=NULL )
|
||||
{
|
||||
|
||||
$member = $member ?: \IPS\Member::loggedIn();
|
||||
if( !$member->member_id )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if( !$this->author()->member_id == $member->member_id AND !$this->file()->canDeletePendingVersion( $member ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the content
|
||||
@@ -288,6 +311,7 @@ class _PendingVersion extends \IPS\Content\Item implements \IPS\Content\Hideable
|
||||
{
|
||||
/* Moderator log */
|
||||
\IPS\Session::i()->modLog( 'modlog__action_newversion_approved', array( (string) $this->file()->url() => FALSE, $this->file()->name => FALSE ), $this->file() );
|
||||
\IPS\Api\Webhook::fire( 'downloads_new_version_approved', $this );
|
||||
}
|
||||
|
||||
return parent::modAction( $action, $member, $reason, $immediately );
|
||||
|
||||
@@ -85,11 +85,6 @@ class _Review extends \IPS\Content\Review implements \IPS\Content\EditHistory, \
|
||||
* @brief [Content] Key for hide reasons
|
||||
*/
|
||||
public static $hideLogKey = 'downloads-files-rev';
|
||||
|
||||
/**
|
||||
* @brief Whether to track the sentiment scores in cloud_sentiment_scores for this content
|
||||
*/
|
||||
public $trackSentimentScore = true;
|
||||
|
||||
/**
|
||||
* Get URL for doing stuff
|
||||
|
||||
Reference in new issue
Block a user