Files
IPB/applications/cms/data/cms_theme.xml
T
2025-12-19 18:37:58 -08:00

2076 lines
123 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<theme name="Default" author_name="Invision Power Services, Inc" author_url="https://www.invisioncommunity.com">
<template template_key="database_category_2_column_first_featured_entry" template_title="entry" template_desc="" template_location="database" template_group="category_2_column_first_featured" template_params="$record, $database, $id, $featured = TRUE" template_app="" template_type="template"><![CDATA[<article class='ipsCmsEntries__item ipsBox {{if $record->hidden()}}ipsModerated{{endif}} {{if $featured}}ipsCmsEntries__item--featured{{endif}}'>
<div class="ipsCmsEntries__align">
<div class="ipsCmsEntries__primary">
<header class="ipsCmsEntries__header">
<h2 class='ipsTitle ipsTitle--h4'>
<span class="ipsBadges">
{template="assignmentBadge" app="core" group="global" params="$record, ''"}
{{if $record->prefix()}}
{template="prefix" group="global" app="core" params="$record->prefix( TRUE ), $record->prefix()"}
{{endif}}
{{foreach $record->badges() as $badge}}{$badge|raw}{{endforeach}}
</span>
{{if $record->unread()}}
<a href='{$record->url("getNewComment")}' class='ipsIndicator' data-ipsTooltip title='{lang="cms_unread_record"}'></a>
{{endif}}
<a href='{$record->url( "getPrefComment" )}' title='{lang="read_more_about" sprintf="$record->_title"}'>{wordbreak="$record->_title"}</a>
</h2>
</header>
{{if \count( $record->customFieldsForDisplay('listing') )}}
<div class='ipsCmsEntries__fields i-color_soft'>
{{foreach $record->customFieldsForDisplay('listing') as $fieldId => $fieldValue}}
{{if $fieldValue}}
{$fieldValue|raw}
{{endif}}
{{endforeach}}
</div>
{{endif}}
<section class='ipsCmsEntries__snippet ipsRichText ipsTruncate_7'>
{$record->truncated()|raw}
</section>
{{if \count( $record->tags() )}}
<div class="ipsCmsEntries__tags">
{template="tags" group="global" app="core" params="$record->tags()"}
</div>
{{endif}}
</div>
<div class="ipsCmsEntries__thumb">
<a href='{$record->url( "getPrefComment" )}' title='{lang="read_more_about" sprintf="$record->_title"}' tabindex="-1" aria-hidden="true" class="ipsThumb">
{{if $record->record_image}}
<img src='{file="$record->record_image" extension="cms_Records"}' loading="lazy" alt="">
{{else}}
<i class="fa-regular fa-image"></i>
{{endif}}
</a>
</div>
</div>
<div class="ipsCmsEntries__meta i-border-top_2 i-padding_2 i-flex i-align-items_center i-gap_2 i-flex-wrap_wrap i-color_soft">
<div class='ipsPhotoPanel ipsPhotoPanel--small i-align-items_center i-margin-end_auto'>
{template="userPhoto" app="core" params="$record->author()" group="global"}
<div class='ipsPhotoPanel__text'>
<div>
{lang="cms_byline" htmlsprintf="$record->author()->link( NULL, NULL, $record->isAnonymous() ), $record->container()->url(), $record->container()->_title"} &middot; {datetime="$record->mapped( 'date' )"}
</div>
</div>
</div>
<ul class='ipsList ipsList--inline'>
{{if $record::database()->options['reviews']}}
<li>{template="rating" app="core" params="'small', $record->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $record->memberReviewRating()" group="global"}</li>
{{elseif $record->container()->allow_rating}}
<li>{template="rating" group="global" location="front" app="core" params="'small', $record->rating_value, \IPS\Settings::i()->reviews_rating_out_of"}
{{endif}}
{{if $record::database()->options['comments']}}<li><a href='{$record->url()}#comments' title='{lang="view_comments"}'>{lang="num_comments" pluralize="$record->record_comments"}</a></li>{{endif}}
<li>{lang="num_views_with_number" pluralize="$record->record_views"}</li>
</ul>
</div>
</article>]]></template>
<template template_key="database_category_2_column_first_featured_index" template_title="index" template_desc="" template_location="database" template_group="category_2_column_first_featured" template_params="$database, $articles, $url, $pagination" template_app="" template_type="template"><![CDATA[<header class='ipsPageHeader ipsBox ipsPull ipsPageHeader--two-column-first-featured'>
<div class="ipsPageHeader__row">
<div class='ipsPageHeader__primary'>
<h1 class='ipsPageHeader__title'>{$database->_title}</h1>
{{if $database->_description}}
<div class='ipsPageHeader__desc'>
{$database->_description}
</div>
{{endif}}
</div>
{{if $database->use_categories}}
<div class="ipsButtons">
<a href="{$url->setQueryString('show', 'categories')}" class="ipsButton ipsButton--small ipsButton--inherit"><i class="fa-solid fa-folder-open"></i> {lang="cms_show_categories"}</a>
</div>
{{endif}}
</div>
</header>
{{if $database->can('add') or \IPS\Member::loggedIn()->member_id}}
<ul class="ipsButtons ipsButtons--main i-margin-block_block">
{{if $database->can('add')}}
<li>
<a class="ipsButton ipsButton--primary" {{if $database->use_categories}}data-ipsDialog="1" data-ipsDialog-size="narrow" data-ipsDialog-title="{lang="cms_select_category"}"{{endif}} href="{$url->setQueryString( array( 'do' => 'form', 'd' => \IPS\cms\Databases\Dispatcher::i()->databaseId ) )}">{lang="cms_add_new_record_button" sprintf="$database->recordWord( 1 )"}</a>
</li>
{{endif}}
</ul>
{{endif}}
<section class='ipsCmsEntries {{if !$database->featured_settings['pagination'] || $pagination['page'] === 1}}ipsCmsEntries--feature{{endif}} ipsCmsEntries--2'>
{{if \count($articles)}}
{{foreach $articles as $id => $record}}
{{if $id === 0 && $pagination['page'] === 1}}
{template="entry" app="cms" location="database" group="category_3_column_first_featured" params="$record, $database, $id, TRUE"}
{{else}}
{template="entry" app="cms" location="database" group="category_3_column_first_featured" params="$record, $database, $id, FALSE"}
{{endif}}
{{endforeach}}
{{endif}}
</section>
{{if $database->featured_settings['pagination'] and ( $pagination['pages'] > 1 )}}
{template="pagination" app="core" location="global" group="global" params="$url, $pagination['pages'], $pagination['page'], $database->featured_settings['perpage'], TRUE, 'page'"}
{{endif}}]]></template>
<template template_key="database_category_2_column_image_feature_entry" template_title="entry" template_desc="" template_location="database" template_group="category_2_column_image_feature" template_params="$record, $database" template_app="" template_type="template"><![CDATA[<article class='ipsCmsEntries__item ipsBox {{if $record->hidden()}}ipsModerated{{endif}}'>
<div class="ipsCmsEntries__align">
<div class="ipsCmsEntries__primary">
<header class="ipsCmsEntries__header">
<h2 class='ipsTitle ipsTitle--h4'>
<span class="ipsBadges">
{template="assignmentBadge" app="core" group="global" params="$record, ''"}
{{if $record->prefix()}}
{template="prefix" group="global" app="core" params="$record->prefix( TRUE ), $record->prefix()"}
{{endif}}
{{foreach $record->badges() as $badge}}{$badge|raw}{{endforeach}}
</span>
{{if $record->unread()}}
<a href='{$record->url("getNewComment")}' class='ipsIndicator' data-ipsTooltip title='{lang="cms_unread_record"}'></a>
{{endif}}
<a href='{$record->url( "getPrefComment" )}' title='{lang="read_more_about" sprintf="$record->_title"}'>{wordbreak="$record->_title"}</a>
</h2>
</header>
{{if \count( $record->customFieldsForDisplay('listing') )}}
<div class='ipsCmsEntries__fields i-color_soft'>
{{foreach $record->customFieldsForDisplay('listing') as $fieldId => $fieldValue}}
{{if $fieldValue}}
{$fieldValue|raw}
{{endif}}
{{endforeach}}
</div>
{{endif}}
<section class='ipsCmsEntries__snippet ipsRichText ipsTruncate_7'>
{$record->truncated()|raw}
</section>
{{if \count( $record->tags() )}}
<div class="ipsCmsEntries__tags">
{template="tags" group="global" app="core" params="$record->tags()"}
</div>
{{endif}}
</div>
<div class="ipsCmsEntries__thumb">
<a href='{$record->url( "getPrefComment" )}' title='{lang="read_more_about" sprintf="$record->_title"}' tabindex="-1" aria-hidden="true" class="ipsThumb">
{{if $record->record_image}}
<img src='{file="$record->record_image" extension="cms_Records"}' loading="lazy" alt="">
{{else}}
<i class="fa-regular fa-image"></i>
{{endif}}
</a>
</div>
</div>
<div class="ipsCmsEntries__meta i-border-top_2 i-padding_2 i-flex i-align-items_center i-gap_2 i-flex-wrap_wrap i-color_soft">
<div class='ipsPhotoPanel ipsPhotoPanel--small i-align-items_center i-margin-end_auto'>
{template="userPhoto" app="core" params="$record->author()" group="global"}
<div class='ipsPhotoPanel__text'>
<div>
{lang="cms_byline" htmlsprintf="$record->author()->link( NULL, NULL, $record->isAnonymous() ), $record->container()->url(), $record->container()->_title"} &middot; {datetime="$record->mapped( 'date' )"}
</div>
</div>
</div>
<ul class='ipsList ipsList--inline'>
{{if $record::database()->options['reviews']}}
<li>{template="rating" app="core" params="'small', $record->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $record->memberReviewRating()" group="global"}</li>
{{elseif $record->container()->allow_rating}}
<li>{template="rating" group="global" location="front" app="core" params="'small', $record->rating_value, \IPS\Settings::i()->reviews_rating_out_of"}
{{endif}}
{{if $record::database()->options['comments']}}<li><a href='{$record->url()}#comments' title='{lang="view_comments"}'>{lang="num_comments" pluralize="$record->record_comments"}</a></li>{{endif}}
<li>{lang="num_views_with_number" pluralize="$record->record_views"}</li>
</ul>
</div>
</article>]]></template>
<template template_key="database_category_2_column_image_feature_index" template_title="index" template_desc="" template_location="database" template_group="category_2_column_image_feature" template_params="$database, $articles, $url, $pagination" template_app="" template_type="template"><![CDATA[<header class='ipsPageHeader ipsBox ipsPull ipsPageHeader--two-column-image-featured'>
<div class="ipsPageHeader__row">
<div class='ipsPageHeader__primary'>
<h1 class='ipsPageHeader__title'>{$database->_title}</h1>
{{if $database->_description}}
<div class='ipsPageHeader__desc'>
{$database->_description}
</div>
{{endif}}
</div>
<div class="ipsButtons">
{{if $database->use_categories}}
<a href="{$url->setQueryString('show', 'categories')}" class="ipsButton ipsButton--small ipsButton--inherit"><i class="fa-solid fa-folder-open"></i> {lang="cms_show_categories"}</a>
{{else}}
{{$catClass = 'IPS\cms\Categories' . $database->id; $category = $catClass::load( $database->default_category );}}
{template="follow" app="core" group="global" params="'cms','categories' . $database->id, $category->_id, \IPS\cms\Records::containerFollowerCount( $category )"}
{{endif}}
</div>
</div>
</header>
{{if $database->can('add') or \IPS\Member::loggedIn()->member_id}}
<ul class="ipsButtons ipsButtons--main i-margin-block_block">
{{if $database->can('add')}}
<li>
<a class="ipsButton ipsButton--primary" {{if $database->use_categories}}data-ipsDialog="1" data-ipsDialog-size="narrow" data-ipsDialog-title="{lang="cms_select_category"}"{{endif}} href="{$url->setQueryString( array( 'do' => 'form', 'd' => \IPS\cms\Databases\Dispatcher::i()->databaseId ) )}">{lang="cms_add_new_record_button" sprintf="$database->recordWord( 1 )"}</a>
</li>
{{endif}}
</ul>
{{endif}}
<section class='ipsCmsEntries ipsCmsEntries--image ipsCmsEntries--2'>
{{if \count($articles)}}
{{foreach $articles as $id => $record}}
{template="entry" app="cms" location="database" group="category_2_column_image_feature" params="$record, $database"}
{{endforeach}}
{{endif}}
</section>
{{if $database->featured_settings['pagination'] and ( $pagination['pages'] > 1 )}}
{template="pagination" app="core" location="global" group="global" params="$url, $pagination['pages'], $pagination['page'], $database->featured_settings['perpage'], TRUE, 'page'"}
{{endif}}]]></template>
<template template_key="database_category_3_column_first_featured_entry" template_title="entry" template_desc="" template_location="database" template_group="category_3_column_first_featured" template_params="$record, $database, $id, $featured = TRUE" template_app="" template_type="template"><![CDATA[<article class='ipsCmsEntries__item ipsBox {{if $record->hidden()}}ipsModerated{{endif}} {{if $featured}}ipsCmsEntries__item--featured{{endif}}'>
<div class="ipsCmsEntries__align">
<div class="ipsCmsEntries__primary">
<header class="ipsCmsEntries__header">
<h2 class='ipsTitle ipsTitle--h4'>
<span class="ipsBadges">
{template="assignmentBadge" app="core" group="global" params="$record, ''"}
{{if $record->prefix()}}
{template="prefix" group="global" app="core" params="$record->prefix( TRUE ), $record->prefix()"}
{{endif}}
{{foreach $record->badges() as $badge}}{$badge|raw}{{endforeach}}
</span>
{{if $record->unread()}}
<a href='{$record->url("getNewComment")}' class='ipsIndicator' data-ipsTooltip title='{lang="cms_unread_record"}'></a>
{{endif}}
<a href='{$record->url( "getPrefComment" )}' title='{lang="read_more_about" sprintf="$record->_title"}'>{wordbreak="$record->_title"}</a>
</h2>
</header>
{{if \count( $record->customFieldsForDisplay('listing') )}}
<div class='ipsCmsEntries__fields i-color_soft'>
{{foreach $record->customFieldsForDisplay('listing') as $fieldId => $fieldValue}}
{{if $fieldValue}}
{$fieldValue|raw}
{{endif}}
{{endforeach}}
</div>
{{endif}}
<section class='ipsCmsEntries__snippet ipsRichText ipsTruncate_7'>
{$record->truncated()|raw}
</section>
{{if \count( $record->tags() )}}
<div class="ipsCmsEntries__tags">
{template="tags" group="global" app="core" params="$record->tags()"}
</div>
{{endif}}
</div>
<div class="ipsCmsEntries__thumb">
<a href='{$record->url( "getPrefComment" )}' title='{lang="read_more_about" sprintf="$record->_title"}' tabindex="-1" aria-hidden="true" class="ipsThumb">
{{if $record->record_image}}
<img src='{file="$record->record_image" extension="cms_Records"}' loading="lazy" alt="">
{{else}}
<i class="fa-regular fa-image"></i>
{{endif}}
</a>
</div>
</div>
<div class="ipsCmsEntries__meta i-border-top_2 i-padding_2 i-flex i-align-items_center i-gap_2 i-flex-wrap_wrap i-color_soft">
<div class='ipsPhotoPanel ipsPhotoPanel--small i-align-items_center i-margin-end_auto'>
{template="userPhoto" app="core" params="$record->author()" group="global"}
<div class='ipsPhotoPanel__text'>
<div>
{lang="cms_byline" htmlsprintf="$record->author()->link( NULL, NULL, $record->isAnonymous() ), $record->container()->url(), $record->container()->_title"} &middot; {datetime="$record->mapped( 'date' )"}
</div>
</div>
</div>
<ul class='ipsList ipsList--inline'>
{{if $record::database()->options['reviews']}}
<li>{template="rating" app="core" params="'small', $record->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $record->memberReviewRating()" group="global"}</li>
{{elseif $record->container()->allow_rating}}
<li>{template="rating" group="global" location="front" app="core" params="'small', $record->rating_value, \IPS\Settings::i()->reviews_rating_out_of"}
{{endif}}
{{if $record::database()->options['comments']}}<li><a href='{$record->url()}#comments' title='{lang="view_comments"}'>{lang="num_comments" pluralize="$record->record_comments"}</a></li>{{endif}}
<li>{lang="num_views_with_number" pluralize="$record->record_views"}</li>
</ul>
</div>
</article>]]></template>
<template template_key="database_category_3_column_first_featured_index" template_title="index" template_desc="" template_location="database" template_group="category_3_column_first_featured" template_params="$database, $articles, $url, $pagination" template_app="" template_type="template"><![CDATA[<header class='ipsPageHeader ipsBox ipsPull ipsPageHeader--three-column-first-featured'>
<div class="ipsPageHeader__row">
<div class='ipsPageHeader__primary'>
<h1 class='ipsPageHeader__title'>{$database->_title}</h1>
{{if $database->_description}}
<div class='ipsPageHeader__desc'>
{$database->_description}
</div>
{{endif}}
</div>
{{if $database->use_categories}}
<div class="ipsButtons">
<a href="{$url->setQueryString('show', 'categories')}" class="ipsButton ipsButton--small ipsButton--inherit"><i class="fa-solid fa-folder-open"></i> {lang="cms_show_categories"}</a>
</div>
{{endif}}
</div>
</header>
{{if $database->can('add') or \IPS\Member::loggedIn()->member_id}}
<ul class="ipsButtons ipsButtons--main i-margin-block_block">
{{if $database->can('add')}}
<li>
<a class="ipsButton ipsButton--primary" {{if $database->use_categories}}data-ipsDialog="1" data-ipsDialog-size="narrow" data-ipsDialog-title="{lang="cms_select_category"}"{{endif}} href="{$url->setQueryString( array( 'do' => 'form', 'd' => \IPS\cms\Databases\Dispatcher::i()->databaseId ) )}">{lang="cms_add_new_record_button" sprintf="$database->recordWord( 1 )"}</a>
</li>
{{endif}}
</ul>
{{endif}}
<section class='ipsCmsEntries {{if !$database->featured_settings['pagination'] || $pagination['page'] === 1}}ipsCmsEntries--feature{{endif}} ipsCmsEntries--3'>
{{if \count($articles)}}
{{foreach $articles as $id => $record}}
{{if $id === 0 && $pagination['page'] === 1}}
{template="entry" app="cms" location="database" group="category_3_column_first_featured" params="$record, $database, $id, TRUE"}
{{else}}
{template="entry" app="cms" location="database" group="category_3_column_first_featured" params="$record, $database, $id, FALSE"}
{{endif}}
{{endforeach}}
{{endif}}
</section>
{{if $database->featured_settings['pagination'] and ( $pagination['pages'] > 1 )}}
{template="pagination" app="core" location="global" group="global" params="$url, $pagination['pages'], $pagination['page'], $database->featured_settings['perpage'], TRUE, 'page'"}
{{endif}}]]></template>
<template template_key="database_category_3_column_image_feature_entry" template_title="entry" template_desc="" template_location="database" template_group="category_3_column_image_feature" template_params="$record, $database" template_app="" template_type="template"><![CDATA[<article class='ipsCmsEntries__item ipsBox {{if $record->hidden()}}ipsModerated{{endif}}'>
<div class="ipsCmsEntries__align">
<div class="ipsCmsEntries__primary">
<header class="ipsCmsEntries__header">
<h2 class='ipsTitle ipsTitle--h4'>
<span class="ipsBadges">
{template="assignmentBadge" app="core" group="global" params="$record, ''"}
{{if $record->prefix()}}
{template="prefix" group="global" app="core" params="$record->prefix( TRUE ), $record->prefix()"}
{{endif}}
{{foreach $record->badges() as $badge}}{$badge|raw}{{endforeach}}
</span>
{{if $record->unread()}}
<a href='{$record->url("getNewComment")}' class='ipsIndicator' data-ipsTooltip title='{lang="cms_unread_record"}'></a>
{{endif}}
<a href='{$record->url( "getPrefComment" )}' title='{lang="read_more_about" sprintf="$record->_title"}'>{wordbreak="$record->_title"}</a>
</h2>
</header>
{{if \count( $record->customFieldsForDisplay('listing') )}}
<div class='ipsCmsEntries__fields i-color_soft'>
{{foreach $record->customFieldsForDisplay('listing') as $fieldId => $fieldValue}}
{{if $fieldValue}}
{$fieldValue|raw}
{{endif}}
{{endforeach}}
</div>
{{endif}}
<section class='ipsCmsEntries__snippet ipsRichText ipsTruncate_7'>
{$record->truncated()|raw}
</section>
{{if \count( $record->tags() )}}
<div class="ipsCmsEntries__tags">
{template="tags" group="global" app="core" params="$record->tags()"}
</div>
{{endif}}
</div>
<div class="ipsCmsEntries__thumb">
<a href='{$record->url( "getPrefComment" )}' title='{lang="read_more_about" sprintf="$record->_title"}' tabindex="-1" aria-hidden="true" class="ipsThumb">
{{if $record->record_image}}
<img src='{file="$record->record_image" extension="cms_Records"}' loading="lazy" alt="">
{{else}}
<i class="fa-regular fa-image"></i>
{{endif}}
</a>
</div>
</div>
<div class="ipsCmsEntries__meta i-border-top_2 i-padding_2 i-flex i-align-items_center i-gap_2 i-flex-wrap_wrap i-color_soft">
<div class='ipsPhotoPanel ipsPhotoPanel--small i-align-items_center i-margin-end_auto'>
{template="userPhoto" app="core" params="$record->author()" group="global"}
<div class='ipsPhotoPanel__text'>
<div>
{lang="cms_byline" htmlsprintf="$record->author()->link( NULL, NULL, $record->isAnonymous() ), $record->container()->url(), $record->container()->_title"} &middot; {datetime="$record->mapped( 'date' )"}
</div>
</div>
</div>
<ul class='ipsList ipsList--inline'>
{{if $record::database()->options['reviews']}}
<li>{template="rating" app="core" params="'small', $record->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $record->memberReviewRating()" group="global"}</li>
{{elseif $record->container()->allow_rating}}
<li>{template="rating" group="global" location="front" app="core" params="'small', $record->rating_value, \IPS\Settings::i()->reviews_rating_out_of"}
{{endif}}
{{if $record::database()->options['comments']}}<li><a href='{$record->url()}#comments' title='{lang="view_comments"}'>{lang="num_comments" pluralize="$record->record_comments"}</a></li>{{endif}}
<li>{lang="num_views_with_number" pluralize="$record->record_views"}</li>
</ul>
</div>
</article>]]></template>
<template template_key="database_category_3_column_image_feature_index" template_title="index" template_desc="" template_location="database" template_group="category_3_column_image_feature" template_params="$database, $articles, $url, $pagination" template_app="" template_type="template"><![CDATA[<header class='ipsPageHeader ipsBox ipsPull ipsPageHeader--three-column-image-featured'>
<div class="ipsPageHeader__row">
<div class='ipsPageHeader__primary'>
<h1 class='ipsPageHeader__title'>{$database->_title}</h1>
{{if $database->_description}}
<div class='ipsPageHeader__desc'>
{$database->_description}
</div>
{{endif}}
</div>
{{if $database->use_categories}}
<div class="ipsButtons">
<a href="{$url->setQueryString('show', 'categories')}" class="ipsButton ipsButton--small ipsButton--inherit"><i class="fa-solid fa-folder-open"></i> {lang="cms_show_categories"}</a>
</div>
{{endif}}
</div>
</header>
{{if $database->can('add') or \IPS\Member::loggedIn()->member_id}}
<ul class="ipsButtons ipsButtons--main i-margin-block_block">
{{if $database->can('add')}}
<li>
<a class="ipsButton ipsButton--primary" {{if $database->use_categories}}data-ipsDialog="1" data-ipsDialog-size="narrow" data-ipsDialog-title="{lang="cms_select_category"}"{{endif}} href="{$url->setQueryString( array( 'do' => 'form', 'd' => \IPS\cms\Databases\Dispatcher::i()->databaseId ) )}">{lang="cms_add_new_record_button" sprintf="$database->recordWord( 1 )"}</a>
</li>
{{endif}}
</ul>
{{endif}}
<section class='ipsCmsEntries ipsCmsEntries--image ipsCmsEntries--3'>
{{if \count($articles)}}
{{foreach $articles as $id => $record}}
{template="entry" app="cms" location="database" group="category_3_column_image_feature" params="$record, $database"}
{{endforeach}}
{{endif}}
</section>
{{if $database->featured_settings['pagination'] and ( $pagination['pages'] > 1 )}}
{template="pagination" app="core" location="global" group="global" params="$url, $pagination['pages'], $pagination['page'], $database->featured_settings['perpage'], TRUE, 'page'"}
{{endif}}]]></template>
<template template_key="database_category_articles_entry" template_title="entry" template_desc="" template_location="database" template_group="category_articles" template_params="$record, $database" template_app="" template_type="template"><![CDATA[<article class="ipsData__item {{if $record->hidden()}}ipsModerated{{endif}}" {{if $record->unread()}}data-ips-unread{{else}}data-ips-read{{endif}}>
<a href='{$record->url( "getPrefComment" )}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{wordbreak="$record->_title"}</span></a>
{{if $record->showRecordImage()}}
<a href='{$record->url( "getPrefComment" )}' class="ipsData__image" aria-hidden="true" tabindex="-1">
{{if $record->record_image}}
<img src='{file="$record->record_image" extension="cms_Records"}' loading="lazy" alt="">
{{else}}
<i></i>
{{endif}}
</a>
{{endif}}
<div class="ipsData__content">
<div class="ipsData__main">
{{if $record::database()->use_categories}}
<div class="ipsContainerTitle" hidden><a href="{$record->container()->url()}">{$record->container()->_title}</a></div>
{{endif}}
<div class="ipsData__title">
<span class="ipsBadges">
{template="assignmentBadge" app="core" group="global" params="$record, ''"}
{{if $record->prefix()}}
{template="prefix" group="global" app="core" params="$record->prefix( TRUE ), $record->prefix()"}
{{endif}}
{{foreach $record->badges() as $badge}}{$badge|raw}{{endforeach}}
</span>
<h2>
{{if $record->unread()}}
<a href='{$record->url("getNewComment")}' class='ipsIndicator' data-ipsTooltip title='{lang="cms_unread_record"}'></a>
{{endif}}
<a href='{$record->url( "getPrefComment" )}' title='{lang="read_more_about" sprintf="$record->_title"}'>{wordbreak="$record->_title"}</a>
</h2>
</div>
<section class='ipsData__desc ipsRichText'>
{$record->truncated()|raw}
</section>
{{if \count( $record->customFieldsForDisplay('listing') )}}
<ul class='ipsData__fields'>
{{foreach $record->customFieldsForDisplay('listing') as $fieldId => $fieldValue}}
{{if $fieldValue}}
<li>{$fieldValue|raw}</li>
{{endif}}
{{endforeach}}
</ul>
{{endif}}
{{if \count( $record->tags() )}}
{template="tags" group="global" app="core" params="$record->tags()"}
{{endif}}
</div>
<div class="ipsData__extra">
<ul class="ipsData__stats">
{{if $record::database()->options['comments']}}
<li data-stattype="comments" data-v="{$record->record_comments}"><a href='{$record->url()}#comments' title='{lang="view_comments"}'>{lang="num_comments" pluralize="$record->record_comments"}</a></li>
{{endif}}
<li data-stattype="views">{lang="num_views_with_number" pluralize="$record->record_views"}</li>
{{if $record::database()->options['reviews'] and ($record->averageReviewRating() > 0 or $record->memberReviewRating() > 0)}}
<li>{template="rating" app="core" params="'small', $record->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $record->memberReviewRating()" group="global"}</li>
{{elseif $record->container()->allow_rating}}
<li>{template="rating" group="global" location="front" app="core" params="'small', $record->rating_value, \IPS\Settings::i()->reviews_rating_out_of"}
{{endif}}
</ul>
<div class="ipsData__last">
{template="userPhoto" app="core" params="$record->author()" group="global"}
<div class="ipsData__last-text">
<div class="ipsData__last-primary">
{$record->author()->link( NULL, NULL, $record->isAnonymous() )|raw}
</div>
<div class="ipsData__last-secondary">{datetime="$record->mapped( 'date' )"}</div>
</div>
</div>
</div>
</div>
</article>]]></template>
<template template_key="database_category_articles_index" template_title="index" template_desc="" template_location="database" template_group="category_articles" template_params="$database, $articles, $url, $pagination" template_app="" template_type="template"><![CDATA[<header class='ipsPageHeader ipsBox ipsPull ipsPageHeader--category-articles'>
<div class="ipsPageHeader__row">
<div class='ipsPageHeader__primary'>
<h1 class='ipsPageHeader__title'>{$database->_title}</h1>
{{if $database->_description}}
<div class='ipsPageHeader__desc'>
{$database->_description}
</div>
{{endif}}
</div>
<div class="ipsButtons">
{{if $database->use_categories}}
<a href="{$url->setQueryString('show', 'categories')}" class="ipsButton ipsButton--inherit"><i class="fa-solid fa-folder-open"></i> {lang="cms_show_categories"}</a>
{{else}}
{{$catClass = 'IPS\cms\Categories' . $database->id; $category = $catClass::load( $database->default_category );}}
{template="follow" app="core" group="global" params="'cms','categories' . $database->id, $category->_id, \IPS\cms\Records::containerFollowerCount( $category )"}
{{endif}}
</div>
</div>
</header>
{{if $database->can('add') or \IPS\Member::loggedIn()->member_id}}
<ul class="ipsButtons ipsButtons--main i-margin-block_block">
{{if $database->can('add')}}
<li>
<a class="ipsButton ipsButton--primary" {{if $database->use_categories}}data-ipsDialog="1" data-ipsDialog-size="narrow" data-ipsDialog-title="{lang="cms_select_category"}"{{endif}} href="{$url->setQueryString( array( 'do' => 'form', 'd' => \IPS\cms\Databases\Dispatcher::i()->databaseId ) )}">{lang="cms_add_new_record_button" sprintf="$database->recordWord( 1 )"}</a>
</li>
{{endif}}
</ul>
{{endif}}
{{if \count($articles)}}
<section class='ipsBox ipsPull'>
<i-data>
<div class="ipsData ipsData--entries ipsData--{$database->display_settings['index']['layout']} ipsData--cms-category-articles">
{{foreach $articles as $id => $record}}
{template="entry" app="cms" location="database" group="category_articles" params="$record, $database"}
{{endforeach}}
</div>
</i-data>
</section>
{{endif}}
{template="pagination" app="core" location="global" group="global" params="$url, $pagination['pages'], $pagination['page'], ( $database->field_perpage ?? 25 ), TRUE, 'page'"}]]></template>
<template template_key="database_category_index_categoryRow" template_title="categoryRow" template_desc="" template_location="database" template_group="category_index" template_params="$category" template_app="" template_type="template"><![CDATA[{{$RecordsClass = $category::$contentItemClass;}}
{{if $category->can('view')}}
{{$lastPost = $category->lastPost();}}
<li class="ipsData__item" data-categoryID="{$category->_id}" {{if $RecordsClass::containerUnread( $category )}}data-ips-unread{{else}}data-ips-read{{endif}}>
<a href="{$category->url()}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$category->_title}</span></a>
<figure class="ipsData__image">
{{if $image = $category->primaryImage()}}
<img src="{$image->url}" alt="" loading="lazy">
{{else}}
<i></i>
{{endif}}
</figure>
<div class="ipsData__content">
<div class="ipsData__main">
<h4 class="ipsData__title">
{{if $RecordsClass::containerUnread( $category )}}<span class='ipsIndicator'></span>{{endif}}
<a href="{$category->url()}">{$category->_title}</a>
</h4>
{{if $category->hasChildren()}}
<ul class="ipsSubList">
{{foreach $category->children() as $subCategory}}
<li class="ipsSubList__item {{if $RecordsClass::containerUnread( $subCategory )}}ipsSubList__item--unread{{else}}ipsSubList__item--read{{endif}}">
<a href="{$subCategory->url()}">{$subCategory->_title}</a>
</li>
{{endforeach}}
</ul>
{{endif}}
{{if $category->_description}}
<div class="ipsData__desc">{$category->_description|raw}</div>
{{endif}}
</div>
<div class="ipsData__extra">
{{if $lastPost}}
<ul class="ipsData__stats">
{{$count = $RecordsClass::contentCount( $category, FALSE );}}
<li>
<span>{number="$count"}</span>
<span>{expression="\IPS\cms\Databases::load( $category->database_id )->recordWord( $count )"}</span>
</li>
</ul>
{{endif}}
<div class="ipsData__last">
{{if $lastPost}}
{template="userPhoto" app="core" group="global" params="$lastPost['author'], 'tiny'"}
<div class='ipsData__last-text'>
<div class='ipsData__last-primary'><a href="{$lastPost['record_url']}" title='{$lastPost['record_title']}'>{$lastPost['record_title']}</a></div>
<div class='ipsData__last-secondary'>
{{if $category->last_poster_anon}}
{lang="byline_nodate" htmlsprintf="$lastPost['author']->link( NULL, NULL, TRUE )"},
{{else}}
{lang="byline_nodate" htmlsprintf="$lastPost['author']->link()"},
{{endif}}
<a href='{$lastPost['record_url']->setQueryString( 'do', 'getLastComment' )}' title='{lang="get_last_post"}'>{datetime="$lastPost['date']"}</a>
</div>
</div>
{{else}}
<div class='i-color_soft'>{lang="content_categories_index_no_records" sprintf="\IPS\cms\Databases::load( $category->database_id )->recordWord()"}</div>
{{endif}}
</div>
</div>
</div>
</li>
{{endif}}]]></template>
<template template_key="database_category_index_index" template_title="index" template_desc="" template_location="database" template_group="category_index" template_params="$database, $categories, $url" template_app="" template_type="template"><![CDATA[<header class='ipsPageHeader ipsBox ipsPull ipsPageHeader--database-index'>
<div class="ipsPageHeader__row">
<div class='ipsPageHeader__primary'>
<h1 class='ipsPageHeader__title'>{$database->_title}</h1>
{{if $database->_description}}
<div class='ipsPageHeader__desc'>
{$database->_description}
</div>
{{endif}}
</div>
{{if $database->cat_index_type == 1}}
<div class="ipsButtons">
<a href="{$url}" class="ipsButton ipsButton--small ipsButton--text"><i class="fa-solid fa-star"></i> {lang="cms_show_featured" sprintf="$database->recordWord()"}</a>
</div>
{{endif}}
</div>
</header>
<section>
<ol class='cCmsDatabase_index' data-controller='core.global.core.table, forums.front.forum.forumList' data-baseURL=''>
<li class='ipsBox ipsPull'>
<h2 class="ipsBox__header">
{lang="content_categories_title"}
</h2>
{{if ! \count($categories)}}
<div class="ipsBox ipsBox--padding">{lang="cms_no_cats_to_show"}</div>
{{else}}
<i-data>
<ol class="ipsData ipsData--{$database->display_settings['categories']['layout']} ipsData--category ipsData--database-category">
{{foreach $categories as $category}}
{template="categoryRow" group="category_index" location="database" app="cms" params="$category"}
{{endforeach}}
</ol>
</i-data>
{{endif}}
</li>
</ol>
</section>]]></template>
<template template_key="page_custom_wrappers_customWrapper" template_title="customWrapper" template_desc="" template_location="page" template_group="custom_wrappers" template_params="$html, $title=NULL" template_app="" template_type="template"><![CDATA[<!DOCTYPE html>
<html lang="{expression="\IPS\Member::loggedIn()->language()->bcp47()"}" dir="{{if member.language()->isrtl}}rtl{{else}}ltr{{endif}}" {template="htmlDataAttributes" app="core" group="global" location="front" params=""}>
<head>
<title>{expression="output.getTitle( $title )"}</title>
{template="prefersColorSchemeLoad" app="core" group="global" location="front" params=""}
{template="includeMeta" app="core" group="global" location="global" params=""}
{template="includeCSS" app="core" group="global" location="global" params=""}
</head>
<body data-ips-hook="main" class="ipsApp ipsApp_front ipsLayout_noBackground" {{if output.globalControllers}}data-controller='{expression="implode( ',', output.globalControllers )"}'{{endif}}>
{$html|raw}
{template="includeJS" app="core" group="global" location="global" params=""}
</body>
</html>]]></template>
<template template_key="database_display_comment" template_title="comment" template_desc="" template_location="database" template_group="display" template_params="$item, $comment, $editorName, $app, $type, $class=''" template_app="" template_type="template"><![CDATA[{{$itemIdField = $item::$databaseColumnId; $idField = $comment::$databaseColumnId;}}
<div id='comment-{$comment->$idField}_wrap' data-controller='core.front.core.comment' data-feedid="{$comment->feedId}" data-commentApp='{$app}' data-commentType='{$type}' data-commentID="{$comment->$idField}" data-quoteData='{expression="json_encode( array('userid' => $comment->author()->member_id, 'username' => $comment->author()->name, 'timestamp' => $comment->mapped('date'), 'contentapp' => $app, 'contenttype' => $type, 'contentclass' => $class, 'contentid' => $item->$itemIdField, 'contentcommentid' => $comment->$idField) )"}' class='ipsEntry__content js-ipsEntry__content {{if $comment->hidden()}}ipsModerated{{endif}}'
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\IntersectionViewTracking' ) AND $hash=$comment->getViewTrackingHash()}}
data-view-hash="{$hash|raw}"
data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getViewTrackingData() ))" raw="true"}"
{{endif}}
>
<header class='ipsEntry__header'>
<div class='ipsEntry__header-align'>
<div class='ipsPhotoPanel'>
<div class='ipsAvatarStack'>
{template="userPhoto" app="core" group="global" params="$comment->author(), 'fluid', $comment->warningRef()"}
{{if !$comment->isAnonymous() and $comment->author()->canHaveAchievements() and \IPS\core\Achievements\Rank::show() and $rank = $comment->author()->rank()}}
{$rank->html( 'ipsAvatarStack__rank' )|raw}
{{endif}}
</div>
<div class='ipsPhotoPanel__text'>
<div class='ipsEntry__username'>
<h3>{template="userLink" app="core" group="global" params="$comment->author(), $comment->warningRef(), NULL, $comment->isAnonymous()"}</h3>
{{if !$comment->isAnonymous()}}
<span class='ipsEntry__group'>{expression="\IPS\Member\Group::load( $comment->author()->member_group_id )->formattedName" raw="true"}</span>
{{endif}}
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Anonymous' ) and $comment->isAnonymous() and \IPS\Member::loggedIn()->modPermission('can_view_anonymous_posters')}}
<a data-ipsHover data-ipsHover-width="370" data-ipsHover-onClick href="{$comment->url( 'reveal' )->csrf()}"><span class="ipsAnonymousIcon" data-ipsTooltip title='{lang="post_anonymously_reveal"}'></span></a>
{{endif}}
</div>
<div class='ipsPhotoPanel__secondary'>
{{if ! \IPS\Output::i()->reduceLinks()}}<a href='{$comment->shareableUrl()}'>{{endif}}{$comment->dateLine()|raw}{{if ! \IPS\Output::i()->reduceLinks()}}</a>{{endif}}
{{if $comment->editLine()}}
({lang="edited_lc"})
{{endif}}
</div>
</div>
</div>
{{if $comment->author()->hasHighlightedReplies() || ( \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and $comment->isHighlighted() ) OR $comment->isFeatured()}}
<ul class='ipsBadges'>
{{if $comment->author()->hasHighlightedReplies()}}
<li><span class='ipsBadge ipsBadge--highlightedGroup'>{expression="\IPS\Member\Group::load( $comment->author()->member_group_id )->name" raw="true"}</span></li>
{{endif}}
{{if $comment->isFeatured()}}
<li><span class='ipsBadge ipsBadge--positive'>{lang="this_is_a_featured_post"}</span></li>
{{endif}}
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and $comment->isHighlighted()}}
<li><span class='ipsBadge ipsBadge--popular'>{lang="this_is_a_popular_comment"}</span></li>
{{endif}}
</ul>
{{endif}}
{{if \count( $item->commentMultimodActions() )}}
<input type="checkbox" name="multimod[{$comment->$idField}]" value="1" data-role="moderation" data-actions="{{if $comment->canSplit()}}split merge{{endif}} {{if $comment->hidden() === -1 AND $comment->canUnhide()}}unhide{{elseif $comment->hidden() === 1 AND $comment->canUnhide()}}approve{{elseif $comment->canHide()}}hide{{endif}} {{if $comment->canDelete()}}delete{{endif}}" data-state='{{if $comment->tableStates()}}{$comment->tableStates()}{{endif}}' class="ipsInput ipsInput--toggle">
{{endif}}
{{$menu = $comment->menu();}}
{{if $menu->hasContent() || \count( $item->commentMultimodActions() )}}
{$menu|raw}
{{endif}}
{{if $comment->author()->member_id}}
<!-- Expand mini profile -->
<button class='ipsEntry__topButton ipsEntry__topButton--profile' type='button' aria-controls='mini-profile-{$comment->$idField}' aria-expanded='false' data-ipscontrols data-ipscontrols-src="{$comment->authorMiniProfileUrl}" aria-label="Toggle mini profile"><i class="fa-solid fa-chevron-down" aria-hidden="true"></i></button>
{{endif}}
</div>
{{if $comment->author()->member_id}}
{template="miniProfileWrap" app="core" group="global" params="$comment->author(), $comment->$idField, remoteLoading: true"}
{{endif}}
</header>
<div class='ipsEntry__post'>
{{if member.modPermission('mod_see_warn') and $comment->warning}}
{template="commentWarned" group="global" app="core" params="$comment"}
{{endif}}
{{if $comment->hidden() AND $comment->hidden() != -2}}
<div class='ipsEntry__hiddenMessage'>{$comment->hiddenBlurb()}</div>
{{elseif $comment->hidden() == -2}}
<div class='ipsEntry__hiddenMessage'>{$comment->deletedBlurb()}</div>
{{endif}}
{{if $comment->hidden() === 1 && $comment->author()->member_id == \IPS\Member::loggedIn()->member_id}}
<div class='i-margin-bottom_3'><strong class='i-color_warning'><i class='fa-solid fa-circle-info'></i> {lang="comment_awaiting_approval"}</strong></div>
{{endif}}
<div class='ipsRichText ipsRichText--user' data-role='commentContent' data-controller='core.front.core.lightboxedImages'>
{$comment->content()|raw}
{{if $comment->editLine()}}
{$comment->editLine()|raw}
{{endif}}
</div>
</div>
{{if ( $comment->hidden() !== 1 && \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_enabled and $comment->hasReactionBar() ) || ( $comment->hidden() === 1 && ( $comment->canUnhide() || $comment->canDelete() ) ) || ( $comment->hidden() === 0 and $item->canComment() and $editorName ) }}
<div class='ipsEntry__footer'>
<menu class='ipsEntry__controls' data-role="commentControls">
{{if $comment->hidden() === 1 && ( $comment->canUnhide() || $comment->canDelete() )}}
{{if $comment->canUnhide()}}
<li><a href='{$comment->url('unhide')->csrf()}' class='ipsButton ipsButton--small ipsButton--positive' data-action='approveComment'><i class='fa-solid fa-check'></i><span>{lang="approve"}</span></a></li>
{{endif}}
{{if $comment->canDelete()}}
<li><a href='{$comment->url('delete')->csrf()->setPage('page',\IPS\Request::i()->page)}' data-action='deleteComment' data-updateOnDelete="#commentCount"><i class='fa-solid fa-xmark'></i><span>{lang="delete"}</span></a></li>
{{endif}}
{{if $comment->canEdit() || $comment->canSplit() || $comment->canHide()}}
<li>
<a href='#elControlsCommentsSub_{$comment->$idField}_menu' id='elControlsCommentsSub_{$comment->$idField}' data-ipsMenu data-ipsMenu-appendTo='#comment-{$comment->$idField}_wrap'><span>{lang="moderator_tools"}</span><i class='fa-solid fa-caret-down'></i></a>
<ul id='elControlsCommentsSub_{$comment->$idField}_menu' class='ipsMenu ipsMenu_auto ipsHide'>
{{if $comment->canEdit()}}
{{if $comment->mapped('first') and $comment->item()->canEdit()}}
<li class='ipsMenu_item'><a href='{$comment->item()->url()->setQueryString( 'do', 'edit' )}'>{lang="edit"}</a></li>
{{else}}
<li class='ipsMenu_item'><a href='{$comment->url('edit')}' data-action='editComment'>{lang="edit"}</a></li>
{{endif}}
{{endif}}
{{if $comment->canSplit()}}
<li class='ipsMenu_item'><a href='{$comment->url('split')}' data-action='splitComment' data-ipsDialog data-ipsDialog-title="{lang="split_to_new" sprintf="\IPS\Member::loggedIn()->language()->addToStack( $item::$title )"}">{lang="split"}</a></li>
{{endif}}
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Hideable' ) and $comment->canHide()}}
<li class='ipsMenu_item'><a href='{$comment->url('hide')->csrf()}' data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
{{endif}}
</ul>
</li>
{{endif}}
{{else}}
{{if $comment->hidden() === 0 and $item->canComment() and $editorName}}
<li data-ipsQuote-editor='{$editorName}' data-ipsQuote-target='#comment-{$comment->$idField}' class='ipsJS_show'>
<button class='cMultiQuote ipsHide' data-action='multiQuoteComment' data-ipsTooltip data-ipsQuote-multiQuote data-mqId='mq{$comment->$idField}' aria-label='{lang="multiquote"}'><i class='fa-solid fa-plus'></i></button>
</li>
<li data-ipsQuote-editor='{$editorName}' data-ipsQuote-target='#comment-{$comment->$idField}' class='ipsJS_show'>
<a href='#' data-action="quoteComment" data-ipsQuote-singleQuote><i class="fa-solid fa-quote-left" aria-hidden="true"></i><span>{lang="quote"}</span></a>
</li>
{{endif}}
{{if \IPS\Application::appIsEnabled('cloud')}}
{template="spam" app="cloud" group="spam" params="$comment, FALSE"}
{{endif}}
{{endif}}
<li class='ipsHide' data-role='commentLoading'>
<span class='ipsLoading ipsLoading--tiny'></span>
</li>
</menu>
{{if $comment->hidden() !== 1 && \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_enabled and $comment->hasReactionBar()}}
{template="reputation" group="global" app="core" params="$comment"}
{{endif}}
</div>
{{endif}}
{{if ! \IPS\Output::i()->reduceLinks()}}
{template="sharemenu" group="global" app="core" params="$comment"}
{{endif}}
</div>]]></template>
<template template_key="database_display_commentContainer" template_title="commentContainer" template_desc="" template_location="database" template_group="display" template_params="$item, $comment, $votes=array(), $otherClasses=''" template_app="" template_type="template"><![CDATA[{{$idField = $comment::$databaseColumnId;}}
{{$itemClassSafe = str_replace( '\\', '_', mb_substr( $comment::$itemClass, 4 ) );}}
{{if $comment->isIgnored()}}
<div class='ipsEntry ipsEntry--ignored' id='elIgnoreComment_{$comment->$idField}' data-ignoreCommentID='elComment_{$comment->$idField}' data-ignoreUserID='{$comment->author()->member_id}'>
<i class="fa-solid fa-user-slash"></i> {lang="ignoring_content" sprintf="$comment->author()->name"} <a href='#elIgnoreComment_{$comment->$idField}_menu' data-ipsMenu data-ipsMenu-menuID='elIgnoreComment_{$comment->$idField}_menu' data-ipsMenu-appendTo='#elIgnoreComment_{$comment->$idField}' data-action="ignoreOptions" title='{lang="see_post_ignore_options"}'>{lang="options"} <i class='fa-solid fa-caret-down'></i></a>
<ul class='ipsMenu ipsHide' id='elIgnoreComment_{$comment->$idField}_menu'>
<li class='ipsMenu_item' data-ipsMenuValue='showPost'><a href='#'>{lang="show_this_comment"}</a></li>
<li class='ipsMenu_sep'><hr></li>
<li class='ipsMenu_item' data-ipsMenuValue='stopIgnoring'><a href='{url="app=core&module=system&controller=ignore&do=remove&id={$comment->author()->member_id}" seoTemplate="ignore"}'>{lang="stop_ignoring_posts_by" sprintf="$comment->author()->name"}</a></li>
<li class='ipsMenu_item'><a href='{url="app=core&module=system&controller=ignore" seoTemplate="ignore"}'>{lang="change_ignore_preferences"}</a></li>
</ul>
</div>
{{endif}}
<a id='comment-{$comment->$idField}'></a>
<a id='findComment-{$comment->$idField}'></a>
<article id='elComment_{$comment->$idField}' class="ipsEntry js-ipsEntry ipsEntry--simple {{if $otherClasses}}{$otherClasses}{{endif}} {{if (\IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and $comment->isHighlighted()) or $comment->isFeatured()}}ipsEntry--popular{{endif}} {{if $comment->author()->hasHighlightedReplies()}}ipsEntry--highlighted{{endif}} {{if $comment->isIgnored()}}ipsHide{{endif}} {{if $comment->hidden() OR $item->hidden() == -2}}ipsModerated{{endif}}" {{if $comment->author()->hasHighlightedReplies()}}data-memberGroup="{$comment->author()->member_group_id}"{{endif}}>
{template="comment" group="display" location="database" app="cms" params="$item, $comment, $item::$formLangPrefix . 'comment', $item::$application, $item::$module, $itemClassSafe"}
</article>]]></template>
<template template_key="database_display_comments" template_title="comments" template_desc="" template_location="database" template_group="display" template_params="$record" template_app="" template_type="template"><![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='{$record->url()}' {{if $record->isLastPage()}}data-lastPage{{endif}} data-feedID='{$record->feedId}' id='comments'>
{template="featuredComments" group="global" app="core" params="$record->featuredComments(), $record->url()->setQueryString('tab', 'comments')->setQueryString('recommended', 'comments'), 'recommended_replies', '__defart_comment', false"}
<div class='ipsButtonBar ipsButtonBar--top'>
{{if $record->commentPageCount() > 1}}
<div class='ipsButtonBar__pagination'>{$record->commentPagination( array('tab') )|raw}</div>
{{endif}}
<div class='ipsButtonBar__end'>{template="commentMultimodHeader" app="core" group="global" params="$record, '#comments'"}</div>
</div>
<div data-role='commentFeed' data-controller='core.front.core.moderation'>
<form action="{$record->url()->csrf()->setQueryString( 'do', 'multimodComment' )->setPage('page',\IPS\Request::i()->page)}" method="post" data-ipsPageAction data-role='moderationTools'>
{{if \count( $record->comments( NULL, NULL, 'date', 'asc', NULL, NULL, NULL, NULL, FALSE, isset( \IPS\Request::i()->showDeleted ) ) )}}
{{$commentCount=0; $timeLastRead = $record->timeLastRead(); $lined = FALSE;}}
{{foreach $record->comments( NULL, NULL, 'date', 'asc', NULL, NULL, NULL, NULL, FALSE, isset( \IPS\Request::i()->showDeleted ) ) as $comment}}
{{if !$lined and $timeLastRead and $timeLastRead->getTimestamp() < $comment->mapped('date')}}
{{if $lined = TRUE and $commentCount}}
<hr class="ipsUnreadBar">
{{endif}}
{{endif}}
{{$commentCount++;}}
{$comment->html()|raw}
{{endforeach}}
{{else}}
<p class='ipsEmptyMessage' data-role='noComments'>{lang="no_comments"}</p>
{{endif}}
{template="commentMultimod" app="core" group="global" params="$record"}
</form>
</div>
{{if $record->commentPageCount() > 1}}
<div class='ipsButtonBar ipsButtonBar--bottom'>
<div class='ipsButtonBar__pagination'>{$record->commentPagination( array('tab') )|raw}</div>
</div>
{{endif}}
{{if $record->commentForm() || $record->locked() || \IPS\Member::loggedin()->restrict_post || \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings'] || !\IPS\Member::loggedIn()->checkPostsPerDay()}}
<div class='ipsComposeAreaWrapper' data-role='replyArea'>
{{if $record->commentForm()}}
{{if $record->locked()}}
<p class='ipsComposeArea_warning'><i class='fa-solid fa-circle-info'></i> {lang="cms_locked_can_comment" sprintf="$record::database()->recordWord(1)"}</p>
{{endif}}
{$record->commentForm()|raw}
{{else}}
{{if $record->locked()}}
{template="commentUnavailable" group="forms" location="front" app="core" params="'record_locked_cannot_comment'"}
{{elseif \IPS\Member::loggedin()->restrict_post}}
{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>
{{endif}}
</div>]]></template>
<template template_key="database_display_commentsAndReviewsTabs" template_title="commentsAndReviewsTabs" template_desc="" template_location="database" template_group="display" template_params="$content, $id" template_app="" template_type="template"><![CDATA[<div data-controller='core.front.core.commentsWrapper' data-tabsId='{$id}'>
{$content|raw}
</div>]]></template>
<template template_key="database_display_filtersAddComment" template_title="filtersAddComment" template_desc="" template_location="database" template_group="display" template_params="$rows" template_app="" template_type="template"><![CDATA[{{foreach $rows as $line}}
<p>{$line|raw}</p>
{{endforeach}}]]></template>
<template template_key="database_display_record" template_title="record" template_desc="" template_location="database" template_group="display" template_params="$record, $commentsAndReviews, $updateForm=NULL, $nextUnread=NULL" template_app="" template_type="template"><![CDATA[{template="assignmentHeader" app="core" group="global" params="$record"}
<section class="ipsBox ipsBox--record ipsPull">
<header class="ipsPageHeader ipsPageHeader--database-record">
{{if $record->showRecordImage()}}
{$record->coverPhoto()|raw}
{{endif}}
<div class="ipsPageHeader__row">
<div class='ipsPageHeader__primary'>
<div class='ipsPageHeader__title'>
<h1>
{{if $record->canEditTitle()}}
<span class='' data-controller="core.front.core.moderation">
<span data-role="editableTitle" title='{lang="click_hold_edit"}'>{$record->_title}</span>
</span>
{{else}}
<span class=''>{$record->_title}</span>
{{endif}}
</h1>
<div class="ipsBadges">{{foreach $record->badges() as $badge}}{$badge|raw}{{endforeach}}</div>
</div>
{{if $record::database()->options['reviews']}}
<div class="ipsPageHeader__rating">{template="rating" group="global" location="front" app="core" params="'', $record->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $record->memberReviewRating()"} <span class='i-color_soft'>({lang="num_reviews" pluralize="$record->record_reviews"})</span></div>
{{elseif $record->container()->allow_rating}}
<div class="ipsPageHeader__rating">{$record->rating()|raw}</div>
{{endif}}
{{if \count( $record->tags() ) OR ( $record->canEdit() AND $record::canTag( NULL, $record->container() ) )}}
{template="tagsWithPrefix" group="global" app="core" params="$record->tags(), $record->prefix(), FALSE, FALSE, ( $record->canEdit() AND ( \count( $record->tags() ) OR $record::canTag( NULL, $record->container() ) ) ) ? $record->url() : NULL"}
{{endif}}
</div>
<div class='ipsButtons'>
{{if !$record->container()->disable_sharelinks}}
{template="shareButton" app="core" group="sharelinks" params="$record"}
{{endif}}
{{if \IPS\Application::appIsEnabled('cloud')}}
{template="spam" app="cloud" group="spam" params="$record"}
{{endif}}
{template="follow" app="core" group="global" params="'cms', 'records'.$record::$customDatabaseId, $record->primary_id_field, $record->followersCount()"}
</div>
</div>
<div class="ipsPageHeader__row ipsPageHeader__row--footer">
<div class='ipsPageHeader__primary'>
<div class='ipsPhotoPanel ipsPhotoPanel--inline'>
{template="userPhoto" app="core" group="global" params="$record->author(), 'fluid', $record->warningRef()"}
<div class="ipsPhotoPanel__text">
<p class="ipsPhotoPanel__primary">
{lang="content_record_started_by" htmlsprintf="$record->author()->link( NULL, NULL, $record->isAnonymous() )"}
{{if $record->isAnonymous() and \IPS\Member::loggedIn()->modPermission('can_view_anonymous_posters')}}
<a data-ipsHover data-ipsHover-width="370" data-ipsHover-onClick href="{$record->url( 'reveal' )->csrf()}"><span class="cAuthorPane_badge cAuthorPane_badge_small cAuthorPane_badge--anon" data-ipsTooltip title="{lang="post_anonymously_reveal"}"></span></a>
{{endif}}
{{if $record->editLine()}}
<span class='i-color_soft i-font-weight_normal'>
({lang="edited_lc"})
</span>
{{endif}}
</p>
<div class="ipsPhotoPanel__secondary">{datetime="$record->mapped( 'date' )"}</div>
</div>
</div>
</div>
</div>
</header>
{{if \count($record->getMessages())}}
<div class="i-padding_2">
{template="contentItemMessages" group="global" app="core" params="$record->getMessages(), $record"}
</div>
{{endif}}
<article>
<div class='i-padding_3'>
{{if \count($record->customFieldsForDisplay('display_top'))}}
<ul class="ipsDatabaseFields i-margin-bottom_3">
{{foreach $record->customFieldsForDisplay('display_top') as $fieldId => $fieldValue}}
{{if $fieldValue}}
<li>{$fieldValue|raw}</li>
{{endif}}
{{endforeach}}
</ul>
{{endif}}
<section class="ipsRichText ipsRichText--user" data-controller='core.front.core.lightboxedImages'>{$record->_content|raw}</section>
{{if $record->editLine()}}
{$record->editLine()|raw}
{{endif}}
{{if $records = $record->getReciprocalItems()}}
{{foreach $records as $fieldId => $items}}
{{$infoLineShown = FALSE;}}
<ul class="ipsList ipsList--csv i-margin-top_3">
{{foreach $items as $item}}
<li>{{if ! $infoLineShown}}{{$infoLineShown=TRUE;}}{lang="records_linking_to_me" sprintf="$item::database()->recordWord(0,TRUE), $record::database()->recordWord(1)"}: {{endif}}<a href="{$item->url()}">{$item->_title}</a></li>
{{endforeach}}
</ul>
{{endforeach}}
{{endif}}
</div>
{{if $bottomFields = $record->customFieldsForDisplay('display_bottom')}}
<hr class='ipsHr'>
<div class="ipsRichText ipsRichText--user i-padding_3" data-controller='core.front.core.lightboxedImages'>
{{foreach $bottomFields as $fieldId => $fieldValue}}
{{if $fieldValue}}
{$fieldValue|raw}
{{endif}}
{{endforeach}}
</div>
{{endif}}
<div class='ipsEntry__footer'>
<menu class='ipsEntry__controls'>
<li>
{$record->menu()|raw}
</li>
{{if $record->canManageRevisions()}}
<li><a href='{$record->url('revisions')}' title="{lang="content_view_revisions"}">{lang="content_view_revisions"}</a></li>
{{endif}}
</menu>
{{if \IPS\IPS::classUsesTrait( $record, 'IPS\Content\Reactable' ) and settings.reputation_enabled}}
{template="reputation" app="core" group="global" params="$record"}
{{endif}}
</div>
</article>
</section>
<section class='ipsBox ipsBox--pageActions i-padding_2 ipsPull ipsResponsive_showPhone'>
<div class='ipsPageActions'>
{{if !$record->container()->disable_sharelinks}}
{template="shareButton" app="core" group="sharelinks" params="$record"}
{{endif}}
{{if \IPS\Application::appIsEnabled('cloud')}}
{template="spam" app="cloud" group="spam" params="$record"}
{{endif}}
{template="follow" app="core" group="global" params="'cms', 'records'.$record::$customDatabaseId, $record->primary_id_field, $record->followersCount()"}
</div>
</section>
<nav class='ipsPager'>
<div class="ipsPager_prev">
{{if $record::database()->use_categories}}
<a href="{$record->container()->url()}" title="{lang="cms_back_to_category_with_title" sprintf="$record->container()->_title"}" rel="up">
<span class="ipsPager_type">{lang="cms_back_to_category" sprintf="$record::database()->recordWord( 2 )"}</span>
</a>
{{else}}
{{$page = \IPS\cms\Pages\Page::$currentPage;}}
<a href="{$page->url()}" title="{lang="cms_back_to_category_with_title" sprintf="$page->_title"}" rel="up">
<span class="ipsPager_type">{lang="cms_back_to_category" sprintf="$record::database()->recordWord( 2 )"}</span>
</a>
{{endif}}
</div>
{{if $nextUnread !== NULL}}
<div class='ipsPager_next'>
<a href="{$record->url()->setQueryString( array( 'do' => 'nextUnread' ) )}" title='{lang="cms_view_next_unread_title" sprintf="$record::database()->recordWord( 1 )"}'>
<span class="ipsPager_type">{lang="cms_next_unread_title" sprintf="$record::database()->recordWord( 1 )"}</span>
</a>
</div>
{{endif}}
</nav>
{{if $commentsAndReviews}}
<h2 class='ipsHide'>{lang="user_feedback"}</h2>
<div class='ipsBox ipsBox--commentsAndReviews ipsPull' id="replies">
{$commentsAndReviews|raw}
</div>
{{endif}}
{{if $updateForm}}
<div class='ipsBox ipsBox--updateForm ipsPull'>
<h2 class='ipsBox__header'>{lang="cms_front_update_fields" sprintf="$record::database()->recordWord( 1 )"}</h2>
{$updateForm|raw}
</div>
{{endif}}
]]></template>
<template template_key="database_display_recordEditLine" template_title="recordEditLine" template_desc="" template_location="database" template_group="display" template_params="$record" template_app="" template_type="template"><![CDATA[
<p class='i-color_soft i-font-size_-1 ipsEdited' data-excludequote data-el='edited'>
<i class="fa-regular fa-pen-to-square i-margin-end_icon"></i> <strong class='i-font-weight_500'>{lang="date_edited" htmlsprintf="\IPS\DateTime::ts( $record->record_edit_time )->html(FALSE), htmlspecialchars( $record->record_edit_member_name, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE )"}</strong>
{{if $record->record_edit_reason}}
<br>{$record->record_edit_reason}
{{endif}}
{{if $record->database()->revisions and \IPS\Settings::i()->edit_log == 2 and ( \IPS\Settings::i()->edit_log_public or \IPS\Member::loggedIn()->modPermission('can_view_editlog') )}}
<a href='{$record->url('revisions')}' data-ipsDialog data-ipsDialog-title="{lang="content_view_revisions"}" title="{lang="content_edit_view_revisions"}">{lang="content_edit_view_revisions"}</a>
{{if !$record->record_edit_show AND \IPS\Member::loggedIn()->modPermission('can_view_editlog')}}
<br>{lang="comment_edit_show_anyways"}
{{endif}}
{{endif}}
</p>]]></template>
<template template_key="database_display_review" template_title="review" template_desc="" template_location="database" template_group="display" template_params="$item, $review, $editorName, $app, $type" template_app="" template_type="template"><![CDATA[<div id='review-{$review->id}_wrap' data-controller='core.front.core.comment' data-commentApp='{$app}' data-feedid="{$review->feedId}" data-commentType='{$type}-review' data-commentID="{$review->id}" data-quoteData='{expression="json_encode( array('userid' => $review->author()->member_id, 'username' => $review->author()->name, 'timestamp' => $review->mapped('date'), 'contentapp' => $app, 'contenttype' => $type, 'contentid' => $item->id, 'contentcommentid' => $review->id) )"}' class='ipsEntry__content js-ipsEntry__content'
{{if \IPS\IPS::classUsesTrait( $review, 'IPS\Content\IntersectionViewTracking' ) AND $hash=$review->getViewTrackingHash()}}
data-view-hash="{$hash|raw}"
data-view-tracking-data="{expression="base64_encode(json_encode( $review->getViewTrackingData() ))" raw="true"}"
{{endif}}
>
<header class='ipsEntry__header'>
<div class='ipsEntry__header-align'>
<div class='ipsPhotoPanel'>
<div class='ipsAvatarStack'>
{template="userPhoto" app="core" group="global" params="$review->author(), 'fluid', $review->warningRef()"}
{{if $review->author()->canHaveAchievements() and \IPS\core\Achievements\Rank::show() and $rank = $review->author()->rank()}}
{$rank->html( 'ipsAvatarStack__rank' )|raw}
{{endif}}
</div>
<div class='ipsPhotoPanel__text'>
<div class='ipsEntry__username'>
<h3>{template="userLink" app="core" group="global" params="$review->author(), $review->warningRef(), NULL, \IPS\IPS::classUsesTrait( $review, 'IPS\Content\Anonymous' ) AND $review->isAnonymous()"}</h3>
{{if \IPS\IPS::classUsesTrait( $review, 'IPS\Content\Anonymous' ) and !$review->isAnonymous()}}
<span class='ipsEntry__group'>{expression="\IPS\Member\Group::load( $review->author()->member_group_id )->formattedName" raw="true"}</span>
{{endif}}
</div>
<p class='ipsPhotoPanel__secondary'>
{{if $review->mapped('date')}}
{datetime="$review->mapped('date')"}
{{else}}
{lang="unknown_date"}
{{endif}}
{{if $review->editLine()}}
({lang="edited_lc"})
{{endif}}
</p>
</div>
</div>
{{if \count( $item->reviewMultimodActions() )}}
<input type="checkbox" name="multimod[{$review->id}]" value="1" data-role="moderation" data-actions="{{if $review->hidden() === -1 AND $review->canUnhide()}}unhide{{elseif $review->hidden() === 1 AND $review->canUnhide()}}approve{{elseif $review->canHide()}}hide{{endif}} {{if $review->canDelete()}}delete{{endif}}" data-state='{{if $review->tableStates()}}{$review->tableStates()}{{endif}}' class="ipsInput ipsInput--toggle">
{{endif}}
<a href='#elControlsReviews_{$review->id}_menu' class='ipsEntry__topButton ipsEntry__topButton--ellipsis' id='elControlsReviews_{$review->id}' title='{lang="more_options"}' data-ipsMenu data-ipsMenu-appendTo='#review-{$review->id}_wrap'><i class='fa-solid fa-ellipsis'></i><span class='ipsInvisible'>{lang="more_options"}</span></a>
<ul id='elControlsReviews_{$review->id}_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
{{if $review->canReportOrRevoke() === TRUE}}
<li class='ipsMenu_item'>
<a href='{$review->url('report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}"{{endif}} data-action='reportComment' title='{lang="report"}'>{lang="report"}</a>
</li>
{{endif}}
{{if ! \IPS\Output::i()->reduceLinks()}}
<li class='ipsMenu_item'>
<a href='{$review->shareableUrl('review')}' title='{lang="share_this_review"}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-content='#elShareReview_{$review->id}_menu' data-ipsDialog-title="{lang="share_this_review"}" id='elShareReview_{$review->id}' data-role='shareComment'>{lang="share_this_review"}</a>
</li>
{{endif}}
{{if $review->canEdit() || ( $review->hidden() == -2 AND \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content') ) || ( \IPS\IPS::classUsesTrait( $review, 'IPS\Content\Hideable' ) && ( ( !$review->hidden() and $review->canHide() ) || ( $review->hidden() and $review->canUnhide() ) ) ) || $review->canDelete()}}
<li class='ipsMenu_sep'><hr></li>
{{endif}}
{{if $review->canEdit()}}
<li class='ipsMenu_item'><a href='{$review->url('edit')}' data-action='editComment'>{lang="edit"}</a></li>
{{endif}}
{{if $review->hidden() == -2 AND \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content')}}
<li class='ipsMenu_item'><a href='{$review->url('restore')->csrf()}' data-confirm data-confirmSubMessage='{lang="restore_as_visible_desc"}'>{lang="restore_as_visible"}</a></li>
<li class='ipsMenu_item'><a href='{$review->url('restore')->csrf()->setQueryString( 'restoreAsHidden', 1 )}' data-confirm data-confirmSubMessage='{lang="restore_as_hidden_desc"}'>{lang="restore_as_hidden"}</a></li>
<li class='ipsMenu_item'><a href='{$review->url('delete')->csrf()->setQueryString( 'immediately', 1 )}' data-confirm data-confirmSubMessage='{lang="delete_immediately_desc"}'>{lang="delete_immediately"}</a></li>
{{else}}
{{if \IPS\IPS::classUsesTrait( $review, 'IPS\Content\Hideable' )}}
{{if !$review->hidden() and $review->canHide()}}
<li class='ipsMenu_item'><a href='{{if $review::$hideLogKey}}{$review->url('hide')}{{else}}{$review->url('hide')->csrf()}{{endif}}' data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
{{elseif $review->hidden() and $review->canUnhide()}}
<li class='ipsMenu_item'><a href='{$review->url('unhide')->csrf()}'>{lang="unhide"}</a></li>
{{endif}}
{{if \IPS\Application::appIsEnabled('cloud')}}
<li>{template="spam" app="cloud" group="spam" params="$review, FALSE"}</li>
{{endif}}
{{endif}}
{{if $review->canDelete()}}
<li class='ipsMenu_item'><a href='{$review->url('delete')->csrf()->setPage('page',\IPS\Request::i()->page)}' data-action='deleteComment' data-updateOnDelete="#reviewCount">{lang="delete"}</a></li>
{{endif}}
{{endif}}
</ul>
{{if $review->author()->member_id}}
<!-- Expand mini profile -->
<button class='ipsEntry__topButton ipsEntry__topButton--profile' type='button' aria-controls='mini-profile-review-{$review->id}' aria-expanded='false' data-ipscontrols data-ipscontrols-src="{$review->authorMiniProfileUrl}" aria-label="Toggle mini profile"><i class="fa-solid fa-chevron-down" aria-hidden="true"></i></button>
{{endif}}
</div>
{{if $review->author()->member_id}}
{template="miniProfileWrap" app="core" group="global" params="$review->author(), $review->id, 'review', remoteLoading: true"}
{{endif}}
</header>
<div class='ipsEntry__post'>
{{if $review->hidden() AND $review->hidden() != -2}}
<div class='ipsEntry__hiddenMessage'>{$review->hiddenBlurb()}</div>
{{elseif $review->hidden() == -2}}
<div class='ipsEntry__hiddenMessage'>{$review->deletedBlurb()}</div>
{{endif}}
<div class='ipsRating ipsRating_large i-margin-bottom_3'>
<ul>
{{foreach range( 1, \intval( \IPS\Settings::i()->reviews_rating_out_of ) ) as $i}}
<li class='{{if $review->mapped('rating') >= $i}}ipsRating_on{{else}}ipsRating_off{{endif}}'>
<i class='fa-solid fa-star'></i>
</li>
{{endforeach}}
</ul>
</div>
&nbsp;&nbsp; {{if $review->mapped('votes_total')}}<strong>{$review->helpfulLine()|raw}</strong>{{endif}}
<div id="review-{$review->id}" class='ipsRichText ipsRichText--user' data-role='commentContent' data-controller='core.front.core.lightboxedImages'>
{$review->content()|raw}
{{if $review->editLine()}}
{$review->editLine()|raw}
{{endif}}
</div>
{{if $review->hasAuthorResponse()}}
<div class='ipsReviewResponse i-padding_3 i-margin-bottom_3 i-background_2'>
<div class='i-flex i-align-items_center i-justify-content_space-between i-margin-bottom_2'>
<h4 class='ipsTitle ipsTitle--h5'>{lang="review_response_title"}</h4>
{{if $review->canEditResponse() OR $review->canDeleteResponse()}}
<a href='#elControlsReviews_{$review->id}_response_menu' class='ipsEntry__topButton ipsEntry__topButton--ellipsis' id='elControlsReviews_{$review->id}_response' title='{lang="more_options"}' data-ipsMenu data-ipsMenu-appendTo='#review-{$review->id}_wrap'><i class='fa-solid fa-ellipsis'></i></a>
{{endif}}
</div>
<div data-role="reviewResponse" class="ipsRichText" data-controller='core.front.core.lightboxedImages'>{$review->mapped('author_response')|raw}</div>
{{if $review->canEditResponse() OR $review->canDeleteResponse()}}
<ul class='ipsMenu ipsMenu_narrow ipsHide' id='elControlsReviews_{$review->id}_response_menu'>
{{if $review->canEditResponse()}}
<li class='ipsMenu_item'><a href='{$review->url('editResponse')}' data-ipsDialog data-ipsDialog-title='{lang="review_author_respond"}'>{lang="edit"}</a></li>
{{endif}}
{{if $review->canDeleteResponse()}}
<li class='ipsMenu_item'><a href='{$review->url('deleteResponse')->csrf()}' data-confirm>{lang="delete"}</a></li>
{{endif}}
</ul>
{{endif}}
</div>
{{endif}}
{{if $review->hidden() !== 1}}
{{if member.member_id and ( !$review->mapped('votes_data') or !array_key_exists( member.member_id, json_decode( $review->mapped('votes_data'), TRUE ) ) ) and $review->author()->member_id != \IPS\Member::loggedIn()->member_id}}
<div class='i-flex i-align-items_center i-flex-wrap_wrap i-gap_2 i-margin-top_3'>
<div class='i-font-weight_500 i-color_hard i-font-size_-1'>{lang="did_you_find_this_helpful"}</div>
<div class='ipsButtons i-font-size_-2'>
<a href='{$review->url('rate')->setQueryString( 'helpful', TRUE )->csrf()}' class='ipsButton ipsButton--inherit i-color_positive' data-action="rateReview"><i class='fa-solid fa-check'></i><span>{lang="yes"}</span></a>
<a href='{$review->url('rate')->setQueryString( 'helpful', FALSE )->csrf()}' class='ipsButton ipsButton--inherit i-color_negative' data-action="rateReview"><i class='fa-solid fa-xmark'></i><span>{lang="no"}</span></a>
</div>
</div>
{{endif}}
{{endif}}
</div>
{{if ( member.member_id and ( !$review->mapped('votes_data') or !array_key_exists( member.member_id, json_decode( $review->mapped('votes_data'), TRUE ) ) ) ) || $review->canEdit() || $review->canDelete() || $review->canHide() || $review->canUnhide() || ( $review->hidden() !== 1 && \IPS\IPS::classUsesTrait( $review, 'IPS\Content\Reactable' ) and settings.reputation_enabled and $review->hasReactionBar() )}}
<div class='ipsEntry__footer'>
{{if $review->canEdit() || $review->canDelete() || $review->canHide() || $review->canUnhide() || ( $review->hidden() !== 1 && $review->canRespond() ) }}
<menu class='ipsEntry__controls' data-role="commentControls">
{{if $review->hidden() === 1 && ( $review->canUnhide() || $review->canDelete() )}}
{{if $review->canUnhide()}}
<li><a href='{$review->url('unhide')->csrf()}' data-action='approveComment'><i class='fa-solid fa-check'></i><span>{lang="approve"}</span></a></li>
{{endif}}
{{if $review->canDelete()}}
<li><a href='{$review->url('delete')->csrf()->setPage('page',\IPS\Request::i()->page)}' data-action='deleteComment' data-updateOnDelete="#commentCount"><i class='fa-solid fa-xmark'></i><span>{lang="delete"}</span></a></li>
{{endif}}
{{if $review->canEdit() || $review->canSplit()}}
<li>
<a href='#elControlsReviewsSub_{$review->id}_menu' id='elControlsReviewsSub_{$review->id}' data-ipsMenu data-ipsMenu-appendTo='#review-{$review->id}_wrap'><span>{lang="options"}</span><i class='fa-solid fa-caret-down'></i></a>
<ul id='elControlsReviewsSub_{$review->id}_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
{{if $review->canEdit()}}
{{if $review->mapped('first') and $review->item()->canEdit()}}
<li class='ipsMenu_item'><a href='{$review->item()->url()->setQueryString( 'do', 'edit' )}'>{lang="edit"}</a></li>
{{else}}
<li class='ipsMenu_item'><a href='{$review->url('edit')}' data-action='editComment'>{lang="edit"}</a></li>
{{endif}}
{{endif}}
{{if $review->canSplit()}}
<li class='ipsMenu_item'><a href='{$review->url('split')}' data-action='splitComment' data-ipsDialog data-ipsDialog-title="{lang="split_to_new" sprintf="\IPS\Member::loggedIn()->language()->addToStack( $item::$title )"}">{lang="split"}</a></li>
{{endif}}
</ul>
</li>
{{endif}}
{{elseif $review->hidden() !== 1 && $review->canRespond()}}
<li>
<a href='{$review->url('respond')}' data-role='respond' data-ipsDialog data-ipsDialog-title='{lang="review_author_respond"}'><span>{lang="review_author_respond"}</span></a>
</li>
{{endif}}
<li class='ipsHide' data-role='commentLoading'>
<span class='ipsLoading ipsLoading--tiny'></span>
</li>
</menu>
{{endif}}
{{if $review->hidden() !== 1 && \IPS\IPS::classUsesTrait( $review, 'IPS\Content\Reactable' ) and settings.reputation_enabled}}
{template="reputation" group="global" app="core" params="$review"}
{{endif}}
</div>
{{endif}}
{{if ! \IPS\Output::i()->reduceLinks()}}
{template="sharemenu" group="global" app="core" params="$review"}
{{endif}}
</div>]]></template>
<template template_key="database_display_reviewContainer" template_title="reviewContainer" template_desc="" template_location="database" template_group="display" template_params="$item, $review" template_app="" template_type="template"><![CDATA[{{if $review->isIgnored()}}
<div class='ipsEntry ipsEntry--ignored'>
<i class="fa-solid fa-user-slash"></i> {lang="ignoring_content" sprintf="$review->author()->name"}
</div>
{{else}}
<a id="review-{$review->id}"></a>
<a id="findReview-{$review->id}"></a>
<article id="review-{$review->id}" class="ipsEntry js-ipsEntry ipsEntry--simple ipsEntry--review {{if $review->hidden() OR $item->hidden() == -2}}ipsModerated{{endif}}">
{template="review" location="database" group="display" app="cms" params="$item, $review, $item::$formLangPrefix . 'review', $item::$application, $item::$module"}
</article>
{{endif}}]]></template>
<template template_key="database_display_reviews" template_title="reviews" template_desc="" template_location="database" template_group="display" template_params="$record" template_app="" template_type="template"><![CDATA[<div data-controller='core.front.core.commentFeed' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='reviews' data-baseURL='{$record->url()}' {{if $record->isLastPage('reviews')}}data-lastPage{{endif}} data-feedID='{$record->reviewFeedId}' id='reviews'>
{{if $record->reviewForm()}}
<div class="ipsComposeAreaWrapper">
{{if $record->locked()}}
<strong class='i-color_warning'><i class='fa-solid fa-circle-info'></i> {lang="item_locked_can_review"}</strong>
{{endif}}
<div id='elRecordReviewForm'>
{$record->reviewForm()|raw}
</div>
</div>
{{else}}
{{if $record->hasReviewed()}}
<!-- Already reviewed -->
{{elseif $record->locked()}}
{template="commentUnavailable" group="forms" location="front" app="core" params="'item_locked_cannot_review'"}
{{elseif \IPS\Member::loggedin()->restrict_post}}
{{if \IPS\Member::loggedIn()->restrict_post == -1}}
{template="reviewUnavailable" group="forms" location="front" app="core" params="'restricted_cannot_comment'"}
{{else}}
{template="reviewUnavailable" group="forms" location="front" app="core" params="'restricted_cannot_comment', \IPS\Member::loggedIn()->warnings(5,NULL,'rpa'), \IPS\Member::loggedIn()->restrict_post"}
{{endif}}
{{elseif \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings']}}
{template="reviewUnavailable" group="forms" location="front" app="core" params="'unacknowledged_warning_cannot_post', \IPS\Member::loggedIn()->warnings( 1, FALSE )"}
{{endif}}
{{endif}}
{{if \count( $record->reviews( NULL, NULL, 'date', 'desc', NULL, NULL, NULL, NULL, isset( \IPS\Request::i()->showDeleted ) ) )}}
<div class="ipsButtonBar ipsButtonBar--top">
{{if $record->reviewPageCount() > 1}}
<div class="ipsButtonBar__pagination">
{$record->reviewPagination( array( 'tab', 'sort' ) )|raw}
</div>
{{endif}}
<div class='ipsButtonBar__end'>
<ul class='ipsDataFilters'>
<li data-action="tableFilter">
<a href="{$record->url()->setQueryString( array( 'd' => $record::$customDatabaseId, 'tab' => 'reviews', 'sort' => 'helpful' ) )->setPage('page',1)}" class="ipsDataFilters__button {{if !isset( request.sort ) or request.sort != 'newest'}}ipsDataFilters__button--active{{endif}}" data-action="filterClick">{lang="most_helpful"}</a>
</li>
<li data-action="tableFilter">
<a href="{$record->url()->setQueryString( array( 'd' => $record::$customDatabaseId, 'tab' => 'reviews', 'sort' => 'newest' ) )->setPage('page',1)}" class="ipsDataFilters__button {{if isset( request.sort ) and request.sort == 'newest'}}ipsDataFilters__button--active{{endif}}" data-action="filterClick">{lang="newest"}</a>
</li>
</ul>
{template="commentMultimodHeader" app="core" group="global" params="$record, '#reviews', 'review'"}
</div>
</div>
<div data-role='commentFeed' data-controller='core.front.core.moderation'>
<form action="{$record->url()->csrf()->setQueryString( 'do', 'multimodReview' )->setPage('page',\IPS\Request::i()->page)}" method="post" data-ipsPageAction data-role='moderationTools'>
{{$reviewCount=0; $timeLastRead = $record->timeLastRead(); $lined = FALSE;}}
{{foreach $record->reviews( NULL, NULL, 'date', 'desc', NULL, NULL, NULL, NULL, isset( \IPS\Request::i()->showDeleted ) ) as $review}}
{{if !$lined and $timeLastRead and $timeLastRead->getTimestamp() < $review->mapped('date')}}
{{if $lined = TRUE and $reviewCount}}
<hr class="ipsUnreadBar">
{{endif}}
{{endif}}
{{$reviewCount++;}}
{$review->html()|raw}
{{endforeach}}
{template="commentMultimod" app="core" group="global" params="$record, 'review'"}
</form>
</div>
{{if $record->reviewPageCount() > 1}}
<div class="ipsButtonBar ipsButtonBar--bottom">
<div class="ipsButtonBar__pagination">
{$record->reviewPagination( array( 'tab', 'sort' ) )|raw}
</div>
</div>
{{endif}}
{{elseif !$record->canReview()}}
<p class="ipsEmptyMessage" data-role="noReviews">{lang="no_reviews"}</p>
{{endif}}
</div>]]></template>
<template template_key="database_form_recordForm" template_title="recordForm" template_desc="" template_location="database" template_group="form" template_params="$record, $category, $database, $page, $title, $hasModOptions, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class=''" template_app="" template_type="template"><![CDATA[{{$modOptions = array( 'create_record_state', 'record_expiry_date', 'record_pinned', 'record_allow_comments', 'record_comment_cutoff', 'record_meta_keywords', 'record_meta_description' );}}
{template="pageHeader" if="!\IPS\Request::i()->isAjax()" group="global" app="core" params="\IPS\Member::loggedIn()->language()->addToStack( $title )"}
{{$guestPostBeforeRegister = ( !\IPS\Member::loggedIn()->member_id ) ? !$category->can( 'add', \IPS\Member::loggedIn(), FALSE ) : FALSE;}}
{{$recordClass = 'IPS\cms\Records' . $database->_id;}}
{{$modQueued = $recordClass::moderateNewItems( \IPS\Member::loggedIn(), $category, $guestPostBeforeRegister );}}
{{if $guestPostBeforeRegister or $modQueued}}
{template="postingInformation" app="core" group="forms" params="$guestPostBeforeRegister, $modQueued, TRUE"}
{{endif}}
<div id="elCmsPageWrap" data-pageid="{$page->id}">
<form accept-charset='utf-8' class="ipsFormWrap ipsFormWrap--record" data-ipsForm data-ipsFormSubmit action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}}>
<input type="hidden" name="{$id}_submitted" value="1">
{{foreach $hiddenValues as $k => $v}}
<input type="hidden" name="{$k}" value="{$v}">
{{endforeach}}
{{if $uploadField}}
<input type="hidden" name="MAX_FILE_SIZE" value="{$uploadField}">
<input type="hidden" name="plupload" value="{expression="md5( mt_rand() )"}">
<input type="hidden" name="content_record_form_container" value="{$category->_id}">
{{endif}}
<div class='ipsBox ipsPull'>
<h2 class='ipsBox__header'>{lang="record_information" sprintf="$database->recordWord(1, TRUE)"}</h2>
{{if is_countable( $elements) AND \count( $elements ) > 1}}
{{if !empty( $errorTabs )}}
<p class="ipsMessage ipsMessage--error ipsJS_show">{lang="tab_error"}</p>
{{endif}}
<i-tabs class='ipsTabs' id='ipsTabs_{$id}' data-ipsTabBar data-ipsTabBar-contentArea='#ipsTabs_{$id}_content'>
<div role='tablist'>
{{$checkedTab = NULL;}}
{{foreach $elements as $name => $content}}
<button type="button" id='ipsTabs_{$id}_{$name}' class="ipsTabs__tab" role="tab" aria-controls="ipsTabs_{$id}_{$name}_panel" aria-selected="{{if !$checkedTab}}true{{$checkedTab = $name;}}{{else}}false{{endif}}">{lang="$name"}</button>
{{endforeach}}
</div>
{template="tabScrollers" app="core" group="global" location="global"}
</i-tabs>
<div id='ipsTabs_{$id}_content' class='ipsTabs__panels ipsTabs__panels--padded'>
{{foreach $elements as $name => $contents}}
<div id='ipsTabs_{$id}_{$name}_panel' class="ipsTabs__panel" aria-labelledby="ipsTabs_{$id}_{$name}" role="tabpanel" {{if $checkedTab != $name}}hidden{{endif}}>
{{if $hasModOptions && ( $name == 'topic_mainTab' OR $name == 'content_record_form_mainTab' ) }}
<div class='ipsColumns ipsColumns--lines'>
<div class='ipsColumns__primary'>
{{endif}}
<ul class='ipsForm {$class} ipsForm--vertical ipsForm--record'>
{{foreach $contents as $inputName => $input}}
{{if $inputName == 'content_field_' . $database->field_title and isset( $contents['record_static_furl_set'] ) and isset( $contents['record_static_furl'] )}}
{template="customslug" app="cms" location="global" group="records" params="$collection, $input, $category, $page, $database, $record"}
{{endif}}
{{if !\in_array( $inputName, $modOptions ) and $inputName !== 'record_static_furl_set' and $inputName !== 'record_static_furl'}}
{$input|raw}
{{endif}}
{{endforeach}}
</ul>
{{if $hasModOptions && $name == 'content_record_form_mainTab'}}
</div>
<div class='ipsColumns__secondary i-basis_300'>
<h3 class='i-padding_3 ipsTitle ipsTitle--h5'>{lang="cms_moderator_options"}</h3>
<ul class='ipsForm ipsForm--vertical ipsForm--record-mod'>
{{foreach $elements as $collection}}
{{foreach $collection as $inputName => $input}}
{{if \in_array( $inputName, $modOptions )}}
{{if $inputName == 'record_expiry_date' or $inputName == 'record_comment_cutoff'}}
<li class='ipsFieldRow'>
<label class="ipsFieldRow__label" for="elInput_{$input->name}">{lang="$input->name"}</label>
<ul class='ipsFieldRow__content cCreateTopic_date'>
<li>
<input type="date" name="{$input->name}" id="elInput_{$input->name}" value="{{if $input->value instanceof \IPS\DateTime}}{$input->value->format('Y-m-d')}{{else}}{$input->value}{{endif}}" class="ipsInput ipsInput--text" data-control="date" placeholder='{expression="str_replace( array( 'YYYY', 'MM', 'DD' ), array( \IPS\Member::loggedIn()->language()->addToStack('_date_format_yyyy'), \IPS\Member::loggedIn()->language()->addToStack('_date_format_mm'), \IPS\Member::loggedIn()->language()->addToStack('_date_format_dd') ), str_replace( 'Y', 'YY', \IPS\Member::loggedIn()->language()->preferredDateFormat() ) )"}'>
</li>
<li>
<input name="{$input->name}_time" type="time" size="12" class="ipsInput ipsInput--text" placeholder="{lang="_time_format_hhmm"}" step="60" min="00:00" value="{{if $input->value instanceof \IPS\DateTime}}{$input->value->format('H:i')}{{endif}}">
</li>
</ul>
</li>
{{else}}
{$input|raw}
{{endif}}
{{endif}}
{{endforeach}}
{{endforeach}}
</ul>
</div>
</div>
{{endif}}
</div>
{{endforeach}}
</div>
{{else}}
<div class=''>
{{if $hasModOptions}}
<div class='ipsColumns ipsColumns--lines'>
<div class='ipsColumns__primary'>
{{endif}}
<ul class='ipsForm {$class} ipsForm--vertical ipsForm--record'>
{{foreach $elements as $collection}}
{{foreach $collection as $inputName => $input}}
{{if $inputName == 'content_field_' . $database->field_title and isset( $collection['record_static_furl_set'] ) and isset( $collection['record_static_furl'] )}}
{template="customslug" app="cms" location="global" group="records" params="$collection, $input, $category, $page, $database, $record"}
{{endif}}
{{if !\in_array( $inputName, $modOptions ) and $inputName !== 'record_static_furl_set' and $inputName !== 'record_static_furl'}}
{$input|raw}
{{endif}}
{{endforeach}}
{{endforeach}}
</ul>
{{if $hasModOptions}}
</div>
<div class='ipsColumns__secondary i-basis_300'>
<h3 class='i-padding_3 ipsTitle ipsTitle--h5'>{lang="cms_moderator_options"}</h3>
<ul class='ipsForm ipsForm--vertical ipsForm--record-mod'>
{{foreach $elements as $collection}}
{{foreach $collection as $inputName => $input}}
{{if \in_array( $inputName, $modOptions )}}
{{if $inputName == 'record_expiry_date' or $inputName == 'record_comment_cutoff'}}
<li class='ipsFieldRow'>
<div data-role="unlimitedCatch">
<label class="ipsFieldRow__label" for="elInput_{$input->name}">{lang="$input->name"}</label>
<ul class='ipsFieldRow__content cCreateTopic_date'>
<li>
<input type="date" name="{$input->name}" id="elInput_{$input->name}" value="{{if $input->value instanceof \IPS\DateTime}}{$input->value->format('Y-m-d')}{{else}}{$input->value}{{endif}}" class="ipsInput ipsInput--text" data-control="date" placeholder='{{if $input->placeholder !== NULL}}{$input->placeholder}{{else}}{expression="str_replace( array( 'YYYY', 'MM', 'DD' ), array( \IPS\Member::loggedIn()->language()->addToStack('_date_format_yyyy'), \IPS\Member::loggedIn()->language()->addToStack('_date_format_mm'), \IPS\Member::loggedIn()->language()->addToStack('_date_format_dd') ), str_replace( 'Y', 'YY', \IPS\Member::loggedIn()->language()->preferredDateFormat() ) )"}{{endif}}' data-preferredFormat="{{if $input->value instanceof \IPS\DateTime}}{$input->value->localeDate()}{{else}}{$input->value}{{endif}}" {{if $input->disabled}}disabled aria-disabled='true'{{endif}}>
</li>
<li>
<input name="{$input->name}_time" type="time" size="12" class="ipsInput ipsInput--text" placeholder="{lang="_time_format_hhmm"}" step="60" min="00:00" value="{{if $input->value instanceof \IPS\DateTime}}{$input->value->format('H:i')}{{endif}}">
</li>
<li>
{{if $input->options['unlimited'] !== NULL and ( !$input->disabled or $input->options['unlimited'] === $input->value )}}
&nbsp;
{lang="or"}
&nbsp;
<input type="checkbox" role='checkbox' data-control="unlimited{{if $input->toggles AND \count( $input->toggles )}} toggle{{endif}}" name="{$input->name}_unlimited" id='{$input->name}_unlimited' value="{$input->options['unlimited']}" {{if $input->options['unlimited'] === $input->value}}checked{{endif}} {{if $input->options['disabled']}}disabled{{endif}} {{if $input->toggles AND \count( $input->toggles )}}{{if $input->toggleOn === FALSE}}data-togglesOff{{else}}data-togglesOn{{endif}}="{expression="implode( ',', $input->toggles )"}"{{endif}} aria-labelledby='label_{$input->name}_unlimited' class="ipsInput ipsInput--toggle">
<label for='{$input->name}_unlimited' id='label_{$input->name}_unlimited' class='ipsField_unlimited'>{lang="never"}</label>
{{endif}}
</li>
</ul>
</div>
</li>
{{else}}
{$input|raw}
{{endif}}
{{endif}}
{{endforeach}}
{{endforeach}}
</ul>
</div>
</div>
{{endif}}
</div>
{{endif}}
<div class='ipsSubmitRow'>
<button type='submit' class='ipsButton ipsButton--primary'>{lang="content_record_form_save"}</button>
</div>
</div>
</form>
</div>]]></template>
<template template_key="database_form_topicCopyForm" template_title="topicCopyForm" template_desc="" template_location="database" template_group="form" template_params="$record, $category, $database, $page, $title, $hasModOptions, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class=''" template_app="" template_type="template"><![CDATA[{{$modOptions = array( 'create_record_state', 'record_expiry_date', 'record_pinned', 'record_allow_comments', 'record_comment_cutoff', 'record_meta_keywords', 'record_meta_description' );}}
{template="pageHeader" if="!\IPS\Request::i()->isAjax()" group="global" app="core" params="\IPS\Member::loggedIn()->language()->addToStack( $title )"}
<div id="elCmsPageWrap" data-pageid="{$page->id}">
<form accept-charset='utf-8' class="ipsFormWrap ipsFormWrap--copy-topic" data-ipsForm="true" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}}>
<input type="hidden" name="{$id}_submitted" value="1">
{{foreach $hiddenValues as $k => $v}}
<input type="hidden" name="{$k}" value="{$v}">
{{endforeach}}
{{if $uploadField}}
<input type="hidden" name="MAX_FILE_SIZE" value="{$uploadField}">
<input type="hidden" name="plupload" value="{expression="md5( mt_rand() )"}">
<input type="hidden" name="content_record_form_container" value="{$category->_id}">
{{endif}}
<div class='ipsBox'>
<h2 class='ipsBox__header'>{lang="record_information" sprintf="$database->recordWord(1, TRUE)"}</h2>
{{if \count( $elements ) > 1}}
{{if !empty( $errorTabs )}}
<p class="ipsMessage ipsMessage--error ipsJS_show">{lang="tab_error"}</p>
{{endif}}
<i-tabs class='ipsTabs' id='ipsTabs_{$id}' data-ipsTabBar data-ipsTabBar-contentArea='#ipsTabs_{$id}_content'>
<div role='tablist'>
{{$checkedTab = NULL;}}
{{foreach $elements as $name => $content}}
<button type="button" id='ipsTabs_{$id}_{$name}' class="ipsTabs__tab" role="tab" aria-controls="ipsTabs_{$id}_{$name}_panel" aria-selected="{{if !$checkedTab}}true{{$checkedTab = $name;}}{{else}}false{{endif}}">
{lang="$name"}
</button>
{{endforeach}}
</div>
{template="tabScrollers" app="core" group="global" location="global"}
</i-tabs>
<div id='ipsTabs_{$id}_content' class='ipsTabs__panels ipsTabs__panels--padded'>
{{foreach $elements as $name => $contents}}
<div id='ipsTabs_{$id}_{$name}_panel' class="ipsTabs__panel" role="tabpanel" aria-labelledby="ipsTabs_{$id}_{$name}" {{if $checkedTab != $name}}hidden{{endif}}>
{{if $hasModOptions && ( $name == 'topic_mainTab' OR $name == 'content_record_form_mainTab' ) }}
<div class='ipsColumns'>
<div class='ipsColumns__primary'>
{{endif}}
<ul class='ipsForm {$class} ipsForm--vertical ipsForm--copy-topic'>
{{foreach $contents as $inputName => $input}}
{{if $inputName == 'content_field_' . $database->field_title and isset( $contents['record_static_furl_set'] ) and isset( $contents['record_static_furl'] )}}
{template="customslug" app="cms" location="global" group="records" params="$collection, $input, $category, $page, $database, $record"}
{{endif}}
{{if !\in_array( $inputName, $modOptions ) and $inputName !== 'record_static_furl_set' and $inputName !== 'record_static_furl'}}
{$input|raw}
{{endif}}
{{endforeach}}
</ul>
{{if $hasModOptions && $name == 'content_record_form_mainTab'}}
</div>
<div class='ipsColumns__secondary i-basis_280'>
<div class='i-padding_3 i-background_2'>
<h3 class='ipsTitle ipsTitle--h3'>{lang="cms_moderator_options"}</h3>
<ul class='ipsForm ipsForm--vertical ipsForm--copy-topic-mod i-margin-top_3'>
{{foreach $elements as $collection}}
{{foreach $collection as $inputName => $input}}
{{if \in_array( $inputName, $modOptions )}}
{{if $inputName == 'record_expiry_date' or $inputName == 'record_comment_cutoff'}}
<li class='ipsFieldRow'>
<label class="ipsFieldRow__label" for="elInput_{$inputName}">{lang="$input->name"}</label>
<ul class='ipsFieldRow__content cCreateTopic_date'>
<li>
<input type="date" name="{$input->name}" id="elInput_{$inputName}" value="{{if $input->value instanceof \IPS\DateTime}}{$input->value->format('Y-m-d')}{{else}}{$input->value}{{endif}}" class="ipsInput ipsInput--text" data-control="date" placeholder='{expression="str_replace( array( 'YYYY', 'MM', 'DD' ), array( \IPS\Member::loggedIn()->language()->addToStack('_date_format_yyyy'), \IPS\Member::loggedIn()->language()->addToStack('_date_format_mm'), \IPS\Member::loggedIn()->language()->addToStack('_date_format_dd') ), str_replace( 'Y', 'YY', \IPS\Member::loggedIn()->language()->preferredDateFormat() ) )"}'>
</li>
<li>
<input name="{$input->name}_time" type="time" size="12" class="ipsInput ipsInput--text" placeholder="{lang="_time_format_hhmm"}" step="60" min="00:00" value="{{if $input->value instanceof \IPS\DateTime}}{$input->value->format('H:i')}{{endif}}">
</li>
</ul>
</li>
{{else}}
{$input|raw}
{{endif}}
{{endif}}
{{endforeach}}
{{endforeach}}
</ul>
</div>
</div>
</div>
{{endif}}
</div>
{{endforeach}}
</div>
{{else}}
<div class='i-padding_3'>
{{if $hasModOptions}}
<div class='ipsColumns'>
<div class='ipsColumns__primary'>
{{endif}}
<ul class='ipsForm {$class} ipsForm--vertical ipsForm--copy-topic'>
{{foreach $elements as $collection}}
{{foreach $collection as $inputName => $input}}
{{if $inputName == 'content_field_' . $database->field_title and isset( $collection['record_static_furl_set'] ) and isset( $collection['record_static_furl'] )}}
{template="customslug" app="cms" location="global" group="records" params="$collection, $input, $category, $page, $database, $record"}
{{endif}}
{{if !\in_array( $inputName, $modOptions ) and $inputName !== 'record_static_furl_set' and $inputName !== 'record_static_furl'}}
{$input|raw}
{{endif}}
{{endforeach}}
{{endforeach}}
</ul>
{{if $hasModOptions}}
</div>
<div class='ipsColumns__secondary i-basis_280'>
<div class='i-padding_3 i-background_2'>
<h3 class='ipsTitle ipsTitle--h3'>{lang="cms_moderator_options"}</h3>
<ul class='ipsForm ipsForm--vertical ipsForm--copy-topic-mod i-margin-top_3'>
{{foreach $elements as $collection}}
{{foreach $collection as $inputName => $input}}
{{if \in_array( $inputName, $modOptions )}}
{{if $inputName == 'record_expiry_date' or $inputName == 'record_comment_cutoff'}}
<li class='ipsFieldRow'>
<div data-role="unlimitedCatch">
<label class="ipsFieldRow__label" for="elInput_{$input->name}">{lang="$input->name"}</label>
<ul class='ipsFieldRow__content cCreateTopic_date'>
<li>
<input type="date" name="{$input->name}" id="elInput_{$input->name}" value="{{if $input->value instanceof \IPS\DateTime}}{$input->value->format('Y-m-d')}{{else}}{$input->value}{{endif}}" class="ipsInput ipsInput--text" data-control="date" placeholder='{{if $input->placeholder !== NULL}}{$input->placeholder}{{else}}{expression="str_replace( array( 'YYYY', 'MM', 'DD' ), array( \IPS\Member::loggedIn()->language()->addToStack('_date_format_yyyy'), \IPS\Member::loggedIn()->language()->addToStack('_date_format_mm'), \IPS\Member::loggedIn()->language()->addToStack('_date_format_dd') ), str_replace( 'Y', 'YY', \IPS\Member::loggedIn()->language()->preferredDateFormat() ) )"}{{endif}}' data-preferredFormat="{{if $input->value instanceof \IPS\DateTime}}{$input->value->localeDate()}{{else}}{$input->value}{{endif}}" {{if $input->disabled}}disabled aria-disabled='true'{{endif}}>
</li>
<li>
<input name="{$input->name}_time" type="time" size="12" class="ipsInput ipsInput--text" placeholder="{lang="_time_format_hhmm"}" step="60" min="00:00" value="{{if $input->value instanceof \IPS\DateTime}}{$input->value->format('H:i')}{{endif}}">
</li>
<li>
{{if $input->options['unlimited'] !== NULL and ( !$input->disabled or $input->options['unlimited'] === $input->value )}}
&nbsp;
{lang="or"}
&nbsp;
<input type="checkbox" role='checkbox' data-control="unlimited{{if \count( $input->toggles )}} toggle{{endif}}" name="{$input->name}_unlimited" id='{$input->name}_unlimited' value="{$input->options['unlimited']}" {{if $input->options['unlimited'] === $input->value}}checked{{endif}} {{if $input->options['disabled']}}disabled{{endif}} {{if \count( $input->toggles )}}{{if $input->toggleOn === FALSE}}data-togglesOff{{else}}data-togglesOn{{endif}}="{expression="implode( ',', $input->toggles )"}"{{endif}} aria-labelledby='label_{$input->name}_unlimited' class="ipsInput ipsInput--toggle">
<label for='{$input->name}_unlimited' id='label_{$input->name}_unlimited' class='ipsField_unlimited'>{lang="never"}</label>
{{endif}}
</li>
</ul>
</div>
</li>
{{else}}
{$input|raw}
{{endif}}
{{endif}}
{{endforeach}}
{{endforeach}}
</ul>
</div>
</div>
</div>
{{endif}}
</div>
{{endif}}
<div class='ipsSubmitRow'>
<button type='submit' class='ipsButton ipsButton--primary'>{lang="content_record_form_save"}</button>
</div>
</div>
</form>
</div>]]></template>
<template template_key="database_listing_categoryFooter" template_title="categoryFooter" template_desc="" template_location="database" template_group="listing" template_params="$category, $table, $activeFilters" template_app="" template_type="template"><![CDATA[
{{if ! \IPS\Request::i()->isAjax() AND ! isset( \IPS\Request::i()->advancedSearchForm ) AND $category->show_records}}
<ul class="ipsButtons ipsButtons--main i-margin-block_block">
{{if \IPS\Member::loggedIn()->member_id}}
<li>
<a class="ipsButton ipsButton--text" href="{$category->url()->setQueryString( 'do', 'markRead' )->csrf()}"><i class="fa-solid fa-check"></i> {lang="cms_mark_read"}</a>
</li>
{{endif}}
{{if $category->can('add')}}
<li>
<a class="ipsButton ipsButton--primary" href="{$category->url()->setQueryString( array( 'do' => 'form', 'd' => \IPS\cms\Databases\Dispatcher::i()->databaseId ) )}">{lang="cms_add_new_record_button" sprintf="\IPS\cms\Databases::load( $category->database_id )->recordWord( 1 )"}</a>
</li>
{{endif}}
</ul>
{{endif}}
{{if !\IPS\Request::i()->advancedSearchForm}}
<div class="ipsPageActions ipsBox i-padding_2 ipsPull ipsResponsive_showPhone">
{template="follow" app="core" group="global" params="'cms','categories' . $category->database_id, $category->_id, \IPS\cms\Records::containerFollowerCount( $category )"}
</div>
{{endif}}
]]></template>
<template template_key="database_listing_categoryHeader" template_title="categoryHeader" template_desc="" template_location="database" template_group="listing" template_params="$category, $table, $activeFilters" template_app="" template_type="template"><![CDATA[
{{if !\IPS\Request::i()->advancedSearchForm}}
<header class="ipsPageHeader ipsBox ipsPull ipsPageHeader--database-category">
<div class="ipsPageHeader__row">
<div class='ipsPageHeader__primary'>
<h1 class='ipsPageHeader__title'>{$category->_title}</h1>
<div class='ipsPageHeader__desc'>{$category->_description|raw}</div>
</div>
<div class="ipsButtons">
{template="follow" app="core" group="global" params="'cms','categories' . $category->database_id, $category->_id, \IPS\cms\Records::containerFollowerCount( $category )"}
</div>
</div>
</header>
{{endif}}
{{if $category->hasChildren() AND ! isset( \IPS\Request::i()->advancedSearchForm )}}
<div class="ipsBox ipsPull i-margin-bottom_3">
<h2 class='ipsBox__header'>{lang="content_subcategories_title"}</h2>
<i-data>
<ol class="ipsData ipsData--table ipsData--category ipsData--database-listing">
{{foreach $category->children() as $cat}}
{template="categoryRow" group="category_index" location="database" app="cms" params="$cat"}
{{endforeach}}
</ol>
</i-data>
</div>
{{endif}}
{{if ! \IPS\Request::i()->isAjax() AND ! isset( \IPS\Request::i()->advancedSearchForm ) AND $category->show_records}}
<ul class="ipsButtons ipsButtons--main">
{{if \IPS\Member::loggedIn()->member_id}}
<li>
<a class="ipsButton ipsButton--text" href="{$category->url()->setQueryString( 'do', 'markRead' )->csrf()}"><i class="fa-solid fa-check"></i> {lang="cms_mark_read"}</a>
</li>
{{endif}}
{{if $category->can('add')}}
<li>
<a class="ipsButton ipsButton--primary" href="{$category->url()->setQueryString( array( 'do' => 'form', 'd' => \IPS\cms\Databases\Dispatcher::i()->databaseId ) )}">{lang="cms_add_new_record_button" sprintf="\IPS\cms\Databases::load( $category->database_id )->recordWord( 1 )"}</a>
</li>
{{endif}}
</ul>
{{endif}}
{{if \count( $activeFilters ) AND ! isset( \IPS\Request::i()->advancedSearchForm )}}
{template="filterMessage" group="listing" location="database" app="cms" params="$activeFilters, $category"}
{{endif}}]]></template>
<template template_key="database_listing_categoryTable" template_title="categoryTable" template_desc="" template_location="database" template_group="listing" template_params="$table, $headers, $rows, $quickSearch" template_app="" template_type="template"><![CDATA[<div class='ipsBox ipsPull' data-baseurl='{$table->baseUrl}' data-resort='{$table->resortKey}' data-controller='core.global.core.table{{if $table->canModerate()}},core.front.core.moderation{{endif}}'>
{{if isset( $table->extra['db'] )}}
<h2 class='ipsBox__header'>
{{$recordWord = $table->extra['db']->recordWord( $table->count );}}
{{if $table->extra['db']->use_categories}}
{lang="x_records_in_this_category" sprintf="$table->count, $recordWord"}
{{else}}
{lang="x_records" sprintf="$table->count, $recordWord"}
{{endif}}
</h2>
{{endif}}
<div class="ipsButtonBar ipsButtonBar--top">
{{if $table->pages > 1}}
<div class="ipsButtonBar__pagination" data-role="tablePagination">
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit"}
</div>
{{endif}}
<div class='ipsButtonBar__end'>
<ul class='ipsDataFilters'>
{{if isset( $table->sortOptions ) and !empty( $table->sortOptions )}}
<li>
<a href="#elSortByMenu_menu" class='ipsDataFilters__button' id="elSortByMenu_{$table->uniqueId}" data-role='sortButton' data-ipsMenu data-ipsMenu-activeClass="ipsDataFilters__button--active" data-ipsMenu-selectable="radio">{lang="sort_by"} <i class="fa-solid fa-caret-down"></i></a>
<ul class="ipsMenu ipsMenu_auto ipsMenu_withStem ipsMenu_selectable ipsHide" id="elSortByMenu_{$table->uniqueId}_menu">
{{$custom = TRUE;}}
{{foreach $table->sortOptions as $k => $col}}
<li class="ipsMenu_item {{if $col === $table->getSortByColumn()}}{{$custom = FALSE;}}ipsMenu_itemChecked{{endif}}" data-ipsMenuValue="{$col}" data-sortDirection='{$table->getSortDirection( $col )}'><a href="{$table->baseUrl->setQueryString( array( 'filter' => $table->filter, 'sortby' => $col, 'sortdirection' => $table->getSortDirection( $col ) ) )->setPage('page',1)}" rel="nofollow">{lang="{$table->langPrefix}sort_{$k}"}</a></li>
{{endforeach}}
{{if $table->advancedSearch}}
<li class="ipsMenu_item {{if $custom}}ipsMenu_itemChecked{{endif}}" data-noSelect="true">
<a href='{$table->baseUrl->setQueryString( array( 'advancedSearchForm' => '1', 'filter' => $table->filter, 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) )}' rel="nofollow" data-ipsDialog data-ipsDialog-title='{lang="custom_sort"}'>{lang="custom"}</a>
</li>
{{endif}}
</ul>
</li>
{{endif}}
{{if !empty( $table->filters )}}
<li>
<a href="#elFilterByMenu_menu" class='ipsDataFilters__button' data-role="tableFilterMenu" id="elFilterByMenu_{$table->uniqueId}" data-ipsMenu data-ipsMenu-activeClass="ipsDataFilters__button--active" data-ipsMenu-selectable="radio">{lang="filter_by"} <i class="fa-solid fa-caret-down"></i></a>
<ul class='ipsMenu ipsMenu_auto ipsMenu_withStem ipsMenu_selectable ipsHide' id='elFilterByMenu_{$table->uniqueId}_menu'>
<li data-action="tableFilter" data-ipsMenuValue='' class='ipsMenu_item {{if !$table->filter}}ipsMenu_itemChecked{{endif}}'>
<a href='{$table->baseUrl->setQueryString( array( 'filter' => '', 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) )->setPage('page',1)}' rel="nofollow">{lang="{$table->langPrefix}all"}</a>
</li>
{{foreach $table->filters as $k => $q}}
<li data-action="tableFilter" data-ipsMenuValue='{$k}' class='ipsMenu_item {{if $k === $table->filter}}ipsMenu_itemChecked{{endif}}'>
<a href='{$table->baseUrl->setQueryString( array( 'filter' => $k, 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) )->setPage('page',1)}' rel="nofollow">{lang="{$table->langPrefix}{$k}"}</a>
</li>
{{endforeach}}
</ul>
</li>
{{endif}}
{{if $table->canModerate()}}
<li>
<a class="ipsDataFilters__button ipsJS_show" href="#elCheck_menu" id="elCheck_{$table->uniqueId}" title='{lang="{$table->langPrefix}select_rows_tooltip"}' data-ipsTooltip data-ipsAutoCheck data-ipsAutoCheck-context="#elTable_{$table->uniqueId}" data-ipsMenu data-ipsMenu-activeClass="ipsDataFilters__button--active">
<span class="cAutoCheckIcon"><i class="fa-regular fa-square"></i></span> <i class="fa-solid fa-caret-down"></i>
<span class='ipsNotification' data-role='autoCheckCount'>0</span>
</a>
<ul class="ipsMenu ipsMenu_auto ipsMenu_withStem ipsHide" id="elCheck_{$table->uniqueId}_menu">
<li class="ipsMenu_title">{lang="{$table->langPrefix}select_rows"}</li>
<li class="ipsMenu_item" data-ipsMenuValue="all"><a href="#">{lang="all"}</a></li>
<li class="ipsMenu_item" data-ipsMenuValue="none"><a href="#">{lang="none"}</a></li>
<li class="ipsMenu_sep"><hr></li>
<li class="ipsMenu_item" data-ipsMenuValue="read"><a href="#">{lang="read"}</a></li>
<li class="ipsMenu_item" data-ipsMenuValue="unread"><a href="#">{lang="unread"}</a></li>
<li class="ipsMenu_item" data-ipsMenuValue="hidden"><a href="#">{lang="hidden"}</a></li>
<li class="ipsMenu_item" data-ipsMenuValue="unapproved"><a href="#">{lang="unapproved"}</a></li>
<li class="ipsMenu_item" data-ipsMenuValue="locked"><a href="#">{lang="locked"}</a></li>
<li class="ipsMenu_item" data-ipsMenuValue="pinned"><a href="#">{lang="pinned"}</a></li>
<li class="ipsMenu_item" data-ipsMenuValue="featured"><a href="#">{lang="featured"}</a></li>
</ul>
</li>
{{endif}}
</ul>
</div>
</div>
{{if $table->canModerate()}}
<form action="{$table->baseUrl->csrf()}" method="post" data-role='moderationTools' data-ipsPageAction>
{{endif}}
{{if ! \count($rows)}}
<div class="ipsEmptyMessage">
{lang="cms_no_records_to_show" sprintf="\IPS\cms\Databases::load( \IPS\cms\Databases\Dispatcher::i()->databaseId )->recordWord()"}
</div>
{{else}}
<i-data>
<ol class="ipsData ipsData--entries {{if is_array( $table->extra ) and isset( $table->extra['layout'] )}}ipsData--{$table->extra['layout']}{{else}}ipsData--table{{endif}} {{foreach $table->classes as $class}}{$class} {{endforeach}} ipsData--cms-entries" id='elTable_{$table->uniqueId}' data-role="tableRows">
{template="$table->rowsTemplate[1]" params="$table, $headers, $rows" object="$table->rowsTemplate[0]"}
</ol>
</i-data>
{{endif}}
{{if $table->canModerate()}}
<div class="ipsData__modBar ipsJS_hide" data-role="pageActionOptions">
<select class='ipsInput ipsInput--select i-basis_300' name="modaction" data-role="moderationAction">
{{if $table->canModerate('unhide')}}
<option value='approve' data-icon='check-circle'>{lang="approve"}</option>
{{endif}}
{{if $table->canModerate('feature') or $table->canModerate('unfeature')}}
<optgroup label="{lang="feature"}" data-icon='star' data-action='feature'>
{{if $table->canModerate('feature')}}
<option value='feature'>{lang="feature"}</option>
{{endif}}
{{if $table->canModerate('unhide')}}
<option value='unfeature'>{lang="unfeature"}</option>
{{endif}}
</optgroup>
{{endif}}
{{if $table->canModerate('pin') or $table->canModerate('unpin')}}
<optgroup label="{lang="pin"}" data-icon='thumb-tack' data-action='pin'>
{{if $table->canModerate('pin')}}
<option value='pin'>{lang="pin"}</option>
{{endif}}
{{if $table->canModerate('unpin')}}
<option value='unpin'>{lang="unpin"}</option>
{{endif}}
</optgroup>
{{endif}}
{{if $table->canModerate('hide') or $table->canModerate('unhide')}}
<optgroup label="{lang="hide"}" data-icon='eye' data-action='hide'>
{{if $table->canModerate('hide')}}
<option value='hide'>{lang="hide"}</option>
{{endif}}
{{if $table->canModerate('unhide')}}
<option value='unhide'>{lang="unhide"}</option>
{{endif}}
</optgroup>
{{endif}}
{{if $table->canModerate('lock') or $table->canModerate('unlock')}}
<optgroup label="{lang="lock"}" data-icon='lock' data-action='lock'>
{{if $table->canModerate('lock')}}
<option value='lock'>{lang="lock"}</option>
{{endif}}
{{if $table->canModerate('unlock')}}
<option value='unlock'>{lang="unlock"}</option>
{{endif}}
</optgroup>
{{endif}}
{{if $table->canModerate('move')}}
<option value='move' data-icon='arrow-right'>{lang="move"}</option>
{{endif}}
{{if $table->canModerate('split_merge')}}
<option value='merge' data-icon='level-up'>{lang="merge"}</option>
{{endif}}
{{if $table->canModerate('delete')}}
<option value='delete' data-icon='trash'>{lang="delete"}</option>
{{endif}}
{{if $table->canModerate('future_publish')}}
<option data-icon="arrow-circle-o-up" value='publish'>{lang="publish"}</option>
{{endif}}
{{if $table->canModerate( 'tag' )}}
<optgroup label='{lang="tag"}' data-icon='tag' data-action='tag'>
<option value='tag'>{lang="add_single_tag"}</option>
<option value='untag'>{lang="remove_single_tag"}</option>
</optgroup>
{{endif}}
{{if $table->savedActions}}
<optgroup label="{lang="saved_actions"}" data-icon='tasks' data-action='saved_actions'>
{{foreach $table->savedActions as $k => $v}}
<option value='savedAction-{$k}'>{$v}</option>
{{endforeach}}
</optgroup>
{{endif}}
</select>
<button type="submit" class="ipsButton ipsButton--primary ipsButton--small">{lang="submit"}</button>
</div>
</form>
{{endif}}
<div class="ipsButtonBar ipsButtonBar--bottom {{if $table->pages <= 1}}ipsHide{{endif}}" data-role="tablePagination">
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
</div>
</div>]]></template>
<template template_key="database_listing_filterMessage" template_title="filterMessage" template_desc="" template_location="database" template_group="listing" template_params="$activeFilters, $category" template_app="" template_type="template"><![CDATA[<div class='ipsMessage ipsMessage--info'>
<div class='i-flex i-flex-wrap_wrap-reverse i-gap_2 i-align-items_center'>
<span>{lang="cms_database_filtered_by"}</span>
<a href='{$category->url()->csrf()->setQueryString( array( "do" => "clearFilters", 'd' => \IPS\cms\Databases\Dispatcher::i()->databaseId ) )}' class='ipsButton ipsButton--soft ipsButton--small'>{lang="cms_database_filtered_clear"}</a>
</div>
{{foreach $activeFilters as $id => $data}}
{$data['field']->_title} ({$data['value']})
{{endforeach}}
</div>]]></template>
<template template_key="database_listing_recordRow" template_title="recordRow" template_desc="" template_location="database" template_group="listing" template_params="$table, $headers, $rows" template_app="" template_type="template"><![CDATA[{{$rowIds = array();}}
{{foreach $rows as $row}}
{{$idField = $row::$databaseColumnId;}}
{{$rowIds[] = $row->$idField;}}
{{endforeach}}
{{$iposted = $table ? $table->contentPostedIn : array();}}
{{foreach $rows as $row}}
{{$idField = $row::$databaseColumnId;}}
<li class="ipsData__item {{if method_exists( $row, 'tableClass' ) && $row->tableClass()}}ipsData__item--{$row->tableClass()}{{endif}} {{if $row->hidden()}}ipsModerated{{endif}} {{if $row->isAssignedToMember()}}ipsData__item--assigned{{endif}}" data-rowID='{$row->$idField}' {{if $table !== null and $row->unread()}}data-ips-unread{{else}}data-ips-read{{endif}}>
<a href='{$row->url( "getPrefComment" )}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{{if $row->_title or $row->_title == 0}}{$row->_title}{{else}}{lang="content_deleted"}{{endif}}</span></a>
{{if $row->showRecordImage()}}
<figure class="ipsData__image">
{{if $row->record_image}}
<img src="{file="$row->record_image" extension="cms_Records"}" loading="lazy" alt="">
{{else}}
<i></i>
{{endif}}
</figure>
{{endif}}
<div class='ipsData__content'>
<div class='ipsData__main'>
<div class='ipsData__title'>
<div class='ipsBadges'>
{template="assignmentBadge" app="core" group="global" params="$row, ''"}
{{foreach $row->badges() as $badge}}{$badge|raw}{{endforeach}}
</div>
{{if $row->prefix()}}
{template="prefix" group="global" app="core" params="$row->prefix( TRUE ), $row->prefix()"}
{{endif}}
<h4>
{{if member.member_id}}
{{if $table !== null and $row->unread()}}
<a href='{$row->url( 'getNewComment' )}' title='{lang="first_unread_post"}' data-ipsTooltip class='ipsIndicator {{if \in_array( $row->$idField, $iposted )}}ipsIndicator--participated{{endif}}'></a>
{{else}}
<span class='ipsIndicator {{if \in_array( $row->$idField, $iposted )}}ipsIndicator--participated{{endif}}'></span>
{{endif}}
{{endif}}
<a href='{$row->url( "getPrefComment" )}'>
{{if $row->_title or $row->_title == 0}}{$row->_title}{{else}}<em class="i-color_soft">{lang="content_deleted"}</em>{{endif}}
</a>
</h4>
{{if $row->commentPageCount() > 1}}
{$row->commentPagination( array(), 'miniPagination' )|raw}
{{endif}}
</div>
<div class='ipsData__meta'>
<span>{lang="byline_name_date" htmlsprintf="$row->author()->link( $row->warningRef(), NULL, $row->isAnonymous() ), \IPS\DateTime::ts( $row->mapped('date') )->html(FALSE)"}</span>
</div>
<div class='ipsData__desc'>{$row->truncated(TRUE)|raw}</div>
{{if \count( $row->tags() )}}
{template="tags" group="global" app="core" params="$row->tags(), true"}
{{endif}}
{{if \count( $row->customFieldsForDisplay('listing') )}}
<ul class='ipsData__fields'>
{{foreach $row->customFieldsForDisplay('listing') as $fieldId => $fieldValue}}
{{if $fieldValue}}
<li>{$fieldValue|raw}</li>
{{endif}}
{{endforeach}}
</ul>
{{endif}}
</div>
{{if $row->groupsPosted}}
{template="groupPostedBadges" group="global" app="core" location="front" params="$row->groupsPosted, 'topic_posted_in_groups'"}
{{endif}}
{{if $row::database()->options['reviews'] and $row->averageReviewRating() > 0}}
<ul class='ipsRating ipsRating_small'>
{{foreach range( 1, \IPS\Settings::i()->reviews_rating_out_of ) as $i}}
<li class='{{if $row->averageReviewRating() >= $i}}ipsRating_on{{else}}ipsRating_off{{endif}}'>
<i class='fa-solid fa-star'></i>
</li>
{{endforeach}}
</ul>
{{elseif $row->container()->allow_rating and $row->rating_value > 0}}
{template="rating" group="global" location="front" app="core" params="'small', $row->rating_value, \IPS\Settings::i()->reviews_rating_out_of"}
{{endif}}
<div class="ipsData__extra">
<div class="ipsData__last ipsData__last--author">
{template="userPhoto" app="core" group="global" params="$row->author(), 'tiny'"}
<div class='ipsData__last-text'>
<div class='ipsData__last-primary'>{$row->author()->link( NULL, NULL, $row->isAnonymous() )|raw}</div>
<div class='ipsData__last-secondary'>{datetime="$row->mapped('date')"}</div>
</div>
</div>
{{if ($row::database()->options['comments'] or $row::database()->options['reviews'])}}
<div class="ipsData__last">
{{if $row->mapped('num_comments')}}
{template="userPhoto" app="core" group="global" params="$row->lastCommenter(), 'tiny'"}
{{else}}
{template="userPhoto" app="core" group="global" params="$row->author(), 'tiny'"}
{{endif}}
<div class='ipsData__last-text'>
<div class='ipsData__last-primary'>
{{if $row->database()->_comment_bump & \IPS\cms\Databases::BUMP_ON_COMMENT}}
{{if $row->mapped('num_comments')}}
{{if $row->mapped('last_comment_anon')}}
{template="userLink" app="core" group="global" params="$row->author(), NULL, NULL, TRUE"}
{{else}}
{$row->lastCommenter()->link()|raw}
{{endif}}
{{else}}
{$row->author()->link( NULL, NULL, $row->isAnonymous() )|raw}
{{endif}}
{{elseif $row->database()->_comment_bump & \IPS\cms\Databases::BUMP_ON_EDIT}}
{{if $row->record_edit_time > 0}}
{lang="cms_row_updated_by" htmlsprintf="\IPS\Member::load( $row->record_edit_member_id )->link()"}
{{else}}
{lang="cms_row_added_by" htmlsprintf="$row->author()->link( NULL, NULL, $row->isAnonymous() )"}
{{endif}}
{{else}}
{{if $row->record_edit_time > 0}}
{lang="cms_row_updated_by" htmlsprintf="$row->lastCommenter()->link()"}
{{else}}
{lang="cms_row_added_by" htmlsprintf="$row->author()->link( NULL, NULL, $row->isAnonymous() )"}
{{endif}}
{{endif}}
</div>
<div class='ipsData__last-secondary'>
<a href='{$row->url( 'getLastComment' )}' title='{lang="get_last_post"}'>
{{if $row->database()->_comment_bump & \IPS\cms\Databases::BUMP_ON_COMMENT}}
{{if $row->mapped('num_comments')}}{datetime="$row->mapped('last_comment')"}{{else}}{datetime="$row->mapped('date')"}{{endif}}
{{else}}
{{if $row->record_edit_time > 0}}{datetime="$row->record_edit_time"}{{else}}{datetime="$row->mapped('date')"}{{endif}}
{{endif}}
</a>
</div>
</div>
</div>
{{endif}}
<ul class='ipsData__stats'>
{{foreach $row->stats(TRUE) as $k => $v}}
<li {{if \in_array( $k, $row->hotStats )}}class="ipsData__stats-hot" data-text='{lang="hot_item"}' data-ipsTooltip title='{lang="hot_item_desc"}'{{endif}} data-statType='{$k}' data-v="{$v}">
<span class='ipsData__stats-icon' data-stat-value='{number="$v"}' aria-hidden="true" data-ipstooltip title='{number="$v" format="short"} {lang="{$k}" pluralize="$v" format="short"}'></span>
<span class='ipsData__stats-label'>{number="$v"} {lang="content_records_stat_{$k}" pluralize="$v"}</span>
</li>
{{endforeach}}
</ul>
</div>
</div>
{{if $table and $table->canModerate()}}
<div class='ipsData__mod'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->tableStates()}}{$row->tableStates()}{{endif}}' class="ipsInput ipsInput--toggle">
</div>
{{endif}}
</li>
{{endforeach}}]]></template>
<template template_key="database_listing_rssItemWithImage" template_title="rssItemWithImage" template_desc="" template_location="database" template_group="listing" template_params="$content, $image" template_app="" template_type="template"><![CDATA[<p><img src="{file="$image" extension="cms_Records"}" /></p>
{$content|raw}]]></template>
<template template_key="page_page_builder_single_column" template_title="single_column" template_desc="" template_location="page" template_group="page_builder" template_params="$page, $widgets" template_app="" template_type="template"><![CDATA[<div>
{{if is_string(@$widgets['col1'])}}
{$widgets['col1']|raw}
{{else}}
{template="widgetContainer" group="pages" app="cms" params="'col1', $widgets, 'horizontal'"}
{{endif}}
</div>]]></template>
<template template_key="page_page_builder_three_columns" template_title="three_columns" template_desc="" template_location="page" template_group="page_builder" template_params="$page, $widgets" template_app="" template_type="template"><![CDATA[<div>
<div class='ipsGrid ipsGrid--auto-fit i-basis_280 ipsGrid--cms-pages-page-3-columns'>
<div>
{template="widgetContainer" group="pages" app="cms" params="'col1', $widgets, 'vertical'"}
</div>
<div>
{template="widgetContainer" group="pages" app="cms" params="'col2', $widgets, 'vertical'"}
</div>
<div>
{template="widgetContainer" group="pages" app="cms" params="'col3', $widgets, 'vertical'"}
</div>
</div>
</div>]]></template>
<template template_key="page_page_builder_two_columns" template_title="two_columns" template_desc="" template_location="page" template_group="page_builder" template_params="$page, $widgets" template_app="" template_type="template"><![CDATA[<div>
<div class='ipsGrid ipsGrid--auto-fit i-basis_280 ipsGrid--cms-pages-page-2-columns'>
<div>
{template="widgetContainer" group="pages" app="cms" params="'col1', $widgets, 'vertical'"}
</div>
<div>
{template="widgetContainer" group="pages" app="cms" params="'col2', $widgets, 'vertical'"}
</div>
</div>
</div>]]></template>
</theme>