Version 4.7.0

This commit is contained in:
Neo committed 2025-12-19 16:00:35 -08:00
1 parent 517a5e1f70
commit 8ba7d43898
1933 files changed
+65613 -11332

No files matched your search

+7
View File
@@ -31,6 +31,13 @@
"controller": "posts",
"do": "",
"restriction": "posts_manage"
},
"questions": {
"tab": "stats",
"controller": "questions",
"do": "",
"restriction": "questions_manage",
"subcontrollers": ""
}
}
}
@@ -26,6 +26,9 @@
},
"posts": {
"posts_manage": "posts_manage"
},
"questions": {
"questions_manage": "questions_manage"
}
}
}
+23 -28
View File
@@ -3,33 +3,17 @@
"lang_key": "menu__forums_forums_forums",
"restriction": "forums_manage",
"keywords": [
"edit forum",
"categories",
"forum",
"forums"
]
},
"app=forums&module=forums&controller=forums": {
"lang_key": "menu__forums_forums_forums",
"restriction": "forums_manage",
"keywords": [
"edit forum"
]
},
"app=forums&module=forums&controller=forums&searchResult=form_2_allow_anonymous": {
"lang_key": "allow_anonymous",
"restriction": "forums_manage",
"keywords": [
"anonymous",
"anonymously"
]
},
"app=forums&module=forums&controller=forums&searchResult=forum_best_answer": {
"app=forums&module=forums&controller=forums&do=form&searchResult=forum_best_answer": {
"lang_key": "bw_enable_answers_moderator",
"restriction": "forums_manage",
"keywords": [
"answer",
"best answer",
"qa",
"solution",
"solved"
]
},
@@ -85,6 +69,14 @@
"redirect"
]
},
"app=forums&module=forums&controller=forums&searchResult=form_2_allow_anonymous": {
"lang_key": "allow_anonymous",
"restriction": "forums_manage",
"keywords": [
"anonymous",
"anonymously"
]
},
"app=forums&module=forums&controller=forums&searchResult=form_2_forum_allow_poll": {
"lang_key": "forum_allow_poll",
"restriction": "forums_manage",
@@ -226,6 +218,16 @@
"star ratings"
]
},
"app=forums&module=forums&controller=forums&searchResult=forum_best_answer": {
"lang_key": "bw_enable_answers_moderator",
"restriction": "forums_manage",
"keywords": [
"answer",
"best answer",
"qa",
"solved"
]
},
"app=forums&module=forums&controller=forums&searchResult=forum_can_view_others": {
"lang_key": "forum_can_view_others",
"restriction": "forums_manage",
@@ -498,16 +500,9 @@
"lang_key": "menu__forums_forums_savedActions",
"restriction": "savedActions_manage",
"keywords": [
"saved actions",
"multi moderation",
"multimod",
"saved actions"
]
},
"app=forums&module=forums&controller=savedActions": {
"lang_key": "menu__forums_forums_savedActions",
"restriction": "savedActions_manage",
"keywords": [
"saved actions"
"multimod"
]
},
"app=forums&module=forums&controller=savedActions&searchResult=form_1_mm_forums": {
+5 -4
View File
@@ -38,15 +38,15 @@
<widget key="topicFeed"><![CDATA[{"class":"\\IPS\\Widget\\PermissionCache","restrict":[],"default_area":"","allow_reuse":true,"menu_style":"modal","embeddable":true}]]></widget>
<widget key="postFeed"><![CDATA[{"class":"\\IPS\\Widget\\PermissionCache","restrict":[],"default_area":"","allow_reuse":true,"menu_style":"modal","embeddable":true}]]></widget>
<widget key="poll"><![CDATA[{"class":"\\IPS\\Widget\\PermissionCache","restrict":["sidebar","cms"],"default_area":"","allow_reuse":true,"menu_style":"modal","embeddable":true}]]></widget>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums"><![CDATA[{"lang_key":"menu__forums_forums_forums","restriction":"forums_manage","keywords":["edit forum"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=form_2_allow_anonymous"><![CDATA[{"lang_key":"allow_anonymous","restriction":"forums_manage","keywords":["anonymous","anonymously"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=forum_best_answer"><![CDATA[{"lang_key":"bw_enable_answers_moderator","restriction":"forums_manage","keywords":["answer","best answer","qa","solved"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums"><![CDATA[{"lang_key":"menu__forums_forums_forums","restriction":"forums_manage","keywords":["edit forum","categories","forum","forums"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;do=form&amp;searchResult=forum_best_answer"><![CDATA[{"lang_key":"bw_enable_answers_moderator","restriction":"forums_manage","keywords":["solution","solved"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=bw_disable_prefixes"><![CDATA[{"lang_key":"bw_disable_prefixes","restriction":"forums_manage","keywords":["can set","can set tag prefixes","tag prefixes"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=bw_disable_tagging"><![CDATA[{"lang_key":"bw_disable_tagging","restriction":"forums_manage","keywords":["can use tags","tags","use tags"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=form_1_forum_description"><![CDATA[{"lang_key":"forum_description","restriction":"forums_manage","keywords":["category description","forum description"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=form_1_forum_name"><![CDATA[{"lang_key":"forum_name","restriction":"forums_manage","keywords":["category name","forum name"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=form_1_forum_parent_id"><![CDATA[{"lang_key":"forum_parent_id","restriction":"forums_manage","keywords":["parent","parent forum"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=form_1_forum_type"><![CDATA[{"lang_key":"forum_type","restriction":"forums_manage","keywords":["category type","discussions","questions","redirect"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=form_2_allow_anonymous"><![CDATA[{"lang_key":"allow_anonymous","restriction":"forums_manage","keywords":["anonymous","anonymously"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=form_2_forum_allow_poll"><![CDATA[{"lang_key":"forum_allow_poll","restriction":"forums_manage","keywords":["allow polls","polls"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=form_2_forum_description"><![CDATA[{"lang_key":"forum_description","restriction":"forums_manage","keywords":["forum description"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=form_2_forum_inc_postcount"><![CDATA[{"lang_key":"forum_inc_postcount","restriction":"forums_manage","keywords":["increase content","increase content counts","increase counts"]}]]></acpsearch>
@@ -64,6 +64,7 @@
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=form_new_forum_show_rules"><![CDATA[{"lang_key":"forum_show_rules","restriction":"forums_manage","keywords":["rules","show rules"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=form_new_forum_type"><![CDATA[{"lang_key":"forum_type","restriction":"forums_manage","keywords":["category","discussions","forum type","questions","redirect"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=forum_allow_rating"><![CDATA[{"lang_key":"forum_forum_allow_rating","restriction":"forums_manage","keywords":["enable star","star","star ratings"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=forum_best_answer"><![CDATA[{"lang_key":"bw_enable_answers_moderator","restriction":"forums_manage","keywords":["answer","best answer","qa","solved"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=forum_can_view_others"><![CDATA[{"lang_key":"forum_can_view_others","restriction":"forums_manage","keywords":["other users","see topics","topics"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=forum_disable_sharelinks"><![CDATA[{"lang_key":"forum_disable_sharelinks","restriction":"forums_manage","keywords":["enable sharing","sharing"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;searchResult=forum_icon"><![CDATA[{"lang_key":"forum_icon","restriction":"forums_manage","keywords":["forum icon","icon"]}]]></acpsearch>
@@ -95,7 +96,7 @@
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;subnode=0&amp;parent=2&amp;searchResult=forum_permission_showtopic"><![CDATA[{"lang_key":"forum_permission_showtopic","restriction":"forums_manage","keywords":["read permissions","users without","users without read permissions","without permissions"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;subnode=0&amp;parent=2&amp;searchResult=forum_preview_posts"><![CDATA[{"lang_key":"forum_preview_posts","restriction":"forums_manage","keywords":["must approved","posts approved","posts must approved"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=forums&amp;subnode=0&amp;parent=2&amp;searchResult=forum_sort_key"><![CDATA[{"lang_key":"forum_sort_key","restriction":"forums_manage","keywords":["default sort","default sort order","sort order"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=savedActions"><![CDATA[{"lang_key":"menu__forums_forums_savedActions","restriction":"savedActions_manage","keywords":["saved actions"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=savedActions"><![CDATA[{"lang_key":"menu__forums_forums_savedActions","restriction":"savedActions_manage","keywords":["saved actions","multi moderation","multimod"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=savedActions&amp;searchResult=form_1_mm_forums"><![CDATA[{"lang_key":"mm_forums","restriction":"savedActions_manage","keywords":["multimod forums","settings forums"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=savedActions&amp;searchResult=form_1_mm_title"><![CDATA[{"lang_key":"mm_title","restriction":"savedActions_manage","keywords":["multimod name","name","settings name"]}]]></acpsearch>
<acpsearch key="app=forums&amp;module=forums&amp;controller=savedActions&amp;searchResult=form_1_topic_approve"><![CDATA[{"lang_key":"topic_approve","restriction":"savedActions_manage","keywords":["hide","unhide"]}]]></acpsearch>
+96 -49
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<javascript app="forums">
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.flow.js" javascript_type="controller" javascript_version="106107" javascript_position="1000100"><![CDATA[/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.flow.js" javascript_type="controller" javascript_version="107014" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -15,7 +15,9 @@
_ids: [],
_button: null,
_rootForum: null,
urlParam: 'forumId',
initialize: function () {
this.on( 'click', '[data-node-id]', this.toggleFilters );
@@ -26,14 +28,36 @@
* Um, set up...
*/
setup: function () {
/* Populate forum IDs */
var _ids = ips.utils.url.getParam( 'forumId' );
var self = this;
/* Are we in a forum? */
if ( ! _.isUndefined( this.scope.attr('data-rootForum') ) ) {
this._rootForum = this.scope.attr('data-rootForum');
}
if ( this._rootForum ) {
this.urlParam = 'forumId' + this._rootForum;
}
/* Populate forum IDs */
var _ids = ips.utils.url.getParam( this.urlParam );
if ( ! _.isUndefined( _ids ) ) {
/* Check URL */
this._ids = decodeURIComponent( _ids ).split(',');
} else if ( this._rootForum ) {
if( ! _.isUndefined( ips.utils.cookie.get('forums_flowIdsRoots') ) ) {
/* Check local storage */
var _jsonIds = JSON.parse(ips.utils.cookie.get('forums_flowIdsRoots'))[this._rootForum];
if (!_.isUndefined(_jsonIds)) {
this._ids = _jsonIds;
}
} else {
this.scope.find('[data-node-id]').each(function (i, node) {
var id = $(node).attr('data-node-id');
self._ids.push(id);
});
}
} else if( ! _.isUndefined( ips.utils.cookie.get('forums_flowIds') ) ) {
/* Check local storage */
this._ids = ips.utils.cookie.get('forums_flowIds').split(',');
@@ -47,6 +71,11 @@
});
}
/* Add forumIds to URL */
if ( _.isUndefined( _ids ) && this._ids.length && this._rootForum === null ) {
$( document ).trigger( 'updateTableURL', { [this.urlParam] : _.uniq( _.values( this._ids ) ).join(',') } );
}
this._button = $('body').find('[data-role="fluidForumMobileDesc"]');
this._updateButtonText();
},
@@ -67,15 +96,15 @@
if ( _.indexOf( this._ids, id ) == -1 ) {
/* Does not exist, so add it */
this.childSelect( id, false );
} else {
/* Exists, so remove it */
this.childUnselect( id );
}
this._updateButtonText();
$( document ).trigger( 'updateTableURL', { forumId: _.uniq( _.values( this._ids ) ).join(',') } );
$( document ).trigger( 'updateTableURL', { [this.urlParam]: _.uniq( _.values( this._ids ) ).join(',') } );
},
/**
@@ -96,16 +125,16 @@
var node = this.scope.find('[data-node-id="' + id + '"]');
node.addClass('cForumMiniList_selected');
var parentId = node.attr('data-parent-id');
/* Mark any children, but we do not need to keep individual row markings */
if ( skipChildren === false && ( node.attr('data-has-children') || id == parentId ) ) {
if (skipChildren === false && (node.attr('data-has-children') || id == parentId)) {
var self = this;
_.each( this.scope.find('[data-parent-id="' + id + '"]'), function( v, k ) {
_.each(this.scope.find('[data-parent-id="' + id + '"]'), function (v, k) {
var _cId = $(v).attr('data-node-id');
if ( _cId != id ) {
self.childSelect( _cId, false );
if (_cId != id) {
self.childSelect(_cId, false);
}
} );
});
}
this.updateCookie();
@@ -125,16 +154,18 @@
this.updateCookie();
/* Check for children of this and unselect those too */
var self = this;
_.each( this.scope.find('[data-parent-id="' + id + '"]'), function( v, k ) {
var _cId = $(v).attr('data-node-id');
if ( _cId != id ) {
self.childUnselect( _cId );
}
} );
if ( this._rootForum === null ) {
var self = this;
_.each(this.scope.find('[data-parent-id="' + id + '"]'), function (v, k) {
var _cId = $(v).attr('data-node-id');
if (_cId != id) {
self.childUnselect(_cId);
}
});
/* And we always need to unselect the category */
this.parentUnselect( this.scope.find('[data-node-id="' + id + '"]').closest('[data-category]').find('[data-node-id]').first().attr('data-node-id') );
/* And we always need to unselect the category */
this.parentUnselect( this.scope.find('[data-node-id="' + id + '"]').closest('[data-category]').find('[data-node-id]').first().attr('data-node-id') );
}
},
/**
@@ -147,14 +178,18 @@
this.scope.find('[data-node-id="' + parentId + '"]').addClass('cForumMiniList_selected');
/* Remove children from the arrays as PHP handles this */
var self = this;
_.each( this.scope.find('[data-parent-id="' + parentId + '"]'), function( v, k ) {
var _cId = $(v).attr('data-node-id');
if ( _cId != parentId ) {
self.childUnselect( _cId );
}
} );
if ( this._rootForum === null ) {
var self = this;
_.each(this.scope.find('[data-parent-id="' + parentId + '"]'), function (v, k) {
var _cId = $(v).attr('data-node-id');
if (_cId != parentId) {
self.childUnselect(_cId);
}
});
} else {
this.updateCookie();
}
},
/**
@@ -172,14 +207,16 @@
/* Off up the tree we go */
Debug.log( "Looking for parent ID " + node.attr('data-parent-id') );
var self = this;
_.each( this.scope.find('[data-node-id="' + node.attr('data-parent-id') + '"]'), function( v, k ) {
var _cId = $(v).attr('data-node-id');
if ( _cId != parentId ) {
Debug.log( "Found " + _cId );
self.parentUnselect( _cId );
}
} );
if ( this._rootForum === null ) {
var self = this;
_.each(this.scope.find('[data-node-id="' + node.attr('data-parent-id') + '"]'), function (v, k) {
var _cId = $(v).attr('data-node-id');
if (_cId != parentId) {
Debug.log("Found " + _cId);
self.parentUnselect(_cId);
}
});
}
},
/**
@@ -188,8 +225,18 @@
updateCookie: function(id) {
var cookie = _.uniq( _.values( this._ids ) ).join(',');
Debug.log("Updating cookie: " + cookie );
ips.utils.cookie.set('forums_flowIds', cookie, true);
if ( ! this._rootForum ) {
ips.utils.cookie.set('forums_flowIds', cookie, true);
} else {
var _json = {};
if ( !_.isUndefined( ips.utils.cookie.get( 'forums_flowIdsRoots' ) ) ) {
_json = JSON.parse( ips.utils.cookie.get( 'forums_flowIdsRoots' ) );
}
_json[ this._rootForum ] = _.uniq( _.values( this._ids ) );
ips.utils.cookie.set('forums_flowIdsRoots', JSON.stringify( _json ), true);
Debug.log("Updating cookie: " + JSON.stringify( _json ) );
}
},
/**
@@ -220,7 +267,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.forumList.js" javascript_type="controller" javascript_version="106107" javascript_position="1000100"><![CDATA[/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.forumList.js" javascript_type="controller" javascript_version="107014" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -299,7 +346,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.forumPage.js" javascript_type="controller" javascript_version="106107" javascript_position="1000100">/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.forumPage.js" javascript_type="controller" javascript_version="107014" javascript_position="1000100">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -358,7 +405,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.hovercard.js" javascript_type="controller" javascript_version="106107" javascript_position="1000100">/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.hovercard.js" javascript_type="controller" javascript_version="107014" javascript_position="1000100">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -408,7 +455,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="forums" javascript_location="admin" javascript_path="controllers/settings" javascript_name="ips.settings.archiveRules.js" javascript_type="controller" javascript_version="106107" javascript_position="1000050"><![CDATA[/**
<file javascript_app="forums" javascript_location="admin" javascript_path="controllers/settings" javascript_name="ips.settings.archiveRules.js" javascript_type="controller" javascript_version="107014" javascript_position="1000050"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -473,7 +520,7 @@
});
}(jQuery, _));
]]></file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.activity.js" javascript_type="controller" javascript_version="106107" javascript_position="1000050">/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.activity.js" javascript_type="controller" javascript_version="107014" javascript_position="1000050">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -505,7 +552,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.answers.js" javascript_type="controller" javascript_version="106107" javascript_position="1000050"><![CDATA[/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.answers.js" javascript_type="controller" javascript_version="107014" javascript_position="1000050"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -645,7 +692,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.reply.js" javascript_type="controller" javascript_version="106107" javascript_position="1000050">/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.reply.js" javascript_type="controller" javascript_version="107014" javascript_position="1000050">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -673,7 +720,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.view.js" javascript_type="controller" javascript_version="106107" javascript_position="1000050">/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.view.js" javascript_type="controller" javascript_version="107014" javascript_position="1000050">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
+27 -15
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="forums" version="106107">
<app key="forums" version="107014">
<word key="__app_forums" js="0">Forums</word>
<word key="frontnavigation_forums" js="0">Forums</word>
<word key="__indefart_post" js="0">a post in a topic</word>
@@ -32,8 +32,8 @@
<word key="menu__forums_forums_forums" js="0">Forums</word>
<word key="menu__forums_forums_savedActions" js="0">Saved Actions</word>
<word key="menu__forums_stats" js="0">Forums</word>
<word key="menu__forums_stats_topics" js="0">New Topics</word>
<word key="menu__forums_stats_posts" js="0">New Posts</word>
<word key="menu__forums_stats_topics" js="0">Topics</word>
<word key="menu__forums_stats_posts" js="0">Posts</word>
<word key="r__forums" js="0">Forums</word>
<word key="r__forums_manage" js="0">Can view forums?</word>
<word key="r__forums_add" js="0">Can create forums?</word>
@@ -50,9 +50,9 @@
<word key="r__savedActions_edit" js="0">Can edit saved actions?</word>
<word key="r__savedActions_delete" js="0">Can delete saved actions?</word>
<word key="r__topics" js="0">New Topic Statistics</word>
<word key="r__topics_manage" js="0">Can view statistics about new topics</word>
<word key="r__topics_manage" js="0">Can view statistics about topics</word>
<word key="r__posts" js="0">New Post Statistics</word>
<word key="r__posts_manage" js="0">Can view statistics about new posts</word>
<word key="r__posts_manage" js="0">Can view statistics about posts</word>
<word key="modperms__core_Content_forums_Topic" js="0">Forums</word>
<word key="can_pin_topic" js="0">Can pin topics/questions?</word>
<word key="can_unpin_topic" js="0">Can unpin topics/questions?</word>
@@ -116,6 +116,10 @@
<word key="forum_show_rules_full_desc" js="0">The rules will be shown inline in the forum header</word>
<word key="forum_rules_title" js="0">Rules Title</word>
<word key="forum_rules_text" js="0">Rules</word>
<word key="bw_fluid_view" js="0">Enable Combined Fluid View?</word>
<word key="bw_fluid_view_desc" js="0">When enabled, all topics from this forum and any child forums will be shown in a single list with a filter box to allow your members to filter out of specific child forums</word>
<word key="bw_fluid_view__warning" js="0">Combined fluid view cannot be enabled as this forum does not have any sub-forums</word>
<word key="combined_fluid_view" js="0">Combined Fluid View</word>
<word key="forum_settings" js="0">Forum Settings</word>
<word key="posting_settings" js="0">Posting Settings</word>
<word key="forum_allow_poll" js="0">Allow polls?</word>
@@ -591,22 +595,30 @@
<word key="ad_fluid_index_view_number_suffix" js="0">topic rows when in fluid view mode</word>
<word key="ad_fluid_index_view_repeat" js="0">Repeated</word>
<word key="ad_fluid_index_view_repeat_suffix" js="0">times</word>
<word key="stats_new_topics" js="0">New Topics</word>
<word key="stats_new_posts" js="0">New Posts</word>
<word key="stats_topics_tab_total" js="0">All New Topics</word>
<word key="stats_topics_tab_byforum" js="0">New Topics By Forum</word>
<word key="stats_topics_title" js="0">New topics by time period</word>
<word key="stats_topics_title_byforum" js="0">New topics by forum</word>
<word key="stats_posts_tab_total" js="0">All New Posts</word>
<word key="stats_posts_tab_byforum" js="0">New Posts By Forum</word>
<word key="stats_posts_title" js="0">New posts by time period</word>
<word key="stats_posts_title_byforum" js="0">New posts by forum</word>
<word key="stats_new_topics" js="0">Topics</word>
<word key="stats_new_posts" js="0">Posts</word>
<word key="stats_topics_tab_total" js="0">All Topics</word>
<word key="stats_topics_tab_byforum" js="0">Topics By Forum</word>
<word key="stats_topics_tab_solved" js="0">Solved Topics By Forum</word>
<word key="stats_topics_title_solved" js="0">Solved Topics By Forum</word>
<word key="stats_topics_title" js="0">Topics by time period</word>
<word key="stats_topics_title_byforum" js="0">Topics by forum</word>
<word key="stats_posts_tab_total" js="0">All Posts</word>
<word key="stats_posts_tab_byforum" js="0">Posts By Forum</word>
<word key="stats_posts_title" js="0">Posts by time period</word>
<word key="stats_posts_title_byforum" js="0">Posts by forum</word>
<word key="stats_percentagesolved" js="0">Percentage Solved</word>
<word key="stats_percentagesolved_desc" js="0">The percent of topics solved compared to the total number of topics posted</word>
<word key="stats_solved_tooltip" js="0">%s topics were marked solved out of %s total topics</word>
<word key="stats_solved_tooltip_prev" js="0">%s topics were marked solved out of %s total topics for a solution rate of %s%%</word>
<word key="stats_averagetimesolved" js="0">Average Time To Solution</word>
<word key="stats_averagetimesolved_desc" js="0">The average amount of time that passed between the time the topic was started and the time a solution was marked</word>
<word key="menu__forums_stats_questions" js="0">Questions</word>
<word key="stats_question_ratings_title" js="0">Question up/down votes over time</word>
<word key="stats_question_ratings_negative" js="0">Downvote</word>
<word key="stats_question_ratings_positive" js="0">Upvote</word>
<word key="r__questions" js="0">Questions</word>
<word key="r__questions_manage" js="0">Can view question statistics?</word>
<word key="widget_feed_container_topic" js="0">Forums</word>
<word key="block_topicFeed_title" js="0">Topics</word>
<word key="block_postFeed_title" js="0">Posts</word>
+229 -47
View File
@@ -25,18 +25,23 @@
</ol>
{{endif}}
</div>]]></template>
<template template_group="forums" template_name="forumButtons" template_data="$forum" template_location="front" template_app="forums"><![CDATA[{{if $forum->can('add')}}
<template template_group="forums" template_name="forumButtons" template_data="$forum" template_location="front" template_app="forums"><![CDATA[{{if $forum->isCombinedView()}}
<li class='ipsToolList_primaryAction'>
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{$forum->url()->setQueryString( [ 'do' => 'createMenu', 'root' => $forum->id ] )}" data-ipsDialog-title='{lang="select_forum"}' data-ipsDialog data-ipsDialog-size='narrow' title='{lang="topic_create"}' rel='nofollow noindex'>{lang="start_new_topic"}</a>
</li>
{{elseif $forum->can('add')}}
<li class='ipsToolList_primaryAction'>
{{if $forum->forums_bitoptions['bw_enable_answers']}}
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{$forum->url()->setQueryString( 'do', 'add' )}" title='{lang="ask_a_question_desc"}'>{lang="ask_a_question"}</a>
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{$forum->url()->setQueryString( 'do', 'add' )}" title='{lang="ask_a_question_desc"}' rel='nofollow noindex'>{lang="ask_a_question"}</a>
{{else}}
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{$forum->url()->setQueryString( 'do', 'add' )}" title='{lang="start_new_topic_desc"}'>{lang="start_new_topic"}</a>
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{$forum->url()->setQueryString( 'do', 'add' )}" title='{lang="start_new_topic_desc"}' rel='nofollow noindex'>{lang="start_new_topic"}</a>
{{endif}}
</li>
{{endif}}
{{if $forum->sub_can_post}}
{template="viewChangeList" group="global" app="forums" params="$forum"}
{{endif}}]]></template>
{{endif}}
]]></template>
<template template_group="forums" template_name="forumDisplay" template_data="$forum, $table" template_location="front" template_app="forums"><![CDATA[
{{if $club = $forum->club()}}
{{if settings.clubs and settings.clubs_header == 'full'}}
@@ -49,6 +54,9 @@
{{$followerCount = \IPS\forums\Topic::containerFollowerCount( $forum );}}
<div class="ipsPageHeader {{if $forum->feature_color}}ipsPageHeader--hasFeatureColor{{endif}} ipsBox ipsResponsive_pull ipsPadding ipsClearfix" {{if $forum->feature_color}}style="border-color: {$forum->feature_color}"{{endif}}>
<header>
{{if \IPS\Application::appIsEnabled('cloud') }}
<div data-controller='cloud.front.realtime.whosViewing' data-location='{expression="\IPS\cloud\Realtime::i()->getLocationHash()"}' data-visibleClass='ipsMargin_bottom:half'></div>
{{endif}}
<h1 class="ipsType_pageTitle">{$forum->_title}</h1>
{{if $forum->description}}
{template="richText" group="global" app="core" location="global" params="$forum->description, array('ipsType_normal')"}
@@ -73,7 +81,7 @@
</header>
</div>
{{if $forum->children()}}
{{if ! $forum->isCombinedView() and $forum->children()}}
<div class='ipsList_reset cForumList ipsBox ipsSpacer_bottom ipsResponsive_pull' data-controller='core.global.core.table, forums.front.forum.forumList' data-baseURL=''>
<h2 class='ipsType_sectionTitle ipsType_reset'>{{if $forum->sub_can_post}}{lang="subforums_header"}{{else}}{lang="subforums_header_category"}{{endif}}</h2>
{{if \IPS\forums\Forum::getMemberView() === 'grid'}}
@@ -103,9 +111,11 @@
{{if \IPS\Member::loggedIn()->member_id || !\IPS\Request::i()->advancedSearchForm && $forum->sub_can_post and !$forum->password}}
<div class='ipsBox ipsPadding ipsResponsive_pull ipsResponsive_showPhone ipsMargin_vertical'>
<div class='ipsGap_row:3'>
{{if \IPS\Member::loggedIn()->member_id}}
<div>
<a href="{$forum->url()->setQueryString( array( 'do' => 'markRead', 'fromForum' => 1 ) )->csrf()}" title='{lang="mark_forum_read_title"}' class='ipsButton ipsButton_verySmall ipsButton_link ipsButton_fullWidth'><i class="fa fa-check"></i> {lang="mark_forum_read"}</a>
</div>
{{endif}}
{{if !\IPS\Request::i()->advancedSearchForm && $forum->sub_can_post and !$forum->password}}
<div>
{template="follow" app="core" group="global" params="'forums','forum', $forum->_id, $followerCount"}
@@ -257,11 +267,11 @@
<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)}">{lang="{$table->langPrefix}sort_{$k}"}</a></li>
<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 ) )}' data-ipsDialog data-ipsDialog-title='{lang="custom_sort"}'>{lang="custom"}</a>
<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>
@@ -272,11 +282,11 @@
<a href="#elFilterByMenu_menu" id="elFilterByMenu_{$table->uniqueId}" data-role='tableFilterMenu' data-ipsMenu data-ipsMenu-activeClass="ipsButtonRow_active" data-ipsMenu-selectable="radio">{lang="filter_by"} <i class="fa fa-caret-down"></i></a>
<ul class='ipsMenu ipsMenu_auto ipsMenu_withStem ipsMenu_selectable ipsHide' data-role="tableFilterMenu" 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)}'>{lang="{$table->langPrefix}all"}</a>
<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)}'>{lang="{$table->langPrefix}{$k}"}</a>
<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>
@@ -309,7 +319,7 @@
<p class='ipsType_reset ipsType_large ipsMargin_bottom'>{{if $table->container()->forums_bitoptions['bw_enable_answers']}}{lang="no_questions_in_forum"}{{else}}{lang="no_topics_in_forum"}{{endif}}</p>
{{if $table->container()->can('add')}}
<a href='{$table->container()->url()->setQueryString( 'do', 'add' )}' class='ipsButton ipsButton_primary ipsButton_medium'>
<a href='{$table->container()->url()->setQueryString( 'do', 'add' )}' rel="nofollow" class='ipsButton ipsButton_primary ipsButton_medium'>
{{if $table->container()->forums_bitoptions['bw_enable_answers']}}
{lang="submit_first_question"}
{{else}}
@@ -754,6 +764,22 @@
{{endif}}
{{endforeach}}
</div>
{{if \IPS\Settings::i()->core_datalayer_enabled}}
<script>
if ( IpsDataLayerConfig && !window.IpsDataLayerConfig && IpsDataLayerConfig._events.content_view.enabled ) {
$('body').trigger( 'ipsDataLayer', {
_key: 'content_view',
_properties: {
{{foreach $topic->getDataLayerProperties() as $key => $value}}
'{$key}' : {{if \is_numeric($value)}} {$value} {{else}} "{$value}" {{endif}},
{{endforeach}}
page_number : null,
view_location: 'hovercard',
}
} );
}
</script>
{{endif}}
</div>]]></template>
<template template_group="forums" template_name="topicRow" template_data="$table, $headers, $rows" template_location="front" template_app="forums"><![CDATA[{{$rowIds = array();}}
{{foreach $rows as $row}}
@@ -804,7 +830,7 @@
</li>
{{endif}}
{{else}}
<li class="ipsDataItem ipsDataItem_responsivePhoto {{if $row->groupsPosted}}ipsDataItem_highlighted{{endif}} {{if $row->unread()}}ipsDataItem_unread{{endif}} {{if method_exists( $row, 'tableClass' ) && $row->tableClass()}}ipsDataItem_{$row->tableClass()}{{endif}} {{if $row->hidden()}}ipsModerated{{endif}}" data-rowID='{$row->$idField}'>
<li class="ipsDataItem ipsDataItem_responsivePhoto {{if $row->groupsPosted}}ipsDataItem_highlighted{{endif}} {{if $row->unread()}}ipsDataItem_unread{{endif}} {{if method_exists( $row, 'tableClass' ) && $row->tableClass()}}ipsDataItem_{$row->tableClass()}{{endif}} {{if $row->hidden()}}ipsModerated{{endif}}" data-rowID='{$row->$idField}' data-location='{$row->locationHash}' data-controller='forums.front.forum.topicRow'>
{{if member.member_id}}
<div class='ipsDataItem_icon ipsPos_top'>
{{if $row->unread()}}
@@ -876,6 +902,7 @@
{$row->commentPagination( array(), 'miniPagination' )|raw}
{{endif}}
</h4>
<span data-role="activeUsers"></span>
<div class='ipsDataItem_meta ipsType_reset ipsType_light ipsType_blendLinks'>
<span>
{lang="byline_itemprop" htmlsprintf="$row->author()->link( NULL, NULL, $row->isAnonymous() )"}
@@ -896,7 +923,7 @@
</li>
{{endif}}
{{foreach $row->stats(FALSE) as $k => $v}}
<li {{if $k == 'num_views'}}class='ipsType_light'{{elseif \in_array( $k, $row->hotStats )}}class="ipsDataItem_stats_hot" data-text='{lang="hot_item"}' data-ipsTooltip title='{lang="hot_item_desc"}'{{endif}}>
<li {{if $k == 'num_views'}}class='ipsType_light'{{elseif \in_array( $k, $row->hotStats )}}class="ipsDataItem_stats_hot" data-text='{lang="hot_item"}' data-ipsTooltip title='{lang="hot_item_desc"}'{{endif}} data-statType='{$k}'>
<span class='ipsDataItem_stats_number'>{number="$v" format="short"}</span>
<span class='ipsDataItem_stats_type'>{lang="{$k}" pluralize="$v" format="short"}</span>
{{if ( $k == 'forums_comments' OR $k == 'answers_no_number' ) && \IPS\forums\Topic::modPermission( 'unhide', NULL, $row->container() ) AND $unapprovedComments = $row->mapped('unapproved_comments')}}
@@ -1079,14 +1106,16 @@
<div class='ipsTopicSnippet__stats-align ipsFlex-flex:00 ipsFlex ipsFlex-ai:center'>
<ul class='ipsTopicSnippet__stats ipsFlex ipsFlex-ai:center ipsList_reset'>
<ul class='ipsTopicSnippet__stats ipsFlex ipsFlex-ai:center ipsFlex-fw:wrap ipsList_reset'>
{{if $row->groupsPosted}}
{template="groupPostedBadges" group="global" app="core" location="front" params="$row->groupsPosted, 'topic_posted_in_groups'"}
<li>
{template="groupPostedBadges" group="global" app="core" location="front" params="$row->groupsPosted, 'topic_posted_in_groups'"}
</li>
{{endif}}
{{if $row->followerCount}}
<li class='ipsType_light'>
<span class='ipsDataItem_stats_type'>
<a href='{url="app=core&module=system&controller=notifications&do=followers&follow_app=forums&follow_area=topic&follow_id={$row->tid}"}' title='{lang="followers_tooltip"}' class='ipsType_blendLinks ipsType_noUnderline' data-ipsTooltip data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="who_follows_this"}'>{lang="topic_follower_count" pluralize="$row->followerCount"}</a>
<a href='{url="app=core&module=system&controller=notifications&do=followers&follow_app=forums&follow_area=topic&follow_id={$row->tid}"}' rel="nofollow" title='{lang="followers_tooltip"}' class='ipsType_blendLinks ipsType_noUnderline' data-ipsTooltip data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="who_follows_this"}'>{lang="topic_follower_count" pluralize="$row->followerCount"}</a>
</span>
</li>
{{endif}}
@@ -1240,8 +1269,10 @@
</a>
</h4>
<ul class='ipsList_inline ipsType_light'>
{{$count = \IPS\forums\Topic::contentCount( $row, TRUE );}}
<li>{lang="posts_number" pluralize="$count"}</li>
{{if $row->memberCanAccessOthersTopics( \IPS\Member::loggedIn() ) }}
{{$count = \IPS\forums\Topic::contentCount( $row, TRUE );}}
<li>{lang="posts_number" pluralize="$count"}</li>
{{endif}}
</ul>
</div>
@@ -1608,7 +1639,7 @@
<div>
<ul class='ipsList_reset'>
<li class='ipsDataItem_lastPoster__title'><a href="{{if member.member_id}}{$lastPost['topic_url']->setQueryString( 'do', 'getNewComment' )}{{else}}{$lastPost['topic_url']}{{endif}}" class='ipsType_break' title='{$lastPost['topic_title']}'>{$lastPost['topic_title']}</a></li>
<li class='ipsType_light ipsTruncate ipsTruncate_line'>{lang="byline_nodate" htmlsprintf="$lastPost['author']->link()"}, <a href='{$lastPost['topic_url']->setQueryString( 'do', 'getLastComment' )}' title='{lang="get_last_post"}' class='ipsType_blendLinks'>{datetime="$lastPost['date']"}</a></li>
<li class='ipsType_light ipsTruncate ipsTruncate_line'>{lang="byline_nodate" htmlsprintf="$lastPost['author']->link()"}, <a href='{{if member.member_id}}{$lastPost['topic_url']->setQueryString( 'do', 'getLastComment' )}{{else}}{$lastPost['topic_url']}{{endif}}' title='{lang="get_last_post"}' class='ipsType_blendLinks'>{datetime="$lastPost['date']"}</a></li>
</ul>
</div>
</div>
@@ -1723,7 +1754,7 @@
{lang="byline_nodate" htmlsprintf="$lastPost['author']->link()"},
{{endif}}
{{if $lastPost['topic_title']}}
<a href='{$lastPost['topic_url']->setQueryString( 'do', 'getLastComment' )}' title='{lang="get_last_post"}'>{datetime="$lastPost['date']"}</a>
<a href='{{if member.member_id}}{$lastPost['topic_url']->setQueryString( 'do', 'getLastComment' )}{{else}}{$lastPost['topic_url']}{{endif}}' title='{lang="get_last_post"}'>{datetime="$lastPost['date']"}</a>
{{else}}
{datetime="$lastPost['date']"}
{{endif}}
@@ -1819,13 +1850,13 @@
<template template_group="index" template_name="indexButtons" template_data="$showViewButtons=TRUE, $showFilterButton=FALSE" template_location="front" template_app="forums"><![CDATA[
{{if $showFilterButton}}
<li class='ipsToolList_primaryAction ipsResponsive_hideDesktop ipsResponsive_block'>
<a class="ipsButton ipsButton_medium ipsButton_link ipsButton_fullWidth" href="#" data-ipsDialog data-ipsDialog-title='{lang="forums_simple_dialog_title"}' data-ipsDialog-content='#elFluidFormFilters'>
<a class="ipsButton ipsButton_medium ipsButton_link ipsButton_fullWidth" href="#" rel="nofollow" data-ipsDialog data-ipsDialog-title='{lang="forums_simple_dialog_title"}' data-ipsDialog-content='#elFluidFormFilters'>
<span data-role='fluidForumMobileDesc'>{lang="forums_simple_filter_by"}</span> <i class='fa fa-angle-down'></i></a>
</li>
{{endif}}
{{if \IPS\forums\Forum::canOnAny('add')}}
<li class='ipsToolList_primaryAction ipsResponsive_hideTablet'>
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=forums&module=forums&controller=forums&do=add"}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="select_forum"}'>{lang="start_new_topic"}</a>
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=forums&module=forums&controller=forums&do=add"}" rel="nofollow" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="select_forum"}'>{lang="start_new_topic"}</a>
</li>
{{endif}}
@@ -1861,17 +1892,43 @@
</ul>
{{endif}}
<ul class="ipsButtonRow ipsPos_right ipsClearfix">
{{if settings.forums_view_list_choose and member.member_id}}
{{$chosen = \IPS\forums\Forum::getMemberListView();}}
<li>
<a href="#elViewByMenu" id="elViewByMenu" data-role="viewButton" data-ipsMenu data-ipsMenu-activeClass="ipsButtonRow_active" data-ipsMenu-selectable="radio">{lang="view"} <i class="fa fa-caret-down"></i></a>
<ul class="ipsMenu ipsMenu_auto ipsMenu_withStem ipsMenu_selectable ipsHide" id="elViewByMenu_menu">
<li class="ipsMenu_item {{if $chosen === 'list'}}ipsMenu_itemChecked{{endif}}">
{{if ! empty(request.id)}}
<a href="{url="app=forums&module=forums&controller=forums&do=setMethod&method=list" csrf="true"}&id={request="id"}">
{{else}}
<a href="{url="app=forums&module=forums&controller=forums&do=setMethod&method=list" csrf="true"}">
{{endif}}
{lang="forums_topic_list_list"}
</a>
</li>
<li class="ipsMenu_item {{if $chosen === 'snippet'}}ipsMenu_itemChecked{{endif}}">
{{if ! empty(request.id)}}
<a href="{url="app=forums&module=forums&controller=forums&do=setMethod&method=snippet" csrf="true"}&id={request="id"}">
{{else}}
<a href="{url="app=forums&module=forums&controller=forums&do=setMethod&method=snippet" csrf="true"}">
{{endif}}
{lang="forums_topic_list_snippet"}
</a>
</li>
</ul>
</li>
{{endif}}
{{if isset( $table->sortOptions ) and !empty( $table->sortOptions ) }}
<li>
<a href="#elSortByMenu_menu" id="elSortByMenu_{$table->uniqueId}" data-role='sortButton' data-ipsMenu data-ipsMenu-activeClass="ipsButtonRow_active" data-ipsMenu-selectable="radio">{lang="sort_by"} <i class="fa 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 )}">{lang="{$table->langPrefix}sort_{$k}"}</a></li>
<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 ) )}' data-ipsDialog data-ipsDialog-title='{lang="custom_sort"}'>{lang="custom"}</a>
<a href='{$table->baseUrl->setQueryString( array( 'advancedSearchForm' => '1', 'filter' => $table->filter, 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) )}' data-ipsDialog data-ipsDialog-title='{lang="custom_sort"}' rel="nofollow">{lang="custom"}</a>
</li>
{{endif}}
</ul>
@@ -1882,18 +1939,18 @@
<a href="#elFilterByMenu_menu" id="elFilterByMenu_{$table->uniqueId}" data-role='tableFilterMenu' data-ipsMenu data-ipsMenu-activeClass="ipsButtonRow_active" data-ipsMenu-selectable="radio">{lang="filter_by"} <i class="fa fa-caret-down"></i></a>
<ul class='ipsMenu ipsMenu_auto ipsMenu_withStem ipsMenu_selectable ipsHide' data-role="tableFilterMenu" 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 )}'>{lang="{$table->langPrefix}all"}</a>
<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 )}'>{lang="{$table->langPrefix}{$k}"}</a>
<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}}
</ul>
<div data-role="tablePagination" {{if $table->pages <= 1}}class='ipsHide'{{endif}}>
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
</div>
@@ -2308,9 +2365,11 @@
<div class='ipsTopicSnippet__stats-align ipsFlex-flex:00 ipsFlex ipsFlex-ai:center'>
<ul class='ipsTopicSnippet__stats ipsFlex ipsFlex-ai:center ipsList_reset'>
<ul class='ipsTopicSnippet__stats ipsFlex ipsFlex-ai:center ipsFlex-fw:wrap ipsList_reset'>
{{if $row->groupsPosted}}
{template="groupPostedBadges" group="global" app="core" location="front" params="$row->groupsPosted, 'topic_posted_in_groups'"}
<li>
{template="groupPostedBadges" group="global" app="core" location="front" params="$row->groupsPosted, 'topic_posted_in_groups'"}
</li>
{{endif}}
{{if $row->followerCount}}
<li class='ipsType_light'>
@@ -2403,7 +2462,7 @@
{{if \IPS\forums\Forum::canOnAny( 'add' )}}
<ul class='ipsToolList ipsToolList_horizontal ipsClearfix ipsPos_right sm:ipsMargin_bottom:none'>
<li class='ipsToolList_primaryAction ipsResponsive_hidePhone'>
<a class="ipsButton ipsButton_medium ipsButton_important" href="{url="app=forums&module=forums&controller=forums&do=add" seoTemplate="topic_non_forum_add_button"}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="select_forum"}'>{lang="start_new_topic"}</a>
<a class="ipsButton ipsButton_medium ipsButton_important" href="{url="app=forums&module=forums&controller=forums&do=add" seoTemplate="topic_non_forum_add_button"}" rel="nofollow" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="select_forum"}'>{lang="start_new_topic"}</a>
</li>
{template="viewChange" group="global" app="forums" params=""}
</ul>
@@ -2418,6 +2477,66 @@
</ul>
{$table|raw}]]></template>
<template template_group="index" template_name="simplifiedViewForumSidebar" template_data="$forum, $depth=0" template_location="front" template_app="forums"><![CDATA[<div data-controller="forums.front.forum.flow" data-rootForum="{$forum->_id}" class='ipsBox cForumMiniList_wrapper' id='elFluidFormFilters'>
<div class='ipsSideMenu'>
<ul class='ipsSideMenu_list cForumMiniList cForumMiniList_multiRoot'>
<li class="cForumMiniList_category" data-category>
{{if $forum->sub_can_post}}
{{$lastPost = $forum->lastPost();}}
{{$unread = \IPS\forums\Topic::containerUnread( $forum );}}
{{$children = $forum->children();}}
<a href="{$forum->url()}" data-parent-id="{$forum->_id}" data-node-id="{$forum->_id}" data-has-children="1" class='ipsSideMenu_item'>
<span class='cForumMiniList_blob' {{if $forum->feature_color}}style="background-color: {$forum->feature_color}; color: {$forum->_featureTextColor};"{{endif}} {{if $lastPost AND $lastPost['date']}}title="{lang="forum_simple_view_last_post"} {datetime="$lastPost['date']"}" data-ipsTooltip data-ipsTooltip-safe{{endif}}>
<span></span>
<i class='fa fa-check'></i>
</span>
<span class='cForumMiniList_title ipsTruncate ipsTruncate_line'>
{{if $unread}}<strong>{{endif}}{$forum->_title}{{if $unread}}</strong>{{endif}}
</span>
<span class='ipsType_small ipsType_light cForumMiniList_count'>{number="\IPS\forums\Topic::contentCountItemsOnly( $forum )" format="short"}</span>
</a>
{{else}}
<a href="{$forum->url()}" data-parent-id="{$forum->_id}" data-node-id="{$forum->_id}" class='ipsSideMenu_item ipsTruncate ipsTruncate_line'>{$forum->_title}</a>
{{endif}}
{{if $forum->hasChildren()}}
<ul class='ipsSideMenu_list cForumMiniList'>
{template="simplifiedViewForumSidebar_children" app="forums" location="front" group="index" params="$forum, $depth+1"}
</ul>
{{endif}}
</li>
</ul>
</div>
<div class='ipsResponsive_hideDesktop ipsResponsive_block'>
<hr class='ipsHr'>
<a href='#' class='ipsButton ipsButton_fullWidth ipsButton_primary ipsButton_medium' data-action='dialogClose'>{lang="done_forum_filtering"}</a>
</div>
</div>]]></template>
<template template_group="index" template_name="simplifiedViewForumSidebar_children" template_data="$parent" template_location="front" template_app="forums"><![CDATA[{{if $parent->hasChildren() }}
{{foreach $parent->children() as $idx => $forum}}
{{$lastPost = $forum->lastPost();}}
{{$unread = \IPS\forums\Topic::containerUnread( $forum );}}
{{$children = $forum->children();}}
{{if ! $forum->redirect_on and ( $forum->can('read') or !$forum->sub_can_post ) }}
<li class="{{if $children}}cForumMiniList_category{{endif}}">
<a href="{$forum->url()}" data-parent-id="{$parent->_id}" data-node-id="{$forum->_id}" data-has-children="{{if $children}}1{{else}}0{{endif}}" class='ipsSideMenu_item {{if !$unread}}cForumMiniList_unread{{endif}}'>
<span class='cForumMiniList_blob' {{if $forum->feature_color}}style="background-color: {$forum->feature_color}; color: {$forum->_featureTextColor};"{{endif}} {{if $lastPost AND $lastPost['date']}}title="{lang="forum_simple_view_last_post"} {datetime="$lastPost['date']"}" data-ipsTooltip data-ipsTooltip-safe{{endif}}>
<span></span>
<i class='fa fa-check'></i>
</span>
<span class='cForumMiniList_title ipsTruncate ipsTruncate_line'>
{{if $unread}}<strong>{{endif}}{$forum->_title}{{if $unread}}</strong>{{endif}}
</span>
<span class='ipsType_small ipsType_light cForumMiniList_count'>{number="\IPS\forums\Topic::contentCountItemsOnly( $forum )" format="short"}</span>
</a>
{{if $children}}
<ul class='ipsSideMenu_list cForumMiniList'>
{template="simplifiedViewForumSidebar_children" app="forums" location="front" group="index" params="$forum, 1"}
</ul>
{{endif}}
</li>
{{endif}}
{{endforeach}}
{{endif}}]]></template>
<template template_group="index" template_name="simplifiedViewSidebar" template_data="$forumIds, $map" template_location="front" template_app="forums"><![CDATA[<div data-controller="forums.front.forum.flow" class='ipsBox cForumMiniList_wrapper' id='elFluidFormFilters'>
<div class='ipsSideMenu'>
<ul class='ipsSideMenu_list cForumMiniList {{if \count( \IPS\forums\Forum::roots() ) === 1}}cForumMiniList_singleRoot{{else}}cForumMiniList_multiRoot{{endif}}'>
@@ -2572,6 +2691,41 @@
</div>
{{endif}}
</div>]]></template>
<template template_group="stats" template_name="statsTypeWrapper" template_data="$form, $solvedCount, $recommendedCount, $startTime, $endTime" template_location="admin" template_app="forums"><![CDATA[<div class=''>
<div class='ipsBox'>
<h1 class='ipsBox_titleBar'>{lang="stats_posts_by_type"}</h1>
<div>
{$form|raw}
</div>
</div>
</div>
<div class='ipsSpacer_top ipsSpacer_double'>
<table class="ipsTable ipsTable_responsive ipsTable_zebra " data-role="table">
<thead>
<tr class="ipsAreaBackground">
<th>{lang="stats_posts_type_type"}</th>
<th>{lang="stats_posts_type_count"}</th>
</tr>
</thead>
<tbody>
<tr class="ipsClearfix">
<td class="">
{lang="stats_posts_type_solved"}
</td>
<td><a href='{url="app=forums&module=stats&controller=posts&do=showSolvedPosts&startTime={$startTime}&endTime={$endTime}"}' data-ipsDialog data-ipsDialog-title='{lang="stats_posts_type_solved"}' title="{lang="stats_posts_show_posts"}" data-ipsTooltip>{$solvedCount}</a></td>
</tr>
<tr>
<td class=" ipsTable_wrap ipsTable_primary ">
{lang="stats_posts_type_recommended"}
</td>
<td><a href='{url="app=forums&module=stats&controller=posts&do=showRecommendedPosts&startTime={$startTime}&endTime={$endTime}"}' data-ipsDialog data-ipsDialog-title='{lang="stats_posts_type_recommended"}' title="{lang="stats_posts_show_posts"}" data-ipsTooltip>{$recommendedCount}</a></td>
</tr>
</tbody>
</table>
</div>
]]></template>
<template template_group="stats" template_name="timeToSolved" template_data="$value, $previousValue=NULL, $nodes=array()" template_location="admin" template_app="forums"><![CDATA[ <div>
<span class='cStat__number cStat__number--medium' data-number='{$value}'>{expression="\IPS\DateTime::roundedDiffFromSeconds( $value )"}</span>
{{if isset( $previousValue )}}
@@ -2832,7 +2986,7 @@
<div class='cTopicOverview__section--topPost ipsMargin_bottom'>
<h4 class='ipsType_reset cTopicOverview__sectionTitle ipsType_withHr ipsType_dark ipsType_uppercase ipsMargin_top:half'>{lang="topicactivity_popularposts"}</h4>
{{foreach $reacted as $data}}
<a href="{$data['comment']->url()}" class="ipsType_noLinkStyling ipsBlock">
<a href="{$data['comment']->url()}" rel="nofollow" class="ipsType_noLinkStyling ipsBlock">
<div class='ipsPhotoPanel ipsPhotoPanel_tiny ipsClearfix ipsMargin_top'>
<span class='ipsUserPhoto ipsUserPhoto_tiny'>
<img src='{$data['comment']->author()->photo}' alt='{$data['comment']->author()->name}'>
@@ -2857,7 +3011,7 @@
{{foreach $images as $row}}
{{$image = \IPS\File::get( 'core_Attachment', ( $row['attach_thumb_location'] ) ? $row['attach_thumb_location'] : $row['attach_location'] )->url;}}
<li class='cTopicOverview__image'>
<a href="{$row['commentUrl']}" class='ipsThumb ipsThumb_bg' data-background-src="{$image}">
<a href="{$row['commentUrl']}" rel="nofollow" class='ipsThumb ipsThumb_bg' data-background-src="{$image}">
<img src="{expression="\IPS\Text\Parser::blankImage()"}" data-src="{$image}" class="ipsImage">
</a>
</li>
@@ -2870,7 +3024,12 @@
{{if $location !== 'sidebar'}}
<a href='#' data-action='toggleOverview' class='cTopicOverview__toggle cTopicOverview__toggle--afterStats ipsType_large ipsType_light ipsPad ipsFlex ipsFlex-ai:center ipsFlex-jc:center'><i class='fa fa-chevron-down'></i></a>
{{endif}}
{{if $location == 'sidebar'}}
</div>
{{else}}
</div>
{{endif}}
]]></template>
<template template_group="topics" template_name="post" template_data="$item, $comment, $editorName, $app, $type, $class=''" template_location="front" template_app="forums"><![CDATA[{{$idField = $comment::$databaseColumnId;}}
<div id='comment-{$comment->$idField}_wrap' data-controller='core.front.core.comment' 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' => $comment::$application, 'contenttype' => $type, 'contentid' => $item->tid, 'contentclass' => $class, 'contentcommentid' => $comment->$idField) )"}' class='ipsComment_content ipsType_medium'>
@@ -2906,7 +3065,7 @@
{{if $comment->mapped('first') }}
<li class='ipsMenu_item'><a href='{$comment->item()->url()}' title='{lang="share_this_post"}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-content='#elShareComment_{$comment->$idField}_menu' data-ipsDialog-title="{lang="share_this_post"}" id='elSharePost_{$comment->$idField}' data-role='shareComment'>{lang="share"}</a></li>
{{else}}
<li class='ipsMenu_item'><a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->$idField ) )}' title='{lang="share_this_post"}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-content='#elShareComment_{$comment->$idField}_menu' data-ipsDialog-title="{lang="share_this_post"}" id='elSharePost_{$comment->$idField}' data-role='shareComment'>{lang="share"}</a></li>
<li class='ipsMenu_item'><a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->$idField ) )}' rel="nofollow" title='{lang="share_this_post"}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-content='#elShareComment_{$comment->$idField}_menu' data-ipsDialog-title="{lang="share_this_post"}" id='elSharePost_{$comment->$idField}' data-role='shareComment'>{lang="share"}</a></li>
{{endif}}
{{if $comment->canRecognize() === TRUE}}
<li class='ipsMenu_item'><a href='{$comment->author()->url()->setQueryString( array( 'do' => 'recognize', 'content_class' => \get_class( $comment ), 'content_id' => $comment->$idField ) )}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="recognize_submit_success"}' data-ipsDialog-title="{lang="recognize_author" sprintf="$comment->author()->name"}">{lang="recognize_author" sprintf="$comment->author()->name"}</a></li>
@@ -2963,7 +3122,7 @@
</div>
<div class='ipsType_reset ipsResponsive_hidePhone'>
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->$idField ) )}' class='ipsType_blendLinks'>{$comment->dateLine()|raw}</a>
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->$idField ) )}' rel="nofollow" class='ipsType_blendLinks'>{$comment->dateLine()|raw}</a>
{{if $comment->ip_address and \IPS\Member::loggedIn()->modPermission('can_use_ip_tools') and \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'modcp' ) )}}
&middot; <a class='ipsType_blendLinks ipsType_light ipsType_noUnderline ipsType_noBreak' href="{url="app=core&module=modcp&controller=modcp&tab=ip_tools&ip=$comment->ip_address" seoTemplate="modcp_ip_tools"}" data-ipsMenu data-ipsMenu-menuID='{$comment->$idField}_ip_menu'>{lang="ip_short"} <i class='fa fa-angle-down'></i></a>
{{endif}}
@@ -3127,7 +3286,7 @@
<span class="cAuthorPane_badge cAuthorPane_badge--new" data-ipsTooltip title="{lang="member_is_new_badge" sprintf="$comment->author()->name"}"></span>
{{endif}}
{{if !$comment->isAnonymous() and $comment->author()->canHaveAchievements() and \IPS\core\Achievements\Rank::show() and $rank = $comment->author()->rank()}}
<a href="{url="app=core&module=members&controller=profile&id={$comment->author()->member_id}&do=badges" seoTemplate="profile_badges" seoTitle="$comment->author()->members_seo_name"}">
<a href="{url="app=core&module=members&controller=profile&id={$comment->author()->member_id}&do=badges" seoTemplate="profile_badges" seoTitle="$comment->author()->members_seo_name"}" rel="nofollow">
{$rank->html( 'cAuthorPane_badge cAuthorPane_badge--rank ipsOutline ipsOutline:2px' )|raw}
</a>
{{endif}}
@@ -3138,7 +3297,7 @@
{template="userLink" group="global" app="core" params="$comment->author(), $comment->warningRef(), TRUE, $comment->isAnonymous()"}
</h3>
<div class='ipsType_light ipsType_reset'>
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->$idField ) )}' class='ipsType_blendLinks'>{$comment->dateLine()|raw}</a>
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->$idField ) )}' rel="nofollow" class='ipsType_blendLinks'>{$comment->dateLine()|raw}</a>
{{if $comment->ip_address and \IPS\Member::loggedIn()->modPermission('can_use_ip_tools') and \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'modcp' ) )}}
&middot; <a class='ipsType_blendLinks ipsType_light ipsType_noUnderline ipsType_noBreak' href="{url="app=core&module=modcp&controller=modcp&tab=ip_tools&ip=$comment->ip_address" seoTemplate="modcp_ip_tools"}" data-ipsMenu data-ipsMenu-menuID='{$comment->$idField}_ip_menu'>{lang="ip_short"} <i class='fa fa-angle-down'></i></a>
{{endif}}
@@ -3148,7 +3307,7 @@
<aside class='ipsComment_author cAuthorPane ipsColumn ipsColumn_medium ipsResponsive_hidePhone'>
<h3 class='ipsType_sectionHead cAuthorPane_author ipsType_blendLinks ipsType_break'><strong>{template="userLink" group="global" app="core" params="$comment->author(), $comment->warningRef(), FALSE, $comment->isAnonymous()"}</strong>
{{if $comment->isAnonymous() and \IPS\Member::loggedIn()->modPermission('can_view_anonymous_posters')}}
<a data-ipsHover data-ipsHover-width="370" data-ipsHover-onClick href="{{if $comment->isFirst()}}{$comment->item()->url( 'reveal' )->csrf()}{{else}}{$comment->url( 'reveal' )->csrf()}{{endif}}"><span class="cAuthorPane_badge cAuthorPane_badge--anon" data-ipsTooltip title="{lang="post_anonymously_reveal"}"></span></a>
<a data-ipsHover data-ipsHover-width="370" data-ipsHover-onClick href="{{if $comment->isFirst()}}{$comment->item()->url( 'reveal' )->csrf()}{{else}}{$comment->url( 'reveal' )->csrf()}{{endif}}" rel="nofollow"><span class="cAuthorPane_badge cAuthorPane_badge--anon" data-ipsTooltip title="{lang="post_anonymously_reveal"}"></span></a>
{{endif}}
</h3>
<ul class='cAuthorPane_info ipsList_reset'>
@@ -3175,15 +3334,23 @@
<li data-role='stats' class='ipsMargin_top'>
<ul class="ipsList_reset ipsType_light ipsFlex ipsFlex-ai:center ipsFlex-jc:center ipsGap_row:2 cAuthorPane_stats">
<li>
<a href="{url="app=core&module=members&controller=profile&id={$comment->author()->member_id}&do=content" seoTemplate="profile_content" seoTitle="$comment->author()->members_seo_name"}" title="{lang="member_post_count" pluralize="$comment->author()->member_posts"}" data-ipsTooltip class="ipsType_blendLinks">
{{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members', 'front' ) ) }}
<a href="{url="app=core&module=members&controller=profile&id={$comment->author()->member_id}&do=content" seoTemplate="profile_content" seoTitle="$comment->author()->members_seo_name"}" rel="nofollow" title="{lang="member_post_count" pluralize="$comment->author()->member_posts"}" data-ipsTooltip class="ipsType_blendLinks">
{{endif}}
<i class="fa fa-comment"></i> {number="$comment->author()->member_posts" format="short"}
</a>
{{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members', 'front' ) ) }}
</a>
{{endif}}
</li>
{{if isset( $comment->author_solved_count )}}
<li>
<a href='{url="app=core&module=members&controller=profile&id={$comment->author()->member_id}&do=solutions" seoTemplate="profile_solutions" seoTitle="$comment->author()->members_seo_name"}' title="{lang="solved_badge_tooltip" pluralize="$comment->author_solved_count"}" data-ipsTooltip class='ipsType_blendLinks'>
<i class='fa fa-check-circle'></i> {number="$comment->author_solved_count"}
</a>
{{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members', 'front' ) ) }}
<a href='{url="app=core&module=members&controller=profile&id={$comment->author()->member_id}&do=solutions" seoTemplate="profile_solutions" seoTitle="$comment->author()->members_seo_name"}' rel="nofollow" title="{lang="solved_badge_tooltip" pluralize="$comment->author_solved_count"}" data-ipsTooltip class='ipsType_blendLinks'>
{{endif}}
<i class='fa fa-check-circle'></i> {number="$comment->author_solved_count"}
{{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members', 'front' ) ) }}
</a>
{{endif}}
</li>
{{endif}}
</ul>
@@ -3259,6 +3426,9 @@
{{endif}}
<div class='ipsPageHeader ipsResponsive_pull ipsBox ipsPadding sm:ipsPadding:half ipsMargin_bottom'>
{{if \IPS\Application::appIsEnabled('cloud') }}
<div data-controller='cloud.front.realtime.whosViewing' data-location='{expression="\IPS\cloud\Realtime::i()->getLocationHash()"}' data-visibleClass='ipsMargin_bottom:half'></div>
{{endif}}
{{if $topic->isQuestion()}}
<div class='ipsFlex ipsFlex-ai:stretch ipsFlex-jc:center'>
<ul class='ipsList_reset cRatingColumn cRatingColumn_question ipsType_center ipsMargin_right ipsFlex-flex:00 ipsBorder_right'>
@@ -3378,7 +3548,7 @@
{{if $solvedComment = $topic->getSolution() AND ( $solvedComment->hidden() == 0 OR ( \in_array( $solvedComment->hidden(), array( 1, -1 ) ) AND $solvedComment->canUnhide() ) )}}
<div class='ipsBox ipsBox--child ipsComment ipsComment_solved ipsMargin:none ipsMargin_top ipsPadding:half'>
<div class='ipsFlex ipsFlex-ai:center sm:ipsFlex-fd:column ipsGap:3'>
<a href="{$topic->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $topic->topic_answered_pid ))}" class='ipsButton ipsButton_verySmall ipsButton_positive sm:ipsFlex-as:stretch'>{lang="solved_and_go"}</a>
<a href="{$topic->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $topic->topic_answered_pid ))}" rel="nofollow" class='ipsButton ipsButton_verySmall ipsButton_positive sm:ipsFlex-as:stretch'>{lang="solved_and_go"}</a>
<span class='ipsFlex-flex:10 ipsType_positive ipsType_normal'>
{lang="solved_byline" htmlsprintf="$solvedComment->author()->name"}, {datetime="$solvedComment->mapped('date')"}
</span>
@@ -3412,9 +3582,9 @@
<li class='ipsToolList_primaryAction'>
<span data-controller='forums.front.topic.reply'>
{{if $topic->container()->forums_bitoptions['bw_enable_answers']}}
<a href='#replyForm' class='ipsButton {{if $topic->locked()}}ipsButton_link ipsButton_link--negative{{else}}ipsButton_important{{endif}} ipsButton_medium ipsButton_fullWidth' data-action='replyToTopic'>{lang="answer_this_question"}{{if $topic->locked()}} ({lang="locked"}){{endif}}</a>
<a href='#replyForm' rel="nofollow" class='ipsButton {{if $topic->locked()}}ipsButton_link ipsButton_link--negative{{else}}ipsButton_important{{endif}} ipsButton_medium ipsButton_fullWidth' data-action='replyToTopic'>{lang="answer_this_question"}{{if $topic->locked()}} ({lang="locked"}){{endif}}</a>
{{else}}
<a href='#replyForm' class='ipsButton {{if $topic->locked()}}ipsButton_link ipsButton_link--negative{{else}}ipsButton_important{{endif}} ipsButton_medium ipsButton_fullWidth' data-action='replyToTopic'>{lang="reply_to_this_topic"}{{if $topic->locked()}} ({lang="locked"}){{endif}}</a>
<a href='#replyForm' rel="nofollow" class='ipsButton {{if $topic->locked()}}ipsButton_link ipsButton_link--negative{{else}}ipsButton_important{{endif}} ipsButton_medium ipsButton_fullWidth' data-action='replyToTopic'>{lang="reply_to_this_topic"}{{if $topic->locked()}} ({lang="locked"}){{endif}}</a>
{{endif}}
</span>
</li>
@@ -3422,9 +3592,9 @@
{{if $topic->container()->can('add')}}
<li class='ipsResponsive_hidePhone'>
{{if $topic->container()->forums_bitoptions['bw_enable_answers']}}
<a href="{$topic->container()->url()->setQueryString( 'do', 'add' )}" class='ipsButton ipsButton_link ipsButton_medium ipsButton_fullWidth' title='{lang="ask_a_question_desc"}'>{lang="ask_a_question"}</a>
<a href="{$topic->container()->url()->setQueryString( 'do', 'add' )}" rel="nofollow" class='ipsButton ipsButton_link ipsButton_medium ipsButton_fullWidth' title='{lang="ask_a_question_desc"}'>{lang="ask_a_question"}</a>
{{else}}
<a href="{$topic->container()->url()->setQueryString( 'do', 'add' )}" class='ipsButton ipsButton_link ipsButton_medium ipsButton_fullWidth' title='{lang="start_new_topic_desc"}'>{lang="start_new_topic"}</a>
<a href="{$topic->container()->url()->setQueryString( 'do', 'add' )}" rel="nofollow" class='ipsButton ipsButton_link ipsButton_medium ipsButton_fullWidth' title='{lang="start_new_topic_desc"}'>{lang="start_new_topic"}</a>
{{endif}}
</li>
{{endif}}
@@ -3650,7 +3820,7 @@
{{if $topic->commentForm() || $topic->locked() || \IPS\Member::loggedIn()->restrict_post || \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings'] || !\IPS\Member::loggedIn()->checkPostsPerDay()}}
<a id='replyForm'></a>
<div data-role='replyArea' class='cTopicPostArea ipsBox ipsResponsive_pull ipsPadding {{if !$topic->canComment()}}cTopicPostArea_noSize{{endif}} ipsSpacer_top'>
<div data-role='replyArea' class='cTopicPostArea ipsBox ipsResponsive_pull ipsPadding {{if !$topic->canComment()}}cTopicPostArea_noSize{{endif}} ipsSpacer_top' data-controller='cloud.front.realtime.forumsReplyArea,cloud.front.realtime.whosTyping'>
{{if $topic->commentForm()}}
{{if $topic->locked()}}
<p class='ipsType_reset ipsType_warning ipsComposeArea_warning ipsSpacer_bottom ipsSpacer_half'><i class='fa fa-info-circle'></i> {lang="topic_locked_can_comment"}</p>
@@ -4725,6 +4895,13 @@ html[dir="rtl"] .cTopicList .ipsDataItem_icon {
padding-left: 0;
}
html[dir="ltr"] .cTopicList .ipsLiveActivity--small {
margin-right: calc( var(--sp-2) * -1 );
}
html[dir="rtl"] .cTopicList .ipsLiveActivity--small {
margin-left: calc( var(--sp-2) * -1 );
}
.cTopicHovercard .cTopicHovercard_container {
height: 200px;
overflow: auto;
@@ -5356,6 +5533,11 @@ html[dir="rtl"] .cForumFluidTable .ipsDataItem_loading > div > span:last-child:a
display: block;
}
/* Fix alignment of participated icon, when fluid view and expanded view are both enabled on small mobile screens */
.cForumFluidTable .ipsTopicSnippet__title .ipsItemStatus{
position: static;
}
.ipsTopicSnippet__title .ipsTag_prefix{
display: inline-block;
}
+76 -1
View File
@@ -373,5 +373,80 @@
"106104": "4.6.0 Beta 3",
"106105": "4.6.0 Beta 3.1",
"106106": "4.6.0 Beta 4",
"106107": "4.6.0"
"106107": "4.6.0",
"106108": "4.6.0",
"106109": "4.6.0",
"106110": "4.6.1",
"106111": "4.6.1",
"106112": "4.6.1",
"106113": "4.6.2",
"106114": "4.6.2",
"106115": "4.6.2",
"106116": "4.6.3",
"106117": "4.6.3",
"106118": "4.6.4",
"106119": "4.6.4",
"106120": "4.6.4",
"106121": "4.6.4",
"106122": "4.6.5",
"106123": "4.6.5.1",
"106125": "4.6.5.1",
"106126": "4.6.5.1",
"106127": "4.6.5.1",
"106128": "4.6.5.1",
"106129": "4.6.5.1",
"106130": "4.6.5.1",
"106131": "4.6.5.1",
"106132": "4.6.6",
"106133": "4.6.6",
"106134": "4.6.7 Beta 1",
"106135": "4.6.7 Beta 2",
"106136": "4.6.7",
"106137": "4.6.7",
"106138": "4.6.8 Beta 1",
"106139": "4.6.8 Beta 2",
"106140": "4.6.8",
"106141": "4.6.8",
"106142": "4.6.8",
"106143": "4.6.8",
"106144": "4.6.9 Beta 1",
"106145": "4.6.9 Beta 2",
"106146": "4.6.9 Beta 3",
"106147": "4.6.9",
"106148": "4.6.9",
"106149": "4.6.10 Beta 1",
"106150": "4.6.10 Beta 2",
"106151": "4.6.10",
"106152": "4.6.10",
"106153": "4.6.10",
"106154": "4.6.10",
"106155": "4.6.10",
"106156": "4.6.11 Beta 1",
"106157": "4.6.11 Beta 1",
"106158": "4.6.11 Beta 2",
"106159": "4.6.11",
"106160": "4.6.11",
"106161": "4.6.12 Beta 1",
"106162": "4.6.12 Beta 1",
"106163": "4.6.12 Beta 2",
"106164": "4.6.12",
"106165": "4.6.12",
"106166": "4.6.12",
"106167": "4.6.12.1",
"106168": "4.6.13 Beta 1",
"107000": "4.7.0 Beta 1",
"107001": "4.7.0 Beta 1",
"107002": "4.7.0 Beta 2",
"107003": "4.7.0 Beta 2",
"107004": "4.7.0 Beta 3",
"107005": "4.7.0 Beta 4",
"107006": "4.7.0 Beta 4.1",
"107007": "4.7.0 Beta 5",
"107008": "4.7.0 Beta 6",
"107009": "4.7.0 Beta 7",
"107010": "4.7.0 Beta 8",
"107011": "4.7.0 Beta 9",
"107012": "4.7.0 Beta 10",
"107013": "4.7.0",
"107014": "4.7.0"
}