Version 5.0.0 beta 4

This commit is contained in:
Neo committed 2025-12-19 16:57:00 -08:00
1 parent e86153356a
commit 2f24f9de48
276 files changed
+8614 -6044

No files matched your search

+99 -99
View File
@@ -85,7 +85,7 @@
</header>
{{if $database->can('add') or \IPS\Member::loggedIn()->member_id}}
<ul class="ipsButtons ipsButtons--main ipsButtons--margin">
<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>
@@ -196,7 +196,7 @@
</header>
{{if $database->can('add') or \IPS\Member::loggedIn()->member_id}}
<ul class="ipsButtons ipsButtons--main ipsButtons--margin">
<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>
@@ -300,7 +300,7 @@
</header>
{{if $database->can('add') or \IPS\Member::loggedIn()->member_id}}
<ul class="ipsButtons ipsButtons--main ipsButtons--margin">
<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>
@@ -408,7 +408,7 @@
</header>
{{if $database->can('add') or \IPS\Member::loggedIn()->member_id}}
<ul class="ipsButtons ipsButtons--main ipsButtons--margin">
<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>
@@ -520,7 +520,7 @@
</header>
{{if $database->can('add') or \IPS\Member::loggedIn()->member_id}}
<ul class="ipsButtons ipsButtons--main ipsButtons--margin">
<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>
@@ -681,7 +681,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
{{endif}}
</div>
<div class='ipsPhotoPanel__secondary'>
<a href='{$comment->url()}'>{$comment->dateLine()|raw}</a>
{{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}}
@@ -791,7 +791,9 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
{{endif}}
</div>
{{endif}}
{template="sharemenu" group="global" app="core" params="$comment"}
{{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 ) );}}
@@ -808,6 +810,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
{{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>
@@ -897,7 +900,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
<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->reviews"})</span></div>
<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}}
@@ -1105,10 +1108,11 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie
<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->item()->url()->setQueryString( array( 'do' => 'findReview', 'review' => $review->id ) )}' 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>
<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}}
@@ -1249,7 +1253,9 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie
{{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'>
@@ -1257,6 +1263,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie
</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>
@@ -1644,7 +1651,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie
</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 ipsButtons--margin">
<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>
@@ -1907,6 +1914,9 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie
{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 $row->unread()}}
@@ -1926,15 +1936,9 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie
<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>
{{if isset( $table->extra['layout'] ) and \in_array( $table->extra['layout'], array("table", "featured", "grid"))}}
<div class='ipsData__desc'>{$row->truncated(TRUE)|raw}</div>
{{if \count( $row->tags() )}}
{template="tagsWithPrefix" group="global" app="core" params="$row->tags(), $row->prefix(), true"}
{{endif}}
{{else}}
{{if $row->prefix()}}
{template="prefix" group="global" app="core" params="$row->prefix( TRUE ), $row->prefix()"}
{{endif}}
<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'>
@@ -1946,87 +1950,83 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie
</ul>
{{endif}}
</div>
{{if isset( $table->extra['layout'] ) and !\in_array( $table->extra['layout'], array("minimal"))}}
{{if $row->groupsPosted}}
{template="groupPostedBadges" group="global" app="core" location="front" params="$row->groupsPosted, 'topic_posted_in_groups', 'ipsResponsive_hidePhone'"}
{{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">
<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 class="ipsData__last">
{{if ($row::database()->options['comments'] or $row::database()->options['reviews']) and isset( $table->extra['layout'] ) and \in_array( $table->extra['layout'], array("table", "featured"))}}
{{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}}
{lang="cms_row_commented_by" htmlsprintf="$row->lastCommenter()->link()"}
{{endif}}
{{else}}
{lang="cms_row_added_by" htmlsprintf="$row->author()->link( NULL, NULL, $row->isAnonymous() )"}
{{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>
{{else}}
{template="userPhoto" app="core" group="global" params="$row->author(), 'tiny'"}
<div class='ipsData__last-text'>
<div class='ipsData__last-primary'>{$row->author()->link()|raw}</div>
<div class='ipsData__last-secondary'>
<a href='{$row->url( "getPrefComment" )}'>
{datetime="$row->mapped('date')"}
</a>
</div>
</div>
{{endif}}
{{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>
{{endif}}
{{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'>