# # VarHandler # # 2005/12/27 1.00 First release # package MT::Plugin::VarHandler; use strict; use MT; use MT::Template::Context; use MT::Plugin; # show plugin information to main menu eval("use Storable;"); if (!$@ && MT->can('add_plugin')) { my $plugin = MT::Plugin->new; $plugin->name('VarHandler'); if (MT->version_number >= 3.2) { $plugin->version('1.00'); $plugin->author_name('Hajime Fujimoto'); $plugin->author_link('http://www.h-fj.com/blog/'); } $plugin->description('handler for MTVar.'); MT->add_plugin($plugin); } # add tag MT::Template::Context->add_tag(AddVar => \&add_var); MT::Template::Context->add_tag(SubVar => \&sub_var); MT::Template::Context->add_tag(MultVar => \&mult_var); MT::Template::Context->add_tag(DivVar => \&div_var); MT::Template::Context->add_tag(ConcatVar => \&concat_var); MT::Template::Context->add_tag(EqualVar => \&equal_var); MT::Template::Context->add_container_tag(TagValueVar => \&tag_value_var); MT::Template::Context->add_conditional_tag(IfNumVar => \&if_num_var); MT::Template::Context->add_conditional_tag(IfStrVar => \&if_str_var); # add_var main sub add_var { my ($ctx, $args) = @_; my ($var1, $var2); return $ctx->error('Attribute \'name\' is required.') unless ($args->{name}); &_check_attribute($ctx, $args, \$var1, \$var2, 0); $ctx->{__stash}{vars}{$args->{name}} = $var1 + $var2; ''; } # sub_var main sub sub_var { my ($ctx, $args) = @_; my ($var1, $var2); return $ctx->error('Attribute \'name\' is required.') unless ($args->{name}); &_check_attribute($ctx, $args, \$var1, \$var2, 0); $ctx->{__stash}{vars}{$args->{name}} = $var1 - $var2; ''; } # mult_var main sub mult_var { my ($ctx, $args) = @_; my ($var1, $var2); return $ctx->error('Attribute \'name\' is required.') unless ($args->{name}); &_check_attribute($ctx, $args, \$var1, \$var2, 1); $ctx->{__stash}{vars}{$args->{name}} = $var1 * $var2; ''; } # div_var main sub div_var { my ($ctx, $args) = @_; my ($var1, $var2); return $ctx->error('Attribute \'name\' is required.') unless ($args->{name}); &_check_attribute($ctx, $args, \$var1, \$var2, 1); $ctx->{__stash}{vars}{$args->{name}} = $var1 / $var2; ''; } # concat_var main sub concat_var { my ($ctx, $args) = @_; my ($var1, $var2); return $ctx->error('Attribute \'name\' is required.') unless ($args->{name}); &_check_attribute($ctx, $args, \$var1, \$var2, ''); $ctx->{__stash}{vars}{$args->{name}} = $var1 . $var2; ''; } # equal_var main sub equal_var { my ($ctx, $args) = @_; my ($var1, $var2); return $ctx->error('Attribute \'name\' is required.') unless ($args->{name}); &_check_attribute($ctx, $args, \$var1, \$var2, ''); $ctx->{__stash}{vars}{$args->{name}} = $var2; ''; } # tag_value_var main sub tag_value_var { my ($ctx, $args) = @_; my $tokens = $ctx->stash('tokens'); my $builder = $ctx->stash('builder'); return $ctx->error('Attribute \'name\' is required.') unless ($args->{name}); defined(my $out = $builder->build($ctx, $tokens)) or return $ctx->error($ctx->errstr); $ctx->{__stash}{vars}{$args->{name}} = $out; ''; } # if_num_var main sub if_num_var { my ($ctx, $args) = @_; my ($var1, $var2); return $ctx->error('Attribute \'name\' is required.') unless ($args->{name}); &_check_attribute($ctx, $args, \$var1, \$var2, undef); return $ctx->error('Attribute \'value\' or \'name2\' is required.') unless (defined($var2)); ($var1 == $var2); } # if_str_var main sub if_str_var { my ($ctx, $args) = @_; my ($var1, $var2); return $ctx->error('Attribute \'name\' is required.') unless ($args->{name}); &_check_attribute($ctx, $args, \$var1, \$var2, undef); return $ctx->error('Attribute \'value\' or \'name2\' is required.') unless (defined($var2)); $var1 = $ctx->{__stash}{vars}{$args->{name}}; ($var1 eq $var2); } sub _check_attribute { my ($ctx, $args, $var1, $var2, $def_value) = @_; $$var1 = $ctx->{__stash}{vars}{$args->{name}} || 0; if (defined($args->{value})) { $$var2 = $args->{value}; } elsif (defined($args->{name2})) { $$var2 = $ctx->{__stash}{vars}{$args->{name2}}; } else { $$var2 = $def_value; } } 1;