root/branches/release-31/plugins/WidgetManager/lib/WidgetManager/Plugin.pm @ 1529

Revision 1529, 3.4 kB (checked in by fumiakiy, 21 months ago)

Suppress warnings.

  • Property svn:keywords set to Id Revision
Line 
1# WidgetManager plugin for Movable Type
2# Author: Byrne Reese, Six Apart (http://www.sixapart.com)
3# Released under the Artistic License
4#
5# $Id$
6
7package WidgetManager::Plugin;
8
9use strict;
10
11sub _hdlr_widget_manager {
12    my $ctx = shift;
13    my $args = shift;
14
15    my $blog_id = $ctx->stash('blog_id');
16
17    my $plugin = MT->component('WidgetManager');
18    my $modulesets = load_selected_modules($plugin, $blog_id);
19
20    return '' unless $modulesets;
21    return '' unless $modulesets->{$args->{name}};
22
23    my @selected = split(/\s*,\s*/,$modulesets->{$args->{name}});
24
25    my $res = "";
26    foreach my $mid (@selected) {
27        require MT::Template;
28        my $tmpl = MT::Template->load({ id => $mid,
29                                        blog_id => $blog_id })
30            or return $ctx->error(MT->translate(
31                "Can't find included template widget '[_1]'", $mid ));
32        my $out = $ctx->tag('include', { widget => $tmpl->name })
33            or return $ctx->error($ctx->errstr);
34        $res .= $out if defined $out;
35    }
36    return $res;
37}
38
39sub load_selected_modules {
40    my ($plugin, $blog_id) = @_;
41    my $config = $plugin->get_config_hash('blog:'.$blog_id);
42    return $config && $config->{modulesets} ? $config->{modulesets} : undef;
43}
44
45sub clone_blog_widgemanagers {
46    my $cb      = shift;
47    my (%params) = @_;
48    my $plugin  = $cb->plugin;
49
50    my $report = sub {};
51    my $label = 'widgetmgr';
52
53    if (my $callback = $params{callback}) {
54        my $state;
55        $report = sub { 
56            my $msg;
57            if ($state) {
58                $msg = $state . ' ' . (+shift);
59            } else {
60                $msg = $state = shift;
61            }
62            $callback->($msg, $label)
63        };
64    }
65
66    $report->($plugin->translate('Cloning Widgets for blog...'));
67
68    my $modulesets = $plugin->load_selected_modules($params{old_blog_id});   
69    if ( ! $modulesets or ! keys %$modulesets ) {
70        return $report->($plugin->translate("[_1] records processed.", 0));
71    }
72
73    my @widgetmanagers;
74    foreach my $key (sort keys %$modulesets) {
75        # Collect the available widgets for this key.
76        my @w = ();
77        for my $w ( split /\s*,\s*/, $modulesets->{$key} ) {
78            push @w, $params{template_map}{$w} if $params{template_map}{$w};
79        }
80        $modulesets->{$key} = join(',', @w);
81    }
82
83    my $vars = { modulesets => $modulesets, installed => 1 };
84    my $pdata_obj = $plugin->get_config_obj('blog:'.$params{new_blog_id});
85    my $configuration = $pdata_obj->data() || {};
86    $configuration->{$_} = $vars->{$_} for keys %$vars;
87    $pdata_obj->data($configuration);
88    $pdata_obj->save();
89
90    my $counter = scalar keys %$modulesets;
91    $report->($plugin->translate("[_1] records processed.", $counter));
92}
93
94sub remove_blog_widgetmanager {
95    my $cb      = shift;
96    my $plugin  = $cb->plugin;
97
98    my @pdata_objs;
99    require MT::PluginData;
100    # post_remove_all
101    if (! ref($_[0]) and $_[0] eq 'MT::Blog') {
102        @pdata_objs = MT::PluginData->load({ plugin => $plugin->key});
103    }
104    # post_remove
105    elsif (ref($_[0]) eq 'MT::Blog') {
106        @pdata_objs = 
107            MT::PluginData->load({  plugin => $plugin->key,
108                                    key    => 'configuration:blog:'.$_[0]->id });
109    }
110    $_->remove foreach @pdata_objs;
111}
112
113sub create_default_widgetsets {
114    my ($cb, $blog, $tmpl_list) = @_;
115    require WidgetManager::CMS;
116    WidgetManager::CMS::create_default_widgetsets($blog->id);
117    1;
118}
119
1201;
Note: See TracBrowser for help on using the browser.