Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

first official release

  • Loading branch information...
commit b957e07022e70e0b890e8b9d2e0df0e58299e2d8 0 parents
Barbie authored
Showing with 3,576 additions and 0 deletions.
  1. +4 −0 Changes
  2. +38 −0 MANIFEST
  3. +80 −0 META.json
  4. +56 −0 META.yml
  5. +825 −0 Makefile
  6. +15 −0 Makefile.PL
  7. +83 −0 README
  8. +622 −0 lib/Labyrinth/Plugin/Event.pm
  9. +181 −0 lib/Labyrinth/Plugin/Event/Sponsors.pm
  10. +201 −0 lib/Labyrinth/Plugin/Event/Talks.pm
  11. +120 −0 lib/Labyrinth/Plugin/Event/Types.pm
  12. +208 −0 lib/Labyrinth/Plugin/Event/Venues.pm
  13. +12 −0 t/00use.t
  14. +10 −0 t/90podtest.t
  15. +9 −0 t/91podcover.t
  16. +25 −0 t/94metatest.t
  17. +26 −0 t/95changedate.t
  18. +25 −0 t/96metatest.t
  19. +29 −0 vhost/cgi-bin/config/parserules.ini
  20. +99 −0 vhost/cgi-bin/config/phrasebook.ini
  21. +76 −0 vhost/cgi-bin/config/requests/event.ini
  22. +23 −0 vhost/cgi-bin/config/requests/spon.ini
  23. +31 −0 vhost/cgi-bin/config/requests/venue.ini
  24. +165 −0 vhost/cgi-bin/db/plugin-base.sql
  25. +104 −0 vhost/cgi-bin/templates/events/event-adminedit.html
  26. +49 −0 vhost/cgi-bin/templates/events/event-adminlist.html
  27. +32 −0 vhost/cgi-bin/templates/events/event-adminview.html
  28. +6 −0 vhost/cgi-bin/templates/events/event-failure.html
  29. +40 −0 vhost/cgi-bin/templates/events/event-item.html
  30. +54 −0 vhost/cgi-bin/templates/events/event-list.html
  31. +87 −0 vhost/cgi-bin/templates/events/event-talkedit.html
  32. +32 −0 vhost/cgi-bin/templates/events/event-talklist.html
  33. +1 −0  vhost/cgi-bin/templates/events/events.ics
  34. +62 −0 vhost/cgi-bin/templates/events/sponsor-adminedit.html
  35. +30 −0 vhost/cgi-bin/templates/events/sponsor-adminlist.html
  36. +5 −0 vhost/cgi-bin/templates/events/sponsor-mbp.html
  37. +7 −0 vhost/cgi-bin/templates/events/sponsor-view.html
  38. +68 −0 vhost/cgi-bin/templates/events/venue-adminedit.html
  39. +36 −0 vhost/cgi-bin/templates/events/venue-adminlist.html
4 Changes
@@ -0,0 +1,4 @@
+Changes for the Labyrinth-Plugin-Events
+
+1.00 09/04/2011
+ - first official release
38 MANIFEST
@@ -0,0 +1,38 @@
+Changes
+lib/Labyrinth/Plugin/Event.pm
+lib/Labyrinth/Plugin/Event/Sponsors.pm
+lib/Labyrinth/Plugin/Event/Talks.pm
+lib/Labyrinth/Plugin/Event/Types.pm
+lib/Labyrinth/Plugin/Event/Venues.pm
+Makefile.PL
+MANIFEST
+META.json
+META.yml
+README
+t/00use.t
+t/90podtest.t
+t/91podcover.t
+t/94metatest.t
+t/95changedate.t
+t/96metatest.t
+vhost/cgi-bin/config/parserules.ini
+vhost/cgi-bin/config/phrasebook.ini
+vhost/cgi-bin/config/requests/event.ini
+vhost/cgi-bin/config/requests/spon.ini
+vhost/cgi-bin/config/requests/venue.ini
+vhost/cgi-bin/db/plugin-base.sql
+vhost/cgi-bin/templates/events/event-adminedit.html
+vhost/cgi-bin/templates/events/event-adminlist.html
+vhost/cgi-bin/templates/events/event-adminview.html
+vhost/cgi-bin/templates/events/event-failure.html
+vhost/cgi-bin/templates/events/event-item.html
+vhost/cgi-bin/templates/events/event-list.html
+vhost/cgi-bin/templates/events/event-talkedit.html
+vhost/cgi-bin/templates/events/event-talklist.html
+vhost/cgi-bin/templates/events/events.ics
+vhost/cgi-bin/templates/events/sponsor-adminedit.html
+vhost/cgi-bin/templates/events/sponsor-adminlist.html
+vhost/cgi-bin/templates/events/sponsor-mbp.html
+vhost/cgi-bin/templates/events/sponsor-view.html
+vhost/cgi-bin/templates/events/venue-adminedit.html
+vhost/cgi-bin/templates/events/venue-adminlist.html
80 META.json
@@ -0,0 +1,80 @@
+{
+ "name": "Labyrinth::Plugin::Event",
+ "version": "1.00",
+ "abstract": "Events plugin for the Labyrinth framework",
+ "author": [
+ "Barbie (BARBIE) <barbie@cpan.org>"
+ ],
+
+ "license": "artistic_2",
+ "dynamic_config" : 0,
+ "release_status" : "stable",
+ "meta-spec": {
+ "version": "2",
+ "url": "http://search.cpan.org/dist/CPAN-Meta/lib/CPAN/Meta/Spec.pm"
+ },
+ "generated_by": "Hand 1.0",
+ "keywords" : [
+ "web",
+ "cgi",
+ "framework"
+ ],
+
+ "prereqs" : {
+ "test" : {
+ "requires": {
+ "Test::More": "0.70"
+ },
+ "recommends": {
+ "Test::Pod": "1.00",
+ "Test::Pod::Coverage": "0.08",
+ "Test::CPAN::Meta": "0.13",
+ "Test::CPAN::Meta::JSON": "0.10"
+ }
+ },
+ "runtime" : {
+ "requires" : {
+ "Labyrinth": "5.04",
+ "Labyrinth::Plugin::Articles::Sections": "5.06",
+ "Clone": "0",
+ "Time::Local": "0"
+ }
+ }
+ },
+
+ "provides": {
+ "Labyrinth::Plugin::Event": {
+ "file": "lib/Labyrinth/Plugin/Event.pm",
+ "version": "1.00"
+ },
+ "Labyrinth::Plugin::Event::Sponsors": {
+ "file": "lib/Labyrinth/Plugin/Event/Sponsors.pm",
+ "version": "1.00"
+ },
+ "Labyrinth::Plugin::Event::Talks": {
+ "file": "lib/Labyrinth/Plugin/Event/Talks.pm",
+ "version": "1.00"
+ },
+ "Labyrinth::Plugin::Event::Types": {
+ "file": "lib/Labyrinth/Plugin/Event/Types.pm",
+ "version": "1.00"
+ },
+ "Labyrinth::Plugin::Event::Venues": {
+ "file": "lib/Labyrinth/Plugin/Event/Venues.pm",
+ "version": "1.00"
+ }
+ },
+ "no_index": {
+ "directory": ["t","examples","vhost"]
+ },
+
+ "resources": {
+ "license": "http://dev.perl.org/licenses/",
+ "bugtracker": { "web": "http://rt.cpan.org/Public/Dist/Display.html?Name=Labyrinth-Plugin-Event" },
+ "repository": {
+ "url": "git://github.com/barbie/labyrinth-plugin-event.git",
+ "web": "http://github.com/barbie/labyrinth-plugin-event",
+ "type": "git"
+ }
+ }
+}
56 META.yml
@@ -0,0 +1,56 @@
+--- #YAML:1.0
+name: Labyrinth::Plugin::Event
+version: 1.00
+abstract: Events plugin for the Labyrinth framework
+author:
+ - Barbie <barbie@cpan.org>
+
+license: artistic_2
+distribution_type: module
+installdirs: site
+
+requires:
+ Labyrinth: 5.04
+ Labyrinth::Plugin::Articles::Sections: 5.06
+ Clone: 0
+ Time::Local: 0
+recommends:
+ Test::More: 0.70
+ Test::Pod: 1.00
+ Test::Pod::Coverage: 0.08
+ Test::CPAN::Meta: 0.13
+ Test::CPAN::Meta::JSON: 0.10
+build_requires:
+ Test::More: 0.01
+
+provides:
+ Labyrinth::Plugin::Event:
+ file: lib/Labyrinth/Plugin/Event.pm
+ version: 1.00
+ Labyrinth::Plugin::Event::Sponsors:
+ file: lib/Labyrinth/Plugin/Event/Sponsors.pm
+ version: 1.00
+ Labyrinth::Plugin::Event::Talks:
+ file: lib/Labyrinth/Plugin/Event/Talks.pm
+ version: 1.00
+ Labyrinth::Plugin::Event::Types:
+ file: lib/Labyrinth/Plugin/Event/Types.pm
+ version: 1.00
+ Labyrinth::Plugin::Event::Venues:
+ file: lib/Labyrinth/Plugin/Event/Venues.pm
+ version: 1.00
+
+no_index:
+ directory:
+ - examples
+ - t
+ - vhost
+
+resources:
+ license: http://dev.perl.org/licenses/
+ bugtracker: http://rt.cpan.org/Public/Dist/Display.html?Name=Labyrinth-Plugin-Event
+
+meta-spec:
+ version: 1.4
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+generated_by: Hand 1.0
825 Makefile
@@ -0,0 +1,825 @@
+# This Makefile is for the Labyrinth::Plugin::Event extension to perl.
+#
+# It was generated automatically by MakeMaker version
+# 6.56 (Revision: 65600) from the contents of
+# Makefile.PL. Don't edit this file, edit Makefile.PL instead.
+#
+# ANY CHANGES MADE HERE WILL BE LOST!
+#
+# MakeMaker ARGV: ()
+#
+
+# MakeMaker Parameters:
+
+# ABSTRACT => q[Events plugin for the Labyrinth framework]
+# AUTHOR => q[Barbie <barbie@cpan.org>]
+# BUILD_REQUIRES => { }
+# NAME => q[Labyrinth::Plugin::Event]
+# NO_META => q[1]
+# PREREQ_PM => { Labyrinth=>q[5.04], Clone=>q[0], Labyrinth::Plugin::Articles::Sections=>q[5.06], Time::Local=>q[0] }
+# VERSION_FROM => q[lib/Labyrinth/Plugin/Event.pm]
+
+# --- MakeMaker post_initialize section:
+
+
+# --- MakeMaker const_config section:
+
+# These definitions are from config.sh (via /usr/lib/perl/5.10/Config.pm).
+# They may have been overridden via Makefile.PL or on the command line.
+AR = ar
+CC = cc
+CCCDLFLAGS = -fPIC
+CCDLFLAGS = -Wl,-E
+DLEXT = so
+DLSRC = dl_dlopen.xs
+EXE_EXT =
+FULL_AR = /usr/bin/ar
+LD = cc
+LDDLFLAGS = -shared -O2 -g -L/usr/local/lib -fstack-protector
+LDFLAGS = -fstack-protector -L/usr/local/lib
+LIBC = /lib/libc-2.11.1.so
+LIB_EXT = .a
+OBJ_EXT = .o
+OSNAME = linux
+OSVERS = 2.6.24-27-server
+RANLIB = :
+SITELIBEXP = /usr/local/share/perl/5.10.1
+SITEARCHEXP = /usr/local/lib/perl/5.10.1
+SO = so
+VENDORARCHEXP = /usr/lib/perl5
+VENDORLIBEXP = /usr/share/perl5
+
+
+# --- MakeMaker constants section:
+AR_STATIC_ARGS = cr
+DIRFILESEP = /
+DFSEP = $(DIRFILESEP)
+NAME = Labyrinth::Plugin::Event
+NAME_SYM = Labyrinth_Plugin_Event
+VERSION = 1.00
+VERSION_MACRO = VERSION
+VERSION_SYM = 1_00
+DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
+XS_VERSION = 1.00
+XS_VERSION_MACRO = XS_VERSION
+XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
+INST_ARCHLIB = blib/arch
+INST_SCRIPT = blib/script
+INST_BIN = blib/bin
+INST_LIB = blib/lib
+INST_MAN1DIR = blib/man1
+INST_MAN3DIR = blib/man3
+MAN1EXT = 1p
+MAN3EXT = 3pm
+INSTALLDIRS = site
+DESTDIR =
+PREFIX = $(SITEPREFIX)
+PERLPREFIX = /usr
+SITEPREFIX = /usr/local
+VENDORPREFIX = /usr
+INSTALLPRIVLIB = /usr/share/perl/5.10
+DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB)
+INSTALLSITELIB = /usr/local/share/perl/5.10.1
+DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB)
+INSTALLVENDORLIB = /usr/share/perl5
+DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB)
+INSTALLARCHLIB = /usr/lib/perl/5.10
+DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB)
+INSTALLSITEARCH = /usr/local/lib/perl/5.10.1
+DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH)
+INSTALLVENDORARCH = /usr/lib/perl5
+DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH)
+INSTALLBIN = /usr/bin
+DESTINSTALLBIN = $(DESTDIR)$(INSTALLBIN)
+INSTALLSITEBIN = /usr/local/bin
+DESTINSTALLSITEBIN = $(DESTDIR)$(INSTALLSITEBIN)
+INSTALLVENDORBIN = /usr/bin
+DESTINSTALLVENDORBIN = $(DESTDIR)$(INSTALLVENDORBIN)
+INSTALLSCRIPT = /usr/bin
+DESTINSTALLSCRIPT = $(DESTDIR)$(INSTALLSCRIPT)
+INSTALLSITESCRIPT = /usr/local/bin
+DESTINSTALLSITESCRIPT = $(DESTDIR)$(INSTALLSITESCRIPT)
+INSTALLVENDORSCRIPT = /usr/bin
+DESTINSTALLVENDORSCRIPT = $(DESTDIR)$(INSTALLVENDORSCRIPT)
+INSTALLMAN1DIR = /usr/share/man/man1
+DESTINSTALLMAN1DIR = $(DESTDIR)$(INSTALLMAN1DIR)
+INSTALLSITEMAN1DIR = /usr/local/man/man1
+DESTINSTALLSITEMAN1DIR = $(DESTDIR)$(INSTALLSITEMAN1DIR)
+INSTALLVENDORMAN1DIR = /usr/share/man/man1
+DESTINSTALLVENDORMAN1DIR = $(DESTDIR)$(INSTALLVENDORMAN1DIR)
+INSTALLMAN3DIR = /usr/share/man/man3
+DESTINSTALLMAN3DIR = $(DESTDIR)$(INSTALLMAN3DIR)
+INSTALLSITEMAN3DIR = /usr/local/man/man3
+DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR)
+INSTALLVENDORMAN3DIR = /usr/share/man/man3
+DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR)
+PERL_LIB = /usr/share/perl/5.10
+PERL_ARCHLIB = /usr/lib/perl/5.10
+LIBPERL_A = libperl.a
+FIRST_MAKEFILE = Makefile
+MAKEFILE_OLD = Makefile.old
+MAKE_APERL_FILE = Makefile.aperl
+PERLMAINCC = $(CC)
+PERL_INC = /usr/lib/perl/5.10/CORE
+PERL = /usr/bin/perl
+FULLPERL = /usr/bin/perl
+ABSPERL = $(PERL)
+PERLRUN = $(PERL)
+FULLPERLRUN = $(FULLPERL)
+ABSPERLRUN = $(ABSPERL)
+PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+PERL_CORE = 0
+PERM_DIR = 755
+PERM_RW = 644
+PERM_RWX = 755
+
+MAKEMAKER = /usr/local/share/perl/5.10.1/ExtUtils/MakeMaker.pm
+MM_VERSION = 6.56
+MM_REVISION = 65600
+
+# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
+# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
+# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
+# DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
+MAKE = make
+FULLEXT = Labyrinth/Plugin/Event
+BASEEXT = Event
+PARENT_NAME = Labyrinth::Plugin
+DLBASE = $(BASEEXT)
+VERSION_FROM = lib/Labyrinth/Plugin/Event.pm
+OBJECT =
+LDFROM = $(OBJECT)
+LINKTYPE = dynamic
+BOOTDEP =
+
+# Handy lists of source code files:
+XS_FILES =
+C_FILES =
+O_FILES =
+H_FILES =
+MAN1PODS =
+MAN3PODS = lib/Labyrinth/Plugin/Event.pm \
+ lib/Labyrinth/Plugin/Event/Sponsors.pm \
+ lib/Labyrinth/Plugin/Event/Talks.pm \
+ lib/Labyrinth/Plugin/Event/Types.pm \
+ lib/Labyrinth/Plugin/Event/Venues.pm
+
+# Where is the Config information that we are using/depend on
+CONFIGDEP = $(PERL_ARCHLIB)$(DFSEP)Config.pm $(PERL_INC)$(DFSEP)config.h
+
+# Where to build things
+INST_LIBDIR = $(INST_LIB)/Labyrinth/Plugin
+INST_ARCHLIBDIR = $(INST_ARCHLIB)/Labyrinth/Plugin
+
+INST_AUTODIR = $(INST_LIB)/auto/$(FULLEXT)
+INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
+
+INST_STATIC =
+INST_DYNAMIC =
+INST_BOOT =
+
+# Extra linker info
+EXPORT_LIST =
+PERL_ARCHIVE =
+PERL_ARCHIVE_AFTER =
+
+
+TO_INST_PM = lib/Labyrinth/Plugin/Event.pm \
+ lib/Labyrinth/Plugin/Event/Sponsors.pm \
+ lib/Labyrinth/Plugin/Event/Talks.pm \
+ lib/Labyrinth/Plugin/Event/Types.pm \
+ lib/Labyrinth/Plugin/Event/Venues.pm \
+ lib/Labyrinth/Plugin/Event/Venues.pm.bak
+
+PM_TO_BLIB = lib/Labyrinth/Plugin/Event/Sponsors.pm \
+ blib/lib/Labyrinth/Plugin/Event/Sponsors.pm \
+ lib/Labyrinth/Plugin/Event/Venues.pm.bak \
+ blib/lib/Labyrinth/Plugin/Event/Venues.pm.bak \
+ lib/Labyrinth/Plugin/Event.pm \
+ blib/lib/Labyrinth/Plugin/Event.pm \
+ lib/Labyrinth/Plugin/Event/Venues.pm \
+ blib/lib/Labyrinth/Plugin/Event/Venues.pm \
+ lib/Labyrinth/Plugin/Event/Types.pm \
+ blib/lib/Labyrinth/Plugin/Event/Types.pm \
+ lib/Labyrinth/Plugin/Event/Talks.pm \
+ blib/lib/Labyrinth/Plugin/Event/Talks.pm
+
+
+# --- MakeMaker platform_constants section:
+MM_Unix_VERSION = 6.56
+PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
+
+
+# --- MakeMaker tool_autosplit section:
+# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
+AUTOSPLITFILE = $(ABSPERLRUN) -e 'use AutoSplit; autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)' --
+
+
+
+# --- MakeMaker tool_xsubpp section:
+
+
+# --- MakeMaker tools_other section:
+SHELL = /bin/sh
+CHMOD = chmod
+CP = cp
+MV = mv
+NOOP = $(TRUE)
+NOECHO = @
+RM_F = rm -f
+RM_RF = rm -rf
+TEST_F = test -f
+TOUCH = touch
+UMASK_NULL = umask 0
+DEV_NULL = > /dev/null 2>&1
+MKPATH = $(ABSPERLRUN) -MExtUtils::Command -e 'mkpath' --
+EQUALIZE_TIMESTAMP = $(ABSPERLRUN) -MExtUtils::Command -e 'eqtime' --
+FALSE = false
+TRUE = true
+ECHO = echo
+ECHO_N = echo -n
+UNINST = 0
+VERBINST = 0
+MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install([ from_to => {@ARGV}, verbose => '\''$(VERBINST)'\'', uninstall_shadows => '\''$(UNINST)'\'', dir_mode => '\''$(PERM_DIR)'\'' ]);' --
+DOC_INSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'perllocal_install' --
+UNINSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'uninstall' --
+WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'warn_if_old_packlist' --
+MACROSTART =
+MACROEND =
+USEMAKEFILE = -f
+FIXIN = $(ABSPERLRUN) -MExtUtils::MY -e 'MY->fixin(shift)' --
+
+
+# --- MakeMaker makemakerdflt section:
+makemakerdflt : all
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dist section:
+TAR = tar
+TARFLAGS = cvf
+ZIP = zip
+ZIPFLAGS = -r
+COMPRESS = gzip --best
+SUFFIX = .gz
+SHAR = shar
+PREOP = $(NOECHO) $(NOOP)
+POSTOP = $(NOECHO) $(NOOP)
+TO_UNIX = $(NOECHO) $(NOOP)
+CI = ci -u
+RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
+DIST_CP = best
+DIST_DEFAULT = tardist
+DISTNAME = Labyrinth-Plugin-Event
+DISTVNAME = Labyrinth-Plugin-Event-1.00
+
+
+# --- MakeMaker macro section:
+
+
+# --- MakeMaker depend section:
+
+
+# --- MakeMaker cflags section:
+
+
+# --- MakeMaker const_loadlibs section:
+
+
+# --- MakeMaker const_cccmd section:
+
+
+# --- MakeMaker post_constants section:
+
+
+# --- MakeMaker pasthru section:
+
+PASTHRU = LIBPERL_A="$(LIBPERL_A)"\
+ LINKTYPE="$(LINKTYPE)"\
+ PREFIX="$(PREFIX)"
+
+
+# --- MakeMaker special_targets section:
+.SUFFIXES : .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT)
+
+.PHONY: all config static dynamic test linkext manifest blibdirs clean realclean disttest distdir
+
+
+
+# --- MakeMaker c_o section:
+
+
+# --- MakeMaker xs_c section:
+
+
+# --- MakeMaker xs_o section:
+
+
+# --- MakeMaker top_targets section:
+all :: pure_all manifypods
+ $(NOECHO) $(NOOP)
+
+
+pure_all :: config pm_to_blib subdirs linkext
+ $(NOECHO) $(NOOP)
+
+subdirs :: $(MYEXTLIB)
+ $(NOECHO) $(NOOP)
+
+config :: $(FIRST_MAKEFILE) blibdirs
+ $(NOECHO) $(NOOP)
+
+help :
+ perldoc ExtUtils::MakeMaker
+
+
+# --- MakeMaker blibdirs section:
+blibdirs : $(INST_LIBDIR)$(DFSEP).exists $(INST_ARCHLIB)$(DFSEP).exists $(INST_AUTODIR)$(DFSEP).exists $(INST_ARCHAUTODIR)$(DFSEP).exists $(INST_BIN)$(DFSEP).exists $(INST_SCRIPT)$(DFSEP).exists $(INST_MAN1DIR)$(DFSEP).exists $(INST_MAN3DIR)$(DFSEP).exists
+ $(NOECHO) $(NOOP)
+
+# Backwards compat with 6.18 through 6.25
+blibdirs.ts : blibdirs
+ $(NOECHO) $(NOOP)
+
+$(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_LIBDIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_LIBDIR)
+ $(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists
+
+$(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_ARCHLIB)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHLIB)
+ $(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists
+
+$(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_AUTODIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_AUTODIR)
+ $(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists
+
+$(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHAUTODIR)
+ $(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists
+
+$(INST_BIN)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_BIN)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_BIN)
+ $(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists
+
+$(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_SCRIPT)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_SCRIPT)
+ $(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists
+
+$(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_MAN1DIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN1DIR)
+ $(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists
+
+$(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_MAN3DIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN3DIR)
+ $(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists
+
+
+
+# --- MakeMaker linkext section:
+
+linkext :: $(LINKTYPE)
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dlsyms section:
+
+
+# --- MakeMaker dynamic section:
+
+dynamic :: $(FIRST_MAKEFILE) $(INST_DYNAMIC) $(INST_BOOT)
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dynamic_bs section:
+
+BOOTSTRAP =
+
+
+# --- MakeMaker dynamic_lib section:
+
+
+# --- MakeMaker static section:
+
+## $(INST_PM) has been moved to the all: target.
+## It remains here for awhile to allow for old usage: "make static"
+static :: $(FIRST_MAKEFILE) $(INST_STATIC)
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker static_lib section:
+
+
+# --- MakeMaker manifypods section:
+
+POD2MAN_EXE = $(PERLRUN) "-MExtUtils::Command::MM" -e pod2man "--"
+POD2MAN = $(POD2MAN_EXE)
+
+
+manifypods : pure_all \
+ lib/Labyrinth/Plugin/Event/Sponsors.pm \
+ lib/Labyrinth/Plugin/Event.pm \
+ lib/Labyrinth/Plugin/Event/Venues.pm \
+ lib/Labyrinth/Plugin/Event/Types.pm \
+ lib/Labyrinth/Plugin/Event/Talks.pm
+ $(NOECHO) $(POD2MAN) --section=3 --perm_rw=$(PERM_RW) \
+ lib/Labyrinth/Plugin/Event/Sponsors.pm $(INST_MAN3DIR)/Labyrinth::Plugin::Event::Sponsors.$(MAN3EXT) \
+ lib/Labyrinth/Plugin/Event.pm $(INST_MAN3DIR)/Labyrinth::Plugin::Event.$(MAN3EXT) \
+ lib/Labyrinth/Plugin/Event/Venues.pm $(INST_MAN3DIR)/Labyrinth::Plugin::Event::Venues.$(MAN3EXT) \
+ lib/Labyrinth/Plugin/Event/Types.pm $(INST_MAN3DIR)/Labyrinth::Plugin::Event::Types.$(MAN3EXT) \
+ lib/Labyrinth/Plugin/Event/Talks.pm $(INST_MAN3DIR)/Labyrinth::Plugin::Event::Talks.$(MAN3EXT)
+
+
+
+
+# --- MakeMaker processPL section:
+
+
+# --- MakeMaker installbin section:
+
+
+# --- MakeMaker subdirs section:
+
+# none
+
+# --- MakeMaker clean_subdirs section:
+clean_subdirs :
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker clean section:
+
+# Delete temporary files but do not touch installed files. We don't delete
+# the Makefile here so a later make realclean still has a makefile to use.
+
+clean :: clean_subdirs
+ - $(RM_F) \
+ *$(LIB_EXT) core \
+ core.[0-9] $(INST_ARCHAUTODIR)/extralibs.all \
+ core.[0-9][0-9] $(BASEEXT).bso \
+ pm_to_blib.ts core.[0-9][0-9][0-9][0-9] \
+ $(BASEEXT).x $(BOOTSTRAP) \
+ perl$(EXE_EXT) tmon.out \
+ *$(OBJ_EXT) pm_to_blib \
+ $(INST_ARCHAUTODIR)/extralibs.ld blibdirs.ts \
+ core.[0-9][0-9][0-9][0-9][0-9] *perl.core \
+ core.*perl.*.? $(MAKE_APERL_FILE) \
+ perl $(BASEEXT).def \
+ core.[0-9][0-9][0-9] mon.out \
+ lib$(BASEEXT).def perlmain.c \
+ perl.exe so_locations \
+ $(BASEEXT).exp
+ - $(RM_RF) \
+ blib
+ - $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) $(DEV_NULL)
+
+
+# --- MakeMaker realclean_subdirs section:
+realclean_subdirs :
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker realclean section:
+# Delete temporary files (via clean) and also delete dist files
+realclean purge :: clean realclean_subdirs
+ - $(RM_F) \
+ $(MAKEFILE_OLD) $(FIRST_MAKEFILE)
+ - $(RM_RF) \
+ $(DISTVNAME)
+
+
+# --- MakeMaker metafile section:
+metafile :
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker signature section:
+signature :
+ cpansign -s
+
+
+# --- MakeMaker dist_basics section:
+distclean :: realclean distcheck
+ $(NOECHO) $(NOOP)
+
+distcheck :
+ $(PERLRUN) "-MExtUtils::Manifest=fullcheck" -e fullcheck
+
+skipcheck :
+ $(PERLRUN) "-MExtUtils::Manifest=skipcheck" -e skipcheck
+
+manifest :
+ $(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest
+
+veryclean : realclean
+ $(RM_F) *~ */*~ *.orig */*.orig *.bak */*.bak *.old */*.old
+
+
+
+# --- MakeMaker dist_core section:
+
+dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE)
+ $(NOECHO) $(ABSPERLRUN) -l -e 'print '\''Warning: Makefile possibly out of date with $(VERSION_FROM)'\''' \
+ -e ' if -e '\''$(VERSION_FROM)'\'' and -M '\''$(VERSION_FROM)'\'' < -M '\''$(FIRST_MAKEFILE)'\'';' --
+
+tardist : $(DISTVNAME).tar$(SUFFIX)
+ $(NOECHO) $(NOOP)
+
+uutardist : $(DISTVNAME).tar$(SUFFIX)
+ uuencode $(DISTVNAME).tar$(SUFFIX) $(DISTVNAME).tar$(SUFFIX) > $(DISTVNAME).tar$(SUFFIX)_uu
+
+$(DISTVNAME).tar$(SUFFIX) : distdir
+ $(PREOP)
+ $(TO_UNIX)
+ $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
+ $(RM_RF) $(DISTVNAME)
+ $(COMPRESS) $(DISTVNAME).tar
+ $(POSTOP)
+
+zipdist : $(DISTVNAME).zip
+ $(NOECHO) $(NOOP)
+
+$(DISTVNAME).zip : distdir
+ $(PREOP)
+ $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
+ $(RM_RF) $(DISTVNAME)
+ $(POSTOP)
+
+shdist : distdir
+ $(PREOP)
+ $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
+ $(RM_RF) $(DISTVNAME)
+ $(POSTOP)
+
+
+# --- MakeMaker distdir section:
+create_distdir :
+ $(RM_RF) $(DISTVNAME)
+ $(PERLRUN) "-MExtUtils::Manifest=manicopy,maniread" \
+ -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
+
+distdir : create_distdir
+ $(NOECHO) $(NOOP)
+
+
+
+# --- MakeMaker dist_test section:
+disttest : distdir
+ cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL
+ cd $(DISTVNAME) && $(MAKE) $(PASTHRU)
+ cd $(DISTVNAME) && $(MAKE) test $(PASTHRU)
+
+
+
+# --- MakeMaker dist_ci section:
+
+ci :
+ $(PERLRUN) "-MExtUtils::Manifest=maniread" \
+ -e "@all = keys %{ maniread() };" \
+ -e "print(qq{Executing $(CI) @all\n}); system(qq{$(CI) @all});" \
+ -e "print(qq{Executing $(RCS_LABEL) ...\n}); system(qq{$(RCS_LABEL) @all});"
+
+
+# --- MakeMaker distmeta section:
+distmeta : create_distdir metafile
+ $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \
+ -e ' or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"' --
+
+
+
+# --- MakeMaker distsignature section:
+distsignature : create_distdir
+ $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } ' \
+ -e ' or print "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}\n"' --
+ $(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE
+ cd $(DISTVNAME) && cpansign -s
+
+
+
+# --- MakeMaker install section:
+
+install :: pure_install doc_install
+ $(NOECHO) $(NOOP)
+
+install_perl :: pure_perl_install doc_perl_install
+ $(NOECHO) $(NOOP)
+
+install_site :: pure_site_install doc_site_install
+ $(NOECHO) $(NOOP)
+
+install_vendor :: pure_vendor_install doc_vendor_install
+ $(NOECHO) $(NOOP)
+
+pure_install :: pure_$(INSTALLDIRS)_install
+ $(NOECHO) $(NOOP)
+
+doc_install :: doc_$(INSTALLDIRS)_install
+ $(NOECHO) $(NOOP)
+
+pure__install : pure_site_install
+ $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+doc__install : doc_site_install
+ $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+pure_perl_install :: all
+ $(NOECHO) $(MOD_INSTALL) \
+ read $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist \
+ write $(DESTINSTALLARCHLIB)/auto/$(FULLEXT)/.packlist \
+ $(INST_LIB) $(DESTINSTALLPRIVLIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \
+ $(INST_BIN) $(DESTINSTALLBIN) \
+ $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(DESTINSTALLMAN1DIR) \
+ $(INST_MAN3DIR) $(DESTINSTALLMAN3DIR)
+ $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+ $(SITEARCHEXP)/auto/$(FULLEXT)
+
+
+pure_site_install :: all
+ $(NOECHO) $(MOD_INSTALL) \
+ read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \
+ write $(DESTINSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \
+ $(INST_LIB) $(DESTINSTALLSITELIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLSITEARCH) \
+ $(INST_BIN) $(DESTINSTALLSITEBIN) \
+ $(INST_SCRIPT) $(DESTINSTALLSITESCRIPT) \
+ $(INST_MAN1DIR) $(DESTINSTALLSITEMAN1DIR) \
+ $(INST_MAN3DIR) $(DESTINSTALLSITEMAN3DIR)
+ $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+ $(PERL_ARCHLIB)/auto/$(FULLEXT)
+
+pure_vendor_install :: all
+ $(NOECHO) $(MOD_INSTALL) \
+ read $(VENDORARCHEXP)/auto/$(FULLEXT)/.packlist \
+ write $(DESTINSTALLVENDORARCH)/auto/$(FULLEXT)/.packlist \
+ $(INST_LIB) $(DESTINSTALLVENDORLIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
+ $(INST_BIN) $(DESTINSTALLVENDORBIN) \
+ $(INST_SCRIPT) $(DESTINSTALLVENDORSCRIPT) \
+ $(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \
+ $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
+
+doc_perl_install :: all
+ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+ -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+ -$(NOECHO) $(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLPRIVLIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+ >> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+doc_site_install :: all
+ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+ -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+ -$(NOECHO) $(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLSITELIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+ >> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+doc_vendor_install :: all
+ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+ -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+ -$(NOECHO) $(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLVENDORLIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+ >> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+
+uninstall :: uninstall_from_$(INSTALLDIRS)dirs
+ $(NOECHO) $(NOOP)
+
+uninstall_from_perldirs ::
+ $(NOECHO) $(UNINSTALL) $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist
+
+uninstall_from_sitedirs ::
+ $(NOECHO) $(UNINSTALL) $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist
+
+uninstall_from_vendordirs ::
+ $(NOECHO) $(UNINSTALL) $(VENDORARCHEXP)/auto/$(FULLEXT)/.packlist
+
+
+# --- MakeMaker force section:
+# Phony target to force checking subdirectories.
+FORCE :
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker perldepend section:
+
+
+# --- MakeMaker makefile section:
+# We take a very conservative approach here, but it's worth it.
+# We move Makefile to Makefile.old here to avoid gnu make looping.
+$(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP)
+ $(NOECHO) $(ECHO) "Makefile out-of-date with respect to $?"
+ $(NOECHO) $(ECHO) "Cleaning current config before rebuilding Makefile..."
+ -$(NOECHO) $(RM_F) $(MAKEFILE_OLD)
+ -$(NOECHO) $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD)
+ - $(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) clean $(DEV_NULL)
+ $(PERLRUN) Makefile.PL
+ $(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <=="
+ $(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command. <=="
+ $(FALSE)
+
+
+
+# --- MakeMaker staticmake section:
+
+# --- MakeMaker makeaperl section ---
+MAP_TARGET = perl
+FULLPERL = /usr/bin/perl
+
+$(MAP_TARGET) :: static $(MAKE_APERL_FILE)
+ $(MAKE) $(USEMAKEFILE) $(MAKE_APERL_FILE) $@
+
+$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE) pm_to_blib
+ $(NOECHO) $(ECHO) Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
+ $(NOECHO) $(PERLRUNINST) \
+ Makefile.PL DIR= \
+ MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
+ MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=
+
+
+# --- MakeMaker test section:
+
+TEST_VERBOSE=0
+TEST_TYPE=test_$(LINKTYPE)
+TEST_FILE = test.pl
+TEST_FILES = t/*.t
+TESTDB_SW = -d
+
+testdb :: testdb_$(LINKTYPE)
+
+test :: $(TEST_TYPE) subdirs-test
+
+subdirs-test ::
+ $(NOECHO) $(NOOP)
+
+
+test_dynamic :: pure_all
+ PERL_DL_NONLAZY=1 $(FULLPERLRUN) "-MExtUtils::Command::MM" "-e" "test_harness($(TEST_VERBOSE), '$(INST_LIB)', '$(INST_ARCHLIB)')" $(TEST_FILES)
+
+testdb_dynamic :: pure_all
+ PERL_DL_NONLAZY=1 $(FULLPERLRUN) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE)
+
+test_ : test_dynamic
+
+test_static :: test_dynamic
+testdb_static :: testdb_dynamic
+
+
+# --- MakeMaker ppd section:
+# Creates a PPD (Perl Package Description) for a binary distribution.
+ppd :
+ $(NOECHO) $(ECHO) '<SOFTPKG NAME="$(DISTNAME)" VERSION="1.00">' > $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <ABSTRACT>Events plugin for the Labyrinth framework</ABSTRACT>' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <AUTHOR>Barbie &lt;barbie@cpan.org&gt;</AUTHOR>' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <IMPLEMENTATION>' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <REQUIRE NAME="Clone::" />' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <REQUIRE NAME="Labyrinth::" VERSION="5.04" />' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <REQUIRE NAME="Labyrinth::Plugin::Articles::Sections" VERSION="5.06" />' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <REQUIRE NAME="Time::Local" />' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <ARCHITECTURE NAME="i486-linux-gnu-thread-multi-5.10" />' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <CODEBASE HREF="" />' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' </IMPLEMENTATION>' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) '</SOFTPKG>' >> $(DISTNAME).ppd
+
+
+# --- MakeMaker pm_to_blib section:
+
+pm_to_blib : $(FIRST_MAKEFILE) $(TO_INST_PM)
+ $(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', q[$(PM_FILTER)], '\''$(PERM_DIR)'\'')' -- \
+ lib/Labyrinth/Plugin/Event/Sponsors.pm blib/lib/Labyrinth/Plugin/Event/Sponsors.pm \
+ lib/Labyrinth/Plugin/Event/Venues.pm.bak blib/lib/Labyrinth/Plugin/Event/Venues.pm.bak \
+ lib/Labyrinth/Plugin/Event.pm blib/lib/Labyrinth/Plugin/Event.pm \
+ lib/Labyrinth/Plugin/Event/Venues.pm blib/lib/Labyrinth/Plugin/Event/Venues.pm \
+ lib/Labyrinth/Plugin/Event/Types.pm blib/lib/Labyrinth/Plugin/Event/Types.pm \
+ lib/Labyrinth/Plugin/Event/Talks.pm blib/lib/Labyrinth/Plugin/Event/Talks.pm
+ $(NOECHO) $(TOUCH) pm_to_blib
+
+
+# --- MakeMaker selfdocument section:
+
+
+# --- MakeMaker postamble section:
+
+
+# End.
15 Makefile.PL
@@ -0,0 +1,15 @@
+use 5.006;
+use ExtUtils::MakeMaker;
+WriteMakefile(
+ NAME => 'Labyrinth::Plugin::Event',
+ VERSION_FROM => 'lib/Labyrinth/Plugin/Event.pm',
+ PREREQ_PM => {
+ 'Labyrinth' => '5.04',
+ 'Labyrinth::Plugin::Articles::Sections' => '5.06',
+ 'Clone' => '0',
+ 'Time::Local' => '0'
+ },
+ NO_META => 1,
+ ABSTRACT => 'Events plugin for the Labyrinth framework',
+ AUTHOR => 'Barbie <barbie@cpan.org>',
+);
83 README
@@ -0,0 +1,83 @@
+Labyrinth::Plugin::Event Labyrinth::Plugin::Event(3)
+
+
+NAME
+ Labyrinth::Plugin::Event - Events handler for the Labyrinth framework.
+
+DESCRIPTION
+ Contains all the event functionality for Labyrinth.
+
+PUBLIC INTERFACE METHODS
+ Full Event Details
+ NextEvent()
+ Retrieves the next event for event type.
+
+ NextEvents()
+ Retrieves all the future events for event type.
+
+ PrevEvents()
+ Retrieves all the future events for event type.
+
+ Event Lists
+ ShortList()
+ Proives a list of forthcoming events, with abbreviations as
+ appropriate. Defaults to 365 days or 20 events, but these limits
+ can be set in the configuration as 'eventsshortlistdays' and
+ 'eventsshortlistcount' respectively.
+
+ LongList()
+ Provides a list of forthcoming events. No defaults, will return the
+ list based on the configured limits or all future events if no
+ configuration. Values can be set for 'eventslonglistdays' and
+ 'eventslonglistcount'.
+
+ Item()
+ Provides the specified event.
+
+ADMIN INTERFACE METHODS
+ Events
+ ImageCheck
+ Provides a true or false value as to whether images have been used
+ within any event descriptions.
+
+ Admin
+ Provides list of the events currently available.
+
+ Add Add a new event.
+
+ Edit
+ Edit an existing event.
+
+ Copy
+ Copy an existing event, creating a new event.
+
+ Save
+ Save the current event.
+
+ Promote
+ Promote the published status of the specified event by one level.
+
+ Delete
+ Delete the specified events.
+
+ Event Attributes
+ VenueSelect
+ Provides a dropdown list of venues available.
+
+SEE ALSO
+ Labyrinth
+
+AUTHOR
+ Barbie, <barbie@missbarbell.co.uk> for Miss Barbell Productions,
+ <http://www.missbarbell.co.uk/>
+
+COPYRIGHT & LICENSE
+ Copyright (C) 2002-2011 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.
+
+
+
+perl v5.10.1 2011-04-08 Labyrinth::Plugin::Event(3)
622 lib/Labyrinth/Plugin/Event.pm
@@ -0,0 +1,622 @@
+package Labyrinth::Plugin::Event;
+
+use warnings;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '1.00';
+
+=head1 NAME
+
+Labyrinth::Plugin::Event - Events handler for the Labyrinth framework.
+
+=head1 DESCRIPTION
+
+Contains all the event functionality for Labyrinth.
+
+=cut
+
+# -------------------------------------
+# Library Modules
+
+use base qw(Labyrinth::Plugin::Base);
+
+use Clone qw(clone);
+use Time::Local;
+
+use Labyrinth::DBUtils;
+use Labyrinth::DTUtils;
+use Labyrinth::MLUtils;
+use Labyrinth::Session;
+use Labyrinth::Support;
+use Labyrinth::Users;
+use Labyrinth::Variables;
+
+use Labyrinth::Plugin::Articles::Sections;
+use Labyrinth::Plugin::Event::Sponsors;
+use Labyrinth::Plugin::Event::Types;
+
+# -------------------------------------
+# Variables
+
+my $ADAY = 86400;
+
+# type: 0 = optional, 1 = mandatory
+# html: 0 = none, 1 = text, 2 = textarea
+
+my %fields = (
+ eventid => { type => 0, html => 0 },
+ folderid => { type => 0, html => 0 },
+ userid => { type => 0, html => 0 },
+ imageid => { type => 0, html => 0 },
+ title => { type => 1, html => 1 },
+ listeddate => { type => 1, html => 1 },
+ eventdate => { type => 1, html => 1 },
+ eventtime => { type => 1, html => 1 },
+ eventtypeid => { type => 1, html => 0 },
+ sponsorid => { type => 0, html => 0 },
+ venueid => { type => 0, html => 0 },
+ publish => { type => 1, html => 0 },
+ body => { type => 1, html => 2 },
+ links => { type => 0, html => 2 },
+ image => { type => 0, html => 0 },
+ align => { type => 0, html => 0 },
+);
+
+my (@mandatory,@allfields);
+for(keys %fields) {
+ push @mandatory, $_ if($fields{$_}->{type});
+ push @allfields, $_;
+}
+
+my $LEVEL = EDITOR;
+
+# -------------------------------------
+# The Subs
+
+=head1 PUBLIC INTERFACE METHODS
+
+=head2 Full Event Details
+
+=over 4
+
+=item NextEvent()
+
+Retrieves the next event for event type.
+
+=item NextEvents()
+
+Retrieves all the future events for event type.
+
+=item PrevEvents()
+
+Retrieves all the future events for event type.
+
+=back
+
+=cut
+
+sub NextEvent {
+ my $timer = _get_timer();
+ my @rows;
+
+ $cgiparams{eventtypeid} ||= 0;
+
+ if($cgiparams{eventtypeid}) {
+ @rows = $dbi->GetQuery('hash','GetNextEventByType',$timer,$cgiparams{eventtypeid});
+ } else {
+ @rows = $dbi->GetQuery('hash','GetNextEvent',$timer);
+ }
+ return unless(@rows);
+
+ $tvars{event}{$cgiparams{eventtype}}{next} = $rows[0];
+
+ my @talks = $dbi->GetQuery('hash','GetEventTalks',$rows[0]->{eventid});
+ if(@talks) {
+ for my $talk (@talks) {
+ my %talk = map {$_ => $talk->{$_}} qw(userid realname guest talktitle abstract);
+ push @{ $tvars{event}{$cgiparams{eventtypeid}}{talks} }, \%talk;
+ }
+ }
+
+ my @dates;
+ push @dates, formatDate(10,$_->{listdate}) for(@rows);
+ $tvars{events}{$cgiparams{eventtypeid}}{dates} = \@dates if(@dates);
+}
+
+sub NextEvents {
+ my $timer = _get_timer();
+ my @rows;
+
+ $cgiparams{eventtypeid} ||= 0;
+
+ if($cgiparams{eventtypeid}) {
+ @rows = $dbi->GetQuery('hash','GetNextEventsByType',$timer,$cgiparams{eventtypeid});
+ } else {
+ @rows = $dbi->GetQuery('hash','GetNextEvents',$timer);
+ }
+ return unless(@rows);
+
+ my @dates;
+ for my $row (@rows) {
+ push @dates, formatDate(10,$_->{listdate});
+ }
+
+ $tvars{events}{$cgiparams{eventtypeid}}{future} = $rows[0];
+ $tvars{events}{$cgiparams{eventtypeid}}{dates} = \@dates if(@dates);
+
+ if($cgiparams{eventtypeid}) {
+ my $sections = Labyrinth::Plugin::Articles::Sections->new();
+ $sections->GetSection('eventtype' . $cgiparams{eventtypeid});
+ $tvars{events}{$cgiparams{eventtypeid}}{intro} = $tvars{page}{section};
+ }
+}
+
+sub PrevEvents {
+ my $timer = _get_timer();
+ my @rows;
+
+ $cgiparams{eventtypeid} ||= 0;
+
+ if($cgiparams{eventtypeid}) {
+ @rows = $dbi->GetQuery('hash','GetPrevEventsByType',$timer,$cgiparams{eventtypeid});
+ } else {
+ @rows = $dbi->GetQuery('hash','GetPrevEvents',$timer);
+ }
+
+ my %data;
+ for my $row (@rows) {
+ $data{$row->{listdate}}->{eventid} = $row->{eventid};
+ $data{$row->{listdate}}->{date} = $row->{eventdate};
+ my %talk = map {$_ => $row->{$_}} qw(realname guest talktitle);
+ push @{$data{$row->{listdate}}->{talks}}, \%talk;
+
+ }
+ my @data = map {$data{$_}} reverse sort keys %data;
+ $tvars{events} = \@data if(@data);
+
+ if($cgiparams{eventtypeid}) {
+ my $sections = Labyrinth::Plugin::Articles::Sections->new();
+ $sections->GetSection('eventtype' . $cgiparams{eventtypeid});
+ $tvars{events}{$cgiparams{eventtypeid}}{intro} = $tvars{page}{section};
+ }
+}
+
+sub _get_timer {
+ my $date = formatDate(3);
+ my ($day,$month,$year) = split("/",$date);
+
+ return timelocal(0,0,0,$day,$month-1,$year);
+}
+
+=head2 Event Lists
+
+=over 4
+
+=item ShortList()
+
+Proives a list of forthcoming events, with abbreviations as appropriate.
+Defaults to 365 days or 20 events, but these limits can be set in the
+configuration as 'eventsshortlistdays' and 'eventsshortlistcount' respectively.
+
+=item LongList()
+
+Provides a list of forthcoming events. No defaults, will return the list based
+on the configured limits or all future events if no configuration. Values can
+be set for 'eventslonglistdays' and 'eventslonglistcount'.
+
+=item Item()
+
+Provides the specified event.
+
+=back
+
+=cut
+
+sub ShortList {
+ my $date = formatDate(3);
+ my ($day,$month,$year) = split("/",$date);
+ my $daylimit = $settings{eventsshortlistdays} || 365;
+ my $numlimit = $settings{eventsshortlistcount} || 20;
+
+ my @events;
+ my $events = _events_list($year,$month,$day,$daylimit,$numlimit);
+ for my $event (@$events) {
+ for my $abbr (keys %{ $settings{abbreviations} }) {
+ $event->{title} =~ s/$abbr/$settings{abbreviations}{$abbr}/;
+ }
+ $event->{eventdate} =~ s/\s+/&nbsp;/g;
+ push @events, $event;
+ }
+
+ $tvars{events}{shortlist} = \@events;
+}
+
+sub LongList {
+ my ($day,$month,$year) = _startdate();
+ my $daylimit = $settings{eventslonglistdays};
+ my $numlimit = $settings{eventslonglistcount};
+ $year = '2000';
+
+ my $eventtypes = Labyrinth::Plugin::Event::Types->new();
+
+ my $list = _events_list($year,$month,$day,$daylimit,$numlimit);
+
+ $tvars{events}{longlist} = $list if(defined $list);
+ $tvars{events}{ddpublish} = PublishSelect($cgiparams{'publish'},1);
+ $tvars{events}{ddtypes} = $eventtypes->EventTypeSelect($cgiparams{'eventtypeid'},1);
+}
+
+sub _events_list {
+ my ($year,$month,$day,$daylimit,$numlimit) = @_;
+ my @rows;
+
+ $daylimit ||= 0;
+ $numlimit ||= 0;
+
+ my $timer = timelocal(0,0,0,$day,$month-1,$year);
+ my $limit = $timer + ($daylimit * $ADAY);
+
+ my @where = ("listdate>=$timer");
+ push @where, "eventtypeid=$cgiparams{'eventtypeid'}" if($cgiparams{'eventtypeid'});
+ push @where, "publish=$cgiparams{'publish'}" if($cgiparams{'publish'});
+ my $where = @where ? join(' AND ',@where) : '';
+
+ my $num = 0;
+ my $next = $dbi->Iterator('hash','GetEventsByDate',{where=>$where});
+ while(my $row = $next->()) {
+ last if($daylimit && $row->{listdate} > $limit);
+ last if($numlimit && $num > $numlimit);
+
+ $row->{snippet} = $row->{body};
+ $row->{snippet} =~ s!^(?:.*?)?<p>(.*?)</p>.*$!<p>$1...</p>!si;
+ $row->{shortdate} = $row->{eventdate};
+ $row->{shortdate} =~ s/([A-Za-z]{3}).*/$1/;
+ $row->{links} =~ s!\*!<br />!g;
+ push @rows, $row;
+ $num++;
+ }
+
+ return unless(@rows);
+ return \@rows;
+}
+
+sub _startdate {
+ my %base = (
+ day => 1,
+ month => isMonth(),
+ year => formatDate(1)
+ );
+ my $base = sprintf "%04d%02d%02d", $base{year},$base{month},$base{day};
+
+ my @time = localtime(time);
+ my $time = sprintf "%04d%02d%02d", $time[5]+1900,$time[4]+1,$time[3];
+
+ my @date = map {$cgiparams{$_} || $base{$_}} qw(year month day);
+ my $date = sprintf "%04d%02d%02d", @date;
+
+#use Labyrinth::Audit;
+#LogDebug("base=$base");
+#LogDebug("time=$time");
+#LogDebug("date=$date");
+
+ if($date < $time) {
+ return ($time[3],$time[4]+1,$time[5]+1900);
+ }
+
+ return reverse @date;
+}
+
+sub Item {
+ return unless($cgiparams{'eventid'});
+
+ my @rows = $dbi->GetQuery('hash','GetEventByID',$cgiparams{'eventid'});
+ $tvars{event} = $rows[0] if(@rows);
+
+ my @talks = $dbi->GetQuery('hash','GetEventTechTalks',$cgiparams{eventid});
+ $tvars{event}{talks} = \@talks if(@talks);
+}
+
+=head1 ADMIN INTERFACE METHODS
+
+=head2 Events
+
+=over 4
+
+=item Admin
+
+Provides list of the events currently available.
+
+=item Add
+
+Add a new event.
+
+=item Edit
+
+Edit an existing event.
+
+=item Copy
+
+Copy an existing event, creating a new event.
+
+=item Save
+
+Save the current event.
+
+=item Promote
+
+Promote the published status of the specified event by one level.
+
+=item Delete
+
+Delete the specified events.
+
+=back
+
+=cut
+
+sub Admin {
+ return unless AccessUser(EDITOR);
+
+ if($cgiparams{doaction}) {
+ if($cgiparams{doaction} eq 'Delete' ) { Delete(); }
+ elsif($cgiparams{doaction} eq 'Copy' ) { Copy(); }
+ elsif($cgiparams{doaction} eq 'Promote') { Promote(); }
+ }
+
+ my $month = $cgiparams{'month'};
+ my $year = $cgiparams{'year'};
+
+ my @where;
+ push @where, "userid=$tvars{'loginid'}" unless(Authorised(PUBLISHER));
+ if($cgiparams{'publish'}) {
+ push @where, "publish=$cgiparams{'publish'}";
+ } else {
+ push @where, "publish<4";
+ }
+ push @where, "eventtype=$cgiparams{'eventtype'}" if($cgiparams{'eventtype'});
+ my $where = @where ? 'WHERE '.join(' AND ',@where) : '';
+
+ my $eventtypes = Labyrinth::Plugin::Event::Types->new();
+
+ my @rows = $dbi->GetQuery('hash','AllEvents',{where=>$where});
+ foreach my $row (@rows) {
+ $row->{publishstate} = PublishState($row->{publish});
+ $row->{createdate} = formatDate(3,$row->{listdate});
+ $row->{eventtype} = $eventtypes->EventType($row->{eventtypeid});
+ $row->{name} = UserName($row->{userid});
+ }
+ $tvars{data} = \@rows if(@rows);
+
+ $tvars{ddpublish} = PublishSelect($cgiparams{'publish'},1);
+ $tvars{ddtypes} = $eventtypes->EventTypeSelect($cgiparams{'eventtype'},1);
+}
+
+sub Add {
+ return unless AccessUser(EDITOR);
+
+ my $eventtypes = Labyrinth::Plugin::Event::Types->new();
+ my $sponsors = Labyrinth::Plugin::Event::Sponsors->new();
+
+ my %data = (
+ folderid => 1,
+ title => '',
+ userid => $tvars{loginid},
+ name => $tvars{user}->{name},
+ createdate => formatDate(4),
+ body => '',
+ imageid => 1,
+ ddalign => AlignSelect(1),
+ ddtype => $eventtypes->EventTypeSelect(0,1),
+ link => 'images/blank.png',
+ ddpublish => PublishAction(1,1),
+ );
+
+ $tvars{data} = \%data;
+
+ my $promote = 0;
+ $promote = 1 if(Authorised(EDITOR));
+ $tvars{data}{ddpublish} = PublishAction(1,$promote);
+ $tvars{data}{ddpublish} = PublishSelect(1) if(Authorised(ADMIN));
+
+ $tvars{data}{ddvenue} = VenueSelect($tvars{data}{venueid},1);
+ $tvars{data}{ddsponsor} = $sponsors->SponsorSelect($tvars{data}{sponsorid},1);
+}
+
+sub Edit {
+ return unless AuthorCheck('GetEventByID','eventid',EDITOR);
+
+ if($tvars{data}{publish} == 4 && $tvars{command} ne 'view') {
+ $tvars{errcode} = 'FAILURE';
+ return;
+ }
+
+ my $eventtypes = Labyrinth::Plugin::Event::Types->new();
+ my $sponsors = Labyrinth::Plugin::Event::Sponsors->new();
+
+ $tvars{data}{align} = $cgiparams{ALIGN0};
+ $tvars{data}{alignment} = Alignment($tvars{data}{align});
+ $tvars{data}{ddalign} = AlignSelect($tvars{data}{align});
+ $tvars{data}{name} = UserName($tvars{data}{userid});
+ $tvars{data}{ddtype} = $eventtypes->EventTypeSelect($tvars{data}{eventtypeid},1);
+ $tvars{data}{createdate} = formatDate(4,$tvars{data}{createdate});
+ $tvars{data}{ddvenue} = VenueSelect($tvars{data}{venueid},1);
+ $tvars{data}{ddsponsor} = $sponsors->SponsorSelect($tvars{data}{sponsorid},1);
+
+ my $promote = 0;
+ $promote = 1 if($tvars{data}{publish} == 1 && Authorised(EDITOR));
+ $promote = 1 if($tvars{data}{publish} == 2 && Authorised(PUBLISHER));
+ $promote = 1 if($tvars{data}{publish} == 3 && Authorised(PUBLISHER));
+ $tvars{data}{ddpublish} = PublishAction($tvars{data}{publish},$promote);
+ $tvars{data}{ddpublish} = PublishSelect($tvars{data}{publish}) if(Authorised(ADMIN));
+
+ my @rows = $dbi->GetQuery('hash','GetEventTechTalks',$tvars{data}{eventid});
+ $tvars{data}{talks} = \@rows if(@rows);
+
+ $tvars{preview} = clone($tvars{data}); # data fields need to be editable
+
+ for(keys %fields) {
+ if($fields{$_}->{html} == 1) { $tvars{data}{$_} = CleanHTML($tvars{data}{$_}) }
+ elsif($fields{$_}->{html} == 2) { $tvars{data}{$_} = SafeHTML($tvars{data}{$_});
+ $tvars{preview}{$_} = CleanTags($tvars{preview}{$_}) }
+ elsif($fields{$_}->{html} == 3) { $tvars{data}{$_} = SafeHTML($tvars{data}{$_});
+ $tvars{preview}{$_} = CleanTags($tvars{preview}{$_}) }
+ }
+
+ $tvars{data}{listeddate} = formatDate(3,$tvars{data}{listdate});
+}
+
+sub Copy {
+ $cgiparams{'eventid'} = $cgiparams{'LISTED'};
+ return unless AuthorCheck('GetEventByID','eventid',EDITOR);
+
+ my @fields = ( $tvars{data}{folderid},
+ $tvars{data}{title},
+ $tvars{data}{eventdate},
+ $tvars{data}{eventtime},
+ $tvars{data}{eventtypeid},
+ $tvars{data}{venueid},
+ $tvars{data}{body},
+ $tvars{data}{links},
+ $tvars{data}{imageid},
+ $tvars{data}{align},
+ 1,
+ $tvars{data}{sponsorid},
+ $tvars{data}{listdate},
+ formatDate(0),
+ $tvars{loginid});
+
+ $cgiparams{eventid} = $dbi->IDQuery('AddEvent',@fields);
+
+ $tvars{errcode} = 'NEXT';
+ $tvars{command} = 'event-edit';
+}
+
+sub Save {
+ return unless AuthorCheck('GetEventByID','eventid',EDITOR);
+
+ for(keys %fields) {
+ next unless($fields{$_});
+ if($fields{$_}->{html} == 1) { $cgiparams{$_} = CleanHTML($cgiparams{$_}) }
+ elsif($fields{$_}->{html} == 2) { $cgiparams{$_} = CleanTags($cgiparams{$_}) }
+ }
+
+ return if FieldCheck(\@allfields,\@mandatory);
+
+ # check whether listing date has changed
+ my $listeddate = formatDate(3,$tvars{data}{listdate});
+ $tvars{data}{listdate} = unformatDate(3,$tvars{data}{listeddate})
+ unless($listeddate eq $tvars{data}{listeddate});
+
+ my $imageid = 1;
+ # withdrawn, may be reintroduced later.
+ #my $imageid = $tvars{data}{'imageid'} || 1;
+ #($imageid) = Images::SaveImageFile(
+ # param => 'image',
+ # stock => 4) if($cgiparams{image});
+
+ my %fields = map {$_ => 1} @allfields;
+ delete $fields{$_} for @mandatory;
+ $tvars{data}{$_} ||= undef for keys %fields;
+
+ $tvars{data}{align} ||= 1;
+
+ my @fields = ( $tvars{data}{folderid},
+ $tvars{data}{title},
+ $tvars{data}{eventdate},
+ $tvars{data}{eventtime},
+ $tvars{data}{eventtypeid},
+ $tvars{data}{venueid},
+ $imageid,
+ $tvars{data}{align},
+ $tvars{data}{publish},
+ $tvars{data}{sponsorid},
+ $tvars{data}{listdate},
+ $tvars{data}{body},
+ $tvars{data}{links}
+ );
+
+ if($cgiparams{eventid})
+ { $dbi->DoQuery('SaveEvent',@fields,$cgiparams{eventid}); }
+ else { $cgiparams{eventid} = $dbi->IDQuery('AddEvent',@fields,$tvars{loginid}); }
+
+ $tvars{thanks} = 1;
+}
+
+sub Promote {
+ return unless AccessUser(ADMIN);
+ my @ids = CGIArray('LISTED');
+ return unless @ids;
+
+ for my $id (@ids) {
+ $cgiparams{'eventid'} = $id;
+ next unless AuthorCheck('GetEventByID','eventid');
+
+ my $publish = $tvars{data}{publish} + 1;
+ next unless($publish < 5);
+ $dbi->DoQuery('PromoteEvent',$publish,$cgiparams{'eventid'});
+ }
+}
+
+sub Delete {
+ return unless AccessUser(EDITOR);
+ my @ids = CGIArray('LISTED');
+ return unless @ids;
+
+ for my $id (@ids) {
+ $cgiparams{'eventid'} = $id;
+ next unless AuthorCheck('GetEventByID','eventid',EDITOR);
+ $dbi->DoQuery('DeleteEvent',$cgiparams{'eventid'});
+ }
+}
+
+=head2 Event Attributes
+
+=over 4
+
+=item VenueSelect
+
+Provides a dropdown list of venues available.
+
+=back
+
+=cut
+
+sub VenueSelect {
+ my ($opt,$blank) = @_;
+ $blank ||= 0;
+
+ my @list = $dbi->GetQuery('hash','AllVenues');
+ unshift @list, { venueid => 0, venue => 'Select A Venue' } if($blank == 1);
+ DropDownRows($opt,'venueid','venueid','venue',@list);
+}
+
+# withdrawn, may be reintroduced later.
+#sub ImageCheck {
+# my @rows = $dbi->GetQuery('array','EventsImageCheck',$_[0]);
+# @rows ? 1 : 0;
+#}
+
+
+1;
+
+__END__
+
+=head1 SEE ALSO
+
+L<Labyrinth>
+
+=head1 AUTHOR
+
+Barbie, <barbie@missbarbell.co.uk> for
+Miss Barbell Productions, L<http://www.missbarbell.co.uk/>
+
+=head1 COPYRIGHT & LICENSE
+
+ Copyright (C) 2002-2011 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
181 lib/Labyrinth/Plugin/Event/Sponsors.pm
@@ -0,0 +1,181 @@
+package Labyrinth::Plugin::Event::Sponsors;
+
+use warnings;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '1.00';
+
+=head1 NAME
+
+Labyrinth::Plugin::Event::Sponsors - Event Sponsor handler for the Labyrinth framework.
+
+=head1 DESCRIPTION
+
+Contains all the event sponsor functionality for Labyrinth.
+
+=cut
+
+# -------------------------------------
+# Library Modules
+
+use base qw(Labyrinth::Plugin::Base);
+
+use Clone qw(clone);
+
+use Labyrinth::DBUtils;
+use Labyrinth::MLUtils;
+use Labyrinth::Support;
+use Labyrinth::Variables;
+
+# -------------------------------------
+# Variables
+
+# type: 0 = optional, 1 = mandatory
+# html: 0 = none, 1 = text, 2 = textarea
+
+
+my %fields = (
+ sponsorid => { type => 1, html => 0 },
+ sponsor => { type => 1, html => 1 },
+ sponsorlink => { type => 0, html => 1 },
+);
+
+my (@mandatory,@allfields);
+for(keys %fields) {
+ push @mandatory, $_ if($fields{$_}->{type});
+ push @allfields, $_;
+}
+
+our $INDEXKEY = 'sponsorid';
+our $LEVEL = ADMIN;
+
+# -------------------------------------
+# The Subs
+
+=head1 PUBLIC INTERFACE METHODS
+
+=over 4
+
+=item SponsorSelect
+
+Provides a dropdown list of sponsors available.
+
+=back
+
+=cut
+
+sub SponsorSelect {
+ my ($self,$opt,$blank) = @_;
+ $blank ||= 0;
+
+ my @rows = $dbi->GetQuery('hash','AllSponsors');
+ my @list;
+ for(@rows) { push @list, { id => $_->{sponsorid}, value => $_->{sponsor} }; }
+ unshift @list, { id => 0, value => 'Select Sponsor' } if($blank == 1);
+ DropDownRows($opt,$INDEXKEY,'id','value',@list);
+}
+
+=head1 ADMIN INTERFACE METHODS
+
+=over 4
+
+=item Admin
+
+Provides list of the sponsors currently available.
+
+=item Add
+
+Add a new sponsor.
+
+=item Edit
+
+Edit an existing sponsor.
+
+=item Save
+
+Save the current sponsor.
+
+=item Delete
+
+Delete a sponsor.
+
+=back
+
+=cut
+
+sub Admin {
+ return unless AccessUser(ADMIN);
+
+ if($cgiparams{doaction}) {
+ if($cgiparams{doaction} eq 'Delete') { Delete(); }
+ }
+
+ my @rows = $dbi->GetQuery('hash','AllSponsors');
+ $tvars{data} = \@rows if(@rows);
+}
+
+sub Add {
+ return unless AccessUser(ADMIN);
+ $tvars{data} = {
+ sponsor => 'Sponsor',
+ sponsorlink => ''
+ };
+}
+
+sub Edit {
+ return unless AccessUser(ADMIN);
+ return unless AuthorCheck('GetSponsorByID',$INDEXKEY,ADMIN);
+}
+
+sub Save {
+ return unless AccessUser(ADMIN);
+ return unless AuthorCheck('GetSponsorByID',$INDEXKEY,ADMIN);
+
+ return if FieldCheck(\@allfields,\@mandatory);
+
+ for(keys %fields) {
+ next unless($fields{$_});
+ if($fields{$_}->{html} == 1) { $tvars{data}->{$_} = CleanHTML($tvars{data}->{$_}) }
+ elsif($fields{$_}->{html} == 2) { $tvars{data}->{$_} = CleanTags($tvars{data}->{$_}) }
+ }
+
+ my @fields = ( $tvars{data}->{sponsor},
+ $tvars{data}->{sponsorlink}
+ );
+
+ if($cgiparams{$INDEXKEY})
+ { $dbi->DoQuery('SaveSponsor',@fields,$cgiparams{$INDEXKEY}); }
+ else { $cgiparams{$INDEXKEY} = $dbi->IDQuery('AddSponsor',@fields); }
+}
+
+sub Delete {
+ return unless AccessUser(ADMIN);
+ my @ids = CGIArray('LISTED');
+ return unless @ids;
+
+ $dbi->DoQuery('DeleteSponsors',{ids => join(',',@ids)});
+}
+
+1;
+
+__END__
+
+=head1 SEE ALSO
+
+L<Labyrinth>
+
+=head1 AUTHOR
+
+Barbie, <barbie@missbarbell.co.uk> for
+Miss Barbell Productions, L<http://www.missbarbell.co.uk/>
+
+=head1 COPYRIGHT & LICENSE
+
+ Copyright (C) 2002-2011 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
201 lib/Labyrinth/Plugin/Event/Talks.pm
@@ -0,0 +1,201 @@
+package Labyrinth::Plugin::Event::Talks;
+
+use warnings;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '1.00';
+
+=head1 NAME
+
+Labyrinth::Plugin::Event::Talks - Event Talk handler for the Labyrinth framework.
+
+=head1 DESCRIPTION
+
+Contains all the event talk functionality for Labyrinth.
+
+=cut
+
+# -------------------------------------
+# Library Modules
+
+use base qw(Labyrinth::Plugin::Base);
+
+use Clone qw(clone);
+
+use Labyrinth::DBUtils;
+use Labyrinth::MLUtils;
+use Labyrinth::Session;
+use Labyrinth::Support;
+use Labyrinth::Users;
+use Labyrinth::Variables;
+
+# -------------------------------------
+# Variables
+
+# type: 0 = optional, 1 = mandatory
+# html: 0 = none, 1 = text, 2 = textarea
+
+
+my %fields = (
+ eventid => { type => 1, html => 0 },
+ talkid => { type => 0, html => 0 },
+ userid => { type => 1, html => 0 },
+ guest => { type => 0, html => 0 },
+ talktitle => { type => 1, html => 1 },
+ abstract => { type => 1, html => 2 },
+ resource => { type => 0, html => 2 },
+);
+
+my (@mandatory,@allfields);
+for(keys %fields) {
+ push @mandatory, $_ if($fields{$_}->{type});
+ push @allfields, $_;
+}
+
+# -------------------------------------
+# The Subs
+
+=head1 ADMIN INTERFACE METHODS
+
+=over 4
+
+=item Admin
+
+Provides list of the talks currently available.
+
+=item Add
+
+Add a new talk.
+
+=item Edit
+
+Edit an existing talk.
+
+=item Save
+
+Save the current talk.
+
+=item Delete
+
+Delete a talk.
+
+=item EventSelect
+
+=back
+
+=cut
+
+sub Admin {
+ return unless AccessUser(ADMIN);
+
+ if($cgiparams{doaction}) {
+ if($cgiparams{doaction} eq 'Delete') { Delete(); }
+ }
+
+ my @rows = $dbi->GetQuery('hash','AllTechTalks');
+ $tvars{data} = \@rows if(@rows);
+}
+
+sub Add {
+ return unless AccessUser(ADMIN);
+ return unless AuthorCheck('GetEventByID','eventid',ADMIN);
+
+ $tvars{data}{ddusers} = UserSelect(0,1,0,'Speaker',1);
+ $tvars{data}{ddevents} = EventSelect($cgiparams{eventid});
+}
+
+sub Edit {
+ return unless AccessUser(ADMIN);
+ return unless AuthorCheck('GetEventByID','eventid',ADMIN);
+
+ if($cgiparams{talkid}) {
+ my @rows = $dbi->GetQuery('hash','GetTechTalkByID',$cgiparams{talkid});
+ $tvars{data} = $rows[0] if(@rows);
+ $tvars{data}{abstracted} = $tvars{data}{abstract};
+ $tvars{data}{resourced} = $tvars{data}{resource};
+ $cgiparams{eventid} ||= $tvars{data}{eventid};
+ }
+
+ my $opt = $cgiparams{talkid} ? $tvars{data}{userid} : 0;
+ $tvars{data}{ddusers} = UserSelect($opt,1,0,'Speaker',1);
+ $tvars{data}{ddevents} = EventSelect($cgiparams{eventid});
+}
+
+sub Save {
+ return unless AccessUser(ADMIN);
+ return unless AuthorCheck('GetEventByID','eventid',ADMIN);
+
+ my $opt = $cgiparams{talkid} ? $tvars{data}{userid} : 0;
+ $tvars{data}{ddusers} = UserSelect($opt,1,0,'Speaker',1);
+
+ return if FieldCheck(\@allfields,\@mandatory);
+
+ $tvars{data}{guest} = ($tvars{data}{guest} ? 1 : 0);
+ for(keys %fields) {
+ next unless($fields{$_});
+ if($fields{$_}->{html} == 1) { $tvars{data}{$_} = CleanHTML($tvars{data}{$_}) }
+ elsif($fields{$_}->{html} == 2) { $tvars{data}{$_} = CleanTags($tvars{data}{$_}) }
+ }
+
+
+ my @fields = ( $tvars{data}{eventid},
+ $tvars{data}{userid},
+ $tvars{data}{guest},
+ $tvars{data}{talktitle},
+ $tvars{data}{abstract},
+ $tvars{data}{resource}
+ );
+
+ if($cgiparams{talkid})
+ { $dbi->DoQuery('SaveTechTalk',@fields,$cgiparams{talkid}); }
+ else { $cgiparams{talkid} = $dbi->IDQuery('AddTechTalk',@fields); }
+}
+
+sub Delete {
+ return unless AccessUser(ADMIN);
+ my @ids = CGIArray('LISTED');
+ return unless @ids;
+
+ for my $id (@ids) {
+ $cgiparams{'talkid'} = $id;
+ next unless AuthorCheck('GetTechTalkByID','talkid',EDITOR);
+
+ $dbi->DoQuery('DeleteTechTalk',$cgiparams{'talkid'});
+ }
+}
+
+sub EventSelect {
+ my ($opt,$blank) = @_;
+ $blank ||= 0;
+
+ my @list;
+ my @rows = $dbi->GetQuery('hash','AllTalkEvents');
+ for(@rows) { push @list, { id => $_->{eventid}, value => $_->{eventdate} . ' - ' . $_->{title} }; }
+ unshift @list, { id => 0, value => 'Select Event'} if($blank == 1);
+ DropDownRows($opt,'eventid','id','value',@list);
+}
+
+
+1;
+
+__END__
+
+=head1 SEE ALSO
+
+L<Labyrinth>
+
+=head1 AUTHOR
+
+Barbie, <barbie@missbarbell.co.uk> for
+Miss Barbell Productions, L<http://www.missbarbell.co.uk/>
+
+=head1 COPYRIGHT & LICENSE
+
+ Copyright (C) 2002-2011 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
120 lib/Labyrinth/Plugin/Event/Types.pm
@@ -0,0 +1,120 @@
+package Labyrinth::Plugin::Event::Types;
+
+use warnings;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '1.00';
+
+=head1 NAME
+
+Labyrinth::Plugin::Event::Types - Event Type handler for the Labyrinth framework.
+
+=head1 DESCRIPTION
+
+Contains all the event type functionality for Labyrinth.
+
+This package can be overridden to extended to the event types available.
+
+=cut
+
+# -------------------------------------
+# Library Modules
+
+use base qw(Labyrinth::Plugin::Base);
+
+use Labyrinth::MLUtils;
+use Labyrinth::Variables;
+use Carp;
+
+# -------------------------------------
+# Variables
+
+my %eventtypes;
+our $AUTOLOAD;
+
+# -------------------------------------
+# The Subs
+
+=head1 Pub INTERFACE METHODS
+
+=over 4
+
+=item SetType<n>
+
+An AUTOLOADed method to set the event type. Note if the type does not exist
+within the database, the value is set to 0.
+
+=item EventType
+
+Provides the name of a specified event type.
+
+=item EventTypeSelect
+
+Provides a dropdown list of event types available.
+
+=back
+
+=cut
+
+sub AUTOLOAD {
+ my $self = shift;
+ ref($self) or croak "$self is not an object";
+
+ my $name = $AUTOLOAD;
+ $name =~ s/.*://; # strip fully-qualified portion
+
+ my ($type) = $name =~ /SetType(\d+)/;
+ if($type) {
+ my @rows = $dbi->GetQuery('hash','GetEventType',$type);
+ if(@rows) { $cgiparams{eventtypeid} = $type }
+ else { $cgiparams{eventtypeid} = 0 }
+ } else { $cgiparams{eventtypeid} = 0 }
+}
+
+sub EventType {
+ my ($self,$type) = @_;
+ unless(%eventtypes) {
+ my @rows = $dbi->GetQuery('hash','AllEventTypes');
+ for my $row (@rows) { $eventtypes{$row->{eventtypeid}} = $row->{eventtype}; }
+ }
+
+ return $eventtypes{$type} || '';
+}
+
+sub EventTypeSelect {
+ my ($self,$opt,$blank) = @_;
+ $blank ||= 0;
+
+ unless(%eventtypes) {
+ my @rows = $dbi->GetQuery('hash','AllEventTypes');
+ for my $row (@rows) { $eventtypes{$row->{eventtypeid}} = $row->{eventtype}; }
+ }
+
+ my @list = map { { 'id' => $_, 'value' => $eventtypes{$_} } } sort keys %eventtypes;
+ unshift @list, { id => 0, value => 'Select An Event Type' } if($blank == 1);
+ return DropDownRows($opt,'eventtypeid','id','value',@list);
+}
+
+1;
+
+__END__
+
+=head1 SEE ALSO
+
+L<Labyrinth>
+
+=head1 AUTHOR
+
+Barbie, <barbie@missbarbell.co.uk> for
+Miss Barbell Productions, L<http://www.missbarbell.co.uk/>
+
+=head1 COPYRIGHT & LICENSE
+
+ Copyright (C) 2002-2011 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
208 lib/Labyrinth/Plugin/Event/Venues.pm
@@ -0,0 +1,208 @@
+package Labyrinth::Plugin::Event::Venues;
+
+use warnings;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '1.00';
+
+=head1 NAME
+
+Labyrinth::Plugin::Event::Venues - Venues administration for the Labyrinth framework.
+
+=head1 DESCRIPTION
+
+Contains all the venue administration functionality for Labyrinth.
+
+=cut
+
+# -------------------------------------
+# Library Modules
+
+use base qw(Labyrinth::Plugin::Base);
+
+use Labyrinth::DBUtils;
+#use Labyrinth::Media;
+use Labyrinth::MLUtils;
+use Labyrinth::Support;
+use Labyrinth::Variables;
+
+use Clone qw(clone);
+
+# -------------------------------------
+# Constants
+
+# withdrawn, may be reintroduced later
+#use constant MaxVenueWidth => 400;
+#use constant MaxVenueHeight => 400;
+
+# -------------------------------------
+# Variables
+
+my (@mandatory, @allfields);
+
+# type: 0 = optional, 1 = mandatory
+# html: 0 = none, 1 = text, 2 = textarea
+
+my %fields = (
+ eventid => { type => 0, html => 0 }, # only applicable when adding via an event
+ venueid => { type => 0, html => 0 },
+ venue => { type => 1, html => 1 },
+ venuelink => { type => 0, html => 2 },
+ address => { type => 1, html => 1 },
+ addresslink => { type => 0, html => 2 },
+ info => { type => 0, html => 2 },
+);
+
+for(keys %fields) {
+ push @mandatory, $_ if($fields{$_}->{type});
+ push @allfields, $_;
+}
+
+my @savefields = qw(venue venuelink address addresslink info);
+my $INDEXKEY = 'venueid';
+my $ALLSQL = 'AllVenues';
+my $SAVESQL = 'SaveVenue';
+my $ADDSQL = 'AddVenue';
+my $GETSQL = 'GetVenueByID';
+my $DELETESQL = 'DeleteVenue';
+my $LEVEL = ADMIN;
+
+# -------------------------------------
+# The Subs
+
+=head1 PUBLIC INTERFACE METHODS
+
+=over 4
+
+=item Current
+
+=back
+
+=cut
+
+sub Current {
+ my %venues;
+ for my $event ($tvars{next},@{$tvars{future}}) {
+ $venues{$event->{venueid}}->{$_} = $event->{$_} for(qw(venueid venue venuelink address addresslink info));
+ }
+ my @venues = map {$venues{$_}} sort {$venues{$a}->{venue} cmp $venues{$b}->{venue}} keys %venues;
+ $tvars{venues} = \@venues if(@venues);
+}
+
+=head1 ADMIN INTERFACE METHODS
+
+=over 4
+
+=item Admin
+
+Provides list of the venues currently available.
+
+=item Add
+
+Add a new venue.
+
+=item Edit
+
+Edit an existing venue.
+
+=item Save
+
+Save the current venue.
+
+=item Delete
+
+Delete a venue.
+
+=back
+
+=cut
+
+sub Admin {
+ return unless AccessUser($LEVEL);
+ if($cgiparams{doaction}) {
+ if($cgiparams{doaction} eq 'Delete') { Delete(); }
+ }
+ my @rows = $dbi->GetQuery('hash',$ALLSQL);
+ $tvars{data} = \@rows if(@rows);
+}
+
+sub Edit {
+ return unless AccessUser($LEVEL);
+ if($cgiparams{$INDEXKEY}) {
+ my @rows = $dbi->GetQuery('hash',$GETSQL,$cgiparams{$INDEXKEY});
+ $tvars{data}->{$_} = $rows[0]->{$_} for(keys %{$rows[0]});
+ }
+ $tvars{preview} = clone($tvars{data});
+ my $view = $tvars{preview};
+ my $data = $tvars{data};
+ for(keys %fields) {
+ if($fields{$_}->{html} == 1) { $data->{$_} = CleanHTML($data->{$_}) }
+ elsif($fields{$_}->{html} == 2) { $data->{$_} = SafeHTML($data->{$_});
+ $view->{$_} = CleanTags($view->{$_}) }
+ elsif($fields{$_}->{html} == 3) { $data->{$_} = CleanLink($data->{$_});
+ $view->{$_} = CleanLink($view->{$_}) }
+ }
+}
+
+sub Save {
+ return unless AccessUser($LEVEL);
+ for(keys %fields) {
+ if($fields{$_}->{html} == 1) { $cgiparams{$_} = CleanHTML($cgiparams{$_}) }
+ elsif($fields{$_}->{html} == 2) { $cgiparams{$_} = CleanTags($cgiparams{$_}) }
+ elsif($fields{$_}->{html} == 3) { $cgiparams{$_} = CleanLink($cgiparams{$_}) }
+ }
+ return if FieldCheck(\@allfields,\@mandatory);
+ my @fields = map {$tvars{data}->{$_}} @savefields;
+ if($cgiparams{$INDEXKEY})
+ { $dbi->DoQuery($SAVESQL,@fields,$cgiparams{$INDEXKEY}); }
+ else { $cgiparams{venueid} = $dbi->IDQuery($ADDSQL,@fields); }
+
+ # the following code has been withdrawn, but may be reintroduced in a later
+ # version of this dtistribution.
+ #
+ # upload new photos
+ #my $inx = 0;
+ #my $width = $settings{"venuewidth"} || MaxVenueWidth;
+ #my $height = $settings{"venueheight"} || MaxVenueHeight;
+ #while($cgiparams{"file_$inx"}) {
+ # my ($imageid,$imagelink) =
+ # SaveImageFile( param => "file_$inx",
+ # stock => 'Special',
+ # width => $width,
+ # height => $height);
+ # $dbi->DoQuery('AddVenueImage',$cgiparams{venueid},$imageid);
+ # $inx++;
+ #}
+}
+
+sub Delete {
+ return unless AccessUser($LEVEL);
+ my @ids = CGIArray('LISTED');
+ return unless @ids;
+ my $ids = join(",",@ids);
+ $dbi->DoQuery($DELETESQL,{ids => $ids});
+}
+
+1;
+
+__END__
+
+=head1 SEE ALSO
+
+L<Labyrinth>
+
+=head1 AUTHOR
+
+Barbie, <barbie@missbarbell.co.uk> for
+Miss Barbell Productions, L<http://www.missbarbell.co.uk/>
+
+=head1 COPYRIGHT & LICENSE
+
+ Copyright (C) 2002-2011 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
12 t/00use.t
@@ -0,0 +1,12 @@
+#!/usr/bin/perl -w
+use strict;
+
+use Test::More tests => 5;
+
+BEGIN {
+ use_ok('Labyrinth::Plugin::Event');
+ use_ok('Labyrinth::Plugin::Event::Sponsors');
+ use_ok('Labyrinth::Plugin::Event::Talks');
+ use_ok('Labyrinth::Plugin::Event::Types');
+ use_ok('Labyrinth::Plugin::Event::Venues');
+}
10 t/90podtest.t
@@ -0,0 +1,10 @@
+use Test::More;
+
+# Skip if doing a regular install
+plan skip_all => "Author tests not required for installation"
+ unless ( $ENV{AUTOMATED_TESTING} );
+
+eval "use Test::Pod 1.00";
+plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
+all_pod_files_ok();
+
9 t/91podcover.t
@@ -0,0 +1,9 @@
+use Test::More;
+
+# Skip if doing a regular install
+plan skip_all => "Author tests not required for installation"
+ unless ( $ENV{AUTOMATED_TESTING} );
+
+eval "use Test::Pod::Coverage 0.08";
+plan skip_all => "Test::Pod::Coverage 0.08 required for testing POD coverage" if $@;
+all_pod_coverage_ok();
25 t/94metatest.t
@@ -0,0 +1,25 @@
+use Test::More;
+
+# Skip if doing a regular install
+plan skip_all => "Author tests not required for installation"
+ unless ( $ENV{AUTOMATED_TESTING} );
+
+eval "use Test::CPAN::Meta";
+plan skip_all => "Test::CPAN::Meta required for testing META.yml" if $@;
+
+plan no_plan;
+
+my $meta = meta_spec_ok(undef,undef,@_);
+
+use Labyrinth::Plugin::Event;
+my $version = $Labyrinth::Plugin::Event::VERSION;
+
+is($meta->{version},$version,
+ 'META.yml distribution version matches');
+
+if($meta->{provides}) {
+ for my $mod (keys %{$meta->{provides}}) {
+ is($meta->{provides}{$mod}{version},$version,
+ "META.yml entry [$mod] version matches");
+ }
+}
26 t/95changedate.t
@@ -0,0 +1,26 @@
+use Test::More;
+use IO::File;
+use Labyrinth::Plugin::Event;
+
+# Skip if doing a regular install
+plan skip_all => "Author tests not required for installation"
+ unless ( $ENV{AUTOMATED_TESTING} );
+
+my $changes;
+$changes = 'Changes' if(-f 'Changes');
+$changes = 'CHANGES