IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/categories", "header:inside-start", [ $clubsOnly ] ); $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( '__app_downloads', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/categories", "header:inside-end", [ $clubsOnly ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/categories", "header:after", [ $clubsOnly ] ); $return .= <<getLayoutValue( 'downloads_categories' ); $return .= <<

IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'categories', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/categories", "categories:before", [ $clubsOnly ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/categories", "categories:inside-start", [ $clubsOnly ] ); $return .= <<getTemplate( "browse", \IPS\Request::i()->app )->categoryRow( NULL, NULL, \IPS\downloads\Category::roots(), $layout ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/categories", "categories:after", [ $clubsOnly ] ); $return .= << IPSCONTENT; endif; $return .= <<clubs and \IPS\Settings::i()->club_nodes_in_apps and $clubNodes = \IPS\downloads\Category::clubNodes() ): $return .= <<

IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'club_node_downloads', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= <<

IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/categories", "clubNodes:before", [ $clubsOnly ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/categories", "clubNodes:inside-start", [ $clubsOnly ] ); $return .= <<getTemplate( "browse", \IPS\Request::i()->app )->categoryRow( NULL, NULL, $clubNodes, $layout ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/categories", "clubNodes:after", [ $clubsOnly ] ); $return .= << IPSCONTENT; endif; $return .= <<club() ): $return .= <<children() : \IPS\downloads\Category::roots(); $return .= <<club_nodes_in_apps ? \IPS\downloads\Category::clubNodes() : array() ); $return .= <<

IPSCONTENT; if ( $currentCategory ): $return .= <<language()->addToStack( htmlspecialchars( 'subcategories', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= <<language()->addToStack( htmlspecialchars( 'categories', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= <<

IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'browse_categories_d', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= <<

IPSCONTENT; endif; $return .= <<club() ): $return .= <<clubs and \IPS\Settings::i()->clubs_header == 'full' ): $return .= <<getTemplate( "clubs", "core" )->header( $club, $category ); $return .= << IPSCONTENT; endif; $return .= <<
IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/category", "header:before", [ $category,$table ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/category", "header:inside-start", [ $category,$table ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/category", "title:inside-start", [ $category,$table ] ); $return .= <<_title, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/category", "title:after", [ $category,$table ] ); $return .= <<description ): $return .= <<getTemplate( "global", "core", 'global' )->richText( $category->description, array('ipsPageHeader__desc') ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/category", "header:after", [ $category,$table ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/category", "headerButtons:inside-start", [ $category,$table ] ); $return .= <<getTemplate( "analytics", "cloud" )->analyticsButton( $category, $category->id ); $return .= <<getTemplate( "global", "core" )->follow( 'downloads', 'category', $category->_id, \IPS\downloads\File::containerFollowerCount( $category ) ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/category", "headerButtons:after", [ $category,$table ] ); $return .= <<
    IPSCONTENT; if ( $category->hasChildren() ): $return .= << IPSCONTENT; endif; $return .= <<getTemplate( "browse", \IPS\Request::i()->app )->categoryButtons( $category->can('add'), $category, FALSE ); $return .= << IPSCONTENT; $return .= \IPS\Theme::i()->getTemplate( "browse", \IPS\Request::i()->app )->categoryMenu( $category->children() ); $return .= << {$table}
IPSCONTENT; if ( $category AND $category->last_file_id AND \IPS\Member::loggedIn()->member_id ): $return .= <<
  • IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'mark_category_read', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= <<
  • IPSCONTENT; endif; $return .= <<
    IPSCONTENT; $return .= \IPS\Theme::i()->getTemplate( "global", "core" )->follow( 'downloads', 'category', $category->_id, \IPS\downloads\File::containerFollowerCount( $category ) ); $return .= <<
    IPSCONTENT; if ( $category->club() ): $return .= << IPSCONTENT; endif; $return .= <<last_file_id AND \IPS\Member::loggedIn()->member_id ): $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'mark_category_read', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; if ( $currentCategory OR $currentCategory = \IPS\downloads\Category::theOnlyNode() ): $return .= <<group['idm_bulk_submit'] ): $return .= <<id}&_new=1", null, "downloads_submit", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE ); $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'submit_a_file', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; else: $return .= <<id}&_new=1&do=submit", null, "downloads_submit", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE ); $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'submit_a_file', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'submit_a_file', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; return $return; } function categoryRow( $table, $headers, $categories, $layout='table' ) { $return = ''; $return .= <<can('view') AND ( $category->open OR \IPS\Member::loggedIn()->isAdmin() ) ): $return .= <<club(); $return .= <<ui( 'dataAttributes' ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= << IPSCONTENT; else: $return .= <<

    IPSCONTENT; if ( $club ): $return .= << IPSCONTENT; $return .= \IPS\Theme\Template::htmlspecialchars( $club->name, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= << IPSCONTENT; endif; $return .= <<description ): $return .= << IPSCONTENT; $return .= \IPS\Theme::i()->getTemplate( "global", "core", 'global' )->richText( $category->description, array('') ); $return .= << IPSCONTENT; endif; $return .= <<hasChildren() ): $return .= << IPSCONTENT; foreach ( $category->children() as $subcategory ): $return .= << IPSCONTENT; $return .= \IPS\Theme\Template::htmlspecialchars( $subcategory->_title, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= << IPSCONTENT; endforeach; $return .= << IPSCONTENT; endif; $return .= <<
      IPSCONTENT; $count = \IPS\downloads\File::contentCount( $category ); $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->formatNumber( $count ); $return .= << IPSCONTENT; $pluralize = array( $count ); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'files_no_number', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'pluralize' => $pluralize ) ); $return .= <<
    IPSCONTENT; if ( $lastPost = $category->lastFile() ): $return .= << IPSCONTENT; $return .= \IPS\Theme::i()->getTemplate( "global", "core" )->userPhoto( $lastPost->author(), 'fluid' ); $return .= <<
    IPSCONTENT; $htmlsprintf = array($lastPost->author()->link( NULL, NULL, $lastPost->isAnonymous() )); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'byline_nodate', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'htmlsprintf' => $htmlsprintf ) ); $return .= <<submitted instanceof \IPS\DateTime ) ? $lastPost->submitted : \IPS\DateTime::ts( $lastPost->submitted );$return .= $val->html(useTitle: true); $return .= <<
    IPSCONTENT; endif; $return .= << IPSCONTENT; endif; $return .= <<ui( 'dataAttributes' ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= <<
    IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/featuredFile", "image:before", [ $file ] ); $return .= <<

    {$file->truncated(TRUE)}
    IPSCONTENT; if ( $file->container()->bitoptions['reviews'] ): $return .= <<getTemplate( "global", "core", 'front' )->rating( 'small', $file->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of ); $return .= <<idm_nexus_on ): $return .= << IPSCONTENT; if ( $file->isPaid() ): $return .= <<price() ): $return .= <<language()->addToStack( htmlspecialchars( 'file_free', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= <<
    requiresDownloadConfirmation() ): $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'download', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; elseif ( $file->canBuy() ): $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'buy_now', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/featuredFile", "buttons:after", [ $file ] ); $return .= <<
    IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/featuredFile", "stats:before", [ $file ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/featuredFile", "stats:inside-start", [ $file ] ); $return .= <<isPaid() and !$file->nexus and \in_array( 'purchases', explode( ',', \IPS\Settings::i()->idm_nexus_display ) ) and $file->purchaseCount() ): $return .= << IPSCONTENT; $return .= \IPS\Theme\Template::htmlspecialchars( $file->purchaseCount(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= <<language()->addToStack( htmlspecialchars( 'purchases', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= <<isPaid() or \in_array( 'downloads', explode( ',', \IPS\Settings::i()->idm_nexus_display ) )) and $file->downloads ): $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->formatNumber( $file->downloads ); $return .= <<language()->addToStack( htmlspecialchars( 'downloads', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= <<container()->bitoptions['comments'] and $file->comments ): $return .= <<
    IPSCONTENT; return $return; } function fileGrid( $file, $table ) { $return = ''; $return .= <<
    ui( 'dataAttributes' ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= << IPSCONTENT; if ( $table AND method_exists( $table, 'canModerate' ) AND $table->canModerate() ): $return .= <<
    IPSCONTENT; endif; $return .= <<getTemplate( "global", "core" )->thumbImage( $file->primary_screenshot_thumb, $file->name, 'medium', '', 'view_this', $file->url( 'getPrefComment' ), 'downloads_Screenshots', '', true ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/fileGrid", "title:inside-start", [ $file,$table ] ); $return .= <<unread() ): $return .= << IPSCONTENT; endif; $return .= <<badges() as $badge ): $return .= <<prefix() ): $return .= <<getTemplate( "global", "core" )->prefix( $file->prefix( TRUE ), $file->prefix() ); $return .= <<canEdit() ): $return .= << IPSCONTENT; $return .= \IPS\Theme\Template::htmlspecialchars( $file->name, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/fileGrid", "title:inside-end", [ $file,$table ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/fileGrid", "title:after", [ $file,$table ] ); $return .= << IPSCONTENT; $htmlsprintf = array($file->author()->link( NULL, NULL, $file->isAnonymous() )); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'byline_nodate', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'htmlsprintf' => $htmlsprintf ) ); $return .= <<app != 'downloads' ): $return .= <<language()->addToStack( htmlspecialchars( 'in', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; $return .= \IPS\Theme\Template::htmlspecialchars( $file->container()->_title, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/fileGrid", "metadata:before", [ $file,$table ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/fileGrid", "metadata:inside-start", [ $file,$table ] ); $return .= << IPSCONTENT; if ( $file->updated == $file->submitted ): $return .= <<language()->addToStack( htmlspecialchars( 'submitted', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= <<submitted instanceof \IPS\DateTime ) ? $file->submitted : \IPS\DateTime::ts( $file->submitted );$return .= $val->html(FALSE, useTitle: true); $return .= <<language()->addToStack( htmlspecialchars( 'updated', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= <<updated instanceof \IPS\DateTime ) ? $file->updated : \IPS\DateTime::ts( $file->updated );$return .= $val->html(FALSE, useTitle: true); $return .= <<

    IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/fileGrid", "metadata:inside-end", [ $file,$table ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/fileGrid", "metadata:after", [ $file,$table ] ); $return .= << IPSCONTENT; if ( $file->container()->bitoptions['reviews'] ): $return .= <<getTemplate( "global", "core", 'front' )->rating( 'large', $file->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $file->memberReviewRating() ); $return .= <<( IPSCONTENT; $pluralize = array( $file->reviews ); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'num_reviews', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'pluralize' => $pluralize ) ); $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; if ( $file->container()->bitoptions['comments'] ): $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/fileGrid", "stats:inside-start", [ $file,$table ] ); $return .= <<comments ): $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; $pluralize = array( $file->comments ); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'num_comments', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'pluralize' => $pluralize ) ); $return .= <<comments ): $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/fileGrid", "stats:after", [ $file,$table ] ); $return .= << IPSCONTENT; if ( \IPS\Application::appIsEnabled( 'nexus' ) and \IPS\Settings::i()->idm_nexus_on ): $return .= << IPSCONTENT; if ( $file->isPaid() ): $return .= <<price() ): $return .= <<language()->addToStack( htmlspecialchars( 'file_free', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= <<

    IPSCONTENT; if ( $file->isPaid() and !$file->nexus and \in_array( 'purchases', explode( ',', \IPS\Settings::i()->idm_nexus_display ) ) ): $return .= <<purchaseCount() ): $return .= << IPSCONTENT; $pluralize = array( $file->purchaseCount() ); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'x_purchases', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'pluralize' => $pluralize ) ); $return .= <<   IPSCONTENT; endif; $return .= <<isPaid() or \in_array( 'downloads', explode( ',', \IPS\Settings::i()->idm_nexus_display ) ) ): $return .= <<downloads ): $return .= << IPSCONTENT; $pluralize = array( $file->downloads ); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'num_downloads', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'pluralize' => $pluralize ) ); $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; if ( \count( $file->tags() ) ): $return .= <<getTemplate( "global", "core" )->tags( $file->tags(), TRUE ); $return .= << IPSCONTENT; return $return; } function index( $featured, $new, $rated, $downloaded ) { $return = ''; $return .= <<

    IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/index", "header:before", [ $featured,$new,$rated,$downloaded ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/index", "header:inside-start", [ $featured,$new,$rated,$downloaded ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/index", "title:inside-start", [ $featured,$new,$rated,$downloaded ] ); $return .= <<language()->addToStack( htmlspecialchars( 'downloads', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/index", "title:after", [ $featured,$new,$rated,$downloaded ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/index", "header:after", [ $featured,$new,$rated,$downloaded ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/index", "buttons:inside-start", [ $featured,$new,$rated,$downloaded ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme::i()->getTemplate( "browse", \IPS\Request::i()->app )->categoryMenu( \IPS\downloads\Category::roots() ); $return .= << IPSCONTENT; endif; $return .= <<club_nodes_in_apps or !\IPS\downloads\Category::clubNodes() ) ): $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'view_all_files', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= <<getTemplate( "browse", \IPS\Request::i()->app )->categoryButtons( \IPS\downloads\Category::canOnAny('add'), NULL, FALSE ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/index", "buttons:after", [ $featured,$new,$rated,$downloaded ] ); $return .= << IPSCONTENT; if ( !empty( $featured ) ): $return .= <<

    IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'featured_downloads', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; $return .= \IPS\Theme::i()->getTemplate( "global", "core" )->carouselNavigation( 'downloads-featured-files' ); $return .= <<
    IPSCONTENT; endif; $return .= <<idm_show_newest AND \count( $new ) ): $return .= <<

    IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'browse_whats_new', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; $return .= \IPS\Theme::i()->getTemplate( "global", "core" )->carouselNavigation( 'downloads-whats-new' ); $return .= <<
    IPSCONTENT; endif; $return .= <<idm_show_highest_rated AND \count( $rated ) ): $return .= <<

    IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'browse_highest_rated', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; $return .= \IPS\Theme::i()->getTemplate( "global", "core" )->carouselNavigation( 'downloads-highest-rated' ); $return .= <<
    IPSCONTENT; endif; $return .= <<idm_show_most_downloaded AND \count( $downloaded ) ): $return .= <<

    IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'browse_most_downloaded', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; $return .= \IPS\Theme::i()->getTemplate( "global", "core" )->carouselNavigation( 'downloads-most-downloaded' ); $return .= <<
    IPSCONTENT; endif; $return .= << IPSCONTENT; if ( \IPS\downloads\Category::theOnlyNode() and ( !\IPS\Settings::i()->club_nodes_in_apps or !\IPS\downloads\Category::clubNodes() ) ): $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'view_all_files', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= <<getTemplate( "browse", \IPS\Request::i()->app )->categoryButtons( \IPS\downloads\Category::canOnAny('add'), NULL, TRUE ); $return .= << IPSCONTENT; endif; $return .= <<ui('dataAttributes'), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/indexBlock", "image:before", [ $file ] ); $return .= <<
    IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/indexBlock", "main:before", [ $file ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/indexBlock", "main:inside-start", [ $file ] ); $return .= <<unread() ): $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/indexBlock", "badges:inside-start", [ $file ] ); $return .= <<badges() as $badge ): $return .= <<badgeType, ['ipsBadge--pinned']) ): $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/indexBlock", "badges:after", [ $file ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/indexBlock", "title:inside-start", [ $file ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\Template::htmlspecialchars( $file->name, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/indexBlock", "title:inside-end", [ $file ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/indexBlock", "title:after", [ $file ] ); $return .= <<container()->bitoptions['reviews'] and $file->averageReviewRating() ): $return .= <<getTemplate( "global", "core", 'front' )->rating( 'small', $file->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/indexBlock", "main:after", [ $file ] ); $return .= <<idm_nexus_on ): $return .= << IPSCONTENT; if ( $file->isPaid() ): $return .= <<price() ): $return .= <<language()->addToStack( htmlspecialchars( 'file_free', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= <<
    IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/indexBlock", "stats:before", [ $file ] ); $return .= << IPSCONTENT; $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/browse/indexBlock", "stats:inside-start", [ $file ] ); $return .= <<isPaid() and !$file->nexus and \in_array( 'purchases', explode( ',', \IPS\Settings::i()->idm_nexus_display ) ) and $file->purchaseCount() ): $return .= << IPSCONTENT; $pluralize = array( $file->purchaseCount() ); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'x_purchases', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'pluralize' => $pluralize ) ); $return .= << IPSCONTENT; endif; $return .= <<isPaid() or \in_array( 'downloads', explode( ',', \IPS\Settings::i()->idm_nexus_display ) )) and $file->downloads ): $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->formatNumber( $file->downloads ); $return .= <<language()->addToStack( htmlspecialchars( 'downloads', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= <<container()->bitoptions['comments'] and $file->comments ): $return .= <<
    IPSCONTENT; return $return; } function indexSidebar( $canSubmitFiles, $currentCategory=NULL ) { $return = ''; $return .= <<getTemplate( "browse", \IPS\Request::i()->app )->categoriesSidebar( $currentCategory ); $return .= <<

    IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'no_files_in_cat', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; if ( $category->can('add') ): $return .= <<club() ): $return .= << IPSCONTENT; else: $return .= << IPSCONTENT; endif; $return .= <<language()->addToStack( htmlspecialchars( 'submit_first_file', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; return $return; } function rows( $table, $headers, $files ) { $return = ''; $return .= <<getLayoutValue( 'downloads_categories' ) == 'grid' ): $return .= <<tableClass() ): $return .= <<tableClass(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= <<hidden() ): $return .= <<unread() ): $return .= <<ui( 'dataAttributes' ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= <<

    IPSCONTENT; foreach ( $file->badges() as $badge ): $return .= <<
    {$file->truncated()}
    IPSCONTENT; if ( $file->container()->bitoptions['reviews'] ): $return .= <<getTemplate( "global", "core", 'front' )->rating( 'small', $file->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $file->memberReviewRating() ); $return .= <<tags() ) ): $return .= <<getTemplate( "global", "core" )->tags( $file->tags(), TRUE ); $return .= <<
      IPSCONTENT; if ( \IPS\Application::appIsEnabled( 'nexus' ) and \IPS\Settings::i()->idm_nexus_on ): $return .= << IPSCONTENT; if ( $file->isPaid() ): $return .= <<price() ): $return .= <<{$price} IPSCONTENT; endif; $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'file_free', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= << IPSCONTENT; endif; $return .= <<isPaid() and !$file->nexus and \in_array( 'purchases', explode( ',', \IPS\Settings::i()->idm_nexus_display ) ) and $file->purchaseCount() ): $return .= << IPSCONTENT; $return .= \IPS\Theme\Template::htmlspecialchars( $file->purchaseCount(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= <<language()->addToStack( htmlspecialchars( 'idm_purchases', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= <<isPaid() or \in_array( 'downloads', explode( ',', \IPS\Settings::i()->idm_nexus_display ) ) and $file->downloads ): $return .= << IPSCONTENT; $return .= \IPS\Member::loggedIn()->language()->formatNumber( $file->downloads ); $return .= <<language()->addToStack( htmlspecialchars( 'downloads', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= <<container()->bitoptions['comments'] and $file->comments ): $return .= << IPSCONTENT; $return .= \IPS\Theme\Template::htmlspecialchars( $file->comments, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= <<language()->addToStack( htmlspecialchars( 'total_comments', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) ); $return .= << IPSCONTENT; endif; $return .= <<
      IPSCONTENT; $htmlsprintf = array($file->author()->link( NULL, NULL, $file->isAnonymous() )); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'byline_nodate', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'htmlsprintf' => $htmlsprintf ) ); $return .= <<
    IPSCONTENT; if ( $table AND method_exists( $table, 'canModerate' ) AND $table->canModerate() ): $return .= <<

    IPSCONTENT; endif; $return .= << IPSCONTENT; endforeach; $return .= <<getTemplate( "browse", "downloads" )->tableRow( $file, $table ); $return .= <<tableClass() ): $return .= <<tableClass(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= <<hidden() ): $return .= <<unread() ): $return .= <<ui( 'dataAttributes' ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE ); $return .= <<