package Labyrinth::Plugins; use warnings; use strict; =head1 NAME Labyrinth::Plugins - Plugin Manager for Labyrinth =head1 SYNOPSIS load_plugins(@plugins); my $plugin = get_plugin($class); my @plugins = get_plugins(); =head1 DESCRIPTION Although loaded via the main Labyrinth module, this module is used by others to quickly reference all the available plugins. =cut use vars qw($VERSION @ISA %EXPORT_TAGS @EXPORT @EXPORT_OK); $VERSION = '5.32'; # ------------------------------------- # Export Details require Exporter; @ISA = qw(Exporter); %EXPORT_TAGS = ( 'all' => [ qw(load_plugins get_plugin get_plugins) ], ); @EXPORT_OK = ( @{$EXPORT_TAGS{'all'}} ); @EXPORT = ( @{$EXPORT_TAGS{'all'}} ); # ------------------------------------- # Library Modules use Labyrinth::Audit; use Labyrinth::Variables; # ------------------------------------- # Variables my (%plugins,%classes); # ------------------------------------- # The Program =head1 FUNCTIONS =over =item load_plugins() Loads plugins found under the plugins directory. =item get_plugin($class) Returns the appropriate plugin for the given class. =item get_plugins() Returns all available plugins. =back =cut sub load_plugins { $classes{$_} = 1 for(@_); } sub get_plugin { my $class = shift; my $method = 'new'; return $plugins{$class} if($plugins{$class}); return unless($classes{$class}); eval { eval "CORE::require $class"; $plugins{$class} = $class->$method(@_); }; if($@) { $tvars{errcode} = 'ERROR'; LogError("action: class=$class, method=new, FAULT: $@"); } return $plugins{$class} || undef; } sub get_plugins { return values %plugins; } 1; __END__ =head1 AUTHOR Barbie, for Miss Barbell Productions, L =head1 COPYRIGHT & LICENSE Copyright (C) 2002-2015 Barbie for Miss Barbell Productions All Rights Reserved. This module is free software; you can redistribute it and/or modify it under the Artistic License 2.0. =cut