Version 4.7.6

This commit is contained in:
Neo committed 2025-12-19 16:05:19 -08:00
1 parent 8ba7d43898
commit 7b7404e741
1085 files changed
+30590 -7837

No files matched your search

+2 -6
View File
@@ -5,10 +5,6 @@ Invision Power Services, Inc. is grateful to the following projects, whose work
has been used throughout Invision Community to add style, flair and functionality
to our product.
NULLING
Last Updated: 07 July 2022
Author: IPBMafia.ru
AES implementation in PHP
Description: Used by \IPS\Text\Encrypt to provide two-way text encryption for storing certain data.
Location: system/3rd_party/AES
@@ -33,7 +29,7 @@ Clipboard
CKEditor
Description: Provides the editor functionality for submitting content.
Location: In development: applications/core/dev/ckeditor (custom build with additional plugins)
Included version: 4.19.0
Included version: 4.19.1
Website: http://ckeditor.com
License: http://www.gnu.org/copyleft/lesser.html
@@ -93,7 +89,7 @@ google-diff-mode-patch
graphql-php
Description: PHP implementation of the GraphQL standard
Location: system/3rd_party/graphql-php
Included version: 0.13.8
Included version: 14.11.6
Website: https://webonyx.github.io/graphql-php/
License: http://opensource.org/licenses/MIT
+1 -1
View File
@@ -549,7 +549,7 @@ class Convert
}
/* If we have moved the only row from $batch to $nextbatch, then process that now */
if ( \is_array( $batch ) and \count( $nextBatch ) and ! \count( $batch ) )
if ( \is_array( $batch ) and ( \is_countable( $nextBatch ) and \count( $nextBatch ) ) and ! \count( $batch ) )
{
$batch = $nextBatch;
$nextBatch = array();
+1 -5
View File
@@ -1,9 +1,5 @@
=============================[NOTE]=============================
This software is Nulled!
Nulled by IPBMafia.ru
Buy license at https://www.invisionpower.com/buy/self-hosted
================================================================
IPS 4.7.0 (107014)
IPS 4.7.6 (107601)
=============================[NOTE]=============================
Invision Community End User License Agreement
@@ -65,8 +65,6 @@
<a href='{expression="\IPS\Settings::i()->base_url"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="gotosuite"}</a>
<a href='{expression="rtrim( \IPS\Settings::i()->base_url, '/' ) . '/' . \IPS\CP_DIRECTORY"}' class='ipsButton ipsButton_large ipsButton_normal'>{lang="gotoacp"}</a>
<br><br>
<a href='https://ipbmafia.ru/files/file/1848-russkiy-yazyk-dlya-invision-community/' target="_blank" class='ipsButton ipsButton_large ipsButton_normal' style="background: red;">Russian lang pack</a>
<br><br>
<a href="{expression="\IPS\Http\Url::ips('docs/docs')"}" target="_blank" rel="noopener">{lang="docs_link"}</a>
</div>
{{else}}
@@ -88,7 +86,6 @@
<a href="{expression="\IPS\Http\Url::ips('docs/install_guide')"}" target="_blank" rel="noopener">{lang="install_guide"}</a>
</div>
{{endif}}
<p style="text-align: right; margin:10px">Nulled by IPBMafia.ru</p>
</main>
<div class="ipsType_center ipsType_light ipsPad_double">
{lang="server_ip"} {expression="$_SERVER['SERVER_ADDR'] ?? ( $_SERVER['LOCAL_ADDR'] ?? 'unavailable' )"}
+2 -1
View File
@@ -28,6 +28,7 @@ $lang = array(
'err_conf_nowrite' => "In order to install Invision Community, you must make the <em>conf_global.php</em> writeable. If you are not sure how to do this, contact your hosting provider.",
'form_required' => "This field is required.",
'form_email_bad' => "That is not a valid email address.",
'form_bad_value' => "That value is not allowed.",
'form_password_confirm' => "The passwords do not match.",
'step' => "Step %d",
'continue' => "Continue",
@@ -133,7 +134,7 @@ $lang = array(
'sql_database' => "Database Name",
'sql_database_desc' => "If the database does not exist we will try to create it. If your MySQL user does not have permission and you're not sure how to create a database, contact your hosting provider for assistance.",
'sql_tbl_prefix' => "Table Prefix",
'sql_tbl_prefix_desc' => "If provided, all database tables created will be prefixed with the value provided. It is recommended this is left blank.",
'sql_tbl_prefix_desc' => "If provided, all database tables created will be prefixed with the value provided. It is recommended this is left blank. Allowed characters: 0-9 a-z - _",
'sql_port' => "Port",
'sql_port_desc' => "If you are not sure, leave at the default value.",
'sql_socket' => "Socket",
+2 -1
View File
@@ -132,7 +132,8 @@ hr.ipsHr {
.ipsList_bullets {
list-style-type: disc;
margin-left: 16px;
margin-left: 32px;
margin-bottom: 16px;
}
.ipsList_checks li {
-22
View File
@@ -1,22 +0,0 @@
<ips:template parameters="$apps, $selected" />
<ul class='ipsField_fieldList'>
{{foreach $apps as $key => $data}}
<li>
<input type="checkbox" id='app_{$key}' name="apps[{$key}]" {{if $data['force'] or \in_array( $key, $selected )}}checked{{endif}} {{if $data['force'] or $data['disabled']}}disabled{{endif}} value='1'>
<div class='ipsField_fieldList_content'>
<label for='app_{$key}' class='ipsFieldRow_label'>{$data['name']}</label>
<dl class='ipsVersions{{if $data['disabled']}} disabled{{endif}}'>
<dt>{lang="current_version"}</dt>
<dd>{$data['current']}</dd>
<dt>{lang="available_version"}</dt>
<dd>{$data['available']}</dd>
</dl>
{{if !empty( $data['errors'] )}}
<p class="ipsMessage ipsMessage_error">
{expression="implode( '<br />', $data['errors'] )" raw="true"}
</p>
{{endif}}
</div>
</li>
{{endforeach}}
</ul>
@@ -1,9 +1,11 @@
<ips:template parameters="$disabledApps, $disabledPlugins" />
<div class="ipsPad">
<p class="ipsType_normal">{lang="third_party_stuff_disabled"}</p>
<ips:template parameters="$disabledApps, $disabledPlugins, $showMessage=true" />
<div class="ipsPad ipsType_left ipsPos_center">
{{if $showMessage}}
<p class="ipsType_normal">{lang="third_party_stuff_disabled"}</p>
{{endif}}
{{if \count( $disabledApps )}}
<p class="ipsType_normal">{lang="third_party_stuff_disabled_apps"}</p>
<ul class='ipsList_bullets'>
<ul class='ipsList_bullets ipsType_left'>
{{foreach $disabledApps as $app}}
<li>{$app}</li>
{{endforeach}}
@@ -11,11 +13,13 @@
{{endif}}
{{if \count( $disabledPlugins )}}
<p class="ipsType_normal">{lang="third_party_stuff_disabled_plugins"}</p>
<ul class='ipsList_bullets'>
<ul class='ipsList_bullets ipsType_left'>
{{foreach $disabledPlugins as $plugin}}
<li>{$plugin}</li>
{{endforeach}}
</ul>
{{endif}}
<p class="ipsType_normal">{lang="third_party_stuff_disabled_end"}</p>
{{if $showMessage}}
<p class="ipsType_normal">{lang="third_party_stuff_disabled_end"}</p>
{{endif}}
</div>
@@ -43,7 +43,7 @@
<div class='ipsColumns ipsPad'>
<div class='ipsColumn ipsColumn_wide ipsPad' id='elInstaller_stepsWrap'>
<ul id='elInstaller_steps'>
{{foreach array( 1 => 'login', 2 => 'healthcheck', 3 => 'license', 4 => 'applications', 5 => 'upgradeoptions', 6 => 'confirm', 7 => 'upgrade' ) as $i => $lang}}
{{foreach array( 1 => 'login', 2 => 'healthcheck', 3 => 'license', 5 => 'upgradeoptions', 6 => 'confirm', 7 => 'upgrade' ) as $i => $lang}}
<li class='{{if \IPS\Dispatcher::i()->step == $i}}elInstaller_stepActive{{elseif \IPS\Dispatcher::i()->step > $i}}elInstaller_stepDone{{endif}}'>
<i class='{{if \IPS\Dispatcher::i()->step == $i or ( !\IPS\Dispatcher::i()->step and $i == 1 )}}fa fa-circle{{elseif \IPS\Dispatcher::i()->step > $i}}fa fa-check{{else}}fa fa-circle-o{{endif}}'></i>&nbsp;&nbsp;{lang="$lang"}
</li>
@@ -77,8 +77,6 @@
<a href='{expression="\IPS\Settings::i()->base_url"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="go_to_suite"}</a>
<a href='{expression="rtrim( \IPS\Settings::i()->base_url, '/' ) . '/' . \IPS\CP_DIRECTORY"}' class='ipsButton ipsButton_large ipsButton_normal'>{lang="go_to_acp"}</a>
<br><br>
<a href='https://ipbmafia.ru/files/file/1848-russkiy-yazyk-dlya-invision-community/' target="_blank" class='ipsButton ipsButton_large ipsButton_normal' style="background: red;">Russian lang pack</a>
<br><br>
<a href="{expression="\IPS\Http\Url::ips('docs/docs')"}" target="_blank" rel="noopener">{lang="suite_docs"}</a>
</div>
{{else}}
@@ -99,7 +97,6 @@
<a href="{expression="\IPS\Http\Url::ips('docs/install_guide')"}" target="_blank" rel="noopener">{lang="install_docs"}</a>
</div>
{{endif}}
<p style="text-align: right; margin:10px">Nulled by IPBMafia.ru</p>
</main>
</div>
</body>
@@ -0,0 +1,8 @@
<ips:template parameters="$table" />
<div class="ipsPadding:half">
<div class="ipsMessage ipsMessage_info">{lang="advise_removal_of_php8_incompatible_code"}</div>
<div>
{$table|raw}
</div>
</div>
@@ -6,7 +6,7 @@
<li>
<strong>{lang="upgrade_applications"}</strong>
<ul>
{{foreach( $json['session']['apps'] ) as $app}}
{{foreach $json['session']['apps'] as $app => $data}}
<li>{expression="ucfirst( $app )"}</li>
{{endforeach}}
</ul>
+37
View File
@@ -681,4 +681,41 @@ $lang = array(
'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.",
/* PHP 8 Compatibility Issues */
'method_check_fail' => 'PHP8 Incompatible Customizations',
'method_check_fix' => 'Outdated Overloaded 3rd Party Methods',
'methodscanner_no_issues' => 'No PHP8 Issues found',
'invalid_php8_customization' => 'Contains outdated code. Please contact the Author for an updated version.',
'method_issue_security' => 'Conflicting security level',
'method_issue_static' => 'Inconsistent static declaration',
'method_issue_return_type' => 'Conflicting return type hints',
'method_issue_parameter_type' => 'Conflicting parameter type',
'method_issue_nullable' => 'Conflicting parameter nullability',
'method_issue_reference' => 'Conflicting reference',
'method_issue_packed' => 'Packed status differs',
'method_issue_final' => 'Overloaded final method',
'method_issue_parameters' => 'Mismatching parameter list',
'method_issue_security_desc' => 'Overloading method in the app/plugin changes the security (public, private, or protected) level from the base class from which it inherits',
'method_issue_static_desc' => 'Base method is static and overloading method is not or vice versa',
'method_issue_return_type_desc' => 'Base method has a different return type hint than the subclass\'s method',
'method_issue_parameter_type_desc' => "Overloading method changes a parameter's type",
'method_issue_nullable_desc' => 'Base method defined a parameter as nullable but the overloaded did not or vice versa',
'method_issue_reference_desc' => 'The parameter is passed by reference to the base method but not to the overloading method or vice versa',
'method_issue_packed_desc' => 'The parameter is "packed" in the base method but not in the overloading method or vice versa',
'method_issue_final_desc' => 'A class in the app/plugin overloaded a method that was declared final, meaning it cannot be overloaded',
'method_issue_parameters_desc' => 'A subclass method in the app/plugin defines a different set of parameters than the base class from which it inherits',
'method_type' => 'Type',
'method_app' => 'App',
'method_reason' => 'Issue',
'method_scanner_method' => 'Method',
'method_subclassFile' => 'Subclass/Hook File',
'method_baseFile' => 'Base Class File',
'method_parameter' => 'Bad Parameter',
'method_na' => 'N/A',
'method_priority' => 'Priority',
'acp_notification_ManualInterventionMessage' => 'PHP8 Incompatible Customizations',
'advise_removal_of_php8_incompatible_code' => <<<TEXT
<div style="text-align: left">We are currently in the process of migrating our platform from PHP7 to PHP8 in order to provide you with the greatest level of performance and security. We've identified and disabled one or more Applications or Plugins currently installed on your site which contain PHP8 incompatible code. Refer to the AdminCP &gt; Support &gt; Get Support page for more information.<br><br>You can re-enable these Applications and Plugins via the AdminCP &gt; Applications page. Please make a note of the following Applications and Plugins so you are clear which have been automatically disabled via the upgrader.</div>
TEXT,
);
+1 -1
View File
@@ -162,7 +162,7 @@ class _Application extends \IPS\Application
public function getWebhooks() : array
{
return array_merge( [
'blogBlog_create' => \IPS\blogs\Blog::class
'blogBlog_create' => \IPS\blog\Blog::class
], parent::getWebhooks());
}
}
+6 -6
View File
@@ -281,15 +281,15 @@ class _comments extends \IPS\Content\Api\CommentController
/**
* POST /blog/comments/{id}/report
* Reports a post
* Reports a comment
*
* @param int $id ID Number
* @apiparam int author ID of the member reporting
* @apiparam int report_type Report type (0 is default and is for letting CMGR team know, more options via core_automatic_moderation_types)
* @apiparam string message Optional message
* @return \IPS\blog\Entry\Comment
* @param int $id ID Number
* @apiparam int author ID of the member reporting
* @apiparam int report_type Report type (0 is default and is for letting CMGR team know, more options via core_automatic_moderation_types)
* @apiparam string message Optional message
* @throws 1S425/B NO_AUTHOR The author ID does not exist
* @throws 1S425/C REPORTED_ALREADY The member has reported this item in the past 24 hours
* @return \IPS\blog\Entry\Comment
*/
public function POSTitem_report( $id )
{
+6 -6
View File
@@ -127,9 +127,9 @@ class _entries extends \IPS\Content\Api\ItemController
* @apiparam int featured 1/0 indicating if the entry should be featured
* @apiparam int category The blog entry category
* @apiparam string poll_title Poll title (to create a poll)
* @apiparam bool poll_public Make the poll public
* @apiparam bool poll_only Make this a poll-only topic
* @apiparam array poll_options Array of objects with keys 'title' (string), 'answers' (array of objects with key 'value' set to the choice) and 'multichoice' (bool)
* @apiparam int poll_public 1/0 indicating if the poll is public
* @apiparam int poll_only 1/0 indicating if this a poll-only topic
* @apiparam array poll_options Array of objects with keys 'title' (string), 'answers' (array of objects with key 'value' set to the choice) and 'multichoice' (int 1/0)
* @apiparam bool anonymous If 1, the item will be posted anonymously.
* @throws 1B300/2 NO_BLOG The blog ID does not exist
* @throws 1B300/3 NO_AUTHOR The author ID does not exist
@@ -215,9 +215,9 @@ class _entries extends \IPS\Content\Api\ItemController
* @apiparam int featured 1/0 indicating if the entry should be featured
* @apiparam int category The blog entry category
* @apiparam string poll_title Poll title (to create a poll)
* @apiparam bool poll_public Make the poll public
* @apiparam bool poll_only Make this a poll-only topic
* @apiparam array poll_options Array of objects with keys 'title' (string), 'answers' (array of objects with key 'value' set to the choice) and 'multichoice' (bool)
* @apiparam int poll_public 1/0 indicating if the poll is public
* @apiparam int poll_only 1/0 indicating if this a poll-only topic
* @apiparam array poll_options Array of objects with keys 'title' (string), 'answers' (array of objects with key 'value' set to the choice) and 'multichoice' (int 1/0)
* @param int $id ID Number
* @throws 2B300/6 INVALID_ID The entry ID is invalid or the authorized user does not have permission to view it
* @throws 1B300/7 NO_BLOG The blog ID does not exist or the authorized user does not have permission to post in it
+4 -4
View File
@@ -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="107014" 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="107601" javascript_position="1000050"><![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="107014" 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="107601" javascript_position="1000050">/**
* 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="107014" 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="107601" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -343,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="107014" 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="107601" javascript_position="1000150"><![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 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="blog" version="107014">
<app key="blog" version="107601">
<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>
+1 -1
View File
@@ -1237,7 +1237,7 @@
{{endif}}
</h1>
{{if \count( $entry->tags() ) OR ( $entry->canEdit() AND $entry::canTag() )}}
{template="tags" group="global" app="core" params="$entry->tags(), FALSE, FALSE, ( $entry->canEdit() AND $entry::canTag() ) ? $entry->url() : NULL"}
{template="tags" group="global" app="core" params="$entry->tags(), FALSE, FALSE, ( $entry->canEdit() AND ( \count( $entry->tags() ) OR $entry::canTag() ) ) ? $entry->url() : NULL"}
{{endif}}
</div>
{{if \IPS\Settings::i()->blog_enable_rating}}
+48 -1
View File
@@ -488,5 +488,52 @@
"107011": "4.7.0 Beta 9",
"107012": "4.7.0 Beta 10",
"107013": "4.7.0",
"107014": "4.7.0"
"107014": "4.7.0",
"107015": "4.7.0",
"107016": "4.7.0",
"107017": "4.7.0",
"107018": "4.7.1 Beta 1",
"107019": "4.7.1 Beta 1",
"107020": "4.7.1 Beta 2",
"107021": "4.7.1",
"107022": "4.7.1",
"107023": "4.7.1",
"107024": "4.7.1",
"107025": "4.7.2 Beta 1",
"107026": "4.7.2 Beta 1",
"107027": "4.7.2 Beta 2",
"107028": "4.7.2 Beta 3",
"107029": "4.7.2 Beta 4",
"107030": "4.7.2 Beta 5",
"107031": "4.7.2 Beta 6",
"107032": "4.7.2",
"107033": "4.7.2",
"107034": "4.7.2.1",
"107035": "4.7.2.1",
"107036": "4.7.2.1",
"107037": "4.7.2.1",
"107038": "4.7.2.1",
"107300": "4.7.3 Beta 1",
"107301": "4.7.3 Beta 2",
"107302": "4.7.3 Beta 3",
"107303": "4.7.3 Beta 4",
"107304": "4.7.3",
"107305": "4.7.3",
"107306": "4.7.3",
"107307": "4.7.3",
"107400": "4.7.4 Beta 1",
"107401": "4.7.4 Beta 2",
"107402": "4.7.4 Beta 3",
"107403": "4.7.4",
"107404": "4.7.4",
"107405": "4.7.4",
"107406": "4.7.4",
"107500": "4.7.5 Beta 1",
"107501": "4.7.5",
"107502": "4.7.5",
"107503": "4.7.5",
"107504": "4.7.5",
"107505": "4.7.5",
"107600": "4.7.6 Beta 1",
"107601": "4.7.6"
}
@@ -33,6 +33,11 @@ class _Blog
*/
public $classes = array();
/**
* @brief Can be shown in similar content
*/
public $similarContent = TRUE;
/**
* Constructor
*
@@ -56,7 +56,19 @@ class _Blogs
*/
public function canBeModerated( $member, $field )
{
if ( preg_match( '/^blogs\-(?:new-blog|blog|new-blog-group\d+)$/', $field->options['autoSaveKey'] ) )
if ( preg_match( '/^blogs\-(?:new-blog|blog|new-blog-sidebar|new-blog-group\d+)$/', $field->options['autoSaveKey'] ) )
{
return FALSE;
}
elseif ( preg_match( '/^blogs\-blog\-(\d+)m$/', $field->options['autoSaveKey'] ) )
{
return FALSE;
}
elseif ( preg_match( '/^blogs\-blog\-(\d+)\-group(\d+)$/', $field->options['autoSaveKey'] ) )
{
return FALSE;
}
elseif ( preg_match( '/^blogs\-blogsidebar\-(\d+)$/', $field->options['autoSaveKey'] ) )
{
return FALSE;
}
@@ -36,8 +36,12 @@ class _Blog
foreach( \IPS\blog\Blog::loadByOwner( $member2 ) as $blog )
{
$blog->member_id = $member->member_id;
$blog->save();
/* Only do this if the blog is not a group blog */
if ( !$blog->groupblog_ids )
{
$blog->member_id = $member->member_id;
$blog->save();
}
}
}
@@ -97,7 +97,7 @@ class _RssImport
/* Send notifications */
$entry->sendNotifications();
$entry->setTags( $settings['tags'] );
$entry->setTags( $settings['tags'], $member );
return $entry;
}
@@ -142,6 +142,9 @@ class _browse extends \IPS\Dispatcher\Controller
\IPS\Output::i()->breadcrumb[] = array( $parent->url(), $parent->_title );
}
\IPS\Output::i()->breadcrumb[] = array( $category->url(), $category->_title );
/* Set default search option */
\IPS\Output::i()->defaultSearchOption = array( 'blog_entry', 'blog_entry_pl' );
}
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_browse.js', 'blog', 'front' ) );
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('blogs');
@@ -246,6 +246,7 @@ class _entry extends \IPS\Content\Controller
catch( \RuntimeException $e ) {}
/* Image is invalid */
catch( \InvalidArgumentException $e ){}
catch( \DomainException $e ) {}
}
/* Display */
@@ -280,6 +281,9 @@ class _entry extends \IPS\Content\Controller
}
catch ( \OutOfRangeException $e ) {}
/* Set default search option */
\IPS\Output::i()->defaultSearchOption = array( 'blog_entry', 'blog_entry_pl' );
\IPS\Output::i()->breadcrumb[] = array( $this->entry->container()->url(), $this->entry->container()->_title );
\IPS\Output::i()->breadcrumb[] = array( NULL, $this->entry->name );
@@ -216,6 +216,9 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
/* Categories */
$categories = \IPS\blog\Entry\Category::roots( NULL, NULL, array( 'entry_category_blog_id=?', $this->blog->id ) );
/* Set default search option */
\IPS\Output::i()->defaultSearchOption = array( 'blog_entry', 'blog_entry_pl' );
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_browse.js', 'blog', 'front' ) );
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'view' )->view( $this->blog, (string) $table, $category );
\IPS\Output::i()->contextualSearchOptions[ \IPS\Member::loggedIn()->language()->addToStack( 'search_contextual_item_blogs' ) ] = array( 'type' => 'blog_entry', 'nodes' => $this->blog->_id );
@@ -0,0 +1,24 @@
{
"id": 107015,
"name": "4.7.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": 107016,
"name": "4.7.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": 107017,
"name": "4.7.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": 107018,
"name": "4.7.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": 107019,
"name": "4.7.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": 107020,
"name": "4.7.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": 107021,
"name": "4.7.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": 107022,
"name": "4.7.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": 107023,
"name": "4.7.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": 107024,
"name": "4.7.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": 107025,
"name": "4.7.2 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": 107026,
"name": "4.7.2 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": 107027,
"name": "4.7.2 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,23 @@
{
"id": 107028,
"name": "4.7.2 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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107029,
"name": "4.7.2 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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107030,
"name": "4.7.2 Beta 5",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107031,
"name": "4.7.2 Beta 6",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107032,
"name": "4.7.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107033,
"name": "4.7.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107034,
"name": "4.7.2.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107035,
"name": "4.7.2.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107036,
"name": "4.7.2.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107037,
"name": "4.7.2.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107038,
"name": "4.7.2.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107300,
"name": "4.7.3 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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107301,
"name": "4.7.3 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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107302,
"name": "4.7.3 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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107303,
"name": "4.7.3 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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107304,
"name": "4.7.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107305,
"name": "4.7.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107306,
"name": "4.7.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107307,
"name": "4.7.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107400,
"name": "4.7.4 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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107401,
"name": "4.7.4 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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107402,
"name": "4.7.4 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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107403,
"name": "4.7.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107404,
"name": "4.7.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107405,
"name": "4.7.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107406,
"name": "4.7.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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107500,
"name": "4.7.5 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,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107501,
"name": "4.7.5",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107502,
"name": "4.7.5",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107503,
"name": "4.7.5",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107504,
"name": "4.7.5",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107505,
"name": "4.7.5",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,23 @@
{
"id": 107600,
"name": "4.7.6 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [
"front\/view\/entry"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,23 @@
{
"id": 107601,
"name": "4.7.6",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeSettings": false,
"javascript": false,
"emailTemplates": false,
"hooks": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -136,7 +136,7 @@ class _Upgrade
public function step2()
{
\IPS\Db::i()->replace( 'core_ratings',
\IPS\Db::i()->select( "NULL, 'IPS\\blog\\Entry', entry_id, member_id, rating, ''", 'blog_ratings' )
\IPS\Db::i()->select( "NULL, 'IPS\\blog\\Entry', entry_id, member_id, rating, '', NULL", 'blog_ratings' )
);
return TRUE;
+4 -6
View File
@@ -1044,7 +1044,7 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
*/
protected function set__futureItems( $val )
{
$this->count_entries_future = $val;
$this->count_entries_future = ( $val > 0 ) ? $val : 0;
}
/**
@@ -1165,10 +1165,8 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
/* Unclaim Attachments */
\IPS\File::unclaimAttachments( 'blog_Blogs', $this->id );
/* Delete Cover Photo -specifically call parent otherwise deleteOrMoveContent process cannot run within the AdminCP */
$photo = parent::coverPhoto();
$photo->delete();
$this->coverPhotoFile()?->delete();
/* Delete Follows */
\IPS\Db::i()->delete( 'core_follow', array( "follow_app=? AND follow_area=? AND follow_rel_id=?", 'blog', 'blog', $this->_id ) );
@@ -1187,7 +1185,7 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E
public function coverPhoto()
{
$photo = parent::coverPhoto();
$photo->overlay = \IPS\Theme::i()->getTemplate('view', 'blog')->coverPhotoOverlay($this);
$photo->overlay = \IPS\Theme::i()->getTemplate('view', 'blog', 'front')->coverPhotoOverlay($this);
return $photo;
}
+2 -1
View File
@@ -317,9 +317,10 @@ class _Entry extends \IPS\Content\Item implements
* @param bool $joinAuthor If true, will join the members table for the author
* @param bool $joinLastCommenter If true, will join the members table for the last commenter
* @param bool $showMovedLinks If true, moved item links are included in the results
* @param array|null $location Array of item lat and long
* @return \IPS\Patterns\ActiveRecordIterator|int
*/
public static function getItemsWithPermission( $where=array(), $order=NULL, $limit=10, $permissionKey='read', $includeHiddenItems=\IPS\Content\Hideable::FILTER_AUTOMATIC, $queryFlags=0, \IPS\Member $member=NULL, $joinContainer=FALSE, $joinComments=FALSE, $joinReviews=FALSE, $countOnly=FALSE, $joins=NULL, $skipPermission=FALSE, $joinTags=TRUE, $joinAuthor=TRUE, $joinLastCommenter=TRUE, $showMovedLinks=FALSE )
public static function getItemsWithPermission( $where=array(), $order=NULL, $limit=10, $permissionKey='read', $includeHiddenItems=\IPS\Content\Hideable::FILTER_AUTOMATIC, $queryFlags=0, \IPS\Member $member=NULL, $joinContainer=FALSE, $joinComments=FALSE, $joinReviews=FALSE, $countOnly=FALSE, $joins=NULL, $skipPermission=FALSE, $joinTags=TRUE, $joinAuthor=TRUE, $joinLastCommenter=TRUE, $showMovedLinks=FALSE, $location=NULL )
{
if ( \in_array( $permissionKey, array( 'view', 'read' ) ) )
{
+27 -1
View File
@@ -6,7 +6,9 @@
* @package Invision Community
* @subpackage Calendar
* @since 18 Dec 2013
* @version
* @version
* @todo support for google maps as well as mapbox
* @todo Only request location info when search box is focused.
*/
namespace IPS\calendar;
@@ -203,4 +205,28 @@ class _Application extends \IPS\Application
]
],parent::getWebhooks());
}
/**
* Perform some legacy URL parameter conversions
*
* @return void
*/
public function convertLegacyParameters()
{
$url = \IPS\Request::i()->url();
$baseUrl = parse_url( \IPS\Settings::i()->base_url );
/* We want to match /calendar/ if IC is not installed inside a directory, or if it is, the /path/calendar/ exactly */
$strToCheck = ( ! empty( trim( $baseUrl['path'], '/' ) ) ) ? '/' . trim( $baseUrl['path'], '/' ) . '/calendar/' : '/calendar/';
// once we use php8, we can use str_starts_with, right now here's the hacky way with substr
if( \mb_substr($url->data[ \IPS\Http\Url::COMPONENT_PATH ], 0, \mb_strlen($strToCheck)) === $strToCheck )
{
$newPath = str_replace( '/calendar/', '/events/', $url->data[ \IPS\Http\Url::COMPONENT_PATH ] );
$url = $url->setPath( $newPath );
\IPS\Output::i()->redirect( $url, NULL, 301 );
}
}
}
+1 -1
View File
@@ -133,7 +133,7 @@ class _calendars extends \IPS\Node\Api\NodeController
* @param \IPS\node\Model $calendar The node
* @return \IPS\node\Model
*/
protected function _createOrUpdate( \IPS\node\Model $calendar )
protected function _createOrUpdate( \IPS\Node\Model $calendar )
{
if ( \IPS\Request::i()->title )
{
+6 -6
View File
@@ -267,15 +267,15 @@ class _comments extends \IPS\Content\Api\CommentController
/**
* POST /calendar/comments/{id}/report
* Reports a post
* Reports a comment
*
* @param int $id ID Number
* @apiparam int author ID of the member reporting
* @apiparam int report_type Report type (0 is default and is for letting CMGR team know, more options via core_automatic_moderation_types)
* @apiparam string message Optional message
* @return \IPS\calendar\Event\Comment
* @param int $id ID Number
* @apiparam int author ID of the member reporting
* @apiparam int report_type Report type (0 is default and is for letting CMGR team know, more options via core_automatic_moderation_types)
* @apiparam string message Optional message
* @throws 1S425/B NO_AUTHOR The author ID does not exist
* @throws 1S425/C REPORTED_ALREADY The member has reported this item in the past 24 hours
* @return \IPS\calendar\Event\Comment
*/
public function POSTitem_report( $id )
{
+6 -6
View File
@@ -281,15 +281,15 @@ class _reviews extends \IPS\Content\Api\CommentController
}
/**
* POST /calendar/reviews/{id}/report
* Reports a post
* Reports a review
*
* @param int $id ID Number
* @apiparam int author ID of the member reporting
* @apiparam int report_type Report type (0 is default and is for letting CMGR team know, more options via core_automatic_moderation_types)
* @apiparam string message Optional message
* @return \IPS\calendar\Event\Review
* @param int $id ID Number
* @apiparam int author ID of the member reporting
* @apiparam int report_type Report type (0 is default and is for letting CMGR team know, more options via core_automatic_moderation_types)
* @apiparam string message Optional message
* @throws 1S425/B NO_AUTHOR The author ID does not exist
* @throws 1S425/C REPORTED_ALREADY The member has reported this item in the past 24 hours
* @return \IPS\calendar\Event\Review
*/
public function POSTitem_report( $id )
{
+1 -1
View File
@@ -136,7 +136,7 @@ class _venues extends \IPS\Node\Api\NodeController
* @param \IPS\node\Model $venue The node
* @return \IPS\node\Model
*/
protected function _createOrUpdate( \IPS\node\Model $venue )
protected function _createOrUpdate( \IPS\Node\Model $venue )
{
if( \IPS\Request::i()->address AND \is_array( \IPS\Request::i()->address ) )
{
@@ -234,12 +234,5 @@
"monday",
"sunday"
]
},
"app=calendar&module=calendars&controller=settings&searchResult=form_show_bday_calendar": {
"lang_key": "show_bday_calendar",
"restriction": "settings_manage",
"keywords": [
"birthdays"
]
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
{
"application_title": "Calendar",
"application_title": "Events",
"app_author": "Invision Power Services, Inc.",
"app_directory": "calendar",
"app_protected": 0,
+5 -5
View File
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<build>
<module key="admin/calendars"><![CDATA[{"default_controller":null,"protected":0,"default":1}]]></module>
<module key="admin/stats"><![CDATA[{"default_controller":"","protected":false,"default":null}]]></module>
<module key="admin/stats"><![CDATA[{"default_controller":"","protected":0,"default":0}]]></module>
<module key="admin/venues"><![CDATA[{"default":0,"default_controller":"","protected":0}]]></module>
<module key="front/calendar"><![CDATA[{"default_controller":"view","protected":0,"default":1}]]></module>
<task frequency="P0Y0M0DT4H0M0S">icalendar</task>
<task frequency="P0Y0M0DT1H0M0S">eventreminders</task>
@@ -9,14 +10,14 @@
<setting key="calendar_block_past_changes"><![CDATA[{"key":"calendar_block_past_changes","default":"0","report":"full"}]]></setting>
<setting key="calendar_date_format"><![CDATA[{"key":"calendar_date_format","default":"d_lm_y","report":"full"}]]></setting>
<setting key="calendar_date_format_custom"><![CDATA[{"key":"calendar_date_format_custom","default":"","report":"bool"}]]></setting>
<setting key="calendar_default_view"><![CDATA[{"key":"calendar_default_view","default":"month","report":"full"}]]></setting>
<setting key="calendar_default_view"><![CDATA[{"key":"calendar_default_view","default":"overview","report":"full"}]]></setting>
<setting key="calendar_rss_feed"><![CDATA[{"key":"calendar_rss_feed","default":"1","report":"full"}]]></setting>
<setting key="calendar_rss_feed_days"><![CDATA[{"key":"calendar_rss_feed_days","default":"30","report":"full"}]]></setting>
<setting key="calendar_rss_feed_order"><![CDATA[{"key":"calendar_rss_feed_order","default":"0","report":"full"}]]></setting>
<setting key="calendar_venues_enabled"><![CDATA[{"key":"calendar_venues_enabled","default":"0","report":"full"}]]></setting>
<setting key="ipb_calendar_mon"><![CDATA[{"key":"ipb_calendar_mon","default":"0","report":"full"}]]></setting>
<setting key="show_bday_calendar"><![CDATA[{"key":"show_bday_calendar","default":"1","report":"full"}]]></setting>
<widget key="todaysBirthdays"><![CDATA[{"class":"\\IPS\\Widget\\StaticCache","restrict":[],"default_area":"","allow_reuse":false,"menu_style":"menu","embeddable":true}]]></widget>
<setting key="map_center_lat"><![CDATA[{"key":"map_center_lat","default":"37.411022","report":"none"}]]></setting>
<setting key="map_center_lon"><![CDATA[{"key":"map_center_lon","default":"-79.1429788","report":"none"}]]></setting>
<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&amp;module=calendars&amp;controller=calendars"><![CDATA[{"lang_key":"menu__calendar_calendars_calendars","restriction":"calendars_manage","keywords":["edit calendar"]}]]></acpsearch>
@@ -48,5 +49,4 @@
<acpsearch key="app=calendar&amp;module=calendars&amp;controller=settings&amp;searchResult=form_calendar_rss_feed"><![CDATA[{"lang_key":"calendar_rss_feed","restriction":"settings_manage","keywords":["calendar rss","events rss"]}]]></acpsearch>
<acpsearch key="app=calendar&amp;module=calendars&amp;controller=settings&amp;searchResult=form_calendar_venues_enabled"><![CDATA[{"lang_key":"calendar_venues_enabled","restriction":"settings_manage","keywords":["address","venue","venues"]}]]></acpsearch>
<acpsearch key="app=calendar&amp;module=calendars&amp;controller=settings&amp;searchResult=form_ipb_calendar_mon"><![CDATA[{"lang_key":"ipb_calendar_mon","restriction":"settings_manage","keywords":["calendar start","monday","sunday"]}]]></acpsearch>
<acpsearch key="app=calendar&amp;module=calendars&amp;controller=settings&amp;searchResult=form_show_bday_calendar"><![CDATA[{"lang_key":"show_bday_calendar","restriction":"settings_manage","keywords":["birthdays"]}]]></acpsearch>
</build>
+5 -1
View File
@@ -22,8 +22,12 @@
* They must be provided in that order, otherwise the former will redirec to /myfolder/?do=myaction rather than /myfolder/myaction
*/
{
"topLevel": "calendar",
"topLevel": "events",
"pages": {
"featured": {
"friendly": "featured",
"real": "app=calendar&module=calendar&controller=view&view=overview&do=featured"
},
"calendar_calweek": {
"friendly": "{#id}-{?}/week/{@w}",
"real": "app=calendar&module=calendar&controller=view&view=week"
File diff suppressed because it is too large. Load diff
+62 -26
View File
@@ -1,32 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="calendar" version="107014">
<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>
<app key="calendar" version="107601">
<word key="__app_calendar" js="0">Events</word>
<word key="frontnavigation_calendar" js="0">Events</word>
<word key="__indefart_calendar_event_comment" js="0">a comment on an event</word>
<word key="__indefart_calendar_event" js="0">an event</word>
<word key="__indefart_calendar_event_review" js="0">a review on an event</word>
<word key="__defart_calendar_event_comment" js="0">comment on an event</word>
<word key="__defart_calendar_event_comment_plural" js="0">{!#[1:comment][?:comments]} on an event</word>
<word key="__defart_calendar_event" js="0">event</word>
<word key="__defart_calendar_event_plural" js="0">{!#[1:event][?:events]}</word>
<word key="__defart_calendar_event_review" js="0">review on an event</word>
<word key="__defart_calendar_event_review_plural" js="0">{!#[1:review][?:reviews]} on an 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" js="0">Events</word>
<word key="menu__calendar_calendars_calendars" js="0">Calendars</word>
<word key="menu__calendar_calendars_ical" js="0">iCalendar Feeds</word>
<word key="menu__calendar_calendars_settings" js="0">Settings</word>
<word key="module__calendar_calendar" js="0">Calendar</word>
<word key="module__calendar_calendar" js="0">Events</word>
<word key="module__calendar_calendars" js="0">Calendars</word>
<word key="module__calendar_events" js="0">Events</word>
<word key="menu__calendar_venues" js="0">Venues</word>
<word key="event" js="0">Event</word>
<word key="editor__calendar_Events" js="0">Calendar Events</word>
<word key="editor__calendar_Events" js="0">Events</word>
<word key="editor__calendar_Calendar" js="0">Calendars</word>
<word key="editor__calendar_Venue" js="0">Venues</word>
<word key="acp_search_title_calendar_Calendars" js="0">Calendars</word>
<word key="calendar_event_pl_lc" js="0">calendar events</word>
<word key="calendar_event_pl_lc" js="0">events</word>
<word key="search_contextual_item_calendars" js="0">This Calendar</word>
<word key="search_contextual_item_calendar_event" js="0">This Event</word>
<word key="r__calendars" js="0">Calendars</word>
@@ -47,8 +47,6 @@
<word key="loc_calendar_viewing_calendar_action" js="0">%s is viewing a calendar</word>
<word key="loc_calendar_viewing_calendar_all_action" js="0">%s is viewing a calendar</word>
<word key="loc_calendar_viewing_event_action" js="0">%s is viewing an event</word>
<word key="show_bday_calendar" js="0">Show birthdays on calendar</word>
<word key="show_bday_calendar_desc" js="0">When enabled, the calendar will show the number of member birthdays for each day and will list member birthdays when viewing a date.</word>
<word key="ipb_calendar_mon" js="0">Start calendar on Monday</word>
<word key="ipb_calendar_mon_desc" js="0">By default, the calendar will use Sunday as the start day for each week. You can use this setting to start the calendar on Monday instead.</word>
<word key="calendar_rss_feed" js="0">Enable upcoming events RSS feed</word>
@@ -63,7 +61,7 @@
<word key="cal_df_month" js="0">Current month</word>
<word key="cal_df_week" js="0">Current week</word>
<word key="cal_df_day" js="0">Current day</word>
<word key="cal_df_stream" js="0">Stream of upcoming events</word>
<word key="cal_df_overview" js="0">Overview</word>
<word key="filestorage__calendar_Events" js="0">Calendar Event Cover Photos</word>
<word key="calendar_df_locale" js="0">Use default date formatting</word>
<word key="calendar_df_d_sm_y" js="0">DD MMM YYYY (Example: 01 Jan 2000)</word>
@@ -186,10 +184,6 @@
<word key="no_events_today" js="0">No events scheduled today</word>
<word key="no_events_month" js="0">No events scheduled this month</word>
<word key="error_bad_date" js="0">The date you requested appears to be invalid</word>
<word key="birthdays_today" js="0">{# [1:birthday][?:birthdays]} today</word>
<word key="birthdays_count" js="0">{# [1:birthday][?:birthdays]}</word>
<word key="birthdays_view_all" js="0">View all</word>
<word key="birthdays" js="0">Birthdays</word>
<word key="calendar_event" js="0">Event</word>
<word key="calendar_event_comment" js="0">Event Comment</word>
<word key="calendar_event_review" js="0">Event Review</word>
@@ -244,6 +238,8 @@
<word key="event_rsvp_limit_desc" js="0">Once the limit is reached, no further attendees will be allowed to RSVP for this event.</word>
<word key="event_cover_photo" js="0">Cover Photo</word>
<word key="event_location" js="0">Location</word>
<word key="showing_events_near_you" js="0">Showing events near your current location.</word>
<word key="see_more_events_near_you" js="0">See more events by location</word>
<word key="event_album" js="0">Album</word>
<word key="event_album_desc" js="0">You can link an album from the Gallery to this event which will show the images on the event page and cause information about the event to be displayed on the album page.</word>
<word key="submit_event_start" js="0">Event Start</word>
@@ -378,9 +374,6 @@
<word key="days_ahead" js="0">Number of days to show</word>
<word key="maximum_count" js="0">Number of events</word>
<word key="view_this_event" js="0">View the event %s</word>
<word key="block_todaysBirthdays" js="0">Today's Birthdays</word>
<word key="block_todaysBirthdays_desc" js="0">Shows birthdays from today</word>
<word key="no_members_birthday_today" js="0">No users celebrating today</word>
<word key="no_upcoming_events" js="0">No upcoming events found</word>
<word key="member_age" js="0">({# [1:year][?:years]} old)</word>
<word key="block_recentReviews" js="0">Recent Event Reviews</word>
@@ -494,6 +487,46 @@
<word key="calendar_stats_rsvp_response_2" js="0">Maybe</word>
<word key="menu__calendar_stats_venues" js="0">Venues</word>
<word key="webhook_calendarEvent_rsvp" js="0">Fired when somebody changes his RSVP status</word>
<word key="event_online" js="0">Online Event</word>
<word key="event_url" js="0">URL</word>
<word key="all_events" js="0">All</word>
<word key="online_events" js="0">Online Events</word>
<word key="open_event" js="0">Open Event</word>
<word key="powered_by" js="0">Powered by</word>
<word key="physical_events" js="0">Physical Events</word>
<word key="event_view_overview" js="0">Overview</word>
<word key="event_view_daily" js="0">Daily</word>
<word key="event_view_weekly" js="0">Weekly</word>
<word key="event_view_monthly" js="0">Monthly</word>
<word key="events_search_your_location" js="0">Your location</word>
<word key="events_search_use_location" js="0">Use my location</word>
<word key="events_search_cancel_location" js="0">Cancel Location</word>
<word key="events_search_location" js="0">Location</word>
<word key="events_search_search_location" js="0">Search location</word>
<word key="events_search_type" js="0">Type</word>
<word key="events_search_from" js="0">From</word>
<word key="events_search_to" js="0">To</word>
<word key="events_search_search" js="0">Search</word>
<word key="events_search_events" js="0">Search Events</word>
<word key="events_search_back_to_overview" js="0">Back to overview</word>
<word key="events_search_sort_by" js="0">Sort By:</word>
<word key="events_search_distance" js="0">Distance</word>
<word key="events_search_date" js="0">Date</word>
<word key="events_search_show_more" js="0">Show more results</word>
<word key="events_search_no_events" js="0">No more events to show</word>
<word key="events_search_no_events_long" js="0">There were no events matching your search</word>
<word key="events_happening_near_you" js="0">Happening Near You</word>
<word key="events_online_events" js="0">Online Events</word>
<word key="events_browse_by_month" js="0">Browse By Month</word>
<word key="events_no_more_this_month" js="0">No more events this month</word>
<word key="events_show_more" js="0">Show more events</word>
<word key="map_center_lat" js="0">Map center latitude</word>
<word key="map_center_lon" js="0">Map center longitude</word>
<word key="map_center_lat_desc" js="0">The default latitude to use when no user location can be determined by geolocation or ip lookup.</word>
<word key="map_center_lon_desc" js="0">The default longitude to use when no user location can be determined by geolocation or ip lookup.</word>
<word key="event_happening_now" js="0">Happening Now</word>
<word key="event_happening_today" js="0">Happening Today</word>
<word key="events_near_you_soon" js="0">We couldn't find any events happening soon near you. Check back later!</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>
@@ -521,5 +554,8 @@
<word key="select_time" js="1">(select time)</word>
<word key="event_reminder_removed" js="1">Reminder Removed</word>
<word key="event_reminder_added" js="1">Reminder Saved</word>
<word key="event_your_current_location" js="1">Your Current Location</word>
<word key="event_your_current_location_sorry" js="1">Sorry, we weren't able to get your location. Do you have location services enabled in your browser?</word>
<word key="event_finding_location" js="1">Finding your location...</word>
</app>
</language>
+7 -2
View File
@@ -7,8 +7,13 @@
},
"stats": {
"default_controller": "",
"protected": false,
"default": null
"protected": 0,
"default": 0
},
"venues": {
"default": 0,
"default_controller": "",
"protected": 0
}
},
"front": {
+134 -158
View File
@@ -549,7 +549,6 @@
"event_id": {
"allow_null": false,
"auto_increment": true,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
@@ -557,13 +556,11 @@
"name": "event_id",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_calendar_id": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
@@ -571,13 +568,11 @@
"name": "event_calendar_id",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_member_id": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
@@ -585,13 +580,11 @@
"name": "event_member_id",
"type": "BIGINT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_content": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
@@ -599,13 +592,11 @@
"name": "event_content",
"type": "MEDIUMTEXT",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_title": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "",
@@ -613,13 +604,11 @@
"name": "event_title",
"type": "VARCHAR",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_comments": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
@@ -627,41 +616,35 @@
"name": "event_comments",
"type": "INT",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_rsvp": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
"length": 1,
"length": 4,
"name": "event_rsvp",
"type": "TINYINT",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_approved": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
"length": 1,
"length": 4,
"name": "event_approved",
"type": "TINYINT",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_saved": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
@@ -669,13 +652,11 @@
"name": "event_saved",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_lastupdated": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
@@ -683,13 +664,11 @@
"name": "event_lastupdated",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_recurring": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "Holds an RRULE value to indicate how the event recurs",
"decimals": null,
"default": null,
@@ -697,13 +676,11 @@
"name": "event_recurring",
"type": "TEXT",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_start_date": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
@@ -711,13 +688,11 @@
"name": "event_start_date",
"type": "DATETIME",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_end_date": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
@@ -725,13 +700,11 @@
"name": "event_end_date",
"type": "DATETIME",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_title_seo": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
@@ -739,13 +712,11 @@
"name": "event_title_seo",
"type": "VARCHAR",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_rating": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
@@ -753,13 +724,11 @@
"name": "event_rating",
"type": "SMALLINT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_post_key": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
@@ -767,13 +736,11 @@
"name": "event_post_key",
"type": "VARCHAR",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_sequence": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
@@ -781,13 +748,11 @@
"name": "event_sequence",
"type": "INT",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_all_day": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
@@ -795,13 +760,11 @@
"name": "event_all_day",
"type": "TINYINT",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_reviews": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
@@ -809,13 +772,11 @@
"name": "event_reviews",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_ip_address": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
@@ -823,69 +784,59 @@
"name": "event_ip_address",
"type": "VARCHAR",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_locked": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "Whether the event is locked (for new comments\/reviews) or not",
"decimals": null,
"default": "0",
"length": 1,
"length": 3,
"name": "event_locked",
"type": "TINYINT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_featured": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "Whether the event is featured or not",
"decimals": null,
"default": "0",
"length": 1,
"length": 3,
"name": "event_featured",
"type": "TINYINT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_last_comment": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
"length": 11,
"length": 10,
"name": "event_last_comment",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_last_review": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
"length": 11,
"length": 10,
"name": "event_last_review",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_approved_by": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "Member ID who approved the event",
"decimals": null,
"default": null,
@@ -893,27 +844,23 @@
"name": "event_approved_by",
"type": "BIGINT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_approved_on": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "Date the event was approved on",
"decimals": null,
"default": null,
"length": 11,
"length": 10,
"name": "event_approved_on",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_location": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "Stores location data for the event, used to create a map",
"decimals": null,
"default": null,
@@ -921,27 +868,23 @@
"name": "event_location",
"type": "TEXT",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_rsvp_limit": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "Maximum number of attendees allowed for the event",
"decimals": null,
"default": null,
"length": 10,
"length": 11,
"name": "event_rsvp_limit",
"type": "INT",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_cover_photo": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "Header background image for the event",
"decimals": null,
"default": null,
@@ -949,13 +892,11 @@
"name": "event_cover_photo",
"type": "VARCHAR",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_album": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "Holds album ID associated with this event",
"decimals": null,
"default": null,
@@ -963,13 +904,11 @@
"name": "event_album",
"type": "MEDIUMINT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_cover_offset": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
@@ -977,13 +916,11 @@
"name": "event_cover_offset",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_queued_comments": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
@@ -991,13 +928,11 @@
"name": "event_queued_comments",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_hidden_comments": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
@@ -1005,13 +940,11 @@
"name": "event_hidden_comments",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_unapproved_reviews": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
@@ -1019,13 +952,11 @@
"name": "event_unapproved_reviews",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_hidden_reviews": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
@@ -1033,39 +964,35 @@
"name": "event_hidden_reviews",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_venue": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
"length": 5,
"length": 10,
"name": "event_venue",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
"values": []
},
"event_meta_data": {
"allow_null": false,
"auto_increment": false,
"comment": "",
"decimals": null,
"default": "0",
"length": 3,
"name": "event_meta_data",
"type": "TINYINT",
"length": 1,
"decimals": null,
"values": [],
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": true,
"auto_increment": false
"values": []
},
"event_recurring_end_date": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "End date if this is a recurring event which ends",
"decimals": null,
"default": null,
@@ -1073,13 +1000,11 @@
"name": "event_recurring_end_date",
"type": "DATETIME",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_timezone": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
@@ -1087,27 +1012,23 @@
"name": "event_timezone",
"type": "VARCHAR",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_edit_time": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
"length": 10,
"length": 11,
"name": "event_edit_time",
"type": "INT",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_edit_member_name": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
@@ -1115,41 +1036,96 @@
"name": "event_edit_member_name",
"type": "VARCHAR",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_append_edit": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
"length": 1,
"length": 4,
"name": "event_append_edit",
"type": "TINYINT",
"unsigned": false,
"values": [],
"zerofill": false
"values": []
},
"event_edit_reason": {
"allow_null": true,
"auto_increment": false,
"comment": "",
"decimals": null,
"default": null,
"length": 255,
"name": "event_edit_reason",
"type": "VARCHAR",
"length": 255,
"decimals": null,
"values": null,
"allow_null": true,
"default": null,
"comment": "",
"unsigned": false,
"zerofill": false,
"values": []
},
"event_latitude": {
"allow_null": true,
"auto_increment": false,
"binary": false
"comment": "",
"decimals": 8,
"default": null,
"length": 10,
"name": "event_latitude",
"type": "DECIMAL",
"unsigned": false,
"values": []
},
"event_longitude": {
"allow_null": true,
"auto_increment": false,
"comment": "",
"decimals": 8,
"default": null,
"length": 11,
"name": "event_longitude",
"type": "DECIMAL",
"unsigned": false,
"values": []
},
"event_author_name": {
"allow_null": true,
"auto_increment": false,
"comment": "",
"decimals": null,
"default": null,
"length": 255,
"name": "event_author_name",
"type": "VARCHAR",
"length": 255,
"unsigned": false,
"values": []
},
"event_is_anon": {
"allow_null": false,
"auto_increment": false,
"comment": "",
"decimals": null,
"default": "0",
"length": 10,
"name": "event_is_anon",
"type": "INT",
"unsigned": true,
"values": []
},
"event_online": {
"name": "event_online",
"type": "TINYINT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": 0,
"comment": "",
"unsigned": true,
"auto_increment": false
},
"event_url": {
"name": "event_url",
"type": "VARCHAR",
"length": 250,
"decimals": null,
"values": null,
"allow_null": true,
@@ -1158,16 +1134,16 @@
"unsigned": false,
"auto_increment": false
},
"event_is_anon": {
"name": "event_is_anon",
"type": "INT",
"length": null,
"event_online_type": {
"name": "event_online_type",
"type": "VARCHAR",
"length": 250,
"decimals": null,
"values": null,
"allow_null": false,
"default": "0",
"allow_null": true,
"default": null,
"comment": "",
"unsigned": true,
"unsigned": false,
"auto_increment": false
}
},
@@ -1264,7 +1240,7 @@
"type": "key",
"name": "recurring_events",
"length": [
223,
164,
null,
null,
null,
+9 -4
View File
@@ -21,7 +21,7 @@
},
{
"key": "calendar_default_view",
"default": "month",
"default": "overview",
"report": "full"
},
{
@@ -50,8 +50,13 @@
"report": "full"
},
{
"key": "show_bday_calendar",
"default": "1",
"report": "full"
"key": "map_center_lat",
"default": "37.411022",
"report": "none"
},
{
"key": "map_center_lon",
"default": "-79.1429788",
"report": "none"
}
]
File diff suppressed because it is too large. Load diff
+48 -1
View File
@@ -460,5 +460,52 @@
"107011": "4.7.0 Beta 9",
"107012": "4.7.0 Beta 10",
"107013": "4.7.0",
"107014": "4.7.0"
"107014": "4.7.0",
"107015": "4.7.0",
"107016": "4.7.0",
"107017": "4.7.0",
"107018": "4.7.1 Beta 1",
"107019": "4.7.1 Beta 1",
"107020": "4.7.1 Beta 2",
"107021": "4.7.1",
"107022": "4.7.1",
"107023": "4.7.1",
"107024": "4.7.1",
"107025": "4.7.2 Beta 1",
"107026": "4.7.2 Beta 1",
"107027": "4.7.2 Beta 2",
"107028": "4.7.2 Beta 3",
"107029": "4.7.2 Beta 4",
"107030": "4.7.2 Beta 5",
"107031": "4.7.2 Beta 6",
"107032": "4.7.2",
"107033": "4.7.2",
"107034": "4.7.2.1",
"107035": "4.7.2.1",
"107036": "4.7.2.1",
"107037": "4.7.2.1",
"107038": "4.7.2.1",
"107300": "4.7.3 Beta 1",
"107301": "4.7.3 Beta 2",
"107302": "4.7.3 Beta 3",
"107303": "4.7.3 Beta 4",
"107304": "4.7.3",
"107305": "4.7.3",
"107306": "4.7.3",
"107307": "4.7.3",
"107400": "4.7.4 Beta 1",
"107401": "4.7.4 Beta 2",
"107402": "4.7.4 Beta 3",
"107403": "4.7.4",
"107404": "4.7.4",
"107405": "4.7.4",
"107406": "4.7.4",
"107500": "4.7.5 Beta 1",
"107501": "4.7.5",
"107502": "4.7.5",
"107503": "4.7.5",
"107504": "4.7.5",
"107505": "4.7.5",
"107600": "4.7.6 Beta 1",
"107601": "4.7.6"
}
-8
View File
@@ -1,12 +1,4 @@
{
"todaysBirthdays": {
"class": "\\IPS\\Widget\\StaticCache",
"restrict": [],
"default_area": "",
"allow_reuse": false,
"menu_style": "menu",
"embeddable": true
},
"upcomingEvents": {
"class": "\\IPS\\Widget\\PermissionCache",
"restrict": [
@@ -28,6 +28,11 @@ class _Calendar
*/
public $classes = array();
/**
* @brief Can be shown in similar content
*/
public $similarContent = FALSE;
/**
* Constructor
*
@@ -50,13 +50,12 @@ class _settings extends \IPS\Dispatcher\Controller
$form = new \IPS\Helpers\Form;
$form->add( new \IPS\Helpers\Form\Radio( 'calendar_default_view', \IPS\Settings::i()->calendar_default_view, TRUE, array( 'options' => array( 'month' => 'cal_df_month', 'week' => 'cal_df_week', 'day' => 'cal_df_day', 'stream' => 'cal_df_stream' ) ) ) );
$form->add( new \IPS\Helpers\Form\Radio( 'calendar_default_view', \IPS\Settings::i()->calendar_default_view, TRUE, array( 'options' => array( 'overview' => 'cal_df_overview', 'month' => 'cal_df_month', 'week' => 'cal_df_week', 'day' => 'cal_df_day' ) ) ) );
$options = array_combine( array_keys( \IPS\calendar\Date::$dateFormats ), array_map( function( $val ){ return "calendar_df_" . $val; }, array_keys( \IPS\calendar\Date::$dateFormats ) ) );
$form->add( new \IPS\Helpers\Form\Select( 'calendar_date_format', \IPS\Settings::i()->calendar_date_format, TRUE, array( 'options' => $options, 'unlimited' => '-1', 'unlimitedLang' => "calendar_custom_df", 'unlimitedToggles' => array( 'calendar_date_format_custom' ) ) ) );
$form->add( new \IPS\Helpers\Form\Text( 'calendar_date_format_custom', \IPS\Settings::i()->calendar_date_format_custom, FALSE, array(), NULL, NULL, NULL, 'calendar_date_format_custom' ) );
$form->add( new \IPS\Helpers\Form\YesNo( 'show_bday_calendar', \IPS\Settings::i()->show_bday_calendar ) );
$form->add( new \IPS\Helpers\Form\YesNo( 'ipb_calendar_mon', \IPS\Settings::i()->ipb_calendar_mon ) );
$form->add( new \IPS\Helpers\Form\YesNo( 'calendar_rss_feed', \IPS\Settings::i()->calendar_rss_feed, FALSE, array( 'togglesOn' => array( 'calendar_rss_feed_days', 'calendar_rss_feed_order' ) ) ) );
$form->add( new \IPS\Helpers\Form\Number( 'calendar_rss_feed_days', \IPS\Settings::i()->calendar_rss_feed_days, FALSE, array( 'unlimited' => -1 ), NULL, NULL, NULL, 'calendar_rss_feed_days' ) );
@@ -68,7 +67,13 @@ class _settings extends \IPS\Dispatcher\Controller
$form->add( new \IPS\Helpers\Form\YesNo( 'calendar_venues_enabled', \IPS\Settings::i()->calendar_venues_enabled ) );
$form->add( new \IPS\Helpers\Form\YesNo( 'calendar_block_past_changes', \IPS\Settings::i()->calendar_block_past_changes ) );
if( \IPS\GeoLocation::enabled() )
{
$form->add( new \IPS\Helpers\Form\Number( 'map_center_lat', \IPS\Settings::i()->map_center_lat, FALSE, array( 'decimals' => 8, 'min' => "-180", 'max' => "180" ), NULL, NULL, NULL, 'map_center_lat' ) );
$form->add( new \IPS\Helpers\Form\Number( 'map_center_lon', \IPS\Settings::i()->map_center_lon, FALSE, array( 'decimals' => 8, 'min' => "-180", 'max' => "180" ), NULL, NULL, NULL, 'map_center_lon' ) );
}
if ( $values = $form->values() )
{
if( $values['calendar_date_format'] == -1 AND !$values['calendar_date_format_custom'] )
@@ -53,7 +53,7 @@ class _rsvp extends \IPS\Dispatcher\Controller
foreach( array( 0,1,2 ) as $response )
{
$chart->addSeries( \IPS\Member::loggedIn()->language()->addToStack('calendar_stats_rsvp_response_' . $response ), 'number', 'COUNT(*)', FALSE );
$chart->addSeries( \IPS\Member::loggedIn()->language()->addToStack('calendar_stats_rsvp_response_' . $response ), 'number', 'COUNT(*)', FALSE, $response );
}
$chart->title = \IPS\Member::loggedIn()->language()->addToStack('calendar_stats_rsvp_title');
@@ -272,8 +272,6 @@ class _event extends \IPS\Content\Controller
*/
protected function downloadRsvp()
{
\IPS\Session::i()->csrfCheck();
$output = \IPS\Theme::i()->getTemplate( 'view' )->attendees( $this->event );
\IPS\Member::loggedIn()->language()->parseOutputForDisplay( $output );
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate( 'global', 'core' )->blankTemplate( $output ) );
@@ -121,8 +121,9 @@ class _view extends \IPS\Dispatcher\Controller
/* Otherwise use ACP default preference */
else
{
\IPS\Request::i()->view = \IPS\Settings::i()->calendar_default_view;
$method = "_view" . ucwords( \IPS\Settings::i()->calendar_default_view );
$this->$method( $jump, iterator_to_array( \IPS\calendar\Event::featured( 4, '_rand' ) ) );
$this->$method( $jump );
}
/* Online User Location */
@@ -140,10 +141,9 @@ class _view extends \IPS\Dispatcher\Controller
* Show month view
*
* @param \IPS\Helpers\Form $jump Calendar jump
* @param array $featured Featured events (only populated for the ACP-specified default view)
* @return void
*/
protected function _viewMonth( $jump, $featured=array() )
protected function _viewMonth( $jump )
{
/* Get the month data */
$day = NULL;
@@ -156,20 +156,6 @@ class _view extends \IPS\Dispatcher\Controller
try
{
$date = \IPS\calendar\Date::getDate( \IPS\Request::i()->y ?: NULL, \IPS\Request::i()->m ?: NULL, $day );
$showBirthday = FALSE;
/* Show birthdays if we're on the calendar landing page */
if ( $this->_calendar === NULL OR \count( $this->roots ) == 0 )
{
$showBirthday = TRUE;
}
/* show birthdays if there's only one calendar */
if ( \IPS\Request::i()->id AND $this->_calendar !== NULL OR \count( $this->roots ) == 1 )
{
$showBirthday = TRUE;
}
/* Get birthdays */
$birthdays = $showBirthday ? $date->getBirthdays( FALSE, TRUE ) : array();
/* Get the events within this range */
$events = \IPS\calendar\Event::retrieveEvents(
@@ -190,7 +176,7 @@ class _view extends \IPS\Dispatcher\Controller
}
/* Display */
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarMonth( $this->roots, $date, $featured, $birthdays, $events, $this->_today, $this->_calendar, $jump );
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarMonth( $this->roots, $date, $events, $this->_today, $this->_calendar, $jump );
if( \IPS\Request::i()->isAjax() )
{
@@ -206,7 +192,6 @@ class _view extends \IPS\Dispatcher\Controller
$this->_calendar,
$jump,
$date,
$featured,
$this->_downloadLinks()
);
}
@@ -216,10 +201,9 @@ class _view extends \IPS\Dispatcher\Controller
* Show week view
*
* @param \IPS\Helpers\Form $jump Calendar jump
* @param array $featured Featured events (only populated for the ACP-specified default view)
* @return void
*/
protected function _viewWeek( $jump, $featured=array() )
protected function _viewWeek( $jump )
{
/* Get the week data */
$week = \IPS\Request::i()->w ? explode( '-', \IPS\Request::i()->w ) : NULL;
@@ -245,9 +229,6 @@ class _view extends \IPS\Dispatcher\Controller
$days[] = \IPS\calendar\Date::getDate( $date->firstDayOfWeek('year'), $date->firstDayOfWeek('mon'), $date->firstDayOfWeek('mday') )->adjust( $i . ' days' );
}
/* Get birthdays */
$birthdays = ( $this->_calendar === NULL OR \count( $this->roots ) == 0 ) ? $date->getBirthdays( FALSE, TRUE ) : array();
/* Get the events within this range */
$events = \IPS\calendar\Event::retrieveEvents(
\IPS\calendar\Date::getDate( $date->firstDayOfWeek('year'), $date->firstDayOfWeek('mon'), $date->firstDayOfWeek('mday') ),
@@ -267,7 +248,7 @@ class _view extends \IPS\Dispatcher\Controller
}
/* Display */
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarWeek( $this->roots, $date, $featured, $birthdays, $events, $nextWeek, $lastWeek, $days, $this->_today, $this->_calendar, $jump );
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarWeek( $this->roots, $date, $events, $nextWeek, $lastWeek, $days, $this->_today, $this->_calendar, $jump );
if( \IPS\Request::i()->isAjax() )
{
@@ -289,8 +270,7 @@ class _view extends \IPS\Dispatcher\Controller
$this->roots,
$this->_calendar,
$jump,
$date,
$featured,
$date,
$this->_downloadLinks()
);
}
@@ -300,10 +280,9 @@ class _view extends \IPS\Dispatcher\Controller
* Show day view
*
* @param \IPS\Helpers\Form $jump Calendar jump
* @param array $featured Featured events (only populated for the ACP-specified default view)
* @return void
*/
protected function _viewDay( $jump, $featured=array() )
protected function _viewDay( $jump )
{
/* Get the day data */
try
@@ -318,23 +297,6 @@ class _view extends \IPS\Dispatcher\Controller
$tomorrow = clone $date->adjust( '+1 day' );
$yesterday = clone $date->adjust( '-1 day' );
/* Get birthdays */
if( isset( \IPS\Request::i()->show ) AND \IPS\Request::i()->show == 'birthdays' AND \IPS\Settings::i()->show_bday_calendar )
{
$table = new \IPS\Helpers\Table\Db( 'core_members', \IPS\Request::i()->url()->setQueryString('show', 'birthdays'), $date->getBirthdaysWhere( TRUE ) );
$table->sortBy = 'name';
$table->sortDirection = 'asc';
$table->tableTemplate = array( \IPS\Theme::i()->getTemplate( 'browse', 'calendar', 'front' ), 'birthdaysTable' );
$table->rowsTemplate = array( \IPS\Theme::i()->getTemplate( 'browse', 'calendar', 'front' ), 'birthday' );
\IPS\Output::i()->output = $table;
\IPS\Output::i()->metaTags['robots'] = 'noindex';
return;
}
$birthdayCount = \IPS\Settings::i()->show_bday_calendar ? $date->getBirthdays( TRUE, TRUE ) : [];
$birthdays = \IPS\Settings::i()->show_bday_calendar ? $date->getBirthdays( TRUE, FALSE ) : [];
/* Get the events within this range */
$events = \IPS\calendar\Event::retrieveEvents( clone $date, clone $date, $this->_calendar );
@@ -356,7 +318,7 @@ class _view extends \IPS\Dispatcher\Controller
{
$dayEvents['count']++;
if( $_event->all_day AND (
if( $_event->all_day AND ( $_event->nextOccurrence( $date, 'startDate' ) AND
$_event->nextOccurrence( $date, 'startDate' )->strFormat('%d') == $date->mday OR
$_event->nextOccurrence( $date, 'endDate' ) AND $_event->nextOccurrence( $date, 'endDate' )->strFormat('%d') == $date->mday
) )
@@ -365,7 +327,7 @@ class _view extends \IPS\Dispatcher\Controller
}
else
{
if( $_event->nextOccurrence( $date, 'startDate' )->strFormat('%d') == $date->mday )
if( $_event->nextOccurrence( $date, 'startDate' ) AND $_event->nextOccurrence( $date, 'startDate' )->strFormat('%d') == $date->mday )
{
$dayEvents[ $_event->_start_date->hours ][ $_event->id ] = $_event;
}
@@ -385,7 +347,7 @@ class _view extends \IPS\Dispatcher\Controller
}
/* Display */
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarDay( $this->roots, $date, $featured, $birthdays, $birthdayCount, $dayEvents, $tomorrow, $yesterday, $this->_today, $this->_calendar, $jump );
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarDay( $this->roots, $date, $dayEvents, $tomorrow, $yesterday, $this->_today, $this->_calendar, $jump );
if( \IPS\Request::i()->isAjax() )
{
@@ -399,8 +361,7 @@ class _view extends \IPS\Dispatcher\Controller
$this->roots,
$this->_calendar,
$jump,
$date,
$featured,
$date,
$this->_downloadLinks()
);
}
@@ -411,116 +372,6 @@ class _view extends \IPS\Dispatcher\Controller
*/
public $streamPerPage = 50;
/**
* Show stream view
*
* @param \IPS\Helpers\Form $jump Calendar jump
* @param array $featured Featured events (only populated for the ACP-specified default view)
* @return void
*/
protected function _viewStream( $jump, $featured=array() )
{
/* Get the month data */
$day = NULL;
if( ( !\IPS\Request::i()->y OR \IPS\Request::i()->y == $this->_today->year ) AND ( !\IPS\Request::i()->m OR \IPS\Request::i()->m == $this->_today->mon ) )
{
$day = $this->_today->mday;
}
try
{
$date = \IPS\calendar\Date::getDate( \IPS\Request::i()->y ?: NULL, \IPS\Request::i()->m ?: NULL, $day );
/* Get the events within this range */
$events = \IPS\calendar\Event::retrieveEvents(
\IPS\calendar\Date::getDate( $date->firstDayOfMonth('year'), $date->firstDayOfMonth('mon'), $date->firstDayOfMonth('mday') ),
\IPS\calendar\Date::getDate( $date->lastDayOfMonth('year'), $date->lastDayOfMonth('mon'), $date->lastDayOfMonth('mday'), 23, 59, 59 ),
$this->_calendar,
NULL,
FALSE
);
}
catch( \InvalidArgumentException $e )
{
\IPS\Output::i()->error( 'error_bad_date', '2L182/A', 403, '' );
}
/* Sort */
$startDate = \IPS\calendar\Date::getDate();
@usort( $events, function( $a, $b ) use ( $startDate )
{
if( $a->nextOccurrence( $startDate, 'startDate' ) === NULL )
{
return -1;
}
if( $b->nextOccurrence( $startDate, 'startDate' ) === NULL )
{
return 1;
}
if ( $a->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() == $b->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() )
{
return 0;
}
return ( $a->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() < $b->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() ) ? -1 : 1;
} );
/* Pagination */
$pagination = array(
'page' => ( isset( \IPS\Request::i()->page ) ) ? \IPS\Request::i()->page : 1,
'pages' => ( \count( $events ) > 0 ) ? ceil( \count( $events ) / $this->streamPerPage ) : 1,
'limit' => $this->streamPerPage
);
if( $pagination['page'] < 1 )
{
$pagination['page'] = 1;
}
/* If there are no events, tell search engines not to index the page but do NOT tell them not to follow links */
if( \count( $events ) === 0 )
{
\IPS\Output::i()->metaTags['robots'] = 'noindex';
}
else
{
$events = \array_slice( $events, ( $pagination['page'] - 1 ) * $this->streamPerPage, $this->streamPerPage );
}
/* Non-existent page */
if( $pagination['page'] > 1 AND !\count( $events ) )
{
\IPS\Output::i()->error( 'no_events_month', '2L182/B', 404, '' );
}
/* Display */
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarStream( $this->roots, $date, $featured, $events, $this->_calendar, $jump, $pagination );
if( \IPS\Request::i()->isAjax() )
{
\IPS\Output::i()->sendOutput( $output, 200, 'text/html' );
}
else
{
/* We can show the sidebar in stream view */
\IPS\Output::i()->sidebar['enabled'] = TRUE;
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack( 'cal_month_stream_title', FALSE, array( 'sprintf' => array( $date->monthName, $date->year ) ) );
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarWrapper(
$output,
$this->roots,
$this->_calendar,
$jump,
$date,
$featured,
$this->_downloadLinks()
);
}
}
/**
* Generate keyed links for RSS/iCal download
*
@@ -586,4 +437,514 @@ class _view extends \IPS\Dispatcher\Controller
return $form;
}
/**
* Overview
*
* @return void
*/
protected function _viewOverview()
{
$this->_today = \IPS\calendar\Date::getDate();
/* Featured events */
$featured = iterator_to_array( \IPS\calendar\Event::featured( 13, '_rand' ) );
/* If there are no featured get upcoming */
if( \count( $featured ) === 0 )
{
$featured = \IPS\calendar\Event::retrieveEvents(
$this->_today,
\IPS\calendar\Date::getDate()->adjust( "next year" ),
NULL,
3,
FALSE,
NULL,
NULL,
FALSE,
NULL,
TRUE
);
}
/* Events near me */
$location = NULL;
if( isset( \IPS\Request::i()->lat ) and isset( \IPS\Request::i()->lon ) )
{
$location = array( 'lat' => \IPS\Request::i()->lat, 'lon' => \IPS\Request::i()->lon );
}
else
{
/* Do an IP lookup */
try
{
$geo = \IPS\GeoLocation::getByIp( \IPS\Request::i()->ipAddress() );
$location = array( 'lat' => $geo->lat, 'lon' => $geo->long );
}
catch ( \Exception $e )
{
$location = array( 'lat' => \IPS\Settings::i()->map_center_lat, 'lon' => \IPS\Settings::i()->map_center_lon );
}
}
/* Get the calendars we can view */
$calendars = \IPS\Settings::i()->club_nodes_in_apps ? \IPS\calendar\Calendar::rootsWithClubs() : \IPS\calendar\Calendar::roots();
$nearme = \IPS\calendar\Event::retrieveEvents(
$this->_today,
\IPS\calendar\Date::getDate()->adjust( "next year" ),
NULL,
6,
FALSE,
NULL,
NULL,
FALSE,
$location,
FALSE
);
/* Set map markers */
$mapMarkers = array();
foreach ( $nearme as $event )
{
$mapMarkers[ $event->id ] = array( 'lat' => (float) $event->latitude, 'long' => (float) $event->longitude , 'title' => $event->title );
}
/* Are we just returning nearby events? */
if( \IPS\Request::i()->isAjax() && \IPS\Request::i()->get == 'nearMe' )
{
$output = \IPS\Theme::i()->getTemplate( 'events', 'calendar' )->nearMeContent( $nearme, $mapMarkers );
\IPS\Member::loggedIn()->language()->parseOutputForDisplay( $output );
$toReturn = array(
'content' => $output,
'lat' => (float) $location['lat'],
'long' => (float) $location['lon']
);
\IPS\Output::i()->sendOutput( json_encode($toReturn), 200, 'application/json' );
return;
}
/* By month */
$day = NULL;
if( ( !\IPS\Request::i()->y OR \IPS\Request::i()->y == $this->_today->year ) AND ( !\IPS\Request::i()->m OR \IPS\Request::i()->m == $this->_today->mon ) )
{
$day = $this->_today->mday;
}
try
{
$date = \IPS\calendar\Date::getDate( \IPS\Request::i()->y ?: NULL, \IPS\Request::i()->m ?: NULL, $day );
/* Get the events within this range */
$events = \IPS\calendar\Event::retrieveEvents(
\IPS\calendar\Date::getDate( $date->firstDayOfMonth('year'), $date->firstDayOfMonth('mon'), $date->firstDayOfMonth('mday') ),
\IPS\calendar\Date::getDate( $date->lastDayOfMonth('year'), $date->lastDayOfMonth('mon'), $date->lastDayOfMonth('mday'), 23, 59, 59 ),
NULL,
NULL,
FALSE,
NULL,
NULL,
FALSE
);
}
catch( \InvalidArgumentException $e )
{
\IPS\Output::i()->error( 'error_bad_date', '', 403, '' ); //@todo
}
/* Sort */
$startDate = \IPS\calendar\Date::getDate();
@usort( $events, function( $a, $b ) use ( $startDate )
{
if( $a->nextOccurrence( $startDate, 'startDate' ) === NULL )
{
return -1;
}
if( $b->nextOccurrence( $startDate, 'startDate' ) === NULL )
{
return 1;
}
if ( $a->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() == $b->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() )
{
return 0;
}
return ( $a->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() < $b->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() ) ? -1 : 1;
} );
/* Pagination */
$offset = isset( \IPS\Request::i()->offset ) ? min( array( \IPS\Request::i()->offset, \count( $events ) ) ) : 0;
/* If there are no events, tell search engines not to index the page but do NOT tell them not to follow links */
if( \count( $events ) === 0 )
{
\IPS\Output::i()->metaTags['robots'] = 'noindex';
}
else
{
$events = \array_slice( $events, $offset, $this->streamPerPage );
}
/* Return events if we're after those specifically */
if( \IPS\Request::i()->isAjax() && \IPS\Request::i()->get == 'byMonth' )
{
$eventHtml = "";
if( \count( $events ) )
{
foreach( $events as $idx => $event )
{
$eventHtml .= \IPS\Theme::i()->getTemplate( 'events', 'calendar' )->event( $event );
}
}
else
{
$eventHtml = \IPS\Theme::i()->getTemplate( 'events', 'calendar' )->noEvents();
}
\IPS\Member::loggedIn()->language()->parseOutputForDisplay( $eventHtml );
$toReturn = array(
'count' => \count( $events ),
'html' => $eventHtml
);
\IPS\Output::i()->sendOutput( json_encode( $toReturn ), 200, 'application/json' );
return;
}
/* Non-existent page */
if( $offset > 0 && !\count( $events ) )
{
\IPS\Output::i()->error( 'no_events_month', '2L182/B', 404, '' );
}
/* Clone date so we can update time without affecting other areas on this page */
$startTime = clone $date;
$endTime = clone $date;
$startTime->setTime(0,0,0);
$endTime->setTime(23,59,59);
/* Online */
$online = \IPS\calendar\Event::retrieveEvents(
$startTime,
NULL,
NULL,
NULL,
FALSE,
NULL,
NULL,
FALSE,
NULL,
TRUE
);
/* Build an array of month objects for the nav */
$months = new \DatePeriod( (new \DateTime)->setDate( date('Y'), date('m'), 1 ), new \DateInterval( 'P1M' ), 11 );
$stream = \IPS\Theme::i()->getTemplate( 'overview', 'calendar' )->byMonth( $calendars, $date, $featured, $events, NULL, $months );
$form = $this->getForm();
$date = \IPS\calendar\Date::getDate();
if( \IPS\Request::i()->isAjax() )
{
\IPS\Output::i()->sendOutput( $stream, 200, 'text/html' );
}
else
{
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_overview.js', 'calendar', 'front' ) );
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack( '__app_calendar' );
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'overview' )->wrapper( $featured, $nearme, $stream, $form, $mapMarkers, $online, $date );
}
}
/**
* Build search form
*
* @return \IPS\Helpers\Form
*/
public function getForm()
{
/* Search form */
$form = new \IPS\Helpers\Form('form', 'search', \IPS\Http\Url::internal( 'app=calendar&module=calendar&controller=view&do=search' ) );
if ( \IPS\GeoLocation::enabled() )
{
$form->add( new \IPS\Helpers\Form\Text( 'location', FALSE, \IPS\Request::i()->location, array( 'placeholder' => \IPS\Member::loggedIn()->language()->addToStack( 'events_search_search_location') ) ) );
}
$form->add( new \IPS\Helpers\Form\DateRange( 'date', array( 'start' => NULL, 'end' => NULL ), FALSE, array() ) );
$form->add( new \IPS\Helpers\Form\Select( 'show', 'all', FALSE, array( 'options' => array('all' => \IPS\Member::loggedIn()->language()->addToStack( 'all_events' ), 'online' => \IPS\Member::loggedIn()->language()->addToStack( 'online_events' ), 'physical' => \IPS\Member::loggedIn()->language()->addToStack( 'physical_events' ) ) ) ) );
return $form;
}
/**
* Search
*
* @return void
*/
protected function search()
{
\IPS\Output::i()->bypassCsrfKeyCheck = TRUE;
$results = array();
/* Build the search form */
$form = $this->getForm();
if( $values = $form->values() )
{
$select = "calendar_events.*, core_clubs.name";
$sort = 'event_start_date asc';
$location = NULL;
$having = array();
$where = array();
$where[] = array( 'event_approved=?', 1 );
$searchNearLocation = FALSE; // Should results be limited to near the provided location only? If not, we'll just use location to allow sorting.
if( isset( \IPS\Request::i()->searchNearLocation ) && \IPS\Request::i()->searchNearLocation )
{
$searchNearLocation = TRUE;
}
if( \IPS\GeoLocation::enabled() )
{
if( \IPS\Request::i()->location )
{
/* Is it a location? */
$locations = static::geocodeLocation( \IPS\Request::i()->location, FALSE );
if( \is_array( $locations ) and \count( $locations ) )
{
if( $locations[0]['value'] )
{
$having[] = "( event_title LIKE CONCAT( '%', '" . $locations[0]['value'] . "', '%' ) OR name LIKE CONCAT( '%', '" . $locations[0]['value'] . "', '%' ) )";
}
$location = array( 'lat' => $locations[0]['lat'], 'lon' => $locations[0]['long'] );
$searchNearLocation = TRUE;
}
else
{
$having[] = "( event_title LIKE CONCAT( '%', '" . \IPS\Request::i()->location . "', '%' ) OR name LIKE CONCAT( '%', '" . \IPS\Request::i()->location . "', '%' ) )";
}
}
else if ( isset( \IPS\Request::i()->lat ) and isset( \IPS\Request::i()->lon ) and \IPS\Request::i()->lat !== 0 and \IPS\Request::i()->lon !== 0 )
{
$location = array( 'lat' => \IPS\Request::i()->lat, 'lon' => \IPS\Request::i()->lon );
$searchNearLocation = TRUE;
}
elseif( $searchNearLocation )
{
/* Do an IP lookup */
try
{
$geo = \IPS\GeoLocation::getByIp( \IPS\Request::i()->ipAddress() );
$location = array( 'lat' => $geo->lat, 'lon' => $geo->long );
}
catch ( \Exception $e )
{
$location = array( 'lat' => \IPS\Settings::i()->map_center_lat, 'lon' => \IPS\Settings::i()->map_center_lon );
}
}
if ( \is_array( $location ) and isset( $location['lat'] ) and isset( $location['lon'] ) and is_numeric( $location['lat'] ) and is_numeric( $location['lon'] ) )
{
$select = $select . ', ( 3959 * acos( cos( radians(' . $location['lat'] . ') ) * cos( radians( event_latitude ) ) * cos( radians( event_longitude ) - radians(' . $location['lon'] . ') ) + sin( radians(' . $location['lat'] . ') ) * sin(radians(event_latitude)) ) ) AS distance';
if( $searchNearLocation )
{
$having[] = 'distance < 500';
}
}
}
$sort = 'event_start_date asc';
if( isset( \IPS\Request::i()->sortBy ) && \IPS\Request::i()->sortBy == 'nearest' && $location )
{
$sort = 'distance asc';
}
/* Filter? */
if( isset( \IPS\Request::i()->show ) && \IPS\Request::i()->show !== 'all' )
{
if( \IPS\Request::i()->show == 'online' )
{
$where[] = array( '( event_online = 1 )' );
}
else {
$where[] = array( '( ( event_end_date IS NULL OR TIMESTAMPDIFF( DAY, event_start_date, event_end_date ) < ? ) AND event_online = 0)', 30 );
}
}
$today = new \IPS\calendar\Date;
$member = \IPS\Member::loggedIn();
$startDate = \IPS\calendar\Date::dateTimeToCalendarDate( $values['date']['start'] ?: $today );
$endDate = $values['date']['end'] ? \IPS\calendar\Date::dateTimeToCalendarDate( $values['date']['end'] ) : NULL;
/* Get timezone adjusted versions of start/end time */
$startDateTimezone = \IPS\calendar\Date::parseTime( $startDate->mysqlDatetime(), TRUE );
$endDateTimezone = ( $endDate !== NULL ) ? \IPS\calendar\Date::parseTime( $endDate->mysqlDatetime() ) : NULL;
if ( $member->timezone )
{
$startDateTimezone->setTimezone( new \DateTimeZone( 'UTC' ) );
if( $endDateTimezone !== NULL )
{
$endDateTimezone->setTimezone( new \DateTimeZone( 'UTC' ) );
}
}
if( $endDate !== NULL AND $startDate == $endDate )
{
$where[] = array(
'(
( event_end_date IS NULL AND DATE( event_start_date ) = ? AND event_all_day=1 )
OR
( event_end_date IS NOT NULL AND DATE( event_start_date ) <= ? AND DATE( event_end_date ) >= ? AND event_all_day=1 )
OR
( event_end_date IS NULL AND event_start_date >= ? AND event_start_date <= ? AND event_all_day=0 )
OR
( event_end_date IS NOT NULL AND event_start_date <= ? AND event_end_date >= ? AND event_all_day=0 )
)',
$startDate->mysqlDatetime( FALSE ),
$endDate->mysqlDatetime( FALSE ),
$startDate->mysqlDatetime( FALSE ),
$startDateTimezone->mysqlDatetime(),
$startDateTimezone->adjust('+1 day')->mysqlDatetime(),
$endDateTimezone->adjust('+1 day')->mysqlDatetime(),
$startDateTimezone->mysqlDatetime()
);
}
elseif( $endDate !== NULL )
{
$where[] = array(
'(
( event_end_date IS NULL AND DATE( event_start_date ) >= ? AND DATE( event_start_date ) <= ? AND event_all_day=1 )
OR
( event_end_date IS NOT NULL AND DATE( event_start_date ) <= ? AND DATE( event_end_date ) >= ? AND event_all_day=1 )
OR
( event_end_date IS NULL AND event_start_date >= ? AND event_start_date <= ? AND event_all_day=0 )
OR
( event_end_date IS NOT NULL AND event_start_date <= ? AND event_end_date >= ? AND event_all_day=0 )
)',
$startDate->mysqlDatetime( FALSE ),
$endDate->mysqlDatetime( FALSE ),
$endDate->mysqlDatetime( FALSE ),
$startDate->mysqlDatetime( FALSE ),
$startDateTimezone->mysqlDatetime(),
$endDateTimezone->mysqlDatetime(),
$endDateTimezone->mysqlDatetime(),
$startDateTimezone->mysqlDatetime()
);
}
else
{
$where[] = array(
"(
( DATE( event_start_date ) >= ? AND event_all_day=1 )
OR
( event_start_date >= ? AND event_all_day=0 )
OR
( event_end_date IS NOT NULL AND DATE( event_start_date ) <= ? AND DATE( event_end_date ) >= ? AND event_all_day=1 )
OR
( event_end_date IS NOT NULL AND event_start_date <= ? AND event_end_date >= ? AND event_all_day=0 )
)",
$startDate->mysqlDatetime( FALSE ),
$startDateTimezone->mysqlDatetime(),
$startDate->mysqlDatetime( FALSE ),
$startDate->mysqlDatetime( FALSE ),
$startDateTimezone->adjust('+1 day')->mysqlDatetime(),
$startDateTimezone->mysqlDatetime()
);
}
$offset = isset( \IPS\Request::i()->offset ) ? \intval( \IPS\Request::i()->offset ) : 0;
$limit = isset( \IPS\Request::i()->limit ) ? min( array( \intval( \IPS\Request::i()->limit ), 50 ) ) : 20;
$query = \IPS\Db::i()->select( $select, 'calendar_events', $where, $sort, array( $offset, $limit ), NULL, implode( " OR ", $having ) );
$query->join( 'calendar_calendars', "event_calendar_id = cal_id" );
$query->join( 'core_clubs', "cal_club_id = id" );
$results = new \IPS\Patterns\ActiveRecordIterator( $query, '\IPS\calendar\Event' );
}
$mapMarkers = array();
foreach ( $results as $event )
{
if( $event->latitude and $event->longitude )
{
$mapMarkers[ $event->id ] = array( 'lat' => (float) $event->latitude, 'long' => (float) $event->longitude , 'title' => $event->title );
}
}
if( \IPS\Request::i()->isAjax() ){
$countQuery = \IPS\Db::i()->select( $select, 'calendar_events', $where, NULL, array(), NULL, implode( " OR ", $having ) );
$countQuery->join( 'calendar_calendars', "event_calendar_id = cal_id" );
$countQuery->join( 'core_clubs', "cal_club_id = id" );
$output = \IPS\Theme::i()->getTemplate( 'events' )->searchResults( $results );
\IPS\Member::loggedIn()->language()->parseOutputForDisplay( $output );
$toReturn = array(
'totalCount' => $countQuery->count(),
'count' => \count( $results ),
'content' => $output,
'markers' => $mapMarkers,
'blurb' => '', // @todo
'online' => ( \IPS\Request::i()->show == 'online' )
);
\IPS\Output::i()->sendOutput( json_encode( $toReturn ), 200, 'application/json' );
return;
}
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack( '__app_calendar' );
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'overview' )->search( $form, $results, json_encode( $mapMarkers ) );
}
/**
* Geocode Location
*
* @param string $input Location search term
* @param bool $asJson Return type
* @return array|string
*/
public static function geocodeLocation( $input = NULL, $asJson = TRUE )
{
$items = array();
try
{
$geolocation = \IPS\GeoLocation::geocodeLocation( $input );
if( $geolocation instanceof \IPS\GeoLocation )
{
$items[] = array(
'value' => $geolocation->placeName,
'html' => $geolocation->placeName,
'lat' => $geolocation->lat,
'long' => $geolocation->long
);
}
}
catch( \BadFunctionCallException ){}
if( $asJson )
{
\IPS\Output::i()->json( $items );
}
else
{
return $items;
}
}
}
@@ -0,0 +1,24 @@
{
"id": 107015,
"name": "4.7.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
}
Loaded 100 of 1085 files, more files were not shown because too many files have changed in this diff. Show more