Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

reimplement local_blog_id=0 localization for inside MTTags MTC-28598 #2372

Open
wants to merge 8 commits into
base: fix/MTC-28585-mttags-breaks-local_blog_id
Choose a base branch
from
3 changes: 2 additions & 1 deletion lib/MT/Template/Tags/Blog.pm
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@ sub _hdlr_blogs {

# No blog-level config set
# Set mode to context as this will mimic no MTMultiBlog tag
elsif ( $tag_name eq 'mtmultiblog' ) {
# See also MTC-24985
elsif ( lc($tag_name) eq 'multiblog' ) {
$args->{'mode'} = 'context'; # Override 'loop' mode
}
}
Expand Down
4 changes: 4 additions & 0 deletions lib/MT/Template/Tags/Tag.pm
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,10 @@ sub _hdlr_tags {
@slice_tags = @slice_tags[ 0 .. $limit - 1 ];
}

# Remove local blog ID from MTTags since it is cross-blog
# and hence MTMultiBlogIfLocalBlog doesn't make sense there.
local $ctx->{__stash}{local_blog_id} = 0;

local $ctx->{__stash}{include_blogs} = $args->{include_blogs};
local $ctx->{__stash}{exclude_blogs} = $args->{exclude_blogs};
local $ctx->{__stash}{blog_ids} = $args->{blog_ids};
Expand Down
3 changes: 2 additions & 1 deletion lib/MT/Template/Tags/Website.pm
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ sub _hdlr_websites {

# No blog-level config set
# Set mode to context as this will mimic no MTMultiBlog tag
elsif ( $tag_name eq 'mtmultiblog' ) {
# See also MTC-24985
elsif ( lc($tag_name) eq 'multiblog' ) {
$args->{'mode'} = 'context'; # Override 'loop' mode
}
}
Expand Down
6 changes: 2 additions & 4 deletions php/lib/block.mtblogs.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
# $Id$

function smarty_block_mtblogs($args, $content, &$ctx, &$repeat) {
$localvars = array(array('_blogs', '_blogs_counter', 'blog', 'blog_id'), common_loop_vars());

if (!isset($content)) {
$mt = MT::get_instance();
Expand All @@ -25,8 +24,8 @@ function smarty_block_mtblogs($args, $content, &$ctx, &$repeat) {
or !empty($args['site_ids']) )) {
$blog = $ctx->stash('blog');
$is_include = isset( $blog->default_mt_sites_action )
? $blog->default_mt_sites_actio : 1;
$blogs = $blog->default_mtsites_blogs || '';
? $blog->default_mt_sites_action : 1;
$blogs = $blog->default_mt_sites_sites ?? '';

if ($blogs && isset($is_include)) {
$args[$is_include ? 'include_blogs' : 'exclude_blogs'] = $blogs;
Expand All @@ -52,7 +51,6 @@ function smarty_block_mtblogs($args, $content, &$ctx, &$repeat) {
}

return $content;
return '0';
}

# Multiblog's "context" mode:
Expand Down
15 changes: 7 additions & 8 deletions php/lib/block.mtsiteslocalsite.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,14 @@
function smarty_block_mtsiteslocalsite($args, $content, &$ctx, &$repeat) {
$localvars = array('local_blog_id', 'blog_id', 'blog');
if (!isset($content)) {
$blog_id = $ctx->stash('local_blog_id');
if (!$blog_id) {
$repeat = false;
return '';
$blog_id = $ctx->stash('blog_id');
$local_blog_id = $ctx->stash('local_blog_id');
if ($local_blog_id) {
$ctx->localize($localvars);
$blog = $ctx->mt->db()->fetch_blog($local_blog_id);
$ctx->stash('blog_id', $local_blog_id);
$ctx->stash('blog', $blog);
}
$ctx->localize($localvars);
$blog = $ctx->mt->db()->fetch_blog($blog_id);
$ctx->stash('blog', $blog);
$ctx->stash('blog_id', $blog_id);
} else {
$repeat = false;
}
Expand Down
6 changes: 5 additions & 1 deletion php/lib/block.mttags.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# $Id$

function smarty_block_mttags($args, $content, &$ctx, &$repeat) {
$localvars = array(array('_tags', 'Tag', '_tags_counter', 'tag_min_count', 'tag_max_count', 'all_tag_count', 'include_blogs', 'exclude_blogs', 'blog_ids', '__out'), common_loop_vars());
$localvars = array(array('_tags', 'Tag', '_tags_counter', 'tag_min_count', 'tag_max_count', 'all_tag_count', 'include_blogs', 'exclude_blogs', 'blog_ids', '__out', 'local_blog_id'), common_loop_vars());
if (!isset($content)) {
$ctx->localize($localvars);

Expand All @@ -19,6 +19,10 @@ function smarty_block_mttags($args, $content, &$ctx, &$repeat) {
require_once('multiblog.php');
multiblog_block_wrapper($args, $content, $ctx, $repeat);

# Fix for MTMultiBlogIfLocalBlog which should never return
# true with MTTags block because tags are cross-blog
$ctx->stash('local_blog_id', 0);

$ctx->stash('include_blogs', isset($args['include_blogs']) ? $args['include_blogs'] : null);
$ctx->stash('exclude_blogs', isset($args['exclude_blogs']) ? $args['exclude_blogs'] : null);
$ctx->stash('blog_ids', isset($args['blog_ids']) ? $args['blog_ids'] : null);
Expand Down
33 changes: 19 additions & 14 deletions t/mt7/multiblog/02.tags.t
Original file line number Diff line number Diff line change
Expand Up @@ -565,23 +565,28 @@ A Rainy Day
anemones 6
template-module:2

=== MTC-28585 mt:MultiBlogIfLocalBlog never be TRUE in context mode
--- SKIP
=== MTC-28598 mt:MultiBlogIfLocalBlog never be TRUE in context mode
--- template
<mt:MultiBlog mode="context"><mt:MultiBlogLocalBlog><MTTags glue=','>[<mt:MultiBlogIfLocalBlog>NEVER-VISIBLE</mt:MultiBlogIfLocalBlog>]</MTTags></mt:MultiBlogLocalBlog></mt:MultiBlog>
<mt:MultiBlog mode="context">:<MTTags glue=','><mt:BlogID><mt:MultiBlogIfLocalBlog>NEVER-VISIBLE</mt:MultiBlogIfLocalBlog></MTTags></mt:MultiBlog>
--- expected
[]
--- access_overrides
{ 1 => 2, 2 => 2 }
:2

=== MTC-28585 mt:MultiBlogIfLocalBlog never be TRUE in loop mode
--- SKIP
--- skip_php
=== MTC-28598 mt:MultiBlogIfLocalBlog never be TRUE in loop mode
--- template
<mt:MultiBlog mode="loop"><mt:MultiBlogLocalBlog><MTTags glue=','>[<mt:MultiBlogIfLocalBlog>NEVER-VISIBLE</mt:MultiBlogIfLocalBlog>]</MTTags></mt:MultiBlogLocalBlog>
</mt:MultiBlog>
<mt:MultiBlog mode="loop">:<MTTags glue=','><mt:BlogID><mt:MultiBlogIfLocalBlog>NEVER-VISIBLE</mt:MultiBlogIfLocalBlog></MTTags></mt:MultiBlog>
--- expected
[]
[]
:2

=== mt:MultiBlogLocalBlog mode="loop"
--- template
<mt:MultiBlog blog_ids="1,2-3" mode="loop">:<MTTags glue=','><mt:BlogName><mt:MultiBlogIfLocalBlog>NEVER-VISIBLE</mt:MultiBlogIfLocalBlog></MTTags></mt:MultiBlog>
--- expected
:none,none,none,none,none:Test site
--- access_overrides
{ 1 => 2, 2 => 2 }
{ 1 => 2 }

=== MTC-28598 mt:MultiBlogLocalBlog inside mt:Tags
--- template
<mt:MultiBlog mode="context">:<MTTags glue=','><mt:BlogID>:<mt:MultiBlogLocalBlog><mt:BlogID></mt:MultiBlogLocalBlog></MTTags></mt:MultiBlog>
--- expected
:2:2
3 changes: 2 additions & 1 deletion t/mt7/tag/archive-count.t
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ BEGIN {

use MT::Test::Tag;

plan tests => 1 * blocks;
plan tests => (1 + 2) * blocks;

use MT;
use MT::Test;
Expand Down Expand Up @@ -177,6 +177,7 @@ my $content_type_01 = MT::ContentType->load( { name => 'test content type 01' }
$vars->{content_type_01_unique_id} = $content_type_01->unique_id;

MT::Test::Tag->run_perl_tests( $blog->id );
MT::Test::Tag->run_php_tests( $blog->id );

__END__

Expand Down
66 changes: 58 additions & 8 deletions t/mt7/tag/sites-mode.t
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@ BEGIN {

use MT::Test::Tag;

# plan tests => (1 + 2) * blocks;
plan tests => 1 * blocks;
plan tests => (1 + 2) * blocks;

use MT;
use MT::Test;
Expand All @@ -37,9 +36,10 @@ sub var {
}

filters {
template => [qw( var chomp )],
expected => [qw( var chomp )],
error => [qw( chomp )],
template => [qw( var chomp )],
expected => [qw( var chomp )],
error => [qw( chomp )],
default_mt_sites_sites => [qw( var chomp )],
};

$test_env->prepare_fixture(
Expand Down Expand Up @@ -228,9 +228,32 @@ $vars->{site_02_id} = $site_02->id;
$vars->{blog_01_id} = $blog_01->id;
$vars->{blog_02_id} = $blog_02->id;

MT::Test::Tag->run_perl_tests( $site_01->id );
MT::Test::Tag->run_perl_tests($site_01->id, sub { set_default_mt_sites_sites($_[1]) });

# MT::Test::Tag->run_php_tests($site_01->id);
MT::Test::Tag->run_php_tests($site_01->id, sub { set_default_mt_sites_sites($_[0]) });

my %default_mt_sites_sites_reset_backup;

sub set_default_mt_sites_sites {
my $block = shift;
my $blogs = $block->default_mt_sites_sites ? eval($block->default_mt_sites_sites) : {};

for my $blog_id (keys %default_mt_sites_sites_reset_backup) {
next if exists($blogs->{$blog_id});
my $blog = MT->model('blog')->load($blog_id);
$blog->default_mt_sites_sites(delete $default_mt_sites_sites_reset_backup{$blog_id});
$blog->save;
}

for my $blog_id (keys %$blogs) {
my $blog = MT->model('blog')->load($blog_id);
unless (exists($default_mt_sites_sites_reset_backup{$blog_id})) {
$default_mt_sites_sites_reset_backup{$blog_id} = $blog->default_mt_sites_sites;
}
$blog->default_mt_sites_sites($blogs->{$blog_id});
$blog->save;
}
}

__END__

Expand Down Expand Up @@ -360,6 +383,34 @@ test single line text 1
--- expected
[% site_01_id %]

=== MTC-28598 MTMultiBlog mode is overridden
--- template
<mt:MultiBlog mode="loop">:id=<mt:BlogID></mt:MultiBlog>
--- expected
:id=[% site_01_id %]

=== MTC-28598 MTSites mode with is not overridden
--- template
<mt:Sites mode="loop">:id=<mt:BlogID></mt:Sites>
--- expected
:id=[% site_01_id %]:id=[% site_02_id %]

=== MTC-28598 default_mt_sites_sites works
--- template
<mt:MultiBlog mode="loop">:id=<mt:BlogID></mt:MultiBlog>
--- expected
:id=[% site_01_id %]:id=[% site_02_id %]
--- default_mt_sites_sites
{[% site_01_id %] => '[% site_01_id %],[% site_02_id %]'}

=== MTC-28598 default_mt_sites_sites avoids MTSite mode override
--- template
<mt:Sites mode="loop">:id=<mt:BlogID></mt:Sites>
--- expected
:id=[% site_01_id %]:id=[% site_02_id %]
--- default_mt_sites_sites
{[% site_01_id %] => '[% site_01_id %],[% site_02_id %]'}

=== mt:ChildSites in mt:Sites no mode
--- template
<mt:Sites><mt:ChildSites><mt:Contents content_type="test content data">
Expand Down Expand Up @@ -611,4 +662,3 @@ test single line text 19
test single line text 18
test single line text 17
test single line text 16