Version 5.0.0 beta 6
This commit is contained in:
1 parent
57d9db6ce2
commit
fa2a720105
115 files changed
+1823
-1147
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language>
|
||||
<app key="core" version="5000031">
|
||||
<app key="core" version="5000032">
|
||||
<word key="__app_core" js="0">System</word>
|
||||
<word key="__indefart_personal_conversation" js="0">a personal conversation</word>
|
||||
<word key="__indefart_personal_conversation_message" js="0">a message in a personal conversation</word>
|
||||
@@ -3500,6 +3500,7 @@
|
||||
<word key="modperms__core_Reports" js="0">Reports</word>
|
||||
<word key="can_view_reports" js="0">Can view reports?</word>
|
||||
<word key="can_manage_sidebar" js="0">Can use Block Manager?</word>
|
||||
<word key="can_use_theme_editor" js="0">Can use Theme Editor?</word>
|
||||
<word key="can_moderator_be_ignored" js="0">Can be ignored?</word>
|
||||
<word key="can_moderator_be_ignored_desc" js="0"><![CDATA[Additional to this moderator restriction, you can also disallow people to ignore members via a <a href='{internal.admin.app=core&module=members&controller=groups&searchResult=can_be_ignored}'>group setting.</a>]]></word>
|
||||
<word key="add_moderator" js="0">Add Moderator</word>
|
||||
@@ -7190,9 +7191,9 @@
|
||||
<word key="profile_complete_no_add" js="0">All available profile completion steps have been used. To create new profile completion steps, please delete existing steps, or edit them to remove methods.</word>
|
||||
<word key="acplog__quick_register_enabled" js="0">Quick registration enabled</word>
|
||||
<word key="acplog__profile_step_added" js="0">Profile step added: %s</word>
|
||||
<word key="enhancements__core_FacebookPixel" js="0">Facebook Pixel</word>
|
||||
<word key="enhancements__core_FacebookPixel_desc" js="0">The Facebook pixel is used to report conversions, optimize advert delivery, build audiences and get rich insights about how people are using your website.</word>
|
||||
<word key="fb_pixel_id_req" js="0">You need to enter your Facebook Pixe ID</word>
|
||||
<word key="enhancements__core_FacebookPixel" js="0">Meta Pixel</word>
|
||||
<word key="enhancements__core_FacebookPixel_desc" js="0">The Meta pixel is used to report conversions, optimize advert delivery, build audiences and get rich insights about how people are using your website.</word>
|
||||
<word key="fb_pixel_id_req" js="0">You need to enter your Meta Pixel ID</word>
|
||||
<word key="fb_pixel_id" js="0">Pixel ID</word>
|
||||
<word key="fb_pixel_enabled" js="0">Enable</word>
|
||||
<word key="fb_pixel_delay" js="0">Delay</word>
|
||||
|
||||
@@ -24340,6 +24340,18 @@
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"chart_favorite": {
|
||||
"name": "chart_favorite",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": 0,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
},
|
||||
"chart_timescale": {
|
||||
"name": "chart_timescale",
|
||||
"type": "ENUM",
|
||||
@@ -25898,36 +25910,6 @@
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"chart_favorite": {
|
||||
"name": "chart_favorite",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": 0,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
},
|
||||
"chart_timescale": {
|
||||
"name": "chart_timescale",
|
||||
"type": "ENUM",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": [
|
||||
"hourly",
|
||||
"daily",
|
||||
"weekly",
|
||||
"monthly",
|
||||
"none"
|
||||
],
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
|
||||
+158
-168
@@ -5763,7 +5763,7 @@
|
||||
<li>
|
||||
<a href='#' class='ipsButton ipsButton--soft ipsButton--small' data-ipsMenu id='elEditorAttach_media{expression="md5($name)"}'>{lang="editor_attach_other"} <i class='fa-solid fa-caret-down'></i></a>
|
||||
<ul class='ipsMenu ipsMenu_auto ipsHide' id='elEditorAttach_media{expression="md5($name)"}_menu'>
|
||||
<li class='ipsMenu_item'><a href='#' data-ipsDialog data-ipsDialog-fixed data-ipsDialog-forceReload data-ipsDialog-title='{lang="editor_insert_existing_file"}' data-ipsDialog-url="{url="app=core&module=system&controller=editor&do=myMedia&postKey={$editor}&editorId={$name}" csrf="1"}">{lang="editor_insert_existing_file"}</a></li>
|
||||
<li class='ipsMenu_item'><a href='#' data-ipsDialog data-ipsDialog-fixed data-ipsDialog-forceReload data-ipsDialog-title='{lang="editor_insert_existing_file"}' data-ipsDialog-url="{url="app=core&module=system&controller=editor&do=myMedia&postKey={$editor}&editorId={$name}" csrf="1"}">{lang="editor_insert_existing_file"}</a>
|
||||
</ul>
|
||||
</li>
|
||||
{{endif}}
|
||||
@@ -6636,7 +6636,7 @@
|
||||
{{if !\IPS\Request::i()->isAjax() }}</div>{{endif}}]]></template>
|
||||
<template template_group="forms" template_name="postingInformation" template_data="$guestPostBeforeRegister, $modQueued, $standalone=false" template_location="front" template_app="core"><![CDATA[{{if !member.member_id}}
|
||||
{{if !$standalone}}
|
||||
<div class='cGuestTeaser'>
|
||||
<div class='cGuestTeaser i-margin-bottom_3'>
|
||||
<h2 class='ipsTitle ipsTitle--h3'>{lang="guest_post_header"}</h2>
|
||||
{{endif}}
|
||||
<p>
|
||||
@@ -6651,7 +6651,6 @@
|
||||
{{endif}}
|
||||
</p>
|
||||
{{if !$standalone}}
|
||||
<hr class="ipsHr i-margin-block_3">
|
||||
</div>
|
||||
{{endif}}
|
||||
{{elseif $modQueued}}
|
||||
@@ -6889,37 +6888,37 @@
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
</form>]]></template>
|
||||
<template template_group="forms" template_name="reviewTemplate" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class=''" template_location="front" template_app="core"><![CDATA[<div class='ipsComposeArea i-padding_3' {{if \IPS\Member::loggedIn()->member_id}}data-controller='core.front.core.reviewForm'{{endif}}>
|
||||
<div class='ipsComposeArea__photo'>{template="userPhoto" group="global" app="core" params="\IPS\Member::loggedIn(), 'fluid'"}</div>
|
||||
<div class='ipsComposeArea_editor'>
|
||||
<form accept-charset='utf-8' class="ipsFormWrap ipsFormWrap--review" action="{$action->setQueryString( '_review', 1 )}" 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() )"}">
|
||||
{{endif}}
|
||||
{{if !isset( \IPS\Request::i()->_review ) and \IPS\Member::loggedIn()->member_id}}
|
||||
<div data-role='reviewIntro'>
|
||||
<h3 class="i-margin-bottom_2"><strong class="i-color_hard i-font-weight_600">{lang="review_intro_1" sprintf="\IPS\Member::loggedIn()->name"}</strong> <span class='i-color_soft i-font-weight_500'>{lang="review_intro_2"}</span></h3>
|
||||
<a href='#' class='ipsButton ipsButton--primary ipsButton--small ipsJS_show' data-action='writeReview'><i class="fa-regular fa-pen-to-square"></i><span>{lang="write_a_review"}</span></a>
|
||||
</div>
|
||||
{{endif}}
|
||||
<ul class='ipsForm ipsForm--vertical ipsForm--review {{if !isset( \IPS\Request::i()->_review ) and \IPS\Member::loggedIn()->member_id}}ipsJS_hide{{endif}}' data-role='reviewForm'>
|
||||
{{foreach $elements as $collection}}
|
||||
{{foreach $collection as $input}}
|
||||
{$input|raw}
|
||||
{{endforeach}}
|
||||
<template template_group="forms" template_name="reviewTemplate" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class=''" template_location="front" template_app="core"><![CDATA[<div class="ipsComposeAreaWrapper">
|
||||
<div class='ipsComposeArea ipsComposeArea--review' {{if \IPS\Member::loggedIn()->member_id}}data-controller='core.front.core.reviewForm'{{endif}}>
|
||||
<div class='ipsComposeArea__photo'>{template="userPhoto" group="global" app="core" params="\IPS\Member::loggedIn(), 'fluid'"}</div>
|
||||
<div class='ipsComposeArea_editor'>
|
||||
<form accept-charset='utf-8' class="ipsFormWrap ipsFormWrap--review" action="{$action->setQueryString( '_review', 1 )}" 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}}
|
||||
<li class='ipsFieldRow'>
|
||||
<div class='ipsFieldRow__content'>
|
||||
<button type='submit' class='ipsButton ipsButton--primary'>{lang="add_review"}</button>
|
||||
{{if $uploadField}}
|
||||
<input type="hidden" name="MAX_FILE_SIZE" value="{$uploadField}">
|
||||
<input type="hidden" name="plupload" value="{expression="md5( mt_rand() )"}">
|
||||
{{endif}}
|
||||
{{if !isset( \IPS\Request::i()->_review ) and \IPS\Member::loggedIn()->member_id}}
|
||||
<div data-role='reviewIntro'>
|
||||
<h3 class="i-margin-bottom_2"><strong class="i-color_hard i-font-weight_600">{lang="review_intro_1" sprintf="\IPS\Member::loggedIn()->name"}</strong> <span class='i-color_soft i-font-weight_500'>{lang="review_intro_2"}</span></h3>
|
||||
<button type="button" class='ipsButton ipsButton--primary ipsButton--small' data-action='writeReview'><i class="fa-regular fa-pen-to-square"></i><span>{lang="write_a_review"}</span></button>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</form>
|
||||
{{endif}}
|
||||
<ul class='ipsForm ipsForm--vertical ipsForm--review' data-role='reviewForm' {{if !isset( \IPS\Request::i()->_review ) and \IPS\Member::loggedIn()->member_id}}hidden{{endif}}>
|
||||
{{foreach $elements as $collection}}
|
||||
{{foreach $collection as $input}}
|
||||
{$input|raw}
|
||||
{{endforeach}}
|
||||
{{endforeach}}
|
||||
<li class='ipsSubmitRow'>
|
||||
<button type='submit' class='ipsButton ipsButton--primary'>{lang="add_review"}</button>
|
||||
</li>
|
||||
</ul>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="forms" template_name="reviewUnavailable" template_data="$lang, $warnings=array(), $ends=NULL" template_location="front" template_app="core"><![CDATA[
|
||||
@@ -6970,8 +6969,7 @@
|
||||
{$desc|raw}
|
||||
{$warning|raw}
|
||||
{{if $error}}
|
||||
<br>
|
||||
<span class="i-color_warning">{lang="$error"}</span>
|
||||
<div class="ipsFieldRow__warning">{lang="$error"}</div>
|
||||
{{endif}}
|
||||
</div>
|
||||
{{else}}
|
||||
@@ -6987,8 +6985,7 @@
|
||||
{$desc|raw}
|
||||
{$warning|raw}
|
||||
{{if $error}}
|
||||
<br>
|
||||
<span class="i-color_warning">{lang="$error"}</span>
|
||||
<div class="ipsFieldRow__warning">{lang="$error"}</div>
|
||||
{{endif}}
|
||||
</div>
|
||||
{{endif}}
|
||||
@@ -7786,7 +7783,7 @@
|
||||
<li class='ipsData__item'>
|
||||
<div class='ipsData__main'>
|
||||
<div class='i-flex i-align-items_center i-justify-content_space-between'>
|
||||
<a href='{$item->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $day['commentId'] ) )}' class='i-font-weight_600'>{datetime="$day['date']"}</a>
|
||||
<a href='{$item->shareableUrl( $day['commentId'] )}' class='i-font-weight_600'>{datetime="$day['date']"}</a>
|
||||
<span class='i-color_soft'>{lang="num_comments" pluralize="$day['count']"}</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -9380,40 +9377,42 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
|
||||
{{endif}}]]></template>
|
||||
<template template_group="global" template_name="featuredComment" template_data="$comment, $id, $commentLang='__defart_comment'" template_location="front" template_app="core"><![CDATA[{{if isset( $comment['comment'] )}}
|
||||
{{$idField = $comment['comment']::$databaseColumnId;}}
|
||||
<div class='i-padding_3 ipsEntry ipsEntry--recommended' data-commentID='{$id}'>
|
||||
<div class='ipsColumns i-gap_3'>
|
||||
<div class='ipsColumns__primary'>
|
||||
<div class="ipsPhotoPanel i-margin-bottom_2">
|
||||
<div class='ipsEntry ipsEntry--simple ipsEntry--featuredComment' data-commentID='{$id}'>
|
||||
<header class="ipsEntry__header">
|
||||
<div class="ipsEntry__header-align">
|
||||
<div class="ipsPhotoPanel">
|
||||
{template="userPhoto" app="core" group="global" params="$comment['comment']->author(), 'fluid', $comment['comment']->warningRef()"}
|
||||
<div class="ipsPhotoPanel__text">
|
||||
<div class="ipsPhotoPanel__primary">{template="userLink" app="core" group="global" params="$comment['comment']->author(), $comment['comment']->warningRef()"}</div>
|
||||
<div class="ipsPhotoPanel__secondary"><a href="{$comment['comment']->url()}" title='{lang="go_to_this_comment" sprintf="\IPS\Member::loggedIn()->language()->get( $commentLang )"}' rel="nofollow" data-action='goToComment'>{$comment['comment']->dateLine()|raw}</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='ipsRichText ipsTruncate_2'>{$comment['comment']->truncated( TRUE )|raw}</div>
|
||||
{{if $comment['note']}}
|
||||
<div class='ipsEntry__recommendedNote'>
|
||||
<p class='ipsRichText'>{$comment['note']}</p>
|
||||
{{if isset( $comment['featured_by'] )}}
|
||||
<p class='i-color_soft i-margin-top_2 i-link-color_inherit'>{lang="recommended_by" htmlsprintf="$comment['featured_by']->link()"}</p>
|
||||
{{endif}}
|
||||
</div>
|
||||
{{elseif isset( $comment['featured_by'] )}}
|
||||
{lang="recommended_by" htmlsprintf="$comment['featured_by']->link()"}
|
||||
{{endif}}
|
||||
</div>
|
||||
<div class='i-basis_auto i-align-self_center'>
|
||||
{{if \IPS\IPS::classUsesTrait( $comment['comment'], 'IPS\Content\Reactable' ) and settings.reputation_enabled}}
|
||||
</header>
|
||||
<div class='ipsEntry__post'>
|
||||
<div class='ipsRichText ipsTruncate_2'>{$comment['comment']->truncated( TRUE )|raw}</div>
|
||||
{{if \IPS\IPS::classUsesTrait( $comment['comment'], 'IPS\Content\Reactable' ) and settings.reputation_enabled}}
|
||||
<div class='i-margin-top_2 i-flex'>
|
||||
{template="reactionOverview" group="global" app="core" params="$comment['comment']"}
|
||||
{{endif}}
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}
|
||||
{{if $comment['note']}}
|
||||
<div class='ipsEntry__recommendedNote'>
|
||||
<p>{$comment['note']}</p>
|
||||
{{if isset( $comment['featured_by'] )}}
|
||||
<p class='i-font-style_italic i-color_soft i-margin-top_1 i-link-color_inherit'>{lang="recommended_by" htmlsprintf="$comment['featured_by']->link()"}</p>
|
||||
{{endif}}
|
||||
</div>
|
||||
{{elseif isset( $comment['featured_by'] )}}
|
||||
{lang="recommended_by" htmlsprintf="$comment['featured_by']->link()"}
|
||||
{{endif}}
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}]]></template>
|
||||
<template template_group="global" template_name="featuredComments" template_data="$comments, $url, $titleLang='recommended_replies', $commentLang='__defart_comment'" template_location="front" template_app="core"><![CDATA[
|
||||
<section data-controller='core.front.core.recommendedComments' data-url='{$url}' class='ipsBox ipsRecommendedComments {{if !\count( $comments )}}ipsHide{{endif}}'>
|
||||
<template template_group="global" template_name="featuredComments" template_data="$comments, $url, $titleLang='recommended_replies', $commentLang='__defart_comment', $ipsBox=true" template_location="front" template_app="core"><![CDATA[
|
||||
<section data-controller='core.front.core.recommendedComments' data-url='{$url}' class='{{if $ipsBox}}ipsBox ipsBox--featuredComments{{endif}} ipsRecommendedComments {{if !\count( $comments )}}ipsHide{{endif}}'>
|
||||
<div data-role="recommendedComments">
|
||||
<header class='ipsBox__header'>
|
||||
<header class='{{if $ipsBox}}ipsBox__header{{else}}ipsTitle ipsTitle--h5 i-padding_2 i-flex i-align-items_center i-justify-content_space-between{{endif}}'>
|
||||
<h2>{lang="$titleLang"}</h2>
|
||||
{template="carouselNavigation" group="global" app="core" params="'topic-featured-posts'"}
|
||||
</header>
|
||||
@@ -9879,6 +9878,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
|
||||
{template="favico" app="core" group="global" location="front" params=""}
|
||||
</head>
|
||||
<body data-ips-hook="body" class='ipsApp ipsApp_front {{foreach output.bodyClasses as $class}} {$class}{{endforeach}}' {{if output.globalControllers}}data-controller='{expression="implode( ',', output.globalControllers )"}'{{endif}} {{if isset( output.inlineMessage )}}data-message="{expression="output.inlineMessage"}"{{endif}} data-pageApp='{$location['app']}' data-pageLocation='front' data-pageModule='{$location['module']}' data-pageController='{$location['controller']}' {{if isset( \IPS\Request::i()->id )}}data-pageID='{expression="(int) \IPS\Request::i()->id"}'{{endif}} {{if isset( \IPS\Dispatcher::i()->dispatcherController ) AND !\IPS\Dispatcher::i()->dispatcherController->isContentPage }}data-nocontent{{endif}} {{if output.pageName}}data-pageName="{expression="output.pageName"}"{{endif}}>
|
||||
<a href='#ipsLayout__main' class='ipsSkipToContent'>{lang="jump_to_content"}</a>
|
||||
{theme="headerHtml"}
|
||||
{{if settings.googletag_enabled AND !(settings.core_datalayer_use_gtm AND settings.core_datalayer_enabled)}}
|
||||
{setting="googletag_noscript_code"}
|
||||
@@ -9894,7 +9894,6 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
|
||||
{{endif}}
|
||||
<div class='ipsLayout__app'>
|
||||
{template="announcementTop" app="core" group="global" params=""}
|
||||
<a href='#ipsLayout_main' class='ipsSkipToContent'>{lang="jump_to_content"}</a>
|
||||
<div data-ips-hook="mobileHeader" class='ipsMobileHeader ipsResponsive_header--mobile'>
|
||||
{template="logo" app="core" group="global" params="'mobile'"}
|
||||
{template="mobileNavHeader" app="core" group="global" params=""}
|
||||
@@ -10067,42 +10066,32 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getVi
|
||||
<div>
|
||||
<input type="hidden" name="csrfKey" value="{expression="\IPS\Session::i()->csrfKey"}">
|
||||
{{if \IPS\Login::registrationType() != 'disabled'}}
|
||||
<div class='i-text-align_center i-padding_3 cGuestTeaser'>
|
||||
<div class='i-text-align_center cGuestTeaser'>
|
||||
{{if $isReview}}
|
||||
<h2 class='ipsTitle ipsTitle--h3'>{lang="teaser_review_title_reg"}</h2>
|
||||
<p class='i-color_soft i-margin-top_2'>{lang="teaser_review_desc_reg"}</p>
|
||||
<h2 class='ipsTitle ipsTitle--h4'>{lang="teaser_review_title_reg"}</h2>
|
||||
{{else}}
|
||||
<h2 class='ipsTitle ipsTitle--h3'>{lang="teaser_title_reg"}</h2>
|
||||
<p class='i-color_soft i-margin-top_2'>{lang="teaser_desc_reg"}</p>
|
||||
<h2 class='ipsTitle ipsTitle--h4'>{lang="teaser_title_reg"}</h2>
|
||||
{{endif}}
|
||||
|
||||
<div class='ipsBox i-padding_3 i-margin-top_3'>
|
||||
<div class='ipsFluid i-basis_400'>
|
||||
<div class='cGuestTeaser_left'>
|
||||
<h2 class='ipsTitle ipsTitle--h3'>{lang="teaser_account"}</h2>
|
||||
<p class='i-color_soft i-margin-bottom_3'>{lang="teaser_account_desc"}</p>
|
||||
{{if \IPS\Login::registrationType() == 'redirect'}}
|
||||
<a href='{expression="\IPS\Settings::i()->allow_reg_target"}' class='ipsButton ipsButton--primary ipsButton--small' target="_blank" rel="noopener">
|
||||
{{else}}
|
||||
<a href='{url="app=core&module=system&controller=register" seoTemplate="register"}' class='ipsButton ipsButton--primary ipsButton--small' {{if \IPS\Login::registrationType() == 'normal'}}data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="sign_up"}'{{endif}}>
|
||||
{{endif}}
|
||||
{lang="teaser_account_button"}</a>
|
||||
</div>
|
||||
<div class='cGuestTeaser_right'>
|
||||
<h2 class='ipsTitle ipsTitle--h3'>{lang="teaser_signin"}</h2>
|
||||
<p class='i-color_soft i-margin-bottom_3'>{lang="teaser_signin_desc"}</p>
|
||||
<a href='{url="app=core&module=system&controller=login" seoTemplate="login" ref="(string) $item->url() . '#replyForm'"}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-remoteVerify="false" data-ipsDialog-title="{lang="teaser_signin_button"}" class='ipsButton ipsButton--primary ipsButton--small'>{lang="teaser_signin_button"}</a>
|
||||
</div>
|
||||
<div class='ipsFluid i-basis_260 i-margin-top_3'>
|
||||
<div>
|
||||
{{if \IPS\Login::registrationType() == 'redirect'}}
|
||||
<a href='{expression="\IPS\Settings::i()->allow_reg_target"}' class='ipsButton ipsButton--primary ipsButton--wide' target="_blank" rel="noopener">
|
||||
{{else}}
|
||||
<a href='{url="app=core&module=system&controller=register" seoTemplate="register"}' class='ipsButton ipsButton--primary ipsButton--wide' {{if \IPS\Login::registrationType() == 'normal'}}data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="sign_up"}'{{endif}}>
|
||||
{{endif}}
|
||||
{lang="teaser_account_button"}</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href='{url="app=core&module=system&controller=login" seoTemplate="login" ref="(string) $item->url() . '#replyForm'"}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-remoteVerify="false" data-ipsDialog-title="{lang="teaser_signin_button"}" class='ipsButton ipsButton--secondary ipsButton--wide'>{lang="teaser_signin_button"}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class='i-text-align_center i-padding_3'>
|
||||
<h2 class='ipsTitle ipsTitle--h3'>{lang="teaser_title_noreg"}</h2>
|
||||
<p class='i-color_soft i-margin-top_2'>{lang="teaser_desc_noreg"}</p>
|
||||
<br>
|
||||
<br>
|
||||
<a href='{url="app=core&module=system&controller=login" seoTemplate="login" ref="(string) $item->url() . '#replyForm'"}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-remoteVerify="false" data-ipsDialog-title="{lang="teaser_signin_button"}" class='ipsButton ipsButton--secondary'>{lang="teaser_signin_button"}</a>
|
||||
<div class='i-text-align_center'>
|
||||
<h2 class='ipsTitle ipsTitle--h4'>{lang="teaser_title_noreg"}</h2>
|
||||
<p class='i-color_soft i-margin-top_1'>{lang="teaser_desc_noreg"}</p>
|
||||
<a href='{url="app=core&module=system&controller=login" seoTemplate="login" ref="(string) $item->url() . '#replyForm'"}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-remoteVerify="false" data-ipsDialog-title="{lang="teaser_signin_button"}" class='ipsButton ipsButton--primary i-margin-top_3'>{lang="teaser_signin_button"}</a>
|
||||
</div>
|
||||
{{endif}}
|
||||
</div>]]></template>
|
||||
@@ -13577,7 +13566,9 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie
|
||||
{{endif}}
|
||||
{{endforeach}}
|
||||
{{endif}}
|
||||
{{if \count( $tags ) > 4}}
|
||||
{{if \count( $tags ) == 5}}
|
||||
{template="tag" group="global" app="core" params="$tags[4], $tagEditUrl"}
|
||||
{{elseif \count( $tags ) > 4}}
|
||||
<li class='ipsTags__more ipsJS_show'>
|
||||
<a href="#" class='ipsTags__tag' data-ipsMenu id='elTags_{$id}'>{lang="and_x_more" pluralize="\count( $tags ) - 4"} <i class="fa-solid fa-angle-down"></i></a>
|
||||
<div class='ipsHide ipsMenu ipsMenu_normal i-padding_2 cTagPopup' id='elTags_{$id}_menu'>
|
||||
@@ -31005,11 +30996,6 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie
|
||||
}
|
||||
|
||||
/* Guest Sign In */
|
||||
.cGuestTeaser .ipsButton.ipsButton--primary {
|
||||
width: 100%;
|
||||
max-width: 350px;
|
||||
}
|
||||
|
||||
.cGuestTeaser_social {
|
||||
width: 250px;
|
||||
margin-bottom: 5px;
|
||||
@@ -31170,14 +31156,6 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
html[dir] .cGuestTeaser_left {
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
border-bottom: 2px solid var(--i-background_2);
|
||||
margin-bottom: 15px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
/* Reset guest teaser on mobile back to normal layout from tablet flex layout */
|
||||
.cGuestTeaser .ipsGrid {
|
||||
display: block !important;
|
||||
@@ -31321,7 +31299,6 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie
|
||||
box-shadow: none;
|
||||
background: none;
|
||||
border-radius: 0;
|
||||
outline: max(var(--i-widget--bo-wi), 1px) solid var(--i-widget--bo-co);
|
||||
}
|
||||
|
||||
.cWidgetContainer--carousel::-webkit-scrollbar {
|
||||
@@ -37870,13 +37847,12 @@ a:has(.ipsBadge){
|
||||
min-height: max(34px,2em);
|
||||
min-width: max(34px,2.5em);
|
||||
border-radius: min(var(--i-design-radius), 6px);
|
||||
color: var(--i-co);
|
||||
touch-action: manipulation;
|
||||
}
|
||||
|
||||
@media (any-hover:hover){
|
||||
.ipsCarouselNav__button:hover{
|
||||
background: color-mix(in srgb, var(--i-co) 4%, transparent);
|
||||
background: color-mix(in srgb, currentColor 4%, transparent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37991,7 +37967,7 @@ a:has(.ipsBadge){
|
||||
|
||||
.ipsComposeArea{
|
||||
display: flex;
|
||||
gap: 1.3em;
|
||||
gap: 1.2em;
|
||||
}
|
||||
|
||||
.ipsComposeArea__photo{
|
||||
@@ -40666,7 +40642,7 @@ i-data{
|
||||
|
||||
.ipsData--mini-grid .ipsData__item{
|
||||
border-width: 0;
|
||||
outline: var(--i-data--border) solid var(--i-background_3);
|
||||
outline: var(--i-data--border) solid var(--i-data--bo-co);
|
||||
}
|
||||
|
||||
.ipsData--mini-grid .ipsData__title{
|
||||
@@ -42845,7 +42821,7 @@ a.ipsReact_reaction::after {
|
||||
}
|
||||
|
||||
.ipsEntry__header .ipsPhotoPanel{
|
||||
flex: 999 1 1%; /* 1% is needed to prevent unintended wrapping on small screens */
|
||||
flex: 999 1 10%; /* 10% is needed to prevent unintended wrapping on small screens */
|
||||
}
|
||||
|
||||
.ipsEntry__header .ipsPhotoPanel__secondary{
|
||||
@@ -43389,6 +43365,13 @@ hr.ipsUnreadBar{
|
||||
height: 6px;
|
||||
}
|
||||
|
||||
/* Recommended note */
|
||||
.ipsEntry__recommendedNote{
|
||||
background: var(--i-background_2);
|
||||
border-radius: 6px;
|
||||
margin-top: 1em;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
/* Truncate posts if using the compact style and are viewing pages beyond 1 */
|
||||
.ipsEntry__truncate:not([data-truncate-expanded]){
|
||||
@@ -43616,7 +43599,22 @@ hr.ipsUnreadBar{
|
||||
}
|
||||
}
|
||||
|
||||
/* Adjust the padding of the review form, since the parent wrapper already has padding */
|
||||
.ipsForm--review > .ipsFieldRow:first-child{
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.ipsForm--review .ipsFieldRow{
|
||||
border-width: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.ipsForm--review .ipsSubmitRow{
|
||||
padding-bottom: 0;
|
||||
border-width: 0;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -50189,6 +50187,8 @@ li.L9 {
|
||||
|
||||
.ipsRating {
|
||||
display: inline-flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1.5em;
|
||||
color: var(--i-color_soft);
|
||||
}
|
||||
|
||||
@@ -51549,8 +51549,8 @@ details.ipsQuote > .ipsQuote_contents{
|
||||
}
|
||||
|
||||
/* Hide tabs if < 2 tabs exists */
|
||||
.ipsTabs:not(:has([role="tab"]:nth-child(2))){
|
||||
/* display: none; */
|
||||
.ipsTabs:has([role="tablist"] > :only-child){
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ipsTabs--sticky{
|
||||
@@ -52079,10 +52079,6 @@ details.ipsQuote > .ipsQuote_contents{
|
||||
mask-image: linear-gradient(to top, hsl(0 0% 0% / 0) 1.4em, hsl(0 0% 0% / 1) 50%);
|
||||
}
|
||||
|
||||
:where(.tiptap .ipsQuote_contents, [data-ipstruncate])[data-truncated="true"]:not([data-truncate-expanded]) {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/* This selector needs html due to :is(.ipsRichText, .ipsRichText) * */
|
||||
html .ipsTruncate_more{
|
||||
-webkit-appearance: none;
|
||||
@@ -52368,14 +52364,38 @@ html .ipsTruncate_more{
|
||||
padding: 1.5em 0;
|
||||
|
||||
--i-footer-widgets: 320px;
|
||||
--i-color_root: var(--i-footer--co);
|
||||
--i-color_hard: var(--i-footer--co);
|
||||
--i-color_soft: color-mix(in srgb, var(--i-footer--co) 70%, var(--i-footer--ba-co));
|
||||
|
||||
--i-data--bo-co: color-mix(in srgb, var(--i-footer--co) 20%, var(--i-footer--ba-co));
|
||||
}
|
||||
|
||||
.ipsFooter__footer a{
|
||||
@supports (color: oklch(from var(--i) clamp(0, (.7 - l) * 1000, 1) c h)) and (color: oklch(from red l c h)){
|
||||
.ipsFooter{
|
||||
--i-color_hard: oklch(from var(--i-footer--ba-co) clamp(0, (.7 - l) * 1000, 1) c h);
|
||||
}
|
||||
}
|
||||
|
||||
.ipsFooter a{
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/* Adjust colors of elements so they match the footer background/color */
|
||||
.ipsFooter .ipsList--border > li{
|
||||
outline-color: var(--i-data--bo-co);
|
||||
}
|
||||
.ipsFooter .cSidebarBlock_managing .ipsButton--inherit,
|
||||
.ipsFooter .ipsData--grid .ipsData__image,
|
||||
.ipsFooter .ipsData__image > i{
|
||||
background-color: var(--i-footer--ba-co);
|
||||
}
|
||||
.ipsFooter .ipsContainerTitle{
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.ipsFooter__widgets{
|
||||
margin-bottom: 1.5em;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
/* Hide footer widgets if they're empty */
|
||||
@@ -52383,60 +52403,25 @@ html .ipsTruncate_more{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ipsFooter__widgets .cWidgetContainer > ul{
|
||||
display: grid;
|
||||
grid-auto-flow: column;
|
||||
grid-auto-columns: minmax(min(var(--i-footer-widgets), 75vw), 1fr);
|
||||
gap: 5em;
|
||||
/* Remove all widget styles for the widget footer */
|
||||
.ipsFooter__widgets .ipsWidget,
|
||||
.ipsFooter__widgets .ipsWidget__header,
|
||||
.ipsFooter__widgets .cWidgetContainer--carousel{
|
||||
box-shadow: none;
|
||||
background: color-mix(in srgb, var(--i-footer--co) 5%, var(--i-footer--ba-co));
|
||||
color: inherit;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
.ipsFooter__widgets .cWidgetContainer > ul > li{
|
||||
padding: 2em 0;
|
||||
scroll-snap-align: start;
|
||||
}
|
||||
|
||||
/* Remove all widget styles for the widget footer */
|
||||
.ipsFooter__widgets :is(.ipsWidget, .ipsWidget__header){
|
||||
all: unset;
|
||||
}
|
||||
|
||||
.ipsFooter__widgets .ipsWidget *{
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.ipsFooter__widgets .ipsWidget__header {
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
.ipsFooter__widgets .ipsData__item{
|
||||
border-color: color-mix(in srgb, var(--i-co) 10%, transparent);
|
||||
}
|
||||
|
||||
.ipsFooter__widgets :is(.ipsData__meta, .ipsPhotoPanel__secondary, .ipsData__stats){
|
||||
--i-co: inherit;
|
||||
color: color-mix(in srgb, var(--i-co) 50%, transparent);
|
||||
}
|
||||
|
||||
.ipsFooter .cSidebarManager_placeholder{
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/* Move into carousel on mobiles */
|
||||
@media (max-width: 979px){
|
||||
.ipsFooter__widgets .cWidgetContainer > ul{
|
||||
gap: 2em;
|
||||
margin-left: calc(var(--i-layout-gutter) * -1);
|
||||
margin-right: calc(var(--i-layout-gutter) * -1);
|
||||
overflow-x: scroll;
|
||||
overscroll-behavior-x: contain;
|
||||
scroll-behavior: smooth;
|
||||
scroll-snap-type: x mandatory;
|
||||
padding-inline: 2em;
|
||||
scroll-padding-inline: 2em;
|
||||
.ipsFooter__widgets .ipsWidget__header,
|
||||
.ipsFooter__widgets .cWidgetContainer__carousel-buttons {
|
||||
background: color-mix(in srgb, var(--i-footer--co) 10%, var(--i-footer--ba-co));
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
.ipsFooter .cSidebarManager_placeholder{
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.ipsFooter__footer{
|
||||
font-size: .9em;
|
||||
@@ -53310,6 +53295,7 @@ i-navigation-menu{
|
||||
.ipsLayout__main{
|
||||
flex: 1 1 auto;
|
||||
padding-top: var(--i-sp_block);
|
||||
outline-width: 0;
|
||||
}
|
||||
|
||||
@media (max-width: 979px){
|
||||
@@ -53405,7 +53391,7 @@ i-navigation-menu{
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
#elContextualTools{
|
||||
#elContextualTools, [data-role="sidebarAd"]{
|
||||
margin-bottom: var(--i-sp_block);
|
||||
}
|
||||
#elContextualTools,
|
||||
@@ -55154,6 +55140,10 @@ a.i-link-color_inherit,
|
||||
----------------
|
||||
*/
|
||||
|
||||
.i-font-style_italic{
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.i-text-transform_uppercase{
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
@@ -280,5 +280,6 @@
|
||||
"5000028": "5.0.0 Beta 2",
|
||||
"5000029": "5.0.0 Beta 3",
|
||||
"5000030": "5.0.0 Beta 4",
|
||||
"5000031": "5.0.0 Beta 5"
|
||||
"5000031": "5.0.0 Beta 5",
|
||||
"5000032": "5.0.0 Beta 6"
|
||||
}
|
||||
@@ -15,6 +15,7 @@ namespace IPS\core\extensions\core\MemberACPProfileBlocks;
|
||||
use IPS\core\MemberACPProfile\TabbedBlock;
|
||||
use IPS\core\ProfileFields\Field;
|
||||
use IPS\Db;
|
||||
use IPS\File;
|
||||
use IPS\Helpers\Form;
|
||||
use IPS\Helpers\Form\Custom;
|
||||
use IPS\Helpers\Form\Editor;
|
||||
@@ -211,22 +212,28 @@ class ProfileData extends TabbedBlock
|
||||
Db::i()->replace( 'core_pfields_content', $profileFields );
|
||||
|
||||
/* Profile Preferences */
|
||||
if ( $values['bday'] )
|
||||
if( Settings::i()->profile_birthday_type !== 'none' )
|
||||
{
|
||||
$this->member->bday_day = $values['bday']['day'];
|
||||
$this->member->bday_month = $values['bday']['month'];
|
||||
$this->member->bday_year = $values['bday']['year'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->member->bday_day = NULL;
|
||||
$this->member->bday_month = NULL;
|
||||
$this->member->bday_year = NULL;
|
||||
if ( $values['bday'] )
|
||||
{
|
||||
$this->member->bday_day = $values['bday']['day'];
|
||||
$this->member->bday_month = $values['bday']['month'];
|
||||
$this->member->bday_year = $values['bday']['year'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->member->bday_day = NULL;
|
||||
$this->member->bday_month = NULL;
|
||||
$this->member->bday_year = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if ( Settings::i()->signatures_enabled )
|
||||
{
|
||||
$this->member->signature = $values['signature'];
|
||||
File::claimAttachments( 'sig-' . $this->member->member_id, $this->member->member_id );
|
||||
}
|
||||
|
||||
$this->member->save();
|
||||
|
||||
/* Log and Redirect */
|
||||
|
||||
@@ -55,6 +55,7 @@ class General extends ModeratorPermissionsAbstract
|
||||
}
|
||||
|
||||
$return['can_manage_sidebar'] = 'YesNo';
|
||||
$return['can_use_theme_editor'] = 'YesNo';
|
||||
$return['can_use_ip_tools'] = 'YesNo';
|
||||
|
||||
return $return;
|
||||
|
||||
@@ -224,7 +224,7 @@ class menu extends Controller
|
||||
'title' => 'delete',
|
||||
'link' => Url::internal( "app=core&module=applications&controller=menu&do=remove&id={$item['id']}" )->csrf(),
|
||||
'icon' => 'times-circle',
|
||||
'data' => [ 'confirm' => '' ]
|
||||
'data' => ['delete' => ''],
|
||||
];
|
||||
|
||||
$icon = null;
|
||||
|
||||
@@ -389,10 +389,16 @@ class emoticons extends Controller
|
||||
{
|
||||
try
|
||||
{
|
||||
File::get( 'core_Emoticons', $emoticon['image'] )->delete();
|
||||
File::get( 'core_Emoticons', $emoticon['image_2x'] )->delete();
|
||||
if( $emoticon['image'] )
|
||||
{
|
||||
File::get( 'core_Emoticons', $emoticon['image'] )->delete();
|
||||
}
|
||||
if( $emoticon['image_2x'] )
|
||||
{
|
||||
File::get( 'core_Emoticons', $emoticon['image_2x'] )->delete();
|
||||
}
|
||||
}
|
||||
catch ( UnderflowException $e ) { }
|
||||
catch ( OutOfRangeException $e ) { }
|
||||
}
|
||||
|
||||
Db::i()->delete( 'core_emoticons', array( 'emo_set=?', $set ) );
|
||||
|
||||
@@ -769,7 +769,7 @@ class advertisements extends Controller
|
||||
|
||||
/* Any additional settings to save? */
|
||||
$additionalSettings = array(
|
||||
'ad_apps' => ( isset( $values['ad_apps'] ) AND $values['ad_apps'] != 0 ) ? array_keys( $values['ad_apps'] ) : 0
|
||||
'ad_apps' => ( isset( $values['ad_apps'] ) AND is_array( $values['ad_apps'] ) ) ? array_keys( $values['ad_apps'] ) : 0
|
||||
);
|
||||
|
||||
if( $values['ad_type'] == Advertisement::AD_EMAIL )
|
||||
|
||||
@@ -238,7 +238,7 @@ class seo extends Controller
|
||||
$value = $values['use_robotstxt_custom_editor'];
|
||||
}
|
||||
|
||||
$form->saveAsSettings( [ 'robots_txt' => $value ] );
|
||||
$form->saveAsSettings( [ 'robots_txt' => $value, 'seo_reduce_links' => $values['seo_reduce_links'] ] );
|
||||
|
||||
Session::i()->log( 'acplog__robotstxt_edited' );
|
||||
|
||||
|
||||
@@ -151,7 +151,7 @@ class membersactivity extends Controller
|
||||
/* And now build the table */
|
||||
$table = new Db( 'core_members', Request::i()->url()->setQueryString( array( 'postDateStart' => $startTime, 'postDateEnd' => $endTime, 'postGroups' => is_array( $groups ) ? implode( ',', $groups ) : NULL ) ), $where );
|
||||
|
||||
$table->include = array( 'name', 'email', 'member_posts', 'member_last_post', 'group_name', 'ip_address' );
|
||||
$table->include = array( 'name', 'email', 'member_last_post', 'group_name', 'ip_address' );
|
||||
$table->mainColumn = 'name';
|
||||
$table->langPrefix = 'activity_';
|
||||
$table->rowClasses = array( 'email' => array( 'ipsTable_wrap' ), 'group_name' => array( 'ipsTable_wrap' ) );
|
||||
|
||||
@@ -11,11 +11,13 @@
|
||||
|
||||
namespace IPS\core\modules\front\discover;
|
||||
|
||||
use IPS\Content;
|
||||
use IPS\Content\Comment;
|
||||
use IPS\Content\Filter;
|
||||
use IPS\Content\Item;
|
||||
use IPS\Content\Search\ContentFilter;
|
||||
use IPS\Content\Search\Query;
|
||||
use IPS\Content\Search\Result\Content as SearchResultContent;
|
||||
use IPS\Content\Tag as SystemTag;
|
||||
use IPS\Content\Taggable;
|
||||
use IPS\DateTime;
|
||||
use IPS\Db;
|
||||
use IPS\Helpers\CoverPhoto;
|
||||
@@ -24,11 +26,9 @@ use IPS\Helpers\Form;
|
||||
use IPS\Helpers\Form\Date;
|
||||
use IPS\Helpers\Form\Upload;
|
||||
use IPS\Helpers\Table\Content as TableContent;
|
||||
use IPS\IPS;
|
||||
use IPS\Member;
|
||||
use IPS\Output;
|
||||
use IPS\Request;
|
||||
use IPS\Settings;
|
||||
use IPS\Theme;
|
||||
use OutOfRangeException;
|
||||
use function count;
|
||||
@@ -176,48 +176,53 @@ class tag extends Controller
|
||||
{
|
||||
$contentTypes = SystemTag::getTaggableContentTypes();
|
||||
$pinnedItems = $this->tag->getPinnedItems();
|
||||
$items = [];
|
||||
foreach( Db::i()->select( '*', [ 'core_tags', 't' ], [
|
||||
[ 't.tag_text=?', $this->tag->text ],
|
||||
[ 'p.tag_perm_visible=?', 1 ],
|
||||
[ '(p.tag_perm_text=? or ' . Db::i()->findInSet( 'p.tag_perm_text', Member::loggedIn()->groups ) . ')', '*' ]
|
||||
], 't.tag_added desc', 50 )
|
||||
->join( [ 'core_tags_perms', 'p' ], 't.tag_aai_lookup=p.tag_perm_aai_lookup and t.tag_aap_lookup=p.tag_perm_aap_lookup' ) as $row )
|
||||
|
||||
$filters = [];
|
||||
foreach( $contentTypes as $type )
|
||||
{
|
||||
if( count( $items ) >= Settings::i()->tags_landing_limit )
|
||||
$filters[] = ContentFilter::init( $type );
|
||||
}
|
||||
|
||||
$query = Query::init();
|
||||
$query->setLimit( 50 );
|
||||
$query->filterByContent( $filters );
|
||||
$query->setOrder( Query::ORDER_NEWEST_CREATED );
|
||||
|
||||
$items = [];
|
||||
foreach( $query->search( null, [ $this->tag->text ], Query::TAGS_MATCH_ITEMS_ONLY ) as $result )
|
||||
{
|
||||
/* @var SearchResultContent $result */
|
||||
$pinned = false;
|
||||
$result = $result->asArray();
|
||||
|
||||
/* If the result is a pinned item, then don't show it in the regular list */
|
||||
if( is_array( $pinnedItems ) )
|
||||
{
|
||||
break;
|
||||
foreach( $pinnedItems as $pinnedItem )
|
||||
{
|
||||
$pinnedItemIdColumn = $pinnedItem::$databaseColumnId;
|
||||
if( get_class( $pinnedItem ) == $result['indexData']['index_class'] and $pinnedItem->$pinnedItemIdColumn == $result['indexData']['index_object_id'] )
|
||||
{
|
||||
$pinned = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach( $contentTypes as $k => $itemClass )
|
||||
if( !$pinned )
|
||||
{
|
||||
if( $itemClass::$application == $row['tag_meta_app'] and $itemClass::$module == $row['tag_meta_area'] )
|
||||
try
|
||||
{
|
||||
try
|
||||
$itemClass = $result['indexData']['index_class'];
|
||||
$id = $result['indexData']['index_object_id'];
|
||||
if( is_subclass_of( $itemClass, Comment::class ) )
|
||||
{
|
||||
$item = $itemClass::load( $row['tag_meta_id'] );
|
||||
$idColumn = $itemClass::$databaseColumnId;
|
||||
$pinned = false;
|
||||
if( is_array( $pinnedItems ) )
|
||||
{
|
||||
foreach( $pinnedItems as $pinnedItem )
|
||||
{
|
||||
if( get_class( $pinnedItem ) == $itemClass and $pinnedItem->$idColumn == $item->$idColumn )
|
||||
{
|
||||
$pinned = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( !$pinned )
|
||||
{
|
||||
$items[] = $item;
|
||||
}
|
||||
$itemClass = $itemClass::$itemClass;
|
||||
$id = $result['indexData']['index_item_id'];
|
||||
}
|
||||
catch( OutOfRangeException ){}
|
||||
break;
|
||||
$items[] = $itemClass::load( $id );
|
||||
}
|
||||
catch( OutOfRangeException ){}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -135,7 +135,7 @@ class register extends Controller
|
||||
{
|
||||
Output::i()->redirect( Url::internal( 'app=nexus&module=store&controller=store&do=register', 'front', 'store' ) );
|
||||
}
|
||||
else if ( Member::loggedIn()->canAccessModule( Module::get( 'nexus', 'subscriptions' ) ) and ( Settings::i()->nexus_subs_register ) )
|
||||
else if ( Member::loggedIn()->canAccessModule( Module::get( 'nexus', 'subscriptions' ) ) and Settings::i()->nexus_subs_enabled and Settings::i()->nexus_subs_register )
|
||||
{
|
||||
Output::i()->redirect( Url::internal( 'app=nexus&module=subscriptions&controller=subscriptions®ister=1', 'front', 'nexus_subscriptions' ) );
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ class themeeditor extends Controller
|
||||
*/
|
||||
public function manage(): void
|
||||
{
|
||||
if ( ! Member::loggedIn()->isAdmin() ) /* @todo add perm checks in Admin CP */
|
||||
if( !Member::loggedIn()->modPermission( 'can_use_theme_editor' ) )
|
||||
{
|
||||
Output::i()->error( 'no_permission', '2S164/1', 403, '' );
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ class Upgrade
|
||||
*/
|
||||
public function finish()
|
||||
{
|
||||
Task::queue( 'core', 'BuildTimeToRank', NULL, 3 );
|
||||
Task::queue( 'core', 'BuildTimeToRank', [], 3 );
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -35,7 +35,7 @@ class Upgrade
|
||||
*/
|
||||
public function finish()
|
||||
{
|
||||
Task::queue( 'core', 'RebuildReportIndexData', NULL, 3 );
|
||||
Task::queue( 'core', 'RebuildReportIndexData', [], 3 );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
namespace IPS\core\setup\upg_5000015;
|
||||
|
||||
use IPS\Application;
|
||||
use IPS\core\FrontNavigation;
|
||||
use IPS\Db;
|
||||
use IPS\Data\Store;
|
||||
@@ -18,6 +19,7 @@ use IPS\Lang;
|
||||
use IPS\Member;
|
||||
use OutOfRangeException;
|
||||
use function defined;
|
||||
use function in_array;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
@@ -60,7 +62,7 @@ class Upgrade
|
||||
|
||||
/* Create the language string */
|
||||
$class = 'IPS\\' . $root['app'] . '\extensions\core\FrontNavigation\\' . $root['extension'];
|
||||
if( class_exists( $class ) )
|
||||
if( in_array( $root['app'], array_keys( Application::enabledApplications() ) ) and class_exists( $class ) )
|
||||
{
|
||||
/* @var FrontNavigation\FrontNavigationAbstract $class */
|
||||
$obj = new $class( json_decode( (string) $root['config'], true ), $root['id'], $root['permissions'], $root['menu_types'], json_decode( (string) $root['icon'], true ), $root['parent'] );
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"id": 5000032,
|
||||
"name": "5.0.0 Beta 6",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeeditor": true,
|
||||
"javascript": true,
|
||||
"emailTemplates": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": true,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"core\/front\/controllers\/core\/ips.core.moderation.js",
|
||||
"core\/front\/controllers\/core\/ips.core.reviewForm.js",
|
||||
"global\/framework\/templates\/ips.core.templates.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"can_use_theme_editor"
|
||||
],
|
||||
"edited": [
|
||||
"enhancements__core_FacebookPixel",
|
||||
"enhancements__core_FacebookPixel_desc",
|
||||
"fb_pixel_id_req"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"global\/forms\/editorAttachmentsPlaceholder",
|
||||
"front\/forms\/postingInformation",
|
||||
"front\/forms\/reviewTemplate",
|
||||
"front\/forms\/row",
|
||||
"front\/global\/analytics",
|
||||
"front\/global\/featuredComment",
|
||||
"front\/global\/featuredComments",
|
||||
"front\/global\/globalTemplate",
|
||||
"front\/global\/guestCommentTeaser",
|
||||
"front\/global\/tags"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/core.css",
|
||||
"global\/framework\/3-carousel.css",
|
||||
"global\/framework\/3-compose.css",
|
||||
"global\/framework\/3-data-tables.css",
|
||||
"global\/framework\/3-entries.css",
|
||||
"global\/framework\/3-forms.css",
|
||||
"global\/framework\/3-rating.css",
|
||||
"global\/framework\/3-tabs.css",
|
||||
"global\/framework\/3-truncate.css",
|
||||
"global\/framework\/4-footer.css",
|
||||
"global\/framework\/4-layout.css",
|
||||
"global\/framework\/5-typography.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"categories": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"lightDarkMode",
|
||||
"logos",
|
||||
"pageLayouts",
|
||||
"typography",
|
||||
"header",
|
||||
"sidePanel",
|
||||
"content",
|
||||
"footer",
|
||||
"mobileNavigation",
|
||||
"navigationPanel",
|
||||
"global",
|
||||
"textLogo",
|
||||
"imageLogoDesktop",
|
||||
"imageLogoMobile",
|
||||
"desktopHeader",
|
||||
"mobileHeader",
|
||||
"desktopFooter",
|
||||
"body",
|
||||
"contentBoxes",
|
||||
"sidebar",
|
||||
"avatars",
|
||||
"buttons"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"settings": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"set__i-default-scheme",
|
||||
"set__i-logo-text",
|
||||
"set__i-sidebar-width",
|
||||
"i-primary-button--co",
|
||||
"set__i-mobile-icons-location",
|
||||
"set__logo-light",
|
||||
"i-footer--co",
|
||||
"set__mobile-logo-light",
|
||||
"layout_global_view_mode",
|
||||
"set__i-font-family",
|
||||
"set__i-design-border",
|
||||
"set__i-layout-width",
|
||||
"set__i-sidebar-ui-header--he",
|
||||
"set__i-position-logo",
|
||||
"set__i-mobile-header--he",
|
||||
"set__i-change-scheme",
|
||||
"set__i-logo-slogan",
|
||||
"i-primary-button--ba-co",
|
||||
"set__i-mobile-footer-labels",
|
||||
"set__logo-dark",
|
||||
"i-footer--ba-co",
|
||||
"set__mobile-logo-dark",
|
||||
"set__i-design-radius",
|
||||
"set__i-font-size",
|
||||
"set__i-flip-sidebar",
|
||||
"i-dashHeader--ba-co",
|
||||
"set__i-position-navigation",
|
||||
"i-headerMobile--ba-co",
|
||||
"i-headerMobile--co",
|
||||
"i-secondary-button--co",
|
||||
"set__i-logo--fo-fa",
|
||||
"set__i-position-user",
|
||||
"i-dashHeader--co",
|
||||
"set__i-avatar-radius",
|
||||
"i-color_root",
|
||||
"set__i-mobile-logo--he",
|
||||
"set__i-design-shadow",
|
||||
"i-mobileFooter--ba-co",
|
||||
"set__i-logo--he",
|
||||
"i-secondary-button--ba-co",
|
||||
"set__i-logo--fo-we",
|
||||
"i-navPanelLinkHover--co",
|
||||
"set__i-position-breadcrumb",
|
||||
"i-mobileFooter--co",
|
||||
"i-color_soft",
|
||||
"i-body--ba-co",
|
||||
"set__i-link-panels",
|
||||
"set__i-sidebar-ui-logo--he",
|
||||
"i-button--bo-ra",
|
||||
"set__i-desktop-logo--fo-si",
|
||||
"set__i-sticky-sidebar",
|
||||
"i-navPanelLinkActive--ba-co",
|
||||
"set__i-position-search",
|
||||
"i-mobileFooter-active--co",
|
||||
"i-color_hard",
|
||||
"i-box--ba-co",
|
||||
"set__i-header-primary--he",
|
||||
"set__i-sidebar-ui-logo--fo-si",
|
||||
"i-box--bo-co",
|
||||
"i-link--co",
|
||||
"i-mobileFooter-active--ba-co",
|
||||
"i-navPanel--ba-co",
|
||||
"set__i-mobile-logo--fo-si",
|
||||
"i-link-hover--co",
|
||||
"i-navPanel--co",
|
||||
"set__i-header-secondary--he",
|
||||
"i-boxHeader--ba-co",
|
||||
"i-boxHeader--co",
|
||||
"set__i-user-content-font-size",
|
||||
"i-navPanelLinkActive--co",
|
||||
"set__i-nav-bar-icons",
|
||||
"i-widget-header--ba-co",
|
||||
"i-headerTop--ba-co",
|
||||
"i-widget-header--co",
|
||||
"i-headerTop--co",
|
||||
"i-headerPrimary--ba-co",
|
||||
"i-headerPrimary--co",
|
||||
"i-headerSecondary--ba-co",
|
||||
"i-headerSecondary--co",
|
||||
"set__i-header-top--he"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -440,7 +440,7 @@ class Stream extends Model
|
||||
$value = $containers->$class ?? 0;
|
||||
|
||||
/* @var Item $class */
|
||||
$field = new Node( 'stream_containers_' . $class::$title, $value, FALSE, array( 'class' => $nodeClass, 'clubs' => TRUE, 'multiple' => TRUE, 'zeroVal' => 'all', 'permissionCheck' => $nodeClass::searchableNodesPermission(), 'forceOwner' => FALSE, 'subnodes' => FALSE ), NULL, NULL, NULL, 'stream_containers_' . $class::$title );
|
||||
$field = new Node( 'stream_containers_' . $class::$title, $value, FALSE, array( 'class' => $nodeClass, 'clubs' => TRUE, 'multiple' => TRUE, 'zeroVal' => 'all', 'forceOwner' => FALSE, 'subnodes' => FALSE ), NULL, NULL, NULL, 'stream_containers_' . $class::$title );
|
||||
$field->label = Member::loggedIn()->language()->addToStack( $nodeClass::$nodeTitle );
|
||||
$form->add( $field );
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user