Version 4.3.0

This commit is contained in:
Neo committed 2025-12-19 05:47:12 -08:00
1 parent 96997ddd8e
commit fe1acf984a
1349 files changed
+116159 -67711

No files matched your search

+251 -152
View File
@@ -1,23 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<theme name="Default" author_name="Invision Power Services, Inc" author_url="https://www.invisioncommunity.com">
<template template_group="browse" template_name="categories" template_data="" template_location="front" template_app="downloads"><![CDATA[{{if !\IPS\Request::i()->isAjax()}}
<div class="ipsPageHeader ipsPad_half ipsClearfix ipsSpacer_bottom" id='elDownloadersHeader' data-ipsSticky data-ipsSticky-disableIn='phone'>
<h1 class="ipsType_pageTitle">{lang="__app_downloads"} &nbsp;&nbsp;<a href='#elDownloadsCategories_menu' data-ipsMenu data-ipsMenu-appendTo='#elDownloadersHeader' id='elDownloadsCategories' class='ipsButton ipsButton_light ipsButton_small'><span class='ipsType_light'>{lang="downloads_category_select"}&nbsp;&nbsp;</span> {lang="all"} <i class='fa fa-caret-down'></i></a></h1>
{template="categoryMenu" group="browse" params="\IPS\downloads\Category::roots()"}
</div>
<div class='ipsBox'>
<template template_group="browse" template_name="categories" template_data="$clubsOnly=FALSE" template_location="front" template_app="downloads"><![CDATA[<div class="ipsPageHeader ipsClearfix ipsSpacer_bottom" id='elDownloadersHeader'>
<h1 class="ipsType_pageTitle">{lang="__app_downloads"}</h1>
</div>
{{if !$clubsOnly}}
<div class='ipsBox ipsSpacer_bottom'>
<h2 class='ipsType_sectionTitle ipsType_reset'>{lang="categories"}</h2>
{{endif}}
<ol class="ipsDataList ipsDataList_large">
{template="categoryRow" group="browse" params="NULL, NULL, \IPS\downloads\Category::roots()"}
</ol>
{{if !\IPS\Request::i()->isAjax()}}
</div>
{{endif}}
{{if settings.club_nodes_in_apps and $clubNodes = \IPS\downloads\Category::clubNodes()}}
<div class='ipsBox'>
<h2 class='ipsType_sectionTitle ipsType_reset'><a href="{url="app=downloads&module=downloads&controller=browse&id=clubs" seoTemplate="downloads_clubs"}">{lang="club_node_downloads"}</a></h2>
<ol class="ipsDataList ipsDataList_large">
{template="categoryRow" group="browse" params="NULL, NULL, $clubNodes"}
</ol>
</div>
{{endif}}]]></template>
<template template_group="browse" template_name="categoriesSidebar" template_data="$currentCategory=NULL" template_location="front" template_app="downloads"><![CDATA[{{if !$currentCategory or !$currentCategory->club()}}
{{$categories = $currentCategory ? $currentCategory->children() : \IPS\downloads\Category::roots();}}
{{if !\IPS\downloads\Category::theOnlyNode()}}
{{$clubNodes = $currentCategory ? array() : ( \IPS\Settings::i()->club_nodes_in_apps ? \IPS\downloads\Category::clubNodes() : array() );}}
{{if !\IPS\downloads\Category::theOnlyNode() or $clubNodes}}
<div id='elDownloadsCategoriesBlock' class='ipsWidget ipsWidget_vertical ipsBox'>
<h3 class='ipsType_sectionTitle ipsType_reset'>{{if $currentCategory}}{lang="subcategories"}{{else}}{lang="categories"}{{endif}}</h3>
<div class='ipsPad_half'>
@@ -46,6 +52,25 @@
</li>
{{endif}}
{{endforeach}}
{{if $clubNodes}}
<li>
<a href="{url="app=downloads&module=downloads&controller=browse&id=clubs" seoTemplate="downloads_clubs"}" class='ipsSideMenu_item ipsTruncate ipsTruncate_line'><span class='ipsBadge ipsBadge_style1 ipsPos_right cDownloadsCategoryCount'>{number="\IPS\downloads\Category::filesInClubNodes()"}</span><strong class='ipsType_normal'>{lang="club_node_downloads"}</strong></a>
<ul class="ipsSideMenu_list">
{{foreach $clubNodes as $idx => $subcategory}}
{{if $subcategory->open OR \IPS\Member::loggedIn()->isAdmin()}}
<li>
{{if $idx >= 5}}
<a href='{$category->url()}' class='ipsSideMenu_item'><span class='ipsType_light ipsType_small'>{lang="and_x_more" pluralize="count( $category->children() ) - 5"}</span></a>
{{break;}}
{{else}}
<a href="{$subcategory->url()}" class='ipsSideMenu_item ipsTruncate ipsTruncate_line'><strong class='ipsPos_right ipsType_small cDownloadsCategoryCount'>{number="\IPS\downloads\File::contentCount( $subcategory )"}</strong>{$subcategory->_title}</a>
{{endif}}
</li>
{{endif}}
{{endforeach}}
</ul>
</li>
{{endif}}
</ul>
<p class='ipsType_center'>
<a href='{url="app=downloads&module=downloads&controller=browse&do=categories" seoTemplate="downloads_categories"}' class=''>{lang="browse_categories_d"} &nbsp;<i class='fa fa-caret-right'></i></a>
@@ -78,24 +103,27 @@
</div>
{{endif}}
</div>
{template="categoryMenu" group="browse" params="$category->children()"}
{{if \IPS\downloads\Category::canOnAny('add') AND ( !$category OR $category->can('add') ) }}
<ul class="ipsToolList ipsToolList_horizontal ipsResponsive_hidePhone ipsClearfix ipsSpacer_both">
{template="categoryButtons" group="browse" params="\IPS\downloads\Category::canOnAny('add'), $category"}
</ul>
{{endif}}
<div data-controller='downloads.front.downloads.browse'>
{template="categoryMenu" group="browse" params="$category->children()"}
<div class='ipsBox cDownloadsCategoryTable'>
{$table|raw}
{{if \IPS\downloads\Category::canOnAny('add') AND ( !$category OR $category->can('add') ) }}
<ul class="ipsToolList ipsToolList_horizontal ipsResponsive_hidePhone ipsClearfix ipsSpacer_both">
{template="categoryButtons" group="browse" params="\IPS\downloads\Category::canOnAny('add'), $category"}
</ul>
{{endif}}
<div class='ipsBox cDownloadsCategoryTable'>
{$table|raw}
</div>
{{if \IPS\downloads\Category::canOnAny('add') AND ( !$category OR $category->can('add') ) }}
<ul class="ipsToolList ipsToolList_horizontal ipsResponsive_showPhone ipsResponsive_block ipsClearfix ipsSpacer_top">
{template="categoryButtons" group="browse" params="\IPS\downloads\Category::canOnAny('add'), $category"}
</ul>
{{endif}}
</div>
{{if \IPS\downloads\Category::canOnAny('add') AND ( !$category OR $category->can('add') ) }}
<ul class="ipsToolList ipsToolList_horizontal ipsResponsive_showPhone ipsResponsive_block ipsClearfix ipsSpacer_top">
{template="categoryButtons" group="browse" params="\IPS\downloads\Category::canOnAny('add'), $category"}
</ul>
{{endif}}
<div class='ipsResponsive_showPhone ipsResponsive_block ipsSpacer_top'>
{template="follow" app="core" group="global" params="'downloads', 'category', $category->_id, \IPS\downloads\File::containerFollowers( $category )->count( TRUE )"}
</div>
@@ -106,13 +134,27 @@
<template template_group="browse" template_name="categoryButtons" template_data="$canSubmitFiles, $currentCategory=NULL" template_location="front" template_app="downloads"><![CDATA[
{{if $canSubmitFiles AND ( !$currentCategory OR $currentCategory->can('add') ) }}
<li class='ipsToolList_primaryAction'>
{{if $currentCategory}}
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&category={$currentCategory->id}&do=submit" seoTemplate="downloads_submit"}">
{{if $currentCategory OR $currentCategory = \IPS\downloads\Category::theOnlyNode()}}
{{if \IPS\Member::loggedIn()->group['idm_bulk_submit']}}
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&category={$currentCategory->id}&_new=1" seoTemplate="downloads_submit"}" data-ipsDialog data-ipsDialog-title='{lang="submit_a_file"}' data-ipsDialog-size='narrow'>
{lang="submit_a_file"}
</a>
{{else}}
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&category={$currentCategory->id}&_new=1&do=submit" seoTemplate="downloads_submit"}">
{lang="submit_a_file"}
</a>
{{endif}}
{{else}}
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{{if $currentCategory}}{url="app=downloads&module=downloads&controller=submit&category={$currentCategory->id}&_new=1" seoTemplate="downloads_submit"}{{else}}{url="app=downloads&module=downloads&controller=submit&_new=1" seoTemplate="downloads_submit"}{{endif}}" data-ipsDialog data-ipsDialog-title='{lang="submit_a_file"}' data-ipsDialog-size='narrow'>
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&_new=1" seoTemplate="downloads_submit"}" data-ipsDialog data-ipsDialog-title='{lang="submit_a_file"}' data-ipsDialog-size='narrow'>
{lang="submit_a_file"}
</a>
{{endif}}
{lang="submit_a_file"}</a>
</li>
{{endif}}
{{if $currentCategory AND $currentCategory->last_file_id AND \IPS\Member::loggedIn()->member_id}}
<li>
<a href="{$currentCategory->url()->setQueryString( array( 'do' => 'markRead' ) )->csrf()}" title='{lang="mark_category_read_title"}' class='ipsButton ipsButton_medium ipsButton_fullWidth ipsButton_link' data-action='markCategoryRead'><i class="fa fa-check"></i> {lang="mark_category_read"}</a>
</li>
{{endif}}]]></template>
<template template_group="browse" template_name="categoryMenu" template_data="$categories" template_location="front" template_app="downloads"><![CDATA[<ul class='ipsMenu ipsMenu_auto ipsHide' id='elDownloadsCategories_menu'>
{{foreach $categories as $cat}}
@@ -126,15 +168,20 @@
]]></template>
<template template_group="browse" template_name="categoryRow" template_data="$table, $headers, $categories" template_location="front" template_app="downloads"><![CDATA[{{foreach $categories as $category}}
{{if $category->can('view') AND ( $category->open OR \IPS\Member::loggedIn()->isAdmin() )}}
{{$club = $category->club();}}
<li class="ipsDataItem ipsDataItem_responsivePhoto ipsClearfix">
<div class='ipsDataItem_icon'>
<span class='ipsItemStatus ipsItemStatus_large {{if !\IPS\downloads\File::containerUnread( $category )}}ipsItemStatus_read{{endif}}'>
<i class="fa fa-download"></i>
</span>
{{if $club}}
<img src="{{if $club->profile_photo}}{file="$club->profile_photo" extension="core_Clubs"}{{else}}{resource="default_club.png" app="core" location="global"}{{endif}}" class='ipsItemStatus ipsItemStatus_large {{if !\IPS\downloads\File::containerUnread( $category )}}ipsItemStatus_read{{endif}}'>
{{else}}
<span class='ipsItemStatus ipsItemStatus_large {{if !\IPS\downloads\File::containerUnread( $category )}}ipsItemStatus_read{{endif}}'>
<i class="fa fa-download"></i>
</span>
{{endif}}
</div>
<div class="ipsDataItem_main ipsPos_middle">
<h4 class="ipsDataItem_title ipsType_large">
<a href="{$category->url()}">{$category->_title}</a>
<a href="{$category->url()}">{{if $club}}{lang="club_node" sprintf="$club->name, $category->_title"}{{else}}{$category->_title}{{endif}}</a>
</h4>
{{if $category->hasChildren()}}
<ul class="ipsDataItem_subList ipsList_inline">
@@ -235,7 +282,7 @@
{{if !$file->isPaid() or in_array( 'downloads', explode( ',', settings.idm_nexus_display ) )}}
<li class='ipsType_normal'>
{{if $file->downloads}}
<i class='fa fa-arrow-circle-down'></i> {$file->downloads}
<i class='fa fa-arrow-circle-down'></i> {number="$file->downloads"}
{{else}}
<span class='ipsType_light'><i class='fa fa-arrow-circle-down'></i> 0</span>
{{endif}}
@@ -289,11 +336,13 @@
<h2 class='ipsType_sectionTitle ipsType_reset'>{lang="featured_downloads"}</h2>
<section id='elDownloadsFeatured'>
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-fullSizeItems data-ipsCarousel-slideshow data-ipsCarousel-shadows='false'>
<ul class='cDownloadsCarousel ipsClearfix' data-role="carouselItems">
{{foreach $featured as $file}}
{template="featuredFile" group="browse" app="downloads" params="$file"}
{{endforeach}}
</ul>
<div class='ipsCarousel_inner'>
<ul class='cDownloadsCarousel ipsClearfix' data-role="carouselItems">
{{foreach $featured as $file}}
{template="featuredFile" 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>
@@ -308,7 +357,7 @@
{{if \IPS\downloads\Category::canOnAny('add')}}
{template="categoryButtons" group="browse" params="\IPS\downloads\Category::canOnAny('add')"}
{{endif}}
{{if \IPS\downloads\Category::theOnlyNode()}}
{{if \IPS\downloads\Category::theOnlyNode() and ( !\IPS\Settings::i()->club_nodes_in_apps or !\IPS\downloads\Category::clubNodes() )}}
<li><a class='ipsButton ipsButton_link ipsButton_medium ipsButton_fullWidth' href='{expression="\IPS\downloads\Category::theOnlyNode()->url()"}'>{lang="view_all_files"}</a></li>
{{endif}}
</ul>
@@ -319,11 +368,13 @@
<div class='ipsPad_half'>
{{if count( $new )}}
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $new as $idx => $file}}
{template="indexBlock" group="browse" params="$file"}
{{endforeach}}
</ul>
<div class='ipsCarousel_inner'>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $new as $idx => $file}}
{template="indexBlock" group="browse" 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>
@@ -342,11 +393,13 @@
<div class='ipsPad_half'>
{{if count( $rated )}}
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $rated as $idx => $file}}
{template="indexBlock" group="browse" params="$file"}
{{endforeach}}
</ul>
<div class='ipsCarousel_inner'>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $rated as $idx => $file}}
{template="indexBlock" group="browse" 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>
@@ -365,11 +418,13 @@
<div class='ipsPad_half'>
{{if count( $downloaded )}}
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $downloaded as $idx => $file}}
{template="indexBlock" group="browse" params="$file"}
{{endforeach}}
</ul>
<div class='ipsCarousel_inner'>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $downloaded as $idx => $file}}
{template="indexBlock" group="browse" 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>
@@ -396,7 +451,6 @@
{{if $file->unread()}}
<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>&nbsp;
{{endif}}
<a href='{$file->url()}' title='{lang="view_this_file" sprintf="$file->name"}'>{$file->name}</a>
{{if $file->mapped('pinned') || $file->hidden() === -1 || $file->hidden() === 1}}
{{if $file->hidden() === -1}}
<span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$file->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span>
@@ -407,18 +461,19 @@
<span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span>
{{endif}}
{{endif}}
<a href='{$file->url()}' title='{lang="view_this_file" sprintf="$file->name"}'>{$file->name}</a>
</h3>
<p class='ipsType_medium ipsType_reset ipsType_blendLinks ipsTruncate ipsTruncate_line'>{lang="byline_nodate" htmlsprintf="$file->author()->link()"}</p>
{{if $file->container()->bitoptions['reviews']}}
{template="rating" group="global" location="front" app="core" params="'medium', $file->rating, \IPS\Settings::i()->reviews_rating_out_of"}
{template="rating" group="global" location="front" app="core" params="'medium', $file->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of"}
{{endif}}
<p class='ipsType_medium ipsType_reset'>
{{if $file->isPaid() and in_array( 'purchases', explode( ',', settings.idm_nexus_display ) )}}
<span {{if !$file->purchaseCount()}}class='ipsType_light'{{endif}} title='{lang="x_purchases" pluralize="$file->purchaseCount()"}' data-ipsTooltip><i class='fa fa-shopping-cart'></i> {$file->purchaseCount()}</span>&nbsp;&nbsp;
{{endif}}
{{if !$file->isPaid() or in_array( 'downloads', explode( ',', settings.idm_nexus_display ) )}}
<span {{if !$file->downloads}}class='ipsType_light'{{endif}} title='{lang="x_downloads" pluralize="$file->downloads"}' data-ipsTooltip><i class='fa fa-arrow-circle-down'></i> {$file->downloads}</span>&nbsp;&nbsp;
<span {{if !$file->downloads}}class='ipsType_light'{{endif}} title='{lang="x_downloads" pluralize="$file->downloads"}' data-ipsTooltip><i class='fa fa-arrow-circle-down'></i> {number="$file->downloads"}</span>&nbsp;&nbsp;
{{endif}}
{{if $file->container()->bitoptions['comments']}}<span {{if !$file->comments}}class='ipsType_light'{{endif}} title='{lang="num_comments" pluralize="$file->comments"}' data-ipsTooltip><i class='fa fa-comment'></i> {$file->comments}</span>{{endif}}
@@ -518,7 +573,7 @@
</p>
{{if count( $file->tags() )}}
{template="tags" group="global" app="core" params="$file->tags()"}
{template="tags" group="global" app="core" params="$file->tags(), TRUE"}
{{endif}}
</div>
<div class='ipsDataItem_generic ipsDataItem_size8'>
@@ -536,7 +591,7 @@
{{endif}}
</p>
{{endif}}
<p class='ipsType_medium'><strong>{{if $file->updated == $file->submitted}}{lang="submitted"} {datetime="$file->submitted"}{{else}}{lang="updated"} {datetime="$file->updated"}{{endif}}</strong></p>
<p class='ipsType_medium'><strong>{{if $file->updated == $file->submitted}}{lang="submitted"} {datetime="$file->submitted" lowercase="true"}{{else}}{lang="updated"} {datetime="$file->updated" lowercase="true"}{{endif}}</strong></p>
</div>
{{if method_exists( $table, 'canModerate' ) AND $table->canModerate()}}
<div class='ipsDataItem_modCheck'>
@@ -564,6 +619,8 @@
<a href='{$v->url()}' target='_blank'>{$v->name}</a> <span class="ipsType_light">({lang="num_views_with_number" pluralize="$v->views"})</span>
{{elseif $k === 'most_downloaded_file'}}
<a href='{$v->url()}' target='_blank'>{$v->name}</a> <span class="ipsType_light">({lang="num_downloads" pluralize="$v->downloads"})</span>
{{elseif $k === 'total_files' OR $k === 'total_views' OR $k === 'total_downloads'}}
{number="$v"}
{{else}}
{$v}
{{endif}}
@@ -587,25 +644,25 @@
{template="rating" group="global" location="front" app="core" params="'large', $file->rating, \IPS\Settings::i()->reviews_rating_out_of"} &nbsp;&nbsp;
{{endif}}
<span class='ipsType_reset'>{{if !$file->downloads}}<span class='ipsType_light'>{{endif}}<i class='fa fa-arrow-circle-down'></i> {$file->downloads}{{if !$file->downloads}}</span>{{endif}} {{if $file->container()->bitoptions['comments']}}&nbsp;&nbsp;{{if !$file->comments}}<span class='ipsType_light'>{{endif}}<i class='fa fa-comment'></i> {$file->comments}{{endif}}{{if !$file->comments}}</span>{{endif}}</span>
<span class='ipsType_reset'>{{if !$file->downloads}}<span class='ipsType_light'>{{endif}}<i class='fa fa-arrow-circle-down'></i> {number="$file->downloads"}{{if !$file->downloads}}</span>{{endif}} {{if $file->container()->bitoptions['comments']}}&nbsp;&nbsp;{{if !$file->comments}}<span class='ipsType_light'>{{endif}}<i class='fa fa-comment'></i> {$file->comments}{{endif}}{{if !$file->comments}}</span>{{endif}}</span>
</div>
</div>
</div>]]></template>
<template template_group="global" template_name="embedFile" template_data="$item, $url, $image=NULL" template_location="front" template_app="downloads"><![CDATA[
<div data-embedInfo-maxSize='500' class='ipsRichEmbed'>
{template="embedHeader" group="embed" app="core" params="$item, \IPS\Member::loggedIn()->language()->addToStack( 'x_created_file_in', FALSE, array( 'sprintf' => array( $item->author()->name, $item->container()->_title ) ) ), $item->mapped('date')"}
{template="embedHeader" group="embed" app="core" params="$item, \IPS\Member::loggedIn()->language()->addToStack( 'x_created_file_in', FALSE, array( 'sprintf' => array( $item->author()->name, $item->container()->_title ) ) ), $item->mapped('date'), $url"}
{{if $item->primary_screenshot_thumb}}
<div class='ipsRichEmbed_masthead ipsRichEmbed_mastheadBg cFileEmbed ipsType_center'>
<a href='{$item->url()}' title='{$item->mapped('title')}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), \IPS\File::get( 'downloads_Screenshots', $item->primary_screenshot_thumb )->url )"}") '>
<a href='{$url}' title='{$item->mapped('title')}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), \IPS\File::get( 'downloads_Screenshots', $item->primary_screenshot_thumb )->url )"}") '>
<img src='{file="$item->primary_screenshot_thumb" extension="downloads_Screenshots"}' alt="{$item->mapped('title')}" class='ipsHide'>
</a>
</div>
{{else}}
<div class='cFileEmbed ipsNoThumb ipsNoThumb_video'>&nbsp;</div>
{{endif}}
<div class='ipsPad ipsClearfix'>
<div class='ipsPad_double ipsClearfix'>
<h3 class='ipsRichEmbed_itemTitle ipsTruncate ipsTruncate_line ipsType_blendLinks'>
<a href='{$item->url()}' title="{$item->mapped('title')}">{$item->mapped('title')}</a>
<a href='{$url}' title="{$item->mapped('title')}">{$item->mapped('title')}</a>
</h3>
{{if \IPS\Application::appIsEnabled( 'nexus' ) and settings.idm_nexus_on}}
<ul class='ipsList_inline ipsType_normal ipsSpacer_bottom ipsSpacer_half'>
@@ -660,13 +717,13 @@
</div>]]></template>
<template template_group="global" template_name="embedFileComment" template_data="$comment, $item, $url" template_location="front" template_app="downloads"><![CDATA[
<div data-embedInfo-maxSize='500' class='ipsRichEmbed'>
{template="embedHeader" group="embed" app="core" params="$comment, \IPS\Member::loggedIn()->language()->addToStack( 'x_commented_file', FALSE, array( 'sprintf' => array( $comment->author()->name ) ) ), $comment->mapped('date')"}
<div class='ipsPad'>
{template="embedHeader" group="embed" app="core" params="$comment, \IPS\Member::loggedIn()->language()->addToStack( 'x_commented_file', FALSE, array( 'sprintf' => array( $comment->author()->name ) ) ), $comment->mapped('date'), $url"}
<div class='ipsPad_double'>
<div class='ipsRichEmbed_originalItem ipsAreaBackground_reset ipsSpacer_bottom ipsType_blendLinks'>
<div>
{{if $item->primary_screenshot_thumb}}
<div class='ipsRichEmbed_masthead ipsRichEmbed_mastheadBg ipsRichEmbed_mastheadBg_small cFileEmbed ipsType_center'>
<a href='{$item->url()}' title='{$item->mapped('title')}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), \IPS\File::get( 'downloads_Screenshots', $item->primary_screenshot_thumb )->url )"}") '>
<a href='{$url}' title='{$item->mapped('title')}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), \IPS\File::get( 'downloads_Screenshots', $item->primary_screenshot_thumb )->url )"}") '>
<img src='{file="$item->primary_screenshot_thumb" extension="downloads_Screenshots"}' alt="{$item->mapped('title')}" class='ipsHide'>
</a>
</div>
@@ -683,7 +740,7 @@
{$comment->truncated(TRUE)|raw}
</div>
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and count( $comment->reactions() ) and settings.reputation_enabled}}
{{if settings.reputation_enabled and \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and count( $comment->reactions() )}}
<ul class='ipsList_inline ipsSpacer_top ipsSpacer_half'>
<li>
{template="reactionOverview" app="core" group="global" params="$comment, TRUE, 'small'"}
@@ -712,19 +769,19 @@
<li {{if !$item->purchaseCount()}}class='ipsType_light'{{endif}} title="{lang="x_purchases" pluralize="$item->purchaseCount()"}"><i class='fa fa-shopping-cart'></i> {$item->purchaseCount()}</li>
{{endif}}
{{if !$item->isPaid() or in_array( 'downloads', explode( ',', settings.idm_nexus_display ) )}}
<li {{if !$item->downloads}}class='ipsType_light'{{endif}} title="{lang="num_downloads" pluralize="$item->downloads"}"><i class='fa fa-arrow-circle-down'></i> {$item->downloads}</li>
<li {{if !$item->downloads}}class='ipsType_light'{{endif}} title="{lang="num_downloads" pluralize="$item->downloads"}"><i class='fa fa-arrow-circle-down'></i> {number="$item->downloads"}</li>
{{endif}}
</ul>
]]></template>
<template template_group="global" template_name="embedFileReview" template_data="$comment, $item, $url" template_location="front" template_app="downloads"><![CDATA[
<div data-embedInfo-maxSize='500' class='ipsRichEmbed'>
{template="embedHeader" group="embed" app="core" params="$comment, \IPS\Member::loggedIn()->language()->addToStack( 'x_reviewed_file', FALSE, array( 'sprintf' => array( $comment->author()->name ) ) ), $comment->mapped('date')"}
<div class='ipsPad'>
{template="embedHeader" group="embed" app="core" params="$comment, \IPS\Member::loggedIn()->language()->addToStack( 'x_reviewed_file', FALSE, array( 'sprintf' => array( $comment->author()->name ) ) ), $comment->mapped('date'), $url"}
<div class='ipsPad_double'>
<div class='ipsRichEmbed_originalItem ipsAreaBackground_reset ipsSpacer_bottom ipsType_blendLinks'>
<div>
{{if $item->primary_screenshot_thumb}}
<div class='ipsRichEmbed_masthead ipsRichEmbed_mastheadBg ipsRichEmbed_mastheadBg_small cFileEmbed ipsType_center'>
<a href='{$item->url()}' title='{$item->mapped('title')}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), \IPS\File::get( 'downloads_Screenshots', $item->primary_screenshot_thumb )->url )"}") '>
<a href='{$url}' title='{$item->mapped('title')}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), \IPS\File::get( 'downloads_Screenshots', $item->primary_screenshot_thumb )->url )"}") '>
<img src='{file="$item->primary_screenshot_thumb" extension="downloads_Screenshots"}' alt="{$item->mapped('title')}" class='ipsHide'>
</a>
</div>
@@ -746,7 +803,7 @@
{$comment->truncated(TRUE)|raw}
</div>
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and count( $comment->reactions() ) and settings.reputation_enabled}}
{{if settings.reputation_enabled and \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and count( $comment->reactions() )}}
<ul class='ipsList_inline ipsSpacer_top ipsSpacer_half'>
<li>
{template="reactionOverview" app="core" group="global" params="$comment, TRUE, 'small'"}
@@ -755,7 +812,7 @@
{{endif}}
</div>
</div>]]></template>
<template template_group="global" template_name="link" template_data="$file" template_location="global" template_app="downloads"><![CDATA[<div class='ipsType_break ipsContained'><a href="{$file->url()}" class="ipsType_blendLinks" target="_blank" rel='noopener noreferrer'>{$file->name}</a></div>]]></template>
<template template_group="global" template_name="link" template_data="$file" template_location="global" template_app="downloads"><![CDATA[<div class='ipsType_break ipsContained'><a href="{$file->url()}" class="ipsType_blendLinks" target="_blank" rel='noopener'>{$file->name}</a></div>]]></template>
<template template_group="global" template_name="manageFollowRow" template_data="$table, $headers, $rows, $includeFirstCommentInCommentCount=TRUE" template_location="front" template_app="downloads"><![CDATA[{{if count( $rows )}}
{{foreach $rows as $row}}
{{$idField = $row::$databaseColumnId;}}
@@ -857,7 +914,7 @@
<div class='ipsColumn ipsColumn_narrow'>
<a href='{$url}'>
{{if $screenshot}}
<img src='{file="$screenshot" extension="downloads_Screenshots"}' class='ipsImage ipsStream_image'>
{template="thumbImage" group="global" app="core" location="front" params="$screenshot, $indexData['index_title'], 'medium', '', 'view_this', NULL, 'downloads_Screenshots'"}
{{else}}
<div class='ipsNoThumb ipsNoThumb_file ipsThumb_medium'></div>
{{endif}}
@@ -870,7 +927,7 @@
{{endif}}
{{if trim( $indexData['index_content'] ) !== ''}}
<div class='ipsType_richText ipsType_break ipsType_medium' {{if !( \IPS\Dispatcher::i()->application->directory == 'core' and \IPS\Dispatcher::i()->module and \IPS\Dispatcher::i()->module->key == 'search' )}}data-ipsTruncate data-ipsTruncate-type='remove' data-ipsTruncate-size='3 lines' data-ipsTruncate-watch='false'{{else}}data-searchable data-findTerm{{endif}}>
{$indexData['index_content']|raw}
{expression="\IPS\Content\Search\Result::preDisplay( $indexData['index_content'] )" raw="true"}
</div>
{{endif}}
</div>
@@ -890,7 +947,7 @@
<div class='ipsColumn ipsColumn_medium'>
<a href='{$url}'>
{{if $screenshot}}
<img src='{file="$screenshot" extension="downloads_Screenshots"}' class='ipsImage ipsStream_image' alt='{lang="idm_screenshot_for" sprintf="$indexData['index_title']"}'>
{template="thumbImage" group="global" app="core" location="front" params="$screenshot, $indexData['index_title'], 'large', '', 'view_this', NULL, 'downloads_Screenshots'"}
{{else}}
<div class='ipsNoThumb ipsThumb_small'></div>
{{endif}}
@@ -905,7 +962,7 @@
{{if trim( $indexData['index_content'] ) !== ''}}
<div class='ipsSpacer_top ipsSpacer_half ipsType_richText ipsType_break ipsType_medium' {{if !( \IPS\Dispatcher::i()->application->directory == 'core' and \IPS\Dispatcher::i()->module and \IPS\Dispatcher::i()->module->key == 'search' )}}data-ipsTruncate data-ipsTruncate-type='remove' data-ipsTruncate-size='2 lines' data-ipsTruncate-watch='false'{{else}}data-searchable data-findTerm{{endif}}>
{$indexData['index_content']|raw}
{expression="\IPS\Content\Search\Result::preDisplay( $indexData['index_content'] )" raw="true"}
</div>
{{endif}}
@@ -940,11 +997,13 @@
<section data-controller='nexus.front.store.register'>
<div class='ipsBox ipsSpacer_bottom ipsPad_half'>
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots data-role='productCarousel'>
<ul class='cNexusCarousel cNexusCategory_grid ipsClearfix' data-role="carouselItems">
{{foreach $products as $package}}
{template="packageBlock" app="nexus" group="store" params="$package, TRUE, TRUE, TRUE"}
{{endforeach}}
</ul>
<div class='ipsCarousel_inner'>
<ul class='cNexusCarousel cNexusCategory_grid ipsClearfix' data-role="carouselItems">
{{foreach $products as $package}}
{template="packageBlock" app="nexus" group="store" params="$package, TRUE, TRUE, TRUE"}
{{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>
@@ -1002,10 +1061,13 @@
</div>]]></template>
<template template_group="nexus" template_name="fileInfo" template_data="$file" template_location="front" template_app="downloads"></template>
<template template_group="nexus" template_name="filePurchaseInfo" template_data="$file" template_location="front" template_app="downloads"><![CDATA[{{if $file->container()->can( 'download' )}}
<a href='{{if settings.idm_antileech}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}' class='ipsButton ipsButton_medium ipsButton_primary' {{if $file->container()->message('disclaimer') or count( $file->files() ) > 1 or member.group['idm_wait_period']}}data-ipsDialog{{endif}}>{lang="download_now"}</a>
<a {{if $file->canView() }}href='{{if settings.idm_antileech}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}'{{endif}} class='ipsButton ipsButton_medium {{if $file->canView()}}ipsButton_primary{{else}}ipsButton_disabled{{endif}}' {{if $file->container()->message('disclaimer') or count( $file->files() ) > 1 or member.group['idm_wait_period']}}data-ipsDialog{{endif}}>{lang="download_now"}</a>
{{endif}}
{{if $file->container()->can( 'view' )}}
<a href='{$file->url()}' class='ipsButton ipsButton_medium ipsButton_alternate'>{lang="file_view_details"}</a>
<a {{if $file->canView() }}href='{$file->url()}'{{endif}} class='ipsButton ipsButton_medium {{if $file->canView()}}ipsButton_alternate{{else}}ipsButton_disabled{{endif}}'>{lang="file_view_details"}</a>
{{endif}}
{{if !$file->canView()}}
<p class='ipsType_light'>{lang="nexus_file_no_longer_available"}</p>
{{endif}}]]></template>
<template template_group="stats" template_name="downloadsTable" template_data="$select, $pagination, $members" template_location="admin" template_app="downloads"><![CDATA[
{{if trim( $pagination )}}
@@ -1040,11 +1102,12 @@
<div class="ipsPad_half ipsAreaBackground">
{lang="download_graph_disclaimer"}
</div>]]></template>
<template template_group="stats" template_name="information" template_data="$table" template_location="admin" template_app="downloads"><![CDATA[{$table|raw}
<br>
<div class="ipsPad_half ipsType_light">
<template template_group="stats" template_name="information" template_data="$member, $table" template_location="admin" template_app="downloads"><![CDATA[{$table|raw}
<div class="ipsPad_half ipsType_light ipsType_small">
{lang="download_stats_disclaimer"}
</div>]]></template>
<template template_group="stats" template_name="link" template_data="$member, $type, $lang" template_location="admin" template_app="downloads"><![CDATA[
&nbsp;&nbsp;<a href="{url="app=core&module=members&controller=members&do=editBlock&block=IPS\\downloads\\extensions\\core\\MemberACPProfileContentTab\\Downloads&id={$member->member_id}&chart={$type}"}" data-ipsDialog data-ipsDialog-title="{lang="$lang"}">({lang="$lang"})</a>]]></template>
<template template_group="stats" template_name="submittersTable" template_data="$select, $pagination, $members" template_location="admin" template_app="downloads"><![CDATA[
{{if trim( $pagination )}}
{$pagination|raw}
@@ -1096,7 +1159,7 @@
{{endif}}
<form accept-charset='utf-8' method="post" action="{$form->action}" enctype="multipart/form-data" id='elDownloadsSubmit' data-ipsForm>
<form accept-charset='utf-8' method="post" action="{$form->action}" enctype="multipart/form-data" id='elDownloadsSubmit' data-ipsForm data-ipsFormSubmit>
<input type="hidden" name="{$form->id}_submitted" value="1">
{{foreach $form->hiddenValues as $k => $v}}
<input type="hidden" name="{$k}" value="{$v}">
@@ -1139,13 +1202,14 @@
</div>]]></template>
<template template_group="submit" template_name="newVersion" template_data="$form, $versioning" template_location="front" template_app="downloads"><![CDATA[<div class='ipsPageHeader ipsSpacer_bottom'>
<h1 class='ipsType_pageTitle'>{lang="upload_new_version"}</h1>
{{if $versioning and !member.group['idm_bypass_revision']}}
<div class='ipsLayout_contentSection ipsType_textBlock ipsType_normal'>
{lang="new_version_versioning"}
</div>
<br>
{{endif}}
</div>
{{if $versioning and !member.group['idm_bypass_revision']}}
<div class='ipsLayout_contentSection ipsType_textBlock ipsType_normal'>
{lang="new_version_versioning"}
</div>
<br>
{{endif}}
{$form|raw}]]></template>
<template template_group="submit" template_name="submitForm" template_data="$form, $category, $terms, $bulk=0" template_location="front" template_app="downloads"><![CDATA[
{{$nonInfoFields = array('files', 'import_files', 'url_files', 'screenshots', 'url_screenshots');}}
@@ -1166,7 +1230,7 @@
{{endif}}
<form accept-charset='utf-8' method="post" action="{$form->action}" id='elDownloadsSubmit' enctype="multipart/form-data" {{if $category->bitoptions['allowss'] AND $category->bitoptions['reqss']}}data-screenshotsReq='1'{{endif}} {{if $bulk}}data-bulkUpload='1'{{endif}} data-ipsForm data-controller='downloads.front.submit.main'>
<form accept-charset='utf-8' method="post" action="{$form->action}" id='elDownloadsSubmit' enctype="multipart/form-data" {{if $category->bitoptions['allowss'] AND $category->bitoptions['reqss']}}data-screenshotsReq='1'{{endif}} {{if $bulk}}data-bulkUpload='1'{{endif}} data-ipsForm data-ipsFormSubmit data-controller='downloads.front.submit.main'>
<input type="hidden" name="{$form->id}_submitted" value="1">
{{foreach $form->hiddenValues as $k => $v}}
<input type="hidden" name="{$k}" value="{$v}">
@@ -1444,7 +1508,7 @@
{{endforeach}}
{{if $uploadField}}
<input type="hidden" name="MAX_FILE_SIZE" value="{$uploadField}">
<input type="hidden" name="plupload" value="{expression="md5( uniqid() )"}">
<input type="hidden" name="plupload" value="{expression="md5( mt_rand() )"}">
{{endif}}
<div class='ipsAreaBackground_light ipsPad'>
<h2 class='ipsType_sectionHead'>{lang="write_review"}</h2>
@@ -1462,13 +1526,15 @@
</ul>
</div>
</form>]]></template>
<template template_group="view" template_name="comments" template_data="$file" template_location="front" template_app="downloads"><![CDATA[
<div data-controller='core.front.core.commentFeed, core.front.core.ignoredComments' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='comments' data-baseURL='{$file->url()}' {{if $file->isLastPage()}}data-lastPage{{endif}} data-feedID='file-{$file->id}' id='comments'>
<template template_group="view" template_name="comments" template_data="$file" template_location="front" template_app="downloads"><![CDATA[<div data-controller='core.front.core.commentFeed, core.front.core.ignoredComments' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='comments' data-baseURL='{$file->url()}' {{if $file->isLastPage()}}data-lastPage{{endif}} data-feedID='file-{$file->id}' id='comments'>
{template="featuredComments" group="global" app="core" params="$file->featuredComments(), $file->url()->setQueryString( 'tab', 'comments' )->setQueryString( 'recommended', 'comments' )"}
{template="commentMultimodHeader" app="core" group="global" params="$file, '#comments'"}
{{if $file->commentPageCount() > 1}}
{$file->commentPagination( array( 'tab' ) )|raw}
<br><br>
{{endif}}
{template="featuredComments" group="global" app="core" params="$file->featuredComments(), $file->url()->setQueryString( 'tab', 'comments' )->setQueryString( 'recommended', 'comments' )"}
<div data-role='commentFeed' data-controller='core.front.core.moderation'>
{{if count( $file->comments( NULL, NULL, 'date', 'asc', NULL, NULL, NULL, NULL, FALSE, isset( \IPS\Request::i()->showDeleted ) ) )}}
<form action="{$file->url()->csrf()->setQueryString( 'do', 'multimodComment' )}" method="post" data-ipsPageAction data-role='moderationTools'>
@@ -1492,7 +1558,7 @@
<hr class='ipsHr'>
{$file->commentPagination( array( 'tab' ) )|raw}
{{endif}}
{{if $file->commentForm() || $file->locked() || \IPS\Member::loggedin()->restrict_post || \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings']}}
{{if $file->commentForm() || $file->locked() || \IPS\Member::loggedin()->restrict_post || \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings'] || !\IPS\Member::loggedIn()->checkPostsPerDay()}}
<div class='ipsAreaBackground ipsPad ipsSpacer_top' data-role='replyArea'>
{{if $file->commentForm()}}
{{if $file->locked()}}
@@ -1506,6 +1572,8 @@
{template="commentUnavailable" group="forms" location="front" app="core" params="'restricted_cannot_comment', \IPS\Member::loggedIn()->warnings(5,NULL,'rpa'), \IPS\Member::loggedIn()->restrict_post"}
{{elseif \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings']}}
{template="commentUnavailable" group="forms" location="front" app="core" params="'unacknowledged_warning_cannot_post', \IPS\Member::loggedIn()->warnings( 1, FALSE )"}
{{elseif !\IPS\Member::loggedIn()->checkPostsPerDay()}}
{template="commentUnavailable" group="forms" location="front" app="core" params="'member_exceeded_posts_per_day'"}
{{endif}}
{{endif}}
</div>
@@ -1520,7 +1588,16 @@
</div>]]></template>
<template template_group="view" template_name="downloadButton" template_data="$file" template_location="front" template_app="downloads"><![CDATA[
<li>
<a href='{{if settings.idm_antileech}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}' class='ipsButton ipsButton_fullWidth ipsButton_large ipsButton_important' {{if $file->container()->message('disclaimer') or count( $file->files() ) > 1 or member.group['idm_wait_period']}}data-ipsDialog{{endif}}>{lang="download_now"}</a>
{{if !$file->canDownload()}}
{{if !\IPS\Member::loggedIn()->member_id}}
<span class="ipsType_light ipsType_blendLinks ipsResponsive_hidePhone ipsResponsive_inline"><i class="fa fa-info-circle"></i> {lang="download_no_permission_guest"}</span>
<a href='{url="app=core&module=system&controller=login" seoTemplate="login"}' class='ipsButton ipsButton_light ipsButton_medium ipsButton_fullWidth ipsSpacer_top'>{lang="sign_in_short"}</a>
{{else}}
<span class="ipsType_light ipsType_blendLinks ipsResponsive_hidePhone ipsResponsive_inline"><i class="fa fa-info-circle"></i> {lang="download_no_permission"}</span>
{{endif}}
{{else}}
<a href='{{if settings.idm_antileech}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}' class='ipsButton ipsButton_fullWidth ipsButton_large ipsButton_important' {{if $file->container()->message('disclaimer') or count( $file->files() ) > 1 or member.group['idm_wait_period']}}data-ipsDialog{{endif}}>{lang="download_now"}</a>
{{endif}}
</li>
]]></template>
<template template_group="view" template_name="downloadSidebar" template_data="$file" template_location="front" template_app="downloads"></template>
@@ -1617,7 +1694,8 @@
{{endforeach}}
</ul>
</div>]]></template>
<template template_group="view" template_name="reviews" template_data="$file" template_location="front" template_app="downloads"><![CDATA[<div data-controller='core.front.core.commentFeed' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='reviews' data-baseURL='{$file->url()}' {{if $file->isLastPage('reviews')}}data-lastPage{{endif}} data-feedID='file-{$file->id}-reviews' id='reviews'>
<template template_group="view" template_name="reviews" template_data="$file" template_location="front" template_app="downloads"><![CDATA[
<div data-controller='core.front.core.commentFeed' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='reviews' data-baseURL='{$file->url()}' {{if $file->isLastPage('reviews')}}data-lastPage{{endif}} data-feedID='file-{$file->id}-reviews' id='reviews'>
{{if $file->reviewForm()}}
{{if $file->locked()}}
<strong class='ipsType_warning'><i class='fa fa-info-circle'></i> {lang="item_locked_can_review"}</strong>
@@ -1645,6 +1723,7 @@
{{if count( $file->reviews( NULL, NULL, NULL, 'desc', NULL, NULL, NULL, NULL, isset( \IPS\Request::i()->showDeleted ) ) )}}
{{if !$file->hasReviewed()}}<hr class='ipsHr'>{{endif}}
<div class="ipsClearfix ipsSpacer_bottom">
{template="commentMultimodHeader" app="core" group="global" params="$file, '#reviews', 'review'"}
{{if $file->reviewPageCount() > 1}}
<div class="ipsPos_left ipsResponsive_noFloat">
{$file->reviewPagination( array( 'tab', 'sort' ) )|raw}
@@ -1712,6 +1791,9 @@
{{elseif $file->hidden() === -2}}
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$file->deletedBlurb()}'><i class='fa fa-trash'></i></span></span>
{{endif}}
{{if $file->mapped('pinned')}}
<span><span class="ipsBadge 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_icon ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span></span>
{{endif}}
@@ -1750,28 +1832,30 @@
</div>
<hr class='ipsHr ipsResponsive_hidePhone'>
<div class='ipsPhotoPanel ipsPhotoPanel_tiny ipsClearfix ipsSpacer_bottom'>
{template="userPhoto" app="core" group="global" params="$file->author(), 'tiny', $file->warningRef()"}
<div>
<p class='ipsType_reset ipsType_large ipsType_blendLinks'>
{lang="byline_nodate_itemprop" htmlsprintf="$file->author()->link( $file->warningRef() )"}{{if member.group['idm_view_approvers'] and $file->approver}} {lang="file_approved_by" sprintf="\IPS\Member::load( $file->approver )->name" htmlsprintf="\IPS\DateTime::ts( $file->approvedon )->html()"}{{endif}}
</p>
{{if $file->author()->member_id OR $file->canChangeAuthor()}}
<ul class='ipsList_inline'>
{{if $file->author()->member_id}}
<li><a href='{url="app=core&module=members&controller=profile&id={$file->author()->member_id}&do=content&type=downloads_file" base="front" seoTitles="$file->author()->members_seo_name" seoTemplate="profile_content"}'>{lang="find_users_files"}</a></li>
<div class='ipsBox_alt'>
<div class='ipsPhotoPanel ipsPhotoPanel_tiny ipsClearfix ipsSpacer_bottom'>
{template="userPhoto" app="core" group="global" params="$file->author(), 'tiny', $file->warningRef()"}
<div>
<p class='ipsType_reset ipsType_large ipsType_blendLinks'>
{lang="byline_nodate_itemprop" htmlsprintf="$file->author()->link( $file->warningRef() )"}{{if member.group['idm_view_approvers'] and $file->approver}} {lang="file_approved_by" sprintf="\IPS\Member::load( $file->approver )->name" htmlsprintf="\IPS\DateTime::ts( $file->approvedon )->html()"}{{endif}}
</p>
{{if $file->author()->member_id OR $file->canChangeAuthor()}}
<ul class='ipsList_inline'>
{{if $file->author()->member_id}}
<li><a href='{url="app=core&module=members&controller=profile&id={$file->author()->member_id}&do=content&type=downloads_file" base="front" seoTitles="$file->author()->members_seo_name" seoTemplate="profile_content"}'>{lang="find_users_files"}</a></li>
{{endif}}
{{if $file->canChangeAuthor()}}
<li><a href='{$file->url()->setQueryString( array( 'do' => 'changeAuthor' ) )}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title="{lang="change_author_d"}" title='{lang="change_author_title"}'>{lang="change_author_d"}</a></li>
{{endif}}
</ul>
{{endif}}
{{if $file->canChangeAuthor()}}
<li><a href='{$file->url()->setQueryString( array( 'do' => 'changeAuthor' ) )}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title="{lang="change_author_d"}" title='{lang="change_author_title"}'>{lang="change_author_d"}</a></li>
{{endif}}
</ul>
{{endif}}
</div>
</div>
</div>
</div>
{{if count( $file->tags() ) OR ( $file->canEdit() AND $file::canTag( NULL, $file->container() ) )}}
{template="tags" group="global" app="core" params="$file->tags(), FALSE, FALSE, ( $file->canEdit() AND $file::canTag( NULL, $file->container() ) ) ? $file->url() : NULL"}
{{endif}}
{{if count( $file->tags() ) OR ( $file->canEdit() AND $file::canTag( NULL, $file->container() ) )}}
{template="tags" group="global" app="core" params="$file->tags(), FALSE, FALSE, ( $file->canEdit() AND $file::canTag( NULL, $file->container() ) ) ? $file->url() : NULL"}
{{endif}}
</div>
</div>
</div>
@@ -1797,16 +1881,18 @@
<h2 class='ipsType_sectionTitle ipsType_reset ipsHide'>{lang="screenshots_ct" pluralize="$file->screenshots()->getInnerIterator()->count( true )"}</h2>
<div class='ipsPad ipsAreaBackground'>
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots>
<ul class='cDownloadsCarousel ipsClearfix' data-role="carouselItems">
{{$fullScreenshots = iterator_to_array( $file->screenshots() );}}
{{foreach $file->screenshots( 1 ) as $id => $screenshot}}
<li class='ipsCarousel_item ipsAreaBackground_reset ipsPad_half'>
<span style="background-image: url( '{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), $screenshot->url )"}' )" class="ipsThumb ipsThumb_medium ipsThumb_bg ipsCursor_pointer" data-ipsLightbox data-ipsLightbox-group="download_{$file->id}" data-fullURL="{$fullScreenshots[ $id ]->url}">
<img src="{$screenshot->url}" alt="">
</span>
</li>
{{endforeach}}
</ul>
<div class='ipsCarousel_inner'>
<ul class='cDownloadsCarousel ipsClearfix' data-role="carouselItems">
{{$fullScreenshots = iterator_to_array( $file->screenshots() );}}
{{foreach $file->screenshots( 1 ) as $id => $screenshot}}
<li class='ipsCarousel_item ipsAreaBackground_reset ipsPad_half'>
<span style="background-image: url( '{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), $screenshot->url )"}' )" class="ipsThumb ipsThumb_medium ipsThumb_bg ipsCursor_pointer" data-ipsLightbox data-ipsLightbox-group="download_{$file->id}" data-fullURL="{$fullScreenshots[ $id ]->url}">
<img src="{$screenshot->url}" alt="">
</span>
</li>
{{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>
@@ -1846,7 +1932,7 @@
</section>
{{endif}}
{{if ( $file->canEdit() or $file->canPin() or $file->canUnpin() or $file->canFeature() or $file->canUnfeature() or $file->canHide() or $file->canUnhide() or $file->canMove() or $file->canLock() or $file->canUnlock() or $file->canDelete() ) or ( $file->hidden() == -2 AND \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content') ) || ( \IPS\IPS::classUsesTrait( $file, 'IPS\Content\Reactable' ) and settings.reputation_enabled )}}
{{if ( $file->canEdit() or $file->canPin() or $file->canUnpin() or $file->canFeature() or $file->canUnfeature() or $file->canHide() or $file->canUnhide() or $file->canMove() or $file->canLock() or $file->canUnlock() or $file->canDelete() or $file->canEnablePurchases() or $file->canDisablePurchases() ) or ( $file->hidden() == -2 AND \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content') ) || ( \IPS\IPS::classUsesTrait( $file, 'IPS\Content\Reactable' ) and settings.reputation_enabled )}}
<div class='ipsItemControls'>
{{if \IPS\IPS::classUsesTrait( $file, 'IPS\Content\Reactable' ) and settings.reputation_enabled}}
{template="reputation" app="core" group="global" params="$file"}
@@ -1899,6 +1985,12 @@
{{if $file->canOnMessage( 'add' )}}
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'messageForm' ) )}' data-ipsDialog data-ipsDialog-title='{lang="add_message"}'>{lang='add_message'}</a></li>
{{endif}}
{{if $file->isPurchasable() AND $file->canDisablePurchases()}}
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'purchaseStatus', 'value' => 0 ) )}' data-confirm>{lang="disable_purchases"}</a></li>
{{endif}}
{{if !$file->isPurchasable() AND $file->canEnablePurchases()}}
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'purchaseStatus', 'value' => 1 ) )}' data-confirm>{lang="enable_purchases"}</a></li>
{{endif}}
{{if \IPS\Member::loggedIn()->modPermission('can_view_moderation_log')}}
<li class='ipsMenu_sep'><hr></li>
<li class="ipsMenu_item"><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
@@ -1908,7 +2000,7 @@
</li>
{{endif}}
{{if $file->canReport()}}
{{if $file->canReportOrRevoke() === TRUE}}
<li>
<a href='{$file->url('report')}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_file"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_file"}" class='ipsButton ipsButton_link ipsButton_verySmall ipsButton_fullWidth'>{lang="report_file"}</a>
</li>
@@ -1928,7 +2020,11 @@
{template="downloadButton" group="view" app="downloads" params="$file"}
{{endif}}
<li class='ipsToolList_primaryAction'>
<a href='{$file->url('buy')->csrf()}' class='ipsButton ipsButton_fullWidth ipsButton_large ipsButton_important'><i class='fa fa-shopping-cart'></i> &nbsp;{lang="buy_now"}{{if $price = $file->price()}} - {$price|raw}{{endif}}</a>
{{if !$file->isPurchasable( FALSE )}}
<span class="ipsType_light ipsType_blendLinks ipsResponsive_hidePhone ipsResponsive_inline"><i class="fa fa-info-circle"></i> {lang="purchasing_disabled"}</span>
{{else}}
<a href='{$file->url('buy')->csrf()}' class='ipsButton ipsButton_fullWidth ipsButton_large ipsButton_important'><i class='fa fa-shopping-cart'></i> &nbsp;{lang="buy_now"}{{if $price = $file->price()}} - {$price|raw}{{endif}}</a>
{{endif}}
</li>
{{else}}
{{if $file->canDownload() or !$file->downloadTeaser()}}
@@ -2014,6 +2110,7 @@
<div class='ipsResponsive_showPhone ipsResponsive_block ipsSpacer_top'>
{template="promote" app="core" group="global" params="$file"}
</div>
</ul>
</div>
</aside>
</div>
@@ -2091,7 +2188,7 @@
{template="userPhoto" app="core" group="global" params="$comment->author(), 'mini', $comment->warningRef()"}
<div>
<p class='ipsPos_right ipsType_reset'>
{{if $comment->canReport()}}
{{if $comment->canReportOrRevoke() === TRUE}}
<a href='{$comment->url('report')}' data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}" data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a> &middot;
{{endif}}
@@ -2118,7 +2215,7 @@
</div>
<div class='ipsPad ipsClearfix'>
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_highlight and $comment->reactionCount() >= settings.reputation_highlight and settings.reputation_enabled}}
{{if settings.reputation_enabled and \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_highlight and $comment->reactionCount() >= settings.reputation_highlight}}
<strong class='ipsComment_popularFlag' data-ipsTooltip title='{lang="this_is_a_popular_comment"}'><i class='fa fa-star'></i></strong>
{{endif}}
<div class='ipsType_break ipsContained'><a href="{$comment->url()}" class='ipsDataItem_title ipsTruncate ipsTruncate_line'>{$comment->item()->name}</a></div>
@@ -2176,7 +2273,7 @@
{template="userPhoto" app="core" group="global" params="$comment->author(), 'mini', $comment->warningRef()"}
<div>
<p class='ipsPos_right ipsType_reset'>
{{if $comment->canReport()}}
{{if $comment->canReportOrRevoke() === TRUE}}
<a href='{$comment->url('report')}' data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}" data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a> &middot;
{{endif}}
@@ -2203,7 +2300,7 @@
</div>
<div class='ipsPad'>
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_highlight and $comment->reputation() >= settings.reputation_highlight and settings.reputation_enabled}}
{{if settings.reputation_enabled and \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_highlight and $comment->reputation() >= settings.reputation_highlight}}
<strong class='ipsComment_popularFlag' data-ipsTooltip title='{lang="this_is_a_popular_comment"}'><i class='fa fa-star'></i></strong>
{{endif}}
<div class='ipsType_break ipsContained'><a href="{$comment->url()}" class='ipsDataItem_title ipsTruncate ipsTruncate_line'>{$comment->item()->name}</a></div>
@@ -2272,7 +2369,7 @@
<strong class='ipsType_small ipsType_uppercase'>{lang="latest_file"}</strong><br>
<div class='ipsType_break ipsContained'><a href="{$latestFile->url()}" 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> {$latestFile->downloads}{{if !$latestFile->downloads}}</span>{{endif}} {{if $latestFile->container()->bitoptions['comments']}}&nbsp;&nbsp;{{if !$latestFile->comments}}<span class='ipsType_light'>{{endif}}<i class='fa fa-comment'></i> {$latestFile->comments}{{endif}}{{if !$latestFile->comments}}</span>{{endif}}</p>
<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']}}&nbsp;&nbsp;{{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}}
@@ -2305,7 +2402,7 @@
<span class='ipsType_minorHeading'>{lang="latest_file"}</span><br>
<div class='ipsType_break ipsContained'><a href="{$latestFile->url()}" 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> {$latestFile->downloads}{{if !$latestFile->downloads}}</span>{{endif}} {{if $latestFile->container()->bitoptions['comments']}}&nbsp;&nbsp;{{if !$latestFile->comments}}<span class='ipsType_light'>{{endif}}<i class='fa fa-comment'></i> {$latestFile->comments}{{endif}}{{if !$latestFile->comments}}</span>{{endif}}</p>
<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']}}&nbsp;&nbsp;{{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}}
@@ -2330,11 +2427,13 @@
{{if count( $files )}}
<div class='ipsPad'>
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $files as $idx => $file}}
{template="indexBlock" group="browse" app="downloads" params="$file"}
{{endforeach}}
</ul>
<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>
@@ -2374,7 +2473,7 @@
<span {{if !$file->purchaseCount()}}class='ipsType_light'{{endif}} title='{lang="idm_purchases"}' data-ipsTooltip><i class='fa fa-shopping-cart'></i> {$file->purchaseCount()}</span>&nbsp;&nbsp;
{{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-arrow-circle-down'></i> {$file->downloads}</span>&nbsp;&nbsp;
<span {{if !$file->downloads}}class='ipsType_light'{{endif}} title='{lang="downloads"}' data-ipsTooltip><i class='fa fa-arrow-circle-down'></i> {number="$file->downloads"}</span>&nbsp;&nbsp;
{{endif}}
{{if $file->container()->bitoptions['comments']}}<span {{if !$file->comments}}class='ipsType_light'{{endif}} title='{lang="total_comments"}' data-ipsTooltip><i class='fa fa-comment'></i> {$file->comments}</span>{{endif}}
@@ -2449,7 +2548,7 @@
</div>
</section>
{{else}}
<div class='ipsGrid ipsGrid_collapsePhone ipsWidget_columns'>
<div class='ipsGrid ipsGrid_collapsePhone ipsWidget_columns ipsPad'>
<div class='ipsGrid_span3'>
<h4 class='ipsType_sectionHead ipsType_normal'>{lang="week"}</h4>
@@ -2600,7 +2699,7 @@
</div>
</section>
{{else}}
<div class='ipsGrid ipsGrid_collapsePhone ipsWidget_columns'>
<div class='ipsGrid ipsGrid_collapsePhone ipsWidget_columns ipsPad'>
<div class='ipsGrid_span3'>
<h4 class='ipsType_sectionHead ipsType_normal'>{lang="week"}</h4>
@@ -2778,10 +2877,10 @@
padding: 5px 5px;
}
html[dir="ltr"] #elDownloadStatsLatest > div:not( .ipsNoThumb ) {
html[dir="ltr"] #elDownloadStatsLatest > .ipsWidget_latestItem {
margin-left: 85px;
}
html[dir="rtl"] #elDownloadStatsLatest > div:not( .ipsNoThumb ) {
html[dir="rtl"] #elDownloadStatsLatest > .ipsWidget_latestItem {
margin-right: 85px;
}