Version 4.7.0
This commit is contained in:
1 parent
517a5e1f70
commit
8ba7d43898
1933 files changed
+65613
-11332
No files matched your search
@@ -31,7 +31,7 @@ class _Application extends \IPS\Application
|
||||
if( \IPS\Request::i()->member AND \IPS\Request::i()->key )
|
||||
{
|
||||
$member = \IPS\Member::load( \IPS\Request::i()->member );
|
||||
if( !\IPS\Login::compareHashes( md5( ( $member->members_pass_hash ?: $member->email ) . $member->members_pass_salt ), (string) \IPS\Request::i()->key ) )
|
||||
if( !\IPS\Login::compareHashes( $member->getUniqueMemberHash(), (string) \IPS\Request::i()->key ) )
|
||||
{
|
||||
$member = NULL;
|
||||
}
|
||||
@@ -143,7 +143,7 @@ class _Application extends \IPS\Application
|
||||
}
|
||||
else
|
||||
{
|
||||
$clause = array( '(last_post > 0 AND last_post' . $rule['archive_value'] . ' ?)', \IPS\DateTime::create()->sub( new \DateInterval( 'P' . trim( $rule['archive_text'] ) . mb_strtoupper( $rule['archive_unit'] ) ) )->getTimestamp() );
|
||||
$clause = array( '(last_post > 0 AND last_post ' . $rule['archive_value'] . ' ?)', \IPS\DateTime::create()->sub( new \DateInterval( 'P' . trim( $rule['archive_text'] ) . mb_strtoupper( $rule['archive_unit'] ) ) )->getTimestamp() );
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -334,15 +334,4 @@ class _Application extends \IPS\Application
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an array of specific links to add to the sitemap
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function sitemapLinks()
|
||||
{
|
||||
return array(
|
||||
\IPS\Http\Url::internal( 'app=forums&module=forums&controller=index', 'front', 'forums' ),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -79,7 +79,7 @@ class _forums extends \IPS\Node\Api\NodeController
|
||||
* @apiparam int min_content The minimum amount of posts to be able to view
|
||||
* @apiparam int can_see_others 0|1 Users can see topics posted by other users?
|
||||
* @apiparam object permissions An object with the keys as permission options (view, read, add, reply, attachments) and values as permissions to use (which may be * to grant access to all groups, or an array of group IDs to permit access to)
|
||||
* @apiparam string redirect_url If creating a redirect forum, the URL to redirect too.
|
||||
* @apiparam string redirect_url If creating a redirect forum, the URL to redirect to.
|
||||
* @return \IPS\forums\Forum
|
||||
* @throws 1F363/2 NO_TITLE A title for the forum must be supplied
|
||||
* @throws 1F363/3 NO_REDIRECT_URL No redirect URL supplied.
|
||||
@@ -162,46 +162,51 @@ class _forums extends \IPS\Node\Api\NodeController
|
||||
}
|
||||
}
|
||||
|
||||
$forum->parent_id = (int) \IPS\Request::i()->parent ?: -1;
|
||||
|
||||
if ( !isset( \IPS\Request::i()->type ) )
|
||||
if( isset( \IPS\Request::i()->parent ) )
|
||||
{
|
||||
if ( $forum->parent_id === -1 )
|
||||
$forum->parent_id = (int) \IPS\Request::i()->parent ?: -1;
|
||||
|
||||
if ( !isset( \IPS\Request::i()->type ) )
|
||||
{
|
||||
\IPS\Request::i()->type = 'category';
|
||||
}
|
||||
else
|
||||
{
|
||||
\IPS\Request::i()->type = 'normal';
|
||||
}
|
||||
}
|
||||
|
||||
switch( \IPS\Request::i()->type )
|
||||
{
|
||||
case 'category':
|
||||
$forum->sub_can_post = 0;
|
||||
break;
|
||||
|
||||
case 'normal':
|
||||
$forum->sub_can_post = 1;
|
||||
break;
|
||||
|
||||
case 'qa':
|
||||
$forum->forums_bitoptions['bw_enable_answers'] = TRUE;
|
||||
break;
|
||||
|
||||
case 'redirect':
|
||||
if ( !isset( \IPS\Request::i()->redirect_url ) )
|
||||
if ( $forum->parent_id === -1 )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_REDIRECT_URL', '1F363/3', 400 );
|
||||
\IPS\Request::i()->type = 'category';
|
||||
}
|
||||
|
||||
$forum->redirect_on = 1;
|
||||
$forum->redirect_url = \IPS\Request::i()->redirect_url;
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new \IPS\Api\Exception( 'INVALID_TYPE', '1F363/4', 400 );
|
||||
else
|
||||
{
|
||||
\IPS\Request::i()->type = 'normal';
|
||||
}
|
||||
}
|
||||
|
||||
switch ( \IPS\Request::i()->type )
|
||||
{
|
||||
case 'category':
|
||||
$forum->sub_can_post = 0;
|
||||
break;
|
||||
|
||||
case 'normal':
|
||||
case 'discussion':
|
||||
$forum->sub_can_post = 1;
|
||||
break;
|
||||
|
||||
case 'qa':
|
||||
case 'questions':
|
||||
$forum->forums_bitoptions['bw_enable_answers'] = TRUE;
|
||||
break;
|
||||
|
||||
case 'redirect':
|
||||
if ( !isset( \IPS\Request::i()->redirect_url ) )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_REDIRECT_URL', '1F363/3', 400 );
|
||||
}
|
||||
|
||||
$forum->redirect_on = 1;
|
||||
$forum->redirect_url = \IPS\Request::i()->redirect_url;
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new \IPS\Api\Exception( 'INVALID_TYPE', '1F363/4', 400 );
|
||||
}
|
||||
}
|
||||
|
||||
if ( isset( \IPS\Request::i()->password ) )
|
||||
@@ -231,7 +236,7 @@ class _forums extends \IPS\Node\Api\NodeController
|
||||
|
||||
$forum = parent::_createOrUpdate( $forum );
|
||||
|
||||
unset( \IPS\Data\Store::i()->forumsHavePasswords );
|
||||
unset( \IPS\Data\Store::i()->forumsCustomNodes );
|
||||
|
||||
return $forum;
|
||||
}
|
||||
|
||||
@@ -112,7 +112,43 @@ class _posts extends \IPS\Content\Api\CommentController
|
||||
throw new \IPS\Api\Exception( 'INVALID_ID', '1F295/4', 404 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* POST /forums/posts/{id}/react
|
||||
* Add a reaction
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @apiparam int id ID of the reaction to add
|
||||
* @apiparam int author ID of the member reacting
|
||||
* @return \IPS\forums\Topic\Post
|
||||
* @throws 1S425/2 NO_REACTION The reaction ID does not exist
|
||||
* @throws 1S425/3 NO_AUTHOR The author ID does not exist
|
||||
* @throws 1S425/4 REACT_ERROR Error adding the reaction
|
||||
* @throws 1S425/5 INVALID_ID Object ID does not exist
|
||||
* @note If the author has already reacted to this content, any existing reaction will be removed first
|
||||
*/
|
||||
public function POSTitem_react( $id )
|
||||
{
|
||||
return $this->_reactAdd( $id );
|
||||
}
|
||||
|
||||
/**
|
||||
* DELETE /forums/posts/{id}/react
|
||||
* Delete a reaction
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @apiparam int author ID of the member who reacted
|
||||
* @return \IPS\forums\Topic\Post
|
||||
* @throws 1S425/6 NO_AUTHOR The author ID does not exist
|
||||
* @throws 1S425/7 REACT_ERROR Error adding the reaction
|
||||
* @throws 1S425/8 INVALID_ID Object ID does not exist
|
||||
* @note If the author has already reacted to this content, any existing reaction will be removed first
|
||||
*/
|
||||
public function DELETEitem_react( $id )
|
||||
{
|
||||
return $this->_reactRemove( $id );
|
||||
}
|
||||
|
||||
/**
|
||||
* POST /forums/posts
|
||||
* Create a post
|
||||
@@ -125,10 +161,12 @@ class _posts extends \IPS\Content\Api\CommentController
|
||||
* @apiparam datetime date The date/time that should be used for the topic/post post date. If not provided, will use the current date/time. Ignored for requests using an OAuth Access Token for a particular member
|
||||
* @apiparam string ip_address The IP address that should be stored for the topic/post. If not provided, will use the IP address from the API request. Ignored for requests using an OAuth Access Token for a particular member
|
||||
* @apiparam int hidden 0 = unhidden; 1 = hidden, pending moderator approval; -1 = hidden (as if hidden by a moderator)
|
||||
* @apiparam bool anonymous If 1, the item will be posted anonymously.
|
||||
* @throws 1F295/1 NO_TOPIC The topic ID does not exist
|
||||
* @throws 1F295/2 NO_AUTHOR The author ID does not exist
|
||||
* @throws 1F295/3 NO_POST No post was supplied
|
||||
* @throws 2F294/A NO_PERMISSION The authorized user does not have permission to reply to that topic
|
||||
* @throws 3F295/C NO_ANON_PERMISSION The topic is set for anonymous posting, but the author does not have permission to post anonymously
|
||||
* @return \IPS\forums\Topic\Post
|
||||
*/
|
||||
public function POSTindex()
|
||||
@@ -164,8 +202,24 @@ class _posts extends \IPS\Content\Api\CommentController
|
||||
}
|
||||
else
|
||||
{
|
||||
$author = new \IPS\Member;
|
||||
$author->name = \IPS\Request::i()->author_name;
|
||||
if ( \IPS\Request::i()->author === 0 )
|
||||
{
|
||||
$author = new \IPS\Member;
|
||||
$author->name = \IPS\Request::i()->author_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_AUTHOR', '1F295/2', 400 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Check anonymous posting */
|
||||
if ( isset( \IPS\Request::i()->anonymous ) and $author->member_id )
|
||||
{
|
||||
if ( ! $topic->container()->canPostAnonymously( 0, $author ) )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_ANON_PERMISSION', '3F295/C', 403 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,6 +243,7 @@ class _posts extends \IPS\Content\Api\CommentController
|
||||
* @apiparam string author_name If author is 0, the guest name that should be used
|
||||
* @apiparam string post The post content as HTML (e.g. "<p>This is a post.</p>"). Will be sanatized for requests using an OAuth Access Token for a particular member; will be saved unaltered for requests made using an API Key or the Client Credentials Grant Type.
|
||||
* @apiparam int hidden 1/0 indicating if the topic should be hidden
|
||||
* @apiparam bool anonymous If 1, the item will be posted anonymously.
|
||||
* @throws 2F295/6 INVALID_ID The post ID does not exist or the authorized user does not have permission to view it
|
||||
* @throws 2F295/7 NO_AUTHOR The author ID does not exist
|
||||
* @throws 1F295/8 CANNOT_HIDE_FIRST_POST You cannot hide or unhide the first post in a topic. Hide/unhide the topic itself instead.
|
||||
@@ -273,4 +328,21 @@ class _posts extends \IPS\Content\Api\CommentController
|
||||
throw new \IPS\Api\Exception( 'INVALID_ID', '1F295/5', 404 );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* POST /forums/posts/{id}/report
|
||||
* Reports a post
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @apiparam int author ID of the member reporting
|
||||
* @apiparam int report_type Report type (0 is default and is for letting CMGR team know, more options via core_automatic_moderation_types)
|
||||
* @apiparam string message Optional message
|
||||
* @return \IPS\forums\Topic\Post
|
||||
* @throws 1S425/B NO_AUTHOR The author ID does not exist
|
||||
* @throws 1S425/C REPORTED_ALREADY The member has reported this item in the past 24 hours
|
||||
*/
|
||||
public function POSTitem_report( $id )
|
||||
{
|
||||
return $this->_report( $id );
|
||||
}
|
||||
}
|
||||
@@ -182,6 +182,7 @@ class _topics extends \IPS\Content\Api\ItemController
|
||||
* @throws 1F294/5 NO_TITLE No title was supplied
|
||||
* @throws 1F294/4 NO_POST No post was supplied
|
||||
* @throws 2F294/C NO_PERMISSION The authorized user does not have permission to create a topic in that forum
|
||||
* @throws 3F294/D NO_ANON_PERMISSION The topic is set for anonymous posting, but the author does not have permission to post anonymously
|
||||
* @return \IPS\forums\Topic
|
||||
*/
|
||||
public function POSTindex()
|
||||
@@ -221,8 +222,24 @@ class _topics extends \IPS\Content\Api\ItemController
|
||||
}
|
||||
else
|
||||
{
|
||||
$author = new \IPS\Member;
|
||||
$author->name = \IPS\Request::i()->author_name;
|
||||
if ( \IPS\Request::i()->author === 0 )
|
||||
{
|
||||
$author = new \IPS\Member;
|
||||
$author->name = \IPS\Request::i()->author_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_AUTHOR', '1F294/3', 400 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Check anonymous posting */
|
||||
if ( isset( \IPS\Request::i()->anonymous ) and $author->member_id )
|
||||
{
|
||||
if ( ! $forum->canPostAnonymously( 0, $author ) )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_ANON_PERMISSION', '3F294/D', 403 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -269,6 +286,7 @@ class _topics extends \IPS\Content\Api\ItemController
|
||||
* @throws 1F294/7 NO_FORUM The forum ID does not exist or the authorized user does not have permission to post in it
|
||||
* @throws 1F294/8 NO_AUTHOR The author ID does not exist
|
||||
* @throws 2F294/A NO_PERMISSION The authorized user does not have permission to edit the topic
|
||||
* @throws 1F294/E INVALID_DATE The date is invalid
|
||||
* @return \IPS\forums\Topic
|
||||
*/
|
||||
public function POSTitem( $id )
|
||||
@@ -337,10 +355,38 @@ class _topics extends \IPS\Content\Api\ItemController
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Do we have a date? */
|
||||
if ( isset( \IPS\Request::i()->date ) ) {
|
||||
|
||||
try
|
||||
{
|
||||
$date = new \IPS\DateTime( \IPS\Request::i()->date );
|
||||
}
|
||||
catch( \Exception $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'INVALID_DATE', '1F294/E', 400 );
|
||||
}
|
||||
|
||||
/* Do we have a first comment? */
|
||||
if ( $commentObj = $topic->firstComment() )
|
||||
{
|
||||
try
|
||||
{
|
||||
$commentClass = $topic::$commentClass;
|
||||
$field = $commentClass::$databaseColumnMap['date'];
|
||||
|
||||
$commentObj->$field = $date->getTimestamp();
|
||||
$commentObj->save();
|
||||
}
|
||||
catch( \Exception $e ) {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Everything else */
|
||||
$this->_createOrUpdate( $topic, 'edit' );
|
||||
|
||||
|
||||
/* Save and return */
|
||||
$topic->save();
|
||||
return new \IPS\Api\Response( 200, $topic->apiOutput( $this->member ) );
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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": {
|
||||
|
||||
@@ -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&module=forums&controller=forums"><![CDATA[{"lang_key":"menu__forums_forums_forums","restriction":"forums_manage","keywords":["edit forum"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&searchResult=form_2_allow_anonymous"><![CDATA[{"lang_key":"allow_anonymous","restriction":"forums_manage","keywords":["anonymous","anonymously"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&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&module=forums&controller=forums"><![CDATA[{"lang_key":"menu__forums_forums_forums","restriction":"forums_manage","keywords":["edit forum","categories","forum","forums"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&do=form&searchResult=forum_best_answer"><![CDATA[{"lang_key":"bw_enable_answers_moderator","restriction":"forums_manage","keywords":["solution","solved"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&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&module=forums&controller=forums&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&module=forums&controller=forums&searchResult=form_1_forum_description"><![CDATA[{"lang_key":"forum_description","restriction":"forums_manage","keywords":["category description","forum description"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&searchResult=form_1_forum_name"><![CDATA[{"lang_key":"forum_name","restriction":"forums_manage","keywords":["category name","forum name"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&searchResult=form_1_forum_parent_id"><![CDATA[{"lang_key":"forum_parent_id","restriction":"forums_manage","keywords":["parent","parent forum"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&searchResult=form_1_forum_type"><![CDATA[{"lang_key":"forum_type","restriction":"forums_manage","keywords":["category type","discussions","questions","redirect"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&searchResult=form_2_allow_anonymous"><![CDATA[{"lang_key":"allow_anonymous","restriction":"forums_manage","keywords":["anonymous","anonymously"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&searchResult=form_2_forum_allow_poll"><![CDATA[{"lang_key":"forum_allow_poll","restriction":"forums_manage","keywords":["allow polls","polls"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&searchResult=form_2_forum_description"><![CDATA[{"lang_key":"forum_description","restriction":"forums_manage","keywords":["forum description"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&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&module=forums&controller=forums&searchResult=form_new_forum_show_rules"><![CDATA[{"lang_key":"forum_show_rules","restriction":"forums_manage","keywords":["rules","show rules"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&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&module=forums&controller=forums&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&module=forums&controller=forums&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&module=forums&controller=forums&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&module=forums&controller=forums&searchResult=forum_disable_sharelinks"><![CDATA[{"lang_key":"forum_disable_sharelinks","restriction":"forums_manage","keywords":["enable sharing","sharing"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&searchResult=forum_icon"><![CDATA[{"lang_key":"forum_icon","restriction":"forums_manage","keywords":["forum icon","icon"]}]]></acpsearch>
|
||||
@@ -95,7 +96,7 @@
|
||||
<acpsearch key="app=forums&module=forums&controller=forums&subnode=0&parent=2&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&module=forums&controller=forums&subnode=0&parent=2&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&module=forums&controller=forums&subnode=0&parent=2&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&module=forums&controller=savedActions"><![CDATA[{"lang_key":"menu__forums_forums_savedActions","restriction":"savedActions_manage","keywords":["saved actions"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=savedActions"><![CDATA[{"lang_key":"menu__forums_forums_savedActions","restriction":"savedActions_manage","keywords":["saved actions","multi moderation","multimod"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=savedActions&searchResult=form_1_mm_forums"><![CDATA[{"lang_key":"mm_forums","restriction":"savedActions_manage","keywords":["multimod forums","settings forums"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=savedActions&searchResult=form_1_mm_title"><![CDATA[{"lang_key":"mm_title","restriction":"savedActions_manage","keywords":["multimod name","name","settings name"]}]]></acpsearch>
|
||||
<acpsearch key="app=forums&module=forums&controller=savedActions&searchResult=form_1_topic_approve"><![CDATA[{"lang_key":"topic_approve","restriction":"savedActions_manage","keywords":["hide","unhide"]}]]></acpsearch>
|
||||
|
||||
@@ -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
|
||||
*
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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' ) )}}
|
||||
· <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' ) )}}
|
||||
· <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;
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -110,23 +110,26 @@ class _AnswerMarkedBest extends \IPS\core\Achievements\Actions\AbstractAchieveme
|
||||
/**
|
||||
* Get the labels for the people this action might give awards to
|
||||
*
|
||||
* @param array|NULL $filters Current filter values
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function awardOptions(): array
|
||||
public function awardOptions( ?array $filters ): array
|
||||
{
|
||||
return [
|
||||
'subject' => 'achievement_filter_AnswerMarkedBest_poster',
|
||||
'other' => 'achievement_filter_AnswerMarkedBest_asker'
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the "other" people we need to award =stuff to
|
||||
*
|
||||
* @param mixed $extra Any additional information about what is happening (e.g. if a post is being made: the post object)
|
||||
* @param mixed $extra Any additional information about what is happening (e.g. if a post is being made: the post object)
|
||||
* @param array|NULL $filters Current filter values
|
||||
* @return array
|
||||
*/
|
||||
public function awardOther( $extra = NULL ): array
|
||||
public function awardOther( $extra = NULL, ?array $filters = NULL ): array
|
||||
{
|
||||
return [ $extra->item()->author() ];
|
||||
}
|
||||
|
||||
@@ -45,6 +45,37 @@ class _Forums
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can whatever is posted in this editor be moderated?
|
||||
* If this returns TRUE, we must ensure the content is ran through word, link and image filters
|
||||
*
|
||||
* @param \IPS\Member $member The member
|
||||
* @param \IPS\Helpers\Form\Editor $field The editor field
|
||||
* @return bool
|
||||
*/
|
||||
public function canBeModerated( $member, $field )
|
||||
{
|
||||
/* Creating/editing a forum */
|
||||
if ( preg_match( '/^forums\-(?:forum|rules|permerror)\-\d+$/', $field->options['autoSaveKey'] ) or preg_match( '/^forums\-new\-(?:forum|rules|permerror)\d+$/', $field->options['autoSaveKey'] ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
/* Creating/editing a topic/post */
|
||||
elseif ( preg_match( '/^(?:newContentItem|contentEdit|editComment|reply)\-forums\/forums\-\d+/', $field->options['autoSaveKey'] ) )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
/* Unknown */
|
||||
else
|
||||
{
|
||||
if ( \IPS\IN_DEV )
|
||||
{
|
||||
throw new \RuntimeException( 'Unknown canBeModerated: ' . $field->options['autoSaveKey'] );
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Permission check for attachments
|
||||
|
||||
@@ -46,16 +46,24 @@ class _DeleteLegacyPosts
|
||||
*/
|
||||
public function run( $data, $offset )
|
||||
{
|
||||
$select = \IPS\Db::i()->select( '*', 'forums_posts', 'queued > 2', 'pid ASC', array( 0, \IPS\REBUILD_NORMAL ) );
|
||||
$select = \IPS\Db::i()->select( '*', 'forums_posts', 'queued > 2', NULL, array( 0, \IPS\REBUILD_NORMAL ) );
|
||||
if ( !\count( $select ) )
|
||||
{
|
||||
throw new \IPS\Task\Queue\OutOfRangeException;
|
||||
}
|
||||
|
||||
$done = 0;
|
||||
foreach( new \IPS\Patterns\ActiveRecordIterator( $select, 'IPS\forums\Topic\Post' ) as $post )
|
||||
foreach( $select as $post )
|
||||
{
|
||||
$post->logDelete( FALSE );
|
||||
try
|
||||
{
|
||||
\IPS\forums\Topic\Post::constructFromData( $post )->logDelete( FALSE );
|
||||
}
|
||||
catch( \Exception $e )
|
||||
{
|
||||
\IPS\Db::i()->update( 'forums_posts', [ 'queued' => '-1' ], [ 'pid=?', $post['pid'] ] );
|
||||
}
|
||||
|
||||
$done++;
|
||||
}
|
||||
|
||||
|
||||
@@ -71,14 +71,7 @@ class _settings extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
\IPS\Dispatcher::i()->checkAcpPermission( 'archive_manage' );
|
||||
|
||||
if ( \IPS\CIC2 )
|
||||
{
|
||||
return \IPS\Cicloud\getForumArchiveForm();
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->manageArchivingForm();
|
||||
}
|
||||
return $this->manageArchivingForm();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -33,6 +33,92 @@ class _posts extends \IPS\Dispatcher\Controller
|
||||
*/
|
||||
public static $allowRWSeparation = TRUE;
|
||||
|
||||
/**
|
||||
* Show solved posts
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function showSolvedPosts()
|
||||
{
|
||||
/* Create the table */
|
||||
$table = new \IPS\Helpers\Table\Db( 'core_solved_index', \IPS\Http\Url::internal( 'app=forums&module=stats&controller=posts&do=showSolvedPosts' ), [ 'solved_date BETWEEN ? AND ?', \IPS\Request::i()->startTime, \IPS\Request::i()->endTime ] );
|
||||
$table->quickSearch = NULL;
|
||||
$table->sortBy = $table->sortBy ?: 'solved_date';
|
||||
$table->sortDirection = $table->sortDirection ?: 'asc';
|
||||
$table->langPrefix = 'stats_posts_type_';
|
||||
$table->include = [ 'comment_id', 'solved_date' ];
|
||||
$table->widths = array( 'solved_date' => 25, 'comment_id' => 75 );
|
||||
$table->baseUrl = $table->baseUrl->setQueryString( array( 'startTime' => \IPS\Request::i()->startTime, 'endTime' => \IPS\Request::i()->endTime, 'tab' => 'bytype' ) );
|
||||
|
||||
/* Custom parsers */
|
||||
$table->parsers = array(
|
||||
'solved_date' => function( $val, $row )
|
||||
{
|
||||
return \IPS\DateTime::ts( $val )->html();
|
||||
},
|
||||
'comment_id' => function( $val, $row )
|
||||
{
|
||||
$class = $row['comment_class'];
|
||||
|
||||
try
|
||||
{
|
||||
$item = $class::load( $row['comment_id'] );
|
||||
|
||||
return \IPS\Theme::i()->getTemplate( 'activitystats', 'core' )->contentCell( $item );
|
||||
}
|
||||
catch ( \Throwable $e )
|
||||
{
|
||||
return \IPS\Member::loggedIn()->language()->addToStack( 'unavailable' );
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate('global', 'core')->block( NULL, (string) $table, TRUE, 'ipsPad' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Show solved posts
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function showRecommendedPosts()
|
||||
{
|
||||
/* Create the table */
|
||||
$table = new \IPS\Helpers\Table\Db( 'core_content_meta', \IPS\Http\Url::internal( 'app=forums&module=stats&controller=posts&do=showRecommendedPosts' ), [ 'meta_type=? AND meta_added BETWEEN ? AND ?', 'core_FeaturedComments', \IPS\Request::i()->startTime, \IPS\Request::i()->endTime ] );
|
||||
$table->quickSearch = NULL;
|
||||
$table->sortBy = $table->sortBy ?: 'meta_added';
|
||||
$table->sortDirection = $table->sortDirection ?: 'asc';
|
||||
$table->langPrefix = 'stats_posts_type_';
|
||||
$table->include = [ 'meta_data', 'meta_added' ];
|
||||
$table->widths = array( 'meta_added' => 25, 'meta_data' => 75 );
|
||||
$table->baseUrl = $table->baseUrl->setQueryString( array( 'startTime' => \IPS\Request::i()->startTime, 'endTime' => \IPS\Request::i()->endTime, 'tab' => 'bytype' ) );
|
||||
|
||||
/* Custom parsers */
|
||||
$table->parsers = array(
|
||||
'meta_added' => function( $val, $row )
|
||||
{
|
||||
return \IPS\DateTime::ts( $val )->html();
|
||||
},
|
||||
'meta_data' => function( $val, $row )
|
||||
{
|
||||
$data = json_decode( $val, TRUE );
|
||||
|
||||
try
|
||||
{
|
||||
$item = \IPS\forums\Topic\Post::load( $data['comment'] );
|
||||
|
||||
return \IPS\Theme::i()->getTemplate( 'activitystats', 'core' )->contentCell( $item );
|
||||
}
|
||||
catch ( \Throwable $e )
|
||||
{
|
||||
return \IPS\Member::loggedIn()->language()->addToStack( 'unavailable' );
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate('global', 'core')->block( NULL, (string) $table, TRUE, 'ipsPad' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Manage
|
||||
*
|
||||
@@ -42,10 +128,56 @@ class _posts extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
\IPS\Dispatcher::i()->checkAcpPermission( 'posts_manage' );
|
||||
|
||||
$tabs = array( 'total' => 'stats_posts_tab_total', 'byforum' => 'stats_posts_tab_byforum' );
|
||||
$tabs = array( 'total' => 'stats_posts_tab_total', 'bytype' => 'stats_posts_by_type', 'byforum' => 'stats_posts_tab_byforum' );
|
||||
$activeTab = ( isset( \IPS\Request::i()->tab ) and array_key_exists( \IPS\Request::i()->tab, $tabs ) ) ? \IPS\Request::i()->tab : 'total';
|
||||
|
||||
if ( $activeTab === 'total' )
|
||||
if ( $activeTab === 'bytype' )
|
||||
{
|
||||
$defaults = array( 'start' => \IPS\DateTime::create()->setDate( date('Y'), date('m'), 1 ), 'end' => new \IPS\DateTime );
|
||||
|
||||
if( isset( \IPS\Request::i()->badgeDateStart ) AND isset( \IPS\Request::i()->badgeDateEnd ) )
|
||||
{
|
||||
$defaults = array( 'start' => \IPS\DateTime::ts( \IPS\Request::i()->badgeDateStart ), 'end' => \IPS\DateTime::ts( \IPS\Request::i()->badgeDateEnd ) );
|
||||
}
|
||||
|
||||
$form = new \IPS\Helpers\Form( $activeTab, 'continue' );
|
||||
$form->add( new \IPS\Helpers\Form\DateRange( 'date', $defaults, TRUE ) );
|
||||
|
||||
if( $values = $form->values() )
|
||||
{
|
||||
/* Determine start and end time */
|
||||
$startTime = $values['date']['start']->getTimestamp();
|
||||
$endTime = $values['date']['end']->getTimestamp();
|
||||
|
||||
$start = $values['date']['start']->html();
|
||||
$end = $values['date']['end']->html();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Determine start and end time */
|
||||
$startTime = $defaults['start']->getTimestamp();
|
||||
$endTime = $defaults['end']->getTimestamp();
|
||||
|
||||
$start = $defaults['start']->html();
|
||||
$end = $defaults['end']->html();
|
||||
}
|
||||
|
||||
/* Get a count of solved posts in this time */
|
||||
$solvedCount = \IPS\Db::i()->select( 'count(*)', 'core_solved_index', [
|
||||
[ 'solved_date BETWEEN ? AND ?', $startTime, $endTime ],
|
||||
[ 'comment_class=?', 'IPS\forums\Topic\Post' ]
|
||||
] )->first();
|
||||
|
||||
/* Get a count of recommended posts in this time */
|
||||
$recommendedCount = \IPS\Db::i()->select( 'count(*)', 'core_content_meta', [
|
||||
[ 'meta_added BETWEEN ? AND ?', $startTime, $endTime ],
|
||||
[ 'meta_type=?', 'core_FeaturedComments' ]
|
||||
] )->first();
|
||||
|
||||
$formHtml = $form->customTemplate( array( \IPS\Theme::i()->getTemplate( 'stats', 'core' ), 'filtersFormTemplate' ) );
|
||||
$chart = \IPS\Theme::i()->getTemplate( 'stats', 'forums' )->statsTypeWrapper( $formHtml, $solvedCount, $recommendedCount, $startTime, $endTime );
|
||||
}
|
||||
else if ( $activeTab === 'total' )
|
||||
{
|
||||
$chart = new \IPS\Helpers\Chart\Database( \IPS\Http\Url::internal( "app=forums&module=stats&controller=posts" ), 'forums_posts', 'post_date', '', array(
|
||||
'isStacked' => FALSE,
|
||||
@@ -112,6 +244,7 @@ class _posts extends \IPS\Dispatcher\Controller
|
||||
},
|
||||
'defaultSeries' => function()
|
||||
{
|
||||
$series = array();
|
||||
foreach( \IPS\Db::i()->select( '*', 'forums_forums', array( 'posts>?', 0 ), 'last_post desc', array( 0, 50 ) ) as $forum )
|
||||
{
|
||||
$series[] = array( \IPS\Member::loggedIn()->language()->addToStack( 'forums_forum_' . $forum['id'] ), 'number', 'COUNT(*)', FALSE, $forum['id'] );
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief questions
|
||||
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) Invision Power Services, Inc.
|
||||
* @license https://www.invisioncommunity.com/legal/standards/
|
||||
* @package Invision Community
|
||||
* @subpackage Forums
|
||||
* @since 21 Sep 2021
|
||||
*/
|
||||
|
||||
namespace IPS\forums\modules\admin\stats;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* questions
|
||||
*/
|
||||
class _questions extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
/**
|
||||
* Execute
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function execute()
|
||||
{
|
||||
\IPS\Dispatcher::i()->checkAcpPermission( 'questions_manage' );
|
||||
parent::execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* Manage
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function manage()
|
||||
{
|
||||
$chart = new \IPS\Helpers\Chart\Database( \IPS\Http\Url::internal( 'app=forums&module=stats&controller=questions' ), 'forums_question_ratings', 'date', '', array(
|
||||
'isStacked' => FALSE,
|
||||
'backgroundColor' => '#ffffff',
|
||||
'hAxis' => array( 'gridlines' => array( 'color' => '#f5f5f5' ) ),
|
||||
'lineWidth' => 1,
|
||||
'areaOpacity' => 0.4
|
||||
) );
|
||||
|
||||
$chart->title = \IPS\Member::loggedIn()->language()->addToStack('stats_question_ratings_title');
|
||||
$chart->availableTypes = array( 'AreaChart', 'ColumnChart', 'BarChart' );
|
||||
|
||||
$chart->groupBy = 'rating';
|
||||
|
||||
foreach( array( 1, -1 ) as $v )
|
||||
{
|
||||
$label = ( $v == -1 ) ? 'negative' : 'positive';
|
||||
$chart->addSeries( \IPS\Member::loggedIn()->language()->addToStack('stats_question_ratings_' . $label ), 'number', 'COUNT(*)', TRUE, $label );
|
||||
}
|
||||
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('menu__forums_stats_questions');
|
||||
\IPS\Output::i()->output = (string) $chart;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -42,7 +42,18 @@ class _topics extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
\IPS\Dispatcher::i()->checkAcpPermission( 'topics_manage' );
|
||||
|
||||
$tabs = array( 'total' => 'stats_topics_tab_total', 'byforum' => 'stats_topics_tab_byforum' );
|
||||
$tabs = array( 'total' => 'stats_topics_tab_total' );
|
||||
|
||||
if( \IPS\Db::i()->select( 'COUNT(*)', 'forums_forums', array( 'topics>?', 0 ) )->first() )
|
||||
{
|
||||
$tabs[ 'byforum'] = 'stats_topics_tab_byforum';
|
||||
}
|
||||
|
||||
if( \IPS\Db::i()->select( 'COUNT(*)', 'forums_forums', array( 'topics>? and ( forums_bitoptions & ? or forums_bitoptions & ? or forums_bitoptions & ? )', 0, 4, 8, 16 ) )->first() )
|
||||
{
|
||||
$tabs[ 'solved'] = 'stats_topics_tab_solved';
|
||||
}
|
||||
|
||||
$activeTab = ( isset( \IPS\Request::i()->tab ) and array_key_exists( \IPS\Request::i()->tab, $tabs ) ) ? \IPS\Request::i()->tab : 'total';
|
||||
|
||||
if ( $activeTab === 'total' )
|
||||
@@ -63,6 +74,67 @@ class _topics extends \IPS\Dispatcher\Controller
|
||||
$chart->title = \IPS\Member::loggedIn()->language()->addToStack( 'stats_topics_title' );
|
||||
$chart->availableTypes = array( 'AreaChart', 'ColumnChart', 'BarChart' );
|
||||
}
|
||||
else if( $activeTab === 'solved' )
|
||||
{
|
||||
$chart = new \IPS\Helpers\Chart\Database( \IPS\Http\Url::internal( "app=forums&module=stats&controller=topics&tab=" . $activeTab ), 'core_solved_index', 'solved_date', '', array(
|
||||
'isStacked' => FALSE,
|
||||
'backgroundColor' => '#ffffff',
|
||||
'hAxis' => array( 'gridlines' => array( 'color' => '#f5f5f5' ) ),
|
||||
'lineWidth' => 1,
|
||||
'areaOpacity' => 0.4,
|
||||
'chartArea' => array( 'width' => '70%', 'left' => '5%' ),
|
||||
'height' => 400,
|
||||
),
|
||||
'LineChart',
|
||||
'monthly',
|
||||
array( 'start' => ( new \IPS\DateTime )->sub( new \DateInterval('P90D') ), 'end' => new \IPS\DateTime ),
|
||||
array(),
|
||||
'solved'
|
||||
);
|
||||
|
||||
$chart->joins = array( array( 'forums_topics', array( 'comment_class=? and core_solved_index.item_id=forums_topics.tid', 'IPS\forums\Topic\Post' ) ) );
|
||||
$chart->where = array( array( \IPS\Db::i()->in( 'state', array( 'link', 'merged' ), TRUE ) ), array( \IPS\Db::i()->in( 'approved', array( -2, -3 ), TRUE ) ) );
|
||||
$chart->title = \IPS\Member::loggedIn()->language()->addToStack( 'stats_topics_title_solved' );
|
||||
$chart->availableTypes = array( 'LineChart', 'ColumnChart' );
|
||||
|
||||
$chart->groupBy = 'forum_id';
|
||||
$customValues = ( isset( $chart->savedCustomFilters['chart_forums'] ) ? array_values( explode( ',', $chart->savedCustomFilters['chart_forums'] ) ) : 0 );
|
||||
|
||||
$chart->customFiltersForm = array(
|
||||
'form' => array(
|
||||
new \IPS\Helpers\Form\Node( 'chart_forums', $customValues, FALSE, array( 'class' => 'IPS\forums\Forum', 'zeroVal' => 'any', 'multiple' => TRUE, 'permissionCheck' => function ( $forum )
|
||||
{
|
||||
return $forum->sub_can_post and !$forum->redirect_url;
|
||||
} ), NULL, NULL, NULL, 'chart_forums' )
|
||||
),
|
||||
'where' => function( $values )
|
||||
{
|
||||
$forumIds = \is_array( $values['chart_forums'] ) ? array_keys( $values['chart_forums'] ) : explode( ',', $values['chart_forums'] );
|
||||
return \IPS\Db::i()->in( 'forum_id', $forumIds );
|
||||
},
|
||||
'groupBy' => 'forum_id',
|
||||
'series' => function( $values )
|
||||
{
|
||||
$series = array();
|
||||
$forumIds = \is_array( $values['chart_forums'] ) ? array_keys( $values['chart_forums'] ) : explode( ',', $values['chart_forums'] );
|
||||
foreach( $forumIds as $id )
|
||||
{
|
||||
$series[] = array( \IPS\Member::loggedIn()->language()->addToStack( 'forums_forum_' . $id ), 'number', 'COUNT(*)', FALSE, $id );
|
||||
}
|
||||
return $series;
|
||||
},
|
||||
'defaultSeries' => function()
|
||||
{
|
||||
$series = array();
|
||||
foreach( \IPS\Db::i()->select( '*', 'forums_forums', array( 'topics>? and ( forums_bitoptions & ? or forums_bitoptions & ? or forums_bitoptions & ? )', 0, 4, 8, 16 ), 'last_post desc', array( 0, 50 ) ) as $forum )
|
||||
{
|
||||
$series[] = array( \IPS\Member::loggedIn()->language()->addToStack( 'forums_forum_' . $forum['id'] ), 'number', 'COUNT(*)', FALSE, $forum['id'] );
|
||||
}
|
||||
|
||||
return $series;
|
||||
}
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$chart = new \IPS\Helpers\Chart\Database( \IPS\Http\Url::internal( "app=forums&module=stats&controller=topics&tab=" . $activeTab ), 'forums_topics', 'start_date', '', array(
|
||||
@@ -113,11 +185,12 @@ class _topics extends \IPS\Dispatcher\Controller
|
||||
},
|
||||
'defaultSeries' => function()
|
||||
{
|
||||
$series = array();
|
||||
foreach( \IPS\Db::i()->select( '*', 'forums_forums', array( 'topics>?', 0 ), 'last_post desc', array( 0, 50 ) ) as $forum )
|
||||
{
|
||||
$series[] = array( \IPS\Member::loggedIn()->language()->addToStack( 'forums_forum_' . $forum['id'] ), 'number', 'COUNT(*)', FALSE, $forum['id'] );
|
||||
}
|
||||
|
||||
|
||||
return $series;
|
||||
}
|
||||
);
|
||||
|
||||
@@ -42,7 +42,25 @@ class _forums extends \IPS\Dispatcher\Controller
|
||||
\IPS\Output::i()->error( 'node_error', '2F176/1', 404, '' );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected $childrenIds = [];
|
||||
|
||||
protected function getChildrenIds( $forum )
|
||||
{
|
||||
$this->childrenIds[] = $forum->_id;
|
||||
|
||||
foreach( $forum->children() as $node )
|
||||
{
|
||||
$this->childrenIds[] = $node->_id;
|
||||
foreach( $node->children() as $child )
|
||||
{
|
||||
$this->getChildrenIds( $child );
|
||||
}
|
||||
}
|
||||
|
||||
return $this->childrenIds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show Forum
|
||||
*
|
||||
@@ -88,37 +106,6 @@ class _forums extends \IPS\Dispatcher\Controller
|
||||
}
|
||||
|
||||
$getReactions = $getFirstComment = $getFollowerCount = (boolean) ( \IPS\forums\Forum::getMemberListView() === 'snippet' );
|
||||
|
||||
/* Init table (it won't show anything until after the password check, but it sets navigation and titles) */
|
||||
$table = new \IPS\Helpers\Table\Content( 'IPS\forums\Topic', $forum->url(), $where, $forum, NULL, 'view', isset( \IPS\Request::i()->rss ) ? FALSE : TRUE, isset( \IPS\Request::i()->rss ) ? FALSE : TRUE, NULL, $getFirstComment, $getFollowerCount, $getReactions );
|
||||
$table->tableTemplate = array( \IPS\Theme::i()->getTemplate( 'forums', 'forums', 'front' ), 'forumTable' );
|
||||
$table->classes = array( 'cTopicList' );
|
||||
$table->limit = \IPS\Settings::i()->forums_topics_per_page;
|
||||
$table->title = \IPS\Member::loggedIn()->language()->addToStack( ( $forum->forums_bitoptions['bw_enable_answers'] ) ? 'count_questions_in_forum' : 'count_topics_in_forum', FALSE, array( 'pluralize' => array( $forum->topics ) ) );
|
||||
if ( $forum->forums_bitoptions['bw_enable_answers'] )
|
||||
{
|
||||
$table->rowsTemplate = array( $this->themeGroup, 'questionRow' );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( \IPS\forums\Forum::getMemberListView() == 'snippet' )
|
||||
{
|
||||
$table->rowsTemplate = array( $this->themeGroup, 'topicRowSnippet' );
|
||||
}
|
||||
else
|
||||
{
|
||||
$table->rowsTemplate = array( $this->themeGroup, 'topicRow' );
|
||||
}
|
||||
}
|
||||
$table->hover = TRUE;
|
||||
$table->sortOptions['num_replies'] = $table->sortOptions['num_comments'];
|
||||
unset( $table->sortOptions['num_comments'] );
|
||||
|
||||
/* If there's only one forum and we're not in a club, we actually don't want the nav */
|
||||
if ( \IPS\forums\Forum::theOnlyForum() AND !$forum->club() )
|
||||
{
|
||||
\IPS\Output::i()->breadcrumb = isset( \IPS\Output::i()->breadcrumb['module'] ) ? array( 'module' => \IPS\Output::i()->breadcrumb['module'] ) : array();
|
||||
}
|
||||
|
||||
/* Redirect? */
|
||||
if ( $forum->redirect_url )
|
||||
@@ -127,142 +114,283 @@ class _forums extends \IPS\Dispatcher\Controller
|
||||
$forum->save();
|
||||
\IPS\Output::i()->redirect( $forum->redirect_url );
|
||||
}
|
||||
|
||||
|
||||
/* Display */
|
||||
if ( $forum->isCombinedView() )
|
||||
{
|
||||
$childrenIds = $this->getChildrenIds( $forum );
|
||||
$where = array();
|
||||
|
||||
if ( \IPS\forums\Forum::customPermissionNodes() )
|
||||
{
|
||||
$where['container'][] = array( 'forums_forums.password IS NULL' );
|
||||
}
|
||||
|
||||
if ( !\IPS\Settings::i()->club_nodes_in_apps OR !\IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'clubs', 'front' ) ) )
|
||||
{
|
||||
$where['container'][] = array( 'forums_forums.club_id IS NULL' );
|
||||
}
|
||||
|
||||
$forumIds = array();
|
||||
$ids = $childrenIds;
|
||||
$urlParam = 'forumId' . $forum->_id;
|
||||
|
||||
if ( isset( \IPS\Request::i()->$urlParam ) )
|
||||
{
|
||||
$ids = explode( ',', \IPS\Request::i()->$urlParam );
|
||||
}
|
||||
else if ( isset( \IPS\Request::i()->cookie['forums_flowIdsRoots'] ) and $cookie = json_decode( \IPS\Request::i()->cookie['forums_flowIdsRoots'], TRUE ) )
|
||||
{
|
||||
if ( isset( $cookie[ $forum->_id ] ) )
|
||||
{
|
||||
if ( \is_array( $cookie[ $forum->_id ] ) )
|
||||
{
|
||||
$ids = $cookie[$forum->_id];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Inline forum IDs? */
|
||||
if ( ( \is_array( $ids ) and ! \count( $ids ) ) )
|
||||
{
|
||||
/* If we unselect all the filters, then there is nothing to show... */
|
||||
$where[] = [ "1=2" ];
|
||||
}
|
||||
else if ( \count( $ids ) )
|
||||
{
|
||||
foreach( $ids as $id )
|
||||
{
|
||||
if ( ! \in_array( $id, $childrenIds ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
/* Panic not, they are all loaded into memory at this point */
|
||||
$_forum = \IPS\forums\Forum::load( $id );
|
||||
$forumIds[] = $_forum->id;
|
||||
|
||||
}
|
||||
catch( \Exception $ex ) { }
|
||||
}
|
||||
|
||||
if ( \count( $forumIds ) )
|
||||
{
|
||||
$where['container'][] = array( \IPS\Db::i()->in( 'forums_forums.id', array_filter( $forumIds ) ) );
|
||||
}
|
||||
}
|
||||
|
||||
/* Simplified view */
|
||||
$table = new \IPS\Helpers\Table\Content( 'IPS\forums\Topic', $forum->url(), $where, $forum, NULL, 'read', TRUE, FALSE, NULL, FALSE, FALSE, FALSE, FALSE );
|
||||
$table->tableTemplate = array( \IPS\Theme::i()->getTemplate( 'index' ), 'simplifiedForumTable' );
|
||||
$table->classes = array( 'cTopicList' );
|
||||
$table->limit = \IPS\Settings::i()->forums_topics_per_page;
|
||||
$table->enableRealtime = true;
|
||||
|
||||
if ( \IPS\forums\Forum::getMemberListView() == 'snippet' )
|
||||
{
|
||||
$table->rowsTemplate = array( \IPS\Theme::i()->getTemplate( 'index' ), 'simplifiedTopicRowSnippet' );
|
||||
}
|
||||
else
|
||||
{
|
||||
$table->rowsTemplate = array( \IPS\Theme::i()->getTemplate( 'index' ), 'simplifiedTopicRow' );
|
||||
}
|
||||
|
||||
$table->honorPinned = \IPS\Settings::i()->forums_fluid_pinned;
|
||||
$table->hover = TRUE;
|
||||
$table->sortOptions['num_replies'] = $table->sortOptions['num_comments'];
|
||||
unset( $table->sortOptions['num_comments'] );
|
||||
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'index' )->simplifiedView( $table );
|
||||
|
||||
if( \IPS\forums\Forum::theOnlyForum() === NULL )
|
||||
{
|
||||
\IPS\Output::i()->sidebar['contextual'] = \IPS\Theme::i()->getTemplate( 'index' )->simplifiedViewForumSidebar( $forum );
|
||||
}
|
||||
|
||||
if ( isset( $where['container'] ) )
|
||||
{
|
||||
$allForumIds = iterator_to_array( \IPS\Db::i()->select( 'id', 'forums_forums', $where['container'] ) );
|
||||
\IPS\Output::i()->contextualSearchOptions[ \IPS\Member::loggedIn()->language()->addToStack('forums_chosen_forums') ] = array( 'type' => 'forums_topic', 'nodes' => implode( ',', $allForumIds ) );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Init table (it won't show anything until after the password check, but it sets navigation and titles) */
|
||||
$table = new \IPS\Helpers\Table\Content( 'IPS\forums\Topic', $forum->url(), $where, $forum, NULL, 'view', isset( \IPS\Request::i()->rss ) ? FALSE : TRUE, isset( \IPS\Request::i()->rss ) ? FALSE : TRUE, NULL, $getFirstComment, $getFollowerCount, $getReactions );
|
||||
$table->tableTemplate = array(\IPS\Theme::i()->getTemplate( 'forums', 'forums', 'front' ), 'forumTable');
|
||||
$table->classes = array('cTopicList');
|
||||
$table->limit = \IPS\Settings::i()->forums_topics_per_page;
|
||||
$table->title = \IPS\Member::loggedIn()->language()->addToStack( ( $forum->forums_bitoptions['bw_enable_answers'] ) ? 'count_questions_in_forum' : 'count_topics_in_forum', FALSE, array('pluralize' => array($forum->topics)) );
|
||||
if ( $forum->forums_bitoptions['bw_enable_answers'] )
|
||||
{
|
||||
$table->rowsTemplate = array($this->themeGroup, 'questionRow');
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( \IPS\forums\Forum::getMemberListView() == 'snippet' )
|
||||
{
|
||||
$table->rowsTemplate = array($this->themeGroup, 'topicRowSnippet');
|
||||
}
|
||||
else
|
||||
{
|
||||
$table->rowsTemplate = array($this->themeGroup, 'topicRow');
|
||||
}
|
||||
}
|
||||
|
||||
\IPS\Output::i()->contextualSearchOptions[ \IPS\Member::loggedIn()->language()->addToStack( 'search_contextual_item_forums' ) ] = array( 'type' => 'forums_topic', 'nodes' => $forum->_id );
|
||||
}
|
||||
|
||||
/* If there's only one forum and we're not in a club, we actually don't want the nav */
|
||||
if ( \IPS\forums\Forum::theOnlyForum() and !$forum->club() )
|
||||
{
|
||||
\IPS\Output::i()->breadcrumb = isset( \IPS\Output::i()->breadcrumb['module'] ) ? array('module' => \IPS\Output::i()->breadcrumb['module']) : array();
|
||||
}
|
||||
|
||||
$table->hover = TRUE;
|
||||
if ( isset( $table->sortOptions['num_comments'] ) )
|
||||
{
|
||||
$table->sortOptions['num_replies'] = $table->sortOptions['num_comments'];
|
||||
unset( $table->sortOptions['num_comments'] );
|
||||
}
|
||||
|
||||
/* Custom Search */
|
||||
$filterOptions = array(
|
||||
'all' => 'all_topics',
|
||||
'open' => 'open_topics',
|
||||
'popular' => 'popular_now',
|
||||
'poll' => 'poll',
|
||||
'locked' => 'locked_topics',
|
||||
'moved' => 'moved_topics',
|
||||
'all' => 'all_topics',
|
||||
'open' => 'open_topics',
|
||||
'popular' => 'popular_now',
|
||||
'poll' => 'poll',
|
||||
'locked' => 'locked_topics',
|
||||
'moved' => 'moved_topics',
|
||||
);
|
||||
$timeFrameOptions = array(
|
||||
'show_all' => 'show_all',
|
||||
'today' => 'today',
|
||||
'last_5_days' => 'last_5_days',
|
||||
'last_7_days' => 'last_7_days',
|
||||
'last_10_days' => 'last_10_days',
|
||||
'last_15_days' => 'last_15_days',
|
||||
'last_20_days' => 'last_20_days',
|
||||
'last_25_days' => 'last_25_days',
|
||||
'last_30_days' => 'last_30_days',
|
||||
'last_60_days' => 'last_60_days',
|
||||
'last_90_days' => 'last_90_days',
|
||||
'show_all' => 'show_all',
|
||||
'today' => 'today',
|
||||
'last_5_days' => 'last_5_days',
|
||||
'last_7_days' => 'last_7_days',
|
||||
'last_10_days' => 'last_10_days',
|
||||
'last_15_days' => 'last_15_days',
|
||||
'last_20_days' => 'last_20_days',
|
||||
'last_25_days' => 'last_25_days',
|
||||
'last_30_days' => 'last_30_days',
|
||||
'last_60_days' => 'last_60_days',
|
||||
'last_90_days' => 'last_90_days',
|
||||
);
|
||||
|
||||
|
||||
if ( \IPS\Member::loggedIn()->member_id )
|
||||
{
|
||||
$filterOptions['starter'] = $forum->forums_bitoptions['bw_enable_answers'] ? 'questions_i_asked' : 'topics_i_started';
|
||||
$filterOptions['replied'] = $forum->forums_bitoptions['bw_enable_answers'] ? 'questions_i_posted_in' : 'topics_i_posted_in';
|
||||
|
||||
if ( \IPS\Member::loggedIn()->member_id AND \IPS\Member::loggedIn()->last_visit)
|
||||
if ( \IPS\Member::loggedIn()->member_id and \IPS\Member::loggedIn()->last_visit )
|
||||
{
|
||||
$timeFrameOptions['since_last_visit'] = \IPS\Member::loggedIn()->language()->addToStack('since_last_visit', FALSE, array( 'sprintf' => array( \IPS\DateTime::ts( \IPS\Member::loggedIn()->last_visit ) ) ) );
|
||||
$timeFrameOptions['since_last_visit'] = \IPS\Member::loggedIn()->language()->addToStack( 'since_last_visit', FALSE, array('sprintf' => array(\IPS\DateTime::ts( \IPS\Member::loggedIn()->last_visit ))) );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if ( $forum->forums_bitoptions['bw_enable_answers'] )
|
||||
{
|
||||
$table->filters = array(
|
||||
'questions_with_best_answers' => 'topic_answered_pid>0',
|
||||
'questions_without_best_answers' => 'topic_answered_pid=0',
|
||||
'questions_with_best_answers' => 'topic_answered_pid>0',
|
||||
'questions_without_best_answers' => 'topic_answered_pid=0',
|
||||
);
|
||||
|
||||
|
||||
$table->sortOptions['question_rating'] = 'forums_topics.question_rating';
|
||||
}
|
||||
else if ( $forum->forums_bitoptions['bw_enable_answers_moderator'] )
|
||||
else
|
||||
{
|
||||
$table->filters = array(
|
||||
'solved_topics' => 'topic_answered_pid>0',
|
||||
'unsolved_topics' => 'topic_answered_pid=0',
|
||||
);
|
||||
if ( $forum->forums_bitoptions['bw_enable_answers_moderator'] )
|
||||
{
|
||||
$table->filters = array(
|
||||
'solved_topics' => 'topic_answered_pid>0',
|
||||
'unsolved_topics' => 'topic_answered_pid=0',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/* Are we a moderator? */
|
||||
if( \IPS\forums\Topic::modPermission( 'unhide', NULL, $forum ) )
|
||||
if ( \IPS\forums\Topic::modPermission( 'unhide', NULL, $forum ) )
|
||||
{
|
||||
$filterOptions['queued_topics'] = 'queued_topics';
|
||||
$filterOptions['queued_posts'] = 'queued_posts';
|
||||
$filterOptions['queued_topics'] = 'queued_topics';
|
||||
$filterOptions['queued_posts'] = 'queued_posts';
|
||||
|
||||
$table->filters['filter_hidden_topics'] = 'approved=-1';
|
||||
$table->filters['filter_hidden_posts_in_topics'] = 'topic_hiddenposts=1';
|
||||
}
|
||||
|
||||
/* Are we filtering by queued topics or posts? */
|
||||
if( \IPS\Request::i()->filter == 'queued_topics' OR \IPS\Request::i()->filter == 'queued_posts' )
|
||||
if ( \IPS\Request::i()->filter == 'queued_topics' or \IPS\Request::i()->filter == 'queued_posts' )
|
||||
{
|
||||
\IPS\Request::i()->advanced_search_submitted = 1;
|
||||
\IPS\Request::i()->csrfKey = \IPS\Session::i()->csrfKey;
|
||||
\IPS\Request::i()->topic_type = \IPS\Request::i()->filter;
|
||||
}
|
||||
|
||||
|
||||
$table->advancedSearch = array(
|
||||
'topic_type' => array( \IPS\Helpers\Table\SEARCH_SELECT, array( 'options' => $filterOptions ) ),
|
||||
'sort_by' => array( \IPS\Helpers\Table\SEARCH_SELECT, array( 'options' => array(
|
||||
'last_post' => 'last_post',
|
||||
'replies' => 'replies',
|
||||
'views' => 'views',
|
||||
'topic_title' => 'topic_title',
|
||||
'last_poster' => 'last_poster',
|
||||
'topic_started' => 'topic_started',
|
||||
'topic_starter' => $forum->forums_bitoptions['bw_enable_answers'] ? 'question_asker' : 'topic_starter',
|
||||
) )
|
||||
'topic_type' => array(\IPS\Helpers\Table\SEARCH_SELECT, array('options' => $filterOptions)),
|
||||
'sort_by' => array(\IPS\Helpers\Table\SEARCH_SELECT, array('options' => array(
|
||||
'last_post' => 'last_post',
|
||||
'replies' => 'replies',
|
||||
'views' => 'views',
|
||||
'topic_title' => 'topic_title',
|
||||
'last_poster' => 'last_poster',
|
||||
'topic_started' => 'topic_started',
|
||||
'topic_starter' => $forum->forums_bitoptions['bw_enable_answers'] ? 'question_asker' : 'topic_starter',
|
||||
))
|
||||
),
|
||||
'sort_direction'=> array( \IPS\Helpers\Table\SEARCH_SELECT, array( 'options' => array(
|
||||
'asc' => 'asc',
|
||||
'desc' => 'desc',
|
||||
) )
|
||||
'sort_direction' => array(\IPS\Helpers\Table\SEARCH_SELECT, array('options' => array(
|
||||
'asc' => 'asc',
|
||||
'desc' => 'desc',
|
||||
))
|
||||
),
|
||||
'time_frame' => array( \IPS\Helpers\Table\SEARCH_SELECT, array( 'options' => $timeFrameOptions ) ),
|
||||
'time_frame' => array(\IPS\Helpers\Table\SEARCH_SELECT, array('options' => $timeFrameOptions)),
|
||||
);
|
||||
$table->advancedSearchCallback = function( $table, $values )
|
||||
{
|
||||
$table->advancedSearchCallback = function ( $table, $values ) {
|
||||
/* Type */
|
||||
switch ( $values['topic_type'] )
|
||||
{
|
||||
case 'open':
|
||||
$table->where[] = array( 'state=?', 'open' );
|
||||
$table->where[] = array('state=?', 'open');
|
||||
break;
|
||||
case 'popular':
|
||||
$table->where[] = array( 'popular_time IS NOT NULL AND popular_time>?', time() );
|
||||
$table->where[] = array('popular_time IS NOT NULL AND popular_time>?', time());
|
||||
break;
|
||||
case 'poll':
|
||||
$table->where[] = array( 'poll_state<>0' );
|
||||
$table->where[] = array('poll_state<>0');
|
||||
break;
|
||||
case 'locked':
|
||||
$table->where[] = array( 'state=?', 'closed' );
|
||||
$table->where[] = array('state=?', 'closed');
|
||||
break;
|
||||
case 'moved':
|
||||
$table->where[] = array( 'state=?', 'link' );
|
||||
$table->where[] = array('state=?', 'link');
|
||||
break;
|
||||
case 'starter':
|
||||
$table->where[] = array( 'starter_id=?', \IPS\Member::loggedIn()->member_id );
|
||||
$table->where[] = array('starter_id=?', \IPS\Member::loggedIn()->member_id);
|
||||
break;
|
||||
case 'replied':
|
||||
$table->joinComments = TRUE;
|
||||
$table->where[] = array( 'forums_posts.author_id=?', \IPS\Member::loggedIn()->member_id );
|
||||
$table->where[] = array('forums_posts.author_id=?', \IPS\Member::loggedIn()->member_id);
|
||||
break;
|
||||
case 'answered':
|
||||
$table->where[] = array( 'topic_answered_pid<>0' );
|
||||
$table->where[] = array('topic_answered_pid<>0');
|
||||
break;
|
||||
case 'unanswered':
|
||||
$table->where[] = array( 'topic_answered_pid=0' );
|
||||
$table->where[] = array('topic_answered_pid=0');
|
||||
break;
|
||||
case 'queued_topics':
|
||||
$table->where[] = array( 'approved=0' );
|
||||
$table->where[] = array('approved=0');
|
||||
break;
|
||||
case 'queued_posts':
|
||||
$table->where[] = array( 'topic_queuedposts>0' );
|
||||
$table->where[] = array('topic_queuedposts>0');
|
||||
break;
|
||||
}
|
||||
|
||||
if ( ! isset( $values['sort_by'] ) )
|
||||
|
||||
if ( !isset( $values['sort_by'] ) )
|
||||
{
|
||||
$values['sort_by'] = 'forums_topics.last_post';
|
||||
}
|
||||
|
||||
|
||||
/* Sort */
|
||||
switch ( $values['sort_by'] )
|
||||
{
|
||||
@@ -288,10 +416,10 @@ class _forums extends \IPS\Dispatcher\Controller
|
||||
break;
|
||||
}
|
||||
$table->sortDirection = $values['sort_direction'];
|
||||
|
||||
|
||||
/* Cutoff */
|
||||
$days = NULL;
|
||||
|
||||
|
||||
if ( isset( $values['time_frame'] ) )
|
||||
{
|
||||
switch ( $values['time_frame'] )
|
||||
@@ -327,18 +455,18 @@ class _forums extends \IPS\Dispatcher\Controller
|
||||
$days = 90;
|
||||
break;
|
||||
case 'since_last_visit':
|
||||
$table->where[] = array( 'forums_topics.last_post>?', \IPS\Member::loggedIn()->last_visit );
|
||||
$table->where[] = array('forums_topics.last_post>?', \IPS\Member::loggedIn()->last_visit);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $days !== NULL )
|
||||
{
|
||||
$table->where[] = array( 'forums_topics.last_post>?', \IPS\DateTime::create()->sub( new \DateInterval( 'P' . $days . 'D' ) )->getTimestamp() );
|
||||
$table->where[] = array('forums_topics.last_post>?', \IPS\DateTime::create()->sub( new \DateInterval( 'P' . $days . 'D' ) )->getTimestamp());
|
||||
}
|
||||
};
|
||||
\IPS\Request::i()->sort_direction = \IPS\Request::i()->sort_direction ?: mb_strtolower( $table->sortDirection );
|
||||
|
||||
\IPS\Request::i()->sort_direction = \IPS\Request::i()->sort_direction ?: mb_strtolower( $table->sortDirection );
|
||||
|
||||
/* Saved actions */
|
||||
foreach ( \IPS\forums\SavedAction::actions( $forum ) as $action )
|
||||
{
|
||||
@@ -353,7 +481,7 @@ class _forums extends \IPS\Dispatcher\Controller
|
||||
|
||||
if ( \IPS\Member::loggedIn()->member_id )
|
||||
{
|
||||
$key = md5( ( \IPS\Member::loggedIn()->members_pass_hash ?: \IPS\Member::loggedIn()->email ) . \IPS\Member::loggedIn()->members_pass_salt );
|
||||
$key = \IPS\Member::loggedIn()->getUniqueMemberHash();
|
||||
|
||||
$rssUrl = $rssUrl->setQueryString( array( 'member' => \IPS\Member::loggedIn()->member_id , 'key' => $key ) );
|
||||
}
|
||||
@@ -377,6 +505,23 @@ class _forums extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
\IPS\forums\Forum::populateFollowerCounts( $forum );
|
||||
}
|
||||
|
||||
/* Data Layer Context */
|
||||
if ( !\IPS\Request::i()->isAjax AND \IPS\Settings::i()->core_datalayer_enabled )
|
||||
{
|
||||
foreach ( $forum->getDataLayerProperties() as $key => $value )
|
||||
{
|
||||
\IPS\core\DataLayer::i()->addContextProperty( $key, $value );
|
||||
\IPS\core\DataLayer::i()->addContextProperty( 'sort_direction', \IPS\Request::i()->sort_direction ?: null );
|
||||
$sortby = \IPS\Request::i()->sort_by ?: null;
|
||||
if ( $sortby AND !\in_array( $sortby, ['asc', 'desc'] ) )
|
||||
{
|
||||
$sortby = null;
|
||||
}
|
||||
\IPS\core\DataLayer::i()->addContextProperty( 'sort_by', $sortby );
|
||||
\IPS\core\DataLayer::i()->addContextProperty( 'page_number', 'page' );
|
||||
}
|
||||
}
|
||||
|
||||
/* Show Forum */
|
||||
if ( isset( \IPS\Request::i()->advancedSearchForm ) )
|
||||
@@ -384,11 +529,10 @@ class _forums extends \IPS\Dispatcher\Controller
|
||||
\IPS\Output::i()->output = (string) $table;
|
||||
return;
|
||||
}
|
||||
\IPS\Output::i()->contextualSearchOptions[ \IPS\Member::loggedIn()->language()->addToStack( 'search_contextual_item_forums' ) ] = array( 'type' => 'forums_topic', 'nodes' => $forum->_id );
|
||||
|
||||
$forumOutput = '';
|
||||
|
||||
if ( $forum->forums_bitoptions['bw_enable_answers'] )
|
||||
if ( ! $forum->isCombinedView() and $forum->forums_bitoptions['bw_enable_answers'] )
|
||||
{
|
||||
$featuredTopic = NULL;
|
||||
|
||||
@@ -412,14 +556,25 @@ class _forums extends \IPS\Dispatcher\Controller
|
||||
$newQuestions = \IPS\forums\Topic::getItemsWithPermission( $newQuestionsWhere, 'start_date DESC', 5 );
|
||||
$forumOutput = \IPS\Theme::i()->getTemplate( 'forums' )->qaForum( (string) $table, $popularQuestions, $newQuestions, $featuredTopic, $forum );
|
||||
}
|
||||
else if( $forum->sub_can_post )
|
||||
else if( $forum->sub_can_post or $forum->isCombinedView() )
|
||||
{
|
||||
$forumOutput = (string) $table;
|
||||
}
|
||||
|
||||
$table = $this->postProcessTable( $table );
|
||||
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js('front_forum.js', 'forums' ) );
|
||||
\IPS\Output::i()->output = $this->themeGroup->forumDisplay( $forum, $forumOutput );
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the forum table
|
||||
*
|
||||
* @return \IPS\Helpers\Table\Content
|
||||
*/
|
||||
protected function postProcessTable( $table ) {
|
||||
return $table;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show Club Forums
|
||||
@@ -596,10 +751,39 @@ class _forums extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
\IPS\Db::i()->replace( 'forums_view_method', array( 'member_id' => \IPS\Member::loggedIn()->member_id, 'method' => $method, 'type' => 'list' ) );
|
||||
}
|
||||
|
||||
|
||||
if ( ! \IPS\Request::i()->id )
|
||||
{
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=forums&module=forums&controller=index', 'front', 'forums' ) );
|
||||
}
|
||||
\IPS\Output::i()->redirect( \IPS\forums\Forum::load( \IPS\Request::i()->id )->url() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Populate the combined fluid view start modal form elements
|
||||
* @param $nodes
|
||||
* @param $disabled
|
||||
* @param $node
|
||||
* @param int $depth
|
||||
*/
|
||||
protected function _selectForumPopulate( &$nodes, &$disabled, $node, $depth = 0 )
|
||||
{
|
||||
if ( $node->can('view') )
|
||||
{
|
||||
$nodes[ $node->_id ] = str_repeat( '- ', $depth ) . $node->_title;
|
||||
|
||||
if ( ! $node->can('add') )
|
||||
{
|
||||
$disabled[] = $node->_id;
|
||||
}
|
||||
|
||||
foreach( $node->children() AS $child )
|
||||
{
|
||||
$this->_selectForumPopulate( $nodes, $disabled, $child, $depth + 1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows the forum selector for creating a topic outside of specific forum
|
||||
*
|
||||
@@ -607,31 +791,59 @@ class _forums extends \IPS\Dispatcher\Controller
|
||||
*/
|
||||
protected function _selectForum()
|
||||
{
|
||||
if( !\IPS\forums\Forum::canOnAny( 'add' ) )
|
||||
{
|
||||
\IPS\Output::i()->error( 'no_module_permission', '2F176/5', 403, 'no_module_permission_guest' );
|
||||
}
|
||||
|
||||
$form = new \IPS\Helpers\Form( 'select_forum', 'continue' );
|
||||
$form->class = 'ipsForm_vertical ipsForm_noLabels';
|
||||
$form->add( new \IPS\Helpers\Form\Node( 'forum', NULL, TRUE, array(
|
||||
'url' => \IPS\Http\Url::internal( 'app=forums&module=forums&controller=forums&do=createMenu' ),
|
||||
'class' => 'IPS\forums\Forum',
|
||||
'permissionCheck' => function( $node )
|
||||
{
|
||||
if ( $node->can( 'view' ) )
|
||||
{
|
||||
if ( $node->can( 'add' ) )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
},
|
||||
'clubs' => \IPS\Settings::i()->club_nodes_in_apps
|
||||
) ) );
|
||||
|
||||
if ( isset( \IPS\Request::i()->root ) )
|
||||
{
|
||||
$root = \IPS\forums\Forum::load( \IPS\Request::i()->root );
|
||||
$options = [];
|
||||
$disabled = [];
|
||||
$this->_selectForumPopulate( $options, $disabled, $root );
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Select( 'forum', $root->id, TRUE, [
|
||||
'options' => $options,
|
||||
'disabled' => $disabled
|
||||
] ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
$form->add( new \IPS\Helpers\Form\Node( 'forum', NULL, TRUE, array(
|
||||
'url' => \IPS\Http\Url::internal( 'app=forums&module=forums&controller=forums&do=createMenu' ),
|
||||
'class' => 'IPS\forums\Forum',
|
||||
'permissionCheck' => function ( $node ) {
|
||||
if ( $node->can( 'view' ) )
|
||||
{
|
||||
if ( $node->can( 'add' ) )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
},
|
||||
'clubs' => \IPS\Settings::i()->club_nodes_in_apps
|
||||
) ) );
|
||||
}
|
||||
if ( $values = $form->values() )
|
||||
{
|
||||
\IPS\Output::i()->redirect( $values['forum']->url()->setQueryString( 'do', 'add' ) );
|
||||
if ( \is_numeric( $values['forum'] ) )
|
||||
{
|
||||
$forum = \IPS\forums\Forum::load( $values['forum'] );
|
||||
}
|
||||
else
|
||||
{
|
||||
$forum = $values['forum'];
|
||||
}
|
||||
|
||||
\IPS\Output::i()->redirect( $forum->url()->setQueryString( 'do', 'add' ) );
|
||||
}
|
||||
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack( 'select_forum' );
|
||||
|
||||
@@ -117,7 +117,7 @@ class _index extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
$where = array();
|
||||
|
||||
if ( \IPS\forums\Forum::hasPasswordForums() )
|
||||
if ( \IPS\forums\Forum::customPermissionNodes() )
|
||||
{
|
||||
$where = array( 'container' => array( array( 'forums_forums.password IS NULL' ) ) );
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ class _topic extends \IPS\Content\Controller
|
||||
/**
|
||||
* View Topic
|
||||
*
|
||||
* @return void
|
||||
* @return \IPS\Content\Item
|
||||
* @throws \Exception
|
||||
*/
|
||||
protected function manage()
|
||||
@@ -263,7 +263,7 @@ class _topic extends \IPS\Content\Controller
|
||||
$current = current( $comments );
|
||||
reset( $comments );
|
||||
|
||||
if( !\count( $comments ) AND !$topic->isQuestion() )
|
||||
if( ( !\count( $comments ) AND !$topic->isQuestion() ) OR ( $topic->isQuestion() AND empty( $question ) ) )
|
||||
{
|
||||
\IPS\Output::i()->error( 'no_posts_returned', '2F173/L', 404, '' );
|
||||
}
|
||||
@@ -296,6 +296,9 @@ class _topic extends \IPS\Content\Controller
|
||||
reset( $comments );
|
||||
}
|
||||
|
||||
/* A convenient hook point to do any further set up */
|
||||
$this->finishManage( $topic );
|
||||
|
||||
$votes = array();
|
||||
$topicVotes = array();
|
||||
|
||||
@@ -357,29 +360,43 @@ class _topic extends \IPS\Content\Controller
|
||||
{
|
||||
try
|
||||
{
|
||||
$answer = \IPS\forums\Topic\Post::load( $topic->topic_answered_pid );
|
||||
|
||||
\IPS\Output::i()->jsonLd['topic']['mainEntity']['acceptedAnswer'] = array(
|
||||
'@type' => 'Answer',
|
||||
'text' => $answer->truncated( TRUE, NULL ),
|
||||
'url' => (string) $answer->url(),
|
||||
'dateCreated' => \IPS\DateTime::ts( $answer->post_date )->format( \IPS\DateTime::ISO8601 ),
|
||||
'upvoteCount' => $answer->reactionCount(),
|
||||
'author' => array(
|
||||
'@type' => 'Person',
|
||||
'name' => $answer->author_name ?: \IPS\Member::load( $answer->author_id )->name,
|
||||
'image' => \IPS\Member::load( $answer->author_id )->get_photo( TRUE, TRUE )
|
||||
),
|
||||
);
|
||||
|
||||
if( $topic->isQuestion() )
|
||||
$postClass = '\IPS\forums\Topic\Post';
|
||||
|
||||
if( $topic->isArchived() )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['topic']['mainEntity']['acceptedAnswer']['upvoteCount'] = $answer->post_field_int;
|
||||
$postClass = '\IPS\forums\Topic\ArchivedPost';
|
||||
}
|
||||
|
||||
if( $answer->author_id )
|
||||
|
||||
$answer = $postClass::load( $topic->topic_answered_pid );
|
||||
|
||||
/* Set up our column names */
|
||||
$authorIdColumn = $answer::$databaseColumnMap['author'];
|
||||
$dateColumn = $answer::$databaseColumnMap['date'];
|
||||
|
||||
if ( $truncatedAnswer = $answer->truncated( TRUE, NULL ) )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['topic']['mainEntity']['acceptedAnswer']['author']['url'] = (string) \IPS\Member::load( $answer->author_id )->url();
|
||||
\IPS\Output::i()->jsonLd['topic']['mainEntity']['acceptedAnswer'] = array(
|
||||
'@type' => 'Answer',
|
||||
'text' => $truncatedAnswer,
|
||||
'url' => (string) $answer->url(),
|
||||
'dateCreated' => \IPS\DateTime::ts( $answer->$dateColumn )->format( \IPS\DateTime::ISO8601 ),
|
||||
'upvoteCount' => ( $topic->isArchived() ) ? $answer->field_int : $answer->post_field_int,
|
||||
'author' => array(
|
||||
'@type' => 'Person',
|
||||
'name' => \IPS\Member::load( $answer->$authorIdColumn )->name,
|
||||
'image' => \IPS\Member::load( $answer->$authorIdColumn )->get_photo( TRUE, TRUE )
|
||||
),
|
||||
);
|
||||
|
||||
if( $topic->isQuestion() )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['topic']['mainEntity']['acceptedAnswer']['upvoteCount'] = ( $topic->isArchived() ) ? $answer->field_int : $answer->post_field_int;
|
||||
}
|
||||
|
||||
if( $answer->author_id )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['topic']['mainEntity']['acceptedAnswer']['author']['url'] = (string) \IPS\Member::load( $answer->$authorIdColumn )->url();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch( \OutOfRangeException $e ){}
|
||||
@@ -424,14 +441,19 @@ class _topic extends \IPS\Content\Controller
|
||||
$commentJson = [];
|
||||
foreach( $comments as $comment )
|
||||
{
|
||||
/* Set up our column names */
|
||||
$idColumn = $comment::$databaseColumnId;
|
||||
$authorIdColumn = $comment::$databaseColumnMap['author'];
|
||||
$dateColumn = $comment::$databaseColumnMap['date'];
|
||||
|
||||
// Don't include the first post as a "comment"
|
||||
if( $comment->pid == $topic->topic_firstpost )
|
||||
if( $comment->$idColumn == $topic->topic_firstpost )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Don't include the answer as the suggested answer
|
||||
if( $isQuestion and ( $comment->pid === $topic->mapped('solved_comment_id') ) )
|
||||
if( $isQuestion and ( $comment->$idColumn === $topic->mapped('solved_comment_id') ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -442,21 +464,30 @@ class _topic extends \IPS\Content\Controller
|
||||
|
||||
$commentJson[$i] = array(
|
||||
'@type' => $isQuestion ? 'Answer' : 'Comment',
|
||||
'@id' => (string)$url->setFragment( 'comment-' . $comment->pid ),
|
||||
'url' => (string)$url->setFragment( 'comment-' . $comment->pid ),
|
||||
'@id' => (string)$url->setFragment( 'comment-' . $comment->$idColumn ),
|
||||
'url' => (string)$url->setFragment( 'comment-' . $comment->$idColumn ),
|
||||
'author' => array(
|
||||
'@type' => 'Person',
|
||||
'name' => $comment->author_name ?: \IPS\Member::load( $comment->author_id )->name,
|
||||
'image' => \IPS\Member::load( $comment->author_id )->get_photo( TRUE, TRUE )
|
||||
'name' => \IPS\Member::load( $comment->$authorIdColumn )->name,
|
||||
'image' => \IPS\Member::load( $comment->$authorIdColumn )->get_photo( TRUE, TRUE )
|
||||
),
|
||||
'dateCreated' => \IPS\DateTime::ts( $comment->post_date )->format( \IPS\DateTime::ISO8601 ),
|
||||
'upvoteCount' => $comment->reactionCount(),
|
||||
'dateCreated' => \IPS\DateTime::ts( $comment->$dateColumn )->format( \IPS\DateTime::ISO8601 ),
|
||||
|
||||
'text' => $truncatedComment,
|
||||
);
|
||||
|
||||
if ( $comment->author_id )
|
||||
if ( $comment->$authorIdColumn )
|
||||
{
|
||||
$commentJson[$i]['author']['url'] = (string)\IPS\Member::load( $comment->author_id )->url();
|
||||
$commentJson[$i]['author']['url'] = (string)\IPS\Member::load( $comment->$authorIdColumn )->url();
|
||||
}
|
||||
|
||||
if( $isQuestion )
|
||||
{
|
||||
$commentJson[$i]['upvoteCount'] = ( $topic->isArchived() ) ? $comment->field_int : $comment->post_field_int;
|
||||
}
|
||||
else
|
||||
{
|
||||
$commentJson[$i]['upvoteCount'] = $comment->reactionCount();
|
||||
}
|
||||
|
||||
$i++;
|
||||
@@ -491,7 +522,7 @@ class _topic extends \IPS\Content\Controller
|
||||
{
|
||||
/* We do not want to use the \IPS\CACHE_PRIVATE_TIMEOUT constant here, as we explicitly want to cache archived topics for longer times */
|
||||
$httpHeaders = array( 'Expires' => \IPS\DateTime::create()->add( new \DateInterval( 'PT12H' ) )->rfc1123() ,
|
||||
'Cache-Control' => "max-age=" . ( 60 * 60 * 12 ) . ", s-maxage=" . ( 60 * 60 * 12 ) . ", public, stale-if-error, stale-while-revalidate" );
|
||||
'Cache-Control' => 'no-cache="Set-Cookie", max-age=' . ( 60 * 60 * 12 ) . ", s-maxage=" . ( 60 * 60 * 12 ) . ", public, stale-if-error, stale-while-revalidate" );
|
||||
|
||||
\IPS\Output::i()->httpHeaders += $httpHeaders;
|
||||
}
|
||||
@@ -507,7 +538,7 @@ class _topic extends \IPS\Content\Controller
|
||||
'image' => (string) \IPS\Member::load( $topic->starter_id )->get_photo( TRUE, TRUE ),
|
||||
'author' => array(
|
||||
'@type' => 'Person',
|
||||
'name' => $topic->starter_name ?: \IPS\Member::load( $topic->starter_id )->name,
|
||||
'name' => \IPS\Member::load( $topic->starter_id )->name,
|
||||
'image' => \IPS\Member::load( $topic->starter_id )->get_photo( TRUE, TRUE )
|
||||
),
|
||||
'interactionStatistic' => array(
|
||||
@@ -532,6 +563,8 @@ class _topic extends \IPS\Content\Controller
|
||||
/* Show topic */
|
||||
\IPS\Output::i()->cssFiles = array_merge( \IPS\Output::i()->cssFiles, \IPS\Theme::i()->css( 'topics.css', 'forums' ) );
|
||||
\IPS\Output::i()->output .= \IPS\Theme::i()->getTemplate( 'topics' )->topic( $topic, $comments, $question, $votes, $nextUnread, $pagination, $topicVotes );
|
||||
|
||||
return $topic;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"1": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"forums_forums",
|
||||
{
|
||||
"name": "last_poster_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -36,24 +36,6 @@
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"forums_forums",
|
||||
{
|
||||
"name": "last_poster_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"4": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"forums_topics",
|
||||
@@ -71,7 +53,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"5": {
|
||||
"4": {
|
||||
"method": "update",
|
||||
"params": [
|
||||
"core_notifications",
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106108,
|
||||
"name": "4.6.0",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106109,
|
||||
"name": "4.6.0",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106110,
|
||||
"name": "4.6.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106111,
|
||||
"name": "4.6.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106112,
|
||||
"name": "4.6.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106113,
|
||||
"name": "4.6.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106114,
|
||||
"name": "4.6.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106115,
|
||||
"name": "4.6.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106116,
|
||||
"name": "4.6.3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/global\/manageFollowNodeRow"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106117,
|
||||
"name": "4.6.3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106118,
|
||||
"name": "4.6.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/index\/simplifiedForumTable"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106119,
|
||||
"name": "4.6.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106120,
|
||||
"name": "4.6.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106121,
|
||||
"name": "4.6.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106122,
|
||||
"name": "4.6.5",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106123,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"added": [],
|
||||
"edited": [
|
||||
"digests__comment",
|
||||
"digests__item"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"forums\/front\/controllers\/forum\/ips.forum.flow.js",
|
||||
"forums\/front\/controllers\/forum\/ips.forum.forumList.js",
|
||||
"forums\/front\/controllers\/forum\/ips.forum.forumPage.js",
|
||||
"forums\/front\/controllers\/forum\/ips.forum.hovercard.js",
|
||||
"forums\/admin\/controllers\/settings\/ips.settings.archiveRules.js",
|
||||
"forums\/front\/controllers\/topic\/ips.topic.activity.js",
|
||||
"forums\/front\/controllers\/topic\/ips.topic.answers.js",
|
||||
"forums\/front\/controllers\/topic\/ips.topic.reply.js",
|
||||
"forums\/front\/controllers\/topic\/ips.topic.view.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [
|
||||
"global\/\/dev\/js\/\/framework\/",
|
||||
"global\/\/dev\/js\/\/library\/",
|
||||
"global\/\/dev\/js\/\/library\/\/jquery",
|
||||
"global\/\/dev\/js\/\/library\/\/linkify"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/forums\/clubForums",
|
||||
"front\/forums\/forumButtons",
|
||||
"front\/forums\/forumDisplay",
|
||||
"front\/forums\/forumHome",
|
||||
"front\/forums\/forumPasswordPopup",
|
||||
"front\/forums\/forumSelector",
|
||||
"front\/forums\/forumTable",
|
||||
"front\/forums\/popularQuestionRow",
|
||||
"front\/forums\/qaForum",
|
||||
"front\/forums\/questionRow",
|
||||
"front\/forums\/topicHover",
|
||||
"front\/forums\/topicRow",
|
||||
"front\/forums\/topicRowSnippet",
|
||||
"front\/global\/commentTableHeader",
|
||||
"front\/global\/embedPost",
|
||||
"front\/global\/embedTopic",
|
||||
"front\/global\/manageFollowNodeRow",
|
||||
"front\/global\/row",
|
||||
"front\/global\/rows",
|
||||
"front\/global\/searchNoPermission",
|
||||
"front\/global\/viewChange",
|
||||
"front\/global\/viewChangeList",
|
||||
"front\/index\/forumGridItem",
|
||||
"front\/index\/forumRow",
|
||||
"front\/index\/forumTableRow",
|
||||
"front\/index\/index",
|
||||
"front\/index\/indexButtons",
|
||||
"front\/index\/simplifiedForumTable",
|
||||
"front\/index\/simplifiedTopicRow",
|
||||
"front\/index\/simplifiedTopicRowSnippet",
|
||||
"front\/index\/simplifiedView",
|
||||
"front\/index\/simplifiedViewSidebar",
|
||||
"front\/index\/simplifiedViewSidebar_children",
|
||||
"admin\/livesearch\/forum",
|
||||
"admin\/settings\/archiveOffCic",
|
||||
"admin\/settings\/archiveRuleGtLt",
|
||||
"admin\/settings\/archiveRules",
|
||||
"admin\/settings\/archiveRuleTime",
|
||||
"admin\/settings\/popularNow",
|
||||
"admin\/stats\/solvedPercentage",
|
||||
"admin\/stats\/timeToSolved",
|
||||
"front\/submit\/createTopic",
|
||||
"front\/submit\/createTopicForm",
|
||||
"front\/submit\/createTopicModOptions",
|
||||
"front\/topics\/activity",
|
||||
"front\/topics\/post",
|
||||
"front\/topics\/postContainer",
|
||||
"front\/topics\/postRating",
|
||||
"front\/topics\/topic",
|
||||
"front\/widgets\/forumStatistics",
|
||||
"front\/widgets\/hotTopics",
|
||||
"front\/widgets\/poll",
|
||||
"front\/widgets\/pollFormWidget",
|
||||
"front\/widgets\/pollWidget",
|
||||
"front\/widgets\/postFeed",
|
||||
"front\/widgets\/topicFeed"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/forums_responsive.css",
|
||||
"front\/forums.css",
|
||||
"front\/topics.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106125,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"added": [],
|
||||
"edited": [
|
||||
"digests__comment",
|
||||
"digests__item"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"forums\/front\/controllers\/forum\/ips.forum.flow.js",
|
||||
"forums\/front\/controllers\/forum\/ips.forum.forumList.js",
|
||||
"forums\/admin\/controllers\/settings\/ips.settings.archiveRules.js",
|
||||
"forums\/front\/controllers\/topic\/ips.topic.answers.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/forums\/clubForums",
|
||||
"front\/forums\/forumButtons",
|
||||
"front\/forums\/forumDisplay",
|
||||
"front\/forums\/forumHome",
|
||||
"front\/forums\/forumPasswordPopup",
|
||||
"front\/forums\/forumSelector",
|
||||
"front\/forums\/forumTable",
|
||||
"front\/forums\/popularQuestionRow",
|
||||
"front\/forums\/qaForum",
|
||||
"front\/forums\/questionRow",
|
||||
"front\/forums\/topicHover",
|
||||
"front\/forums\/topicRow",
|
||||
"front\/forums\/topicRowSnippet",
|
||||
"front\/global\/commentTableHeader",
|
||||
"front\/global\/embedPost",
|
||||
"front\/global\/embedTopic",
|
||||
"front\/global\/manageFollowNodeRow",
|
||||
"front\/global\/row",
|
||||
"front\/global\/searchNoPermission",
|
||||
"front\/global\/viewChange",
|
||||
"front\/global\/viewChangeList",
|
||||
"front\/index\/forumGridItem",
|
||||
"front\/index\/forumRow",
|
||||
"front\/index\/index",
|
||||
"front\/index\/indexButtons",
|
||||
"front\/index\/simplifiedForumTable",
|
||||
"front\/index\/simplifiedTopicRow",
|
||||
"front\/index\/simplifiedTopicRowSnippet",
|
||||
"front\/index\/simplifiedView",
|
||||
"front\/index\/simplifiedViewSidebar",
|
||||
"front\/index\/simplifiedViewSidebar_children",
|
||||
"admin\/livesearch\/forum",
|
||||
"admin\/settings\/archiveOffCic",
|
||||
"admin\/settings\/archiveRuleGtLt",
|
||||
"admin\/settings\/archiveRules",
|
||||
"admin\/settings\/archiveRuleTime",
|
||||
"admin\/settings\/popularNow",
|
||||
"admin\/stats\/solvedPercentage",
|
||||
"admin\/stats\/timeToSolved",
|
||||
"front\/submit\/createTopic",
|
||||
"front\/submit\/createTopicForm",
|
||||
"front\/submit\/createTopicModOptions",
|
||||
"front\/topics\/activity",
|
||||
"front\/topics\/post",
|
||||
"front\/topics\/postContainer",
|
||||
"front\/topics\/postRating",
|
||||
"front\/topics\/topic",
|
||||
"front\/widgets\/forumStatistics",
|
||||
"front\/widgets\/hotTopics",
|
||||
"front\/widgets\/pollFormWidget",
|
||||
"front\/widgets\/pollWidget",
|
||||
"front\/widgets\/postFeed",
|
||||
"front\/widgets\/topicFeed"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/forums_responsive.css",
|
||||
"front\/forums.css",
|
||||
"front\/topics.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106126,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"added": [],
|
||||
"edited": [
|
||||
"digests__comment",
|
||||
"digests__item"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"forums\/front\/controllers\/forum\/ips.forum.flow.js",
|
||||
"forums\/front\/controllers\/forum\/ips.forum.forumList.js",
|
||||
"forums\/admin\/controllers\/settings\/ips.settings.archiveRules.js",
|
||||
"forums\/front\/controllers\/topic\/ips.topic.answers.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/forums\/clubForums",
|
||||
"front\/forums\/forumButtons",
|
||||
"front\/forums\/forumDisplay",
|
||||
"front\/forums\/forumHome",
|
||||
"front\/forums\/forumPasswordPopup",
|
||||
"front\/forums\/forumSelector",
|
||||
"front\/forums\/forumTable",
|
||||
"front\/forums\/popularQuestionRow",
|
||||
"front\/forums\/qaForum",
|
||||
"front\/forums\/questionRow",
|
||||
"front\/forums\/topicHover",
|
||||
"front\/forums\/topicRow",
|
||||
"front\/forums\/topicRowSnippet",
|
||||
"front\/global\/commentTableHeader",
|
||||
"front\/global\/embedPost",
|
||||
"front\/global\/embedTopic",
|
||||
"front\/global\/manageFollowNodeRow",
|
||||
"front\/global\/row",
|
||||
"front\/global\/searchNoPermission",
|
||||
"front\/global\/viewChange",
|
||||
"front\/global\/viewChangeList",
|
||||
"front\/index\/forumGridItem",
|
||||
"front\/index\/forumRow",
|
||||
"front\/index\/index",
|
||||
"front\/index\/indexButtons",
|
||||
"front\/index\/simplifiedForumTable",
|
||||
"front\/index\/simplifiedTopicRow",
|
||||
"front\/index\/simplifiedTopicRowSnippet",
|
||||
"front\/index\/simplifiedView",
|
||||
"front\/index\/simplifiedViewSidebar",
|
||||
"front\/index\/simplifiedViewSidebar_children",
|
||||
"admin\/livesearch\/forum",
|
||||
"admin\/settings\/archiveOffCic",
|
||||
"admin\/settings\/archiveRuleGtLt",
|
||||
"admin\/settings\/archiveRules",
|
||||
"admin\/settings\/archiveRuleTime",
|
||||
"admin\/settings\/popularNow",
|
||||
"admin\/stats\/solvedPercentage",
|
||||
"admin\/stats\/timeToSolved",
|
||||
"front\/submit\/createTopic",
|
||||
"front\/submit\/createTopicForm",
|
||||
"front\/submit\/createTopicModOptions",
|
||||
"front\/topics\/activity",
|
||||
"front\/topics\/post",
|
||||
"front\/topics\/postContainer",
|
||||
"front\/topics\/postRating",
|
||||
"front\/topics\/topic",
|
||||
"front\/widgets\/forumStatistics",
|
||||
"front\/widgets\/hotTopics",
|
||||
"front\/widgets\/pollFormWidget",
|
||||
"front\/widgets\/pollWidget",
|
||||
"front\/widgets\/postFeed",
|
||||
"front\/widgets\/topicFeed"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/forums_responsive.css",
|
||||
"front\/forums.css",
|
||||
"front\/topics.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106127,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": true,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"forums\/front\/controllers\/forum\/ips.forum.flow.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106128,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/global\/rows",
|
||||
"front\/index\/forumTableRow",
|
||||
"front\/widgets\/poll"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106129,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106130,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106131,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106132,
|
||||
"name": "4.6.6",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106133,
|
||||
"name": "4.6.6",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106134,
|
||||
"name": "4.6.7 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"menu__forums_stats_topics",
|
||||
"menu__forums_stats_posts",
|
||||
"stats_new_topics",
|
||||
"stats_new_posts",
|
||||
"stats_topics_tab_total",
|
||||
"stats_topics_tab_byforum",
|
||||
"stats_topics_title",
|
||||
"stats_topics_title_byforum",
|
||||
"stats_posts_tab_total",
|
||||
"stats_posts_tab_byforum",
|
||||
"stats_posts_title",
|
||||
"stats_posts_title_byforum"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [
|
||||
"admin\/stats\/statsTypeWrapper"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106135,
|
||||
"name": "4.6.7 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106136,
|
||||
"name": "4.6.7",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106137,
|
||||
"name": "4.6.7",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106138,
|
||||
"name": "4.6.8 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"stats_topics_tab_solved",
|
||||
"stats_topics_title_solved",
|
||||
"menu__forums_stats_questions",
|
||||
"stats_question_ratings_title",
|
||||
"stats_question_ratings_negative",
|
||||
"stats_question_ratings_positive",
|
||||
"r__questions",
|
||||
"r__questions_manage"
|
||||
],
|
||||
"edited": [
|
||||
"r__topics_manage",
|
||||
"r__posts_manage"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/forums\/forumDisplay",
|
||||
"front\/forums\/forumTable",
|
||||
"front\/forums\/topicRowSnippet",
|
||||
"front\/index\/forumGridItem",
|
||||
"front\/index\/forumRow",
|
||||
"front\/index\/indexButtons",
|
||||
"front\/index\/simplifiedForumTable",
|
||||
"front\/index\/simplifiedTopicRowSnippet",
|
||||
"front\/index\/simplifiedView",
|
||||
"front\/topics\/activity",
|
||||
"front\/topics\/post",
|
||||
"front\/topics\/postContainer",
|
||||
"front\/topics\/topic"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/forums.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106139,
|
||||
"name": "4.6.8 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106140,
|
||||
"name": "4.6.8",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106141,
|
||||
"name": "4.6.8",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/index\/forumRow"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106142,
|
||||
"name": "4.6.8",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106143,
|
||||
"name": "4.6.8",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106144,
|
||||
"name": "4.6.9 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/forums\/forumButtons"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106145,
|
||||
"name": "4.6.9 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106146,
|
||||
"name": "4.6.9 Beta 3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106147,
|
||||
"name": "4.6.9",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106148,
|
||||
"name": "4.6.9",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106149,
|
||||
"name": "4.6.10 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106150,
|
||||
"name": "4.6.10 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106151,
|
||||
"name": "4.6.10",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106152,
|
||||
"name": "4.6.10",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106153,
|
||||
"name": "4.6.10",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106154,
|
||||
"name": "4.6.10",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106155,
|
||||
"name": "4.6.10",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106156,
|
||||
"name": "4.6.11 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106157,
|
||||
"name": "4.6.11 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106158,
|
||||
"name": "4.6.11 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106159,
|
||||
"name": "4.6.11",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106160,
|
||||
"name": "4.6.11",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106161,
|
||||
"name": "4.6.12",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106162,
|
||||
"name": "4.6.12 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106163,
|
||||
"name": "4.6.12 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": true,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"forums\/front\/controllers\/forum\/ips.forum.flow.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"bw_fluid_view",
|
||||
"bw_fluid_view_desc",
|
||||
"bw_fluid_view__warning",
|
||||
"combined_fluid_view"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
Loaded 100 of 1933 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user