Version 5.0.0 beta 7
This commit is contained in:
1 parent
fa2a720105
commit
54d5dcd0a0
156 files changed
+4337
-2995
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language>
|
||||
<app key="core" version="5000032">
|
||||
<app key="core" version="5000034">
|
||||
<word key="__app_core" js="0">System</word>
|
||||
<word key="__indefart_personal_conversation" js="0">a personal conversation</word>
|
||||
<word key="__indefart_personal_conversation_message" js="0">a message in a personal conversation</word>
|
||||
@@ -127,7 +127,7 @@
|
||||
<word key="loc_logging_in_action" js="0">%s is logging in</word>
|
||||
<word key="ignoring_content" js="0">You've chosen to ignore content by %s.</word>
|
||||
<word key="ignoring_signatures" js="0">You've chosen to ignore signatures by %s.</word>
|
||||
<word key="front_logged_in_as" js="0"><![CDATA[%s <strong>as</strong>]]></word>
|
||||
<word key="front_logged_in_as" js="0">%s as</word>
|
||||
<word key="number_to_show" js="0">Number to show</word>
|
||||
<word key="devices_to_show" js="0">Devices</word>
|
||||
<word key="show_on_all_devices" js="0">Show on all devices?</word>
|
||||
@@ -211,6 +211,7 @@
|
||||
<word key="post_before_register_submission_cancelled" js="0">Your submission and email address has been removed</word>
|
||||
<word key="pbr_row_not_found" js="0">We could not locate your submission details.</word>
|
||||
<word key="view_all" js="0">View all</word>
|
||||
<word key="author_stats_cannot_load" js="0">Cannot load author stats at this time.</word>
|
||||
<word key="mobile_menu_account" js="0">Account</word>
|
||||
<word key="mobile_menu_more" js="0">More</word>
|
||||
<word key="mobile_menu_sections" js="0">Sections</word>
|
||||
@@ -727,7 +728,6 @@
|
||||
<word key="mark_as" js="0">Mark as</word>
|
||||
<word key="byline_name_date" js="0"><![CDATA[%s · %s]]></word>
|
||||
<word key="byline" js="0">By %s</word>
|
||||
<word key="byline_itemprop" js="0">%s, </word>
|
||||
<word key="byline_nodate" js="0">%s</word>
|
||||
<word key="byline_nodate_itemprop" js="0">By %s</word>
|
||||
<word key="byline_merge" js="0"><![CDATA[<span>By %s, %s</span>]]></word>
|
||||
@@ -2268,7 +2268,7 @@
|
||||
<word key="prunetable_prune_follows" js="0">follows</word>
|
||||
<word key="prunetable_prune_member_history" js="0">member history</word>
|
||||
<word key="profile_solutions" js="0">Solutions</word>
|
||||
<word key="solutionlog_show_activity" js="0">See answers</word>
|
||||
<word key="solutionlog_show_activity" js="0">See all answers</word>
|
||||
<word key="member_solutions" js="0">Answers from %s</word>
|
||||
<word key="solution_headline" js="0"><![CDATA[%s's <a href='%s'>%s</a> in <a href='%s'>%s</a> was marked as the answer]]></word>
|
||||
<word key="profile_reputation" js="0">Reputation</word>
|
||||
@@ -4194,8 +4194,8 @@
|
||||
<word key="ipb_embed_url_header" js="0">Custom iframes</word>
|
||||
<word key="ipb_embed_url_filter_option" js="0">Allow links to be converted to iframes?</word>
|
||||
<word key="ipb_embed_url_filter_option_desc" js="0">When this is enabled, users with permission will see a button to convert the link to an iframe if the URL's Domain is allowed.</word>
|
||||
<word key="ipb_embed_url_whitelist" js="0">Allowed Domains</word>
|
||||
<word key="ipb__embed_url_whitelist_desc" js="0">Use * as a wildcard. e.g. 'http://*.example.com/*'</word>
|
||||
<word key="ipb_embed_url_whitelist" js="0">Allowed Domain Patterns</word>
|
||||
<word key="ipb_embed_url_whitelist_desc" js="0"><![CDATA[Use <code>*</code> as a wildcard. Note that subdomains must be explicitly specified in a pattern to be allowed. For example, the pattern <code>google.com</code> would not allow https://www.google.com/, but <code>*.google.com</code> or <code>www.google.com</code> would. This setting only applies when saving new content and edits in the future.]]></word>
|
||||
<word key="embed_url_filter_any_action" js="0">Moderate iframes in Posts</word>
|
||||
<word key="embed_url_filter_any_allow" js="0">Allow</word>
|
||||
<word key="embed_url_filter_any_allow_desc" js="0">Any iframe can be directly posted.</word>
|
||||
@@ -7036,9 +7036,9 @@
|
||||
<word key="leaderboard_in_all_apps" js="0">in all areas</word>
|
||||
<word key="leaderboard_in_app" js="0">in %s</word>
|
||||
<word key="popular_no_member_results" js="0">There are no members to show</word>
|
||||
<word key="profile_you_won" js="0"><![CDATA[You last won the day on <span style='display:inline-block'>%s</span>]]></word>
|
||||
<word key="profile_member_won" js="0"><![CDATA[%s last won the day on <span style='display:inline-block'>%s</span>]]></word>
|
||||
<word key="profile_you_congrats" js="0">Congratulations, you had the most liked content!</word>
|
||||
<word key="profile_you_won" js="0">You had the most liked content on %s</word>
|
||||
<word key="profile_member_won" js="0">They last won the day on %s</word>
|
||||
<word key="profile_you_congrats" js="0">Congratulations!</word>
|
||||
<word key="profile_member_congrats" js="0">%s had the most liked content!</word>
|
||||
<word key="members_days_won_count" js="0">Days Won</word>
|
||||
<word key="members_days_won_count_desc" js="0">The number of times %s had the most number of content likes for a day</word>
|
||||
@@ -9522,6 +9522,10 @@ In PHP8, altering overloaded method signatures within a subclass results in a fa
|
||||
<word key="menu_manager_menutype_smallscreen" js="0">Small screen menu (mobile devices, etc)</word>
|
||||
<word key="menu_manager_icon" js="0">Icon</word>
|
||||
<word key="menu_manager_icon_desc" js="0">You may pick a custom icon for this menu item. If none is selected, a context relevant default icon may be used.</word>
|
||||
<word key="menu_title_node_type" js="0">Title</word>
|
||||
<word key="menu_title_node_inherit" js="0">Use the node name.</word>
|
||||
<word key="menu_title_node_custom" js="0">I will enter a different title.</word>
|
||||
<word key="menu_title_node" js="0">Title</word>
|
||||
<word key="open_in_ide" js="0">Open in IDE</word>
|
||||
<word key="not_in_dev" js="0">You must be in developer mode to use this tool.</word>
|
||||
<word key="dev_build" js="0">Build for release</word>
|
||||
@@ -12124,5 +12128,6 @@ In PHP8, altering overloaded method signatures within a subclass results in a fa
|
||||
<word key="editor_font_type_generic" js="1">OS Native</word>
|
||||
<word key="moderator_alert_reply_ready" js="1">Your reply has been sent</word>
|
||||
<word key="moderator_alert_reply_view" js="1">View Reply</word>
|
||||
<word key="ips.ui.controls.cannot_load" js="1">This content cannot be loaded at this time.</word>
|
||||
</app>
|
||||
</language>
|
||||
+497
-471
File diff suppressed because it is too large.
Load diff
@@ -281,5 +281,7 @@
|
||||
"5000029": "5.0.0 Beta 3",
|
||||
"5000030": "5.0.0 Beta 4",
|
||||
"5000031": "5.0.0 Beta 5",
|
||||
"5000032": "5.0.0 Beta 6"
|
||||
"5000032": "5.0.0 Beta 6",
|
||||
"5000033": "5.0.0 Beta 7",
|
||||
"5000034": "5.0.0 Beta 7"
|
||||
}
|
||||
@@ -24,6 +24,7 @@ use IPS\Node\Model;
|
||||
use IPS\Text\Parser;
|
||||
use LogicException;
|
||||
use function defined;
|
||||
use function is_array;
|
||||
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
@@ -141,7 +142,7 @@ class Alert extends EditorLocationsAbstract
|
||||
/* Update */
|
||||
try
|
||||
{
|
||||
if( $callback[1] == 'parseStatic' )
|
||||
if( is_array( $callback ) and $callback[1] == 'parseStatic' )
|
||||
{
|
||||
$rebuilt = $callback( $alert['alert_content'], Member::load( $alert['alert_member_id'] ), FALSE, 'core_Alert' );
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ use LogicException;
|
||||
use OutOfRangeException;
|
||||
use function count;
|
||||
use function defined;
|
||||
use function is_array;
|
||||
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
@@ -193,7 +194,7 @@ class CustomField extends EditorLocationsAbstract
|
||||
$rebuilt = FALSE;
|
||||
try
|
||||
{
|
||||
if( $callback[1] == 'parseStatic' )
|
||||
if( is_array( $callback ) and $callback[1] == 'parseStatic' )
|
||||
{
|
||||
$rebuilt = $callback( $member[ $fieldId ], Member::load( $member['member_id'] ), FALSE, 'core_ProfileField', $member['member_id'] );
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ use IPS\Text\Parser;
|
||||
use LogicException;
|
||||
use function count;
|
||||
use function defined;
|
||||
use function is_array;
|
||||
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
@@ -155,7 +156,7 @@ class Modcp extends EditorLocationsAbstract
|
||||
{
|
||||
try
|
||||
{
|
||||
if( $callback[1] == 'parseStatic' )
|
||||
if( is_array( $callback ) and $callback[1] == 'parseStatic' )
|
||||
{
|
||||
$update[ $k ] = $callback( $log[ $k ], Member::load( $log['wl_moderator'] ), FALSE, 'core_Modcp', $log['wl_id'], NULL, ( $k == 'wl_note_member' ? 'member' : 'mod' ) );
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ use IPS\Text\Parser;
|
||||
use LogicException;
|
||||
use OutOfRangeException;
|
||||
use function count;
|
||||
use function is_array;
|
||||
use function defined;
|
||||
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
@@ -150,7 +151,7 @@ class Reports extends EditorLocationsAbstract
|
||||
|
||||
try
|
||||
{
|
||||
if( $callback[1] == 'parseStatic' )
|
||||
if( is_array( $callback ) and $callback[1] == 'parseStatic' )
|
||||
{
|
||||
$update['report'] = $callback( $report['report'], Member::load( $report['report_by'] ), FALSE, 'core_Reports', $report['id'], NULL, NULL );
|
||||
}
|
||||
@@ -183,7 +184,7 @@ class Reports extends EditorLocationsAbstract
|
||||
|
||||
try
|
||||
{
|
||||
if( $callback[1] == 'parseStatic' )
|
||||
if( is_array( $callback ) and $callback[1] == 'parseStatic' )
|
||||
{
|
||||
$updateComment = $callback( $comment['comment'], Member::load( $comment['comment_by'] ), FALSE, 'core_Reports', $comment['id'], NULL, NULL );
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ use IPS\Text\LegacyParser;
|
||||
use IPS\Text\Parser;
|
||||
use LogicException;
|
||||
use function defined;
|
||||
use function is_array;
|
||||
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
@@ -142,7 +143,7 @@ class Signatures extends EditorLocationsAbstract
|
||||
/* Update */
|
||||
try
|
||||
{
|
||||
if( $callback[1] == 'parseStatic' )
|
||||
if( is_array( $callback ) and $callback[1] == 'parseStatic' )
|
||||
{
|
||||
$rebuilt = LegacyParser::parseStatic( $member['signature'], Member::load( $member['member_id'] ), FALSE, 'core_Signatures', $member['member_id'] );
|
||||
}
|
||||
|
||||
@@ -14,8 +14,11 @@ namespace IPS\core\extensions\core\FrontNavigation;
|
||||
use IPS\Content;
|
||||
use IPS\Content\Search\SearchContent;
|
||||
use IPS\core\FrontNavigation\FrontNavigationAbstract;
|
||||
use IPS\Helpers\Form\Radio;
|
||||
use IPS\Helpers\Form\Select;
|
||||
use IPS\Helpers\Form\Node as NodeForm;
|
||||
use IPS\Helpers\Form\Translatable;
|
||||
use IPS\Lang;
|
||||
use IPS\Node\Model;
|
||||
use IPS\Http\Url;
|
||||
use IPS\Member;
|
||||
@@ -117,6 +120,14 @@ class Node extends FrontNavigationAbstract
|
||||
*/
|
||||
public function title(): string
|
||||
{
|
||||
if( isset( $this->configuration['menu_title_node_type'] ) and $this->configuration['menu_title_node_type'] == 1 )
|
||||
{
|
||||
if( Member::loggedIn()->language()->checkKeyExists( 'menu_item_' . $this->id ) )
|
||||
{
|
||||
return Member::loggedIn()->language()->addToStack( 'menu_item_' . $this->id );
|
||||
}
|
||||
}
|
||||
|
||||
return (string) $this->node?->_title;
|
||||
}
|
||||
|
||||
@@ -182,7 +193,7 @@ class Node extends FrontNavigationAbstract
|
||||
$fields[] = new Select( 'menu_node_content_classes', $existingConfiguration['selected'] ?? null, null, array( 'options' => $classes, 'toggles' => $classToggles ), null, null, null, 'classes' );
|
||||
|
||||
/* Nodes */
|
||||
foreach ( $classToggles as $class => $id )
|
||||
foreach ( $classToggles as $class => $classId )
|
||||
{
|
||||
if ( isset( $class::$containerNodeClass ) )
|
||||
{
|
||||
@@ -212,6 +223,9 @@ class Node extends FrontNavigationAbstract
|
||||
}
|
||||
}
|
||||
|
||||
$fields[] = new Radio( 'menu_title_node_type', $existingConfiguration['menu_title_node_type'] ?? 0, NULL, array( 'options' => array( 0 => 'menu_title_node_inherit', 1 => 'menu_title_node_custom' ), 'toggles' => array( 1 => array( 'menu_title_node' ) ) ), NULL, NULL, NULL, 'menu_title_node_type' );
|
||||
$fields[] = new Translatable( 'menu_title_node', NULL, NULL, array( 'app' => 'core', 'key' => $id ? "menu_item_{$id}" : NULL ), NULL, NULL, NULL, 'menu_title_node' );
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
@@ -225,7 +239,16 @@ class Node extends FrontNavigationAbstract
|
||||
public static function parseConfiguration( array $configuration, int $id ): array
|
||||
{
|
||||
$class = $configuration['menu_node_content_classes'];
|
||||
$return = [ 'nodeClass' => $class::$containerNodeClass, 'selected' => $class ];
|
||||
$return = [
|
||||
'nodeClass' => $class::$containerNodeClass,
|
||||
'selected' => $class,
|
||||
'menu_title_node_type' => $configuration['menu_title_node_type'] ?? 0
|
||||
];
|
||||
|
||||
if( $configuration['menu_title_node_type'] == 1 and $configuration['menu_title_node'] )
|
||||
{
|
||||
Lang::saveCustom( 'core', 'menu_item_' . $id, $configuration['menu_title_node'] );
|
||||
}
|
||||
|
||||
foreach( $configuration as $field => $value )
|
||||
{
|
||||
|
||||
@@ -105,6 +105,7 @@ class PruneLargeTable extends QueueAbstract
|
||||
public function postComplete( array $data, bool $processed = TRUE ) : void
|
||||
{
|
||||
/* If this was pruning follows, make sure to clear the follow count cache so it can rebuild */
|
||||
$data = json_decode( $data['data'], true );
|
||||
if( $data['setting'] == 'prune_follows' )
|
||||
{
|
||||
Db::i()->delete( 'core_follow_count_cache' );
|
||||
|
||||
@@ -152,7 +152,7 @@ class RebuildImageProxy extends QueueAbstract
|
||||
Store::i()->currentImageProxyRebuild = array( $classname, $item->$idColumn );
|
||||
|
||||
/* Only run an update if the content has actually changed */
|
||||
if( mb_strpos( $item->$contentColumn, 'imageproxy.php' ) AND $newContent = Parser::removeImageProxy( $item->$contentColumn, !$data['cachePeriod'] ) AND $newContent != $item->$contentColumn )
|
||||
if( $item->$contentColumn and mb_strpos( $item->$contentColumn, 'imageproxy.php' ) AND $newContent = Parser::removeImageProxy( $item->$contentColumn, !$data['cachePeriod'] ) AND $newContent != $item->$contentColumn )
|
||||
{
|
||||
$item->$contentColumn = $newContent;
|
||||
|
||||
|
||||
@@ -85,6 +85,7 @@ class RebuildImageProxyNonContent extends QueueAbstract
|
||||
*/
|
||||
public function run( array &$data, int $offset ): int
|
||||
{
|
||||
$did = 0;
|
||||
foreach( Application::allExtensions( 'core', 'EditorLocations', FALSE, NULL, NULL, TRUE ) as $_key => $extension )
|
||||
{
|
||||
if( $_key != $data['extension'] )
|
||||
|
||||
@@ -16,6 +16,7 @@ use IPS\Request;
|
||||
define( 'REPORT_EXCEPTIONS', TRUE);
|
||||
require_once '../../../../init.php';
|
||||
|
||||
Output::i()->bypassDataLayer = true;
|
||||
$badgeID = Request::i()->icon;
|
||||
$cacheHeaders = ( !\IPS\IN_DEV ) ? Output::getCacheHeaders( time(), 360 ) : array();
|
||||
|
||||
|
||||
@@ -65,6 +65,7 @@ use function intval;
|
||||
use function is_array;
|
||||
use function is_int;
|
||||
use function method_exists;
|
||||
use function strrpos;
|
||||
use function strtoupper;
|
||||
use function substr;
|
||||
use function trim;
|
||||
@@ -1914,11 +1915,21 @@ class support extends Controller
|
||||
{
|
||||
foreach( $listeners as $class )
|
||||
{
|
||||
if( !class_exists( $class ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach( get_class_methods( $class ) as $method )
|
||||
{
|
||||
if( substr( $method, 0, 2 ) == 'on' and !in_array( $method, $events ) )
|
||||
if( substr( $method, 0, 2 ) == 'on' )
|
||||
{
|
||||
$events[] = $method;
|
||||
$parentClass = get_parent_class( $class );
|
||||
$method = substr( $parentClass, strrpos( $parentClass, '\\' ) + 1 ) . ': ' . $method;
|
||||
if( !in_array( $method, $events ) )
|
||||
{
|
||||
$events[] = $method;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,6 +67,33 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
*/
|
||||
class ajax extends Controller
|
||||
{
|
||||
/**
|
||||
* Load the mini profile on demand
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function miniProfile(): void
|
||||
{
|
||||
/* Load the item */
|
||||
try
|
||||
{
|
||||
$author = Member::load( Request::i()->authorId );
|
||||
$anonymous = (bool) Request::i()->anonymous ?? false;
|
||||
$solvedCount = is_numeric( Request::i()->solvedCount ) ? (int) Request::i()->solvedCount : null;
|
||||
if ( $author->member_id and Request::i()->solvedCount === 'load' )
|
||||
{
|
||||
$solvedCount = Db::i()->select( "COUNT(*)", "core_solved_index", ["member_id=?", $author->member_id] )->first() ?: null;
|
||||
}
|
||||
|
||||
/* return the json */
|
||||
Output::i()->json( [ 'html' => \IPS\Theme::i()->getTemplate( "global", "core" )->miniProfile( $author, $anonymous, $solvedCount ) ] );
|
||||
}
|
||||
catch ( OutOfRangeException $e )
|
||||
{
|
||||
Output::i()->json( [ 'error' => 'not_found', 'errorMessage' => Member::loggedIn()->language()->addToStack( 'author_stats_cannot_load' ) ], 404 );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find Member
|
||||
*
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"id": 5000033,
|
||||
"name": "5.0.0 Beta 7",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeeditor": true,
|
||||
"javascript": true,
|
||||
"emailTemplates": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": true,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"global\/library\/app.js",
|
||||
"global\/framework\/common\/ips.controller.js",
|
||||
"global\/framework\/common\/ui\/ips.ui.controls.js",
|
||||
"global\/front\/controllers\/core\/ips.core.commentFeed.js",
|
||||
"global\/framework\/templates\/ips.core.templates.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"author_stats_cannot_load",
|
||||
"ipb_embed_url_whitelist_desc",
|
||||
"menu_title_node_type",
|
||||
"menu_title_node_inherit",
|
||||
"menu_title_node_custom",
|
||||
"menu_title_node"
|
||||
],
|
||||
"edited": [
|
||||
"front_logged_in_as",
|
||||
"solutionlog_show_activity",
|
||||
"ipb_embed_url_whitelist",
|
||||
"profile_you_won",
|
||||
"profile_member_won",
|
||||
"profile_you_congrats"
|
||||
],
|
||||
"removed": [
|
||||
"byline_itemprop",
|
||||
"ipb__embed_url_whitelist_desc"
|
||||
]
|
||||
},
|
||||
"js": {
|
||||
"added": [
|
||||
"ips.ui.controls.cannot_load"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [
|
||||
"front\/global\/miniProfileWrap"
|
||||
],
|
||||
"edited": [
|
||||
"front\/embed\/embedOriginalItem",
|
||||
"global\/forms\/editorAttachmentsPlaceholder",
|
||||
"front\/global\/comment",
|
||||
"front\/global\/includeDataLayer",
|
||||
"front\/global\/miniProfile",
|
||||
"front\/global\/review",
|
||||
"admin\/memberprofile\/warnings",
|
||||
"front\/modcp\/alertRow",
|
||||
"front\/modcp\/announcementRow",
|
||||
"front\/modcp\/report",
|
||||
"front\/modcp\/reportPanel",
|
||||
"front\/profile\/allFollowers",
|
||||
"front\/profile\/followers",
|
||||
"front\/profile\/profile",
|
||||
"front\/profile\/profileHeader",
|
||||
"front\/profile\/recentVisitorsBlock",
|
||||
"front\/profile\/tableRow",
|
||||
"front\/profile\/userBadgeOverview",
|
||||
"front\/profile\/userContent",
|
||||
"front\/profile\/userReputation",
|
||||
"front\/profile\/userSolutions",
|
||||
"front\/system\/followedContentMemberRow",
|
||||
"front\/tables\/manageFollowRow",
|
||||
"front\/tables\/rows",
|
||||
"front\/tables\/table",
|
||||
"front\/tags\/contentTableRows",
|
||||
"front\/widgets\/relatedContent"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"global\/framework\/3-cover-photo.css",
|
||||
"global\/framework\/3-entries.css",
|
||||
"global\/framework\/3-misc.css",
|
||||
"global\/framework\/3-richtext.css",
|
||||
"global\/framework\/3-streams.css",
|
||||
"front\/styles\/profiles.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": [
|
||||
"admin\/mobileapp\/screenshot.png",
|
||||
"admin\/large_loading.gif",
|
||||
"admin\/loading.gif",
|
||||
"admin\/small_loading.gif",
|
||||
"admin\/notepad_bg.png",
|
||||
"front\/wizard_step_extra@2x.png",
|
||||
"front\/wizard_step_extra_rtl@2x.png",
|
||||
"front\/wizard_step_large_rtl.png",
|
||||
"front\/wizard_step_extra.png",
|
||||
"front\/wizard_step_large_rtl@2x.png",
|
||||
"front\/notification_settings\/email.svg",
|
||||
"front\/notification_settings\/push.svg",
|
||||
"front\/notification_settings\/notification_bell.svg",
|
||||
"front\/hive\/communityhive.svg",
|
||||
"front\/hive\/logo_on_white_background.png",
|
||||
"front\/wizard_step_large@2x.png",
|
||||
"front\/wizard_step_large.png",
|
||||
"front\/loaders\/large_loading@2x.gif",
|
||||
"front\/loaders\/large_loading.gif",
|
||||
"front\/wizard_step_extra_rtl.png"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"categories": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"lightDarkMode",
|
||||
"logos",
|
||||
"pageLayouts",
|
||||
"typography",
|
||||
"header",
|
||||
"sidePanel",
|
||||
"content",
|
||||
"footer",
|
||||
"mobileNavigation",
|
||||
"navigationPanel",
|
||||
"global",
|
||||
"textLogo",
|
||||
"imageLogoDesktop",
|
||||
"imageLogoMobile",
|
||||
"desktopHeader",
|
||||
"mobileHeader",
|
||||
"desktopFooter",
|
||||
"body",
|
||||
"contentBoxes",
|
||||
"sidebar",
|
||||
"avatars",
|
||||
"buttons"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"settings": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"set__i-default-scheme",
|
||||
"set__i-logo-text",
|
||||
"set__i-sidebar-width",
|
||||
"i-primary-button--co",
|
||||
"set__i-mobile-icons-location",
|
||||
"set__logo-light",
|
||||
"i-footer--co",
|
||||
"set__mobile-logo-light",
|
||||
"layout_global_view_mode",
|
||||
"set__i-font-family",
|
||||
"set__i-design-border",
|
||||
"set__i-layout-width",
|
||||
"set__i-sidebar-ui-header--he",
|
||||
"set__i-position-logo",
|
||||
"set__i-mobile-header--he",
|
||||
"set__i-change-scheme",
|
||||
"set__i-logo-slogan",
|
||||
"i-primary-button--ba-co",
|
||||
"set__i-mobile-footer-labels",
|
||||
"set__logo-dark",
|
||||
"i-footer--ba-co",
|
||||
"set__mobile-logo-dark",
|
||||
"set__i-design-radius",
|
||||
"set__i-font-size",
|
||||
"set__i-flip-sidebar",
|
||||
"i-dashHeader--ba-co",
|
||||
"set__i-position-navigation",
|
||||
"i-headerMobile--ba-co",
|
||||
"i-headerMobile--co",
|
||||
"i-secondary-button--co",
|
||||
"set__i-logo--fo-fa",
|
||||
"set__i-position-user",
|
||||
"i-dashHeader--co",
|
||||
"set__i-avatar-radius",
|
||||
"i-color_root",
|
||||
"set__i-mobile-logo--he",
|
||||
"set__i-design-shadow",
|
||||
"i-mobileFooter--ba-co",
|
||||
"set__i-logo--he",
|
||||
"i-secondary-button--ba-co",
|
||||
"set__i-logo--fo-we",
|
||||
"i-navPanelLinkHover--co",
|
||||
"set__i-position-breadcrumb",
|
||||
"i-mobileFooter--co",
|
||||
"i-color_soft",
|
||||
"i-body--ba-co",
|
||||
"set__i-link-panels",
|
||||
"set__i-sidebar-ui-logo--he",
|
||||
"i-button--bo-ra",
|
||||
"set__i-desktop-logo--fo-si",
|
||||
"set__i-sticky-sidebar",
|
||||
"i-navPanelLinkActive--ba-co",
|
||||
"set__i-position-search",
|
||||
"i-mobileFooter-active--co",
|
||||
"i-color_hard",
|
||||
"i-box--ba-co",
|
||||
"set__i-header-primary--he",
|
||||
"set__i-sidebar-ui-logo--fo-si",
|
||||
"i-box--bo-co",
|
||||
"i-link--co",
|
||||
"i-mobileFooter-active--ba-co",
|
||||
"i-navPanel--ba-co",
|
||||
"set__i-mobile-logo--fo-si",
|
||||
"i-link-hover--co",
|
||||
"i-navPanel--co",
|
||||
"set__i-header-secondary--he",
|
||||
"i-boxHeader--ba-co",
|
||||
"i-boxHeader--co",
|
||||
"set__i-user-content-font-size",
|
||||
"i-navPanelLinkActive--co",
|
||||
"set__i-nav-bar-icons",
|
||||
"i-widget-header--ba-co",
|
||||
"i-headerTop--ba-co",
|
||||
"i-widget-header--co",
|
||||
"i-headerTop--co",
|
||||
"i-headerPrimary--ba-co",
|
||||
"i-headerPrimary--co",
|
||||
"i-headerSecondary--ba-co",
|
||||
"i-headerSecondary--co",
|
||||
"set__i-header-top--he"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"id": 5000034,
|
||||
"name": "5.0.0 Beta 7",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeeditor": true,
|
||||
"javascript": true,
|
||||
"emailTemplates": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": true,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"global\/front\/controllers\/core\/ips.core.commentFeed.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"categories": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"lightDarkMode",
|
||||
"logos",
|
||||
"pageLayouts",
|
||||
"typography",
|
||||
"header",
|
||||
"sidePanel",
|
||||
"content",
|
||||
"footer",
|
||||
"mobileNavigation",
|
||||
"navigationPanel",
|
||||
"global",
|
||||
"textLogo",
|
||||
"imageLogoDesktop",
|
||||
"imageLogoMobile",
|
||||
"desktopHeader",
|
||||
"mobileHeader",
|
||||
"desktopFooter",
|
||||
"body",
|
||||
"contentBoxes",
|
||||
"sidebar",
|
||||
"avatars",
|
||||
"buttons"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"settings": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"set__i-default-scheme",
|
||||
"set__i-logo-text",
|
||||
"set__i-sidebar-width",
|
||||
"i-primary-button--co",
|
||||
"set__i-mobile-icons-location",
|
||||
"set__logo-light",
|
||||
"i-footer--co",
|
||||
"set__mobile-logo-light",
|
||||
"layout_global_view_mode",
|
||||
"set__i-font-family",
|
||||
"set__i-design-border",
|
||||
"set__i-layout-width",
|
||||
"set__i-sidebar-ui-header--he",
|
||||
"set__i-position-logo",
|
||||
"set__i-mobile-header--he",
|
||||
"set__i-change-scheme",
|
||||
"set__i-logo-slogan",
|
||||
"i-primary-button--ba-co",
|
||||
"set__i-mobile-footer-labels",
|
||||
"set__logo-dark",
|
||||
"i-footer--ba-co",
|
||||
"set__mobile-logo-dark",
|
||||
"set__i-design-radius",
|
||||
"set__i-font-size",
|
||||
"set__i-flip-sidebar",
|
||||
"i-dashHeader--ba-co",
|
||||
"set__i-position-navigation",
|
||||
"i-headerMobile--ba-co",
|
||||
"i-headerMobile--co",
|
||||
"i-secondary-button--co",
|
||||
"set__i-logo--fo-fa",
|
||||
"set__i-position-user",
|
||||
"i-dashHeader--co",
|
||||
"set__i-avatar-radius",
|
||||
"i-color_root",
|
||||
"set__i-mobile-logo--he",
|
||||
"set__i-design-shadow",
|
||||
"i-mobileFooter--ba-co",
|
||||
"set__i-logo--he",
|
||||
"i-secondary-button--ba-co",
|
||||
"set__i-logo--fo-we",
|
||||
"i-navPanelLinkHover--co",
|
||||
"set__i-position-breadcrumb",
|
||||
"i-mobileFooter--co",
|
||||
"i-color_soft",
|
||||
"i-body--ba-co",
|
||||
"set__i-link-panels",
|
||||
"set__i-sidebar-ui-logo--he",
|
||||
"i-button--bo-ra",
|
||||
"set__i-desktop-logo--fo-si",
|
||||
"set__i-sticky-sidebar",
|
||||
"i-navPanelLinkActive--ba-co",
|
||||
"set__i-position-search",
|
||||
"i-mobileFooter-active--co",
|
||||
"i-color_hard",
|
||||
"i-box--ba-co",
|
||||
"set__i-header-primary--he",
|
||||
"set__i-sidebar-ui-logo--fo-si",
|
||||
"i-box--bo-co",
|
||||
"i-link--co",
|
||||
"i-mobileFooter-active--ba-co",
|
||||
"i-navPanel--ba-co",
|
||||
"set__i-mobile-logo--fo-si",
|
||||
"i-link-hover--co",
|
||||
"i-navPanel--co",
|
||||
"set__i-header-secondary--he",
|
||||
"i-boxHeader--ba-co",
|
||||
"i-boxHeader--co",
|
||||
"set__i-user-content-font-size",
|
||||
"i-navPanelLinkActive--co",
|
||||
"set__i-nav-bar-icons",
|
||||
"i-widget-header--ba-co",
|
||||
"i-headerTop--ba-co",
|
||||
"i-widget-header--co",
|
||||
"i-headerTop--co",
|
||||
"i-headerPrimary--ba-co",
|
||||
"i-headerPrimary--co",
|
||||
"i-headerSecondary--ba-co",
|
||||
"i-headerSecondary--co",
|
||||
"set__i-header-top--he"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,7 @@ namespace IPS\core;
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
|
||||
use IPS\Application;
|
||||
use IPS\convert\App;
|
||||
use IPS\Data\Store;
|
||||
use IPS\DateTime;
|
||||
use IPS\Db;
|
||||
@@ -272,12 +273,12 @@ abstract class AdminNotification extends ActiveRecord
|
||||
$notifications = array();
|
||||
foreach ( Store::i()->acpNotifications as $notification )
|
||||
{
|
||||
if ( Application::appIsEnabled( $notification['app'] ) AND class_exists( 'IPS\\' . $notification['app'] . '\extensions\core\AdminNotifications\\' . IPS::mb_ucfirst( $notification['ext'] ) ) )
|
||||
if( Application::appIsEnabled( $notification['app'] ) )
|
||||
{
|
||||
$notificationObject = static::constructFromData( $notification );
|
||||
|
||||
if ( $notificationObject )
|
||||
$app = Application::load( $notification['app'] );
|
||||
if( array_key_exists( $notification['ext'], $app->extensions( $app, 'AdminNotifications', false ) ) AND class_exists( 'IPS\\' . $notification['app'] . '\extensions\core\AdminNotifications\\' . IPS::mb_ucfirst( $notification['ext'] ) ) )
|
||||
{
|
||||
$notificationObject = static::constructFromData( $notification );
|
||||
$notifications[$notificationObject->id] = $notificationObject;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -585,7 +585,7 @@ HTML,
|
||||
*/
|
||||
public static function i(): static
|
||||
{
|
||||
if ( empty( static::$instance ) )
|
||||
if ( !static::hasInstance() )
|
||||
{
|
||||
if ( ( \IPS\IN_DEV OR CIC ) AND class_exists( '\IPS\cloud\DataLayer' ) )
|
||||
{
|
||||
@@ -607,6 +607,16 @@ HTML,
|
||||
return static::$instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if there is an instance currently
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function hasInstance() : bool
|
||||
{
|
||||
return !empty( static::$instance );
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize this instance
|
||||
*
|
||||
@@ -631,6 +641,12 @@ HTML,
|
||||
*/
|
||||
public function addEvent( string $key, array $values, bool $odkUpdate=true ) : void
|
||||
{
|
||||
/* Do we care about the datalayer on this request? */
|
||||
if ( Output::i()->bypassDataLayer )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Is it set */
|
||||
if ( !$odkUpdate AND isset( $this->events[$key] ) )
|
||||
{
|
||||
@@ -796,6 +812,11 @@ HTML,
|
||||
*/
|
||||
public function addContextProperty( string $key, mixed $value, bool $odkUpdate=true ) : void
|
||||
{
|
||||
if ( Output::i()->bypassDataLayer )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Did we set it already? */
|
||||
if ( !$odkUpdate AND isset( $this->context[$key] ) )
|
||||
{
|
||||
|
||||
@@ -343,6 +343,11 @@ abstract class FrontNavigationAbstract
|
||||
*/
|
||||
public function isAvailableFor( string $type ): bool
|
||||
{
|
||||
if( !$this->canView() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( $this->menuTypes === '*' )
|
||||
{
|
||||
return true;
|
||||
|
||||
Reference in new issue
Block a user