nce; unless ( $inst->{request} ) { require MT::Request; $inst->{request} = MT::Request->instance; } if (@_) { $inst->{request}->stash(@_); } else { $inst->{request}; } } sub log { my $mt = shift; unless ($plugins_installed) { # finish init_schema here since we have to log something # to the database. $mt->init_schema(); } my $msg; if ( !@_ ) { # single parameter to log, so $mt must be message $msg = $mt; $mt = MT->instance; } else { # multiple parameters to log; second one is message $msg = shift; } my $log_class = $mt->model('log'); my $log = $log_class->new(); if ( ref $msg eq 'HASH' ) { $log->set_values($msg); } elsif ( ( ref $msg ) && ( UNIVERSAL::isa( $msg, 'MT::Log' ) ) ) { $log = $msg; } else { $log->message($msg); } $log->level( MT::Log::INFO() ) unless defined $log->level; $log->class('system') unless defined $log->class; $log->save(); print STDERR MT->translate( "Message: [_1]", $log->message ) . "\n" if $MT::DebugMode; } my $plugin_full_path; sub run_tasks { my $mt = shift; require MT::TaskMgr; MT::TaskMgr->run_tasks(@_); } sub add_plugin { my $class = shift; my ($plugin) = @_; if ( ref $plugin eq 'HASH' ) { require MT::Plugin; $plugin = new MT::Plugin($plugin); } $plugin->{name} ||= $plugin_sig; $plugin->{plugin_sig} = $plugin_sig; my $id = $plugin->id; unless ($plugin_envelope) { warn "MT->add_plugin improperly called outside of MT plugin load loop."; return; } $plugin->envelope($plugin_envelope); Carp::confess("You cannot register multiple plugin objects from a single script. $plugin_sig") if exists( $Plugins{$plugin_sig} ) && ( exists $Plugins{$plugin_sig}{object} ); $Components{ lc $id } = $plugin if $id; $Plugins{$plugin_sig}{object} = $plugin; $plugin->{full_path} = $plugin_full_path; $plugin->path($plugin_full_path); unless ( $plugin->{registry} && ( %{ $plugin->{registry} } ) ) { $plugin->{registry} = $plugin_registry; } if ( $plugin->{registry} ) { if ( my $settings = $plugin->{registry}{config_settings} ) { $settings = $plugin->{registry}{config_settings} = $settings->() if ref($settings) eq 'CODE'; $class->config->define($settings); } } push @Components, $plugin; 1; } our %CallbackAlias; our $CallbacksEnabled = 1; my %CallbacksEnabled; my @Callbacks; sub add_callback { my $class = shift; my ( $meth, $priority, $plugin, $code ) = @_; if ( $meth =~ m/^(.+::)?([^\.]+)(\..+)?$/ ) { # Remap (whatever)::(name).(something) if ( exists $CallbackAlias{$2} ) { $meth = $CallbackAlias{$2}; $meth = $1 . $meth if $1; $meth = $meth . $3 if $3; } } $meth = $CallbackAlias{$meth} if exists $CallbackAlias{$meth}; my $internal = 0; if ( ref $plugin ) { if ( ( defined $mt_inst ) && ( $plugin == $mt_inst ) ) { $plugin = undef; $internal = 1; } elsif ( !UNIVERSAL::isa( $plugin, "MT::Component" ) ) { return $class->trans_error( "If present, 3rd argument to add_callback must be an object of type MT::Component or MT::Plugin" ); } } if ( ( ref $code ) ne 'CODE' ) { if ( ref $code ) { return $class->trans_error( '4th argument to add_callback must be a CODE reference.'); } else { # Defer until call