Version 4.6.0
This commit is contained in:
1 parent
f79dcf067a
commit
517a5e1f70
2036 files changed
+110041
-26162
No files matched your search
+37
-9
@@ -6,7 +6,7 @@ has been used throughout Invision Community to add style, flair and functionalit
|
||||
to our product.
|
||||
|
||||
NULLING
|
||||
Last Updated: 18 August 2020
|
||||
Last Updated: 09 June 2021
|
||||
Author: IPBMafia.ru
|
||||
|
||||
AES implementation in PHP
|
||||
@@ -16,17 +16,24 @@ AES implementation in PHP
|
||||
Website: http://www.movable-type.co.uk/scripts/aes-php.html
|
||||
License: http://creativecommons.org/licenses/by/3.0/
|
||||
|
||||
Brick/math
|
||||
Description: Arbitrary-precision arithmetic library
|
||||
Location: system/3rd_party/Brick
|
||||
Included version: 0.9.2
|
||||
Website: https://github.com/brick/math
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
Clipboard
|
||||
Description: Cross browser copy to clipboard functionality
|
||||
Location: applications/core/interface/clipboard
|
||||
Included version: 2.0.4
|
||||
Included version: 2.0.6
|
||||
Website: clipboardjs.com
|
||||
License: https://zenorocha.mit-license.org
|
||||
|
||||
CKEditor
|
||||
Description: Provides the editor functionality for submitting content.
|
||||
Location: In development: applications/core/dev/ckeditor (custom build with additional plugins)
|
||||
Included version: 4.14.1
|
||||
Included version: 4.16
|
||||
Website: http://ckeditor.com
|
||||
License: http://www.gnu.org/copyleft/lesser.html
|
||||
|
||||
@@ -40,8 +47,8 @@ Codemirror (with C-like, CSS, HTMLMixed, JavaScript, PHP, SQL and XML modes and
|
||||
Cropper
|
||||
Description: Provides cropping functionality for profile photos
|
||||
Location: applications/core/interface/cropper
|
||||
Included version: 3.0.0-rc
|
||||
Website: https://github.com/fengyuanchen/cropper
|
||||
Included version: 1.5.9
|
||||
Website: https://github.com/fengyuanchen/cropperjs
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
Devices Icon Pack
|
||||
@@ -204,7 +211,7 @@ jQuery UI TouchPunch
|
||||
JShrink
|
||||
Description: Provides JavaScript minification
|
||||
Location: system/3rd_party/JShrink
|
||||
Included version: 1.3.1
|
||||
Included version: 1.4.0
|
||||
Website: https://github.com/tedious/JShrink
|
||||
License: https://github.com/tedious/JShrink/blob/master/LICENSE
|
||||
|
||||
@@ -215,6 +222,13 @@ jsTimezoneDetect
|
||||
Website: https://bitbucket.org/pellepim/jstimezonedetect
|
||||
License: http://www.opensource.org/licenses/mit-license.php
|
||||
|
||||
JwtFramework
|
||||
Description: Provides JWT signing & encryption support
|
||||
Location: system/3rd_party/JwtFramework
|
||||
Included version: 2.2.8
|
||||
Website: https://github.com/web-token/jwt-framework
|
||||
License: http://www.opensource.org/licenses/mit-license.php
|
||||
|
||||
linkify
|
||||
Description: Provides link detection
|
||||
Location: dev/js/library/linkify
|
||||
@@ -225,7 +239,7 @@ linkify
|
||||
Mustache.js
|
||||
Description: JS templating engine
|
||||
Location: dev/js/library/mustache/
|
||||
Included version: 2.3.0
|
||||
Included version: 4.2.0
|
||||
Website: http://github.com/janl/mustache.js
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
@@ -236,6 +250,13 @@ Normalize.css
|
||||
Website: http://necolas.github.io/normalize.css/
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
Parsedown
|
||||
Description: Converts Markdown to HTML
|
||||
Location: applications/convert/sources/Tools/Vanilla/Parsedown
|
||||
Included version: 1.7.4
|
||||
Website: https://parsedown.org/
|
||||
License: https://github.com/erusev/parsedown/blob/master/LICENSE.txt
|
||||
|
||||
parseUri
|
||||
Description: Used to parse URLs in JS
|
||||
Location: dev/js/framework/common/utils/ips.utils.url.js
|
||||
@@ -326,14 +347,21 @@ Twemoji
|
||||
Underscore.js
|
||||
Description: General-purpose functional JS library
|
||||
Location: dev/js/library/underscore/
|
||||
Included version: 1.8.3
|
||||
Included version: 1.13.1
|
||||
Website: http://underscorejs.org
|
||||
License: https://github.com/documentcloud/underscore/blob/master/LICENSE
|
||||
|
||||
Web Push Library for PHP
|
||||
Description: Provides support and utility functions for Web Push
|
||||
Location: system/3rd_party/Minishlink
|
||||
Included version: 6.0.3
|
||||
Website: https://github.com/web-push-libs/web-push-php
|
||||
License: http://opensource.org/licenses/mit-license.php
|
||||
|
||||
Whoops
|
||||
Description: Provides error handling for development mode
|
||||
Location: dev/Whoops
|
||||
Included Version: 2.5.0
|
||||
Included Version: 2.9.1
|
||||
Website: http://filp.github.io/whoops/
|
||||
License: https://github.com/filp/whoops/blob/master/LICENSE.md
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ class tools extends \IPSUtf8\Dispatcher\Controller
|
||||
\IPSUtf8\Session::i()->save();
|
||||
}
|
||||
|
||||
\IPSUtf8\Session::i()->updateTableData();
|
||||
\IPSUtf8\Convert::i()->fixCollation();
|
||||
|
||||
$this->manage( "Collation checked and fixed where appropriate" );
|
||||
|
||||
@@ -388,7 +388,7 @@ class Db extends \mysqli
|
||||
* @return \IPSUtf8\Db\Select
|
||||
*
|
||||
*/
|
||||
public function select( $columns=NULL, $table, $where=NULL, $order=NULL, $limit=NULL, $group=NULL, $having=NULL, $flags=0 )
|
||||
public function select( $columns, $table, $where=NULL, $order=NULL, $limit=NULL, $group=NULL, $having=NULL, $flags=0 )
|
||||
{
|
||||
$binds = array();
|
||||
$query = 'SELECT ';
|
||||
|
||||
@@ -113,7 +113,7 @@ EOFHTML;
|
||||
/**
|
||||
* Tools page
|
||||
*/
|
||||
public static function tools( $isUtf8=false, $msg )
|
||||
public static function tools( $isUtf8, $msg )
|
||||
{
|
||||
$html = <<<EOFHTML
|
||||
<div class="jumbotron">
|
||||
@@ -205,7 +205,7 @@ EOFHTML;
|
||||
/**
|
||||
* Welcome page
|
||||
*/
|
||||
public static function welcome( $isUtf8=false, $status, $percent=false, $controller='browser' )
|
||||
public static function welcome( $isUtf8, $status, $percent=false, $controller='browser' )
|
||||
{
|
||||
$convertClass = ( $controller === 'browser' ) ? '\IPSUtf8\Convert' : '\IPSUtf8\Convert\Archive';
|
||||
$origUtf8Charset = \IPSUtf8\Db::i('utf8')->getCharset();
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
* @since 18 Feb 2013
|
||||
*/
|
||||
|
||||
\define('READ_WRITE_SEPARATION', FALSE);
|
||||
\define('REPORT_EXCEPTIONS', TRUE);
|
||||
require_once '../init.php';
|
||||
\IPS\Dispatcher\Admin::i()->run();
|
||||
@@ -3,7 +3,7 @@
|
||||
Nulled by IPBMafia.ru
|
||||
Buy license at https://www.invisionpower.com/buy/self-hosted
|
||||
================================================================
|
||||
IPS 4.5.0 (105100)
|
||||
IPS 4.6.0 (106107)
|
||||
=============================[NOTE]=============================
|
||||
|
||||
Invision Community End User License Agreement
|
||||
|
||||
@@ -15,8 +15,10 @@
|
||||
<br><br>
|
||||
<p class="ipsType_normal">{lang="recom_info"}</p>
|
||||
<ul class="ipsPad ipsType_large ipsList_checks">
|
||||
{{foreach $requirements['advice'] as $key => $item}}
|
||||
<li class="{{if $key === 'php'}}ipsMessage ipsMessage_warning{{else}}advisory{{endif}}">{$item}</li>
|
||||
{{foreach $requirements['advice'] as $items}}
|
||||
{{foreach $items as $key => $item}}
|
||||
<li class="{{if $key === 'php'}}ipsMessage ipsMessage_warning{{else}}advisory{{endif}}">{$item}</li>
|
||||
{{endforeach}}
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
{{endif}}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Invision Community Update Extractor</title>
|
||||
<style type='text/css'>@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.ipsProgressBar{width:50%;margin:auto;height:20px;overflow:hidden;background:#9c9c9c;background:-moz-linear-gradient(top,rgba(156,156,156,1) 0,rgba(180,180,180,1) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(156,156,156,1)),color-stop(100%,rgba(180,180,180,1)));background:-webkit-linear-gradient(top,rgba(156,156,156,1) 0,rgba(180,180,180,1) 100%);background:-o-linear-gradient(top,rgba(156,156,156,1) 0,rgba(180,180,180,1) 100%);background:-ms-linear-gradient(top,rgba(156,156,156,1) 0,rgba(180,180,180,1) 100%);background:linear-gradient(to bottom,rgba(156,156,156,1) 0,rgba(180,180,180,1) 100%);border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.ipsProgressBar_animated .ipsProgressBar_progress{background-color:#5490c0;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.15)),color-stop(.75,rgba(255,255,255,.15)),color-stop(.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px;-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.ipsProgressBar_progress{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,.25);background:#5490c0;position:relative;padding-left:6px}.ipsProgressBar_progress[data-progress]:after{position:absolute;right:5px;top:0;line-height:32px;color:#fff;content:attr(data-progress);display:block;font-weight:700}</style>
|
||||
<style type='text/css'>body{font-family:BlinkMacSystemFont, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.ipsProgressBar{width:50%;margin:auto;height:26px;overflow:hidden;background:rgb(237, 242, 247);background-image:linear-gradient(to bottom,rgba(23, 126, 201,0.1),rgba(23, 126, 201,0.1));border-radius:4px;}.ipsProgressBar_animated .ipsProgressBar_progress{background-color:rgb(23, 126, 201);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px;animation:progress-bar-stripes 2s linear infinite}.ipsProgressBar_progress{display:flex;align-items:center;width:0;height:100%;font-size:12px;color:#ffffff;text-align:right;background:rgb(23, 126, 201);position:relative;white-space:nowrap;line-height:26px;text-indent:6px;padding-right:2px;}.ipsProgressBar>span:first-child{padding-left:7px;}.ipsProgressBar_progress[data-progress]:after{top:0;color:#fff;content:attr(data-progress);display:block;right:5px;}</style>
|
||||
</head>
|
||||
<body style="margin:0">
|
||||
<?php
|
||||
@@ -451,7 +451,7 @@ try
|
||||
|
||||
echo <<<HTML
|
||||
<div class="ipsProgressBar ipsProgressBar_animated">
|
||||
<div class="ipsProgressBar_progress" style="width: 100%;"></div>
|
||||
<div class="ipsProgressBar_progress" style="width: 100%;" data-progress='100%'></div>
|
||||
</div>
|
||||
<script type='text/javascript'>parent.location = parent.location + '&check=1';</script><noscript><a href='index.php' target='_parent'>Click here to continue</a></noscript>
|
||||
HTML;
|
||||
@@ -461,7 +461,8 @@ HTML;
|
||||
else
|
||||
{
|
||||
$newI = $i + $extractor::NUMBER_PER_GO;
|
||||
$percentComplete = round( 100 / $extractor->numberOfFiles() * $newI );
|
||||
$percentComplete = round( 100 / $extractor->numberOfFiles() * $newI, 2 );
|
||||
$percentComplete = ( $percentComplete > 100 ) ? 100 : $percentComplete;
|
||||
|
||||
$properties = array(
|
||||
'file' => $_GET['file'],
|
||||
@@ -473,7 +474,7 @@ HTML;
|
||||
$url = "extract.php?" . http_build_query( $properties, '', '&' );
|
||||
echo <<<HTML
|
||||
<div class="ipsProgressBar ipsProgressBar_animated">
|
||||
<div class="ipsProgressBar_progress" style="width: {$percentComplete}%;"></div>
|
||||
<div class="ipsProgressBar_progress" style="width: {$percentComplete}%;" data-progress='{$percentComplete}%'></div>
|
||||
</div>
|
||||
<noscript><a href='{$url}' target='_parent'>Click here to continue</a></noscript>
|
||||
<script type='text/javascript'>window.onload = function(){setTimeout(function(){window.location = '{$url}';}, 50);};</script>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<ips:template parameters="" />
|
||||
<div class="ipsPad">
|
||||
<p class="ipsType_normal">{lang="106000_deprecation"}</p>
|
||||
</div>
|
||||
@@ -50,8 +50,10 @@
|
||||
<br><br>
|
||||
<p class="ipsType_normal">{lang="hc_recommendations_info"}</p>
|
||||
<ul class="ipsPad ipsType_large ipsList_checks">
|
||||
{{foreach $requirements['advice'] as $key => $item}}
|
||||
<li class="{{if $key === 'php'}}ipsMessage ipsMessage_warning{{else}}advisory{{endif}}">{$item}</li>
|
||||
{{foreach $requirements['advice'] as $items}}
|
||||
{{foreach $items as $key => $item}}
|
||||
<li class="{{if $key === 'php'}}ipsMessage ipsMessage_warning{{else}}advisory{{endif}}">{$item}</li>
|
||||
{{endforeach}}
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
{{endif}}
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
<br />
|
||||
{{if $exception instanceof \IPS\Db\Exception}}
|
||||
{{$trace = $exception->getTrace();}}
|
||||
{{if $trace[3]['function'] == 'installDatabaseUpdates'}}
|
||||
{{if $trace[2]['function'] == 'installDatabaseUpdates'}}
|
||||
<small>
|
||||
{expression="\IPS\ROOT_PATH"}/applications/{$trace[4]['args'][0][1]}/setup/upg_{$trace[3]['args'][0]}/queries.json{{if isset($_SESSION['lastJsonIndex'])}} - query #{$_SESSION['lastJsonIndex']}{{endif}}<br>
|
||||
{expression="\IPS\ROOT_PATH"}/applications/{$trace[3]['args'][0][1]}/setup/upg_{$trace[2]['args'][0]}/queries.json{{if isset($_SESSION['lastJsonIndex'])}} - query #{$_SESSION['lastJsonIndex']}{{endif}}<br>
|
||||
<pre>{{if $exception->query}}{$exception->query}{{else}}{$trace[0]['args'][0]}{{endif}}</pre>
|
||||
</small>
|
||||
{{else}}
|
||||
|
||||
+19
-2
@@ -58,8 +58,8 @@ $lang = array(
|
||||
'username' => "Display Name",
|
||||
'email_address' => "Email Address",
|
||||
'username_or_email' => "Username or Email Address",
|
||||
'login_err_no_account' => "The email address you entered does not belong to any account. Make sure that it is typed correctly.",
|
||||
'login_err_bad_password' => "The password you entered is incorrect. Please try again (make sure your caps lock is off).",
|
||||
'login_err_no_account' => "The {!#[1:display name or password][2:email address or password][3:display name, email address or password]} was incorrect. Please try again (make sure your caps lock is off).",
|
||||
'login_err_bad_password' => "The {!#[1:display name or password][2:email address or password][3:display name, email address or password]} was incorrect. Please try again (make sure your caps lock is off).",
|
||||
'login_err_locked_unlock' => "Your account has been locked. Try again in {# [1:minute][?:minutes]}.",
|
||||
'login_err_locked_nounlock' => "Your account has been locked. Try again later.",
|
||||
'login_err_no_cookies' => "Your browser does not accept cookies which are required in order to log in.",
|
||||
@@ -120,6 +120,8 @@ $lang = array(
|
||||
'requirements_file_system' => "File System",
|
||||
'requirements_file_writable' => "%s is writable",
|
||||
'requirements_mysql_timeout' => "Your MySQL %s system variable is currently set to an extremely low value (%s). The default MySQL value is 28800. It is recommended to increase this MySQL system variable to at least 20 in order to prevent potential problems with queries timing out.",
|
||||
'requirements_mysql_format_advice' => "You have one or more InnoDB tables that are using the `Compact` row format. This may limit the amount of data that can be stored within the table. We recommend changing it to 'Dynamic'. %s If you are not sure how to do this, you should contact your hosting provider or system administrator for assistance.",
|
||||
'requirements_mysql_ifpt_advice' => "Please make sure that `<a href='https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_file_per_table' target='_blank'>innodb_file_per_table</a>` is enabled.",
|
||||
'dir_not_provided' => "No directory provided. Please check file storage configurations.",
|
||||
'dir_does_not_exist' => "%s does not exist.",
|
||||
'dir_is_not_writable' => "%s cannot be written to. Please adjust the permissions on it or contact your hosting provider for assistance.",
|
||||
@@ -629,6 +631,7 @@ $lang = array(
|
||||
|
||||
|
||||
/* !Core - 4.5 - Notification Settings */
|
||||
'105000_admin_reg_customized' => "Reverting Customized Email Template",
|
||||
'105000_notifications' => "Notification Options",
|
||||
'notification_method_inline' => "Notification List",
|
||||
'notification_method_email' => "Email",
|
||||
@@ -663,5 +666,19 @@ $lang = array(
|
||||
'notifications__warning_mods_desc' => "These notifications will be sent whenever another moderator issues a warning.",
|
||||
'notifications__new_file_version' => "File Updates",
|
||||
'notifications__event_reminder' => "Event Reminders",
|
||||
|
||||
/* ! Core - 4.6 Achievements options */
|
||||
'106000_rule_option' => "Achievements",
|
||||
'106000_rule_option_desc' => "Please see our <a href='https://invisioncommunity.com/news/product-updates/drum-roll-please…-announcing-achievements-r1227/' target='_blank'>achievements announcement</a> for more information.",
|
||||
'106000_rule_option_new' => "Use new default ranks",
|
||||
'106000_rule_option_new_desc' => "Install the new ranks and use the default rules to generate points by posting, following and more.",
|
||||
'106000_rule_option_old' => "Keep my current ranks",
|
||||
'106000_rule_option_old_desc' => "Retain current ranks and continue increasing ranks just by posting",
|
||||
|
||||
|
||||
/* 4.6.0 Deprecations */
|
||||
'106000_deprecated' => "Removed Caching Methods",
|
||||
'106000_deprecation' => "The following Cache and Datastore methods have been removed in Invision Community 4.6: APC, Wincache, Memcached and XCache.<br>You do not need to do anything as the caching method will be reverted to 'None' after this upgrade.",
|
||||
|
||||
|
||||
);
|
||||
@@ -4,5 +4,6 @@
|
||||
"app_directory": "blog",
|
||||
"app_protected": 0,
|
||||
"app_website": null,
|
||||
"app_update_check": null
|
||||
"app_update_check": null,
|
||||
"app_hide_tab": 0
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<?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.grid.js" javascript_type="controller" javascript_version="105100" javascript_position="1000150"><![CDATA[/**
|
||||
<file javascript_app="blog" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.grid.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -37,7 +37,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="blog" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.list.js" javascript_type="controller" javascript_version="105100" javascript_position="1000150">/**
|
||||
<file javascript_app="blog" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.list.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -66,7 +66,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="blog" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.manageCategories.js" javascript_type="controller" javascript_version="105100" javascript_position="1000100"><![CDATA[/**
|
||||
<file javascript_app="blog" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.manageCategories.js" javascript_type="controller" javascript_version="106107" javascript_position="1000100"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -135,6 +135,11 @@
|
||||
|
||||
Debug.log( "Sortable categories initialized" );
|
||||
});
|
||||
|
||||
if( !$('#form_tab_blog_entry_categories').length ) {
|
||||
$('button[type="submit"]').addClass('ipsHide');
|
||||
$('button[data-action="addNew"]').removeClass('ipsHide');
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -191,8 +196,10 @@
|
||||
} ) );
|
||||
|
||||
$('[data-action="addNew"]').attr('disabled', true );
|
||||
$('[data-action="delete"][data-category-id="new"],[data-action="edit"][data-category-id="new"]').hide();
|
||||
$('[data-action="delete"][data-category-id="new"],[data-action="edit"][data-category-id="new"],[data-role="sortHandle"]').hide();
|
||||
$('body').find('[data-action="edit"][data-category-id="new"]').click();
|
||||
|
||||
this.scope.find('[data-role="tableRows"]').sortable( "disable" );
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -201,7 +208,7 @@
|
||||
*/
|
||||
renderList: function() {
|
||||
var _this = this;
|
||||
|
||||
|
||||
ips.getAjax()( '?app=blog&module=blogs&controller=view&do=categoriesJson&id=' + this.scope.attr('data-blog-id') )
|
||||
.done( function (response) {
|
||||
if( response.categories.length ){
|
||||
@@ -228,7 +235,6 @@
|
||||
* @returns {void}
|
||||
*/
|
||||
tabChange: function (e) {
|
||||
|
||||
if ( ! $('#form_tab_blog_entry_categories').hasClass('ipsTabs_activeItem') ) { // This looks back to front but the tab status is changed after this has fired
|
||||
$('button[type="submit"]').addClass('ipsHide');
|
||||
$('button[data-action="addNew"]').removeClass('ipsHide');
|
||||
@@ -291,6 +297,7 @@
|
||||
} )
|
||||
.done( function (response) {
|
||||
_this.renderList();
|
||||
_this.scope.find('[data-role="tableRows"]').sortable( "enable" );
|
||||
} )
|
||||
.fail( function (response) {
|
||||
a.html( langBit ).removeClass('ipsField_loading');
|
||||
@@ -336,7 +343,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="blog" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.view.js" javascript_type="template" javascript_version="105100" javascript_position="1000050"><![CDATA[/* CLASS LIST TEMPLATES */
|
||||
<file javascript_app="blog" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.view.js" javascript_type="template" javascript_version="106107" javascript_position="1000050"><![CDATA[/* CLASS LIST TEMPLATES */
|
||||
ips.templates.set('blog.view.addButton', "\
|
||||
<button type=\"button\" class=\"ipsButton ipsButton_primary ipsHide\" data-action=\"addNew\">{{#lang}}manage_cats_new_row{{/lang}}</button>\
|
||||
");
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language>
|
||||
<app key="blog" version="105100">
|
||||
<app key="blog" version="106107">
|
||||
<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>
|
||||
<word key="__indefart_blog_entry" js="0">a blog entry</word>
|
||||
<word key="__defart_blog_entry_comment" js="0">comment on a blog entry</word>
|
||||
<word key="__defart_blog_entry_comment_plural" js="0">{!#[1:comment][?:comments]} on a blog entry</word>
|
||||
<word key="__defart_blog_entry" js="0">blog entry</word>
|
||||
<word key="__defart_blog_entry_plural" js="0">{!#[1:blog entry][?:blog entries]}</word>
|
||||
<word key="blog_entry_container" js="0">blog</word>
|
||||
<word key="blog_entry_pl_lc" js="0">blog entries</word>
|
||||
<word key="module__blog_blogs" js="0">Blogs</word>
|
||||
@@ -45,6 +47,7 @@
|
||||
<word key="blog_word_custom" js="0">Blog Name</word>
|
||||
<word key="blog_blog_member_id" js="0">Blog Author</word>
|
||||
<word key="blogs_sg" js="0">Blog</word>
|
||||
<word key="blogs_sg_lc" js="0">blog</word>
|
||||
<word key="create_blog" js="0">Create a blog</word>
|
||||
<word key="create_new_blog" js="0">Create a new blog</word>
|
||||
<word key="add_entry_to" js="0">Add entry to a blog</word>
|
||||
@@ -307,6 +310,7 @@
|
||||
<word key="blog_categories_all" js="0">Show All</word>
|
||||
<word key="no_entries_in_cat" js="0">There are no entries in this category</word>
|
||||
<word key="__api_blog_entrycategories" js="0">Entry Categories</word>
|
||||
<word key="blog_subcategories" js="0">Subcategories</word>
|
||||
<word key="blog_category_confirm_delete" js="1">Are you sure you want to delete this category?</word>
|
||||
<word key="blog_category_confirm_delete_desc" js="1">Existing entries in this category will be updated so that they are no longer in a category.</word>
|
||||
<word key="manage_cats_new_row" js="1">Add New Category</word>
|
||||
|
||||
@@ -393,6 +393,30 @@
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"blog_allow_anonymous": {
|
||||
"name": "blog_allow_anonymous",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
},
|
||||
"blog_last_poster_anon": {
|
||||
"name": "blog_last_poster_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
@@ -953,6 +977,30 @@
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"entry_is_anon": {
|
||||
"name": "entry_is_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
},
|
||||
"entry_last_poster_anon": {
|
||||
"name": "entry_last_poster_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
@@ -1218,6 +1266,18 @@
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"comment_is_anon": {
|
||||
"name": "comment_is_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
<template template_group="browse" template_name="categories" template_data="$currentCategory=NULL" template_location="front" template_app="blog"><![CDATA[ {{$categories = $currentCategory ? $currentCategory->children( 'view', NULL, FALSE ) : \IPS\blog\Category::roots();}}
|
||||
{{if !\IPS\blog\Category::theOnlyNode( array(), TRUE, FALSE ) and \count( $categories )}}
|
||||
<div id='elBlogCategoriesBlock' class='ipsWidget ipsWidget_vertical ipsBox'>
|
||||
<h3 class='ipsType_sectionTitle ipsType_reset'>{{if $currentCategory}}{lang="subcategories"}{{else}}{lang="categories"}{{endif}}</h3>
|
||||
<h3 class='ipsType_sectionTitle ipsType_reset'>{{if $currentCategory}}{lang="blog_subcategories"}{{else}}{lang="categories"}{{endif}}</h3>
|
||||
<div class='ipsPad_half'>
|
||||
<div class='ipsSideMenu'>
|
||||
<div class='ipsSideMenu ipsCategoriesMenu'>
|
||||
<ul class='ipsSideMenu_list'>
|
||||
{{foreach $categories as $category}}
|
||||
<li>
|
||||
@@ -63,7 +63,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="browse" template_name="index" template_data="$table, $featured, $blogs=array(), $viewMode, $category=NULL" template_location="front" template_app="blog"><![CDATA[<div class="ipsPageHeader ipsClearfix ipsMargin_bottom ipsHeaderButtons ipsFlex ipsFlex-ai:center ipsFlex-jc:between">
|
||||
<template template_group="browse" template_name="index" template_data="$table, $featured, $blogs=array(), $viewMode=NULL, $category=NULL" template_location="front" template_app="blog"><![CDATA[<div class="ipsPageHeader ipsClearfix ipsMargin_bottom ipsHeaderButtons ipsFlex ipsFlex-ai:center ipsFlex-jc:between">
|
||||
<h1 class="ipsType_pageTitle ipsFlex-flex:11 ipsType_break">{lang="blogs"}</h1>
|
||||
{{if \count( $blogs ) || \IPS\blog\Blog::canCreate() || \IPS\Settings::i()->blog_allow_grid}}
|
||||
<ul class='ipsToolList ipsToolList_horizontal ipsClearfix ipsPos_right '>
|
||||
@@ -84,7 +84,7 @@
|
||||
<div class='ipsBox'>
|
||||
{$table|raw}
|
||||
</div>]]></template>
|
||||
<template template_group="browse" template_name="indexButtons" template_data="$blogs=array(), $viewMode, $forMobile=FALSE, $category=NULL" template_location="front" template_app="blog"><![CDATA[{{if \count( $blogs ) || \IPS\blog\Blog::canCreate() || \IPS\Settings::i()->blog_allow_grid}}
|
||||
<template template_group="browse" template_name="indexButtons" template_data="$blogs=array(), $viewMode=NULL, $forMobile=FALSE, $category=NULL" template_location="front" template_app="blog"><![CDATA[{{if \count( $blogs ) || \IPS\blog\Blog::canCreate() || \IPS\Settings::i()->blog_allow_grid}}
|
||||
{{if \count( $blogs ) AND \IPS\blog\Blog::canOnAny( 'add' )}}
|
||||
<li class='ipsToolList_primaryAction {{if !$forMobile}}ipsResponsive_hidePhone{{endif}}'>
|
||||
{{if \count( $blogs ) > 1}}
|
||||
@@ -112,7 +112,7 @@
|
||||
{{endif}}
|
||||
</li>
|
||||
{{endif}}
|
||||
{{if \IPS\Settings::i()->blog_allow_grid AND !$forMobile}}
|
||||
{{if \IPS\Settings::i()->blog_allow_grid AND !$forMobile AND member.member_id}}
|
||||
<li class='ipsType_center ipsMargin_bottom:none'>
|
||||
<ul class='ipsButton_split'>
|
||||
<li class='ipsType_center'>
|
||||
@@ -259,7 +259,7 @@
|
||||
|
||||
<span class='ipsType_break ipsContained'>
|
||||
{{if $entry->unread()}}
|
||||
<a href='{$entry->url('getNewComment')}'><span class='ipsItemStatus' data-ipsTooltip title="{lang="cms_unread_record"}"><i class="fa fa-circle"></i></span></a>
|
||||
<a href='{$entry->url('getNewComment')}'><span class='ipsItemStatus' data-ipsTooltip title="{lang="unread_blog"}"><i class="fa fa-circle"></i></span></a>
|
||||
{{endif}}
|
||||
<a href="{$entry->url()}" title="{lang="read_more_about" sprintf="$entry->name"}" data-role="newsTitle">{wordbreak="$entry->name"}</a>
|
||||
</span>
|
||||
@@ -647,7 +647,7 @@
|
||||
</li>
|
||||
{{endforeach}}]]></template>
|
||||
<template template_group="livesearch" template_name="blog" template_data="$blog" template_location="admin" template_app="blog"><![CDATA[<li class='ipsPad_half ipsClearfix' data-role='result'>
|
||||
<a href='{url="app=blog&module=blogs&controller=blogs&do=form&id="}{$blog->id}' class='ipsPos_left'>{$blog->_title}</a>
|
||||
<a href='{url="app=blog&module=blogs&controller=blogs&subnode=1&do=form&id="}{$blog->id}' class='ipsPos_left'>{$blog->_title}</a>
|
||||
</li>
|
||||
|
||||
]]></template>
|
||||
@@ -843,11 +843,9 @@
|
||||
{{endif}}
|
||||
</ul>
|
||||
|
||||
{{if $table->pages > 1}}
|
||||
<div data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
{{endif}}
|
||||
<div data-role="tablePagination" {{if $table->pages <= 1}}class='ipsHide'{{endif}}>
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}
|
||||
|
||||
@@ -931,13 +929,9 @@
|
||||
{template="$table->rowsTemplate[1]" params="$table, $headers, $rows" object="$table->rowsTemplate[0]"}
|
||||
</div>
|
||||
{{endif}}
|
||||
{{if $table->pages > 1}}
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear">
|
||||
<div data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear {{if $table->pages <= 1}}ipsHide{{endif}}" data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="view" template_name="blogViewLarge" template_data="$entry, $table, $first = FALSE" template_location="front" template_app="blog"><![CDATA[
|
||||
<article class='cBlogView_entry ipsContained ipsType_break {{if $entry->hidden()}}ipsModerated{{endif}}' data-controller="core.front.core.lightboxedImages">
|
||||
@@ -1074,14 +1068,14 @@
|
||||
<li class='ipsType_light'>{lang="num_views_with_number" pluralize="$entry->views"}</li>
|
||||
</ul>
|
||||
</article>]]></template>
|
||||
<template template_group="view" template_name="categories" template_data="$currentCategory=NULL, $categories=array(), $blog" template_location="front" template_app="blog"><![CDATA[ {{if \count( $categories )}}
|
||||
<template template_group="view" template_name="categories" template_data="$currentCategory=NULL, $categories=array(), $blog=NULL" template_location="front" template_app="blog"><![CDATA[ {{if \count( $categories )}}
|
||||
<div id='elBlogCategoriesBlock' class='ipsWidget ipsWidget_vertical ipsBox'>
|
||||
{{if $blog->canEdit()}}
|
||||
<span class='ipsPos_right ipsPad_half ipsType_light'><a href="{$blog->url()->setQueryString( array( 'do' => "manageCategories" ) )}" data-ipsDialog data-ipsDialog-size='narrow'><i class='fa fa-pencil'></i></a></span>
|
||||
{{endif}}
|
||||
<h3 class='ipsType_sectionTitle ipsType_reset'>{lang="categories"}</h3>
|
||||
<div class='ipsPad_half'>
|
||||
<div class='ipsSideMenu'>
|
||||
<div class='ipsSideMenu ipsCategoriesMenu'>
|
||||
<ul class='ipsSideMenu_list'>
|
||||
{{foreach $categories as $category}}
|
||||
<li{{if $currentCategory and $currentCategory->id == $category->id}} class="ipsAreaBackground_light"{{endif}}>
|
||||
@@ -1308,13 +1302,13 @@
|
||||
{$entry->editLine()|raw}
|
||||
{{endif}}
|
||||
</section>
|
||||
{{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 )}}
|
||||
{{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 ) OR ( ! $entry->container()->social_group and \IPS\Member::loggedIn()->group['g_can_report'] )}}
|
||||
<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'] )}}
|
||||
{{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') ) OR ( ! $entry->container()->social_group and \IPS\Member::loggedIn()->group['g_can_report'] )}}
|
||||
<ul class='ipsComment_controls ipsClearfix 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>
|
||||
@@ -1322,7 +1316,7 @@
|
||||
<ul id='elentryActions_menu' class='ipsMenu ipsMenu_auto ipsHide'>
|
||||
{{if ! $entry->container()->social_group and $entry->canReportOrRevoke() === TRUE }}
|
||||
<li class='ipsMenu_item'>
|
||||
<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>
|
||||
<a href='{$entry->url('report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_entry"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}"{{endif}} title="{lang="report_entry"}">{lang="report_entry"}</a>
|
||||
</li>
|
||||
<li class='ipsMenu_sep'><hr></li>
|
||||
{{endif}}
|
||||
@@ -1350,7 +1344,7 @@
|
||||
<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>
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->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>
|
||||
@@ -1362,24 +1356,24 @@
|
||||
<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>
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->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>
|
||||
<li class='ipsMenu_item'><a href='{$entry->url()->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>
|
||||
<li class="ipsMenu_item"><a href='{$entry->url()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
|
||||
{{endif}}
|
||||
{{endif}}
|
||||
</ul>
|
||||
</li>
|
||||
{{elseif ( ! $entry->container()->social_group and $entry->canReportOrRevoke() === TRUE )}}
|
||||
<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>
|
||||
<a href='{$entry->url('report')}' class='ipsButton ipsButton_link ipsButton_verySmall ipsButton_fullWidth' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_entry"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}"{{endif}} title="{lang="report_entry"}">{lang="report_entry"}</a>
|
||||
</li>
|
||||
<li class='ipsMenu_sep'><hr></li>
|
||||
{{endif}}
|
||||
@@ -1540,19 +1534,23 @@
|
||||
</li>
|
||||
{{endif}}
|
||||
|
||||
{{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') ) )}}
|
||||
{{if !$blog->club_id and ( $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') ) )}}
|
||||
<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'>
|
||||
|
||||
{{if $blog->canEdit() AND !$blog->groupblog_ids}}
|
||||
<li class='ipsMenu_item'>
|
||||
<a href='{$blog->url()->setQueryString( array( 'do' => 'editBlog', 'csrfKey' => \IPS\Session::i()->csrfKey ) )}' title="{lang="edit_blog"}" data-ipsDialog data-ipsDialog-title="{lang="edit_blog"}">{lang="edit_blog"}</a>
|
||||
<a href='{$blog->url()->setQueryString( array( 'do' => 'editBlog' ) )}' title="{lang="edit_blog"}" data-ipsDialog data-ipsDialog-title="{lang="edit_blog"}">{lang="edit_blog"}</a>
|
||||
</li>
|
||||
{{elseif $blog->canEdit() AND $blog->groupblog_ids}}
|
||||
<li class='ipsMenu_item'>
|
||||
<a href='{$blog->url()->setQueryString( array( 'do' => 'manageCategories' ) )}' title="{lang="blog_manage_entry_categories"}" data-ipsDialog data-ipsDialog-title="{lang="blog_manage_entry_categories"}">{lang="blog_manage_entry_categories"}</a>
|
||||
</li>
|
||||
{{endif}}
|
||||
{{if $blog->canEdit() AND \IPS\Settings::i()->blog_allow_rssimport }}
|
||||
<li class='ipsMenu_item'>
|
||||
<a href='{$blog->url()->setQueryString( array( 'do' => 'rssImport', 'csrfKey' => \IPS\Session::i()->csrfKey ) )}' title="{lang="blog_rss_import"}" data-ipsDialog data-ipsDialog-title="{lang="blog_rss_import"}">{lang="blog_rss_import"}</a>
|
||||
<a href='{$blog->url()->setQueryString( array( 'do' => 'rssImport' ) )}' title="{lang="blog_rss_import"}" data-ipsDialog data-ipsDialog-title="{lang="blog_rss_import"}">{lang="blog_rss_import"}</a>
|
||||
</li>
|
||||
{{endif}}
|
||||
|
||||
@@ -1666,7 +1664,7 @@
|
||||
<div class='ipsItemControls'>
|
||||
<ul class='ipsComment_controls ipsClearfix ipsItemControls_left' data-role="commentControls">
|
||||
{{if $comment->canReportOrRevoke() === TRUE}}
|
||||
<li><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></li>
|
||||
<li><a href='{$comment->url('report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}"{{endif}} data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a></li>
|
||||
{{endif}}
|
||||
</ul>
|
||||
{{if $comment->hidden() !== 1 && \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_enabled}}
|
||||
|
||||
@@ -355,6 +355,7 @@
|
||||
"104067": "4.4.10",
|
||||
"104068": "4.4.10",
|
||||
"104069": "4.4.10",
|
||||
"104070": "4.4.11",
|
||||
"105013": "4.5.0 Beta 1",
|
||||
"105014": "4.5.0 Beta 1",
|
||||
"105015": "4.5.0 Beta 2",
|
||||
@@ -375,5 +376,42 @@
|
||||
"105030": "4.5.0 Beta 11",
|
||||
"105031": "4.5.0 Beta 11",
|
||||
"105032": "4.5.0 Beta 12",
|
||||
"105100": "4.5.0"
|
||||
"105100": "4.5.0",
|
||||
"105101": "4.5.0",
|
||||
"105102": "4.5.1 Beta 1",
|
||||
"105103": "4.5.1 Beta 1",
|
||||
"105104": "4.5.1 Beta 2",
|
||||
"105105": "4.5.1 Beta 3",
|
||||
"105106": "4.5.1",
|
||||
"105107": "4.5.2",
|
||||
"105108": "4.5.2",
|
||||
"105109": "4.5.2",
|
||||
"105110": "4.5.2",
|
||||
"105111": "4.5.2",
|
||||
"105112": "4.5.3",
|
||||
"105113": "4.5.3",
|
||||
"105114": "4.5.3",
|
||||
"105115": "4.5.3",
|
||||
"105116": "4.5.4",
|
||||
"105117": "4.5.4",
|
||||
"105118": "4.5.4",
|
||||
"105119": "4.5.4",
|
||||
"105120": "4.5.4",
|
||||
"105121": "4.5.4",
|
||||
"105122": "4.5.4",
|
||||
"105123": "4.5.4",
|
||||
"105124": "4.5.4.1",
|
||||
"105125": "4.5.4.2",
|
||||
"105126": "4.5.4.2",
|
||||
"105127": "4.5.4.2",
|
||||
"105128": "4.5.4.2",
|
||||
"105129": "4.5.4.2",
|
||||
"105130": "4.5.4.2",
|
||||
"106100": "4.6.0 Beta 1",
|
||||
"106101": "4.6.0 Beta 1.1",
|
||||
"106103": "4.6.0 Beta 2",
|
||||
"106104": "4.6.0 Beta 3",
|
||||
"106105": "4.6.0 Beta 3.1",
|
||||
"106106": "4.6.0 Beta 4",
|
||||
"106107": "4.6.0"
|
||||
}
|
||||
@@ -75,12 +75,15 @@ class _Blog
|
||||
{
|
||||
foreach( \IPS\blog\Blog::loadByOwner( $member ) as $blog )
|
||||
{
|
||||
$blog->disabled = TRUE;
|
||||
$blog->save();
|
||||
|
||||
if( \in_array( 'delete', $actions ) )
|
||||
if( !$blog->groupblog_ids )
|
||||
{
|
||||
\IPS\Task::queue( 'core', 'DeleteOrMoveContent', array( 'class' => 'IPS\blog\Blog', 'id' => $blog->id, 'deleteWhenDone' => TRUE ), 3 );
|
||||
$blog->disabled = TRUE;
|
||||
$blog->save();
|
||||
|
||||
if( \in_array( 'delete', $actions ) )
|
||||
{
|
||||
\IPS\Task::queue( 'core', 'DeleteOrMoveContent', array( 'class' => 'IPS\blog\Blog', 'id' => $blog->id, 'deleteWhenDone' => TRUE ), 3 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,8 @@ class _browse extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
\IPS\Request::i()->setCookie( 'blog_view', \IPS\Request::i()->view, ( new \IPS\DateTime )->add( new \DateInterval( 'P1Y' ) ) );
|
||||
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=blog', 'front', 'blogs' ) );
|
||||
}
|
||||
|
||||
/* Grid view */
|
||||
|
||||
@@ -159,7 +159,7 @@ class _entry extends \IPS\Content\Controller
|
||||
'@type' => 'Person',
|
||||
'name' => \IPS\Member::load( $this->entry->mapped('author') )->name,
|
||||
'url' => (string) \IPS\Member::load( $this->entry->mapped('author') )->url(),
|
||||
'image' => \IPS\Member::load( $this->entry->mapped('author') )->get_photo()
|
||||
'image' => \IPS\Member::load( $this->entry->mapped('author') )->get_photo( TRUE, TRUE )
|
||||
),
|
||||
'publisher' => array(
|
||||
'@id' => \IPS\Settings::i()->base_url . '#organization',
|
||||
@@ -167,7 +167,7 @@ class _entry extends \IPS\Content\Controller
|
||||
'@type' => 'Person',
|
||||
'name' => \IPS\Member::load( $this->entry->mapped('author') )->name,
|
||||
'url' => (string) \IPS\Member::load( $this->entry->mapped('author') )->url(),
|
||||
'image' => \IPS\Member::load( $this->entry->mapped('author') )->get_photo()
|
||||
'image' => \IPS\Member::load( $this->entry->mapped('author') )->get_photo( TRUE, TRUE )
|
||||
)
|
||||
),
|
||||
'interactionStatistic' => array(
|
||||
@@ -190,15 +190,6 @@ class _entry extends \IPS\Content\Controller
|
||||
)
|
||||
);
|
||||
|
||||
if( $this->entry->averageRating() )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['blog']['blogPost']['aggregateRating'] = array(
|
||||
'@type' => 'AggregateRating',
|
||||
'ratingValue' => $this->entry->averageRating(),
|
||||
'ratingCount' => $this->entry->numberOfRatings(),
|
||||
);
|
||||
}
|
||||
|
||||
if( $this->entry->container()->coverPhoto()->file )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['blog']['image'] = (string) $this->entry->container()->coverPhoto()->file->url;
|
||||
@@ -210,7 +201,7 @@ class _entry extends \IPS\Content\Controller
|
||||
'@type' => 'Person',
|
||||
'name' => \IPS\Member::load( $this->entry->container()->member_id )->name,
|
||||
'url' => (string) \IPS\Member::load( $this->entry->container()->member_id )->url(),
|
||||
'image' => \IPS\Member::load( $this->entry->container()->member_id )->get_photo()
|
||||
'image' => \IPS\Member::load( $this->entry->container()->member_id )->get_photo( TRUE, TRUE )
|
||||
);
|
||||
}
|
||||
|
||||
@@ -264,7 +255,7 @@ class _entry extends \IPS\Content\Controller
|
||||
|
||||
/* Breadcrumb */
|
||||
\IPS\Output::i()->breadcrumb = array();
|
||||
\IPS\Output::i()->breadcrumb['module'] = array( \IPS\Http\Url::internal( 'app=blog', 'front' ), \IPS\Member::loggedIn()->language()->addToStack( '__app_blog' ) );
|
||||
\IPS\Output::i()->breadcrumb['module'] = array( \IPS\Http\Url::internal( 'app=blog', 'front', 'blogs' ), \IPS\Member::loggedIn()->language()->addToStack( '__app_blog' ) );
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
@@ -64,6 +64,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
$this->blog->clubCheckRules();
|
||||
|
||||
/* Build table */
|
||||
$tableUrl = $this->blog->url();
|
||||
$where = array();
|
||||
if ( !\in_array( $this->blog->id, array_keys( \IPS\blog\Blog::loadByOwner( \IPS\Member::loggedIn() ) ) ) AND !\IPS\blog\Entry::canViewHiddenItems( \IPS\Member::loggedIn(), $this->blog ) )
|
||||
{
|
||||
@@ -77,6 +78,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
try
|
||||
{
|
||||
$category = \IPS\blog\Entry\Category::load( \IPS\Request::i()->cat );
|
||||
$tableUrl = $tableUrl->setQueryString( [ 'cat' => $category->id ] );
|
||||
}
|
||||
catch( \OutOfRangeException $e )
|
||||
{
|
||||
@@ -88,7 +90,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
$where[] = array( "entry_category_id=?", $category->id );
|
||||
}
|
||||
|
||||
$table = new \IPS\Helpers\Table\Content( 'IPS\blog\Entry', $this->blog->url(), $where, $this->blog );
|
||||
$table = new \IPS\Helpers\Table\Content( 'IPS\blog\Entry', $tableUrl, $where, $this->blog );
|
||||
|
||||
$table->tableTemplate = array( \IPS\Theme::i()->getTemplate( 'view' ), 'blogTable' );
|
||||
if ( \IPS\Settings::i()->blog_allow_grid )
|
||||
@@ -175,7 +177,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
'@type' => 'Person',
|
||||
'name' => \IPS\Member::load( $this->blog->member_id )->name,
|
||||
'url' => (string) \IPS\Member::load( $this->blog->member_id )->url(),
|
||||
'image' => \IPS\Member::load( $this->blog->member_id )->get_photo()
|
||||
'image' => \IPS\Member::load( $this->blog->member_id )->get_photo( TRUE, TRUE )
|
||||
);
|
||||
}
|
||||
|
||||
@@ -185,7 +187,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
}
|
||||
|
||||
\IPS\Output::i()->breadcrumb = array();
|
||||
\IPS\Output::i()->breadcrumb['module'] = array( \IPS\Http\Url::internal( 'app=blog', 'front' ), \IPS\Member::loggedIn()->language()->addToStack( '__app_blog' ) );
|
||||
\IPS\Output::i()->breadcrumb['module'] = array( \IPS\Http\Url::internal( 'app=blog', 'front', 'blogs' ), \IPS\Member::loggedIn()->language()->addToStack( '__app_blog' ) );
|
||||
|
||||
try
|
||||
{
|
||||
@@ -539,14 +541,25 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
*/
|
||||
protected function manageCategories()
|
||||
{
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_view.js', 'blog', 'front' ) );
|
||||
|
||||
if( !$this->blog->canEdit() )
|
||||
{
|
||||
\IPS\Output::i()->error( 'no_module_permission', '2B201/A', 403, '' );
|
||||
}
|
||||
|
||||
$form = new \IPS\Helpers\Form;
|
||||
$form->addHtml( \IPS\Theme::i()->getTemplate( 'view', 'blog', 'front' )->manageCategories( $this->blog ) );
|
||||
$form->hiddenValues['submitted'] = 1;
|
||||
|
||||
if( $values = $form->values() )
|
||||
{
|
||||
\IPS\Output::i()->redirect( $this->blog->url() );
|
||||
}
|
||||
|
||||
/* Display */
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('blog_manage_entry_categories');
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'view', 'blog', 'front' )->manageCategories( \IPS\blog\Entry\Category::roots( NULL, NULL, array( 'entry_category_blog_id=?', $this->blog->id ) ), $this->blog );
|
||||
\IPS\Output::i()->output = $form->error ? $form : \IPS\Theme::i()->getTemplate( 'view', 'blog', 'front' )->rssImport( $form->customTemplate( array( \IPS\Theme::i()->getTemplate( 'forms', 'core' ), 'popupTemplate' ) ) );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
{
|
||||
"1": {
|
||||
"method": "dropTable",
|
||||
"params": [
|
||||
"blog_categories",
|
||||
true
|
||||
]
|
||||
},
|
||||
"2": {
|
||||
"method": "createTable",
|
||||
"params": [
|
||||
{
|
||||
@@ -97,7 +104,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"2": {
|
||||
"3": {
|
||||
"method": "createTable",
|
||||
"params": [
|
||||
{
|
||||
@@ -213,7 +220,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"4": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"blog_blogs",
|
||||
@@ -233,7 +240,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"4": {
|
||||
"5": {
|
||||
"method": "update",
|
||||
"params": [
|
||||
"blog_blogs",
|
||||
@@ -242,7 +249,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"5": {
|
||||
"6": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"blog_entries",
|
||||
@@ -262,7 +269,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"6": {
|
||||
"7": {
|
||||
"method": "addIndex",
|
||||
"params": [
|
||||
"blog_blogs",
|
||||
@@ -278,7 +285,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"7": {
|
||||
"8": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"blog_entries",
|
||||
@@ -298,7 +305,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"8": {
|
||||
"9": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"blog_entries",
|
||||
@@ -318,14 +325,14 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"9": {
|
||||
"10": {
|
||||
"method": "dropColumn",
|
||||
"params": [
|
||||
"blog_entries",
|
||||
"entry_edit_show"
|
||||
]
|
||||
},
|
||||
"10": {
|
||||
"11": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"blog_entries",
|
||||
@@ -345,7 +352,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"11": {
|
||||
"12": {
|
||||
"method": "delete",
|
||||
"params": [
|
||||
"core_sys_lang_words",
|
||||
@@ -355,7 +362,7 @@
|
||||
]
|
||||
]
|
||||
},
|
||||
"12": {
|
||||
"13": {
|
||||
"method": "changeColumn",
|
||||
"params": [
|
||||
"blog_comments",
|
||||
@@ -374,7 +381,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"13": {
|
||||
"14": {
|
||||
"method": "changeColumn",
|
||||
"params": [
|
||||
"blog_entries",
|
||||
|
||||
@@ -46,6 +46,12 @@ class _Upgrade
|
||||
*/
|
||||
public function step2()
|
||||
{
|
||||
/* Make sure we have the table first */
|
||||
if( !\IPS\Db::i()->checkForTable('blog_rss_import') )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Move over blog_rss_import to core_rss_import */
|
||||
foreach( \IPS\Db::i()->select( '*', 'blog_rss_import' ) as $rss )
|
||||
{
|
||||
@@ -69,7 +75,7 @@ class _Upgrade
|
||||
'rss_import_member' => $rss['rss_member'],
|
||||
'rss_import_time' => 0,
|
||||
'rss_import_last_import' => $rss['rss_last_import'],
|
||||
'rss_import_showlink' => $rss['rss_import_show_link'],
|
||||
'rss_import_showlink' => $rss['rss_import_show_link'] ?? '',
|
||||
'rss_import_topic_pre' => '',
|
||||
'rss_import_auto_follow' => 0,
|
||||
'rss_import_settings' => json_encode( array(
|
||||
@@ -103,7 +109,10 @@ class _Upgrade
|
||||
\IPS\Db::i()->delete( 'core_tasks', array( '`key`=?', 'blogrssimport' ) );
|
||||
|
||||
/* Delete old RSS Table */
|
||||
\IPS\Db::i()->dropTable( array( 'blog_rss_import', 'blog_rss_imported' ) );
|
||||
if( \IPS\Db::i()->checkForTable('blog_rss_import') )
|
||||
{
|
||||
\IPS\Db::i()->dropTable( array( 'blog_rss_import', 'blog_rss_imported' ) );
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105101,
|
||||
"name": "4.5.0",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105102,
|
||||
"name": "4.5.1 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105103,
|
||||
"name": "4.5.1 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105104,
|
||||
"name": "4.5.1 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105105,
|
||||
"name": "4.5.1 Beta 3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105106,
|
||||
"name": "4.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105107,
|
||||
"name": "4.5.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105108,
|
||||
"name": "4.5.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105109,
|
||||
"name": "4.5.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105110,
|
||||
"name": "4.5.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105111,
|
||||
"name": "4.5.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105112,
|
||||
"name": "4.5.3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105113,
|
||||
"name": "4.5.3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105114,
|
||||
"name": "4.5.3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105115,
|
||||
"name": "4.5.3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105116,
|
||||
"name": "4.5.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"blog_subcategories"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/browse\/categories"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105117,
|
||||
"name": "4.5.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105118,
|
||||
"name": "4.5.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105119,
|
||||
"name": "4.5.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105120,
|
||||
"name": "4.5.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105121,
|
||||
"name": "4.5.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105122,
|
||||
"name": "4.5.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105123,
|
||||
"name": "4.5.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105124,
|
||||
"name": "4.5.4.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105125,
|
||||
"name": "4.5.4.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105126,
|
||||
"name": "4.5.4.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105127,
|
||||
"name": "4.5.4.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105128,
|
||||
"name": "4.5.4.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105129,
|
||||
"name": "4.5.4.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105130,
|
||||
"name": "4.5.4.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106100,
|
||||
"name": "4.6.0 Beta 1",
|
||||
"steps": {
|
||||
"queries": true,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": true,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"blog\/front\/controllers\/view\/ips.view.manageCategories.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"__defart_blog_entry_comment_plural",
|
||||
"__defart_blog_entry_plural"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"1": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"blog_blogs",
|
||||
{
|
||||
"name": "blog_allow_anonymous",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"2": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"blog_blogs",
|
||||
{
|
||||
"name": "blog_last_poster_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"blog_entries",
|
||||
{
|
||||
"name": "entry_is_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"4": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"blog_entries",
|
||||
{
|
||||
"name": "entry_last_poster_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"5": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"blog_comments",
|
||||
{
|
||||
"name": "comment_is_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/browse\/categories",
|
||||
"front\/browse\/index",
|
||||
"front\/browse\/indexButtons",
|
||||
"front\/browse\/indexGridEntry",
|
||||
"admin\/livesearch\/blog",
|
||||
"front\/view\/blogTable",
|
||||
"front\/view\/categories",
|
||||
"front\/view\/entry",
|
||||
"front\/view\/view",
|
||||
"front\/widgets\/blogCommentFeed"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106101,
|
||||
"name": "4.6.0 Beta 1.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106103,
|
||||
"name": "4.6.0 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": true,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"blogs_sg_lc"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106104,
|
||||
"name": "4.6.0 Beta 3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106105,
|
||||
"name": "4.6.0 Beta 3.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106106,
|
||||
"name": "4.6.0 Beta 4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106107,
|
||||
"name": "4.6.0",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -247,7 +247,6 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
default:
|
||||
return $club->canRead( $member );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ( $this->social_group )
|
||||
@@ -312,7 +311,7 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
{
|
||||
if ( $club->type == $club::TYPE_PUBLIC or $club->type == $club::TYPE_READONLY or $club->type == $club::TYPE_OPEN)
|
||||
{
|
||||
return 'ca';
|
||||
return '*';
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -429,6 +428,10 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
'subnodes' => FALSE,
|
||||
), NULL, NULL, NULL, 'blog_category_id' ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
$form->hiddenValues['blog_category_id'] = \IPS\Request::i()->parent;
|
||||
}
|
||||
|
||||
$groups = array();
|
||||
foreach ( \IPS\Member\Group::groups() as $k => $v )
|
||||
@@ -461,7 +464,7 @@ 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\CheckboxSet( '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 ) ), function( $value ) {
|
||||
if ( \IPS\Request::i()->blog_type === 'group' )
|
||||
{
|
||||
@@ -542,6 +545,8 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'blog_enable_rss', $this->id ? $this->settings['allowrss'] : TRUE ) );
|
||||
}
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'allow_anonymous_comments', $this->id ? $this->allow_anonymous : FALSE, FALSE, array() ) );
|
||||
|
||||
/* Categories */
|
||||
if ( $public and $this->id )
|
||||
{
|
||||
@@ -558,8 +563,7 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
*/
|
||||
public function formatFormValues( $values )
|
||||
{
|
||||
|
||||
if ( isset( $values['blog_category_id'] ) and $values[ 'blog_category_id' ] )
|
||||
if ( isset( $values['blog_category_id'] ) and \is_object( $values[ 'blog_category_id' ] ) )
|
||||
{
|
||||
$values[ 'blog_category_id' ] = \intval( $values[ 'blog_category_id' ]->id );
|
||||
}
|
||||
@@ -589,6 +593,12 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
unset( $values['blog_type'] );
|
||||
}
|
||||
|
||||
if( isset( $values['allow_anonymous_comments'] ) )
|
||||
{
|
||||
$values['allow_anonymous'] = ( $values['allow_anonymous_comments'] ? 2 : 0 );
|
||||
unset( $values['allow_anonymous_comments'] );
|
||||
}
|
||||
|
||||
$this->massUpdateIndex = FALSE;
|
||||
if ( isset( $values['blog_privacy'] ) and $values['blog_privacy'] === 'private' )
|
||||
{
|
||||
@@ -622,7 +632,7 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
|
||||
if( $values['blog_member_id'] )
|
||||
{
|
||||
\IPS\File::claimAttachments( 'blogs-new-blog', $this->id, NULL, 'description', TRUE );
|
||||
\IPS\File::claimAttachments( 'blogs-new-blog', $this->id, NULL, 'description' );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -766,6 +776,12 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
{
|
||||
\IPS\Content\Search\Index::i()->massUpdate( 'IPS\blog\Entry', $this->id, NULL, $this->searchIndexPermissions() );
|
||||
}
|
||||
|
||||
/* If this was a new blog, fire the webhook */
|
||||
if ( $this->newBlog )
|
||||
{
|
||||
\IPS\Api\Webhook::fire( 'blogBlog_create', $this, $this->webhookFilters() );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1096,6 +1112,11 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
{
|
||||
return array( \IPS\Theme::i()->getTemplate( 'browse', 'blog' ), 'rows' );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Remember if this is a new blog so we can fire the webhook if so
|
||||
*/
|
||||
protected $newBlog = NULL;
|
||||
|
||||
/**
|
||||
* Save Changed Columns
|
||||
@@ -1104,14 +1125,12 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
$new = $this->_new;
|
||||
if( $this->newBlog === NULL )
|
||||
{
|
||||
$this->newBlog = $this->_new;
|
||||
}
|
||||
|
||||
parent::save();
|
||||
|
||||
if ( $new )
|
||||
{
|
||||
\IPS\Api\Webhook::fire( 'blogBlog_create', $this, $this->webhookFilters() );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1150,6 +1169,9 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
/* Delete Follows */
|
||||
\IPS\Db::i()->delete( 'core_follow', array( "follow_app=? AND follow_area=? AND follow_rel_id=?", 'blog', 'blog', $this->_id ) );
|
||||
|
||||
/* Delete Entry categories */
|
||||
\IPS\Db::i()->delete( 'blog_entry_categories', array( "entry_category_blog_id = ?", $this->_id ) );
|
||||
|
||||
return parent::delete();
|
||||
}
|
||||
|
||||
@@ -1285,6 +1307,9 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
*/
|
||||
public function clubForm( \IPS\Helpers\Form $form )
|
||||
{
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_view.js', 'blog', 'front' ) );
|
||||
|
||||
$form->addTab( 'blog_settings' );
|
||||
$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' ) ) );
|
||||
@@ -1292,6 +1317,14 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
{
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'blog_enable_rss', $this->id ? $this->settings['allowrss'] : TRUE ) );
|
||||
}
|
||||
|
||||
/* Categories */
|
||||
if ( $this->id )
|
||||
{
|
||||
$form->addTab( 'blog_entry_categories' );
|
||||
$form->addHtml( \IPS\Theme::i()->getTemplate( 'view', 'blog', 'front' )->manageCategories( $this ) );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1392,9 +1425,10 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
|
||||
* Get last comment time
|
||||
*
|
||||
* @note This should return the last comment time for this node only, not for children nodes
|
||||
* @param \IPS\Member|NULL $member MemberObject
|
||||
* @return \IPS\DateTime|NULL
|
||||
*/
|
||||
public function getLastCommentTime()
|
||||
public function getLastCommentTime( \IPS\Member $member = NULL )
|
||||
{
|
||||
return $this->last_edate ? \IPS\DateTime::ts( $this->last_edate ) : NULL;
|
||||
}
|
||||
|
||||
@@ -252,4 +252,75 @@ class _Category extends \IPS\Node\Model
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the content item count
|
||||
*
|
||||
* @param null|array $data Data array for mass move/delete
|
||||
* @return null|int
|
||||
*/
|
||||
public function getContentItemCount( $data=NULL )
|
||||
{
|
||||
if ( !isset( static::$contentItemClass ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$contentItemClass = static::$contentItemClass;
|
||||
|
||||
$idColumn = static::$databaseColumnId;
|
||||
|
||||
$where = array( array( 'blog_blogs.blog_category_id=?', $this->$idColumn ) );
|
||||
|
||||
if( $data )
|
||||
{
|
||||
$where = array_merge_recursive( $where, $this->massMoveorDeleteWhere( $data ) );
|
||||
}
|
||||
|
||||
$select = \IPS\Db::i()->select( 'COUNT(*)', $contentItemClass::$databaseTable, $where )->join( 'blog_blogs', "blog_entries.entry_blog_id=blog_blogs.blog_id" );
|
||||
|
||||
return (int) $select->first();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve content items (if applicable) for a node.
|
||||
*
|
||||
* @param int $limit The limit
|
||||
* @param int $offset The offset
|
||||
* @param array $additional Where Additional where clauses
|
||||
* @param int $countOnly If TRUE, will get the number of results
|
||||
* @return \IPS\Patterns\ActiveRecordIterator|int
|
||||
* @throws \BadMethodCallException
|
||||
*/
|
||||
public function getContentItems( $limit, $offset, $additionalWhere = array(), $countOnly=FALSE )
|
||||
{
|
||||
if ( !isset( static::$contentItemClass ) )
|
||||
{
|
||||
throw new \BadMethodCallException;
|
||||
}
|
||||
|
||||
$contentItemClass = static::$contentItemClass;
|
||||
|
||||
$where = array();
|
||||
$where[] = array( 'blog_blogs.blog_category_id=?', $this->_id );
|
||||
|
||||
if ( \count( $additionalWhere ) )
|
||||
{
|
||||
foreach( $additionalWhere AS $clause )
|
||||
{
|
||||
$where[] = $clause;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $countOnly )
|
||||
{
|
||||
return \IPS\Db::i()->select( 'COUNT(*)', $contentItemClass::$databaseTable, $where )->join( 'blog_blogs', "blog_entries.entry_blog_id=blog_blogs.blog_id" )->first();
|
||||
}
|
||||
else
|
||||
{
|
||||
$contentItemClass = static::$contentItemClass;
|
||||
$limit = ( $offset !== NULL ) ? array( $offset, $limit ) : NULL;
|
||||
return new \IPS\Patterns\ActiveRecordIterator( \IPS\Db::i()->select( '*', $contentItemClass::$databaseTable, $where, $contentItemClass::$databasePrefix . $contentItemClass::$databaseColumnId, $limit )->join( 'blog_blogs', "blog_entries.entry_blog_id=blog_blogs.blog_id" ), $contentItemClass );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,7 @@ if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
/**
|
||||
* Blog Entry Comment Model
|
||||
*/
|
||||
class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory, \IPS\Content\Hideable, \IPS\Content\Searchable, \IPS\Content\Embeddable
|
||||
class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory, \IPS\Content\Hideable, \IPS\Content\Searchable, \IPS\Content\Embeddable, \IPS\Content\Anonymous
|
||||
{
|
||||
use \IPS\Content\Reactable, \IPS\Content\Reportable;
|
||||
|
||||
@@ -58,7 +58,8 @@ class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory,
|
||||
'edit_time' => 'edit_time',
|
||||
'edit_member_name' => 'edit_member_name',
|
||||
'edit_show' => 'edit_show',
|
||||
'approved' => 'approved'
|
||||
'approved' => 'approved',
|
||||
'is_anon' => 'is_anon'
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
@@ -34,7 +34,8 @@ class _Entry extends \IPS\Content\Item implements
|
||||
\IPS\Content\Searchable,
|
||||
\IPS\Content\Embeddable,
|
||||
\IPS\Content\FuturePublishing,
|
||||
\IPS\Content\MetaData
|
||||
\IPS\Content\MetaData,
|
||||
\IPS\Content\Anonymous
|
||||
{
|
||||
use \IPS\Content\Reactable, \IPS\Content\Reportable;
|
||||
|
||||
@@ -95,7 +96,9 @@ class _Entry extends \IPS\Content\Item implements
|
||||
'edit_time' => 'edit_time',
|
||||
'edit_member_name' => 'edit_name',
|
||||
'edit_show' => 'append_edit',
|
||||
'edit_reason' => 'edit_reason'
|
||||
'edit_reason' => 'edit_reason',
|
||||
'is_anon' => 'is_anon',
|
||||
'last_comment_anon' => 'last_poster_anon',
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -443,7 +446,7 @@ class _Entry extends \IPS\Content\Item implements
|
||||
$options[ $category->id ] = $category->name;
|
||||
}
|
||||
|
||||
$return[ 'entry_category_id' ] = new \IPS\Helpers\Form\Select( 'entry_category_id', ( $item AND $item->category_id ) ? $item->category_id : ( \IPS\Request::i()->cat ? \IPS\Request::i()->cat : NULL ), FALSE, array( 'options' => $options ), NULL, NULL, NULL, "entry_category_id" );
|
||||
$return[ 'entry_category_id' ] = new \IPS\Helpers\Form\Select( 'entry_category_id', ( $item AND $item->category_id ) ? $item->category_id : ( \IPS\Request::i()->cat ? \IPS\Request::i()->cat : NULL ), FALSE, array( 'options' => $options, 'parse' => 'normal' ), NULL, NULL, NULL, "entry_category_id" );
|
||||
}
|
||||
$return['blog_entry_new_category'] = new \IPS\Helpers\Form\Text( 'blog_entry_new_category', NULL, TRUE, array(), NULL, NULL, NULL, "blog_entry_new_category" );
|
||||
|
||||
@@ -736,6 +739,18 @@ class _Entry extends \IPS\Content\Item implements
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete Record
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
parent::delete();
|
||||
|
||||
$this->coverPhoto()->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get template for content tables
|
||||
*
|
||||
@@ -992,4 +1007,19 @@ class _Entry extends \IPS\Content\Item implements
|
||||
|
||||
return $this->category;
|
||||
}
|
||||
|
||||
/**
|
||||
* Move
|
||||
*
|
||||
* @param \IPS\Node\Model $container Container to move to
|
||||
* @param bool $keepLink If TRUE, will keep a link in the source
|
||||
* @return void
|
||||
*/
|
||||
public function move( \IPS\Node\Model $container, $keepLink=FALSE )
|
||||
{
|
||||
parent::move( $container, $keepLink );
|
||||
|
||||
$this->category_id = NULL;
|
||||
$this->save();
|
||||
}
|
||||
}
|
||||
@@ -489,6 +489,8 @@ class _events extends \IPS\Content\Api\ItemController
|
||||
'rsvp_date' => time(),
|
||||
'rsvp_response' => (int) \IPS\Request::i()->response
|
||||
) );
|
||||
|
||||
$member->achievementAction( 'calendar', 'Rsvp', $event );
|
||||
|
||||
return new \IPS\Api\Response( 200, NULL );
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"calendars"
|
||||
]
|
||||
},
|
||||
"app=calendar&module=calendars&controller=calendars&do=form": {
|
||||
"app=calendar&module=calendars&controller=calendars": {
|
||||
"lang_key": "menu__calendar_calendars_calendars",
|
||||
"restriction": "calendars_manage",
|
||||
"keywords": [
|
||||
|
||||
@@ -4,5 +4,6 @@
|
||||
"app_directory": "calendar",
|
||||
"app_protected": 0,
|
||||
"app_website": null,
|
||||
"app_update_check": null
|
||||
"app_update_check": null,
|
||||
"app_hide_tab": 0
|
||||
}
|
||||
@@ -19,8 +19,7 @@
|
||||
<widget key="todaysBirthdays"><![CDATA[{"class":"\\IPS\\Widget\\StaticCache","restrict":[],"default_area":"","allow_reuse":false,"menu_style":"menu","embeddable":true}]]></widget>
|
||||
<widget key="upcomingEvents"><![CDATA[{"class":"\\IPS\\Widget\\PermissionCache","restrict":["sidebar","cms"],"default_area":"","allow_reuse":true,"menu_style":"menu","embeddable":true}]]></widget>
|
||||
<widget key="recentReviews"><![CDATA[{"class":"\\IPS\\Widget\\PermissionCache","restrict":[],"default_area":"","allow_reuse":false,"menu_style":"menu","embeddable":true}]]></widget>
|
||||
<acpsearch key="app=calendar&module=calendars&controller=calendars"><![CDATA[{"lang_key":"menu__calendar_calendars_calendars","restriction":"calendars_manage","keywords":["calendars"]}]]></acpsearch>
|
||||
<acpsearch key="app=calendar&module=calendars&controller=calendars&do=form"><![CDATA[{"lang_key":"menu__calendar_calendars_calendars","restriction":"calendars_manage","keywords":["edit calendar"]}]]></acpsearch>
|
||||
<acpsearch key="app=calendar&module=calendars&controller=calendars"><![CDATA[{"lang_key":"menu__calendar_calendars_calendars","restriction":"calendars_manage","keywords":["edit calendar"]}]]></acpsearch>
|
||||
<acpsearch key="app=calendar&module=calendars&controller=calendars&do=permissions"><![CDATA[{"lang_key":"menu__calendar_calendars_calendars","restriction":"calendars_manage","keywords":["calendar permissions"]}]]></acpsearch>
|
||||
<acpsearch key="app=calendar&module=calendars&controller=calendars&searchResult=cal_comment_moderate"><![CDATA[{"lang_key":"cal_comment_moderate","restriction":"calendars_manage","keywords":["approved","comments must be approved","require approval"]}]]></acpsearch>
|
||||
<acpsearch key="app=calendar&module=calendars&controller=calendars&searchResult=form_1_cal_allow_comments"><![CDATA[{"lang_key":"cal_allow_comments","restriction":"calendars_manage","keywords":["allow comments","comments"]}]]></acpsearch>
|
||||
|
||||
@@ -1,38 +1,41 @@
|
||||
{
|
||||
"core": {
|
||||
"ContentRouter": {
|
||||
"calendar": "IPS\\calendar\\extensions\\core\\ContentRouter\\calendar"
|
||||
},
|
||||
"StreamItems": {
|
||||
"StreamItems": "IPS\\calendar\\extensions\\core\\StreamItems\\StreamItems"
|
||||
},
|
||||
"LiveSearch": {
|
||||
"Calendars": "IPS\\calendar\\extensions\\core\\LiveSearch\\Calendars"
|
||||
},
|
||||
"FileStorage": {
|
||||
"Events": "IPS\\calendar\\extensions\\core\\FileStorage\\Events"
|
||||
"AchievementAction": {
|
||||
"Rsvp": "IPS\\calendar\\extensions\\core\\AchievementAction\\Rsvp"
|
||||
},
|
||||
"Announcements": {
|
||||
"Calendars": "IPS\\calendar\\extensions\\core\\Announcements\\Calendars"
|
||||
},
|
||||
"EditorLocations": {
|
||||
"Venue": "IPS\\calendar\\extensions\\core\\EditorLocations\\Venue",
|
||||
"Calendar": "IPS\\calendar\\extensions\\core\\EditorLocations\\Calendar"
|
||||
},
|
||||
"Permissions": {
|
||||
"Permissions": "IPS\\calendar\\extensions\\core\\Permissions\\Permissions"
|
||||
"ContentRouter": {
|
||||
"calendar": "IPS\\calendar\\extensions\\core\\ContentRouter\\calendar"
|
||||
},
|
||||
"CreateMenu": {
|
||||
"Event": "IPS\\calendar\\extensions\\core\\CreateMenu\\Event"
|
||||
},
|
||||
"EditorLocations": {
|
||||
"Calendar": "IPS\\calendar\\extensions\\core\\EditorLocations\\Calendar",
|
||||
"Venue": "IPS\\calendar\\extensions\\core\\EditorLocations\\Venue"
|
||||
},
|
||||
"FileStorage": {
|
||||
"Events": "IPS\\calendar\\extensions\\core\\FileStorage\\Events"
|
||||
},
|
||||
"FrontNavigation": {
|
||||
"Calendar": "IPS\\calendar\\extensions\\core\\FrontNavigation\\Calendar"
|
||||
},
|
||||
"LiveSearch": {
|
||||
"Calendars": "IPS\\calendar\\extensions\\core\\LiveSearch\\Calendars"
|
||||
},
|
||||
"MemberSync": {
|
||||
"Calendar": "IPS\\calendar\\extensions\\core\\MemberSync\\Calendar"
|
||||
},
|
||||
"Notifications": {
|
||||
"Events": "IPS\\calendar\\extensions\\core\\Notifications\\Events"
|
||||
},
|
||||
"Permissions": {
|
||||
"Permissions": "IPS\\calendar\\extensions\\core\\Permissions\\Permissions"
|
||||
},
|
||||
"StreamItems": {
|
||||
"StreamItems": "IPS\\calendar\\extensions\\core\\StreamItems\\StreamItems"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<javascript app="calendar">
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.main.js" javascript_type="controller" javascript_version="105100" javascript_position="1000250"><![CDATA[/**
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.main.js" javascript_type="controller" javascript_version="106107" javascript_position="1000250"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -112,7 +112,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.monthView.js" javascript_type="controller" javascript_version="105100" javascript_position="1000250"><![CDATA[/**
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.monthView.js" javascript_type="controller" javascript_version="106107" javascript_position="1000250"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -254,7 +254,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.dates.js" javascript_type="controller" javascript_version="105100" javascript_position="1000100"><![CDATA[/**
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.dates.js" javascript_type="controller" javascript_version="106107" javascript_position="1000100"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -827,7 +827,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/venue" javascript_name="ips.venue.main.js" javascript_type="controller" javascript_version="105100" javascript_position="1000200"><![CDATA[/**
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/venue" javascript_name="ips.venue.main.js" javascript_type="controller" javascript_version="106107" javascript_position="1000200"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -939,7 +939,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.reminderButton.js" javascript_type="controller" javascript_version="105100" javascript_position="1000150"><![CDATA[/**
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.reminderButton.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1022,7 +1022,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.reminderForm.js" javascript_type="controller" javascript_version="105100" javascript_position="1000150">/**
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.reminderForm.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1132,7 +1132,7 @@
|
||||
});
|
||||
}(jQuery, _));
|
||||
</file>
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="templates" javascript_name="ips.calendar.templates.js" javascript_type="framework" javascript_version="105100" javascript_position="1000050"><![CDATA[/**
|
||||
<file javascript_app="calendar" javascript_location="front" javascript_path="templates" javascript_name="ips.calendar.templates.js" javascript_type="framework" javascript_version="106107" javascript_position="1000050"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*/
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language>
|
||||
<app key="calendar" version="105100">
|
||||
<app key="calendar" version="106107">
|
||||
<word key="__app_calendar" js="0">Calendar</word>
|
||||
<word key="frontnavigation_calendar" js="0">Calendar</word>
|
||||
<word key="__indefart_calendar_event_comment" js="0">a comment on a calendar event</word>
|
||||
<word key="__indefart_calendar_event" js="0">a calendar event</word>
|
||||
<word key="__indefart_calendar_event_review" js="0">a review on a calendar event</word>
|
||||
<word key="__defart_calendar_event_comment" js="0">comment on a calendar event</word>
|
||||
<word key="__defart_calendar_event_comment_plural" js="0">{!#[1:comment][?:comments]} on a calendar event</word>
|
||||
<word key="__defart_calendar_event" js="0">calendar event</word>
|
||||
<word key="__defart_calendar_event_plural" js="0">calendar {!#[1:event][?:events]}</word>
|
||||
<word key="__defart_calendar_event_review" js="0">review on a calendar event</word>
|
||||
<word key="__defart_calendar_event_review_plural" js="0">{!#[1:review][?:reviews]} on a calendar event</word>
|
||||
<word key="calendar_event_container" js="0">calendar</word>
|
||||
<word key="menu__calendar_calendars" js="0">Calendar</word>
|
||||
<word key="menu__calendar_calendars_calendars" js="0">Calendars</word>
|
||||
@@ -76,6 +79,7 @@
|
||||
<word key="calendar_block_past_changes_desc" js="0">If enabled, users will not be able to RSVP for events or edit events that have passed. Moderators will still be able to edit past events.</word>
|
||||
<word key="calendars" js="0">Calendars</word>
|
||||
<word key="calendars_sg" js="0">Calendar</word>
|
||||
<word key="calendars_sg_lc" js="0">calendar</word>
|
||||
<word key="calendar_settings" js="0">Settings</word>
|
||||
<word key="calendar_permissions" js="0">Permissions</word>
|
||||
<word key="calendar_moderation" js="0">Moderation</word>
|
||||
@@ -454,6 +458,7 @@
|
||||
<word key="email_event_reminder_where" js="0">Where: %s</word>
|
||||
<word key="days_to_go" js="0">{# [1:day][?:days]}</word>
|
||||
<word key="notification__event_reminder" js="0">Less than %s to go until %s</word>
|
||||
<word key="notification__event_reminder_title" js="0">Upcoming {!#[1:event][?:events]}</word>
|
||||
<word key="menu__calendar_calendars_venues" js="0">Venues</word>
|
||||
<word key="venues" js="0">Venues</word>
|
||||
<word key="venue_title" js="0">Venue Name</word>
|
||||
@@ -473,6 +478,13 @@
|
||||
<word key="venue_upcoming_events" js="0">Upcoming Events</word>
|
||||
<word key="feed_venue_id" js="0">Venue</word>
|
||||
<word key="event_new_venue" js="0">Save location as a new Venue?</word>
|
||||
<word key="cal_allow_anonymous" js="0">Allow anonymous posts?</word>
|
||||
<word key="AchievementAction__Rsvp" js="0">Member RSVP's for an event</word>
|
||||
<word key="achievement_filter_Rsvp_nth_suffix" js="0"><![CDATA[<span data-role='th'>th</span> such RSVP]]></word>
|
||||
<word key="achievement_filter_Rsvp_receiver" js="0">To the user who posted the event</word>
|
||||
<word key="achievement_filter_Rsvp_giver" js="0">To the user who RSVP'd</word>
|
||||
<word key="AchievementAction__Rsvp_log" js="0">RSVP'd to %s</word>
|
||||
<word key="AchievementAction__Rsvp_title" js="0">Event RSVP</word>
|
||||
<word key="x_daily" js="1">{# [1:day][?:days]}</word>
|
||||
<word key="x_weekly" js="1">{# [1:week][?:weeks]}</word>
|
||||
<word key="x_monthly" js="1">{# [1:month][?:months]}</word>
|
||||
|
||||
@@ -155,6 +155,18 @@
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"cal_allow_anonymous": {
|
||||
"name": "cal_allow_anonymous",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
@@ -341,6 +353,18 @@
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"comment_is_anon": {
|
||||
"name": "comment_is_anon",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
@@ -1121,6 +1145,30 @@
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"event_author_name": {
|
||||
"name": "event_author_name",
|
||||
"type": "VARCHAR",
|
||||
"length": 255,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
},
|
||||
"event_is_anon": {
|
||||
"name": "event_is_anon",
|
||||
"type": "INT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
|
||||
@@ -14,13 +14,9 @@
|
||||
{{endforeach}}]]></template>
|
||||
<template template_group="browse" template_name="birthdaysTable" template_data="$table, $headers, $rows, $quickSearch" template_location="front" template_app="calendar"><![CDATA[<div data-baseurl='{$table->baseUrl}' data-resort='{$table->resortKey}' data-controller='core.global.core.table' {{if $table->getPaginationKey() != 'page'}}data-pageParam='{$table->getPaginationKey()}'{{endif}}>
|
||||
|
||||
{{if $table->pages > 1}}
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear">
|
||||
<div data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear {{if $table->pages <= 1}}ipsHide{{endif}}" data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
|
||||
|
||||
{{if \count( $rows )}}
|
||||
@@ -40,13 +36,9 @@
|
||||
</div>
|
||||
{{endif}}
|
||||
|
||||
{{if $table->pages > 1}}
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear">
|
||||
<div data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear {{if $table->pages <= 1}}ipsHide{{endif}}" data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="browse" template_name="calendarDay" template_data="$calendars, $date, $featured, $birthdays, $birthdayCount, $events, $tomorrow, $yesterday, $today, $thisCalendar, $jump" template_location="front" template_app="calendar"><![CDATA[
|
||||
<div class='ipsBox'>
|
||||
@@ -506,7 +498,7 @@
|
||||
{{endif}}
|
||||
|
||||
{template="calendarFeatured" group="browse" app="calendar" params="$featured, $date"}]]></template>
|
||||
<template template_group="browse" template_name="dateJump" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="front" template_app="calendar"><![CDATA[<div id='elCalendarJump' class='ipsMenu ipsMenu_medium ipsHide'>
|
||||
<template template_group="browse" template_name="dateJump" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="calendar"><![CDATA[<div id='elCalendarJump' class='ipsMenu ipsMenu_medium ipsHide'>
|
||||
<form accept-charset='utf-8' class="ipsPad ipsForm ipsForm_vertical" method='post' action='{$action}' data-ipsForm>
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
{{foreach $hiddenValues as $k => $v}}
|
||||
@@ -1941,7 +1933,7 @@
|
||||
<a class="ipsButton ipsButton_light ipsButton_verySmall {$buttonClass}" data-role="reminderButton" data-reminder="false" href="{url="app=calendar&module=calendar&controller=event&id={$event->id}&do=setReminder" csrf="true"}" title="{lang="event_set_reminder_tip"}" data-ipsTooltip class="ipsType_blendLinks ipsType_noUnderline" data-ipsHover data-ipsHover-cache='false' data-ipsHover-onClick>{lang="event_set_reminder"}</a>
|
||||
{{endif}}
|
||||
{{endif}}]]></template>
|
||||
<template template_group="view" template_name="reminderForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="front" template_app="calendar"><![CDATA[<form {{if \IPS\Request::i()->isAjax() }}data-controller='calendar.front.view.reminderForm'{{endif}} accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm >
|
||||
<template template_group="view" template_name="reminderForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="calendar"><![CDATA[<form {{if \IPS\Request::i()->isAjax() }}data-controller='calendar.front.view.reminderForm'{{endif}} accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm >
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
{{foreach $hiddenValues as $k => $v}}
|
||||
<input type="hidden" name="{$k}" value="{$v}">
|
||||
@@ -2114,7 +2106,10 @@
|
||||
{template="userPhoto" app="core" group="global" params="$event->author(), 'tiny'"}
|
||||
<div>
|
||||
<p class="ipsType_reset ipsType_normal ipsType_blendLinks">
|
||||
{lang="event_created_by" htmlsprintf="$event->author()->link( $event->warningRef() )"}
|
||||
{lang="event_created_by" htmlsprintf="$event->author()->link( $event->warningRef(), NULL, $event->isAnonymous() )"}
|
||||
{{if $event->isAnonymous() and \IPS\Member::loggedIn()->modPermission('can_view_anonymous_posters')}}
|
||||
<a data-ipsHover data-ipsHover-width="370" data-ipsHover-onClick href="{$event->url( 'reveal' )->csrf()}"><span class="cAuthorPane_badge cAuthorPane_badge_small cAuthorPane_badge--anon" data-ipsTooltip title="{lang="post_anonymously_reveal"}"></span></a>
|
||||
{{endif}}
|
||||
</p>
|
||||
{{if $event->container()->allow_reviews}}
|
||||
<div>
|
||||
@@ -2202,7 +2197,7 @@
|
||||
<ul id='elEventActions_menu' class='ipsMenu ipsMenu_auto ipsHide'>
|
||||
{{if $event->canReportOrRevoke() === TRUE}}
|
||||
<li class='ipsMenu_item'>
|
||||
<a href='{$event->url('report')}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_event"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_event"}">{lang="report_event"}</a>
|
||||
<a href='{$event->url('report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_event"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}"{{endif}} title="{lang="report_event"}">{lang="report_event"}</a>
|
||||
</li>
|
||||
<li class='ipsMenu_sep'><hr></li>
|
||||
{{endif}}
|
||||
@@ -2221,7 +2216,7 @@
|
||||
<li class='ipsMenu_item'><a href='{$event->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unfeature' ) )}' title='{lang="unfeature_title_event"}'>{lang="unfeature"}</a></li>
|
||||
{{endif}}
|
||||
{{if $event->canHide()}}
|
||||
<li class='ipsMenu_item'><a href='{$event->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}' title='{lang="hide_title_event"}' data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
|
||||
<li class='ipsMenu_item'><a href='{$event->url()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}' title='{lang="hide_title_event"}' data-ipsDialog data-ipsDialog-title="{lang="hide"}">{lang="hide"}</a></li>
|
||||
{{endif}}
|
||||
{{if $event->canUnhide()}}
|
||||
<li class='ipsMenu_item'><a href='{$event->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unhide' ) )}' title='{{if $event->hidden() === 1}}{lang="approve_title_event"}{{else}}{lang="unhide_title_event"}{{endif}}'>{{if $event->hidden() === 1}}{lang="approve"}{{else}}{lang="unhide"}{{endif}}</a></li>
|
||||
@@ -2233,24 +2228,24 @@
|
||||
<li class='ipsMenu_item'><a href='{$event->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unlock' ) )}' title='{lang="unlock_title_event"}'>{lang="unlock"}</a></li>
|
||||
{{endif}}
|
||||
{{if $event->canMove()}}
|
||||
<li class='ipsMenu_item'><a href='{$event->url()->csrf()->setQueryString( array( 'do' => 'move' ) )}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title="{lang="move"}" title='{lang="event_move_title"}'>{lang="move"}</a></li>
|
||||
<li class='ipsMenu_item'><a href='{$event->url()->setQueryString( array( 'do' => 'move' ) )}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title="{lang="move"}" title='{lang="event_move_title"}'>{lang="move"}</a></li>
|
||||
{{endif}}
|
||||
{{if $event->canDelete()}}
|
||||
<li class='ipsMenu_item'><a href='{$event->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'delete' ) )}' data-confirm title='{lang="calendar_delete_title"}'>{lang="delete"}</a></li>
|
||||
{{endif}}
|
||||
{{if $event->canOnMessage( 'add' )}}
|
||||
<li class='ipsMenu_item'><a href='{$event->url()->csrf()->setQueryString( array( 'do' => 'messageForm' ) )}' data-ipsDialog data-ipsDialog-title='{lang="add_message"}'>{lang="add_message"}</a></li>
|
||||
<li class='ipsMenu_item'><a href='{$event->url()->setQueryString( array( 'do' => 'messageForm' ) )}' data-ipsDialog data-ipsDialog-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='{$event->url()->csrf()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
|
||||
<li class="ipsMenu_item"><a href='{$event->url()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
|
||||
{{endif}}
|
||||
{{endif}}
|
||||
</ul>
|
||||
</li>
|
||||
{{elseif $event->canReportOrRevoke() === TRUE}}
|
||||
<li>
|
||||
<a href='{$event->url('report')}' class='ipsButton ipsButton_link ipsButton_verySmall ipsButton_fullWidth' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_event"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_event"}">{lang="report_event"}</a>
|
||||
<a href='{$event->url('report')}' class='ipsButton ipsButton_link ipsButton_verySmall ipsButton_fullWidth' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_event"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}"{{endif}} title="{lang="report_event"}">{lang="report_event"}</a>
|
||||
</li>
|
||||
{{endif}}
|
||||
|
||||
|
||||
@@ -327,6 +327,7 @@
|
||||
"104067": "4.4.10",
|
||||
"104068": "4.4.10",
|
||||
"104069": "4.4.10",
|
||||
"104070": "4.4.11",
|
||||
"105013": "4.5.0 Beta 1",
|
||||
"105014": "4.5.0 Beta 1",
|
||||
"105015": "4.5.0 Beta 2",
|
||||
@@ -347,5 +348,42 @@
|
||||
"105030": "4.5.0 Beta 11",
|
||||
"105031": "4.5.0 Beta 11",
|
||||
"105032": "4.5.0 Beta 12",
|
||||
"105100": "4.5.0"
|
||||
"105100": "4.5.0",
|
||||
"105101": "4.5.0",
|
||||
"105102": "4.5.1 Beta 1",
|
||||
"105103": "4.5.1 Beta 1",
|
||||
"105104": "4.5.1 Beta 2",
|
||||
"105105": "4.5.1 Beta 3",
|
||||
"105106": "4.5.1",
|
||||
"105107": "4.5.2",
|
||||
"105108": "4.5.2",
|
||||
"105109": "4.5.2",
|
||||
"105110": "4.5.2",
|
||||
"105111": "4.5.2",
|
||||
"105112": "4.5.3",
|
||||
"105113": "4.5.3",
|
||||
"105114": "4.5.3",
|
||||
"105115": "4.5.3",
|
||||
"105116": "4.5.4",
|
||||
"105117": "4.5.4",
|
||||
"105118": "4.5.4",
|
||||
"105119": "4.5.4",
|
||||
"105120": "4.5.4",
|
||||
"105121": "4.5.4",
|
||||
"105122": "4.5.4",
|
||||
"105123": "4.5.4",
|
||||
"105124": "4.5.4.1",
|
||||
"105125": "4.5.4.2",
|
||||
"105126": "4.5.4.2",
|
||||
"105127": "4.5.4.2",
|
||||
"105128": "4.5.4.2",
|
||||
"105129": "4.5.4.2",
|
||||
"105130": "4.5.4.2",
|
||||
"106100": "4.6.0 Beta 1",
|
||||
"106101": "4.6.0 Beta 1.1",
|
||||
"106103": "4.6.0 Beta 2",
|
||||
"106104": "4.6.0 Beta 3",
|
||||
"106105": "4.6.0 Beta 3.1",
|
||||
"106106": "4.6.0 Beta 4",
|
||||
"106107": "4.6.0"
|
||||
}
|
||||
@@ -0,0 +1,315 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Achievement Action 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/
|
||||
* @subpackage Calendar
|
||||
* @since 17 Mar 2021
|
||||
*/
|
||||
|
||||
namespace IPS\calendar\extensions\core\AchievementAction;
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Achievement Action Extension
|
||||
*/
|
||||
class _Rsvp extends \IPS\core\Achievements\Actions\AbstractAchievementAction // NOTE: Other classes exist to provided bases for common situations, like where node-based filters will be required
|
||||
{
|
||||
/**
|
||||
* Get filter form elements
|
||||
*
|
||||
* @param array|NULL $filters Current filter values (if editing)
|
||||
* @param \IPS\Http\Url $url The URL the form is being shown on
|
||||
* @return array
|
||||
*/
|
||||
public function filters( ?array $filters, \IPS\Http\Url $url ): array
|
||||
{
|
||||
$return = array();
|
||||
|
||||
$return['nodes'] = new \IPS\Helpers\Form\Node( 'achievement_filter_Rsvp_nodes', ( $filters and isset( $filters['nodes'] ) and $filters['nodes'] ) ? $filters['nodes'] : 0, FALSE, [
|
||||
'url' => $url,
|
||||
'class' => 'IPS\calendar\Calendar',
|
||||
'showAllNodes' => TRUE,
|
||||
'multiple' => TRUE,
|
||||
], NULL, \IPS\Member::loggedIn()->language()->addToStack( 'achievement_filter_NewContentItem_node_prefix', FALSE, [ 'sprintf' => [
|
||||
\IPS\Member::loggedIn()->language()->addToStack( 'rsvp', FALSE ),
|
||||
\IPS\Member::loggedIn()->language()->addToStack( 'calendars_sg', FALSE, [ 'strtolower' => TRUE ] )
|
||||
] ] ) );
|
||||
$return['nodes']->label = \IPS\Member::loggedIn()->language()->addToStack( 'achievement_filter_NewContentItem_node', FALSE, [ 'sprintf' => [ \IPS\Member::loggedIn()->language()->addToStack( 'calendars_sg', FALSE, [ 'strtolower' => TRUE ] ) ] ] );
|
||||
|
||||
$return['milestone'] = new \IPS\Helpers\Form\Number( 'achievement_filter_Rsvp_nth', ( $filters and isset( $filters['milestone'] ) and $filters['milestone'] ) ? $filters['milestone'] : 0, FALSE, [], NULL, \IPS\Member::loggedIn()->language()->addToStack('achievement_filter_nth_their'), \IPS\Member::loggedIn()->language()->addToStack('achievement_filter_Rsvp_nth_suffix') );
|
||||
$return['milestone']->label = \IPS\Member::loggedIn()->language()->addToStack('achievement_filter_NewContentItem_nth');
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format filter form values
|
||||
*
|
||||
* @param array $values The values from the form
|
||||
* @return array
|
||||
*/
|
||||
public function formatFilterValues( array $values ): array
|
||||
{
|
||||
$return = [];
|
||||
if ( isset( $values['achievement_filter_Rsvp_nodes'] ) )
|
||||
{
|
||||
$return['nodes'] = array_keys( $values['achievement_filter_Rsvp_nodes'] );
|
||||
}
|
||||
if ( isset( $values['achievement_filter_Rsvp_nth'] ) )
|
||||
{
|
||||
$return['milestone'] = $values['achievement_filter_Rsvp_nth'];
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Work out if the filters applies for a given action
|
||||
*
|
||||
* Important note for milestones: consider the context. This method is called by \IPS\Member::achievementAction(). If your code
|
||||
* calls that BEFORE making its change in the database (or there is read/write separation), you will need to add
|
||||
* 1 to the value being considered for milestones
|
||||
*
|
||||
* @param \IPS\Member $subject The subject member
|
||||
* @param array $filters The value returned by formatFilterValues()
|
||||
* @param mixed $extra Any additional information about what is happening (e.g. if a post is being made: the post object)
|
||||
* @return bool
|
||||
*/
|
||||
public function filtersMatch( \IPS\Member $subject, array $filters, $extra = NULL ): bool
|
||||
{
|
||||
if ( isset( $filters['nodes'] ) )
|
||||
{
|
||||
if ( !\in_array( $extra->container()->_id, $filters['nodes'] ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if ( isset( $filters['milestone'] ) )
|
||||
{
|
||||
$query = $this->getQuery( 'COUNT(*)', [ [ 'rsvp_member_id=?', $subject->member_id ] ], NULL, NULL, $filters );
|
||||
|
||||
if ( $query->first() < $filters['milestone'] )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the labels for the people this action might give awards to
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function awardOptions(): array
|
||||
{
|
||||
return [
|
||||
'subject' => 'achievement_filter_Rsvp_receiver',
|
||||
'other' => 'achievement_filter_Rsvp_giver'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the "other" people we need to award =stuff to
|
||||
*
|
||||
* @param mixed $extra Any additional information about what is happening (e.g. if a post is being made: the post object)
|
||||
* @return array
|
||||
*/
|
||||
public function awardOther( $extra = NULL ): array
|
||||
{
|
||||
return [ $extra->author() ];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get identifier to prevent the member being awarded points for the same action twice
|
||||
* Must be unique within within of this domain, must not exceed 32 chars.
|
||||
*
|
||||
* @param \IPS\Member $subject The subject member
|
||||
* @param mixed $extra Any additional information about what is happening (e.g. if a post is being made: the post object)
|
||||
* @return string
|
||||
*/
|
||||
public function identifier( \IPS\Member $subject, $extra = NULL ): string
|
||||
{
|
||||
return 'Rsvp:' . $extra->id . ':' . $subject->member_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a description for this action to show in the log
|
||||
*
|
||||
* @param string $identifier The identifier as returned by identifier()
|
||||
* @param array $actor If the member was the "subject", "other", or both
|
||||
* @return string
|
||||
*/
|
||||
public function logRow( string $identifier, array $actor ): string
|
||||
{
|
||||
$exploded = explode( ':', $identifier );
|
||||
|
||||
$sprintf = [];
|
||||
try
|
||||
{
|
||||
$item = \IPS\calendar\Event::load( $exploded[1] );
|
||||
$sprintf = [ 'htmlsprintf' => [
|
||||
\IPS\Theme::i()->getTemplate( 'global', 'core', 'global' )->basicUrl( $item->url(), TRUE, $item->mapped('title') ?: $item->indefiniteArticle(), FALSE )
|
||||
] ];
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
$sprintf = [ 'sprintf' => [ \IPS\Member::loggedIn()->language()->addToStack('modcp_deleted') ] ];
|
||||
}
|
||||
|
||||
return \IPS\Member::loggedIn()->language()->addToStack( 'AchievementAction__Rsvp_log', FALSE, $sprintf );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get "description" for rule
|
||||
*
|
||||
* @param \IPS\core\Achievements\Rule $rule The rule
|
||||
* @return string|NULL
|
||||
*/
|
||||
public function ruleDescription( \IPS\core\Achievements\Rule $rule ): ?string
|
||||
{
|
||||
$conditions = [];
|
||||
if ( isset( $rule->filters['milestone'] ) )
|
||||
{
|
||||
$conditions[] = \IPS\Member::loggedIn()->language()->addToStack( 'achievements_title_filter_milestone', FALSE, [
|
||||
'htmlsprintf' => [
|
||||
\IPS\Theme::i()->getTemplate( 'achievements' )->ruleDescriptionBadge( 'milestone', \IPS\Member::loggedIn()->language()->addToStack( 'achievements_title_filter_milestone_nth', FALSE, [ 'pluralize' => [ $rule->filters['milestone'] ] ] ) )
|
||||
],
|
||||
'sprintf' => [ \IPS\Member::loggedIn()->language()->addToStack('rsvp') ]
|
||||
] );
|
||||
}
|
||||
if ( $nodeCondition = $this->_nodeFilterDescription( $rule ) )
|
||||
{
|
||||
$conditions[] = $nodeCondition;
|
||||
}
|
||||
|
||||
return \IPS\Theme::i()->getTemplate( 'achievements' )->ruleDescription(
|
||||
\IPS\Member::loggedIn()->language()->addToStack( 'AchievementAction__Rsvp_title' ),
|
||||
$conditions
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get "description" for rule (usually a description of the rule's filters)
|
||||
*
|
||||
* @param \IPS\core\Achievements\Rule $rule The rule
|
||||
* @return string|NULL
|
||||
*/
|
||||
protected function _nodeFilterDescription( \IPS\core\Achievements\Rule $rule ): ?string
|
||||
{
|
||||
if ( isset( $rule->filters['nodes'] ) )
|
||||
{
|
||||
$nodeNames = [];
|
||||
foreach ( $rule->filters['nodes'] as $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
$nodeNames[] = \IPS\calendar\Calendar::load( $id )->_title;
|
||||
}
|
||||
catch ( \OutOfRangeException $e ) {}
|
||||
}
|
||||
if ( $nodeNames )
|
||||
{
|
||||
return \IPS\Member::loggedIn()->language()->addToStack( 'achievements_title_filter_location', FALSE, [
|
||||
'htmlsprintf' => [
|
||||
\IPS\Theme::i()->getTemplate( 'achievements' )->ruleDescriptionBadge( 'location',
|
||||
\count( $nodeNames ) === 1 ? $nodeNames[0] : \IPS\Member::loggedIn()->language()->addToStack( 'achievements_title_filter_location_val', FALSE, [ 'sprintf' => [
|
||||
\count( $nodeNames ),
|
||||
\IPS\Member::loggedIn()->language()->addToStack( 'calendars', FALSE, [ 'strtolower' => TRUE ] )
|
||||
] ] ),
|
||||
\count( $nodeNames ) === 1 ? NULL : $nodeNames
|
||||
)
|
||||
],
|
||||
] );
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rebuild points and badges based on the content this rule manages
|
||||
*
|
||||
* @param array $data The rebuild data
|
||||
* @param array $filters The value returned by formatFilterValues()
|
||||
* @param int $lastId The last ID returned by a previous iteration
|
||||
* @param int $limit The limit of how many to rebuild
|
||||
* @param \IPS\DataTime|null $time Any time limit to add
|
||||
* @return array
|
||||
*/
|
||||
public function processRebuild( $data, $filters, $lastId, $limit, \IPS\DateTime $time = NULL ): array
|
||||
{
|
||||
$where = ( $time ? [ ['rsvp_id > ? and rsvp_date >= ?', $lastId, $time->getTimestamp() ] ] : [ [ 'rsvp_id > ?', $lastId ] ] );
|
||||
|
||||
/* Try and limit the number of rows for the good of humanity */
|
||||
$query = $this->getQuery( '*', $where, $limit, 'rsvp_id ASC', $filters );
|
||||
$done = 0;
|
||||
foreach( $query as $row )
|
||||
{
|
||||
try
|
||||
{
|
||||
\IPS\Member::load( $row['rsvp_member_id'] )->achievementAction( 'calendar', 'Rsvp', [ \IPS\calendar\Event::load( $row['rsvp_event_id'] ) ] );
|
||||
}
|
||||
catch( \Exception $e ){}
|
||||
|
||||
$done++;
|
||||
$lastId = $row['rsvp_id'];
|
||||
}
|
||||
|
||||
return [ 'processed' => $done, 'lastId' => $lastId ];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get rebuild data
|
||||
*
|
||||
* @param array $data Data stored with the queue item
|
||||
* @param array $filters The value returned by formatFilterValues()
|
||||
* @param \IPS\DataTime|null $time Any time limit to add
|
||||
* @return void
|
||||
*/
|
||||
public function preRebuildData( &$data, $filters, \IPS\DateTime $time = NULL )
|
||||
{
|
||||
$data['count'] = $this->getQuery( 'COUNT(*)', ( $time ? [ ['rsvp_date >= ?', $time->getTimestamp() ] ] : [] ), NULL, NULL, $filters )->first();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a query to use for multiple methods within this extension
|
||||
* @param string $select Select for the query
|
||||
* @param array|NULL $where Where for the query
|
||||
* @param int|NULL $limit Limit for the query
|
||||
* @param string|NULL $order Order by for the query
|
||||
* @param array $filters Rule filters
|
||||
* @return \IPS\Db\Select
|
||||
*/
|
||||
public function getQuery( $select, $where, $limit, $order, $filters ): \IPS\Db\Select
|
||||
{
|
||||
$joinContainers = FALSE;
|
||||
$extraJoinCondition = NULL;
|
||||
$where = \is_array( $where ) ? $where : array();
|
||||
|
||||
/* Limit by node */
|
||||
if ( isset( $filters['nodes'] ) )
|
||||
{
|
||||
$joinContainers = TRUE;
|
||||
$extraJoinCondition = ' AND ' . \IPS\Db::i()->in( 'calendar_events.event_calendar_id', $filters['nodes'] );
|
||||
}
|
||||
|
||||
$query = \IPS\Db::i()->select( $select, 'calendar_event_rsvp', $where, $order, $limit );
|
||||
|
||||
if ( $joinContainers )
|
||||
{
|
||||
$query->join( 'calendar_events', 'calendar_event_rsvp.rsvp_event_id=calendar_events.event_id' . $extraJoinCondition, 'INNER' );
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
}
|
||||
@@ -67,11 +67,13 @@ class _Events
|
||||
{
|
||||
throw new \OutOfRangeException;
|
||||
}
|
||||
|
||||
|
||||
$name = ( $item->isAnonymous() ) ? \IPS\Member::loggedIn()->language()->addToStack( 'post_anonymously_placename' ) : $item->author()->name;
|
||||
|
||||
return array(
|
||||
'title' => \IPS\Member::loggedIn()->language()->addToStack( 'notification__new_content', FALSE, array(
|
||||
( $htmlEscape ? 'sprintf' : 'htmlsprintf' ) => array(
|
||||
$item->author()->name,
|
||||
$name,
|
||||
mb_strtolower( $item->indefiniteArticle() ),
|
||||
$item->container()->getTitleForLanguage( \IPS\Member::loggedIn()->language(), $htmlEscape ? array( 'escape' => TRUE ) : array() ),
|
||||
$item->mapped('title')
|
||||
@@ -130,6 +132,9 @@ class _Events
|
||||
public static function parse_mobile_event_reminder( \IPS\Lang $language, \IPS\calendar\Event $event, $daysToGo )
|
||||
{
|
||||
return array(
|
||||
'title' => $language->addToStack( 'notification__event_reminder_title', FALSE, array(
|
||||
'pluralize' => array(1)
|
||||
) ),
|
||||
'body' => $language->addToStack( 'notification__event_reminder', FALSE, array( 'htmlsprintf' => array(
|
||||
$language->addToStack( "days_to_go", FALSE, array( 'pluralize' => array(
|
||||
$daysToGo
|
||||
@@ -138,7 +143,7 @@ class _Events
|
||||
) ) ),
|
||||
'data' => array(
|
||||
'url' => (string) $event->url(),
|
||||
'author' => $event->author()
|
||||
'author' => $event->author(),
|
||||
),
|
||||
'channelId' => 'events',
|
||||
);
|
||||
|
||||
@@ -341,7 +341,7 @@ class _ical extends \IPS\Dispatcher\Controller
|
||||
/* Insert the new record */
|
||||
$feed->title = $values['feed_title'];
|
||||
$feed->url = $values['feed_url'];
|
||||
$feed->calendar_id = $values['feed_calendar_id'];
|
||||
$feed->calendar_id = $values['feed_calendar_id']->_id;
|
||||
|
||||
if( \IPS\Settings::i()->calendar_venues_enabled )
|
||||
{
|
||||
|
||||
@@ -349,6 +349,8 @@ class _event extends \IPS\Content\Controller
|
||||
) );
|
||||
|
||||
$message = 'rsvp_selection_' . \IPS\Request::i()->action;
|
||||
|
||||
\IPS\Member::loggedIn()->achievementAction( 'calendar', 'Rsvp', $this->event );
|
||||
}
|
||||
|
||||
\IPS\Output::i()->redirect( $this->event->url(), $message );
|
||||
|
||||
@@ -149,10 +149,10 @@ class _submit extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=calendar&module=calendar&controller=submit', 'front', 'calendar_submit' ) );
|
||||
}
|
||||
|
||||
|
||||
$form = new \IPS\Helpers\Form( 'form', \IPS\Member::loggedIn()->language()->checkKeyExists( \IPS\Calendar\Event::$formLangPrefix . '_save' ) ? \IPS\Calendar\Event::$formLangPrefix . '_save' : 'save' );
|
||||
$form->class = 'ipsForm_vertical';
|
||||
$formElements = \IPS\Calendar\Event::formElements( $existing, $existing->container() );
|
||||
$formElements = \IPS\Calendar\Event::formElements( $existing, $existing->container(), TRUE );
|
||||
foreach ( $formElements as $key => $object )
|
||||
{
|
||||
if ( \is_object( $object ) )
|
||||
@@ -183,6 +183,7 @@ class _submit extends \IPS\Dispatcher\Controller
|
||||
/* Set cover photo offset from original if we're using the same photo */
|
||||
if( $existing->cover_photo == $obj->cover_photo )
|
||||
{
|
||||
$obj->cover_photo = \IPS\File::get( 'calendar_Events', $existing->cover_photo )->duplicate();
|
||||
$obj->cover_offset = $existing->cover_offset;
|
||||
$obj->save();
|
||||
}
|
||||
|
||||
@@ -345,13 +345,23 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
$dayEvents['count']++;
|
||||
|
||||
if( $_event->all_day )
|
||||
if( $_event->all_day AND (
|
||||
$_event->nextOccurrence( $date, 'startDate' )->strFormat('%d') == \IPS\Request::i()->d OR
|
||||
$_event->nextOccurrence( $date, 'endDate' ) AND $_event->nextOccurrence( $date, 'endDate' )->strFormat('%d') == \IPS\Request::i()->d
|
||||
) )
|
||||
{
|
||||
$dayEvents['allDay'][ $_event->id ] = $_event;
|
||||
}
|
||||
else
|
||||
{
|
||||
$dayEvents[ $_event->_start_date->hours ][ $_event->id ] = $_event;
|
||||
if( $_event->nextOccurrence( $date, 'startDate' )->strFormat('%d') == \IPS\Request::i()->d )
|
||||
{
|
||||
$dayEvents[ $_event->_start_date->hours ][ $_event->id ] = $_event;
|
||||
}
|
||||
elseif( $_event->nextOccurrence( $date, 'endDate' ) AND $_event->nextOccurrence( $date, 'endDate' )->strFormat('%d') == \IPS\Request::i()->d )
|
||||
{
|
||||
$dayEvents[ 0 ][ $_event->id ] = $_event;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,14 @@ class _Upgrade
|
||||
|
||||
$did++;
|
||||
|
||||
$recurrenceRule = \IPS\calendar\Icalendar\ICSParser::parseRrule( $event['event_recurring'], 'UTC' );
|
||||
try
|
||||
{
|
||||
$recurrenceRule = \IPS\calendar\Icalendar\ICSParser::parseRrule( $event['event_recurring'], 'UTC' );
|
||||
}
|
||||
catch( \InvalidArgumentException $e )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$endDate = NULL;
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105101,
|
||||
"name": "4.5.0",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105102,
|
||||
"name": "4.5.1 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105103,
|
||||
"name": "4.5.1 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105104,
|
||||
"name": "4.5.1 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105105,
|
||||
"name": "4.5.1 Beta 3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105106,
|
||||
"name": "4.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105107,
|
||||
"name": "4.5.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105108,
|
||||
"name": "4.5.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105109,
|
||||
"name": "4.5.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105110,
|
||||
"name": "4.5.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105111,
|
||||
"name": "4.5.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
Loaded 100 of 2036 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user