Version 5.0.13

This commit is contained in:
Neo committed 2025-12-19 19:04:57 -08:00
1 parent b89858b2ff
commit 5efe744c5f
1407 files changed
+69690 -30177

No files matched your search

+226 -147
View File
@@ -11,7 +11,7 @@ IPSCONTENT;
$versionNumber = $version['b_version'] ?: (string) \IPS\DateTime::ts( $version['b_backup'] );
$return .= <<<IPSCONTENT
<p class='i-color_soft i-margin-bottom_2'>
<p class='i-color_soft i-margin-bottom_1'>
IPSCONTENT;
$htmlsprintf = array(\IPS\DateTime::ts( $version['b_backup'] )->html( false )); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'file_version_released', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'htmlsprintf' => $htmlsprintf ) );
@@ -55,18 +55,13 @@ IPSCONTENT;
if ( isset( $version['b_id'] ) and ( $file->canDownload() or ( $file->canEdit() and \IPS\Member::loggedIn()->group['idm_bypass_revision'] ) ) ):
$return .= <<<IPSCONTENT
<ul class='ipsList ipsList--inline'>
<li><img src='
IPSCONTENT;
$return .= \IPS\Theme::i()->resource( "subitem_stem.png", "core", 'front', false );
$return .= <<<IPSCONTENT
' alt=''> <strong>
<div class="ipsTitle ipsTitle--h5 i-margin-top_3 i-margin-bottom_1">
IPSCONTENT;
$sprintf = array($versionNumber); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'with_version', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'sprintf' => $sprintf ) );
$return .= <<<IPSCONTENT
</strong></li>
</div>
<ul class='ipsList ipsList--inline'>
IPSCONTENT;
@@ -802,12 +797,22 @@ IPSCONTENT;
$return .= <<<IPSCONTENT
<span class="i-color_soft ipsResponsive_hidePhone"><i class="fa-solid fa-circle-info"></i>
<a class='ipsButton ipsButton--inherit ipsButton--wide' href='
IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=core&module=system&controller=login", null, "login", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
$return .= <<<IPSCONTENT
' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'teaser_signin_button', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
'><i class="fa-solid fa-circle-info"></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'download_teaser', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span>
</a>
IPSCONTENT;
@@ -1013,7 +1018,7 @@ IPSCONTENT;
if ( !\IPS\Widget\Request::i()->isAjax() ):
$return .= <<<IPSCONTENT
class="ipsBox"
class="ipsBox ipsBox--downloadLogTable"
IPSCONTENT;
endif;
@@ -1507,7 +1512,7 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
>
<header class='ipsPageHeader ipsBox ipsPull ipsPageHeader--downloads-pending'>
<header class='ipsPageHeader ipsBox ipsBox--downloadsPendingHeader ipsPull ipsPageHeader--downloads-pending'>
<div class="ipsPageHeader__row">
<div class='ipsPageHeader__primary'>
<h1 class='ipsPageHeader__title'>
@@ -1790,7 +1795,7 @@ endif;
$return .= <<<IPSCONTENT
<div class='ipsBox i-margin-top_block'>
<div class='ipsBox ipsBox--downloadsPending i-margin-top_block'>
IPSCONTENT;
@@ -2252,135 +2257,137 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->reviewFeedId, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' id='reviews' class='ipsEntries ipsEntries--reviews ipsEntries--download-reviews' data-follow-area-id="file-
' id='reviews' data-follow-area-id="file-
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
">
<div class="ipsComposeAreaWrapper">
IPSCONTENT;
if ( $file->reviewForm() ):
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $file->locked() ):
$return .= <<<IPSCONTENT
<strong class='i-color_warning'><i class='fa-solid fa-circle-info'></i>
<strong class='i-color_warning'><i class='fa-solid fa-circle-info'></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'item_locked_can_review', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</strong>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<div id='elFileReviewForm'>
{$file->reviewForm()}
</div>
<div id='elFileReviewForm'>
{$file->reviewForm()}
</div>
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $file->hasReviewed() ):
$return .= <<<IPSCONTENT
<!-- Already reviewed -->
<!-- Already reviewed -->
IPSCONTENT;
elseif ( $file->locked() ):
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "forms", "core", 'front' )->commentUnavailable( 'item_locked_cannot_review' );
$return .= <<<IPSCONTENT
IPSCONTENT;
elseif ( \IPS\Member::loggedin()->restrict_post ):
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( \IPS\Member::loggedIn()->restrict_post == -1 ):
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "forms", "core", 'front' )->reviewUnavailable( 'restricted_cannot_comment' );
$return .= <<<IPSCONTENT
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "forms", "core", 'front' )->reviewUnavailable( 'restricted_cannot_comment', \IPS\Member::loggedIn()->warnings(5,NULL,'rpa'), \IPS\Member::loggedIn()->restrict_post );
$return .= <<<IPSCONTENT
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
elseif ( $file->mustDownloadBeforeReview() ):
$return .= <<<IPSCONTENT
<p class='i-color_soft i-font-weight_600 i-text-align_center i-background_2 i-padding_2 i-border-start-start-radius_box i-border-start-end-radius_box'>
<p class='i-color_soft i-font-weight_600 i-text-align_center i-background_2 i-padding_2 i-border-start-start-radius_box i-border-start-end-radius_box'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'no_download_review', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</p>
IPSCONTENT;
elseif ( \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings'] ):
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "forms", "core", 'front' )->reviewUnavailable( 'unacknowledged_warning_cannot_post', \IPS\Member::loggedIn()->warnings( 1, FALSE ) );
$return .= <<<IPSCONTENT
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
@@ -2457,7 +2464,7 @@ $return .= <<<IPSCONTENT
</div>
</div>
<div data-role='commentFeed' data-controller='core.front.core.moderation'>
<div data-role='commentFeed' data-controller='core.front.core.moderation' class='ipsEntries ipsEntries--reviews ipsEntries--download-reviews'>
<form action="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->url()->csrf()->setQueryString( 'do', 'multimodReview' )->setPage('page',\IPS\Request::i()->page), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
@@ -2610,7 +2617,7 @@ IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "main:inside-start", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
<div class="ipsBox ipsPull">
<div class="ipsBox ipsBox--downloadsFile ipsPull">
<header class="ipsPageHeader">
<div class="ipsPageHeader__row">
@@ -2624,17 +2631,7 @@ IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "header:inside-start", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "title:before", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="title" class="ipsPageHeader__title">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "title:inside-start", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
<div class="ipsPageHeader__title">
IPSCONTENT;
@@ -2668,7 +2665,17 @@ IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "badges:after", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
<h1>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "title:before", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
<h1 data-ips-hook="title">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "title:inside-start", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -2732,18 +2739,18 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</h1>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "title:inside-end", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
</div>
</h1>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "title:after", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
@@ -2841,7 +2848,17 @@ IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "header:after", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
<div class="ipsButtons">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "fileMainButtons:before", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
<div class="ipsButtons" data-ips-hook="fileMainButtons">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "fileMainButtons:inside-start", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -2890,7 +2907,17 @@ IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core" )->follow( 'downloads', 'file', $file->id, $file->followersCount() );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "fileMainButtons:inside-end", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "fileMainButtons:after", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
</div>
<div class="ipsPageHeader__row ipsPageHeader__row--footer">
<div class="ipsPageHeader__primary">
@@ -3199,37 +3226,45 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<div class="ipsColumns ipsColumns--lines">
IPSCONTENT;
if ( $file->screenshots()->getInnerIterator()->count() ):
$return .= <<<IPSCONTENT
<section class="i-basis_100p">
<h2 class="ipsBox__header ipsHide">
<section class="i-border-bottom_3">
<h2 class="ipsBox__header ipsHide">
IPSCONTENT;
$pluralize = array( $file->screenshots()->getInnerIterator()->count() ); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'screenshots_ct', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'pluralize' => $pluralize ) );
$return .= <<<IPSCONTENT
</h2>
<div class="">
<ul class="ipsCarousel ipsCarousel--padding ipsCarousel--images ipsCarousel--downloads-file-screenshots" id="downloads-file-screenshots" tabindex="0">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "screenshots:before", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="screenshots">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "screenshots:inside-start", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
<ul class="ipsCarousel ipsCarousel--padding ipsCarousel--images ipsCarousel--downloads-file-screenshots" id="downloads-file-screenshots" tabindex="0">
IPSCONTENT;
$fullScreenshots = iterator_to_array( $file->screenshots() );
$return .= <<<IPSCONTENT
IPSCONTENT;
foreach ( $file->screenshots( 1 ) as $id => $screenshot ):
$return .= <<<IPSCONTENT
<li>
<a href="
<li>
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $fullScreenshots[ $id ]->url, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -3238,34 +3273,45 @@ IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
">
<img src="
<img src="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $screenshot->url, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" alt="">
</a>
</li>
</a>
</li>
IPSCONTENT;
endforeach;
$return .= <<<IPSCONTENT
</ul>
</ul>
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core" )->carouselNavigation( 'downloads-file-screenshots', 'i-margin-bottom_2' );
$return .= <<<IPSCONTENT
</div>
</section>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "screenshots:inside-end", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "screenshots:after", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
</section>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<div class="ipsColumns ipsColumns--lines">
<article class="ipsColumns__primary i-flex i-flex-direction_column">
IPSCONTENT;
@@ -3384,7 +3430,7 @@ if ( $versionData['b_changelog'] or !empty( $previousVersions ) ):
$return .= <<<IPSCONTENT
<section data-controller="downloads.front.view.changeLog" class="i-margin-top_4 i-background_2 i-padding_3 i-border-radius_box">
<div class="i-flex i-align-items_center i-gap_1 i-flex-wrap_wrap i-justify-content_space-between i-margin-bottom_3">
<div class="i-flex i-align-items_center i-gap_1 i-flex-wrap_wrap i-justify-content_space-between i-margin-bottom_2">
<h2 class="ipsTitle ipsTitle--h5">
IPSCONTENT;
@@ -3396,7 +3442,8 @@ IPSCONTENT;
if ( !empty( $previousVersions ) ):
$return .= <<<IPSCONTENT
<a href="#" id="elChangelog" data-ipsmenu data-ipsmenu-selectable="radio" class="i-color_soft i-font-weight_500" title="
<button type="button" id="elChangelog" popovertarget="elChangelog_menu" class="i-color_soft i-font-weight_500" title="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'see_changelog_title', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -3406,7 +3453,8 @@ IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'see_changelog', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span><i class="fa-solid fa-caret-down i-margin-start_icon"></i></a>
</span><i class="fa-solid fa-caret-down i-margin-start_icon"></i></button>
IPSCONTENT;
endif;
@@ -3421,28 +3469,16 @@ $return .= \IPS\Theme::i()->getTemplate( "view", \IPS\Request::i()->app )->chang
$return .= <<<IPSCONTENT
</div>
<ul class="ipsMenu ipsMenu_selectable ipsMenu_auto ipsHide" id="elChangelog_menu">
<i-dropdown popover id="elChangelog_menu" data-i-dropdown-selectable="radio">
<div class="iDropdown">
<ul class="iDropdown__items">
IPSCONTENT;
$versionNumber = $file->version ?: (string) \IPS\DateTime::ts( $file->published );
$return .= <<<IPSCONTENT
<li class="ipsMenu_item
IPSCONTENT;
if ( !\IPS\Widget\Request::i()->changelog ):
$return .= <<<IPSCONTENT
ipsMenu_itemChecked
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
" data-ipsmenuvalue="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $versionNumber, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
"><a href="
<li><a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->url()->setQuerystring( 'changelog', 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -3451,34 +3487,38 @@ IPSCONTENT;
$sprintf = array($versionNumber); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'see_changelog_for', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'sprintf' => $sprintf ) );
$return .= <<<IPSCONTENT
">
"
IPSCONTENT;
if ( !\IPS\Widget\Request::i()->changelog ):
$return .= <<<IPSCONTENT
aria-selected="true"
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
data-ipsmenuvalue="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $versionNumber, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
"><i class="iDropdown__input"></i>
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $versionNumber, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</a></li>
IPSCONTENT;
foreach ( $previousVersions as $version ):
$return .= <<<IPSCONTENT
IPSCONTENT;
$versionNumber = $version['b_version'] ?: (string) \IPS\DateTime::ts( $version['b_backup'] );
$return .= <<<IPSCONTENT
<li class="ipsMenu_item
IPSCONTENT;
if ( \IPS\Widget\Request::i()->changelog == $version['b_id'] ):
$return .= <<<IPSCONTENT
ipsMenu_itemChecked
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<li class="
IPSCONTENT;
if ( $version['b_hidden'] ):
@@ -3488,7 +3528,27 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
" data-ipsmenuvalue="
">
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->url()->setQueryString( 'changelog', $version['b_id'] ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" title="
IPSCONTENT;
$sprintf = array($versionNumber); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'see_changelog_for', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'sprintf' => $sprintf ) );
$return .= <<<IPSCONTENT
"
IPSCONTENT;
if ( \IPS\Widget\Request::i()->changelog == $version['b_id'] ):
$return .= <<<IPSCONTENT
aria-selected="true"
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
data-ipsmenuvalue="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( md5( $versionNumber . $version['b_backup'] . mt_rand() ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
@@ -3498,36 +3558,31 @@ IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $versionNumber, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
">
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->url()->setQueryString( 'changelog', $version['b_id'] ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" title="
IPSCONTENT;
$sprintf = array($versionNumber); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'see_changelog_for', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'sprintf' => $sprintf ) );
$return .= <<<IPSCONTENT
">
<i class="iDropdown__input"></i>
<div>
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $versionNumber, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
<br>
<span class="i-color_soft">
<span class="iDropdown__minor">
IPSCONTENT;
$return .= \IPS\DateTime::ts( $version['b_backup'] )->html();
$return .= <<<IPSCONTENT
</span>
</a>
</li>
</div>
</a>
</li>
IPSCONTENT;
endforeach;
$return .= <<<IPSCONTENT
</ul>
</ul>
</div>
</i-dropdown>
</section>
IPSCONTENT;
@@ -3647,9 +3702,29 @@ IPSCONTENT;
if ( $menu->hasContent() ):
$return .= <<<IPSCONTENT
<menu class="ipsEntry__controls">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "menu:before", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
<menu class="ipsEntry__controls" data-ips-hook="menu">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "menu:inside-start", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
<li>{$menu}</li>
</menu>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "menu:inside-end", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
</menu>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "menu:after", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -3726,7 +3801,7 @@ IPSCONTENT;
if ( !$file->isPurchasable( FALSE ) ):
$return .= <<<IPSCONTENT
<button class="ipsButton ipsButton--inherit ipsResponsive_hidePhone" disabled type="button"><i class="fa-solid fa-circle-info"></i><span>
<button class="ipsButton ipsButton--inherit" disabled type="button"><i class="fa-solid fa-circle-info"></i><span>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'purchasing_disabled', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -3818,7 +3893,7 @@ IPSCONTENT;
else:
$return .= <<<IPSCONTENT
{$file->downloadTeaser()}
<li>{$file->downloadTeaser()}</li>
IPSCONTENT;
@@ -3876,20 +3951,22 @@ IPSCONTENT;
else:
$return .= <<<IPSCONTENT
<a href="#elFileRenew_menu" id="elFileRenew" class="ipsButton ipsButton--primary ipsButton--large i-width_100p" data-ipsmenu><i class="fa-solid fa-arrows-rotate"></i><span>
<button type="button" id="elFileRenew" popovertarget="elFileRenew_menu" class="ipsButton ipsButton--primary ipsButton--large i-width_100p"><i class="fa-solid fa-arrows-rotate"></i><span>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'purchase_renew_now', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span><i class="fa-solid fa-caret-down"></i></a>
<ul id="elFileRenew_menu" class="ipsMenu ipsMenu_auto ipsHide">
</span><i class="fa-solid fa-caret-down"></i></button>
<i-dropdown popover id="elFileRenew_menu">
<div class="iDropdown">
<ul class="iDropdown__items">
IPSCONTENT;
foreach ( $purchasesToRenew as $purchase ):
$return .= <<<IPSCONTENT
<li class="ipsMenu_item"><a href="
<li><a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $purchase->url()->setQueryString('do', 'renew')->csrf(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -3897,18 +3974,20 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $purchase->name, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
<br><span class="i-color_soft">
<span class="iDropdown__minor">
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $purchase->renewals, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</span></a></li>
IPSCONTENT;
endforeach;
$return .= <<<IPSCONTENT
</ul>
</ul>
</div>
</i-dropdown>
IPSCONTENT;