Version 4.1.2

This commit is contained in:
Neo committed 2025-12-19 05:32:19 -08:00
1 parent 3ba79295ee
commit 28bd025b35
1131 files changed
+63658 -20579

No files matched your search

+4 -4
View File
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<emails><template><template_app>forums</template_app><template_name>digests__comment</template_name><template_content_html><![CDATA[<tr style='border-bottom: 1px solid #eeeeee'>
<td width='40' align='center' valign='top' class=' '>
<td dir='{dir}' width='40' align='center' valign='top' class=' '>
<img src='{$comment->author()->photo}' width='32' height='32' style='border: 1px solid #000; vertical-align: middle;'>
</td>
<td align='left'>
<td dir='{dir}' align='left'>
<p style='font-family: "Helvetica Neue", helvetica, sans-serif; margin: 0; font-size: 13px; font-weight: bold'>
{{if $comment->item()->isQuestion()}}
{$email->language->addToStack("x_answered_a_question", FALSE, array( 'sprintf' => array( $comment->author()->name ) ) )}
@@ -20,10 +20,10 @@
</td>
</tr>]]></template_content_html><template_data>$comment, $email</template_data><template_content_plaintext><![CDATA[{{if $comment->item()->isQuestion()}}{$email->language->addToStack("x_answered_a_question", FALSE, array( 'sprintf' => array( $comment->author()->name ) ) )}{{else}}{$email->language->addToStack("x_replied_to_a_topic", FALSE, array( 'sprintf' => array( $comment->author()->name ) ) )}{{endif}}: {$comment->item()->mapped('title')} ({$comment->url()})
]]></template_content_plaintext></template><template><template_app>forums</template_app><template_name>digests__item</template_name><template_content_html><![CDATA[<tr style='border-bottom: 1px solid #eeeeee'>
<td width='40' align='center' valign='top' class=' '>
<td dir='{dir}' width='40' align='center' valign='top' class=' '>
<img src='{$topic->author()->photo}' width='32' height='32' style='border: 1px solid #000; vertical-align: middle;'>
</td>
<td align='left'>
<td dir='{dir}' align='left'>
<p style='font-family: "Helvetica Neue", helvetica, sans-serif; margin: 0; font-size: 13px; font-weight: bold'>
{{if $topic->isQuestion()}}
{$email->language->addToStack("x_asked_new_question", FALSE, array( 'sprintf' => array( $topic->author()->name, $topic->container()->_title ) ) )}
+7 -7
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.forumList.js" javascript_type="controller" javascript_version="100045" javascript_position="1000050"><![CDATA[/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.forumList.js" javascript_type="controller" javascript_version="101012" javascript_position="1000050"><![CDATA[/**
* IPS Social Suite 4
* (c) 2013 Invision Power Services - http://www.invisionpower.com
*
@@ -67,7 +67,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="100045" javascript_position="1000050">/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.forumPage.js" javascript_type="controller" javascript_version="101012" javascript_position="1000050">/**
* IPS Social Suite 4
* (c) 2013 Invision Power Services - http://www.invisionpower.com
*
@@ -109,7 +109,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="100045" javascript_position="1000050">/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.hovercard.js" javascript_type="controller" javascript_version="101012" javascript_position="1000050">/**
* IPS Social Suite 4
* (c) 2013 Invision Power Services - http://www.invisionpower.com
*
@@ -159,7 +159,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="100045" 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="101012" javascript_position="1000050"><![CDATA[/**
* IPS Social Suite 4
* (c) 2013 Invision Power Services - http://www.invisionpower.com
*
@@ -224,7 +224,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="100045" javascript_position="1000100"><![CDATA[/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.answers.js" javascript_type="controller" javascript_version="101012" javascript_position="1000100"><![CDATA[/**
* IPS Social Suite 4
* (c) 2013 Invision Power Services - http://www.invisionpower.com
*
@@ -329,7 +329,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="100045" javascript_position="1000100">/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.reply.js" javascript_type="controller" javascript_version="101012" javascript_position="1000100">/**
* IPS Social Suite 4
* (c) 2013 Invision Power Services - http://www.invisionpower.com
*
@@ -358,7 +358,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="100045" javascript_position="1000100">/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.view.js" javascript_type="controller" javascript_version="101012" javascript_position="1000100">/**
* IPS Social Suite 4
* (c) 2013 Invision Power Services - http://www.invisionpower.com
*
+12 -33
View File
@@ -1,12 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="forums" version="100045">
<app key="forums" version="101012">
<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>
<word key="__indefart_topic" js="0">a topic</word>
<word key="__indefart_answer" js="0">an answer to a question</word>
<word key="__indefart_question" js="0">a question</word>
<word key="topic_container" js="0">Forum</word>
<word key="module__forums_forums" js="0">Forums</word>
<word key="module__forums_stats" js="0">Statistics</word>
<word key="filestorage__forums_Icons" js="0">Forum Icons</word>
@@ -70,6 +71,7 @@
<word key="forums" js="0">Forums</word>
<word key="forums_sg" js="0">Forum</word>
<word key="forums_add_child" js="0">Create Subforum</word>
<word key="forums_add_child_cat" js="0">Create Forum</word>
<word key="forum_name" js="0">Name</word>
<word key="forum_description" js="0">Description</word>
<word key="forum_description_placeholder" js="0">Add a description...</word>
@@ -83,7 +85,7 @@
<word key="forum_type_redirect" js="0">Redirect</word>
<word key="forum_type_redirect_desc" js="0">Redirects users to another location when clicked on.</word>
<word key="forum_password_on" js="0">Password protected?</word>
<word key="forum_password_on_desc" js="0"><![CDATA[When enabled, users who have permission to access the forum will need to provide the password. Users who do not have permission to access the forum will not be prompted for the password. The password applies only to this forum, if this forum has subforums, the password will not be required for them.<br>Topics posted in a password protected forum will not show in any sidebar, header or footer blocks.]]></word>
<word key="forum_password_on_desc" js="0"><![CDATA[When enabled, users who have permission to access the forum will need to provide the password. Users who do not have permission to access the forum will not be prompted for the password. The password applies only to this forum, if this forum has subforums, the password will not be required for them.<br>Topics posted in a password protected forum will not show in any sidebar, header or footer blocks, and notifications for new topics and posts will not be sent.]]></word>
<word key="forum_password" js="0">Password</word>
<word key="forum_password_override" js="0">No Password Required</word>
<word key="forum_display" js="0">Display Settings</word>
@@ -176,7 +178,7 @@
<word key="forums_new_questions_any" js="0">Questions which have not received any answers.</word>
<word key="forums_rss" js="0">Enable RSS feeds?</word>
<word key="archiving" js="0">Archiving</word>
<word key="archiving_blurb" js="0">If you have a very large site, it can be beneficial to reduce the size of the database table storing posts. Archiving topics is an alternative to deleting which allows them to still exist and be viewed as normal, but moves them to a separate database table. Archived topics cannot be posted in, or edited. You can unarchive topics after they've been archived if you change your mind.</word>
<word key="archiving_blurb" js="0">If you have a very large site, it can be beneficial to reduce the size of the database table storing posts. Archiving topics is an alternative to deleting which allows them to still exist and be viewed as normal, but moves them to a separate database table. Archived topics cannot be posted in or edited, and will not show in search results. You can unarchive topics after they've been archived if you change your mind.</word>
<word key="archive_topics_where" js="0"><![CDATA[Archive topics when <em>all</em> of the following conditions are true...]]></word>
<word key="archive_topic_forums" js="0">In forums</word>
<word key="archive_topic_not_forums" js="0">In forums</word>
@@ -329,7 +331,6 @@
<word key="ask_byline" js="0">Asked by %s, %s</word>
<word key="ask_byline_itemprop" js="0"><![CDATA[Asked by <span itemprop='name'>%s</span>, %s]]></word>
<word key="ask_byline_no_date" js="0">Asked by %s</word>
<word key="topic_container" js="0">Forum</word>
<word key="forum_rss_title_topics" js="0">%s Latest Topics</word>
<word key="forum_rss_title_questions" js="0">%s Latest Questions</word>
<word key="first_post" js="0">First post</word>
@@ -384,6 +385,7 @@
<word key="share_this_post" js="0">Share this post</word>
<word key="subforums" js="0">Subforums:</word>
<word key="subforums_header" js="0">Subforums</word>
<word key="subforums_header_category" js="0">Forums</word>
<word key="reply_to_topic" js="0">Reply to this topic</word>
<word key="link_to_post" js="0">Link to post</word>
<word key="share_externally" js="0">Share on other sites</word>
@@ -472,6 +474,7 @@
<word key="topic_reply_postcount" js="0">Increment post count?</word>
<word key="can_use_saved_actions" js="0">Can use saved actions?</word>
<word key="modlog__saved_action" js="0"><![CDATA[Ran "%s" saved action on topic: <a href='%s'>%s</a>]]></word>
<word key="modlog__unarchived_topic" js="0"><![CDATA[Unarchived topic: <a href='%s'>%s</a>]]></word>
<word key="rss_import" js="0">RSS/Atom Feed Imports</word>
<word key="rss_import_url" js="0">URL</word>
<word key="rss_import_invalid" js="0">That is not a valid RSS or Atom feed.</word>
@@ -525,43 +528,19 @@
<word key="loc_forums_index" js="0">Viewing Forums Index</word>
<word key="ad_forum_listing" js="0">After the first topic in each forum</word>
<word key="ad_topic_view" js="0">After the first post in each topic</word>
<word key="ad_forum_listing_desc" js="0"><![CDATA[Some platforms, such as <a href='{external.secure-ads-adsense}' target='_blank'>Google Adsense</a>, may require you to perform extra steps to display advertisements on restricted pages.]]></word>
<word key="ad_topic_view_desc" js="0"><![CDATA[Some platforms, such as <a href='{external.secure-ads-adsense}' target='_blank'>Google Adsense</a>, may require you to perform extra steps to display advertisements on restricted pages.]]></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_title" js="0">New topics by time period</word>
<word key="stats_posts_title" js="0">New posts by time period</word>
<word key="widget_feed_container_topic" js="0">Forums</word>
<word key="tfb_title" js="0">Title</word>
<word key="tfb_forums" js="0">Fetch from</word>
<word key="tfb_use_perms" js="0">Honor forum permissions?</word>
<word key="tfb_use_perms_desc" js="0">If enabled, will only show results from forums the user is allowed to view</word>
<word key="tfb_topic_status" js="0">Topic status</word>
<word key="tfb_open_status_open" js="0">Open</word>
<word key="tfb_open_status_closed" js="0">Closed</word>
<word key="tfb_open_status_pinned" js="0">Pinned</word>
<word key="tfb_open_status_notpinned" js="0">Not Pinned</word>
<word key="tfb_open_status_visible" js="0">Visible</word>
<word key="tfb_open_status_hidden" js="0">Hidden</word>
<word key="tfb_open_status_featured" js="0">Featured</word>
<word key="tfb_open_status_notfeatured" js="0">Not Featured</word>
<word key="tfb_author" js="0">Topic started by</word>
<word key="tfb_min_posts" js="0">Topic minimum posts</word>
<word key="tfb_show" js="0">Number to show</word>
<word key="tfb_sort_on" js="0">Sort By</word>
<word key="tfb_sort_on_last_post" js="0">Last Post</word>
<word key="tfb_sort_on_title" js="0">Title</word>
<word key="tfb_sort_on_posts" js="0">Posts</word>
<word key="tfb_sort_on_start_date" js="0">Start Date</word>
<word key="tfb_sort_on_views" js="0">Views</word>
<word key="tfb_sort_dir" js="0">Direction</word>
<word key="tfb_sort_dir_dsc" js="0">Descending (9-0)</word>
<word key="tfb_sort_dir_asc" js="0">Ascending (0-9)</word>
<word key="tfb_all_forums" js="0">All forums</word>
<word key="tfb_any_posts" js="0">Any</word>
<word key="block_topicFeed_title" js="0">Topics</word>
<word key="block_postFeed_title" js="0">Posts</word>
<word key="rssimport_task_error" js="0">Attempting to import the feed failed with the following message: %s</word>
<word key="block_poll" js="0">Poll</word>
<word key="block_poll_desc" js="0">Create a block with a poll from a topic</word>
<word key="widget_poll_tid" js="0">Topic</word>
<word key="widget_poll_tid_desc" js="0">Start typing the name of the topic</word>
<word key="poll_view_topic" js="0">View topic</word>
<word key="forumMarkedRead" js="1">Forum marked as read</word>
<word key="topicMarkedRead" js="1">Topic marked as read</word>
<word key="js_num_topic_posts" js="1">{# [1:post][?:posts]} in this topic</word>
+1 -59
View File
@@ -1470,34 +1470,6 @@
"values": [],
"zerofill": false
},
"use_sig": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
"length": 1,
"name": "use_sig",
"type": "TINYINT",
"unsigned": false,
"values": [],
"zerofill": false
},
"use_emo": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
"length": 1,
"name": "use_emo",
"type": "TINYINT",
"unsigned": false,
"values": [],
"zerofill": false
},
"ip_address": {
"allow_null": false,
"auto_increment": false,
@@ -1812,11 +1784,9 @@
"edit_time": "0",
"author_id": "1",
"author_name": "<%ADMIN_NAME%>",
"use_sig": "1",
"use_emo": "1",
"ip_address": "<%IP_ADDRESS%>",
"post_date": "<%TIME%>",
"post": "<p>Welcome to your new IPS Community Suite!<\/p> <br \/><p> Congratulations on your purchase of our software and setting up your community. Please take some time and read through the Getting Started Guide and Administrator Documentation. The Getting Started Guide will walk you through some of the necessary steps to setting up an IP.Board and starting your community. The Administrator Documentation takes you through the details of the capabilities of IP.Board.<\/p> <br \/><p> You can remove this message, topic, forum or even category at any time.<\/p> <br \/><p><a href='http:\/\/remoteservices.invisionpower.com\/docs\/getting-started' rel='external'>Go to the documentation now...<\/a><br \/><p>Nulled by IAF<\/p>",
"post": "<p>Welcome to your new IPS Community Suite!<\/p> <br \/><p> Congratulations on your purchase of our software and setting up your community. Please take some time and read through the Getting Started Guide and Administrator Documentation. The Getting Started Guide will walk you through some of the necessary steps to setting up an IP.Board and starting your community. The Administrator Documentation takes you through the details of the capabilities of IP.Board.<\/p> <br \/><p> You can remove this message, topic, forum or even category at any time.<\/p> <br \/><p><a href='http:\/\/remoteservices.invisionpower.com\/docs\/getting-started' rel='external'>Go to the documentation now...<\/a>",
"queued": "0",
"topic_id": "1",
"new_topic": "1",
@@ -2404,34 +2374,6 @@
"values": [],
"zerofill": false
},
"archive_show_signature": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
"length": 1,
"name": "archive_show_signature",
"type": "INT",
"unsigned": false,
"values": [],
"zerofill": false
},
"archive_show_emoticons": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
"length": 1,
"name": "archive_show_emoticons",
"type": "INT",
"unsigned": false,
"values": [],
"zerofill": false
},
"archive_show_edited_by": {
"allow_null": false,
"auto_increment": false,
+392 -185
View File
@@ -39,13 +39,13 @@
<div class="ipsPageHeader ipsClearfix">
<header class='ipsSpacer_bottom'>
<h1 class="ipsType_pageTitle">{$forum->_title}</h1>
{{if $forum->sub_can_post}}
{{if $forum->sub_can_post and !$forum->password}}
<div class='ipsPos_right ipsResponsive_noFloat ipsResponsive_hidePhone'>
{template="follow" app="core" group="global" params="'forums','forum', $forum->_id, $followerCount"}
</div>
{{endif}}
{{if $forum->description}}
<div class='ipsType_richText ipsType_normal ipsSpacer_top'>
<div class='ipsType_richText ipsType_normal'>
{$forum->description|raw}
</div>
{{endif}}
@@ -66,7 +66,7 @@
{{if $forum->children()}}
<div class='ipsList_reset cForumList ipsBox ipsSpacer_bottom' data-controller='forums.front.forum.forumList' data-baseURL=''>
<h2 class='ipsType_sectionTitle ipsType_reset'>{lang="subforums_header"}</h2>
<h2 class='ipsType_sectionTitle ipsType_reset'>{{if $forum->sub_can_post}}{lang="subforums_header"}{{else}}{lang="subforums_header_category"}{{endif}}</h2>
{{if theme.forum_layout === 'grid'}}
<div class='ipsAreaBackground ipsPad' data-role="forums">
<div class='ipsGrid ipsGrid_collapsePhone' data-ipsGrid data-ipsGrid-minItemSize='300' data-ipsGrid-maxItemSize='400' data-ipsGrid-equalHeights='row'>
@@ -76,7 +76,7 @@
</div>
</div>
{{else}}
<ol class="ipsDataList ipsDataList_large ipsDataList_zebra ipsAreaBackground_reset">
<ol class="ipsDataList ipsDataList_zebra ipsDataList_large ipsAreaBackground_reset">
{{foreach $forum->children( 'view' ) as $childforum}}
{template="forumRow" group="index" app="forums" params="$childforum, TRUE"}
{{endforeach}}
@@ -94,7 +94,7 @@
{template="forumButtons" group="forums" params="$forum"}
</ul>
</div>
{{if !\IPS\Request::i()->advancedSearchForm && $forum->sub_can_post}}
{{if !\IPS\Request::i()->advancedSearchForm && $forum->sub_can_post and !$forum->password}}
<div class='ipsResponsive_showPhone ipsResponsive_block ipsSpacer ipsSpacer_both'>
{template="follow" app="core" group="global" params="'forums','forum', $forum->_id, $followerCount"}
</div>
@@ -557,7 +557,10 @@
</div>
{{if $table->canModerate()}}
<div class='ipsDataItem_modCheck'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->mapped('pinned')}}pinned{{endif}} {{if $row->mapped('featured')}}featured{{endif}}'>
<span class='ipsCustomInput'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->mapped('pinned')}}pinned{{endif}} {{if $row->mapped('featured')}}featured{{endif}}'>
<span></span>
</span>
</div>
{{endif}}
</li>
@@ -609,7 +612,7 @@
{template="prefix" group="global" app="core" params="$row->prefix( TRUE ), $row->prefix()"}
{{endif}}
<a href='{$row->url()}' {{if $row->tableHoverUrl and $row->canView()}}data-ipsHover data-ipsHover-target='{$row->url()->setQueryString('preview', 1)}' data-ipsHover-timeout='1.5'{{endif}} itemprop="url">
<a href='{$row->url()}' {{if $row->tableHoverUrl and $row->canView()}}data-ipsHover data-ipsHover-target='{$row->url()->setQueryString('preview', 1)}' data-ipsHover-timeout='1.5'{{endif}} itemprop="url" {{if $row->canEdit()}} data-role="editableTitle"{{endif}}>
<span itemprop="name">
{{if $row->mapped('title')}}{wordbreak="$row->mapped('title')"}{{else}}<em class="ipsType_light">{lang="content_deleted"}</em>{{endif}}
</span>
@@ -644,7 +647,10 @@
</div>
{{if $table->canModerate()}}
<div class='ipsDataItem_modCheck'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->tableStates()}}{$row->tableStates()}{{endif}}'>
<span class='ipsCustomInput'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->tableStates()}}{$row->tableStates()}{{endif}}'>
<span></span>
</span>
</div>
{{endif}}
</li>
@@ -690,7 +696,7 @@
</div>
<hr class='ipsHr'>
<div class='ipsType_richText ipsType_small'>
<div class='ipsType_richText ipsType_small' data-controller='core.front.core.lightboxedImages'>
{$tabData[1]->content()|raw}
</div>
{{if count( $overviews ) > 1}}
@@ -731,13 +737,16 @@
</div>
{{if $table->canModerate()}}
<div class='ipsDataItem_modCheck'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{{if $row->mapped('featured')}}unfeature{{endif}} {{if $row->mapped('pinned')}}unpin{{endif}} delete" data-state='{{if $row->mapped('pinned')}}pinned{{endif}} {{if $row->mapped('featured')}}featured{{endif}}'>
<span class='ipsCustomInput'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{{if $row->mapped('featured')}}unfeature{{endif}} {{if $row->mapped('pinned')}}unpin{{endif}} delete" data-state='{{if $row->mapped('pinned')}}pinned{{endif}} {{if $row->mapped('featured')}}featured{{endif}}'>
<span></span>
</span>
</div>
{{endif}}
</li>
{{endif}}
{{else}}
<li class="ipsDataItem ipsDataItem_responsivePhoto {{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}' itemscope itemtype="http://schema.org/Article">
<li class="ipsDataItem ipsDataItem_responsivePhoto {{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}' itemprop="itemListElement" itemscope itemtype="http://schema.org/Article">
{{if member.member_id}}
<div class='ipsDataItem_icon ipsPos_top'>
{{if $row->unread()}}
@@ -758,40 +767,42 @@
{{if $row->locked()}}
<i class='fa fa-lock' data-ipsTooltip title='{lang="topic_locked"}'></i>
{{endif}}
{{if $row->mapped('pinned') || $row->mapped('featured') || $row->hidden() === -1 || $row->hidden() === 1}}
<span>
{{if $row->hidden() === -1}}
<span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_warning" data-ipsTooltip title='{$row->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span>
{{elseif $row->hidden() === 1}}
<span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span>
{{endif}}
{{if $row->mapped('pinned')}}
<span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span>
{{endif}}
{{if $row->mapped('featured')}}
<span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span>
{{endif}}
</span>
{{endif}}
{{if $row->prefix()}}
{template="prefix" group="global" app="core" params="$row->prefix( TRUE ), $row->prefix()"}
{{endif}}
<a href='{$row->url()}' {{if $row->tableHoverUrl and $row->canView()}}data-ipsHover data-ipsHover-target='{$row->url()->setQueryString('preview', 1)}' data-ipsHover-timeout='1.5'{{endif}} itemprop="url" {{if $row->canEdit()}}data-role="editableTitle"{{endif}}>
<span itemprop="name">
<a href='{$row->url()}' itemprop="url"{{if $row->tableHoverUrl and $row->canView()}} data-ipsHover data-ipsHover-target='{$row->url()->setQueryString('preview', 1)}' data-ipsHover-timeout='1.5'{{endif}}{{if $row->canEdit()}} data-role="editableTitle"{{endif}}>
<span itemprop="name headline">
{{if $row->mapped('title')}}{wordbreak="$row->mapped('title')"}{{else}}<em class="ipsType_light">{lang="content_deleted"}</em>{{endif}}
</span>
</a>
<meta itemprop="position" content="{$row->tid}">
</h4>
{{if $row->mapped('pinned') || $row->mapped('featured') || $row->hidden() === -1 || $row->hidden() === 1}}
<span>
{{if $row->hidden() === -1}}
<span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_warning" data-ipsTooltip title='{$row->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span>
{{elseif $row->hidden() === 1}}
<span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span>
{{endif}}
{{if $row->mapped('pinned')}}
<span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span>
{{endif}}
{{if $row->mapped('featured')}}
<span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span>
{{endif}}
</span>
{{endif}}
{{if $row->commentPageCount() > 1}}
{$row->commentPagination( array(), 'miniPagination' )|raw}
{{endif}}
<div class='ipsDataItem_meta ipsType_reset ipsType_light ipsType_blendLinks'>
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
{lang="byline_itemprop" htmlsprintf="$row->author()->link()"}
</span>{datetime="$row->__get( $row::$databaseColumnMap['date'] )"}
<meta itemprop="dateCreated" content="{expression="\IPS\DateTime::create( $row->__get( $row::$databaseColumnMap['date'] ) )->rfc3339()"}">
</span>{datetime="$row->mapped('date')" lowercase="true"}
<meta itemprop="dateCreated datePublished" content="{expression="\IPS\DateTime::create( $row->__get( $row::$databaseColumnMap['date'] ) )->rfc3339()"}">
{{if !in_array( \IPS\Dispatcher::i()->controller, array( 'forums', 'index' ) )}}
{lang="in"} <a href="{$row->container()->url()}">{$row->container()->_title}</a>
{{endif}}
@@ -812,7 +823,7 @@
</li>
{{endforeach}}
</ul>
<ul class='ipsDataItem_lastPoster ipsDataItem_withPhoto'>
<ul class='ipsDataItem_lastPoster ipsDataItem_withPhoto ipsType_blendLinks'>
<li>
{{if $row->mapped('num_comments')}}
{template="userPhoto" app="core" group="global" params="$row->lastCommenter(), 'tiny'"}
@@ -835,7 +846,10 @@
</ul>
{{if $table->canModerate()}}
<div class='ipsDataItem_modCheck'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->tableStates()}}{$row->tableStates()}{{endif}}'>
<span class='ipsCustomInput'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->tableStates()}}{$row->tableStates()}{{endif}}'>
<span></span>
</span>
</div>
{{endif}}
</li>
@@ -862,6 +876,55 @@
</h3>
<p class='ipsType_normal ipsType_light ipsType_blendLinks ipsType_reset'>{lang="in"} <a href='{$topic->container()->url()}'>{$topic->container()->_title}</a></p>
</div>]]></template>
<template template_group="global" template_name="manageFollowNodeRow" template_data="$table, $headers, $rows" template_location="front" template_app="forums"><![CDATA[{{foreach $rows as $row}}
{{$contentItemClass = $row::$contentItemClass;}}
<li class="ipsDataItem {{if method_exists( $row, 'tableClass' ) && $row->tableClass()}}ipsDataItem_{$row->tableClass()}{{endif}}" data-controller='core.front.system.manageFollowed' data-followID='{$row->_followData['follow_area']}-{$row->_followData['follow_rel_id']}'>
<div class='ipsDataItem_main'>
<h4 class='ipsDataItem_title'>
{{if $row->_locked}}
<i class="fa fa-lock"></i>
{{endif}}
<a href='{$row->url()}'>
{$row->_title}
</a>
</h4>
<ul class='ipsList_inline ipsType_light'>
<li>{lang="posts_number" pluralize="$row->_comments + $row->_items"}</li>
</ul>
</div>
<div class='ipsDataItem_generic ipsDataItem_size1 ipsType_center ipsType_large'>
<span class='ipsBadge ipsBadge_icon ipsBadge_new {{if !$row->_followData['follow_is_anon']}}ipsHide{{endif}}' data-role='followAnonymous' data-ipsTooltip title='{lang="follow_is_anon"}'><i class='fa fa-eye-slash'></i></span>
</div>
<div class='ipsDataItem_generic ipsDataItem_size6'>
<ul class='ipsList_reset'>
<li title='{lang="follow_when"}' data-role='followDate'><i class='fa fa-clock-o'></i> {datetime="$row->_followData['follow_added']"}</li>
<li title='{lang="follow_how"}' data-role='followFrequency'>
{{if $row->_followData['follow_notify_freq'] == 'none'}}
<i class='fa fa-bell-slash-o'></i>
{{else}}
<i class='fa fa-bell'></i>
{{endif}} {lang="follow_freq_{$row->_followData['follow_notify_freq']}"}
</li>
</ul>
</div>
<div class='ipsDataItem_generic ipsDataItem_size6 ipsType_center'>
{template="manageFollow" group="system" app="core" params="$row->_followData['follow_app'], $row->_followData['follow_area'], $row->_followData['follow_rel_id']"}
</div>
{{if $table->canModerate()}}
<div class='ipsDataItem_modCheck'>
<span class='ipsCustomInput'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->_id}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state=''>
<span></span>
</span>
</div>
{{endif}}
</li>
{{endforeach}}]]></template>
<template template_group="global" template_name="row" template_data="$table, $headers, $topic, $showReadMarkers=TRUE" template_location="front" template_app="forums"><![CDATA[{{$idField = $topic::$databaseColumnId;}}
{{$iPosted = isset( $table->contentPostedIn ) ? $table->contentPostedIn : ( $table AND method_exists( $table, 'container' ) AND $topic->container() !== NULL ) ? $topic->container()->contentPostedIn() : array();}}
<li class="ipsDataItem ipsDataItem_responsivePhoto {{if $topic->unread()}}ipsDataItem_unread{{endif}} {{if method_exists( $topic, 'tableClass' ) && $topic->tableClass()}}ipsDataItem_{$topic->tableClass()}{{endif}} {{if $topic->hidden()}}ipsModerated{{endif}}">
@@ -884,12 +947,6 @@
{{endif}}
<div class='ipsDataItem_main'>
<h4 class='ipsDataItem_title ipsType_break'>
<a href='{$topic->url()}' {{if $topic->canView()}}data-ipsHover data-ipsHover-target='{$topic->url()->setQueryString('preview', 1)}' data-ipsHover-timeout='1.5' {{endif}}>
{{if $topic->isQuestion()}}
<strong class='ipsType_light'>{lang="question_title"}:</strong>
{{endif}}
{wordbreak="$topic->mapped('title')"}
</a>
{{if $topic->mapped('pinned') || $topic->mapped('featured') || $topic->hidden() === -1 || $topic->hidden() === 1}}
<span>
{{if $topic->hidden() === -1}}
@@ -905,6 +962,13 @@
{{endif}}
</span>
{{endif}}
<a href='{$topic->url()}' {{if $topic->canView()}}data-ipsHover data-ipsHover-target='{$topic->url()->setQueryString('preview', 1)}' data-ipsHover-timeout='1.5' {{endif}}>
{{if $topic->isQuestion()}}
<strong class='ipsType_light'>{lang="question_title"}:</strong>
{{endif}}
{wordbreak="$topic->mapped('title')"}
</a>
</h4>
{{if $topic->commentPageCount() > 1}}
{$topic->commentPagination( array(), 'miniPagination' )|raw}
@@ -971,7 +1035,10 @@
</ul>
{{if method_exists( $table, 'canModerate' ) AND $table->canModerate()}}
<div class='ipsDataItem_modCheck'>
<input type='checkbox' data-role='moderation' name="moderate[{$topic->tid}]" data-actions="{expression="implode( ' ', $table->multimodActions( $topic ) )"}" data-state='{{if $topic->tableStates()}}{$topic->tableStates()}{{endif}}'>
<span class='ipsCustomInput'>
<input type='checkbox' data-role='moderation' name="moderate[{$topic->tid}]" data-actions="{expression="implode( ' ', $table->multimodActions( $topic ) )"}" data-state='{{if $topic->tableStates()}}{$topic->tableStates()}{{endif}}'>
<span></span>
</span>
</div>
{{endif}}
</li>]]></template>
@@ -980,39 +1047,12 @@
{template=&quot;row&quot; group=&quot;global&quot; app=&quot;forums&quot; params=&quot;$table, $headers, $row&quot;}
{{endforeach}}
{{endif}}</template>
<template template_group="global" template_name="searchNoPermission" template_data="$topic, $lang, $link=NULL" template_location="front" template_app="forums"><![CDATA[<li class="ipsDataItem">
<div class='ipsPad ipsType_center ipsType_light ipsType_large'>
<template template_group="global" template_name="searchNoPermission" template_data="$lang, $link=NULL" template_location="front" template_app="forums"><![CDATA[<li class="ipsStreamItem ipsStreamItem_contentBlock ipsAreaBackground_reset ipsPad">
<div class='ipsType_center ipsType_light ipsType_large'>
{$lang}{{if $link}} <a href="{$link}">{lang="enter_password"}</a>{{endif}}
</div>
</li>
]]></template>
<template template_group="global" template_name="snippet" template_data="$activity, $type='activity'" template_location="front" template_app="forums"><![CDATA[{{if $activity instanceof \IPS\forums\Topic}}
<div class='cSearchActivity_info ipsContained'>
{{if $type != 'search'}}<a href='{$activity->url()}' class='ipsType_normal ipsType_break'>{$activity->mapped('title')}</a>{{endif}}
{{if mb_strlen( trim( $activity->truncated() ) ) }}
<div class='ipsType_medium ipsType_richText ipsContained {{if $type != 'search'}}ipsSpacer_both{{else}}ipsSpacer_bottom{{endif}} ipsSpacer_half' data-ipsTruncate data-ipsTruncate-size='3 lines' data-ipsTruncate-type='remove'>
{$activity->truncated()|raw}
</div>
{{endif}}
<ul class='ipsList_inline ipsType_light'>
<li>{lang="replies_number" pluralize="$activity->posts-1"}</li>
<li>{lang="num_views_with_number" pluralize="$activity->mapped('views')"}</li>
</ul>
</div>
{{else}}
{{if mb_strlen( trim( strip_tags( $activity->truncated() ) ) ) }}
<div class='cSearchActivity_info ipsContained'>
<div class='ipsType_medium ipsType_richText ipsContained ipsSpacer_bottom ipsSpacer_half' data-ipsTruncate data-ipsTruncate-size='3 lines' data-ipsTruncate-type='remove'>
{$activity->truncated()|raw}
</div>
{{if $type != 'search' and $activity instanceof \IPS\Content\Reputation and settings.reputation_enabled}}
<ul class='ipsList_inline ipsType_light'>
<li>{template="reputationMini" group="global" app="core" params="$activity, '', NULL, TRUE"}</li>
</ul>
{{endif}}
</div>
{{endif}}
{{endif}}]]></template>
<template template_group="index" template_name="forumGridItem" template_data="$forum" template_location="front" template_app="forums"><![CDATA[{{if $forum->can('view')}}
{{$lastPost = $forum->lastPost();}}
<div class="ipsDataItem ipsGrid_span4 ipsAreaBackground_reset cForumGrid {{if \IPS\forums\Topic::containerUnread( $forum ) && !$forum->redirect_on}}cForumGrid_unread ipsDataItem_unread{{endif}} ipsClearfix" data-forumID="{$forum->_id}">
@@ -1168,7 +1208,7 @@
{{endif}}
</div>
<div class="ipsDataItem_main">
<h4 class="ipsDataItem_title ipsType_large">
<h4 class="ipsDataItem_title ipsType_large ipsType_break">
{{if $forum->password && !$forum->loggedInMemberHasPasswordAccess()}}
<a href="{$forum->url()->setQueryString( 'passForm', '1' )}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="forum_requires_password"}'>{$forum->_title}</a>
{{else}}
@@ -1204,13 +1244,13 @@
<strong class='ipsType_warning ipsType_medium'>
<i class='fa fa-warning'></i>
{{if $unapprovedContent['topics']}}
<a href='{$forum->url()->setQueryString( array( 'advanced_search_submitted' => 1, 'topic_type' => 'queued_topics' ) )->csrf()}' data-ipsTooltip title='{lang="queued_topics_badge" pluralize="$forum->queued_topics"}' class='ipsType_blendLinks'>{$unapprovedContent['topics']}</a>
<a href='{$forum->url()->setQueryString( array( 'advanced_search_submitted' => 1, 'topic_type' => 'queued_topics' ) )->csrf()}' data-ipsTooltip title='{lang="queued_topics_badge" pluralize="$unapprovedContent['topics']"}' class='ipsType_blendLinks'>{$unapprovedContent['topics']}</a>
{{else}}
<span class='ipsType_light'>0</span>
{{endif}}
/
{{if $unapprovedContent['posts']}}
<a href='{$forum->url()->setQueryString( array( 'advanced_search_submitted' => 1, 'topic_type' => 'queued_posts' ) )->csrf()}' data-ipsTooltip title='{lang="queued_posts_badge" pluralize="$forum->queued_posts"}' class='ipsType_blendLinks'>{$unapprovedContent['posts']}</a>
<a href='{$forum->url()->setQueryString( array( 'advanced_search_submitted' => 1, 'topic_type' => 'queued_posts' ) )->csrf()}' data-ipsTooltip title='{lang="queued_posts_badge" pluralize="$unapprovedContent['posts']"}' class='ipsType_blendLinks'>{$unapprovedContent['posts']}</a>
{{else}}
<span class='ipsType_light'>0</span>
{{endif}}
@@ -1220,8 +1260,8 @@
<ul class="ipsDataItem_lastPoster ipsDataItem_withPhoto">
{{if $lastPost}}
<li>{template="userPhoto" app="core" group="global" params="$lastPost['author'], 'tiny'"}</li>
<li><a href="{$lastPost['topic_url']->setQueryString( 'do', 'getNewComment' )}" class='ipsType_break ipsContained' title='{$lastPost['topic_title']}'>{truncate="$lastPost['topic_title']" length="30"}</a></li>
<li>{lang="byline_nodate" htmlsprintf="$lastPost['author']->link()"}</li>
<li><a href="{$lastPost['topic_url']->setQueryString( 'do', 'getNewComment' )}" class='ipsType_break ipsContained' title='{$lastPost['topic_title']}'>{truncate="$lastPost['topic_title']" length="26"}</a></li>
<li class='ipsType_blendLinks'>{lang="byline_nodate" htmlsprintf="$lastPost['author']->link()"}</li>
<li class="ipsType_light"><a href='{$lastPost['topic_url']->setQueryString( 'do', 'getLastComment' )}' title='{lang="get_last_post"}' class='ipsType_blendLinks'>{datetime="$lastPost['date']"}</a></li>
{{else}}
<li class='ipsType_light ipsResponsive_showDesktop'>{{if $forum->password}}{lang="no_forum_posts_password"}{{else}}{lang="no_forum_posts"}{{endif}}</li>
@@ -1230,7 +1270,10 @@
{{endif}}
{{if $table and $table->canModerate()}}
<div class='ipsDataItem_modCheck'>
<input type='checkbox' data-role='moderation' name="moderate[{$forum->_id}]" data-actions="{expression="implode( ' ', $table->multimodActions( $forum ) )"}" data-state=''>
<span class='ipsCustomInput'>
<input type='checkbox' data-role='moderation' name="moderate[{$forum->_id}]" data-actions="{expression="implode( ' ', $table->multimodActions( $forum ) )"}" data-state=''>
<span></span>
</span>
</div>
{{endif}}
</li>
@@ -1242,7 +1285,7 @@
{{if \IPS\Member::loggedIn()->member_id}}
<ul class="ipsToolList ipsToolList_horizontal ipsResponsive_hideDesktop ipsResponsive_block ipsClearfix">
{template="indexButtons" group="index" params=""}
{template="indexButtons" group="index" app="forums" params=""}
</ul>
{{endif}}
@@ -1251,13 +1294,13 @@
{{foreach \IPS\forums\Forum::roots() as $category}}
{{if $category->can('view') && $category->hasChildren()}}
<li data-categoryID='{$category->_id}' class='cForumRow ipsBox ipsSpacer_bottom'>
<h2 class="ipsType_sectionTitle ipsType_reset ipsType_blendLinks cForumTitle">
<a href='#' class='ipsPos_right ipsJS_show cForumToggle' data-action='toggleCategory' data-ipsTooltip title='{lang="toggle_this_category"}'></a>
<h2 class="ipsType_sectionTitle ipsType_reset cForumTitle">
<a href='#' class='ipsPos_right ipsJS_show ipsType_noUnderline cForumToggle' data-action='toggleCategory' data-ipsTooltip title='{lang="toggle_this_category"}'></a>
<a href='{$category->url()}'>{$category->_title}</a>
</h2>
{{if theme.forum_layout === 'grid'}}
<div class='ipsAreaBackground ipsPad' data-role="forums">
<div class='ipsGrid ipsGrid_collapsePhone' data-ipsGrid data-ipsGrid-minItemSize='300' data-ipsGrid-maxItemSize='400' data-ipsGrid-equalHeights='row'>
<div class='ipsGrid ipsGrid_collapsePhone' data-ipsGrid data-ipsGrid-minItemSize='250' data-ipsGrid-maxItemSize='500' data-ipsGrid-equalHeights='row'>
{{foreach $category->children() as $forum}}
{template="forumGridItem" group="index" app="forums" params="$forum"}
{{endforeach}}
@@ -1288,7 +1331,11 @@
<option value=">" {{if isset( $value[0] ) and $value[0] == '>'}}selected{{endif}}>{lang="greater_than"}</option>
<option value="<" {{if isset( $value[0] ) and $value[0] == '<'}}selected{{endif}}>{lang="less_than"}</option>
</select>
<input type="number" name="{$name}[1]" value="{{if isset( $value[1] )}}{$value[1]}{{endif}}" id='el{$name}_1' class="ipsField_short"> {lang="or"} <input type="checkbox" name="{$name}[2]" data-control="unlimited" {{if isset( $value[2] ) and $value[2]}}checked{{endif}}> <label for='el{$name}_1' class='ipsField_unlimited'>{{if in_array( $name, array( 'archive_topic_post', 'archive_topic_view', 'archive_topic_rating', 'archive_not_topic_post', 'archive_not_topic_view', 'archive_not_topic_rating' ) )}}{lang="no_restriction"}{{else}}{lang="any_time"}{{endif}}</label>]]></template>
<input type="number" name="{$name}[1]" value="{{if isset( $value[1] )}}{$value[1]}{{endif}}" id='el{$name}_1' class="ipsField_short"> {lang="or"}
<span class='ipsCustomInput'>
<input type="checkbox" name="{$name}[2]" data-control="unlimited" {{if isset( $value[2] ) and $value[2]}}checked{{endif}}>
<span></span>
</span> <label for='el{$name}_1' class='ipsField_unlimited'>{{if in_array( $name, array( 'archive_topic_post', 'archive_topic_view', 'archive_topic_rating', 'archive_not_topic_post', 'archive_not_topic_view', 'archive_not_topic_rating' ) )}}{lang="no_restriction"}{{else}}{lang="any_time"}{{endif}}</label>]]></template>
<template template_group="settings" template_name="archiveRules" template_data="$form, $totalTopics, $existingCount, $existingPercentage" template_location="admin" template_app="forums"><![CDATA[<div data-controller="forums.admin.settings.archiveRules">
<div class="ipsPad ipsType_normal">{lang="archiving_blurb"}</div>
<div data-ipsSticky data-ipsSticky-spacing='60' class="ipsPad_half ipsAreaBackground_reset ipsType_center">
@@ -1305,17 +1352,25 @@
</select>
<input type="number" name="{$name}[1]" value="{{if isset( $value[1] )}}{$value[1]}{{endif}}" class="ipsField_short" min="0">
<select name="{$name}[2]">
<option value="d" {{if isset( $value[2] ) and $value[2] == 's'}}selected{{endif}}>{lang="days"}</option>
<option value="d" {{if isset( $value[2] ) and $value[2] == 'd'}}selected{{endif}}>{lang="days"}</option>
<option value="m" {{if isset( $value[2] ) and $value[2] == 'm'}}selected{{endif}}>{lang="months"}</option>
<option value="y" {{if isset( $value[2] ) and $value[2] == 'y'}}selected{{endif}}>{lang="years"}</option>
</select>
{lang="ago"} {lang="or"} <input type="checkbox" name="{$name}[3]" id='el{$name}_3' data-control="unlimited" {{if isset( $value[3] ) and $value[3]}}checked{{endif}}> <label for='el{$name}_3' class='ipsField_unlimited'>{{if mb_strpos( $name, 'not' )}}{lang="no_restriction"}{{else}}{lang="any_time"}{{endif}}</label>]]></template>
<template template_group="settings" template_name="popularNow" template_data="$name, $value" template_location="admin" template_app="forums"><![CDATA[<input type="number" name="{$name}[posts]" value="{$value['posts']}" class="ipsField_short"> {lang="posts_in_the_last"} <input type="number" name="{$name}[minutes]" value="{$value['minutes']}" class="ipsField_short"> {lang="minutes"} {lang="or"} <input type="checkbox" name="{$name}[never]" id='el{$name}_never' data-control="unlimited" {{if !$value['posts']}}checked{{endif}}> <label for='el{$name}_never' class='ipsField_unlimited'>{lang="never"}</label>]]></template>
{lang="ago"} {lang="or"}
<span class='ipsCustomInput'>
<input type="checkbox" name="{$name}[3]" id='el{$name}_3' data-control="unlimited" {{if isset( $value[3] ) and $value[3]}}checked{{endif}}>
<span></span>
</span> <label for='el{$name}_3' class='ipsField_unlimited'>{{if mb_strpos( $name, 'not' )}}{lang="no_restriction"}{{else}}{lang="any_time"}{{endif}}</label>]]></template>
<template template_group="settings" template_name="popularNow" template_data="$name, $value" template_location="admin" template_app="forums"><![CDATA[<input type="number" name="{$name}[posts]" value="{$value['posts']}" class="ipsField_short"> {lang="posts_in_the_last"} <input type="number" name="{$name}[minutes]" value="{$value['minutes']}" class="ipsField_short"> {lang="minutes"} {lang="or"}
<span class='ipsCustomInput'>
<input type="checkbox" name="{$name}[never]" id='el{$name}_never' data-control="unlimited" {{if !$value['posts']}}checked{{endif}}>
<span></span>
</span> <label for='el{$name}_never' class='ipsField_unlimited'>{lang="never"}</label>]]></template>
<template template_group="submit" template_name="createTopic" template_data="$form, $forum, $title" template_location="front" template_app="forums"><![CDATA[
{template="pageHeader" if="!\IPS\Request::i()->isAjax()" group="global" app="core" params="\IPS\Member::loggedIn()->language()->addToStack( $title )"}
{$form|raw}]]></template>
<template template_group="submit" template_name="createTopicForm" template_data="$forum, $hasModOptions, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL, $errorTabs=array()" template_location="front" template_app="forums"><![CDATA[{{$modOptions = array( 'topic_create_state', 'create_topic_locked', 'create_topic_pinned', 'create_topic_hidden', 'create_topic_featured', 'topic_open_time', 'topic_close_time');}}
<template template_group="submit" template_name="createTopicForm" template_data="$forum, $hasModOptions, $topic, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL, $errorTabs=array()" template_location="front" template_app="forums"><![CDATA[{{$modOptions = array( 'topic_create_state', 'create_topic_locked', 'create_topic_pinned', 'create_topic_hidden', 'create_topic_featured', 'topic_open_time', 'topic_close_time');}}
<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} data-ipsForm>
<input type="hidden" name="{$id}_submitted" value="1">
@@ -1326,6 +1381,10 @@
<input type="hidden" name="MAX_FILE_SIZE" value="{$uploadField}">
<input type="hidden" name="plupload" value="{expression="md5( uniqid() )"}">
{{endif}}
{{if $form->error}}
<p class="ipsMessage ipsMessage_error">{$form->error}</p>
{{endif}}
<div class='ipsBox'>
<h2 class='ipsType_sectionTitle ipsType_reset'>{lang="topic_details"}</h2>
@@ -1396,7 +1455,7 @@
{{endif}}
<div class='ipsAreaBackground ipsPad ipsType_center'>
<a href="{$forum->url()}" class="ipsButton ipsButton_link ipsButton ipsButton_link">{lang="cancel"}</a>
<a href="{{if !is_null($topic)}}{$topic->url()}{{else}}{$forum->url()}{{endif}}" class="ipsButton ipsButton_link ipsButton ipsButton_link">{lang="cancel"}</a>
<button type='submit' class='ipsButton ipsButton_medium ipsButton_primary' accesskey="s" role="button">{{if $forum->forums_bitoptions['bw_enable_answers']}}{lang="submit_question"}{{else}}{lang="submit_topic"}{{endif}}</button>
</div>
</div>
@@ -1432,19 +1491,27 @@
</div>]]></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 {{if $comment->hidden()}}ipsModerated{{endif}} ipsFaded_withHover'>
{{if settings.reputation_highlight and $comment->reputation() >= settings.reputation_highlight}}
<strong class='ipsComment_popularFlag' data-ipsTooltip title='{lang="this_is_a_popular_post"}'><i class='fa fa-heart'></i></strong>
{{endif}}
<div class='ipsComment_meta ipsType_light'>
<p class='ipsPos_right ipsType_reset ipsType_blendLinks ipsFaded ipsFaded_more'>
{{if \IPS\Member::loggedIn()->modPermission('can_use_ip_tools') and \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'modcp' ) )}}
<span class='ipsResponsive_hidePhone'>(<a href="{url="app=core&module=modcp&controller=modcp&tab=ip_tools&ip=$comment->ip_address" seoTemplate="modcp_ip_tools"}">{lang="ip_prefix" sprintf="$comment->ip_address"}</a>) &middot;</span>
{{endif}}
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->pid ) )}' data-ipsTooltip title='{lang="share_this_post"}' data-ipsMenu data-ipsMenu-closeOnClick='false' id='elSharePost_{$comment->pid}'><i class='fa fa-share-alt'></i></a>
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->$idField ) )}' data-ipsTooltip title='{lang="share_this_post"}' data-ipsMenu data-ipsMenu-closeOnClick='false' id='elSharePost_{$comment->$idField}' data-role='shareComment'><i class='fa fa-share-alt'></i></a>
{{if count( $item->commentMultimodActions() ) and !$comment->mapped('first')}}
&middot; <input type="checkbox" name="multimod[{$comment->$idField}]" value="1" data-role="moderation" data-actions="{{if $comment->canSplit()}}split merge{{endif}} {{if $comment->hidden() === -1 AND $comment->canUnhide()}}unhide{{elseif $comment->hidden() === 1 AND $comment->canUnhide()}}approve{{elseif $comment->canHide()}}hide{{endif}} {{if $comment->canDelete()}}delete{{endif}}" data-state='{{if $comment->tableStates()}}{$comment->tableStates()}{{endif}}'>
&middot;
<span class='ipsCustomInput'>
<input type="checkbox" name="multimod[{$comment->$idField}]" value="1" data-role="moderation" data-actions="{{if $comment->canSplit()}}split merge{{endif}} {{if $comment->hidden() === -1 AND $comment->canUnhide()}}unhide{{elseif $comment->hidden() === 1 AND $comment->canUnhide()}}approve{{elseif $comment->canHide()}}hide{{endif}} {{if $comment->canDelete()}}delete{{endif}}" data-state='{{if $comment->tableStates()}}{$comment->tableStates()}{{endif}}'>
<span></span>
</span>
{{endif}}
</p>
<p class='ipsType_reset'>
{$comment->dateLine()|raw}
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->$idField ) )}' class='ipsType_blendLinks' title='{lang="share_this_comment"}'>{$comment->dateLine()|raw}</a>
{{if $comment->editLine()}}
({lang="edited_lc"})
{{endif}}
@@ -1462,11 +1529,7 @@
{{endif}}
<div class='cPost_contentWrap ipsPad'>
{{if settings.reputation_highlight and $comment->reputation() >= settings.reputation_highlight}}
<strong class='ipsComment_popularFlag' data-ipsTooltip title='{lang="this_is_a_popular_post"}'><i class='fa fa-star'></i></strong>
{{endif}}
<div class='cPost_contentWrap ipsPad'>
<div data-role='commentContent' itemprop='text' class='ipsType_normal ipsType_richText ipsContained' data-controller='core.front.core.lightboxedImages'>
{$comment->content()|raw}
@@ -1584,7 +1647,7 @@
{{if $item->isQuestion() and !$comment->new_topic}}
{template="postRating" group="topics" app="forums" params="$item, $comment, $votes"}
{{endif}}
<aside class='ipsComment_author cAuthorPane ipsAreaBackground_light ipsColumn ipsColumn_medium'>
<aside class='ipsComment_author cAuthorPane ipsColumn ipsColumn_medium'>
<h3 class='ipsType_sectionHead cAuthorPane_author ipsType_blendLinks ipsType_break' itemprop="creator" itemscope itemtype="http://schema.org/Person"><strong itemprop="name">{$comment->author()->link( $comment->warningRef() )|raw}</strong> <span class='ipsResponsive_showPhone ipsResponsive_inline'>&nbsp;&nbsp;{template="reputationBadge" group="global" app="core" params="$comment->author()"}</span></h3>
<ul class='cAuthorPane_info ipsList_reset'>
{{if $comment->author()->member_title && $comment->author()->member_id}}
@@ -1620,7 +1683,7 @@
</div>
</article>]]></template>
<template template_group="topics" template_name="postRating" template_data="$item, $comment, $votes=array()" template_location="front" template_app="forums"><![CDATA[{{$idField = $comment::$databaseColumnId;}}
<div class='cRatingColumn {{if $comment->post_bwoptions['best_answer']}}cRatingColumn_on{{else}}ipsAreaBackground_light{{endif}} {{if isset( $votes[ $comment->$idField ] ) && $votes[ $comment->$idField ] === 1}}cRatingColumn_up{{elseif isset( $votes[ $comment->$idField ] ) && $votes[ $comment->$idField ] === -1}}cRatingColumn_down{{endif}} ipsColumn ipsColumn_narrow ipsType_center' data-controller='forums.front.topic.answers'>
<div class='cRatingColumn {{if $comment->post_bwoptions['best_answer']}}cRatingColumn_on{{else}}ipsAreaBackground{{endif}} {{if isset( $votes[ $comment->$idField ] ) && $votes[ $comment->$idField ] === 1}}cRatingColumn_up{{elseif isset( $votes[ $comment->$idField ] ) && $votes[ $comment->$idField ] === -1}}cRatingColumn_down{{endif}} ipsColumn ipsColumn_narrow ipsType_center' data-controller='forums.front.topic.answers'>
<meta itemprop="upvoteCount" content="{$comment->post_field_int}">
<ul class='ipsList_reset'>
@@ -1721,7 +1784,7 @@
<div class='ipsColumn ipsColumn_fluid'>
{{endif}}
<div class="ipsPageHeader ipsClearfix">
{{if !$topic->isArchived()}}
{{if !$topic->isArchived() and !$topic->container()->password}}
<div class='ipsPos_right ipsResponsive_noFloat ipsResponsive_hidePhone'>
{template="follow" app="core" group="global" params="'forums', 'topic', $topic->tid, $topic->followersCount()"}
</div>
@@ -1730,14 +1793,6 @@
{template="userPhoto" group="global" app="core" params="$topic->author(), 'small', $topic->warningRef()"}
<div>
<h1 class='ipsType_pageTitle'>
{{if $topic->prefix()}}
{template="prefix" group="global" app="core" params="$topic->prefix( TRUE ), $topic->prefix()"}
{{endif}}
{{if $topic->isQuestion()}}
<span itemprop="name">{wordbreak="$topic->title"}</span>
{{else}}
{wordbreak="$topic->title"}
{{endif}}
{{if $topic->mapped('pinned') || $topic->mapped('featured') || $topic->hidden() === -1 || $topic->hidden() === 1}}
{{if $topic->hidden() === -1}}
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$topic->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span>
@@ -1750,13 +1805,21 @@
{{if $topic->mapped('featured')}}
<span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span>
{{endif}}
{{endif}}
{{endif}}
{{if $topic->prefix()}}
{template="prefix" group="global" app="core" params="$topic->prefix( TRUE ), $topic->prefix()"}
{{endif}}
{{if $topic->isQuestion()}}
<span itemprop="name">{wordbreak="$topic->title"}</span>
{{else}}
{wordbreak="$topic->title"}
{{endif}}
</h1>
<p class='ipsType_reset ipsType_blendLinks'>
<p class='ipsType_reset ipsType_blendLinks {{if count( $topic->tags() )}}ipsSpacer_bottom ipsSpacer_half{{endif}}'>
<span class='ipsType_normal'>{{if $topic->isQuestion()}}{lang="ask_byline_no_date" htmlsprintf="$topic->author()->link( $topic->warningRef() )"}{{else}}{lang="topic_started_by" htmlsprintf="$topic->author()->link( $topic->warningRef() )"}{{endif}}</span>, <span class='ipsType_light ipsType_noBreak'>{datetime="$topic->start_date"}</span><br>
</p>
{{if count( $topic->tags() )}}
<br>
{template="tags" group="global" app="core" params="$topic->tags()"}
{{endif}}
</div>
@@ -1782,7 +1845,7 @@
<div class='ipsClearfix'>
{{if $topic->container()->forum_allow_rating}}
<div class='ipsAreaBackground ipsAreaBackground_rounded ipsPad_half ipsPos_left ipsType_light ipsResponsive_hidePhone'>
<div class='ipsPad_half ipsPos_left ipsType_light ipsResponsive_hidePhone'>
{{if $topic->canRate()}}
<p class='ipsType_reset ipsType_center ipsType_small'>
{{if $topic->isQuestion()}}{lang="rate_this_question"}{{else}}{lang="rate_this_topic"}{{endif}}
@@ -1813,7 +1876,7 @@
{{endif}}
</li>
{{endif}}
{{if $topic->canPin() or $topic->canUnpin() or $topic->canFeature() or $topic->canUnfeature() or $topic->canHide() or $topic->canUnhide() or $topic->canMove() or $topic->canLock() or $topic->canUnlock() or $topic->canDelete() or $topic->availableSavedActions()}}
{{if $topic->canPin() or $topic->canUnpin() or $topic->canFeature() or $topic->canUnfeature() or $topic->canHide() or $topic->canUnhide() or $topic->canMove() or $topic->canLock() or $topic->canUnlock() or $topic->canDelete() or $topic->availableSavedActions() or $topic->canMerge() or $topic->canUnarchive() or \IPS\Member::loggedIn()->modPermission('can_view_moderation_log')}}
<li>
<a href='#elTopicActions_menu' id='elTopicActions' class='ipsButton ipsButton_link ipsButton_medium ipsButton_fullWidth' data-ipsMenu>{lang="moderator_actions"} <i class='fa fa-caret-down'></i></a>
<ul id='elTopicActions_menu' class='ipsMenu ipsMenu_auto ipsHide'>
@@ -1872,10 +1935,12 @@
{$poll|raw}
<br>
{{endif}}
<div data-controller='core.front.core.commentFeed,forums.front.topic.view' data-baseURL='{$topic->url()}' {{if $topic->isLastPage() and !$topic->isQuestion()}}data-lastPage{{endif}} data-feedID='topic-{$topic->tid}' class='cTopic ipsClear ipsSpacer_top'>
<div data-controller='core.front.core.commentFeed,forums.front.topic.view' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-baseURL='{$topic->url()}' {{if $topic->isLastPage() and !$topic->isQuestion()}}data-lastPage{{endif}} data-feedID='topic-{$topic->tid}' class='cTopic ipsClear ipsSpacer_top'>
{{if $topic->isQuestion() && $question}}
<h2 class='ipsType_sectionTitle ipsType_reset'>{lang="question_title"}</h2>
{template="postContainer" group="topics" app="forums" params="$topic, $question, $votes, 'cPostQuestion'"}
<div class='ipsAreaBackground_light ipsPad'>
{template="postContainer" group="topics" app="forums" params="$topic, $question, $votes, 'cPostQuestion'"}
</div>
<div class='ipsBox ipsSpacer_top'>
<h2 class='ipsType_sectionTitle ipsType_reset ipsType_medium'><meta itemprop="answerCount" content="{expression="$topic->posts - 1"}">{lang="answer_count" pluralize="( $topic->posts ) ? $topic->posts - 1 : 0"}</h2>
@@ -1901,7 +1966,7 @@
{{endif}}
{{endif}}
<div data-role='commentFeed' data-controller='core.front.core.moderation'>
<div data-role='commentFeed' data-controller='core.front.core.moderation' class='ipsAreaBackground_light ipsPad'>
<form action="{$topic->url()->csrf()->setQueryString( 'do', 'multimodComment' )}" method="post" data-ipsPageAction data-role='moderationTools'>
{{$postCount=0; $timeLastRead = $topic->timeLastRead(); $lined = FALSE;}}
{{if count( $comments )}}
@@ -1957,7 +2022,7 @@
</div>
{{endif}}
{{if !$topic->isArchived()}}
{{if !$topic->isArchived() and !$topic->container()->password}}
<div class='ipsResponsive_noFloat ipsResponsive_showPhone ipsResponsive_block ipsSpacer_top'>
{template="follow" app="core" group="global" params="'forums', 'topic', $topic->tid, $topic->followersCount()"}
</div>
@@ -1968,6 +2033,62 @@
</div>
{{endif}}
{{if $topic->canPin() or $topic->canUnpin() or $topic->canFeature() or $topic->canUnfeature() or $topic->canHide() or $topic->canUnhide() or $topic->canMove() or $topic->canLock() or $topic->canUnlock() or $topic->canDelete() or $topic->availableSavedActions()}}
<ul class="ipsToolList ipsToolList_horizontal ipsClearfix ipsSpacer_top ipsResponsive_hidePhone">
<li>
<a href='#elTopicActions_menu' id='elTopicActions' class='ipsButton ipsButton_link ipsButton_medium ipsButton_fullWidth' data-ipsMenu>{lang="moderator_actions"} <i class='fa fa-caret-down'></i></a>
<ul id='elTopicActions_menu' class='ipsMenu ipsMenu_auto ipsHide'>
{{if $topic->canFeature()}}
<li class='ipsMenu_item'><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'feature' ) )}'>{lang="feature"}</a></li>
{{endif}}
{{if $topic->canUnfeature()}}
<li class='ipsMenu_item'><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unfeature' ) )}' >{lang="unfeature"}</a></li>
{{endif}}
{{if $topic->canPin()}}
<li class='ipsMenu_item'><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'pin' ) )}' >{lang="pin"}</a></li>
{{endif}}
{{if $topic->canUnpin()}}
<li class='ipsMenu_item'><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unpin' ) )}' >{lang="unpin"}</a></li>
{{endif}}
{{if $topic->canHide()}}
<li class='ipsMenu_item'><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}' data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
{{endif}}
{{if $topic->canUnhide()}}
<li class='ipsMenu_item'><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unhide' ) )}' >{{if $topic->hidden() === 1}}{lang="approve"}{{else}}{lang="unhide"}{{endif}}</a></li>
{{endif}}
{{if $topic->canLock()}}
<li class='ipsMenu_item'><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'lock' ) )}' >{lang="lock"}</a></li>
{{endif}}
{{if $topic->canUnlock()}}
<li class='ipsMenu_item'><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unlock' ) )}' >{lang="unlock"}</a></li>
{{endif}}
{{if $topic->canMove()}}
<li class='ipsMenu_item'><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'move' ) )}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title="{lang="move"}" >{lang="move"}</a></li>
{{endif}}
{{if $topic->canMerge()}}
<li class='ipsMenu_item'><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'merge' ) )}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title="{lang="merge"}" >{lang="merge"}</a></li>
{{endif}}
{{if $topic->canUnarchive()}}
<li class='ipsMenu_item'><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'unarchive' ) )}' data-confirm data-confirmSubMessage="{$topic->unarchiveBlurb()}" >{lang="unarchive"}</a></li>
{{endif}}
{{if $topic->canDelete()}}
<li class='ipsMenu_item'><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'delete' ) )}' data-confirm >{lang="delete"}</a></li>
{{endif}}
{{if !$topic->isArchived() and $topic->availableSavedActions()}}
<li class='ipsMenu_sep'><hr></li>
{{foreach $topic->availableSavedActions() as $action}}
<li class="ipsMenu_item"><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'savedAction', 'action' => $action->_id ) )}' data-confirm>{$action->_title}</a></li>
{{endforeach}}
{{endif}}
{{if \IPS\Member::loggedIn()->modPermission('can_view_moderation_log')}}
<li class='ipsMenu_sep'><hr></li>
<li class="ipsMenu_item"><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
{{endif}}
</ul>
</li>
</ul>
{{endif}}
<div class='ipsGrid ipsGrid_collapsePhone ipsPager ipsClearfix ipsSpacer_top'>
<div class="ipsGrid_span6 ipsType_left ipsPager_prev">
<a href="{$topic->container()->url()}" title="{lang="go_to_forum" sprintf="$topic->container()->_title"}" rel="up">
@@ -2038,7 +2159,7 @@
</div>
<div class='ipsDataItem_main'>
<div class="ipsCommentCount ipsPos_right {{if ( $topic->posts - 1 ) === 0}}ipsFaded{{endif}}" data-ipsTooltip title='{lang="replies_number" pluralize="$topic->posts - 1"}'>{expression="$topic->posts - 1"}</div>
<a href="{$topic->url()->setQueryString( 'do', 'getLastComment' )}" title='{lang="view_this_topic" sprintf="$topic->title"}' class='ipsDataItem_title ipsType_break'>{wordbreak="$topic->title"}</a>
<a href="{$topic->url()->setQueryString( 'do', 'getNewComment' )}" title='{lang="view_this_topic" sprintf="$topic->title"}' class='ipsDataItem_title ipsType_break'>{wordbreak="$topic->title"}</a>
{{if $topic->mapped('featured') || $topic->hidden() === -1 || $topic->hidden() === 1}}
<span>
{{if $topic->hidden() === -1}}
@@ -2067,6 +2188,92 @@
</ul>
</div>
{{endif}}
{{endif}}]]></template>
<template template_group="widgets" template_name="poll" template_data="$topic, $poll, $orientation='vertical'" template_location="front" template_app="forums">{$poll|raw}
</template>
<template template_group="widgets" template_name="pollFormWidget" template_data="$url, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="front" template_app="forums"><![CDATA[<form accept-charset='utf-8' class="ipsForm {$class}" action="{$url->setQueryString( 'do', 'widgetPoll' )}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
<input type="hidden" name="{$id}_submitted" value="1">
{{foreach $hiddenValues as $k => $v}}
<input type="hidden" name="{$k}" value="{$v}">
{{endforeach}}
{{foreach $elements as $collection}}
<ol class='ipsList_reset cPollList cPollList_questions'>
{{foreach $collection as $idx => $input}}
<li class='ipsFieldRow ipsFieldRow_noLabel'>
<h4 class='ipsType_normal ipsType_reset'>{$idx}. {wordbreak="$input->label"}</h4>
{{if !$input->options['multiple']}}
{template="radio" app="core" location="global" group="forms" params="$input->name, $input->value, $input->required, $input->options['options'], $input->options['disabled'], '', $input->options['disabled']"}
{{else}}
{template="checkboxset" app="core" location="global" group="forms" params="$input->name, $input->value, $input->required, $input->options['options'], $input->options['disabled'], $input->options['toggles'], isset( $input->options['descriptions'] ) ? $input->options['descriptions'] : NULL, $input->options['userSuppliedInput']"}
{{endif}}
{{if $input->error}}
<br>
<span class="ipsType_warning">{lang="$input->error"}</span>
{{endif}}
</li>
{{endforeach}}
</ol>
<br>
<a class='ipsType_light ipsType_break' href="{$url}">{lang="poll_view_topic"}</a>
<br>
{{endforeach}}
<hr class='ipsHr'>
<ul class="ipsPos_left ipsToolList ipsToolList_horizontal ipsList_reset ipsClearfix">
{{foreach $actionButtons as $button}}
<li>{$button|raw}</li>
{{endforeach}}
<li><a class='ipsButton ipsButton_link' title='{lang="show_results_title"}' href="{$url->setQueryString( '_poll', 'results' )}" {{if !settings.allow_result_view}}data-viewResults-confirm="{lang="warn_allow_result_view"}"{{endif}} data-action='viewResults'>{lang="show_results"}</a></li>
</ul>
</form>]]></template>
<template template_group="widgets" template_name="pollWidget" template_data="$poll, $url" template_location="front" template_app="forums"><![CDATA[{{if !isset( \IPS\Request::i()->fetchPoll )}}
<section class='ipsBox' data-controller='core.front.core.poll'>
{{endif}}
{{if $poll->canVote() and request._poll != 'results' and ( !$poll->getVote() or request._poll == 'form') and $pollForm = $poll->buildForm()}}
<h3 class='ipsWidget_title ipsType_reset'>
{wordbreak="$poll->poll_question"}&nbsp;&nbsp;
<span class='ipsType_small ipsType_light'>{lang="poll_num_votes" pluralize="$poll->votes"}</span>
</h2>
<div class='ipsPad_half ipsWidget_inner ipsClearfix' data-role='pollContents'>
{$pollForm->customTemplate( array( \IPS\Theme::i()->getTemplate( 'widgets', 'forums', 'front' ), 'pollFormWidget' ), $url )|raw}
</div>
{{elseif !$poll->canVote() or $poll->getVote() or ( request._poll == 'results' and settings.allow_result_view )}}
<h3 class='ipsWidget_title ipsType_reset'>
{wordbreak="$poll->poll_question"}&nbsp;&nbsp;
<span class='ipsType_small ipsType_light'>{lang="poll_num_votes" pluralize="$poll->votes"}</span>
</h3>
<div class='ipsPad_half ipsWidget_inner ipsClearfix' data-role='pollContents'>
<ol class='ipsList_reset cPollList'>
{{foreach $poll->choices as $questionId => $question}}
<li>
<h3 class='ipsType_normal ipsType_reset'>{$questionId}. {wordbreak="$question['question']"}</h3>
<br>
<ul class='ipsList_reset cPollList_choices'>
{{foreach $question['choice'] as $k => $choice}}
<li class='ipsGrid ipsGrid_collapsePhone'>
<div class='ipsGrid_span4 ipsType_right ipsType_richText ipsType_small ipsType_break'>
{$choice|raw}
</div>
<div class='ipsGrid_span7'>
<span class='cPollVoteBar'>
<span style='width: {{if $poll->votes}}{expression="intval( ( $question['votes'][ $k ] / $poll->votes ) * 100 )"}{{else}}0{{endif}}%' data-votes='{{if $poll->votes}}{expression="round( ( $question['votes'][ $k ] / $poll->votes ) * 100, 2 )"}{{else}}0{{endif}}%' {{if $poll->votes && intval( ( $question['votes'][ $k ] / $poll->votes ) * 100 ) > 30}}class='cPollVoteBar_inside'{{endif}}></span>
</span>
</div>
</li>
{{endforeach}}
</ul>
</li>
{{endforeach}}
</ol>
{{if $poll->canVote() || !member.member_id}}
<hr class='ipsHr'>
{{if $poll->canVote()}}<a href="{$url->setQueryString( '_poll', 'form' )}" title='{lang="show_vote_options"}' class='ipsButton ipsButton_verySmall ipsButton_light' data-action='viewResults'><i class='fa fa-caret-left'></i> {lang="show_vote_options"}</a>{{endif}}
{{if !member.member_id}}{lang="poll_guest" htmlsprintf="\IPS\Http\Url::internal( 'app=core&module=system&controller=login', 'front', 'login' ), \IPS\Http\Url::internal( 'app=core&module=system&controller=register', 'front', 'register' )"}{{endif}}
{{endif}}
<a class='ipsPos_right ipsType_light ipsType_small ipsType_break' href="{$url}">{lang="poll_view_topic"}</a>
</div>
{{endif}}
{{if !isset( \IPS\Request::i()->fetchPoll )}}
</section>
{{endif}}]]></template>
<template template_group="widgets" template_name="postFeed" template_data="$comments, $title, $orientation='vertical'" template_location="front" template_app="forums"><![CDATA[{{if !empty( $comments ) }}
<h3 class='ipsType_reset ipsWidget_title'>{$title}</h3>
@@ -2079,9 +2286,9 @@
{template="userPhoto" group="global" app="core" params="$comment->author(), 'tiny'"}
</div>
<div class='ipsDataItem_main'>
<a href="{$comment->url()}" title='{lang="view_this_topic" sprintf="$comment->item()->title"}' class='ipsDataItem_title ipsType_break'>{wordbreak="$comment->item()->title"}</a><br>
<span class='ipsType_light ipsType_small'>{lang="byline_nodate" htmlsprintf="$comment->author()->link()"} &middot; {$comment->dateLine()|raw}</span>
<div class='ipsType_small ipsType_textBlock ipsType_richText ipsType_break' data-ipsTruncate data-ipsTruncate-type='remove' data-ipsTruncate-size='{{if $orientation == 'vertical'}}6 lines{{else}}2 lines{{endif}}'>
<a href="{$comment->url()}" title='{lang="view_this_topic" sprintf="$comment->item()->title"}' class='ipsType_medium ipsType_break'>{wordbreak="$comment->item()->title"}</a><br>
<p class='ipsType_reset ipsType_light ipsType_medium ipsType_blendLinks'>{lang="byline_nodate" htmlsprintf="$comment->author()->link()"} &middot; <a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' class='ipsType_blendLinks' title='{lang="share_this_comment"}'>{$comment->dateLine()|raw}</a></p>
<div class='ipsType_medium ipsType_textBlock ipsType_richText ipsType_break ipsContained ipsSpacer_top ipsSpacer_half' data-ipsTruncate data-ipsTruncate-type='remove' data-ipsTruncate-size='{{if $orientation == 'vertical'}}6 lines{{else}}2 lines{{endif}}'>
{$comment->truncated( true )|raw}
</div>
</div>
@@ -2093,55 +2300,54 @@
<div class='ipsWidget_inner'>
<ul class='ipsDataList'>
{{foreach $comments as $comment}}
<div class='ipsComment_header ipsPhotoPanel ipsPhotoPanel_mini'>
{template="userPhoto" app="core" group="global" params="$comment->author(), 'mini', $comment->warningRef()"}
<div>
<p class='ipsPos_right ipsType_reset ipsType_blendLinks'>
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' data-ipsTooltip title='{lang="share_this_comment"}' data-ipsMenu data-ipsMenu-closeOnClick='false' id='elShareComment_{$comment->id}'><i class='fa fa-share-alt'></i></a>
</p>
<h3 class='ipsComment_author ipsType_blendLinks'>
<strong class='ipsType_normal'>{template="userLink" app="core" group="global" params="$comment->author(), $comment->warningRef()"}</strong>
{template="reputationBadge" group="global" app="core" params="$comment->author()"}
</h3>
<p class='ipsComment_meta ipsType_light ipsType_medium'>
{$comment->dateLine()|raw}
{{if $comment->editLine()}}
({lang="edited_lc"})
{{endif}}
{{if $comment->hidden()}}
&middot; {$comment->hiddenBlurb()}
{{endif}}
{{if $comment instanceof \IPS\Content\ReportCenter and !\IPS\Member::loggedIn()->group['gbw_no_report'] and $comment->hidden() !== 1 }}
&middot; <a href='{$comment->url('report')}' data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}" data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a>
{{endif}}
</p>
{{if member.modPermission('mod_see_warn') and $comment->warning}}
{template="commentWarned" group="global" app="core" params="$comment"}
{{endif}}
</div>
</div>
<div class='ipsPad'>
{{if in_array( 'IPS\Content\Reputation', class_implements( $comment ) ) and settings.reputation_highlight and $comment->reputation() >= settings.reputation_highlight}}
<strong class='ipsComment_popularFlag' data-ipsTooltip title='{lang="this_is_a_popular_comment"}'><i class='fa fa-star'></i></strong>
{{endif}}
<a href="{$comment->url()}" title='{lang="view_this_topic" sprintf="$comment->item()->title"}' class='ipsDataItem_title ipsType_break'>{wordbreak="$comment->item()->title"}</a><br>
<div data-role='commentContent' class='ipsType_normal ipsType_richText ipsType_break ipsContained' data-controller='core.front.core.lightboxedImages'>
{{if $comment->hidden() === 1 && $comment->author()->member_id == \IPS\Member::loggedIn()->member_id}}
<strong class='ipsType_medium ipsType_warning'><i class='fa fa-info-circle'></i> {lang="comment_awaiting_approval"}</strong>
{{endif}}
{$comment->content()|raw}
{{if $comment->editLine()}}
{$comment->editLine()|raw}
{{endif}}
</div>
<li class='ipsDataItem ipsClearfix'>
<div class='ipsComment_header ipsPhotoPanel ipsPhotoPanel_mini'>
{template="userPhoto" app="core" group="global" params="$comment->author(), 'mini', $comment->warningRef()"}
<div>
<p class='ipsPos_right ipsType_reset ipsType_blendLinks'>
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' data-ipsTooltip title='{lang="share_this_comment"}' data-ipsMenu data-ipsMenu-closeOnClick='false' id='elShareComment_{$comment->id}' data-role='shareComment'><i class='fa fa-share-alt'></i></a>
</p>
<h3 class='ipsComment_author ipsType_blendLinks'>
<strong class='ipsType_normal'>{template="userLink" app="core" group="global" params="$comment->author(), $comment->warningRef()"}</strong>
{template="reputationBadge" group="global" app="core" params="$comment->author()"}
</h3>
<p class='ipsComment_meta ipsType_light ipsType_medium'>
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' class='ipsType_blendLinks' title='{lang="share_this_comment"}'>{$comment->dateLine()|raw}</a>
{{if $comment->editLine()}}
({lang="edited_lc"})
{{endif}}
{{if $comment->hidden()}}
&middot; {$comment->hiddenBlurb()}
{{endif}}
{{if $comment instanceof \IPS\Content\ReportCenter and !\IPS\Member::loggedIn()->group['gbw_no_report'] and $comment->hidden() !== 1 }}
&middot; <a href='{$comment->url('report')}' data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}" data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a>
{{endif}}
</p>
{{if $comment->hidden() !== 1 && $comment instanceof \IPS\Content\Reputation and settings.reputation_enabled}}
{template="reputation" group="global" app="core" params="$comment, 'ipsPos_right ipsResponsive_noFloat'"}
{{endif}}
</div>
{{if member.modPermission('mod_see_warn') and $comment->warning}}
{template="commentWarned" group="global" app="core" params="$comment"}
{{endif}}
</div>
</div>
<div class='ipsPad ipsClearfix'>
<a href="{$comment->url()}" title='{lang="view_this_topic" sprintf="$comment->item()->title"}' class='ipsDataItem_title ipsType_break'>{wordbreak="$comment->item()->title"}</a><br>
<div data-role='commentContent' class='ipsType_normal ipsType_richText ipsType_break ipsContained' data-controller='core.front.core.lightboxedImages'>
{{if $comment->hidden() === 1 && $comment->author()->member_id == \IPS\Member::loggedIn()->member_id}}
<strong class='ipsType_medium ipsType_warning'><i class='fa fa-info-circle'></i> {lang="comment_awaiting_approval"}</strong>
{{endif}}
{$comment->content()|raw}
{{if $comment->editLine()}}
{$comment->editLine()|raw}
{{endif}}
</div>
{{if $comment->hidden() !== 1 && $comment instanceof \IPS\Content\Reputation and settings.reputation_enabled}}
{template="reputation" group="global" app="core" params="$comment, 'ipsPos_right ipsResponsive_noFloat'"}
{{endif}}
</div>
</li>
{{endforeach}}
</ul>
</div>
@@ -2161,7 +2367,6 @@
</div>
<div class='ipsDataItem_main'>
<div class="ipsCommentCount ipsPos_right {{if ( $topic->posts - 1 ) === 0}}ipsFaded{{endif}}" data-ipsTooltip title='{lang="replies_number" pluralize="$topic->posts - 1"}'>{expression="$topic->posts - 1"}</div>
<a href="{$topic->url()->setQueryString( 'do', 'getLastComment' )}" title='{lang="view_this_topic" sprintf="$topic->title"}' class='ipsDataItem_title ipsType_break'>{wordbreak="$topic->title"}</a>
{{if $topic->mapped('featured') || $topic->hidden() === -1 || $topic->hidden() === 1}}
<span>
{{if $topic->hidden() === -1}}
@@ -2174,8 +2379,12 @@
{{endif}}
</span>
{{endif}}
<a href="{$topic->url()->setQueryString( 'do', 'getNewComment' )}" title='{lang="view_this_topic" sprintf="$topic->title"}' class='ipsDataItem_title ipsType_break'>{wordbreak="$topic->title"}</a>
<br>
<span class='ipsType_light ipsType_small'>{lang="byline_nodate" htmlsprintf="$topic->author()->link()"} &middot; {lang="topic_started_date" htmlsprintf="\IPS\DateTime::ts( $topic->mapped('date') )->html()"}</span>
<p class='ipsType_reset ipsType_medium ipsType_blendLinks'>
<span>{lang="byline_nodate" htmlsprintf="$topic->author()->link()"}</span><br>
<span class='ipsType_light'>{lang="topic_started_date" htmlsprintf="\IPS\DateTime::ts( $topic->mapped('date') )->html()"}</span>
</p>
</div>
</li>
{{endforeach}}
@@ -2238,10 +2447,8 @@
padding: 15px;
}
html[dir=&quot;ltr&quot;] .cPost .ipsComment_content {
html[dir] .cPost .ipsComment_content {
padding-left: 7px;
}
html[dir=&quot;rtl&quot;] .cPost .ipsComment_content {
padding-right: 7px;
}
@@ -2363,8 +2570,7 @@
border-bottom: 1px solid rgba(0,0,0,0.05);
}
.cForumTopicTable .ipsDataItem_title,
#elVNC_main .ipsDataItem_title {
.cForumTopicTable .ipsDataItem_title {
display: inline;
}
@@ -2415,7 +2621,7 @@ html[dir="rtl"] .cTopicList .ipsDataItem_icon {
}
.cTopicList .ipsDataItem_main {
padding: 10px;
padding: 12px 10px;
}
.cTopicHovercard .cTopicHovercard_container {
@@ -2447,13 +2653,6 @@ html[dir="rtl"] .cTopicList .ipsDataItem_icon {
padding-top: 0 !important;
}
html[dir="ltr"] .cRatingColumn {
border-right: 1px solid rgba(0,0,0,0.1);
}
html[dir="rtl"] .cRatingColumn {
border-left: 1px solid rgba(0,0,0,0.1);
}
.cRatingColumn_on {
background: #e4ecdd;
}
@@ -2555,11 +2754,11 @@ html[dir="rtl"] .cAnswerRate {
}
.cBestAnswerIndicator_off {
background: #e5e5e5;
background: #d4d4d4;
}
.cBestAnswerIndicator_off:hover {
background: #d4d4d4;
background: #c9c9c9;
color: #fff;
}
@@ -2579,8 +2778,8 @@ html[dir="rtl"] .cAnswerRate {
background: {theme="moderated"};
}
.cTopic .cPost:nth-of-type(1) {
border-top: 0;
.cTopic .cPost.ipsComment:last-of-type {
margin-bottom: 0;
}
.cPost.cPostQuestion {
@@ -2594,6 +2793,13 @@ html[dir="rtl"] .cPost .ipsComment_meta {
padding: 15px 0px 10px 10px;
}
html[dir="ltr"] .cPost.ipsComment_popular .ipsComment_meta {
padding-right: 60px;
}
html[dir="rtl"] .cPost.ipsComment_popular .ipsComment_meta {
padding-left: 60px;
}
.cPost .ipsComment_controls {
margin: 0;
padding: 0;
@@ -2635,11 +2841,12 @@ html[dir="rtl"] .cPost .ipsComment_content {
display: block;
/* http://community.invisionpower.com/4bugtrack/infopane-display-name-split-r1164/ */
/*word-break: break-all;*/
line-height: 1.1;
line-height: 1.2;
word-wrap: initial;
overflow: hidden;
text-overflow: ellipsis;
-moz-hyphens: initial;
margin-bottom: 3px;
}
.cAuthorPane_info .ipsRepBadge {
+14 -1
View File
@@ -45,5 +45,18 @@
"100042": "4.0.12",
"100043": "4.0.12.1",
"100044": "4.0.13",
"100045": "4.0.13.1"
"100045": "4.0.13.1",
"101000": "4.1.0 Beta 1",
"101001": "4.1.0 Beta 2",
"101002": "4.1.0 Beta 3",
"101003": "4.1.0 Beta 4",
"101004": "4.1.0 Beta 5",
"101005": "4.1.0 Beta 6",
"101006": "4.1.0 Beta 7",
"101007": "4.1.0 Beta 8",
"101008": "4.1.0 Beta 9",
"101009": "4.1.0 Beta 10",
"101010": "4.1.0",
"101011": "4.1.1",
"101012": "4.1.2"
}
+45 -1
View File
@@ -1 +1,45 @@
{"forumStatistics":{"class":"\\IPS\\Widget\\PermissionCache","restrict":[],"default_area":"","allow_reuse":false,"menu_style":"menu","embeddable":true},"hotTopics":{"class":"\\IPS\\Widget\\PermissionCache","restrict":[],"default_area":"","allow_reuse":false,"menu_style":"menu","embeddable":true},"topicFeed":{"class":"\\IPS\\Widget\\PermissionCache","restrict":[],"default_area":"","allow_reuse":true,"menu_style":"modal","embeddable":true},"postFeed":{"class":"\\IPS\\Widget\\PermissionCache","restrict":[],"default_area":"","allow_reuse":true,"menu_style":"modal","embeddable":true}}
{
"forumStatistics": {
"class": "\\IPS\\Widget\\PermissionCache",
"restrict": [],
"default_area": "",
"allow_reuse": false,
"menu_style": "menu",
"embeddable": true
},
"hotTopics": {
"class": "\\IPS\\Widget\\PermissionCache",
"restrict": [],
"default_area": "",
"allow_reuse": false,
"menu_style": "menu",
"embeddable": true
},
"topicFeed": {
"class": "\\IPS\\Widget\\PermissionCache",
"restrict": [],
"default_area": "",
"allow_reuse": true,
"menu_style": "modal",
"embeddable": true
},
"postFeed": {
"class": "\\IPS\\Widget\\PermissionCache",
"restrict": [],
"default_area": "",
"allow_reuse": true,
"menu_style": "modal",
"embeddable": true
},
"poll": {
"class": "\\IPS\\Widget\\PermissionCache",
"restrict": [
"sidebar",
"cms"
],
"default_area": "",
"allow_reuse": true,
"menu_style": "modal",
"embeddable": true
}
}