Version 4.2.0
This commit is contained in:
1 parent
0dc2aee5ed
commit
96997ddd8e
2074 files changed
+125454
-55780
No files matched your search
@@ -2,8 +2,8 @@
|
||||
/**
|
||||
* @brief Blog Application Class
|
||||
* @author <a href=''>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2014 Invision Power Services, Inc.
|
||||
* @package IPS Community Suite
|
||||
* @copyright (c) Invision Power Services, Inc.
|
||||
* @package Invision Community
|
||||
* @subpackage Blog
|
||||
* @since 3 Mar 2014
|
||||
* @version
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Blog Blogs API
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 9 Dec 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\api;
|
||||
@@ -22,8 +21,14 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
/**
|
||||
* @brief Blog Blogs API
|
||||
*/
|
||||
class _blogs extends \IPS\Api\Controller
|
||||
{
|
||||
class _blogs extends \IPS\Node\Api\NodeController
|
||||
{
|
||||
|
||||
/**
|
||||
* Class
|
||||
*/
|
||||
protected $class = 'IPS\blogs\Blog';
|
||||
|
||||
/**
|
||||
* GET /blog/blogs
|
||||
* Get list of blogs
|
||||
@@ -92,13 +97,18 @@ class _blogs extends \IPS\Api\Controller
|
||||
*/
|
||||
public function GETitem( $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
return new \IPS\Api\Response( 200, \IPS\blog\Blog::load( $id )->apiOutput() );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'INVALID_ID', '2B302/1', 404 );
|
||||
}
|
||||
return $this->_view( $id );
|
||||
}
|
||||
|
||||
/**
|
||||
* DELETE /blog/blogs/{id}
|
||||
* Delete a blog
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @return void
|
||||
*/
|
||||
public function DELETEitem( $id )
|
||||
{
|
||||
return $this->_delete( $id );
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Blog Entry Comments API
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 8 Dec 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\api;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Blog Entries API
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 9 Dec 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\api;
|
||||
@@ -62,6 +61,26 @@ class _entries extends \IPS\Content\Api\ItemController
|
||||
|
||||
/**
|
||||
* GET /blog/entries/{id}
|
||||
* View information about a specific blog entry
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @throws 2B300/A INVALID_ID The entry ID does not exist
|
||||
* @return \IPS\blog\Entry
|
||||
*/
|
||||
public function GETitem( $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
return $this->_view( $id );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'INVALID_ID', '2B300/A', 404 );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /blog/entries/{id}/comments
|
||||
* View comments on an entry
|
||||
*
|
||||
* @param int $id ID Number
|
||||
@@ -69,7 +88,7 @@ class _entries extends \IPS\Content\Api\ItemController
|
||||
* @throws 2B300/1 INVALID_ID The entry ID does not exist
|
||||
* @return \IPS\Api\PaginatedResponse<IPS\blog\Entry\Comment>
|
||||
*/
|
||||
public function GETitem( $id )
|
||||
public function GETitem_comments( $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
@@ -98,6 +98,14 @@
|
||||
"ratings"
|
||||
]
|
||||
},
|
||||
"app=blog&module=blogs&controller=settings&searchResult=form_blog_enable_sidebar": {
|
||||
"lang_key": "blog_enable_sidebar",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"sidebar",
|
||||
"social"
|
||||
]
|
||||
},
|
||||
"app=core&module=members&controller=groups&searchResult=4_g_blog_allowlocal": {
|
||||
"lang_key": "g_blog_allowlocal",
|
||||
"restriction": "groups_manage",
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<javascript app="blog">
|
||||
<file javascript_app="blog" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.list.js" javascript_type="controller" javascript_version="101099" javascript_position="1000050">/**
|
||||
* IPS Community Suite 4
|
||||
* (c) 2013 Invision Power Services - http://www.invisionpower.com
|
||||
<file javascript_app="blog" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.list.js" javascript_type="controller" javascript_version="102002" javascript_position="1000050">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
* ips.browse.list.js - Blog browse list controller
|
||||
*
|
||||
@@ -44,4 +44,6 @@ app.js</order>
|
||||
<order app="global" path="/dev/js//library//jquery">jquery.js
|
||||
jquery.history.js
|
||||
jquery.transform.js</order>
|
||||
<order app="global" path="/dev/js//library//linkify">linkify.min.js
|
||||
linkify-jquery.min.js</order>
|
||||
</javascript>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language>
|
||||
<app key="blog" version="101099">
|
||||
<app key="blog" version="102002">
|
||||
<word key="__app_blog" js="0">Blogs</word>
|
||||
<word key="frontnavigation_blogs" js="0">Blogs</word>
|
||||
<word key="__indefart_blog_entry_comment" js="0">a comment on a blog entry</word>
|
||||
@@ -158,6 +158,7 @@
|
||||
<word key="blog_by" js="0">A blog by %s</word>
|
||||
<word key="group_blog_by" js="0">A group blog by %s</word>
|
||||
<word key="contributors_to_this" js="0">Contributors to this blog</word>
|
||||
<word key="num_contributors_to_this" js="0">{# [1:contributor][?:contributors]} to this blog</word>
|
||||
<word key="about_this_blog" js="0">About this blog</word>
|
||||
<word key="entries_in_this_blog" js="0">Entries in this blog</word>
|
||||
<word key="blog_rss_offline" js="0">RSS feed disabled</word>
|
||||
@@ -187,10 +188,15 @@
|
||||
<word key="most_recent_entry" js="0">Most recent entry</word>
|
||||
<word key="blog_byline_nodate" js="0">A blog by %s</word>
|
||||
<word key="blog_last_entry_date" js="0">Last entry posted %s</word>
|
||||
<word key="num_blog_comments" js="0">{# [1:comment][?:comments]}</word>
|
||||
<word key="num_blog_entries" js="0">{# [1:entry][?:entries]}</word>
|
||||
<word key="num_blog_views" js="0">{# [1:view][?:views]}</word>
|
||||
<word key="digest_area_blog_blog" js="0">Blogs</word>
|
||||
<word key="digest_area_blog_entry" js="0">Entries</word>
|
||||
<word key="x_created_blog" js="0">%s created a blog</word>
|
||||
<word key="x_created_entry_in" js="0">%s posted a blog entry in %s</word>
|
||||
<word key="x_commented_entry" js="0">%s commented on an entry</word>
|
||||
<word key="x_commented_blog_entry" js="0">%s commented on a blog entry</word>
|
||||
<word key="loc_blog_viewing_index" js="0">Browsing Blogs</word>
|
||||
<word key="loc_blog_creating" js="0">Creating a Blog</word>
|
||||
<word key="loc_blog_viewing_blog" js="0">Viewing Blog: %s</word>
|
||||
@@ -206,6 +212,7 @@
|
||||
<word key="can_unhide_blog_entry" js="0">Can unhide entries?</word>
|
||||
<word key="can_view_hidden_blog_entry" js="0">Can view hidden entries?</word>
|
||||
<word key="can_move_blog_entry" js="0">Can move entries?</word>
|
||||
<word key="can_move_blog_entry_desc" js="0">Will be able to move entries only between the blogs they have permission to moderate, not to any other blog.</word>
|
||||
<word key="can_lock_blog_entry" js="0">Can lock entries?</word>
|
||||
<word key="can_unlock_blog_entry" js="0">Can unlock entries?</word>
|
||||
<word key="can_reply_to_locked_blog_entry" js="0">Can reply to locked entries?</word>
|
||||
@@ -217,6 +224,11 @@
|
||||
<word key="can_delete_blog_entry_comment" js="0">Can delete comments?</word>
|
||||
<word key="can_future_publish_blog_entry" js="0">Can set a future publishing date?</word>
|
||||
<word key="can_view_future_blog_entry" js="0">Can view pending publishing blog entries authored by other members?</word>
|
||||
<word key="can_feature_comments_blog_entry" js="0">Can recommend comments on entries?</word>
|
||||
<word key="can_unfeature_comments_blog_entry" js="0">Can remove comment recommendations on entries?</word>
|
||||
<word key="can_add_item_message_blog_entry" js="0">Can add messages to entries?</word>
|
||||
<word key="can_edit_item_message_blog_entry" js="0">Can edit messages on entries?</word>
|
||||
<word key="can_delete_item_message_blog_entry" js="0">Can delete messages on entries?</word>
|
||||
<word key="group__blog_Blog" js="0">Blog</word>
|
||||
<word key="g_blog_allowlocal" js="0">Can create blogs?</word>
|
||||
<word key="g_blog_maxblogs" js="0">Maximum number of blogs</word>
|
||||
@@ -238,5 +250,12 @@
|
||||
<word key="__api_blog_comments" js="0">Comments</word>
|
||||
<word key="__api_blog_entries" js="0">Entries</word>
|
||||
<word key="__api_blog_blogs" js="0">Blogs</word>
|
||||
<word key="blog_sidebar_enabled" js="0">Enable Custom Sidebar?</word>
|
||||
<word key="blog_sidebar" js="0">Sidebar Contents</word>
|
||||
<word key="blog_enable_sidebar" js="0">Enable custom sidebars?</word>
|
||||
<word key="blog_enable_sidebar_desc" js="0">Users with permission to manage blogs will be able to add content above the site sidebar to include social media links etc.</word>
|
||||
<word key="blog_sidebar_title" js="0">Blog Information</word>
|
||||
<word key="blog_bm_filters" js="0">Blog</word>
|
||||
<word key="mf_has_blog" js="0">Member has a Blog?</word>
|
||||
</app>
|
||||
</language>
|
||||
@@ -351,6 +351,34 @@
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"blog_club_id": {
|
||||
"name": "blog_club_id",
|
||||
"type": "BIGINT",
|
||||
"length": 20,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "The club ID if this blog belongs to a club, or NULL",
|
||||
"unsigned": true,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"blog_sidebar": {
|
||||
"name": "blog_sidebar",
|
||||
"type": "TEXT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
@@ -497,18 +525,18 @@
|
||||
"zerofill": false
|
||||
},
|
||||
"entry_name": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 250,
|
||||
"name": "entry_name",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"length": 255,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"entry_content": {
|
||||
"name": "entry_content",
|
||||
@@ -845,6 +873,20 @@
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"entry_meta_data": {
|
||||
"name": "entry_meta_data",
|
||||
"type": "BIT",
|
||||
"length": 1,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
|
||||
@@ -10,5 +10,9 @@
|
||||
{
|
||||
"key": "blog_enable_rating",
|
||||
"default": "0"
|
||||
},
|
||||
{
|
||||
"key": "blog_enable_sidebar",
|
||||
"default": "0"
|
||||
}
|
||||
]
|
||||
+340
-158
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<theme name="Default" author_name="Invision Power Services, Inc" author_url="http://www.invisionpower.com">
|
||||
<theme name="Default" author_name="Invision Power Services, Inc" author_url="https://www.invisioncommunity.com">
|
||||
<template template_group="browse" template_name="featuredEntries" template_data="$featured" template_location="front" template_app="blog"><![CDATA[
|
||||
<div class='ipsBox ipsSpacer_bottom'>
|
||||
<h2 class='ipsType_sectionTitle ipsType_reset'>{lang="featured_entries"}</h2>
|
||||
@@ -12,12 +12,14 @@
|
||||
{template="userPhoto" group="global" app="core" params="$entry->author(), 'small'"}
|
||||
<div>
|
||||
<h3 class='ipsType_sectionHead'>
|
||||
<a href='{$entry->url()}'>
|
||||
{{if $entry->unread()}}
|
||||
<span class='ipsItemStatus ' data-ipsTooltip title='{{if !$entry->unread()}}{lang="no_new_posts"}{{else}}{lang="new_posts"}{{endif}}'><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{$entry->mapped('title')}
|
||||
</a>
|
||||
<span class='ipsType_break ipsContained'>
|
||||
<a href='{$entry->url()}'>
|
||||
{{if $entry->unread()}}
|
||||
<span class='ipsItemStatus ' data-ipsTooltip title='{{if !$entry->unread()}}{lang="no_new_posts"}{{else}}{lang="new_posts"}{{endif}}'><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{$entry->mapped('title')}
|
||||
</a>
|
||||
</span>
|
||||
</h3>
|
||||
<p class='ipsType_reset ipsType_medium ipsType_light'>{lang="byline_nodate" htmlsprintf="$entry->author()->link()"} {datetime="$entry->mapped('date')"}</p>
|
||||
<div class='ipsType_medium ipsType_richText ipsSpacer_both' data-ipsTruncate data-ipsTruncate-type='remove' data-ipsTruncate-size='2 lines'>
|
||||
@@ -169,14 +171,14 @@
|
||||
{{endif}}
|
||||
{{endif}}
|
||||
|
||||
<div class='ipsType_break ipsContained'>
|
||||
<span class='ipsType_break ipsContained'>
|
||||
<a href='{$blog->latestEntry()->url()}' title='{lang="view_this_entry" sprintf="$blog->latestEntry()->name"}' class='ipsTruncate ipsTruncate_line'>
|
||||
{{if $blog->latestEntry()->unread()}}
|
||||
<span class='ipsItemStatus' data-ipsTooltip title="{lang="unread_blog"}"><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{$blog->latestEntry()->name}
|
||||
</a>
|
||||
</div>
|
||||
</span>
|
||||
</h3>
|
||||
{{if !( $blog->owner() instanceof \IPS\Member )}}
|
||||
<p class='ipsType_medium ipsType_reset ipsType_light'>{lang="byline" htmlsprintf="trim( $blog->latestEntry()->author()->link() )"} {datetime="$blog->latestEntry()->date"}</p>
|
||||
@@ -238,46 +240,148 @@
|
||||
<p class='ipsType_normal ipsType_light ipsType_blendLinks ipsType_reset'>
|
||||
{{if $entry->container()->owner() instanceof \IPS\Member}}
|
||||
{lang="blog_by" htmlsprintf="$entry->container()->owner()->link()"}
|
||||
{{else}}
|
||||
{{elseif !$entry->container()->club()}}
|
||||
<i class='fa fa-users'></i> {lang="group_blog_by" sprintf="\IPS\Member::loggedIn()->language()->addToStack( 'blogs_groupblog_name_' . $entry->container()->id )"}
|
||||
{{endif}}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="global" template_name="embedBlogs" template_data="$blog, $url" template_location="front" template_app="blog"><![CDATA[<div class='ipsEmbedded'>
|
||||
<div class='ipsEmbedded_headerArea'>
|
||||
<h4 class='ipsType_reset ipsType_normal ipsTruncate ipsTruncate_line'><i class='fa fa-file' data-ipsTooltip title='{lang="embed_blog"}'></i> <a href='{$url}' title='{lang="view_this_blog"}' target='_top'>{$blog->_title}</a></h4>
|
||||
<template template_group="global" template_name="embedBlogs" template_data="$blog, $url" template_location="front" template_app="blog"><![CDATA[
|
||||
<div data-embedInfo-maxSize='500' class='ipsRichEmbed cBlogEmbed'>
|
||||
<div class='ipsRichEmbed_header ipsAreaBackground_light ipsClearfix'>
|
||||
<a href='{$blog->url()}' class='ipsRichEmbed_openItem'><i class='fa fa-external-link-square'></i></a>
|
||||
{{if !( $blog->owner() instanceof \IPS\Member ) and count( $blog->contributors() )}}
|
||||
<p class='ipsRichEmbed_title ipsType_reset ipsTruncate ipsTruncate_line ipsType_blendLinks'>
|
||||
<a href='{$blog->url()}'>{lang="group_blog_by" sprintf="\IPS\Member::loggedIn()->language()->addToStack( 'blogs_groupblog_name_' . $blog->id )"}</a>
|
||||
</p>
|
||||
{{if $blog->latestEntry()}}
|
||||
<p class='ipsRichEmbed_author ipsType_reset ipsType_light ipsTruncate ipsTruncate_line ipsType_blendLinks'>
|
||||
<a href='{$blog->url()}'>{lang="blog_last_entry_date" htmlsprintf="\IPS\DateTime::ts( $blog->latestEntry()->mapped('date') )->html()"}</a>
|
||||
</p>
|
||||
{{endif}}
|
||||
{{else}}
|
||||
<div class='ipsPhotoPanel ipsPhotoPanel_tiny ipsType_blendLinks'>
|
||||
{template="userPhoto" app="core" group="global" params="$blog->owner(), 'tiny'"}
|
||||
<div>
|
||||
<p class='ipsRichEmbed_title ipsType_reset ipsTruncate ipsTruncate_line'>
|
||||
<a href='{$blog->url()}'>{lang="x_created_blog" sprintf="$blog->owner()->name"}</a>
|
||||
</p>
|
||||
{{if $blog->latestEntry()}}
|
||||
<p class='ipsRichEmbed_author ipsType_reset ipsType_light ipsTruncate ipsTruncate_line'>
|
||||
<a href='{$blog->url()}'>{lang="blog_last_entry_date" htmlsprintf="\IPS\DateTime::ts( $blog->latestEntry()->mapped('date') )->html()"}</a>
|
||||
</p>
|
||||
{{endif}}
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}
|
||||
</div>
|
||||
{{if $blog->coverPhoto() && $blog->coverPhoto()->file}}
|
||||
{{$photo = $blog->coverPhoto()->file;}}
|
||||
<div class='ipsRichEmbed_masthead ipsRichEmbed_mastheadBg ipsType_center'>
|
||||
<a href='{$blog->url()}' title='{$blog->_title}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), $photo->url )"}") '>
|
||||
<img src='{$photo->url}' alt='{$blog->_title}' class='ipsHide'>
|
||||
</a>
|
||||
</div>
|
||||
{{endif}}
|
||||
<div class='ipsPad ipsClearfix'>
|
||||
<p class='ipsRichEmbed_itemTitle ipsType_reset ipsTruncate ipsTruncate_line ipsType_blendLinks'>
|
||||
<a href='{$blog->url()}'>{$blog->_title}</a>
|
||||
</p>
|
||||
|
||||
<ul class='ipsList_inline'>
|
||||
<li>{lang="num_blog_entries" pluralize="$blog->_items"}</li>
|
||||
<li>{lang="num_blog_comments" pluralize="$blog->_comments"}</li>
|
||||
<li>{lang="num_blog_views" pluralize="$blog->num_views"}</li>
|
||||
</ul>
|
||||
|
||||
{{if $blog->description}}
|
||||
<div class='ipsType_richText ipsType_medium ipsSpacer_top ipsSpacer_half' data-truncate='3'>
|
||||
{$blog->description|raw}
|
||||
</div>
|
||||
{{endif}}
|
||||
|
||||
{{if $blog->latestEntry()}}
|
||||
<hr class='ipsHr'>
|
||||
<p class='ipsType_medium ipsType_reset ipsSpacer_top ipsSpacer_half ipsType_blendLinks'>
|
||||
<span class='ipsType_light'>{lang="latest_entry"}:</span> <a href='{$blog->latestEntry()->url}' title="{$blog->latestEntry()->mapped('title')}">{$blog->latestEntry()->mapped('title')}</a>
|
||||
</p>
|
||||
{{endif}}
|
||||
</div>
|
||||
|
||||
<div class='ipsEmbedded_content'>
|
||||
<div class='ipsPhotoPanel ipsPhotoPanel_notPhone ipsPhotoPanel_mini ipsClearfix ipsType_medium'>
|
||||
{{if $blog->owner() instanceof \IPS\Member}}
|
||||
{template="userPhoto" group="global" app="core" params="$blog->owner(), 'mini', NULL, '', FALSE"}
|
||||
{{endif}}
|
||||
<div>
|
||||
<strong>
|
||||
{{if $blog->owner() instanceof \IPS\Member}}
|
||||
{lang="blog_byline_nodate" htmlsprintf="$blog->owner()->link()"}
|
||||
{{else}}
|
||||
<i class='fa fa-users' data-ipsTooltip title='{lang="this_is_group"}'></i> {lang="blog_byline_nodate" sprintf="\IPS\Member::loggedIn()->language()->addToStack( 'blogs_groupblog_name_' . $blog->id )"}
|
||||
{{endif}}
|
||||
</strong>
|
||||
{{if $blog->latestEntry()}}
|
||||
<br>
|
||||
<span class='ipsType_light ipsType_small'>
|
||||
{lang="blog_last_entry_date" htmlsprintf="\IPS\DateTime::ts( $blog->latestEntry()->date )->html()"}
|
||||
</span>
|
||||
{{endif}}
|
||||
<ul class='ipsGrid cBlogEmbedded_stats'>
|
||||
<li class='ipsGrid_span4'><strong class='ipsType_normal'>{$blog->_items}</strong><br>{lang="blog_entries" pluralize="$blog->_items"}</li>
|
||||
<li class='ipsGrid_span4'><strong class='ipsType_normal'>{$blog->_comments}</strong><br>{lang="blog_comments" pluralize="$blog->_comments"}</li>
|
||||
<li class='ipsGrid_span4'><strong class='ipsType_normal'>{$blog->num_views}</strong><br>{lang="blog_views" pluralize="$blog->num_views"}</li>
|
||||
</ul>
|
||||
</div>
|
||||
{{if !( $blog->owner() instanceof \IPS\Member ) and count( $blog->contributors() )}}
|
||||
<div class='ipsAreaBackground_light ipsPad ipsClearfix ipsRichEmbed_moreInfo'>
|
||||
<h3 class='ipsType_minorHeading ipsTruncate ipsTruncate_line ipsType_blendLinks'>{lang="num_contributors_to_this" pluralize="count( $blog->contributors() )"}</h3>
|
||||
<ul class='ipsList_inline ipsList_noSpacing ipsSpacer_top ipsSpacer_half ipsType_noBreak'>
|
||||
{{foreach $blog->contributors() as $idx => $contributor}}
|
||||
<li>
|
||||
{template="userPhoto" group="global" app="core" params="$contributor['member'], 'mini'"}<span class='ipsNotificationCount'>{$contributor['contributions']}</span>
|
||||
</li>
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
</div>
|
||||
{{endif}}
|
||||
</div>]]></template>
|
||||
<template template_group="global" template_name="embedEntry" template_data="$entry, $blog, $url" template_location="front" template_app="blog"><![CDATA[
|
||||
<div data-embedInfo-maxSize='500' class='ipsRichEmbed cBlogEmbed'>
|
||||
{template="embedHeader" group="embed" app="core" params="$entry, \IPS\Member::loggedIn()->language()->addToStack( 'x_created_entry_in', FALSE, array( 'sprintf' => array( $entry->author()->name, $entry->container()->_title ) ) ), $entry->mapped('date')"}
|
||||
{{if $blog->coverPhoto() && $blog->coverPhoto()->file}}
|
||||
{{$photo = $blog->coverPhoto()->file;}}
|
||||
<div class='ipsRichEmbed_masthead ipsRichEmbed_mastheadBg ipsType_center'>
|
||||
<a href='{$blog->url()}' title='{$blog->_title}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), $photo->url )"}") '>
|
||||
<img src='{$photo->url}' alt='{$blog->_title}' class='ipsHide'>
|
||||
</a>
|
||||
</div>
|
||||
{{endif}}
|
||||
<div class='ipsPad ipsClearfix'>
|
||||
<p class='ipsRichEmbed_itemTitle ipsType_reset ipsTruncate ipsTruncate_line ipsType_blendLinks'>
|
||||
<a href='{$entry->url()}'>{$entry->mapped('title')}</a>
|
||||
</p>
|
||||
{template="embedEntryItemSnippet" group="global" app="blog" params="$blog"}
|
||||
|
||||
<div class='ipsType_richText ipsType_medium ipsSpacer_top ipsSpacer_half' data-truncate='3'>
|
||||
{$entry->truncated(TRUE)|raw}
|
||||
</div>
|
||||
{template="embedItemStats" group="embed" app="core" params="$entry"}
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="global" template_name="embedEntryComment" template_data="$comment, $entry, $blog, $url" template_location="front" template_app="blog"><![CDATA[
|
||||
<div data-embedInfo-maxSize='500' class='ipsRichEmbed cBlogEmbed'>
|
||||
{template="embedHeader" group="embed" app="core" params="$comment, \IPS\Member::loggedIn()->language()->addToStack( 'x_commented_blog_entry', FALSE, array( 'sprintf' => array( $comment->author()->name ) ) ), $comment->mapped('date')"}
|
||||
<div class='ipsPad ipsClearfix'>
|
||||
<div class='ipsRichEmbed_originalItem ipsAreaBackground_reset ipsSpacer_bottom ipsType_blendLinks'>
|
||||
<div>
|
||||
{{if $blog->coverPhoto() && $blog->coverPhoto()->file}}
|
||||
{{$photo = $blog->coverPhoto()->file;}}
|
||||
<div class='ipsRichEmbed_masthead ipsRichEmbed_mastheadBg ipsType_center'>
|
||||
<a href='{$blog->url()}' title='{$blog->_title}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), $photo->url )"}") '>
|
||||
<img src='{$photo->url}' alt='{$blog->_title}' class='ipsHide'>
|
||||
</a>
|
||||
</div>
|
||||
{{endif}}
|
||||
<div class='ipsPad'>
|
||||
{template="embedOriginalItem" group="embed" app="core" params="$entry, TRUE, \IPS\Theme::i()->getTemplate( 'global', 'blog' )->embedEntryItemSnippet( $blog )"}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='ipsType_richText ipsType_medium' data-truncate='3'>
|
||||
{$comment->truncated(TRUE)|raw}
|
||||
</div>
|
||||
|
||||
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and count( $comment->reactions() ) and settings.reputation_enabled}}
|
||||
<ul class='ipsList_inline ipsSpacer_top ipsSpacer_half'>
|
||||
<li>
|
||||
{template="reactionOverview" app="core" group="global" params="$comment, TRUE, 'small'"}
|
||||
</li>
|
||||
</ul>
|
||||
{{endif}}
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="global" template_name="embedEntryItemSnippet" template_data="$blog" template_location="front" template_app="blog"><![CDATA[
|
||||
<p class='ipsType_reset ipsType_medium ipsType_light'>
|
||||
{lang="from_the_blog"} "{$blog->_title}"
|
||||
</p>]]></template>
|
||||
<template template_group="global" template_name="profileBlogRows" template_data="$table, $headers, $blogs, $showSmall" template_location="front" template_app="blog"><![CDATA[{{foreach $blogs AS $blog}}
|
||||
<li class='ipsAreaBackground_light ipsPad cProfileBlog'>
|
||||
<div class='ipsColumns ipsColumns_collapsePhone'>
|
||||
@@ -355,10 +459,20 @@
|
||||
<div class='ipsBox ipsPad'>
|
||||
{$form|raw}
|
||||
</div>]]></template>
|
||||
<template template_group="submit" template_name="submit" template_data="$form" template_location="front" template_app="blog"><![CDATA[
|
||||
<template template_group="submit" template_name="submit" template_data="$form, $blog=NULL" template_location="front" template_app="blog"><![CDATA[
|
||||
{{if $blog and $club = $blog->club()}}
|
||||
{{if settings.clubs and settings.clubs_header == 'full'}}
|
||||
{template="header" app="core" group="clubs" params="$club, $blog"}
|
||||
{{endif}}
|
||||
<div id='elClubContainer'>
|
||||
{{endif}}
|
||||
|
||||
{template="pageHeader" if="!\IPS\Request::i()->isAjax()" group="global" app="core" params="\IPS\Member::loggedIn()->language()->addToStack( 'create_blog_entry' )"}
|
||||
{$form|raw}
|
||||
]]></template>
|
||||
|
||||
{{if $blog and $blog->club()}}
|
||||
</div>
|
||||
{{endif}}]]></template>
|
||||
<template template_group="submit" template_name="submitFormTemplate" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class=''" template_location="front" template_app="blog"><![CDATA[<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} data-ipsForm>
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
{{foreach $hiddenValues as $k => $v}}
|
||||
@@ -408,7 +522,7 @@
|
||||
</div>
|
||||
</form>]]></template>
|
||||
<template template_group="view" template_name="blogHeader" template_data="$blog" template_location="front" template_app="blog"><![CDATA[
|
||||
<div id='elBlogHeader'>
|
||||
<div id='elBlogHeader' {{if $blog->club()}}class="cBlogHeader_withClub"{{endif}}>
|
||||
{$blog->coverPhoto()|raw}
|
||||
</div>
|
||||
<div id='elBlogHeaderStats' class='ipsPad'>
|
||||
@@ -445,10 +559,16 @@
|
||||
</ul>
|
||||
</div>
|
||||
{{endif}}
|
||||
</div>]]></template>
|
||||
<template template_group="view" template_name="blogSidebar" template_data="$sidebar=NULL" template_location="front" template_app="blog"><![CDATA[<div class='ipsBox' id='elBlogSidebarBox'>
|
||||
<h2 class='ipsType_sectionTitle ipsType_reset'>{lang="blog_sidebar_title"}</h2>
|
||||
<div class='ipsPad_half ipsWidget_inner'>
|
||||
{$sidebar|raw}
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="view" template_name="blogTable" template_data="$table, $headers, $rows, $quickSearch" template_location="front" template_app="blog"><![CDATA[<div class='ipsBox' data-baseurl='{$table->baseUrl}' data-resort='{$table->resortKey}' data-controller='core.global.core.table{{if $table->canModerate()}},core.front.core.moderation{{endif}}' id='elTable_{$table->uniqueId}'>
|
||||
{{if $table->title}}
|
||||
<h2 class='ipsType_sectionTitle ipsType_reset ipsClear'>{lang="$table->title"}</h2>
|
||||
<h2 class='ipsType_sectionTitle ipsType_reset ipsClear ipsHide'>{lang="$table->title"}</h2>
|
||||
{{endif}}
|
||||
|
||||
{{if $table->canModerate() OR (isset( $table->sortOptions ) and !empty( $table->sortOptions )) OR !empty( $table->filters ) OR $table->pages > 1 OR $table->advancedSearch}}
|
||||
@@ -526,7 +646,7 @@
|
||||
<div class='ipsClear ipsPad {{foreach $table->classes as $class}}{$class} {{endforeach}}' id='elTable_{$table->uniqueId}' data-role="tableRows" data-controller='blog.front.browse.list'>
|
||||
{template="$table->rowsTemplate[1]" params="$table, $headers, $rows" object="$table->rowsTemplate[0]"}
|
||||
</div>
|
||||
<div class="ipsAreaBackground ipsPad ipsClearfix" data-role="pageActionOptions">
|
||||
<div class="ipsAreaBackground ipsPad ipsClearfix ipsJS_hide" data-role="pageActionOptions">
|
||||
<div class="ipsPos_right">
|
||||
<select name="modaction" data-role="moderationAction">
|
||||
{{if $table->canModerate('unhide')}}
|
||||
@@ -614,36 +734,40 @@
|
||||
<header class='ipsPhotoPanel ipsPhotoPanel_notPhone ipsPhotoPanel_small ipsSpacer_bottom'>
|
||||
{template="userPhoto" app="core" params="$entry->author()" group="global"}
|
||||
<div>
|
||||
<h2 class='ipsType_pageTitle'>
|
||||
{{if $entry->locked()}}<i class='fa fa-lock'></i> {{endif}}{$entry->caption}
|
||||
<h2 class='ipsType_pageTitle ipsContained_container'>
|
||||
{{if $entry->locked()}}<span><i class='fa fa-lock'></i></span> {{endif}}{$entry->caption}
|
||||
{{if $entry->isFutureDate() || $entry->mapped('pinned') || $entry->mapped('featured') || $entry->hidden() === -1 || $entry->hidden() === 1 || $entry->status === 'draft'}}
|
||||
{{if $entry->isFutureDate() and $entry->status !== 'draft'}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$entry->futureDateBlurb()}'><i class='fa fa-clock-o'></i></span>
|
||||
{{elseif $entry->hidden() === -1}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$entry->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span>
|
||||
{{elseif $entry->hidden() === 1}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span>
|
||||
{{endif}}
|
||||
{{if $entry->status === 'draft'}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="unpublished"}'><i class='fa fa-pencil-square-o'></i></span>
|
||||
{{endif}}
|
||||
{{if $entry->mapped('pinned')}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span>
|
||||
{{endif}}
|
||||
{{if $entry->mapped('featured')}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span>
|
||||
{{endif}}
|
||||
<span>
|
||||
{{if $entry->isFutureDate() and $entry->status !== 'draft'}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$entry->futureDateBlurb()}'><i class='fa fa-clock-o'></i></span>
|
||||
{{elseif $entry->hidden() === -1}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$entry->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span>
|
||||
{{elseif $entry->hidden() === 1}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span>
|
||||
{{endif}}
|
||||
{{if $entry->status === 'draft'}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="unpublished"}'><i class='fa fa-pencil-square-o'></i></span>
|
||||
{{endif}}
|
||||
{{if $entry->mapped('pinned')}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span>
|
||||
{{endif}}
|
||||
{{if $entry->mapped('featured')}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span>
|
||||
{{endif}}
|
||||
</span>
|
||||
{{endif}}
|
||||
|
||||
{{if $entry->prefix()}}
|
||||
{template="prefix" group="global" app="core" params="$entry->prefix( TRUE ), $entry->prefix()"}
|
||||
<span>{template="prefix" group="global" app="core" params="$entry->prefix( TRUE ), $entry->prefix()"}</span>
|
||||
{{endif}}
|
||||
<a href="{$entry->url()}" class='ipsType_blendLinks' title="{lang="read_more_about" sprintf="$entry->name"} {{if $entry->canEdit()}}{lang="click_hold_edit"}{{endif}}" {{if $entry->canEdit()}}data-role="editableTitle"{{endif}}>
|
||||
{{if $entry->unread()}}
|
||||
<span class='ipsItemStatus' data-ipsTooltip title="{lang="unread_blog"}"><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{{if $entry->canEdit()}}<span data-role="editableTitle">{$entry->name}</span>{{else}}{$entry->name}{{endif}}
|
||||
</a>
|
||||
<span class='ipsContained ipsType_break'>
|
||||
<a href="{$entry->url()}" class='ipsType_blendLinks' title="{lang="read_more_about" sprintf="$entry->name"} {{if $entry->canEdit()}}{lang="click_hold_edit"}{{endif}}" {{if $entry->canEdit()}}data-role="editableTitle"{{endif}}>
|
||||
{{if $entry->unread()}}
|
||||
<span class='ipsItemStatus' data-ipsTooltip title="{lang="unread_blog"}"><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{{if $entry->canEdit()}}<span data-role="editableTitle">{$entry->name}</span>{{else}}{$entry->name}{{endif}}
|
||||
</a>
|
||||
</span>
|
||||
</h2>
|
||||
<p class='ipsType_light ipsType_reset ipsType_blendLinks'>
|
||||
{lang="byline" htmlsprintf="$entry->author()->link()"}{datetime="$entry->date"}
|
||||
@@ -698,14 +822,14 @@
|
||||
{{if $entry->prefix()}}
|
||||
<span>{template="prefix" group="global" app="core" params="$entry->prefix( TRUE ), $entry->prefix()"}</span>
|
||||
{{endif}}
|
||||
<div class='ipsContained ipsType_break'>
|
||||
<span class='ipsContained ipsType_break'>
|
||||
<a href="{$entry->url()}" title="{lang="read_more_about" sprintf="$entry->name"} {{if $entry->canEdit()}}{lang="click_hold_edit"}{{endif}}" {{if $entry->canEdit()}}data-role="editableTitle"{{endif}}>
|
||||
{{if $entry->unread()}}
|
||||
<span class='ipsItemStatus' data-ipsTooltip title="{lang="unread_blog"}"><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{$entry->name}
|
||||
</a>
|
||||
</div>
|
||||
</span>
|
||||
</h2>
|
||||
<p class='ipsType_light ipsType_reset ipsType_blendLinks'>
|
||||
{lang="byline" htmlsprintf="$entry->author()->link()"}{datetime="$entry->date"}
|
||||
@@ -741,11 +865,12 @@
|
||||
{$entry->commentPagination( array('tab') )|raw}
|
||||
<br><br>
|
||||
{{endif}}
|
||||
{template="featuredComments" group="global" app="core" params="$entry->featuredComments(), $entry->url()->setQueryString( 'recommended', 'comments' )"}
|
||||
<div data-role='commentFeed' data-controller='core.front.core.moderation'>
|
||||
{{if count( $entry->comments() )}}
|
||||
{{if count( $entry->comments( NULL, NULL, 'date', 'asc', NULL, NULL, NULL, NULL, FALSE, isset( \IPS\Request::i()->showDeleted ) ) )}}
|
||||
<form action="{$entry->url()->csrf()->setQueryString( 'do', 'multimodComment' )}" method="post" data-ipsPageAction data-role='moderationTools'>
|
||||
{{$commentCount=0; $timeLastRead = $entry->timeLastRead(); $lined = FALSE;}}
|
||||
{{foreach $entry->comments() as $comment}}
|
||||
{{foreach $entry->comments( NULL, NULL, 'date', 'asc', NULL, NULL, NULL, NULL, FALSE, isset( \IPS\Request::i()->showDeleted ) ) as $comment}}
|
||||
{{if !$lined and $timeLastRead and $timeLastRead->getTimestamp() < $comment->mapped('date')}}
|
||||
{{if $lined = TRUE and $commentCount}}
|
||||
<hr class="ipsCommentUnreadSeperator">
|
||||
@@ -796,13 +921,13 @@
|
||||
{{if $blog->pinned}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span>
|
||||
{{endif}}
|
||||
{$blog->_title}
|
||||
<span class='{{if \IPS\Request::i()->controller == 'view' || \IPS\Request::i()->controller == 'entry'}}ipsPageHead_barText{{else}}ipsPageHead_barText_small{{endif}}'>{$blog->_title}</span>
|
||||
</h1>
|
||||
</a>
|
||||
<p class='ipsType_normal ipsType_reset ipsType_blendLinks'>
|
||||
<p class='ipsType_normal ipsType_reset ipsType_blendLinks ipsPageHead_barText_small'>
|
||||
{{if $blog->owner() instanceof \IPS\Member}}
|
||||
{lang="blog_by" htmlsprintf="$blog->owner()->link()"}
|
||||
{{else}}
|
||||
{{elseif !$blog->club()}}
|
||||
<i class='fa fa-users'></i> {lang="group_blog_by" sprintf="\IPS\Member::loggedIn()->language()->addToStack( 'blogs_groupblog_name_' . $blog->id )"}
|
||||
{{endif}}
|
||||
</p>
|
||||
@@ -812,18 +937,29 @@
|
||||
{{endif}}
|
||||
]]></template>
|
||||
<template template_group="view" template_name="entry" template_data="$entry, $previous, $next" template_location="front" template_app="blog"><![CDATA[
|
||||
{{if $club = $entry->container()->club()}}
|
||||
{{if settings.clubs and settings.clubs_header == 'full'}}
|
||||
{template="header" app="core" group="clubs" params="$club, $entry->container()"}
|
||||
{{endif}}
|
||||
<div id='elClubContainer'>
|
||||
{{endif}}
|
||||
|
||||
<header>
|
||||
{template="blogHeader" group="view" app="blog" params="$entry->container()"}
|
||||
</header>
|
||||
|
||||
{template="contentItemMessages" group="global" app="core" params="$entry->getMessages(), $entry"}
|
||||
|
||||
<article class='ipsBox ipsPad ipsSpacer_top ipsType_break'>
|
||||
<header>
|
||||
<h1 class='ipsType_pageTitle ipsType_largeTitle ipsContained_container'>
|
||||
{{if $entry->isFutureDate() || $entry->mapped('pinned') || $entry->mapped('featured') || $entry->hidden() === -1 || $entry->hidden() === 1 || $entry->status === 'draft'}}
|
||||
{{if $entry->isFutureDate() || $entry->mapped('pinned') || $entry->mapped('featured') || $entry->hidden() === -1 || $entry->hidden() === 1 || $entry->hidden() === -2 || $entry->status === 'draft'}}
|
||||
{{if $entry->isFutureDate() and $entry->status !== 'draft'}}
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$entry->futureDateBlurb()}'><i class='fa fa-clock-o'></i></span></span>
|
||||
{{elseif $entry->hidden() === -1}}
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$entry->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span></span>
|
||||
{{elseif $entry->hidden() === -2}}
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$entry->deletedBlurb()}'><i class='fa fa-trash'></i></span></span>
|
||||
{{elseif $entry->hidden() === 1}}
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span></span>
|
||||
{{endif}}
|
||||
@@ -844,11 +980,11 @@
|
||||
</span>
|
||||
{{endif}}
|
||||
{{if $entry->canEdit()}}
|
||||
<div class='ipsType_break ipsContained' data-controller="core.front.core.moderation">
|
||||
<span class='ipsType_break ipsContained' data-controller="core.front.core.moderation">
|
||||
{{if $entry->locked()}}<i class='fa fa-lock'></i> {{endif}}<span data-role="editableTitle" title='{lang="click_hold_edit"}'>{$entry->name}</span>
|
||||
</div>
|
||||
</span>
|
||||
{{else}}
|
||||
<div class='ipsType_break ipsContained'>{{if $entry->locked()}}<i class='fa fa-lock'></i> {{endif}}{$entry->name}</div>
|
||||
<span class='ipsType_break ipsContained'>{{if $entry->locked()}}<i class='fa fa-lock'></i> {{endif}}{$entry->name}</span>
|
||||
{{endif}}
|
||||
</h1>
|
||||
|
||||
@@ -887,60 +1023,79 @@
|
||||
</div>
|
||||
{{endif}}
|
||||
|
||||
<hr class='ipsHr ipsClear'>
|
||||
{{if $entry instanceof \IPS\Content\Reputation and settings.reputation_enabled}}
|
||||
<div class='ipsPos_right ipsResponsive_noFloat'>
|
||||
{template="reputation" app="core" group="global" params="$entry"}
|
||||
{{if ( $entry->isFutureDate() and $entry::canFuturePublish( NULL, $entry->container() ) ) or ( $entry->status === 'draft' or $entry->canEdit() or $entry->canPin() or $entry->canUnpin() or $entry->canFeature() or $entry->canUnfeature() or $entry->canHide() or $entry->canUnhide() or $entry->canMove() or $entry->canLock() or $entry->canUnlock() or $entry->canDelete() ) or ( $entry->hidden() == -2 AND \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content') ) || ( \IPS\IPS::classUsesTrait( $entry, 'IPS\Content\Reactable' ) AND settings.reputation_enabled )}}
|
||||
<div class='ipsItemControls'>
|
||||
{{if \IPS\IPS::classUsesTrait( $entry, 'IPS\Content\Reactable' ) AND settings.reputation_enabled}}
|
||||
{template="reputation" app="core" group="global" params="$entry"}
|
||||
{{endif}}
|
||||
|
||||
{{if ( $entry->isFutureDate() and $entry::canFuturePublish( NULL, $entry->container() ) ) or ( $entry->status === 'draft' or $entry->canEdit() or $entry->canPin() or $entry->canUnpin() or $entry->canFeature() or $entry->canUnfeature() or $entry->canHide() or $entry->canUnhide() or $entry->canMove() or $entry->canLock() or $entry->canUnlock() or $entry->canDelete() ) or ( $entry->hidden() == -2 AND \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content') ) || ( ! $entry->container()->social_group and \IPS\Member::loggedIn()->group['g_can_report'] )}}
|
||||
<ul class='ipsToolList ipsToolList_horizontal ipsPos_left ipsClearfix ipsResponsive_noFloat ipsItemControls_left'>
|
||||
{{if ( $entry->isFutureDate() and $entry::canFuturePublish( NULL, $entry->container() ) ) or ( $entry->status === 'draft' or $entry->canEdit() or $entry->canPin() or $entry->canUnpin() or $entry->canFeature() or $entry->canUnfeature() or $entry->canHide() or $entry->canUnhide() or $entry->canMove() or $entry->canLock() or $entry->canUnlock() or $entry->canDelete() ) or ( $entry->hidden() == -2 AND \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content') )}}
|
||||
<li>
|
||||
<a href='#elentryActions_menu' id='elentryActions' class='ipsButton ipsButton_light ipsButton_verySmall ipsButton_fullWidth' data-ipsMenu>{lang="entry_actions"} <i class='fa fa-caret-down'></i></a>
|
||||
<ul id='elentryActions_menu' class='ipsMenu ipsMenu_auto ipsHide'>
|
||||
{{if \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content') AND $entry->hidden() == -2}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'restore' ) )}' data-confirm data-confirmSubMessage='{lang="restore_as_visible_desc"}'>{lang="restore_as_visible"}</a></li>
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'restoreAsHidden' ) )}' data-confirm data-confirmSubMessage='{lang="restore_as_hidden_desc"}'>{lang="restore_as_hidden"}</a></li>
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'delete', 'immediate' => 1 ) )}' data-confirm data-confirmSubMessage='{lang="delete_immediately_desc"}'>{lang="delete_immediately"}</a></li>
|
||||
{{else}}
|
||||
{{if $entry->status === 'draft' or ( $entry->isFutureDate() and $entry::canFuturePublish( NULL, $entry->container() ) )}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url('moderate')->csrf()->setQueryString( array( 'action' => 'publish' ) )}' data-confirm title='{lang="publish_now"}'>{lang="publish"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canEdit()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'edit' ) )}' title='{lang="edit_title_blog"}'>{lang="edit"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canFeature()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'feature' ) )}' title='{lang="feature_title_blog"}'>{lang="feature"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canUnfeature()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unfeature' ) )}' title='{lang="unfeature_title_blog"}'>{lang="unfeature"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canPin()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'pin' ) )}' title='{lang="pin_title_blog"}'>{lang="pin"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canUnpin()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unpin' ) )}' title='{lang="unpin_title_blog"}'>{lang="unpin"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canHide()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}' title='{lang="hide_title_blog"}' data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canUnhide()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unhide' ) )}' title='{{if $entry->hidden() === 1}}{lang="approve_title_blog"}{{else}}{lang="unhide_title_blog"}{{endif}}'>{{if $entry->hidden() === 1}}{lang="approve"}{{else}}{lang="unhide"}{{endif}}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canLock()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'lock' ) )}' title='{lang="blog_lock_title"}'>{lang="lock"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canUnlock()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unlock' ) )}' title='{lang="blog_unlock_title"}'>{lang="unlock"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canMove()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'move' ) )}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title="{lang="move"}" title='{lang="blog_move_title"}'>{lang="move"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canDelete()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'delete' ) )}' data-confirm title='{lang="blog_delete_title"}'>{lang="delete"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canOnMessage( 'add' )}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'messageForm' ) )}' data-ipsDialog data-ipsDialod-title='{lang="add_message"}'>{lang="add_message"}</a></li>
|
||||
{{endif}}
|
||||
{{if \IPS\Member::loggedIn()->modPermission('can_view_moderation_log')}}
|
||||
<li class='ipsMenu_sep'><hr></li>
|
||||
<li class="ipsMenu_item"><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
|
||||
{{endif}}
|
||||
{{endif}}
|
||||
</ul>
|
||||
</li>
|
||||
{{endif}}
|
||||
{{if ! $entry->container()->social_group and $entry->canReport() }}
|
||||
<li>
|
||||
<a href='{$entry->url('report')}' class='ipsButton ipsButton_link ipsButton_verySmall ipsButton_fullWidth' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_entry"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_entry"}">{lang="report_entry"}</a>
|
||||
</li>
|
||||
{{endif}}
|
||||
</ul>
|
||||
{{endif}}
|
||||
</div>
|
||||
{{endif}}
|
||||
{{if ( $entry->isFutureDate() and $entry::canFuturePublish( NULL, $entry->container() ) ) or $entry->status === 'draft' or $entry->canEdit() or $entry->canPin() or $entry->canUnpin() or $entry->canFeature() or $entry->canUnfeature() or $entry->canHide() or $entry->canUnhide() or $entry->canMove() or $entry->canLock() or $entry->canUnlock() or $entry->canDelete()}}
|
||||
<a href='#elentryActions_menu' id='elentryActions' class='ipsButton ipsButton_light ipsButton_verySmall' data-ipsMenu>{lang="entry_actions"} <i class='fa fa-caret-down'></i></a>
|
||||
<ul id='elentryActions_menu' class='ipsMenu ipsMenu_auto ipsHide'>
|
||||
{{if $entry->status === 'draft' or ( $entry->isFutureDate() and $entry::canFuturePublish( NULL, $entry->container() ) )}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url('moderate')->csrf()->setQueryString( array( 'action' => 'publish' ) )}' data-confirm title='{lang="publish_now"}'>{lang="publish"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canEdit()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'edit' ) )}' title='{lang="edit_title_blog"}'>{lang="edit"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canFeature()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'feature' ) )}' title='{lang="feature_title_blog"}'>{lang="feature"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canUnfeature()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unfeature' ) )}' title='{lang="unfeature_title_blog"}'>{lang="unfeature"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canPin()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'pin' ) )}' title='{lang="pin_title_blog"}'>{lang="pin"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canUnpin()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unpin' ) )}' title='{lang="unpin_title_blog"}'>{lang="unpin"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canHide()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}' title='{lang="hide_title_blog"}' data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canUnhide()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unhide' ) )}' title='{{if $entry->hidden() === 1}}{lang="approve_title_blog"}{{else}}{lang="unhide_title_blog"}{{endif}}'>{{if $entry->hidden() === 1}}{lang="approve"}{{else}}{lang="unhide"}{{endif}}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canLock()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'lock' ) )}' title='{lang="blog_lock_title"}'>{lang="lock"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canUnlock()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unlock' ) )}' title='{lang="blog_unlock_title"}'>{lang="unlock"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canMove()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'move' ) )}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title="{lang="move"}" title='{lang="blog_move_title"}'>{lang="move"}</a></li>
|
||||
{{endif}}
|
||||
{{if $entry->canDelete()}}
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'delete' ) )}' data-confirm title='{lang="blog_delete_title"}'>{lang="delete"}</a></li>
|
||||
{{endif}}
|
||||
{{if \IPS\Member::loggedIn()->modPermission('can_view_moderation_log')}}
|
||||
<li class='ipsMenu_sep'><hr></li>
|
||||
<li class="ipsMenu_item"><a href='{$entry->url()->csrf()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
|
||||
{{endif}}
|
||||
</ul>
|
||||
{{endif}}
|
||||
{{if ! $entry->container()->social_group and !\IPS\Member::loggedIn()->group['gbw_no_report'] }}
|
||||
<a href='{$entry->url('report')}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_entry"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_entry"}">{lang="report_entry"}</a>
|
||||
{{endif}}
|
||||
|
||||
<div class='ipsResponsive_showPhone ipsResponsive_block ipsSpacer_top'>
|
||||
{template="follow" app="core" group="global" params="'blog', 'entry', $entry->id, $entry->followers()->count( TRUE )"}
|
||||
@@ -980,6 +1135,10 @@
|
||||
{{if count( $entry->comments() ) or $entry->commentForm()}}
|
||||
<br>
|
||||
{template="comments" app="blog" group="view" params="$entry"}
|
||||
{{endif}}
|
||||
|
||||
{{if $entry->container()->club()}}
|
||||
</div>
|
||||
{{endif}}]]></template>
|
||||
<template template_group="view" template_name="noEntries" template_data="$container" template_location="front" template_app="blog"><![CDATA[
|
||||
<div class='ipsType_center'>
|
||||
@@ -1023,23 +1182,31 @@
|
||||
{template="noEntries" group="view" app="blog" params="$table->container()"}
|
||||
{{endif}}]]></template>
|
||||
<template template_group="view" template_name="rssImport" template_data="$form" template_location="front" template_app="blog">{$form|raw}</template>
|
||||
<template template_group="view" template_name="view" template_data="$blog, $table" template_location="front" template_app="blog"><![CDATA[{template="blogHeader" group="view" app="blog" params="$blog"}
|
||||
<template template_group="view" template_name="view" template_data="$blog, $table" template_location="front" template_app="blog"><![CDATA[
|
||||
{{if $club = $blog->club()}}
|
||||
{{if settings.clubs and settings.clubs_header == 'full'}}
|
||||
{template="header" app="core" group="clubs" params="$club, $blog"}
|
||||
{{endif}}
|
||||
<div id='elClubContainer'>
|
||||
{{endif}}
|
||||
|
||||
{template="blogHeader" group="view" app="blog" params="$blog"}
|
||||
|
||||
{{if $blog->description}}
|
||||
<section class='ipsAreaBackground_light ipsPad'>
|
||||
<section class='ipsPad ipsBox ipsSpacer_top ipsSpacer_half'>
|
||||
<h3 class='ipsType_minorHeading'>{lang="about_this_blog"}</h3>
|
||||
<div class='ipsType_richText ipsType_light ipsType_normal' data-ipsTruncate data-ipsTruncate-size='4 lines' data-ipsTruncate-type='hide'>
|
||||
<div class='ipsType_richText ipsType_normal' data-ipsTruncate data-ipsTruncate-size='4 lines' data-ipsTruncate-type='hide'>
|
||||
{$blog->description|raw}
|
||||
</div>
|
||||
</section>
|
||||
{{endif}}
|
||||
|
||||
{{if \IPS\blog\Entry::canCreate( \IPS\Member::loggedIn(), $blog ) or $blog->canDelete() or $blog->canEdit() or ( $blog->pinned and \IPS\Member::loggedIn()->modPermission('can_unpin_content') ) || ( !$blog->pinned and \IPS\Member::loggedIn()->modPermission('can_pin_content') )}}
|
||||
{{if \IPS\blog\Entry::canCreate( \IPS\Member::loggedIn(), $blog ) or $blog->canDelete() or ( $blog->canEdit() AND !$blog->groupblog_ids ) or ( $blog->pinned and \IPS\Member::loggedIn()->modPermission('can_unpin_content') ) || ( !$blog->pinned and \IPS\Member::loggedIn()->modPermission('can_pin_content') )}}
|
||||
<ul class="ipsToolList ipsToolList_horizontal ipsClearfix ipsSpacer_both">
|
||||
<li class='ipsToolList_primaryAction'>
|
||||
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=blog&module=blogs&controller=submit&id={$blog->id}" seoTemplate="blog_submit"}">{lang="add_blog_entry"}</a>
|
||||
</li>
|
||||
{{if $blog->canDelete() or $blog->canEdit() or ( $blog->pinned and \IPS\Member::loggedIn()->modPermission('can_unpin_content') ) || ( !$blog->pinned and \IPS\Member::loggedIn()->modPermission('can_pin_content') ) }}
|
||||
{{if !$blog->club_id and ( $blog->canDelete() or ( $blog->canEdit() AND !$blog->groupblog_ids ) or ( $blog->pinned and \IPS\Member::loggedIn()->modPermission('can_unpin_content') ) || ( !$blog->pinned and \IPS\Member::loggedIn()->modPermission('can_pin_content') ) )}}
|
||||
<li>
|
||||
<a href='#elBlogManage_menu' id='elBlogManage' data-ipsMenu class='ipsButton ipsButton_link ipsButton_medium ipsButton_fullWidth'>{lang="manage_blog"} <i class='fa fa-caret-down'></i></a>
|
||||
<ul id='elBlogManage_menu' class='ipsMenu ipsMenu_normal ipsHide'>
|
||||
@@ -1081,7 +1248,11 @@
|
||||
|
||||
<div class='ipsResponsive_showPhone ipsResponsive_block ipsSpacer_top'>
|
||||
{template="follow" app="core" group="global" params="'blog', 'blog', $blog->_id, \IPS\blog\Entry::containerFollowerCount( $blog )"}
|
||||
</div>]]></template>
|
||||
</div>
|
||||
|
||||
{{if $blog->club()}}
|
||||
</div>
|
||||
{{endif}}]]></template>
|
||||
<template template_group="widgets" template_name="blogCommentFeed" template_data="$comments, $title, $orientation='vertical'" template_location="front" template_app="blog"><![CDATA[{{if !empty( $comments ) }}
|
||||
<h3 class='ipsType_reset ipsWidget_title'>{$title}</h3>
|
||||
{{if $orientation == 'vertical'}}
|
||||
@@ -1111,8 +1282,12 @@
|
||||
<div class='ipsComment_header ipsPhotoPanel ipsPhotoPanel_mini'>
|
||||
{template="userPhoto" app="core" group="global" params="$comment->author(), 'mini', $comment->warningRef()"}
|
||||
<div>
|
||||
<p class='ipsPos_right ipsType_reset ipsType_blendLinks'>
|
||||
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' data-ipsTooltip title='{lang="share_this_comment"}' data-ipsMenu data-ipsMenu-closeOnClick='false' id='elShareComment_{$comment->id}'><i class='fa fa-share-alt'></i></a>
|
||||
<p class='ipsPos_right ipsType_reset'>
|
||||
{{if $comment->canReport()}}
|
||||
<a href='{$comment->url('report')}' data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}" data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a> ·
|
||||
{{endif}}
|
||||
|
||||
<a class='ipsType_blendLinks' href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' data-ipsTooltip title='{lang="share_this_comment"}' data-ipsMenu data-ipsMenu-closeOnClick='false' id='elShareComment_{$comment->id}'><i class='fa fa-share-alt'></i></a>
|
||||
</p>
|
||||
<h3 class='ipsComment_author ipsType_blendLinks'>
|
||||
<strong class='ipsType_normal'>{template="userLink" app="core" group="global" params="$comment->author(), $comment->warningRef()"}</strong>
|
||||
@@ -1126,9 +1301,6 @@
|
||||
{{if $comment->hidden()}}
|
||||
· {$comment->hiddenBlurb()}
|
||||
{{endif}}
|
||||
{{if $comment instanceof \IPS\Content\ReportCenter and !\IPS\Member::loggedIn()->group['gbw_no_report'] and $comment->hidden() !== 1 }}
|
||||
· <a href='{$comment->url('report')}' data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}" data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a>
|
||||
{{endif}}
|
||||
</p>
|
||||
|
||||
{{if member.modPermission('mod_see_warn') and $comment->warning}}
|
||||
@@ -1138,11 +1310,11 @@
|
||||
</div>
|
||||
|
||||
<div class='ipsPad ipsClearfix'>
|
||||
{{if in_array( 'IPS\Content\Reputation', class_implements( $comment ) ) and settings.reputation_highlight and $comment->reputation() >= settings.reputation_highlight and settings.reputation_enabled}}
|
||||
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_highlight and $comment->reactionCount() >= settings.reputation_highlight and settings.reputation_enabled}}
|
||||
<strong class='ipsComment_popularFlag' data-ipsTooltip title='{lang="this_is_a_popular_comment"}'><i class='fa fa-star'></i></strong>
|
||||
{{endif}}
|
||||
<div class='ipsType_break ipsContained'><a href="{$comment->url()}" class='ipsDataItem_title ipsTruncate ipsTruncate_line'>{$comment->item()->name}</a></div><br>
|
||||
<div data-role='commentContent' class='ipsType_normal ipsType_richText ipsType_break ipsContained' data-controller='core.front.core.lightboxedImages'>
|
||||
<div data-role='commentContent' class='ipsType_normal ipsType_richText ipsContained' data-controller='core.front.core.lightboxedImages'>
|
||||
{{if $comment->hidden() === 1 && $comment->author()->member_id == \IPS\Member::loggedIn()->member_id}}
|
||||
<strong class='ipsType_medium ipsType_warning'><i class='fa fa-info-circle'></i> {lang="comment_awaiting_approval"}</strong>
|
||||
{{endif}}
|
||||
@@ -1153,9 +1325,11 @@
|
||||
{{endif}}
|
||||
</div>
|
||||
|
||||
{{if $comment->hidden() !== 1 && $comment instanceof \IPS\Content\Reputation and settings.reputation_enabled}}
|
||||
{template="reputation" group="global" app="core" params="$comment, 'ipsPos_right ipsResponsive_noFloat'"}
|
||||
{{endif}}
|
||||
<div class='ipsItemControls'>
|
||||
{{if $comment->hidden() !== 1 && \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_enabled}}
|
||||
{template="reputation" group="global" app="core" params="$comment"}
|
||||
{{endif}}
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
{{endforeach}}
|
||||
@@ -1185,7 +1359,7 @@
|
||||
</ul>
|
||||
</div>
|
||||
{{else}}
|
||||
<ol class="ipsDataList ipsClear cBlogList ipsAreaBackground ipsDataList_large" data-role="tableRows" itemscope="" itemtype="http://schema.org/ItemList">
|
||||
<ol class="ipsDataList ipsClear cBlogList ipsAreaBackground ipsDataList_large" data-role="tableRows">
|
||||
{{foreach $blogs as $blog}}
|
||||
<li class='ipsDataItem ipsAreaBackground_reset'>
|
||||
<div class='ipsColumns ipsColumns_collapsePhone'>
|
||||
@@ -1227,12 +1401,12 @@
|
||||
<div>
|
||||
<strong class='ipsType_minorHeading'>{lang="latest_entry"}</strong><br>
|
||||
<h3 class='ipsType_reset ipsType_sectionHead ipsType_blendLinks'>
|
||||
<div class='ipsType_break ipsContained'><a href='{$blog->latestEntry()->url()}' title='{lang="view_this_entry" sprintf="$blog->latestEntry()->name"}'>
|
||||
<span class='ipsType_break ipsContained'><a href='{$blog->latestEntry()->url()}' title='{lang="view_this_entry" sprintf="$blog->latestEntry()->name"}'>
|
||||
{{if $blog->latestEntry()->unread()}}
|
||||
<span class='ipsItemStatus' data-ipsTooltip title="{lang="unread_blog"}"><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{$blog->latestEntry()->name}
|
||||
</a></div>
|
||||
</a></span>
|
||||
{{if $blog->latestEntry()->locked()}}<i class='fa fa-lock'></i> {{endif}}{$blog->latestEntry()->caption}
|
||||
{{if $blog->latestEntry()->isFutureDate() || $blog->latestEntry()->mapped('pinned') || $blog->latestEntry()->mapped('featured') || $blog->latestEntry()->hidden() === -1 || $blog->latestEntry()->hidden() === 1 || $blog->latestEntry()->status === 'draft'}}
|
||||
{{if $blog->latestEntry()->isFutureDate()}}
|
||||
@@ -1354,6 +1528,10 @@
|
||||
text-shadow: 0px 0px 4px rgba(0,0,0,0.5);
|
||||
}
|
||||
|
||||
#elBlogHeader.cBlogHeader_withClub > .ipsCoverPhoto {
|
||||
padding-top: 100px;
|
||||
}
|
||||
|
||||
#elBlogHeader .ipsType_pageTitle {
|
||||
line-height: 1.3;
|
||||
}
|
||||
@@ -1503,18 +1681,22 @@ html[dir="rtl"] .cBlogInfo {
|
||||
float: left;
|
||||
list-style: none;
|
||||
}]]></css>
|
||||
<css css_location="front" css_app="blog" css_attributes="" css_path="." css_name="embed.css"><![CDATA[.cBlogEmbeddedPreview {
|
||||
line-height: 1.4;
|
||||
<css css_location="front" css_app="blog" css_attributes="" css_path="." css_name="embed.css">.cBlogEmbed .ipsRichEmbed_moreInfo {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.cBlogEmbedded_stats {
|
||||
max-width: 270px;
|
||||
margin-top: 5px !important;
|
||||
.cBlogEmbed .ipsRichEmbed_moreInfo li {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.cBlogEmbedded_stats > li {
|
||||
margin-bottom: 0 !important;
|
||||
}]]></css>
|
||||
html[dir="ltr"] .cBlogEmbed .ipsRichEmbed_moreInfo .ipsNotificationCount {
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
html[dir="rtl"] .cBlogEmbed .ipsRichEmbed_moreInfo .ipsNotificationCount {
|
||||
top: 0;
|
||||
left: 0;
|
||||
}</css>
|
||||
<css css_location="front" css_app="blog" css_attributes="" css_path="." css_name="profile.css"><![CDATA[.cProfileBlog_stats {
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
@@ -177,5 +177,26 @@
|
||||
"101096": "4.1.19.2",
|
||||
"101097": "4.1.19.2",
|
||||
"101098": "4.1.19.3",
|
||||
"101099": "4.1.19.4"
|
||||
"101099": "4.1.19.4",
|
||||
"101100": "4.2.0 Beta 1",
|
||||
"101101": "4.2.0 Beta 1",
|
||||
"101102": "4.2.0 Beta 1",
|
||||
"101103": "4.2.0 Beta 1",
|
||||
"101104": "4.2.0 Beta 2",
|
||||
"101105": "4.2.0 Beta 3",
|
||||
"101106": "4.2.0 Beta 3a",
|
||||
"101107": "4.2.0 Beta 4",
|
||||
"101108": "4.2.0 Beta 4",
|
||||
"101109": "4.2.0 Beta 5",
|
||||
"101110": "4.2.0 Beta 5a",
|
||||
"101111": "4.2.0 Beta 6",
|
||||
"101112": "4.2.0 Beta 6a",
|
||||
"101113": "4.2.0 Beta 6a",
|
||||
"101114": "4.2.0 Beta 7",
|
||||
"101115": "4.2.0 Beta 7a",
|
||||
"101116": "4.2.0 Beta 8",
|
||||
"101117": "4.2.0 Beta 8",
|
||||
"102000": "4.2.0",
|
||||
"102001": "4.2.0",
|
||||
"102002": "4.2.0"
|
||||
}
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief BBCode Tag
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blogs
|
||||
* @since 05 Feb 2016
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\BBCode;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief BBCode Tag
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blogs
|
||||
* @since 08 Feb 2016
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\BBCode;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Content Router extension: Blog
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 04 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\ContentRouter;
|
||||
@@ -37,10 +36,10 @@ class _Blog
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param \IPS\Member|NULL $member If checking access, the member to check for, or NULL to not check access
|
||||
* @param \IPS\Member|IPS\Member\Group|NULL $member If checking access, the member/group to check for, or NULL to not check access
|
||||
* @return void
|
||||
*/
|
||||
public function __construct( \IPS\Member $member = NULL )
|
||||
public function __construct( $member = NULL )
|
||||
{
|
||||
if ( $member === NULL or $member->canAccessModule( \IPS\Application\Module::get( 'blog', 'blogs', 'front' ) ) )
|
||||
{
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Create Menu Extension : Entry
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 10 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\CreateMenu;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Dashboard extension: Overview
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 20 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\Dashboard;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Editor Extension: Blogs
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 04 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\EditorLocations;
|
||||
@@ -118,6 +117,27 @@ class _Blogs
|
||||
return $this->performRebuild( $offset, $max, array( 'IPS\Text\LegacyParser', 'parseStatic' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Store image proxy status ( true = enabled )
|
||||
*/
|
||||
protected $_imageProxyStatus = null;
|
||||
|
||||
/**
|
||||
* Rebuild content to add or remove image proxy
|
||||
*
|
||||
* @param int|null $offset Offset to start from
|
||||
* @param int|null $max Maximum to parse
|
||||
* @param bool $status Enable/Disable Image Proxy
|
||||
* @return int Number completed
|
||||
* @note This method is optional and will only be called if it exists
|
||||
*/
|
||||
public function rebuildImageProxy( $offset, $max, $status=TRUE )
|
||||
{
|
||||
$this->_imageProxyStatus = $status;
|
||||
|
||||
return $this->performRebuild( $offset, $max, 'parseImageProxy' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform rebuild - abstracted as the call for rebuildContent() and rebuildAttachmentImages() is nearly identical
|
||||
*
|
||||
@@ -137,7 +157,14 @@ class _Blogs
|
||||
|
||||
try
|
||||
{
|
||||
$rebuilt = call_user_func( $callback, $word['word_custom'] );
|
||||
if( $callback == 'parseImageProxy' )
|
||||
{
|
||||
$rebuilt = \IPS\Text\Parser::parseImageProxy( $word['word_custom'], $this->_imageProxyStatus );
|
||||
}
|
||||
else
|
||||
{
|
||||
$rebuilt = call_user_func( $callback, $word['word_custom'] );
|
||||
}
|
||||
}
|
||||
catch( \InvalidArgumentException $e )
|
||||
{
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Editor Extension: Blog Entries
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 10 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\EditorLocations;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief File Storage Extension: Blogs (cover photos)
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 16 Jun 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\FileStorage;
|
||||
@@ -81,7 +80,7 @@ class _Blogs
|
||||
/**
|
||||
* Check if a file is valid
|
||||
*
|
||||
* @param \IPS\Http\Url $file The file to check
|
||||
* @param string $file The file path to check
|
||||
* @return bool
|
||||
*/
|
||||
public function isValidFile( $file )
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief File Storage Extension: Blog Entries (cover photos)
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 30 May 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\FileStorage;
|
||||
@@ -81,7 +80,7 @@ class _Entries
|
||||
/**
|
||||
* Check if a file is valid
|
||||
*
|
||||
* @param \IPS\Http\Url $file The file to check
|
||||
* @param string $file The file path to check
|
||||
* @return bool
|
||||
*/
|
||||
public function isValidFile( $file )
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Front Navigation Extension: Blogs
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\FrontNavigation;
|
||||
@@ -71,6 +70,6 @@ class _Blogs extends \IPS\core\FrontNavigation\FrontNavigationAbstract
|
||||
*/
|
||||
public function active()
|
||||
{
|
||||
return \IPS\Dispatcher::i()->application->directory === 'blog';
|
||||
return !\IPS\core\FrontNavigation::$clubTabActive and \IPS\Dispatcher::i()->application->directory === 'blog';
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Admin CP Group Form
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 11 Jul 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\GroupForm;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief ACP Live Search Extension
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 20 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\LiveSearch;
|
||||
@@ -54,7 +53,7 @@ class _Blogs
|
||||
$blogs = \IPS\Db::i()->select(
|
||||
"*",
|
||||
'blog_blogs',
|
||||
array( "word_custom LIKE CONCAT( '%', ?, '%' ) AND lang_id=?", $searchTerm, \IPS\Member::loggedIn()->language()->id ),
|
||||
array( "blog_club_id IS NULL AND ( (blog_member_id>? AND blog_name LIKE CONCAT( '%', ?, '%' ) ) OR ( word_custom LIKE CONCAT( '%', ?, '%' ) AND lang_id=? ) )", 0, $searchTerm, $searchTerm, \IPS\Member::loggedIn()->language()->id ),
|
||||
NULL,
|
||||
array( 0, 500 )
|
||||
)->join(
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Member Filter Extension
|
||||
* @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 Blogs
|
||||
* @since 23 Mar 2017
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\MemberFilter;
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Member Filter Extension
|
||||
*/
|
||||
class _Blog
|
||||
{
|
||||
/**
|
||||
* Determine if the filter is available in a given area
|
||||
*
|
||||
* @param string $area Area to check
|
||||
* @return bool
|
||||
*/
|
||||
public function availableIn( $area )
|
||||
{
|
||||
return in_array( $area, array( 'bulkmail', 'group_promotions' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Setting Field
|
||||
*
|
||||
* @param mixed $criteria Value returned from the save() method
|
||||
* @return array Array of form elements
|
||||
*/
|
||||
public function getSettingField( $criteria )
|
||||
{
|
||||
$options = array( 'any' => 'any', 'yes' => 'yes', 'no' => 'no' );
|
||||
|
||||
return array(
|
||||
new \IPS\Helpers\Form\Radio( 'mf_has_blog', isset( $criteria['has_blog'] ) ? $criteria['has_blog'] : 'any', FALSE, array( 'options' => $options ) ),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the filter data
|
||||
*
|
||||
* @param array $post Form values
|
||||
* @return mixed False, or an array of data to use later when filtering the members
|
||||
* @throws \LogicException
|
||||
*/
|
||||
public function save( $post )
|
||||
{
|
||||
if( isset( $post['mf_has_blog'] ) and in_array( $post['mf_has_blog'], array( 'yes', 'no' ) ) )
|
||||
{
|
||||
return array( 'has_blog' => $post['mf_has_blog'] );
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get where clause to add to the member retrieval database query
|
||||
*
|
||||
* @param mixed $data The array returned from the save() method
|
||||
* @return string|array|NULL Where clause
|
||||
*/
|
||||
public function getQueryWhereClause( $data )
|
||||
{
|
||||
if( isset( $data['has_blog'] ) )
|
||||
{
|
||||
return ( $data['has_blog'] == 'yes' ) ? array( array( "blog_blogs.blog_id IS NOT NULL" ) ) : array( array( "blog_blogs.blog_id IS NULL" ) );
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback for member retrieval database query
|
||||
* Can be used to set joins
|
||||
*
|
||||
* @param mixed $data The array returned from the save() method
|
||||
* @param \IPS\Db\Query $query The query
|
||||
* @return void
|
||||
*/
|
||||
public function queryCallback( $data, &$query )
|
||||
{
|
||||
if( isset( $data['has_blog'] ) )
|
||||
{
|
||||
$query->join( 'blog_blogs', "core_members.member_id=blog_blogs.blog_member_id" );
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if a member matches specified filters
|
||||
*
|
||||
* @note This is only necessary if availableIn() includes group_promotions
|
||||
* @param \IPS\Member $member Member object to check
|
||||
* @param array $filters Previously defined filters
|
||||
* @return bool
|
||||
*/
|
||||
public function matches( \IPS\Member $member, $filters )
|
||||
{
|
||||
/* If we aren't filtering by this, then any member matches */
|
||||
if( !isset( $filters['has_blog'] ) OR !$filters['has_blog'] )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
$result = (bool) \IPS\Db::i()->select( 'COUNT(*)', 'blog_blogs', array( 'blog_member_id=?', $member->member_id ) )->first();
|
||||
|
||||
return ( $filters['has_blog'] == 'no' ) ? !$result : $result;
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Member Sync
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 20 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\MemberSync;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Profile extension: Blogs
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 02 Apr 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\Profile;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Background Task
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blogs
|
||||
* @since 12 Apr 2016
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\Queue;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Group Blogs Controller
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\modules\admin\blogs;
|
||||
@@ -117,17 +116,17 @@ class _blogs extends \IPS\Node\Controller
|
||||
'link' => \IPS\Http\Url::internal( 'app=blog&module=blogs&controller=blogs&do=copy&id=' ) . $row['blog_id'],
|
||||
'data' => array()
|
||||
),
|
||||
'empty' => array(
|
||||
'icon' => 'trash-o',
|
||||
'title' => 'empty',
|
||||
'link' => \IPS\Http\Url::internal( 'app=blog&module=blogs&controller=blogs&do=delete&deleteNode=0&id=' ) . $row['blog_id'],
|
||||
'content' => array(
|
||||
'icon' => 'arrow-right',
|
||||
'title' => 'mass_manage_content',
|
||||
'link' => \IPS\Http\Url::internal( 'app=blog&module=blogs&controller=blogs&do=massManageContent&id=' ) . $row['blog_id'],
|
||||
'data' => array( 'ipsDialog' => '', 'ipsDialog-title' => \IPS\Member::loggedIn()->language()->addToStack('empty') ),
|
||||
'hotkey'=> 'd'
|
||||
'hotkey'=> 'm'
|
||||
),
|
||||
'delete' => array(
|
||||
'icon' => 'times-circle',
|
||||
'title' => 'delete',
|
||||
'link' => \IPS\Http\Url::internal( 'app=blog&module=blogs&controller=blogs&do=delete&deleteNode=1&id=' ) . $row['blog_id'],
|
||||
'link' => \IPS\Http\Url::internal( 'app=blog&module=blogs&controller=blogs&do=delete&id=' ) . $row['blog_id'],
|
||||
'data' => ( $blog->getContentItemCount() ) ? array( 'ipsDialog' => '', 'ipsDialog-title' => \IPS\Member::loggedIn()->language()->addToStack('delete') ) : array( 'delete' => '' ),
|
||||
'hotkey'=> 'd'
|
||||
)
|
||||
@@ -135,18 +134,17 @@ class _blogs extends \IPS\Node\Controller
|
||||
};
|
||||
|
||||
/* Root buttons */
|
||||
$table->rootButtons = array(
|
||||
'add' => array(
|
||||
'icon' => 'plus',
|
||||
'title' => 'add_blog',
|
||||
'link' => \IPS\Http\Url::internal( 'app=blog&module=blogs&controller=blogs&do=form' ),
|
||||
'data' => array()
|
||||
),
|
||||
\IPS\Output::i()->sidebar['actions']['add'] = array(
|
||||
'primary' => true,
|
||||
'icon' => 'plus',
|
||||
'title' => 'add_blog',
|
||||
'link' => \IPS\Http\Url::internal( 'app=blog&module=blogs&controller=blogs&do=form' ),
|
||||
'data' => array()
|
||||
);
|
||||
|
||||
/* Display */
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('blogs');
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'global', 'core' )->block( 'title', (string) $table );
|
||||
\IPS\Output::i()->output = (string) $table;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Blog Settings
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\modules\admin\blogs;
|
||||
@@ -45,6 +44,7 @@ class _settings extends \IPS\Dispatcher\Controller
|
||||
$form = new \IPS\Helpers\Form;
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'blog_enable_rating', \IPS\Settings::i()->blog_enable_rating ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'blog_enable_sidebar', \IPS\Settings::i()->blog_enable_sidebar ) );
|
||||
|
||||
$form->addHeader('blog_settings_rss');
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'blog_allow_rssimport', \IPS\Settings::i()->blog_allow_rssimport ) );
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief All Blogs
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\modules\front\blogs;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Create Blog
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 24 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\modules\front\blogs;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief View Blog Entry Controller
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\modules\front\blogs;
|
||||
@@ -105,8 +104,144 @@ class _entry extends \IPS\Content\Controller
|
||||
|
||||
/* Online User Location */
|
||||
\IPS\Session::i()->setLocation( $this->entry->url(), $this->entry->onlineListPermissions(), 'loc_blog_viewing_entry', array( $this->entry->name => FALSE ) );
|
||||
|
||||
|
||||
/* Add JSON-ld output */
|
||||
\IPS\Output::i()->jsonLd['blog'] = array(
|
||||
'@context' => "http://schema.org",
|
||||
'@type' => "Blog",
|
||||
'url' => (string) $this->entry->container()->url(),
|
||||
'name' => htmlspecialchars( $this->entry->container()->_title, ENT_QUOTES | \IPS\HTMLENTITIES, 'UTF-8', FALSE ),
|
||||
'description' => strip_tags( $this->entry->container()->description ),
|
||||
'commentCount' => $this->entry->container()->_comments,
|
||||
'interactionStatistic' => array(
|
||||
array(
|
||||
'@type' => 'InteractionCounter',
|
||||
'interactionType' => "http://schema.org/ViewAction",
|
||||
'userInteractionCount' => $this->entry->container()->num_views
|
||||
),
|
||||
array(
|
||||
'@type' => 'InteractionCounter',
|
||||
'interactionType' => "http://schema.org/FollowAction",
|
||||
'userInteractionCount' => \IPS\blog\Entry::containerFollowerCount( $this->entry->container() )
|
||||
),
|
||||
array(
|
||||
'@type' => 'InteractionCounter',
|
||||
'interactionType' => "http://schema.org/CommentAction",
|
||||
'userInteractionCount' => $this->entry->container()->_comments
|
||||
),
|
||||
array(
|
||||
'@type' => 'InteractionCounter',
|
||||
'interactionType' => "http://schema.org/WriteAction",
|
||||
'userInteractionCount' => $this->entry->container()->_items
|
||||
)
|
||||
),
|
||||
'blogPost' => array(
|
||||
'@context' => "http://schema.org",
|
||||
'@type' => "BlogPosting",
|
||||
'url' => (string) $this->entry->url(),
|
||||
'mainEntityOfPage' => (string) $this->entry->url(),
|
||||
'name' => htmlspecialchars( $this->entry->mapped('title'), ENT_QUOTES | \IPS\HTMLENTITIES, 'UTF-8', FALSE ),
|
||||
'headline' => htmlspecialchars( $this->entry->mapped('title'), ENT_QUOTES | \IPS\HTMLENTITIES, 'UTF-8', FALSE ),
|
||||
'articleBody' => strip_tags( $this->entry->truncated() ),
|
||||
'commentCount' => $this->entry->mapped('num_comments'),
|
||||
'dateCreated' => \IPS\DateTime::ts( $this->entry->date )->format( \IPS\DateTime::ISO8601 ),
|
||||
'datePublished' => \IPS\DateTime::ts( $this->entry->publish_date )->format( \IPS\DateTime::ISO8601 ),
|
||||
'author' => array(
|
||||
'@type' => 'Person',
|
||||
'name' => htmlspecialchars( \IPS\Member::load( $this->entry->mapped('author') )->name, ENT_QUOTES | \IPS\HTMLENTITIES, 'UTF-8', FALSE ),
|
||||
'url' => (string) \IPS\Member::load( $this->entry->mapped('author') )->url(),
|
||||
'image' => \IPS\Member::load( $this->entry->mapped('author') )->get_photo()
|
||||
),
|
||||
'publisher' => array(
|
||||
'@type' => 'Organization',
|
||||
'name' => htmlspecialchars( \IPS\Member::load( $this->entry->mapped('author') )->name, ENT_QUOTES | \IPS\HTMLENTITIES, 'UTF-8', FALSE ),
|
||||
'url' => (string) \IPS\Member::load( $this->entry->mapped('author') )->url(),
|
||||
'image' => \IPS\Member::load( $this->entry->mapped('author') )->get_photo(),
|
||||
'logo' => array(
|
||||
'@type' => 'ImageObject',
|
||||
'url' => \IPS\Member::load( $this->entry->mapped('author') )->get_photo(),
|
||||
)
|
||||
),
|
||||
'interactionStatistic' => array(
|
||||
array(
|
||||
'@type' => 'InteractionCounter',
|
||||
'interactionType' => "http://schema.org/ViewAction",
|
||||
'userInteractionCount' => $this->entry->views
|
||||
),
|
||||
array(
|
||||
'@type' => 'InteractionCounter',
|
||||
'interactionType' => "http://schema.org/FollowAction",
|
||||
'userInteractionCount' => \IPS\blog\Entry::containerFollowerCount( $this->entry->container() )
|
||||
),
|
||||
array(
|
||||
'@type' => 'InteractionCounter',
|
||||
'interactionType' => "http://schema.org/CommentAction",
|
||||
'userInteractionCount' => $this->entry->mapped('num_comments')
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
if( $this->entry->container()->coverPhoto()->file )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['blog']['image'] = (string) $this->entry->container()->coverPhoto()->file->url;
|
||||
}
|
||||
|
||||
if( $this->entry->container()->member_id )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['blog']['author'] = array(
|
||||
'@type' => 'Person',
|
||||
'name' => htmlspecialchars( \IPS\Member::load( $this->entry->container()->member_id )->name, ENT_QUOTES | \IPS\HTMLENTITIES, 'UTF-8', FALSE ),
|
||||
'url' => (string) \IPS\Member::load( $this->entry->container()->member_id )->url(),
|
||||
'image' => \IPS\Member::load( $this->entry->container()->member_id )->get_photo()
|
||||
);
|
||||
}
|
||||
|
||||
if( $this->entry->edit_time )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['blog']['blogPost']['dateModified'] = \IPS\DateTime::ts( $this->entry->edit_time )->format( \IPS\DateTime::ISO8601 );
|
||||
}
|
||||
else
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['blog']['blogPost']['dateModified'] = \IPS\DateTime::ts( $this->entry->publish_date ?: $this->entry->date )->format( \IPS\DateTime::ISO8601 );
|
||||
}
|
||||
|
||||
$file = NULL;
|
||||
if( $this->entry->image )
|
||||
{
|
||||
$file = \IPS\File::get( 'blog_Blogs', $this->entry->image );
|
||||
}
|
||||
elseif( $this->entry->coverPhoto()->file )
|
||||
{
|
||||
$file = $this->entry->coverPhoto()->file;
|
||||
}
|
||||
elseif( $this->entry->container()->coverPhoto()->file )
|
||||
{
|
||||
$file = $this->entry->container()->coverPhoto()->file;
|
||||
}
|
||||
|
||||
if( $file !== NULL )
|
||||
{
|
||||
try
|
||||
{
|
||||
$dimensions = $file->getImageDimensions();
|
||||
|
||||
\IPS\Output::i()->jsonLd['blog']['blogPost']['image'] = array(
|
||||
'@type' => 'ImageObject',
|
||||
'url' => (string) $file->url,
|
||||
'width' => $dimensions[0],
|
||||
'height' => $dimensions[1]
|
||||
);
|
||||
}
|
||||
/* File does not exist */
|
||||
catch( \RuntimeException $e ) {}
|
||||
}
|
||||
|
||||
/* Display */
|
||||
if( \IPS\Settings::i()->blog_enable_sidebar and $this->entry->container()->sidebar )
|
||||
{
|
||||
\IPS\Output::i()->sidebar['contextual'] = \IPS\Theme::i()->getTemplate('view')->blogSidebar( $this->entry->container()->sidebar );
|
||||
}
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'view' )->entry( $this->entry, $previous, $next );
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Submit
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 10 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\modules\front\blogs;
|
||||
@@ -24,6 +23,10 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
*/
|
||||
class _submit extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
/**
|
||||
* @brief This blog
|
||||
*/
|
||||
protected $blog = NULL;
|
||||
/**
|
||||
* Execute
|
||||
*
|
||||
@@ -31,7 +34,15 @@ class _submit extends \IPS\Dispatcher\Controller
|
||||
*/
|
||||
public function execute()
|
||||
{
|
||||
\IPS\blog\Entry::canCreate( \IPS\Member::loggedIn(), NULL, TRUE );
|
||||
if ( isset( \IPS\Request::i()->id ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
$this->blog = \IPS\blog\Blog::load( \IPS\Request::i()->id );
|
||||
}
|
||||
catch( \OutOfRangeException $e ) {}
|
||||
}
|
||||
\IPS\blog\Entry::canCreate( \IPS\Member::loggedIn(), $this->blog, TRUE );
|
||||
|
||||
parent::execute();
|
||||
}
|
||||
@@ -48,17 +59,33 @@ class _submit extends \IPS\Dispatcher\Controller
|
||||
/* Load Blog */
|
||||
try
|
||||
{
|
||||
/* Can we add to this Blog? */
|
||||
$blog = \IPS\blog\Blog::load( \IPS\Request::i()->id );
|
||||
\IPS\blog\Entry::canCreate( \IPS\Member::loggedIn(), $blog, TRUE );
|
||||
/* Can we add to this Blog? We load the blog in execute, so emulate an OutOfRangeException here if we don't actually have one. */
|
||||
if ( $this->blog === NULL )
|
||||
{
|
||||
throw new \OutOfRangeException;
|
||||
}
|
||||
|
||||
$form = \IPS\blog\Entry::create( $blog );
|
||||
\IPS\blog\Entry::canCreate( \IPS\Member::loggedIn(), $this->blog, TRUE );
|
||||
|
||||
$form = \IPS\blog\Entry::create( $this->blog );
|
||||
$formTemplate = $form->customTemplate( array( call_user_func_array( array( \IPS\Theme::i(), 'getTemplate' ), array( 'submit', 'blog' ) ), 'submitFormTemplate' ) );
|
||||
|
||||
\IPS\Session::i()->setLocation( $blog->url(), array(), 'loc_blog_adding_entry', $blog->member_id ? array( $blog->_title => FALSE ) : array( "blogs_blog_{$blog->id}" => TRUE ) );
|
||||
\IPS\Output::i()->breadcrumb[] = array( $blog->url(), $blog->_title );
|
||||
\IPS\Output::i()->sidebar['enabled'] = FALSE;
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'submit' )->submit( $formTemplate );
|
||||
if ( $club = $this->blog->club() )
|
||||
{
|
||||
\IPS\core\FrontNavigation::$clubTabActive = TRUE;
|
||||
\IPS\Output::i()->breadcrumb = array();
|
||||
\IPS\Output::i()->breadcrumb[] = array( \IPS\Http\Url::internal( 'app=core&module=clubs&controller=directory', 'front', 'clubs_list' ), \IPS\Member::loggedIn()->language()->addToStack('module__core_clubs') );
|
||||
\IPS\Output::i()->breadcrumb[] = array( $club->url(), $club->name );
|
||||
|
||||
if ( \IPS\Settings::i()->clubs_header == 'sidebar' )
|
||||
{
|
||||
\IPS\Output::i()->sidebar['contextual'] = \IPS\Theme::i()->getTemplate( 'clubs', 'core' )->header( $club, $this->blog, 'sidebar' );
|
||||
}
|
||||
}
|
||||
\IPS\Output::i()->breadcrumb[] = array( $this->blog->url(), $this->blog->_title );
|
||||
|
||||
\IPS\Session::i()->setLocation( $this->blog->url(), array(), 'loc_blog_adding_entry', $this->blog->member_id ? array( $this->blog->_title => FALSE ) : array( "blogs_blog_{$this->blog->id}" => TRUE ) );
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'submit' )->submit( $formTemplate, $this->blog );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief View Blog Entry Controller
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\modules\front\blogs;
|
||||
@@ -96,6 +95,58 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
\IPS\Output::i()->rssFeeds['blog_rss_title'] = \IPS\Http\Url::internal( "app=blog&module=blogs&controller=view&id={$this->blog->_id}", 'front', 'blogs_rss', array( $this->blog->seo_name ) );
|
||||
}
|
||||
|
||||
/* Add JSON-ld */
|
||||
\IPS\Output::i()->jsonLd['blog'] = array(
|
||||
'@context' => "http://schema.org",
|
||||
'@type' => "Blog",
|
||||
'url' => (string) $this->blog->url(),
|
||||
'name' => htmlspecialchars( $this->blog->_title, ENT_QUOTES | \IPS\HTMLENTITIES, 'UTF-8', FALSE ),
|
||||
'description' => strip_tags( $this->blog->description ),
|
||||
'commentCount' => $this->blog->_comments,
|
||||
'interactionStatistic' => array(
|
||||
array(
|
||||
'@type' => 'InteractionCounter',
|
||||
'interactionType' => "http://schema.org/ViewAction",
|
||||
'userInteractionCount' => $this->blog->num_views
|
||||
),
|
||||
array(
|
||||
'@type' => 'InteractionCounter',
|
||||
'interactionType' => "http://schema.org/FollowAction",
|
||||
'userInteractionCount' => \IPS\blog\Entry::containerFollowerCount( $this->blog )
|
||||
),
|
||||
array(
|
||||
'@type' => 'InteractionCounter',
|
||||
'interactionType' => "http://schema.org/CommentAction",
|
||||
'userInteractionCount' => $this->blog->_comments
|
||||
),
|
||||
array(
|
||||
'@type' => 'InteractionCounter',
|
||||
'interactionType' => "http://schema.org/WriteAction",
|
||||
'userInteractionCount' => $this->blog->_items
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
if( $this->blog->coverPhoto()->file )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['blog']['image'] = (string) $this->blog->coverPhoto()->file->url;
|
||||
}
|
||||
|
||||
if( $this->blog->member_id )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['blog']['author'] = array(
|
||||
'@type' => 'Person',
|
||||
'name' => htmlspecialchars( \IPS\Member::load( $this->blog->member_id )->name, ENT_QUOTES | \IPS\HTMLENTITIES, 'UTF-8', FALSE ),
|
||||
'url' => (string) \IPS\Member::load( $this->blog->member_id )->url(),
|
||||
'image' => \IPS\Member::load( $this->blog->member_id )->get_photo()
|
||||
);
|
||||
}
|
||||
|
||||
if( \IPS\Settings::i()->blog_enable_sidebar and $this->blog->sidebar )
|
||||
{
|
||||
\IPS\Output::i()->sidebar['contextual'] = \IPS\Theme::i()->getTemplate('view')->blogSidebar( $this->blog->sidebar );
|
||||
}
|
||||
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_browse.js', 'blog', 'front' ) );
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'view' )->view( $this->blog, (string) $table );
|
||||
\IPS\Output::i()->contextualSearchOptions[ \IPS\Member::loggedIn()->language()->addToStack( 'search_contextual_item_blogs' ) ] = array( 'type' => 'blog_entry', 'nodes' => $this->blog->_id );
|
||||
@@ -108,7 +159,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
*/
|
||||
protected function editBlog()
|
||||
{
|
||||
if( !$this->blog->canEdit() OR $this->blog->groupblog_ids )
|
||||
if( !$this->blog->canEdit() OR $this->blog->groupblog_ids or $this->blog->club_id )
|
||||
{
|
||||
\IPS\Output::i()->error( 'no_module_permission', '2B201/2', 403, '' );
|
||||
}
|
||||
@@ -116,7 +167,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
/* Build form */
|
||||
$form = new \IPS\Helpers\Form;
|
||||
$form = new \IPS\Helpers\Form( 'form', 'save', $this->blog->url()->setQueryString( array( 'do' => 'editBlog' ) )->csrf() );
|
||||
$form->class .= 'ipsForm_vertical';
|
||||
|
||||
$this->blog->form( $form, TRUE );
|
||||
@@ -152,7 +203,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
if( !$this->blog->canDelete() )
|
||||
if( !$this->blog->canDelete() or $this->blog->club_id )
|
||||
{
|
||||
\IPS\Output::i()->error( 'no_module_permission', '2B201/3', 403, '' );
|
||||
}
|
||||
@@ -180,7 +231,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
/* Do we have permission */
|
||||
if ( ( $this->blog->pinned and !\IPS\Member::loggedIn()->modPermission('can_unpin_content') ) or ( !$this->blog->pinned and !\IPS\Member::loggedIn()->modPermission('can_pin_content') ) )
|
||||
if ( ( $this->blog->pinned and !\IPS\Member::loggedIn()->modPermission('can_unpin_content') ) or ( !$this->blog->pinned and !\IPS\Member::loggedIn()->modPermission('can_pin_content') ) or $this->blog->club_id )
|
||||
{
|
||||
\IPS\Output::i()->error( 'no_module_permission', '2B201/4', 403, '' );
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.0 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 30 Oct 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_100002;
|
||||
@@ -104,8 +103,7 @@ class _Upgrade
|
||||
|
||||
$result = @json_encode( $data );
|
||||
|
||||
/* @link http://community.invisionpower.com/4bugtrack/beta-8-json_encode-invalid-utf-8-sequence-in-argument-during-upgrade-from-347-r2636/
|
||||
Sometimes the array unserializes fine but there are still "bad" characters in there */
|
||||
/* Sometimes the array unserializes fine but there are still "bad" characters in there */
|
||||
if( $result === FALSE )
|
||||
{
|
||||
$data = unserialize( $poll['choices'] );
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.0 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 15 Jan 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_100015;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.0 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 24 Feb 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_100016;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.0 RC 5 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 5 May 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_100018;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.0 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 15 Mar 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_100021;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.4 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 5 May 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_100027;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.5 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 5 May 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_100028;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.9 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 19 Jun 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_100035;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.10 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 07 Jul 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_100038;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.1.4 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 05 Nov 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_101016;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.1.6 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 14 Dec 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_101021;
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"1": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"blog_blogs",
|
||||
{
|
||||
"name": "blog_club_id",
|
||||
"type": "BIGINT",
|
||||
"length": 20,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "The club ID if this blog belongs to a club, or NULL",
|
||||
"unsigned": true,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"2": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"blog_entries",
|
||||
{
|
||||
"name": "entry_meta_data",
|
||||
"type": "BIT",
|
||||
"length": 1,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"blog_blogs",
|
||||
{
|
||||
"name": "blog_sidebar",
|
||||
"type": "TEXT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"4": {
|
||||
"method": "changeColumn",
|
||||
"params": [
|
||||
"blog_entries",
|
||||
"entry_name",
|
||||
{
|
||||
"name": "entry_name",
|
||||
"type": "VARCHAR",
|
||||
"length": 255,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.0 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_22002;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.0 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_23000;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.0 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\setup\upg_40000;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Blog Node
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 3 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog;
|
||||
@@ -24,6 +23,8 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
*/
|
||||
class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\Embeddable
|
||||
{
|
||||
use \IPS\Content\ClubContainer;
|
||||
|
||||
/**
|
||||
* @brief [ActiveRecord] Multiton Store
|
||||
*/
|
||||
@@ -176,6 +177,26 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
{
|
||||
$member = \IPS\Member::loggedIn();
|
||||
}
|
||||
|
||||
if ( $club = $this->club() )
|
||||
{
|
||||
if ( !$member->member_id )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
switch ( $permission )
|
||||
{
|
||||
case 'add':
|
||||
return $club->isModerator( $member );
|
||||
|
||||
case 'view':
|
||||
case 'read':
|
||||
default:
|
||||
return $club->canRead( $member );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ( $this->social_group )
|
||||
{
|
||||
@@ -235,7 +256,18 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
{
|
||||
$return = parent::searchIndexPermissions();
|
||||
|
||||
if ( $this->social_group )
|
||||
if ( $club = $this->club() )
|
||||
{
|
||||
if ( $club->type == $club::TYPE_PUBLIC )
|
||||
{
|
||||
return 'ca';
|
||||
}
|
||||
else
|
||||
{
|
||||
return "cm,c{$club->id}";
|
||||
}
|
||||
}
|
||||
elseif ( $this->social_group )
|
||||
{
|
||||
$return = ( $return === '*' ) ? array() : explode( ',', $return );
|
||||
|
||||
@@ -258,15 +290,19 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
*/
|
||||
public static function followWhere()
|
||||
{
|
||||
$where = array();
|
||||
|
||||
if ( \IPS\Member::loggedIn()->member_id )
|
||||
{
|
||||
$where = array( array( '( blog_blogs.blog_social_group IS NULL OR blog_blogs.blog_member_id=' . \IPS\Member::loggedIn()->member_id . ' OR ( ' . \IPS\Content::socialGroupGetItemsWithPermissionWhere( 'blog_blogs.blog_social_group', \IPS\Member::loggedIn() ) . ' ) )' ) );
|
||||
$where[] = array( '( blog_blogs.blog_social_group IS NULL OR blog_blogs.blog_member_id=' . \IPS\Member::loggedIn()->member_id . ' OR ( ' . \IPS\Content::socialGroupGetItemsWithPermissionWhere( 'blog_blogs.blog_social_group', \IPS\Member::loggedIn() ) . ' ) )' );
|
||||
$where[] = array( '( blog_blogs.blog_club_id IS NULL OR ' . \IPS\Db::i()->in( 'blog_blogs.blog_club_id', \IPS\Member::loggedIn()->clubs() ) . ' )' );
|
||||
}
|
||||
else
|
||||
{
|
||||
$where = array( \IPS\Content::socialGroupGetItemsWithPermissionWhere( 'blog_blogs.blog_social_group', \IPS\Member::loggedIn() ) );
|
||||
$where[] = \IPS\Content::socialGroupGetItemsWithPermissionWhere( 'blog_blogs.blog_social_group', \IPS\Member::loggedIn() );
|
||||
$where[] = array( 'blog_blogs.blog_club_id IS NULL' );
|
||||
}
|
||||
|
||||
|
||||
return $where;
|
||||
}
|
||||
|
||||
@@ -301,47 +337,27 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
{
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'blog_name', $this->id ? $this->_title : NULL, TRUE, array(), NULL, NULL, NULL, 'blog_name' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Editor( 'blog_desc', $this->id ? $this->description : NULL, FALSE, array( 'app' => 'blog', 'key' => 'Blogs', 'autoSaveKey' => ( $this->id ? "blogs-blog-{$this->id}" : "blogs-new-blog" ), 'attachIds' => $this->id ? array( $this->id, NULL, 'description' ) : NULL, 'minimize' => 'blog_desc_placeholder' ), NULL, NULL, NULL, 'blog_desc_wrap' ) );
|
||||
|
||||
/* Sidebar */
|
||||
if ( \IPS\Settings::i()->blog_enable_sidebar )
|
||||
{
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'blog_sidebar_enabled', $this->sidebar ? TRUE : FALSE, FALSE, array( 'togglesOn' => array( 'blog_sidebar_wrap' ) ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\Editor( 'blog_sidebar', $this->id ? $this->sidebar : NULL, FALSE, array( 'app' => 'blog', 'key' => 'Blogs', 'autoSaveKey' => ( $this->id ? "blogs-blogsidebar-{$this->id}" : "blogs-new-blog-sidebar" ), 'attachIds' => $this->id ? array( $this->id, NULL, 'sidebar' ) : NULL ), NULL, NULL, NULL, 'blog_sidebar_wrap' ) );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$form->addHeader( 'blog_settings' );
|
||||
|
||||
/* Owned blogs */
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'blog_name', $this->id ? $this->_title : NULL, FALSE, array(), function( $value ) {
|
||||
if ( \IPS\Request::i()->blog_type === 'member' AND !$value )
|
||||
{
|
||||
throw new \InvalidArgumentException( 'form_required' );
|
||||
}
|
||||
}, NULL, NULL, 'blog_name' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Editor( 'blog_desc', $this->id ? $this->desc : NULL, FALSE, array( 'app' => 'blog', 'key' => 'Blogs', 'autoSaveKey' => ( $this->id ? "blogs-blog-{$this->id}m" : "blogs-new-blog" ), 'attachIds' => $this->id ? array( $this->id, NULL, 'description' ) : NULL, 'minimize' => 'blog_desc_placeholder' ), NULL, NULL, NULL, 'blog_desc_wrap' ) );
|
||||
|
||||
/* Group blogs - only one or the other will show at any given time */
|
||||
$form->add( new \IPS\Helpers\Form\Translatable( 'blog_name_group', ( $this->id AND !$this->groupblog_ids ) ? $this->_title : NULL, FALSE, array( 'app' => 'blog', 'key' => ( $this->id ? "blogs_blog_{$this->id}" : NULL ) ), function( $value ) {
|
||||
if ( \IPS\Request::i()->blog_type !== 'member' AND !$value )
|
||||
{
|
||||
throw new \InvalidArgumentException( 'form_required' );
|
||||
}
|
||||
}, NULL, NULL, 'blog_name_group' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Translatable( 'blog_desc_group', NULL, FALSE, array( 'app' => 'blog', 'key' => ( $this->id ? "blogs_blog_{$this->id}_desc" : NULL ), 'editor' => array( 'app' => 'blog', 'key' => 'Blogs', 'autoSaveKey' => ( $this->id ? "blogs-blog-{$this->id}-group" : "blogs-new-blog-group" ), 'attachIds' => $this->id ? array( $this->id, NULL, 'description' ) : NULL, 'minimize' => 'blog_desc_placeholder' ) ), NULL, NULL, NULL, 'blog_desc_group_wrap' ) );
|
||||
|
||||
$groups = array();
|
||||
foreach ( \IPS\Member\Group::groups() as $k => $v )
|
||||
{
|
||||
$groups[ $k ] = $v->name;
|
||||
}
|
||||
|
||||
$type = 'member';
|
||||
if ( $this->id )
|
||||
{
|
||||
if ( $this->groupblog_ids )
|
||||
{
|
||||
$type = 'group';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$id = $this->id ?: 'new';
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Radio( 'blog_type', $type, TRUE, array(
|
||||
$form->add( new \IPS\Helpers\Form\Radio( 'blog_type', ( $this->id AND $this->groupblog_ids ) ? 'group' : 'member', TRUE, array(
|
||||
'options' => array(
|
||||
'member' => 'blog_type_normal',
|
||||
'group' => 'blog_type_group'
|
||||
@@ -365,7 +381,65 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
NULL, NULL, 'blog_member_id' ) );
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Select( 'blog_groupblog_ids', $this->id ? explode( ',', $this->groupblog_ids ) : array(), FALSE, array( 'options' => $groups, 'multiple' => TRUE ), NULL, NULL, NULL, 'blog_groupblog_ids' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Translatable( 'blog_groupblog_name', NULL, FALSE, array( 'app' => 'blog', 'key' => ( $this->id ? "blogs_groupblog_name_{$this->id}" : NULL ) ), NULL, NULL, NULL, 'blog_groupblog_name' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Translatable( 'blog_groupblog_name', NULL, FALSE, array( 'app' => 'blog', 'key' => ( $this->id ? "blogs_groupblog_name_{$this->id}" : NULL ) ), function( $value ) {
|
||||
if ( \IPS\Request::i()->blog_type === 'group' )
|
||||
{
|
||||
$hasTitle = FALSE;
|
||||
|
||||
foreach( $value as $_value )
|
||||
{
|
||||
if( $_value )
|
||||
{
|
||||
$hasTitle = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( !$hasTitle )
|
||||
{
|
||||
throw new \InvalidArgumentException( 'form_required' );
|
||||
}
|
||||
}
|
||||
}, NULL, NULL, 'blog_groupblog_name' ) );
|
||||
|
||||
/* Owned blogs */
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'blog_name', $this->id ? $this->_title : NULL, FALSE, array(), function( $value ) {
|
||||
if ( \IPS\Request::i()->blog_type === 'member' AND !$value )
|
||||
{
|
||||
throw new \InvalidArgumentException( 'form_required' );
|
||||
}
|
||||
}, NULL, NULL, 'blog_name' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Editor( 'blog_desc', $this->id ? $this->desc : NULL, FALSE, array( 'app' => 'blog', 'key' => 'Blogs', 'autoSaveKey' => ( $this->id ? "blogs-blog-{$this->id}m" : "blogs-new-blog" ), 'attachIds' => $this->id ? array( $this->id, NULL, 'description' ) : NULL, 'minimize' => 'blog_desc_placeholder' ), NULL, NULL, NULL, 'blog_desc_wrap' ) );
|
||||
|
||||
/* Group blogs - only one or the other will show at any given time */
|
||||
$form->add( new \IPS\Helpers\Form\Translatable( 'blog_name_group', ( $this->id AND !$this->groupblog_ids ) ? $this->_title : NULL, FALSE, array( 'app' => 'blog', 'key' => ( $this->id ? "blogs_blog_{$this->id}" : NULL ) ), function( $value ) {
|
||||
if ( \IPS\Request::i()->blog_type === 'group' )
|
||||
{
|
||||
$hasTitle = FALSE;
|
||||
|
||||
foreach( $value as $_value )
|
||||
{
|
||||
if( $_value )
|
||||
{
|
||||
$hasTitle = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( !$hasTitle )
|
||||
{
|
||||
throw new \InvalidArgumentException( 'form_required' );
|
||||
}
|
||||
}
|
||||
}, NULL, NULL, 'blog_name_group' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Translatable( 'blog_desc_group', NULL, FALSE, array( 'app' => 'blog', 'key' => ( $this->id ? "blogs_blog_{$this->id}_desc" : NULL ), 'editor' => array( 'app' => 'blog', 'key' => 'Blogs', 'autoSaveKey' => ( $this->id ? "blogs-blog-{$this->id}-group" : "blogs-new-blog-group" ), 'attachIds' => $this->id ? array( $this->id, NULL, 'description' ) : NULL, 'minimize' => 'blog_desc_placeholder' ) ), NULL, NULL, NULL, 'blog_desc_group_wrap' ) );
|
||||
|
||||
/* Sidebar */
|
||||
if ( \IPS\Settings::i()->blog_enable_sidebar )
|
||||
{
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'blog_sidebar_enabled', $this->sidebar ? TRUE : FALSE, FALSE, array( 'togglesOn' => array( 'blog_sidebar_wrap' ) ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\Editor( 'blog_sidebar', $this->id ? $this->sidebar : NULL, FALSE, array( 'app' => 'blog', 'key' => 'Blogs', 'autoSaveKey' => ( $this->id ? "blogs-blogsidebar-{$this->id}" : "blogs-new-blog-sidebar" ), 'attachIds' => $this->id ? array( $this->id, NULL, 'sidebar' ) : NULL ), NULL, NULL, NULL, 'blog_sidebar_wrap' ) );
|
||||
}
|
||||
}
|
||||
|
||||
if ( \IPS\Member::loggedIn()->group['g_blog_allowprivate'] )
|
||||
@@ -539,6 +613,12 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
unset( $values['blog_enable_rss'] );
|
||||
}
|
||||
|
||||
if( array_key_exists( 'blog_sidebar_enabled', $values ) )
|
||||
{
|
||||
$values['blog_sidebar'] = $values['blog_sidebar_enabled'] ? $values['blog_sidebar'] : NULL;
|
||||
unset( $values['blog_sidebar_enabled'] );
|
||||
}
|
||||
|
||||
/* Send to parent */
|
||||
if( array_key_exists( 'blog_member_id', $values ) )
|
||||
{
|
||||
@@ -896,7 +976,7 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
*/
|
||||
public function get_settings()
|
||||
{
|
||||
$settings = json_decode( $this->_data['settings'], TRUE );
|
||||
$settings = isset( $this->_data['settings'] ) ? json_decode( $this->_data['settings'], TRUE ) : array();
|
||||
|
||||
return $settings;
|
||||
}
|
||||
@@ -930,7 +1010,7 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
{
|
||||
\IPS\Http\Url::external( 'http://rpc.pingomatic.com/RPC2' )
|
||||
->request()
|
||||
->setHeaders( array( 'Content-Type' => 'text/xml', 'User-Agent' => "InvisionPowerServices/" . \IPS\Application::load('core')->long_version ) )
|
||||
->setHeaders( array( 'Content-Type' => 'text/xml', 'User-Agent' => "InvisionCommunity/" . \IPS\Application::load('core')->long_version ) )
|
||||
->post( $xml->asXML() );
|
||||
}
|
||||
catch ( \IPS\Http\Request\Exception $e )
|
||||
@@ -1003,6 +1083,7 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
*/
|
||||
public function embedContent( $params )
|
||||
{
|
||||
\IPS\Output::i()->cssFiles = array_merge( \IPS\Output::i()->cssFiles, \IPS\Theme::i()->css( 'embed.css', 'blog', 'front' ) );
|
||||
return \IPS\Theme::i()->getTemplate( 'global', 'blog' )->embedBlogs( $this, $this->url()->setQueryString( $params ) );
|
||||
}
|
||||
|
||||
@@ -1072,4 +1153,66 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
{
|
||||
return array( 'view' => 'view', 'add' => 'add' );
|
||||
}
|
||||
|
||||
/* !Clubs */
|
||||
|
||||
/**
|
||||
* Get front-end language string
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function clubFrontTitle()
|
||||
{
|
||||
return 'blogs_sg';
|
||||
}
|
||||
|
||||
/**
|
||||
* Set form for creating a node of this type in a club
|
||||
*
|
||||
* @param \IPS\Helpers\Form $form Form object
|
||||
* @return void
|
||||
*/
|
||||
public function clubForm( \IPS\Helpers\Form $form )
|
||||
{
|
||||
$itemClass = static::$contentItemClass;
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'club_node_name', $this->_id ? $this->_title : \IPS\Member::loggedIn()->language()->addToStack( 'blogs_sg' ), TRUE, array( 'maxLength' => 255 ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\Editor( 'club_node_description', $this->_id ? \IPS\Member::loggedIn()->language()->get( static::$titleLangPrefix . $this->_id . '_desc' ) : NULL, FALSE, array( 'app' => 'blog', 'key' => 'Blogs', 'autoSaveKey' => ( $this->id ? "blogs-blog-{$this->id}" : "blogs-new-blog" ), 'attachIds' => $this->id ? array( $this->id, NULL, 'description' ) : NULL, 'minimize' => 'blog_desc_placeholder' ) ) );
|
||||
if( \IPS\Settings::i()->blog_allow_rss )
|
||||
{
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'blog_enable_rss', $this->id ? $this->settings['allowrss'] : TRUE ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Class-specific routine when saving club form
|
||||
*
|
||||
* @param \IPS\Member\Club $club The club
|
||||
* @param array $values Values
|
||||
* @return void
|
||||
*/
|
||||
public function _saveClubForm( \IPS\Member\Club $club, $values )
|
||||
{
|
||||
if( \IPS\Settings::i()->blog_allow_rss )
|
||||
{
|
||||
$settings = $this->settings;
|
||||
$settings['allowrss'] = $values['blog_enable_rss'];
|
||||
$this->settings = $settings;
|
||||
}
|
||||
|
||||
if ( $values['club_node_name'] )
|
||||
{
|
||||
$this->seo_name = \IPS\Http\Url\Friendly::seoTitle( $values['club_node_name'] );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the permission index permissions to a specific club
|
||||
*
|
||||
* @param \IPS\Member\Club $club The club
|
||||
* @return void
|
||||
*/
|
||||
public function setPermissionsToClub( \IPS\Member\Club $club )
|
||||
{
|
||||
// Deliberately do nothing, Blog handles permissions differently
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Blog RSS/Atom feed active record
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 02 Apr 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\Blog;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Blog Profile Table Helper
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 18 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\Blog;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Blog Table Helper
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 18 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\Blog;
|
||||
@@ -99,6 +98,9 @@ class _Table extends \IPS\Helpers\Table\Table
|
||||
{
|
||||
$where[] = array( 'blog_social_group IS NULL' );
|
||||
}
|
||||
|
||||
/* Exclude club blogs */
|
||||
$where[] = array( 'blog_club_id IS NULL' );
|
||||
|
||||
/* Get Count */
|
||||
$count = \IPS\Db::i()->select( 'COUNT(*) as cnt', 'blog_blogs', $where )->first();
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Blog Entry Comment Model
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 3 Mar 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\Entry;
|
||||
@@ -22,8 +21,10 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
/**
|
||||
* Blog Entry Comment Model
|
||||
*/
|
||||
class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory, \IPS\Content\ReportCenter, \IPS\Content\Hideable, \IPS\Content\Reputation, \IPS\Content\Searchable, \IPS\Content\Embeddable
|
||||
class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory, \IPS\Content\ReportCenter, \IPS\Content\Hideable, \IPS\Content\Searchable, \IPS\Content\Embeddable
|
||||
{
|
||||
use \IPS\Content\Reactable;
|
||||
|
||||
/**
|
||||
* @brief [ActiveRecord] Multiton Store
|
||||
*/
|
||||
@@ -75,11 +76,6 @@ class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory,
|
||||
*/
|
||||
public static $icon = 'file-text';
|
||||
|
||||
/**
|
||||
* @brief Reputation Type
|
||||
*/
|
||||
public static $reputationType = 'comment_id';
|
||||
|
||||
/**
|
||||
* @brief [Content] Key for hide reasons
|
||||
*/
|
||||
@@ -109,10 +105,12 @@ class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory,
|
||||
if ( $member->member_id )
|
||||
{
|
||||
$where[] = array( '( blog_blogs.blog_social_group IS NULL OR blog_blogs.blog_member_id=' . $member->member_id . ' OR ( ' . \IPS\Content::socialGroupGetItemsWithPermissionWhere( 'blog_blogs.blog_social_group', $member ) . ' ) )' );
|
||||
$where[] = array( '( blog_blogs.blog_club_id IS NULL OR ' . \IPS\Db::i()->in( 'blog_blogs.blog_club_id', \IPS\Member::loggedIn()->clubs() ) . ' )' );
|
||||
}
|
||||
else
|
||||
{
|
||||
$where[] = array( "(" . \IPS\Content::socialGroupGetItemsWithPermissionWhere( 'blog_blogs.blog_social_group', $member ) . " OR blog_blogs.blog_social_group IS NULL )" );
|
||||
$where[] = array( 'blog_blogs.blog_club_id IS NULL' );
|
||||
}
|
||||
}
|
||||
return parent::getItemsWithPermission( $where, $order, $limit, $permissionKey, $includeHiddenItems, $queryFlags, $member, $joinContainer, $joinComments, $joinReviews, $countOnly, $joins );
|
||||
@@ -136,4 +134,26 @@ class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory,
|
||||
|
||||
return parent::modPermission( $type, $member, $container );
|
||||
}
|
||||
|
||||
/**
|
||||
* Reaction Type
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function reactionType()
|
||||
{
|
||||
return 'comment_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get content for embed
|
||||
*
|
||||
* @param array $params Additional parameters to add to URL
|
||||
* @return string
|
||||
*/
|
||||
public function embedContent( $params )
|
||||
{
|
||||
\IPS\Output::i()->cssFiles = array_merge( \IPS\Output::i()->cssFiles, \IPS\Theme::i()->css( 'embed.css', 'blog', 'front' ) );
|
||||
return \IPS\Theme::i()->getTemplate( 'global', 'blog' )->embedEntryComment( $this, $this->item(), $this->item()->container(), $this->url()->setQueryString( $params ) );
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Entry Model
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 3 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog;
|
||||
@@ -33,11 +32,13 @@ class _Entry extends \IPS\Content\Item implements
|
||||
\IPS\Content\Polls,
|
||||
\IPS\Content\Ratings,
|
||||
\IPS\Content\EditHistory,
|
||||
\IPS\Content\Reputation,
|
||||
\IPS\Content\Searchable,
|
||||
\IPS\Content\Embeddable,
|
||||
\IPS\Content\FuturePublishing
|
||||
{
|
||||
\IPS\Content\FuturePublishing,
|
||||
\IPS\Content\MetaData
|
||||
{
|
||||
use \IPS\Content\Reactable;
|
||||
|
||||
/**
|
||||
* @brief Multiton Store
|
||||
*/
|
||||
@@ -91,6 +92,7 @@ class _Entry extends \IPS\Content\Item implements
|
||||
'is_future_entry' => 'is_future_entry',
|
||||
'future_date' => 'publish_date',
|
||||
'status' => 'status',
|
||||
'meta_data' => 'meta_data',
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -133,11 +135,6 @@ class _Entry extends \IPS\Content\Item implements
|
||||
'reply' => 4,
|
||||
);
|
||||
|
||||
/**
|
||||
* @brief Reputation Type
|
||||
*/
|
||||
public static $reputationType = 'entry_id';
|
||||
|
||||
/**
|
||||
* @brief [Content] Key for hide reasons
|
||||
*/
|
||||
@@ -242,6 +239,15 @@ class _Entry extends \IPS\Content\Item implements
|
||||
{
|
||||
$return = TRUE;
|
||||
}
|
||||
|
||||
/* Club blog */
|
||||
if ( $club = $this->container()->club() )
|
||||
{
|
||||
if ( !$club->canRead( $member ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Private blog */
|
||||
if( $this->container()->social_group != 0 AND $this->container()->owner() != $member )
|
||||
@@ -296,10 +302,12 @@ class _Entry extends \IPS\Content\Item implements
|
||||
if ( $member->member_id )
|
||||
{
|
||||
$where[] = array( '( blog_blogs.blog_member_id=' . $member->member_id . ' OR ( ' . \IPS\Content::socialGroupGetItemsWithPermissionWhere( 'blog_blogs.blog_social_group', $member ) . ' ) OR blog_blogs.blog_social_group IS NULL )' );
|
||||
$where[] = array( '( blog_blogs.blog_club_id IS NULL OR ' . \IPS\Db::i()->in( 'blog_blogs.blog_club_id', \IPS\Member::loggedIn()->clubs() ) . ' )' );
|
||||
}
|
||||
else
|
||||
{
|
||||
$where[] = array( "(" . \IPS\Content::socialGroupGetItemsWithPermissionWhere( 'blog_blogs.blog_social_group', $member ) . " OR blog_blogs.blog_social_group IS NULL )" );
|
||||
$where[] = array( 'blog_blogs.blog_club_id IS NULL' );
|
||||
}
|
||||
}
|
||||
return parent::getItemsWithPermission( $where, $order, $limit, $permissionKey, $includeHiddenItems, $queryFlags, $member, $joinContainer, $joinComments, $joinReviews, $countOnly, $joins, $skipPermission, $joinTags, $joinAuthor, $joinLastCommenter, $showMovedLinks );
|
||||
@@ -318,10 +326,12 @@ class _Entry extends \IPS\Content\Item implements
|
||||
if ( \IPS\Member::loggedIn()->member_id )
|
||||
{
|
||||
$where = array( array( '( blog_blogs.blog_social_group IS NULL OR blog_blogs.blog_member_id=' . \IPS\Member::loggedIn()->member_id . ' OR ( ' . \IPS\Content::socialGroupGetItemsWithPermissionWhere( 'blog_blogs.blog_social_group', \IPS\Member::loggedIn() ) . ' ) )' ) );
|
||||
$where[] = array( '( blog_blogs.blog_club_id IS NULL OR ' . \IPS\Db::i()->in( 'blog_blogs.blog_club_id', \IPS\Member::loggedIn()->clubs() ) . ' )' );
|
||||
}
|
||||
else
|
||||
{
|
||||
$where = array( \IPS\Content::socialGroupGetItemsWithPermissionWhere( 'blog_blogs.blog_social_group', \IPS\Member::loggedIn() ) );
|
||||
$where[] = array( 'blog_blogs.blog_club_id IS NULL' );
|
||||
}
|
||||
|
||||
return array_merge( parent::followWhere( $joinContainer, $joins ), $where );
|
||||
@@ -439,7 +449,12 @@ class _Entry extends \IPS\Content\Item implements
|
||||
|
||||
if ( $container )
|
||||
{
|
||||
if ( !in_array( $container->id, array_keys( $blogs ) ) )
|
||||
if ( $club = $container->club() )
|
||||
{
|
||||
$return = $club->isModerator( $member );
|
||||
$error = 'no_module_permission';
|
||||
}
|
||||
elseif ( !in_array( $container->id, array_keys( $blogs ) ) )
|
||||
{
|
||||
$return = FALSE;
|
||||
$error = 'no_module_permission';
|
||||
@@ -664,4 +679,107 @@ class _Entry extends \IPS\Content\Item implements
|
||||
'rating' => $this->averageRating(),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reaction Type
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function reactionType()
|
||||
{
|
||||
return 'entry_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Supported Meta Data Types
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function supportedMetaDataTypes()
|
||||
{
|
||||
return array( 'core_FeaturedComments', 'core_ContentMessages' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Can perform an action on a message
|
||||
*
|
||||
* @param string The action
|
||||
* @param \IPS\Member|NULL The member, or NULL for currently logged in
|
||||
* @return bool
|
||||
* @todo Mod Log
|
||||
*/
|
||||
public function canOnMessage( $action, \IPS\Member $member = NULL )
|
||||
{
|
||||
$return = parent::canOnMessage( $action, $member );
|
||||
|
||||
if ( $return === FALSE )
|
||||
{
|
||||
$member = $member ?: \IPS\Member::loggedIn();
|
||||
|
||||
if ( $member->member_id AND $member->member_id === $this->author()->member_id AND $member->group['g_blog_allowownmod'] )
|
||||
{
|
||||
$return = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can Feature a Comment
|
||||
*
|
||||
* @param \IPS\Member|NULL The member, or NULL for currently logged in
|
||||
* @return bool
|
||||
*/
|
||||
public function canFeatureComment( \IPS\Member $member = NULL )
|
||||
{
|
||||
$return = parent::canFeatureComment( $member );
|
||||
|
||||
if ( $return === FALSE )
|
||||
{
|
||||
$member = $member ?: \IPS\Member::loggedIn();
|
||||
|
||||
if ( $member->member_id AND $member->member_id === $this->author()->member_id AND $member->group['g_blog_allowownmod'] )
|
||||
{
|
||||
$return = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can Unfeature a Comment
|
||||
*
|
||||
* @param \IPS\Member|NULL The member, or NULL for currently logged in
|
||||
* @return bool
|
||||
*/
|
||||
public function canUnfeatureComment( \IPS\Member $member = NULL )
|
||||
{
|
||||
$return = parent::canUnfeatureComment( $member );
|
||||
|
||||
if ( $return === FALSE )
|
||||
{
|
||||
$member = $member ?: \IPS\Member::loggedIn();
|
||||
|
||||
if ( $member->member_id AND $member->member_id === $this->author()->member_id AND $member->group['g_blog_allowownmod'] )
|
||||
{
|
||||
$return = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get content for embed
|
||||
*
|
||||
* @param array $params Additional parameters to add to URL
|
||||
* @return string
|
||||
*/
|
||||
public function embedContent( $params )
|
||||
{
|
||||
\IPS\Output::i()->cssFiles = array_merge( \IPS\Output::i()->cssFiles, \IPS\Theme::i()->css( 'embed.css', 'blog', 'front' ) );
|
||||
return \IPS\Theme::i()->getTemplate( 'global', 'blog' )->embedEntry( $this, $this->container(), $this->url()->setQueryString( $params ) );
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief blogrssimport Task
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 02 Apr 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\tasks;
|
||||
@@ -39,7 +38,8 @@ class _blogrssimport extends \IPS\Task
|
||||
{
|
||||
try
|
||||
{
|
||||
$feed = \IPS\blog\Blog\Feed::constructFromData( \IPS\Db::i()->select( '*', 'blog_rss_import', NULL, 'rss_last_import ASC', 1 )->first() );
|
||||
$data = \IPS\Db::i()->select( '*', 'blog_rss_import', NULL, 'rss_last_import ASC', 1 )->first();
|
||||
$feed = \IPS\blog\Blog\Feed::constructFromData( $data );
|
||||
$feed->run();
|
||||
}
|
||||
/* UnderflowException means there's no feed, so we can disable the task */
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief blogCommentFeed Widget
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 13 Jul 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\widgets;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief blogStatistics Widget
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 14 May 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\widgets;
|
||||
@@ -49,7 +48,7 @@ class _blogStatistics extends \IPS\Widget\StaticCache
|
||||
$stats = array();
|
||||
|
||||
$stats['total_blogs'] = \IPS\Db::i()->select( "COUNT(*)", 'blog_blogs' )->first();
|
||||
$stats['total_entries'] = \IPS\Db::i()->select( "COUNT(*)", 'blog_entries' )->first();
|
||||
$stats['total_entries'] = \IPS\Db::i()->select( "COUNT(*)", 'blog_entries', array( 'entry_status=? AND entry_hidden=?', 'published', 1 ) )->first();
|
||||
|
||||
return $this->output( $stats );
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief blogs Widget
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 13 Jul 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\widgets;
|
||||
@@ -148,7 +147,7 @@ class _blogs extends \IPS\Widget\PermissionCache
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
$where = array( array( 'blog_disabled=0 AND blog_social_group IS NULL' ) );
|
||||
$where = array( array( 'blog_disabled=0 AND blog_social_group IS NULL AND blog_club_id IS NULL' ) );
|
||||
$sortBy = ( isset( $this->configuration['widget_feed_sort_on'] ) and isset( $this->configuration['widget_feed_sort_dir'] ) ) ? ( $this->configuration['widget_feed_sort_on'] . ' ' . $this->configuration['widget_feed_sort_dir'] ) : NULL;
|
||||
$limit = isset( $this->configuration['widget_feed_show'] ) ? $this->configuration['widget_feed_show'] : 5;
|
||||
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Blog Entry Feed Widget
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 22 Jun 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\widgets;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Recent Entries Widget
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @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 Blog
|
||||
* @since 10 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\widgets;
|
||||
|
||||
Reference in new issue
Block a user