[Rt-commit] [svn] r958 - in RT-ProjectManager/trunk: . html
html/Projects html/Projects/Elements lib lib/RT
jesse at pallas.eruditorum.org
jesse at pallas.eruditorum.org
Thu May 27 21:16:24 EDT 2004
Author: jesse
Date: Thu May 27 21:16:23 2004
New Revision: 958
Added:
RT-ProjectManager/trunk/MANIFEST
RT-ProjectManager/trunk/META.yml
RT-ProjectManager/trunk/Makefile
RT-ProjectManager/trunk/Makefile.PL
RT-ProjectManager/trunk/html/
RT-ProjectManager/trunk/html/Projects/
RT-ProjectManager/trunk/html/Projects/Create.html
RT-ProjectManager/trunk/html/Projects/Edit.html
RT-ProjectManager/trunk/html/Projects/Elements/
RT-ProjectManager/trunk/html/Projects/Elements/CreateTask
RT-ProjectManager/trunk/html/Projects/Elements/EditTask
RT-ProjectManager/trunk/html/Projects/Elements/OverviewEntry
RT-ProjectManager/trunk/html/Projects/Elements/SelectProjectTask
RT-ProjectManager/trunk/html/Projects/Elements/SelectProjectTaskEntry
RT-ProjectManager/trunk/html/Projects/Elements/Tabs
RT-ProjectManager/trunk/html/Projects/Elements/TicketTabs
RT-ProjectManager/trunk/html/Projects/Gantt.html
RT-ProjectManager/trunk/html/Projects/History.html
RT-ProjectManager/trunk/html/Projects/Overview.html
RT-ProjectManager/trunk/html/Projects/Schedule.html
RT-ProjectManager/trunk/html/Projects/ScheduleByActor.html
RT-ProjectManager/trunk/html/Projects/index.html
RT-ProjectManager/trunk/lib/
RT-ProjectManager/trunk/lib/RT/
RT-ProjectManager/trunk/lib/RT/ProjectManager.pm
Log:
Initial commit
Added: RT-ProjectManager/trunk/MANIFEST
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/MANIFEST Thu May 27 21:16:23 2004
@@ -0,0 +1,26 @@
+html/Projects/Create.html
+html/Projects/Edit.html
+html/Projects/Elements/CreateTask
+html/Projects/Elements/EditTask
+html/Projects/Elements/OverviewEntry
+html/Projects/Elements/SelectProjectTask
+html/Projects/Elements/SelectProjectTaskEntry
+html/Projects/Elements/Tabs
+html/Projects/Elements/TicketTabs
+html/Projects/Gantt.html
+html/Projects/History.html
+html/Projects/index.html
+html/Projects/Overview.html
+html/Projects/Schedule.html
+html/Projects/ScheduleByActor.html
+inc/Module/Install.pm
+inc/Module/Install/Base.pm
+inc/Module/Install/Makefile.pm
+inc/Module/Install/MakeMaker.pm
+inc/Module/Install/Metadata.pm
+inc/Module/Install/RTx.pm
+lib/RT/ProjectManager.pm
+Makefile
+Makefile.PL
+MANIFEST This list of files
+META.yml
Added: RT-ProjectManager/trunk/META.yml
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/META.yml Thu May 27 21:16:23 2004
@@ -0,0 +1,11 @@
+name: RT-ProjectManager
+version: 0.01_01
+abstract: RT ProjectManager Extension
+author: Jesse Vincent <jesse at bestpractical.com>
+license: GPLv2
+distribution_type: module
+no_index:
+ directory:
+ - html
+ - inc
+generated_by: Module::Install version 0.33
Added: RT-ProjectManager/trunk/Makefile
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/Makefile Thu May 27 21:16:23 2004
@@ -0,0 +1,709 @@
+# This Makefile is for the RT::ProjectManager extension to perl.
+#
+# It was generated automatically by MakeMaker version
+# 6.17 (Revision: 1.133) 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[RT ProjectManager Extension]
+# AUTHOR => q[Jesse Vincent <jesse at bestpractical.com>]
+# DIR => []
+# DISTNAME => q[RT-ProjectManager]
+# INSTALLSITELIB => q[/opt/rt3/local/lib]
+# NAME => q[RT::ProjectManager]
+# NO_META => q[1]
+# PREREQ_PM => { }
+# VERSION => q[0.01_01]
+# dist => { PREOP=>q[$(PERL) -I. -MModule::Install::Admin -e "dist_preop(q($(DISTVNAME)))"] }
+
+# --- MakeMaker post_initialize section:
+
+
+# --- MakeMaker const_config section:
+
+# These definitions are from config.sh (via /usr/lib/perl/5.8/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
+LD = cc
+LDDLFLAGS = -shared -L/usr/local/lib
+LDFLAGS = -L/usr/local/lib
+LIBC = /lib/libc-2.3.2.so
+LIB_EXT = .a
+OBJ_EXT = .o
+OSNAME = linux
+OSVERS = 2.4.26-ti1211
+RANLIB = :
+SITELIBEXP = /usr/local/share/perl/5.8.4
+SITEARCHEXP = /usr/local/lib/perl/5.8.4
+SO = so
+EXE_EXT =
+FULL_AR = /usr/bin/ar
+VENDORARCHEXP = /usr/lib/perl5
+VENDORLIBEXP = /usr/share/perl5
+
+
+# --- MakeMaker constants section:
+AR_STATIC_ARGS = cr
+DIRFILESEP = /
+NAME = RT::ProjectManager
+NAME_SYM = RT_ProjectManager
+VERSION = 0.01_01
+VERSION_MACRO = VERSION
+VERSION_SYM = 0_01_01
+DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
+XS_VERSION = 0.01_01
+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 = /usr
+PERLPREFIX = $(PREFIX)
+SITEPREFIX = $(PREFIX)/local
+VENDORPREFIX = $(PREFIX)
+INSTALLPRIVLIB = $(PERLPREFIX)/share/perl/5.8
+DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB)
+INSTALLSITELIB = /opt/rt3/local/lib
+DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB)
+INSTALLVENDORLIB = $(VENDORPREFIX)/share/perl5
+DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB)
+INSTALLARCHLIB = $(PERLPREFIX)/lib/perl/5.8
+DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB)
+INSTALLSITEARCH = /usr/local/lib/perl/5.8.4
+DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH)
+INSTALLVENDORARCH = $(VENDORPREFIX)/lib/perl5
+DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH)
+INSTALLBIN = $(PERLPREFIX)/bin
+DESTINSTALLBIN = $(DESTDIR)$(INSTALLBIN)
+INSTALLSITEBIN = $(SITEPREFIX)/bin
+DESTINSTALLSITEBIN = $(DESTDIR)$(INSTALLSITEBIN)
+INSTALLVENDORBIN = $(VENDORPREFIX)/bin
+DESTINSTALLVENDORBIN = $(DESTDIR)$(INSTALLVENDORBIN)
+INSTALLSCRIPT = $(PERLPREFIX)/bin
+DESTINSTALLSCRIPT = $(DESTDIR)$(INSTALLSCRIPT)
+INSTALLMAN1DIR = $(PERLPREFIX)/share/man/man1
+DESTINSTALLMAN1DIR = $(DESTDIR)$(INSTALLMAN1DIR)
+INSTALLSITEMAN1DIR = $(SITEPREFIX)/man/man1
+DESTINSTALLSITEMAN1DIR = $(DESTDIR)$(INSTALLSITEMAN1DIR)
+INSTALLVENDORMAN1DIR = $(VENDORPREFIX)/share/man/man1
+DESTINSTALLVENDORMAN1DIR = $(DESTDIR)$(INSTALLVENDORMAN1DIR)
+INSTALLMAN3DIR = $(PERLPREFIX)/share/man/man3
+DESTINSTALLMAN3DIR = $(DESTDIR)$(INSTALLMAN3DIR)
+INSTALLSITEMAN3DIR = $(SITEPREFIX)/man/man3
+DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR)
+INSTALLVENDORMAN3DIR = $(VENDORPREFIX)/share/man/man3
+DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR)
+PERL_LIB = /usr/share/perl/5.8
+PERL_ARCHLIB = /usr/lib/perl/5.8
+LIBPERL_A = libperl.a
+FIRST_MAKEFILE = Makefile
+MAKEFILE_OLD = $(FIRST_MAKEFILE).old
+MAKE_APERL_FILE = $(FIRST_MAKEFILE).aperl
+PERLMAINCC = $(CC)
+PERL_INC = /usr/lib/perl/5.8/CORE
+PERL = /usr/bin/perl -Iinc
+FULLPERL = /usr/bin/perl -Iinc
+ABSPERL = $(PERL)
+PERLRUN = $(PERL)
+FULLPERLRUN = $(FULLPERL)
+ABSPERLRUN = $(ABSPERL)
+PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-Iinc" "-I$(INST_LIB)"
+FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-Iinc" "-I$(INST_LIB)"
+ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-Iinc" "-I$(INST_LIB)"
+PERL_CORE = 0
+PERM_RW = 644
+PERM_RWX = 755
+
+MAKEMAKER = /usr/share/perl/5.8/ExtUtils/MakeMaker.pm
+MM_VERSION = 6.17
+MM_REVISION = 1.133
+
+# 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.
+FULLEXT = RT/ProjectManager
+BASEEXT = ProjectManager
+PARENT_NAME = RT
+DLBASE = $(BASEEXT)
+VERSION_FROM =
+OBJECT =
+LDFROM = $(OBJECT)
+LINKTYPE = dynamic
+
+# Handy lists of source code files:
+XS_FILES =
+C_FILES =
+O_FILES =
+H_FILES =
+MAN1PODS =
+MAN3PODS =
+
+# Where is the Config information that we are using/depend on
+CONFIGDEP = $(PERL_ARCHLIB)$(DIRFILESEP)Config.pm $(PERL_INC)$(DIRFILESEP)config.h
+
+# Where to build things
+INST_LIBDIR = $(INST_LIB)/RT
+INST_ARCHLIBDIR = $(INST_ARCHLIB)/RT
+
+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/RT/ProjectManager.pm
+
+PM_TO_BLIB = lib/RT/ProjectManager.pm \
+ blib/lib/RT/ProjectManager.pm
+
+
+# --- MakeMaker platform_constants section:
+MM_Unix_VERSION = 1.42
+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 = $(PERLRUN) -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 = $(SHELL) -c 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 = $(PERLRUN) "-MExtUtils::Command" -e mkpath
+EQUALIZE_TIMESTAMP = $(PERLRUN) "-MExtUtils::Command" -e eqtime
+ECHO = echo
+ECHO_N = echo -n
+UNINST = 0
+VERBINST = 0
+MOD_INSTALL = $(PERLRUN) -MExtUtils::Install -e 'install({@ARGV}, '\''$(VERBINST)'\'', 0, '\''$(UNINST)'\'');'
+DOC_INSTALL = $(PERLRUN) "-MExtUtils::Command::MM" -e perllocal_install
+UNINSTALL = $(PERLRUN) "-MExtUtils::Command::MM" -e uninstall
+WARN_IF_OLD_PACKLIST = $(PERLRUN) "-MExtUtils::Command::MM" -e warn_if_old_packlist
+
+
+# --- 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 = $(PERL) -I. -MModule::Install::Admin -e "dist_preop(q($(DISTVNAME)))"
+POSTOP = $(NOECHO) $(NOOP)
+TO_UNIX = $(NOECHO) $(NOOP)
+CI = ci -u
+RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
+DIST_CP = best
+DIST_DEFAULT = tardist
+DISTNAME = RT-ProjectManager
+DISTVNAME = RT-ProjectManager-0.01_01
+
+
+# --- 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 = LIB="$(LIB)"\
+ LIBPERL_A="$(LIBPERL_A)"\
+ LINKTYPE="$(LINKTYPE)"\
+ PREFIX="$(PREFIX)"\
+ OPTIMIZE="$(OPTIMIZE)"\
+ PASTHRU_DEFINE="$(PASTHRU_DEFINE)"\
+ PASTHRU_INC="$(PASTHRU_INC)"
+
+
+# --- MakeMaker special_targets section:
+.SUFFIXES: .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT)
+
+.PHONY: all config static dynamic test linkext manifest
+
+
+
+# --- 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) $(INST_LIBDIR)$(DIRFILESEP).exists
+ $(NOECHO) $(NOOP)
+
+config :: $(INST_ARCHAUTODIR)$(DIRFILESEP).exists
+ $(NOECHO) $(NOOP)
+
+config :: $(INST_AUTODIR)$(DIRFILESEP).exists
+ $(NOECHO) $(NOOP)
+
+$(INST_AUTODIR)/.exists :: /usr/lib/perl/5.8/CORE/perl.h
+ $(NOECHO) $(MKPATH) $(INST_AUTODIR)
+ $(NOECHO) $(EQUALIZE_TIMESTAMP) /usr/lib/perl/5.8/CORE/perl.h $(INST_AUTODIR)/.exists
+
+ -$(NOECHO) $(CHMOD) $(PERM_RWX) $(INST_AUTODIR)
+
+$(INST_LIBDIR)/.exists :: /usr/lib/perl/5.8/CORE/perl.h
+ $(NOECHO) $(MKPATH) $(INST_LIBDIR)
+ $(NOECHO) $(EQUALIZE_TIMESTAMP) /usr/lib/perl/5.8/CORE/perl.h $(INST_LIBDIR)/.exists
+
+ -$(NOECHO) $(CHMOD) $(PERM_RWX) $(INST_LIBDIR)
+
+$(INST_ARCHAUTODIR)/.exists :: /usr/lib/perl/5.8/CORE/perl.h
+ $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
+ $(NOECHO) $(EQUALIZE_TIMESTAMP) /usr/lib/perl/5.8/CORE/perl.h $(INST_ARCHAUTODIR)/.exists
+
+ -$(NOECHO) $(CHMOD) $(PERM_RWX) $(INST_ARCHAUTODIR)
+
+help:
+ perldoc ExtUtils::MakeMaker
+
+
+# --- 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
+ $(NOECHO) $(NOOP)
+
+
+
+
+# --- 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_RF) ./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all $(INST_ARCHAUTODIR)/extralibs.ld perlmain.c tmon.out mon.out so_locations pm_to_blib *$(OBJ_EXT) *$(LIB_EXT) perl.exe perl perl$(EXE_EXT) $(BOOTSTRAP) $(BASEEXT).bso $(BASEEXT).def lib$(BASEEXT).def $(BASEEXT).exp $(BASEEXT).x core core.*perl.*.? *perl.core core.[0-9] core.[0-9][0-9] core.[0-9][0-9][0-9] core.[0-9][0-9][0-9][0-9] core.[0-9][0-9][0-9][0-9][0-9]
+ -$(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 installed files
+realclean purge :: clean realclean_subdirs
+ $(RM_RF) $(INST_AUTODIR) $(INST_ARCHAUTODIR)
+ $(RM_RF) $(DISTVNAME)
+ $(RM_F) blib/lib/RT/ProjectManager.pm $(MAKEFILE_OLD) $(FIRST_MAKEFILE)
+
+
+# --- MakeMaker metafile section:
+metafile:
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker metafile_addtomanifest section:
+metafile_addtomanifest:
+ $(NOECHO) $(NOOP)
+
+
+# --- 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
+
+
+
+# --- MakeMaker dist_core section:
+
+dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE)
+ $(NOECHO) $(PERLRUN) -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:
+distdir : metafile metafile_addtomanifest
+ $(RM_RF) $(DISTVNAME)
+ $(PERLRUN) "-MExtUtils::Manifest=manicopy,maniread" \
+ -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
+
+
+
+# --- 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 install section:
+
+install :: all pure_install doc_install
+
+install_perl :: all pure_perl_install doc_perl_install
+
+install_site :: all pure_site_install doc_site_install
+
+install_vendor :: all pure_vendor_install doc_vendor_install
+
+pure_install :: pure_$(INSTALLDIRS)_install
+
+doc_install :: doc_$(INSTALLDIRS)_install
+
+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 ::
+ $(NOECHO) umask 022; $(MOD_INSTALL) \
+ $(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 ::
+ $(NOECHO) umask 02; $(MOD_INSTALL) \
+ read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \
+ write $(DESTINSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \
+ $(INST_LIB) $(DESTINSTALLSITELIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLSITEARCH) \
+ $(INST_BIN) $(DESTINSTALLSITEBIN) \
+ $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(DESTINSTALLSITEMAN1DIR) \
+ $(INST_MAN3DIR) $(DESTINSTALLSITEMAN3DIR)
+ $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+ $(PERL_ARCHLIB)/auto/$(FULLEXT)
+
+pure_vendor_install ::
+ $(NOECHO) umask 022; $(MOD_INSTALL) \
+ $(INST_LIB) $(DESTINSTALLVENDORLIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
+ $(INST_BIN) $(DESTINSTALLVENDORBIN) \
+ $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \
+ $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
+
+doc_perl_install ::
+
+doc_site_install ::
+ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLSITEARCH)/perllocal.pod
+ -$(NOECHO) umask 02; $(MKPATH) $(DESTINSTALLSITEARCH)
+ -$(NOECHO) umask 02; $(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLSITELIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+ >> $(DESTINSTALLSITEARCH)/perllocal.pod
+
+doc_vendor_install ::
+
+
+uninstall :: uninstall_from_$(INSTALLDIRS)dirs
+
+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) -f $(MAKEFILE_OLD) clean $(DEV_NULL) || $(NOOP)
+ $(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) -f $(MAKE_APERL_FILE) $@
+
+$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
+ $(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 =
+TESTDB_SW = -d
+
+testdb :: testdb_$(LINKTYPE)
+
+test :: $(TEST_TYPE)
+ $(NOECHO) $(ECHO) 'No tests defined for $(NAME) extension.'
+
+test_dynamic :: pure_all
+
+testdb_dynamic :: pure_all
+ PERL_DL_NONLAZY=1 $(FULLPERLRUN) $(TESTDB_SW) "-Iinc" "-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="0,01_01,0,0">' > $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <TITLE>$(DISTNAME)</TITLE>' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <ABSTRACT>RT ProjectManager Extension</ABSTRACT>' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <AUTHOR>Jesse Vincent <jesse at bestpractical.com></AUTHOR>' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <IMPLEMENTATION>' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <OS NAME="$(OSNAME)" />' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <ARCHITECTURE NAME="i386-linux-thread-multi" />' >> $(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: $(TO_INST_PM)
+ $(NOECHO) $(PERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', '\''$(PM_FILTER)'\'')'\
+ lib/RT/ProjectManager.pm blib/lib/RT/ProjectManager.pm
+ $(NOECHO) $(TOUCH) $@
+
+# --- MakeMaker selfdocument section:
+
+
+# --- MakeMaker postamble section:
+
+
+# End.
+# Postamble by Module::Install 0.33
+# --- Module::Install::Admin::Makefile section:
+
+realclean purge ::
+ $(RM_F) $(DISTVNAME).tar$(SUFFIX)
+ $(RM_RF) inc MANIFEST.bak _build
+ $(PERL) -I. -MModule::Install::Admin -e "remove_meta()"
+
+reset :: purge
+
+upload :: test dist
+ cpan-upload -verbose $(DISTVNAME).tar$(SUFFIX)
+
+grok ::
+ perldoc Module::Install
+
+distsign ::
+ cpansign -s
+
+install ::
+ $(NOECHO) $(PERL) -MExtUtils::Install -e "install({q(html), q(/opt/rt3/share/html)})"
+
Added: RT-ProjectManager/trunk/Makefile.PL
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/Makefile.PL Thu May 27 21:16:23 2004
@@ -0,0 +1,6 @@
+use inc::Module::Install;
+
+RTx('RT-ProjectManager');
+author('Jesse Vincent <jesse at bestpractical.com>');
+license('GPLv2');
+&WriteMakefile();
Added: RT-ProjectManager/trunk/html/Projects/Create.html
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/Create.html Thu May 27 21:16:23 2004
@@ -0,0 +1,14 @@
+%# $Header: /raid/cvsroot/rt-addons/Projects/html/Create.html,v 1.1 2002/01/29 16:57:10 jesse Exp $
+%# Copyright 1996-2000 Jesse Vincent <jesse at fsck.com>
+<& /Elements/Header, Title => "Create new task", ShowBar => 0 &>
+<div align="right">
+<font size=-2>[<a href="#close" onClick="window.close();">Close</a>]</font>
+</div>
+<h1>New task</h1>
+<& Elements/CreateTask , %ARGS &>
+</BODY>
+</HTML>
+<%ARGS>
+</%ARGS>
+
+
Added: RT-ProjectManager/trunk/html/Projects/Edit.html
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/Edit.html Thu May 27 21:16:23 2004
@@ -0,0 +1,137 @@
+%# $Header: /raid/cvsroot/rt-addons/Projects/html/Edit.html,v 1.3 2002/01/25 20:14:55 jesse Exp $
+%# Copyright 1996-2000 Jesse Vincent <jesse at fsck.com>
+<& /Elements/Header, Title => "Edit: ". $TicketObj->Subject, ShowBar => 0 &>
+<DIV align="right">
+<font size=-2>
+[ <a href="#close" onClick="window.close();">Close</a> ]
+</font>
+</DIV>
+<BR>
+<& Elements/TicketTabs, current_tab => "Projects/Edit.html", Ticket=> $TicketObj, Project => $Project &>
+
+
+<& /Elements/ListActions, actions => \@results &>
+<FORM enctype="multipart/formdata" method="post" ACTION="Edit.html">
+
+<input type=hidden name="id" value="<%$TicketObj->Id%>">
+<input type=hidden name="Project" value="<%$Project%>">
+<TABLE border=0>
+<TR>
+<TD colspan=3>
+ <SPAN CLASS="label">Subject</SPAN><BR>
+ <input name=Subject value="<%$TicketObj->Subject|h%>" SIZE=50>
+</TD>
+</TR>
+<TR>
+<TD colspan=3><SPAN class=label>Parent</SPAN><BR>
+<& Elements/SelectProjectTask, Project => $Project, Default => $Parent &>
+</TD>
+</TR>
+<TR>
+<TD><SPAN class=label>Status</SPAN><BR>
+<& /Elements/SelectStatus, Name => 'Status', Default=> $TicketObj->Status &>
+</TD>
+<TD> <SPAN class=label>Owner</SPAN><BR>
+<& /Elements/SelectOwner, Name => 'Owner', Default => $TicketObj->OwnerObj->Id,
+ TicketObj => $TicketObj
+&>
+</TD>
+<TD><SPAN class=label>Queue</SPAN><BR>
+<& /Elements/SelectQueue, Name => 'Queue', Default =>$TicketObj->QueueObj->Id&>
+</TD>
+</TR>
+<TD> <SPAN class=label>Time Worked</SPAN><BR>
+<input name=TimeWorked value="<%$TicketObj->TimeWorked%>" SIZE=5>
+</TD>
+<TD><SPAN class=label>Time Left</SPAN><BR>
+<input name=TimeLeft value="<%$TicketObj->TimeLeft%>" SIZE=5>
+</TD>
+</TR>
+<TR>
+<TD><SPAN class=label>Priority</SPAN><BR>
+<input name=Priority value="<%$TicketObj->Priority%>" SIZE=2>
+</TD>
+<TD><SPAN class=label>Final Priority</SPAN><BR>
+<input name=FinalPriority value="<%$TicketObj->FinalPriority%>" SIZE=2>
+</TD>
+</TR>
+<TR><TD><SPAN class=label>Starts:</SPAN><BR>
+<& /Elements/SelectDate, menu_prefix => 'Starts', current => 0 &>
+ (<% $TicketObj->StartsObj->AsString %>)
+</TD>
+<TD><SPAN class=label>Started:</SPAN><BR>
+<& /Elements/SelectDate, menu_prefix => 'Started', current => 0 &> (<%$TicketObj->StartedObj->AsString %>)
+</TD>
+<TD><SPAN class=label>Due:</SPAN><BR>
+<& /Elements/SelectDate, menu_prefix => 'Due', current => 0 &> (<% $TicketObj->DueObj->AsString %>)
+</TD>
+</TR>
+
+</TABLE>
+<HR>
+
+<h2>Record notes</h2>
+Visibility: <select name="UpdateType">
+<option value="private">Private</option>
+<option value="response">Public</option>
+</select><BR>
+Attach file: <input type=file name="UpdateAttachment"><BR>
+<textarea name="UpdateContent" rows=8 cols=60></textarea>
+
+<& /Elements/Submit &>
+
+</FORM>
+<%INIT>
+
+my $TicketObj;
+my @results;
+
+# TODO this feels hacky
+if ($id eq 'new') {
+ ($TicketObj, @results) = CreateTicket(%ARGS);
+}
+
+else {
+$TicketObj = LoadTicket($id);
+
+
+my @wresults = ProcessTicketWatchers( TicketObj => $TicketObj,
+ ARGSRef => \%ARGS);
+my @bresults = ProcessTicketBasics( TicketObj => $TicketObj,
+ ARGSRef => \%ARGS);
+my @okresults = ProcessTicketObjectKeywords(TicketObj => $TicketObj,
+ ARGSRef => \%ARGS);
+
+my @dresults = ProcessTicketDates( TicketObj => $TicketObj,
+ ARGSRef => \%ARGS);
+my @lresults = ProcessTicketLinks( TicketObj => $TicketObj,
+ ARGSRef => \%ARGS);
+ProcessUpdateMessage(TicketObj => $TicketObj,
+ ARGSRef=>\%ARGS,
+ Actions=>\@results);
+
+
+
+push @results, @bresults;
+push @results, @wresults;
+push @results, @dresults;
+push @results, @lresults;
+push @results, @okresults;
+}
+
+my $Parent;
+
+if ($TicketObj->MemberOf->First && $TicketObj->MemberOf->First->TargetObj) {
+ $Parent = $TicketObj->MemberOf->First->TargetObj->Id;
+} else {
+ $Parent = undef;
+}
+</%INIT>
+<%ARGS>
+$Project => undef
+$id => undef
+</%ARGS>
+
+
+
+
Added: RT-ProjectManager/trunk/html/Projects/Elements/CreateTask
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/Elements/CreateTask Thu May 27 21:16:23 2004
@@ -0,0 +1,83 @@
+
+<FORM enctype="multipart/formdata" method="post" ACTION="Edit.html">
+
+<input type=hidden name="id" value="new">
+<input type=hidden name="Project" value="<%$Project%>">
+<TABLE border=0>
+<TR>
+<TD colspan=3>
+<font size=-1>Subject</font><BR>
+<input name=Subject value="" SIZE=50>
+</TD>
+</TR>
+<TR>
+<TD colspan=3>
+<font size=-1>Parent</font><BR>
+<& SelectProjectTask, Project => $Project, Default => $Parent, Name => 'new-MemberOf' &>
+</TD>
+</TR>
+<TR>
+<TD>
+<font size=-1>Status</font><BR>
+<& /Elements/SelectStatus, Name => 'Status', Default => 'new'&>
+</TD>
+</TD>
+<TD>
+<font size=-1>Time Worked</font><BR>
+<input name=TimeWorked value="" SIZE=5>
+
+</TD>
+<TD>
+<font size=-1>Time Left</font>
+<BR>
+<input name=TimeLeft value="" SIZE=5>
+</TD>
+</TR>
+<TR>
+<TD>
+<font size=-1>Queue</font>
+<BR>
+<& /Elements/SelectQueue, Name => 'Queue', Default => $Queue &>
+</TD>
+<TD>
+<font size=-1>Priority</font><BR>
+<input name=Priority value="" SIZE=2>
+</TD>
+<TD>
+<font size=-1>Final Priority</font><BR>
+<input name=FinalPriority value="" SIZE=2>
+</TD>
+</TR>
+<TR><TD>
+<font size=-1>Starts</font><BR>
+<& /Elements/SelectDate, menu_prefix => 'Starts', current => 0 &>
+</TD>
+<TD>
+<font size=-1>Started</font><BR>
+<& /Elements/SelectDate, menu_prefix => 'Started', current => 0 &>
+</TD>
+<TD>
+<font size=-1>Due</font><BR>
+<& /Elements/SelectDate, menu_prefix => 'Due', current => 0 &>
+</TD>
+</TR>
+
+</TABLE>
+
+<h2>Record notes</h2>
+Visibility: <select name="UpdateType">
+<option value="private">Private</option>
+<option value="response">Public</option>
+</select><BR>
+Attach file: <input type=file name="Attach"><BR>
+<textarea name="Content" rows=8 cols=60></textarea>
+
+<& /Elements/Submit &>
+
+</FORM>
+<%ARGS>
+$id => undef
+$Project => undef
+$Queue => undef
+$Parent => undef
+</%ARGS>
Added: RT-ProjectManager/trunk/html/Projects/Elements/EditTask
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/Elements/EditTask Thu May 27 21:16:23 2004
@@ -0,0 +1,129 @@
+<h1>Details for task #<%$TicketObj->Id%>: <%$TicketObj->Subject%></h1>
+
+<& /Elements/ListActions, actions => \@results &>
+<FORM enctype="multipart/formdata" method="post" ACTION="Edit.html">
+<DIV ALIGN=RIGHT>[<A HREF="History.html?id=<%$TicketObj->Id%>" onClick="window.open('History.html?id=<%$TicketObj->Id%>','wdyt','toolbar=no,width=500,height=450,left=10,top=10,screenX=30,screenY=30,status=no,scrollbars=yes,resizable=1');return false">Show Task History</A>]</DIV>
+
+<input type=hidden name="id" value="<%$TicketObj->Id%>">
+<input type=hidden name="Project" value="<%$Project%>">
+<TABLE border=0>
+<TR>
+<TD colspan=3>
+ Subject<BR>
+ <input name=Subject value="<%$TicketObj->Subject|h%>" SIZE=50>
+</TD>
+</TR>
+<TR>
+<TD colspan=3>
+Parent<BR>
+<& SelectProjectTask, Project => $Project, Default => $Parent &>
+</TD>
+</TR>
+<TR>
+<TD>
+Status<BR>
+<& /Elements/SelectStatus, Name => 'Status', Default=> $TicketObj->Status &>
+</TD>
+</TD>
+<TD>
+Time Worked<BR>
+<input name=TimeWorked value="<%$TicketObj->TimeWorked%>" SIZE=5>
+
+</TD>
+<TD>
+Time Left<BR>
+<input name=TimeLeft value="<%$TicketObj->TimeLeft%>" SIZE=5>
+</TD>
+</TR>
+<TR>
+<TD>
+Queue<BR>
+<& /Elements/SelectQueue, Name => 'Queue', Default =>$TicketObj->QueueObj->Id&>
+</TD>
+<TD>
+Priority<BR>
+<input name=Priority value="<%$TicketObj->Priority%>" SIZE=2>
+</TD>
+<TD>
+Final Priority<BR>
+<input name=FinalPriority value="<%$TicketObj->FinalPriority%>" SIZE=2>
+</TD>
+</TR>
+<TR><TD>
+Starts:<BR>
+<& /Elements/SelectDate, menu_prefix => 'Starts', current => 0 &>
+ (<% $TicketObj->StartsObj->AsString %>)
+</TD>
+<TD>
+Started:<BR>
+<& /Elements/SelectDate, menu_prefix => 'Started', current => 0 &> (<%$TicketObj->StartedObj->AsString %>)
+</TD>
+<TD>
+Due:<BR>
+<& /Elements/SelectDate, menu_prefix => 'Due', current => 0 &> (<% $TicketObj->DueObj->AsString %>)
+</TD>
+</TR>
+
+</TABLE>
+
+<h2>Record notes</h2>
+Visibility: <select name="UpdateType">
+<option value="private">Private</option>
+<option value="response">Public</option>
+</select><BR>
+Attach file: <input type=file name="UpdateAttachment"><BR>
+<textarea name="UpdateContent" rows=8 cols=60></textarea>
+
+<& /Elements/Submit &>
+
+</FORM>
+<%INIT>
+
+my $TicketObj;
+my @results;
+
+# TODO this feels hacky
+if ($id = 'new') {
+ ($TicketObj, @results) = CreateTicket(%ARGS);
+}
+
+else {
+$TicketObj = LoadTicket($id);
+my $Parent;
+
+if ($TicketObj->MemberOf->First && $TicketObj->MemberOf->First->TargetObj) {
+ $Parent = $TicketObj->MemberOf->First->TargetObj->Id;
+} else {
+ $Parent = undef;
+}
+
+
+my @wresults = ProcessTicketWatchers( TicketObj => $TicketObj,
+ ARGSRef => \%ARGS);
+my @bresults = ProcessTicketBasics( TicketObj => $TicketObj,
+ ARGSRef => \%ARGS);
+my @okresults = ProcessTicketObjectKeywords(TicketObj => $TicketObj,
+ ARGSRef => \%ARGS);
+
+my @dresults = ProcessTicketDates( TicketObj => $TicketObj,
+ ARGSRef => \%ARGS);
+my @lresults = ProcessTicketLinks( TicketObj => $TicketObj,
+ ARGSRef => \%ARGS);
+ProcessUpdateMessage(TicketObj => $TicketObj,
+ ARGSRef=>\%ARGS,
+ Actions=>\@results);
+
+
+
+push @results, @bresults;
+push @results, @wresults;
+push @results, @dresults;
+push @results, @lresults;
+push @results, @okresults;
+}
+
+</%INIT>
+<%ARGS>
+$Project => undef
+$id => undef
+</%ARGS>
Added: RT-ProjectManager/trunk/html/Projects/Elements/OverviewEntry
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/Elements/OverviewEntry Thu May 27 21:16:23 2004
@@ -0,0 +1,78 @@
+% if ($Root) {
+% if ($ARGS{'Edit-'.$Root->Id}) {
+% my $Parent;
+%if ($Root->MemberOf->First && $Root->MemberOf->First->TargetObj) {
+% $Parent = $Root->MemberOf->First->TargetObj->Id;
+%} else {
+% $Parent = undef;
+%}
+<TR>
+<TD><% " "x $Depth|n %><input name="Ticket-<%$Root->id%>-Subject" value="<%$Root->Subject%>" size="25"><br>
+%#<&|/l&>Move</&>:<& SelectProjectTask, Name=> 'Ticket-'.$Root->id."-Parent", Project => $Project, Default => $Parent &>
+</TD>
+<TD><& /Elements/SelectOwner, Name => 'Ticket-'.$Root->id.'-Owner', Default => $Root->OwnerObj->id &></TD>
+<TD><& /Elements/SelectStatus, Name => 'Ticket-'.$Root->id.'-Status', Default => $Root->Status &></TD>
+<TD><input name="Ticket-<%$Root->id%>-Due" value ="<%$Root->Due%>" size=10></TD>
+<TD><input name="Ticket-<%$Root->id%>-Priority" value="<%$Root->Priority%>" size=2></TD>
+<TD><input name="Ticket-<%$Root->id%>-TimeWorked" value="<%$Root->TimeWorked%>" size="3"></TD>
+<TD><input name="Ticket-<%$Root->id%>-TimeLeft" value="<%$Root->TimeLeft%>" size="3"></TD>
+<TD><input type="submit" value="<%loc('Save')%>"></TD>
+</TR>
+% }
+% else {
+
+<TR>
+<TD><tt><% " "x $Depth|n %></tt><A HREF="<%$RT::WebPath%>/Ticket/Display.html?id=<%$Root->id%>" target="_newwin"><%$Root->Subject%></A></TD>
+<TD><%$Root->OwnerObj->Name%></TD>
+<TD><%$Root->Status%></TD>
+<TD><%$Root->DueObj->AgeAsString%></TD>
+<TD><%$Root->Priority%></TD>
+<TD><%int($Root->TimeWorked/6)/10%></TD>
+<TD><%int($Root->TimeLeft/6)/10%></TD>
+<TD align=right>
+<input type="submit" name="AddChildOf-<%$Root->Id%>" value="+">
+<input type="submit" name="Edit-<%$Root->Id%>" value="<%loc('Edit')%>">
+</td>
+</TR>
+% }
+
+% if ($Depth < $MaxDepth) {
+% while (my $link = $tasks->Next()) {
+<& OverviewEntry, %ARGS, Root=> $link, Depth => ($Depth+1), MaxDepth => $MaxDepth, Project => $Project &>
+% }
+
+% }
+
+% if ($ARGS{"AddChildOf-".$Root->Id}) {
+<TR>
+<TD><% " "x $Depth|n %><input name="Subject" size="25">
+
+<input type="hidden" name="new-MemberOf" value="<%$Root->id%>">
+<input type="hidden" name="AddChildOf<%$Root->id%>" value="1">
+</TD>
+
+<TD><& /Elements/SelectOwner, Name => 'Owner', Default => $RT::Nobody->id &></TD>
+<TD><& /Elements/SelectStatus, Name => 'Status', Default => 'new' &></TD>
+<TD><input name="Due" size=10></TD>
+<TD><input name="Priority" size=2></TD>
+<TD><input name="TimeWorked" size="3"></TD>
+<TD><input name="TimeLeft" size="3"></TD>
+<TD><input type="submit" name="CreateTask" value="<%loc('Create')%>"></TD>
+</TR>
+%}
+
+% }
+<%ARGS>
+$Depth => 0
+$MaxDepth => 8
+$Root => undef
+$Project => undef
+$Edit => undef
+$EditAll => 0
+</%ARGS>
+
+<%INIT>
+
+my $tasks = RT::Tickets->new($session{'CurrentUser'});
+$tasks->FromSQL('MemberOf = '.$Root->id);
+</%INIT>
Added: RT-ProjectManager/trunk/html/Projects/Elements/SelectProjectTask
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/Elements/SelectProjectTask Thu May 27 21:16:23 2004
@@ -0,0 +1,15 @@
+<SELECT NAME="<%$Name%>">
+<OPTION VALUE="" <% $Default == undef && 'SELECTED' %>>None (Independent Project)</OPTION>
+<& SelectProjectTaskEntry, Root=> $Root, Depth => ($Depth+1), MaxDepth => $MaxDepth, Project => $Project, Default => $Default &>
+</SELECT>
+<%ARGS>
+$Name => 'Task'
+$Default => undef
+$Depth => 0
+$MaxDepth => 12
+$Project => undef
+</%ARGS>
+
+<%INIT>
+my $Root= LoadTicket($Project);
+</%INIT>
Added: RT-ProjectManager/trunk/html/Projects/Elements/SelectProjectTaskEntry
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/Elements/SelectProjectTaskEntry Thu May 27 21:16:23 2004
@@ -0,0 +1,25 @@
+% if ($Root) {
+<OPTION VALUE="<%$Root->id%>"
+% if ($Root->Id == $Default) {
+SELECTED
+% }
+><%"-"x $Depth|n%><%$Root->Subject%>
+</OPTION>
+%# if ($Depth < $MaxDepth) {
+% while (my $link = $tasks->Next()) {
+<& SelectProjectTaskEntry, Root=> $link, Depth => ($Depth+1), MaxDepth => $MaxDepth, Project => $Project, Default => $Default &>
+% }
+%# }
+% }
+<%ARGS>
+$Depth => 0
+$MaxDepth => 12
+$Root => undef
+$Project => undef
+$Default => undef
+</%ARGS>
+
+<%INIT>
+my $tasks = RT::Tickets->new($session{'CurrentUser'});
+$tasks->FromSQL('MemberOf = '. $Root->id);
+</%INIT>
Added: RT-ProjectManager/trunk/html/Projects/Elements/Tabs
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/Elements/Tabs Thu May 27 21:16:23 2004
@@ -0,0 +1,32 @@
+<& /Elements/Tabs,
+ tabs => $tabs,
+ actions => $actions,
+ current_tab => $current_tab,
+ current_toptab => $current_toptab,
+ Title => $Title &>
+<%INIT>
+
+ my $id = $Ticket->id();
+ my $tabs = {
+ A => { title => 'Overview',
+ path => "Projects/Overview.html?id=".$id,
+ },
+
+ B => { title => 'Schedule',
+ path => "Projects/Schedule.html?id=".$id,
+ },
+ C => { title => 'Gantt Chart',
+ path => 'Projects/Gantt.html?id='.$id,
+ }
+ };
+
+my $actions;
+
+
+</%INIT>
+<%ARGS>
+$Title => loc('Projects')
+$Ticket => undef
+$current_tab => undef
+$current_toptab => 'Projects/index.html'
+</%ARGS>
Added: RT-ProjectManager/trunk/html/Projects/Elements/TicketTabs
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/Elements/TicketTabs Thu May 27 21:16:23 2004
@@ -0,0 +1,39 @@
+<TABLE WIDTH=100% cellspacing=0 cellpadding=3 border=0 BGCOLOR="#333399">
+ <TR>
+% foreach my $tab (sort keys %{$tabs}) {
+ <TD ALIGN=CENTER>
+<A
+% if ($current_tab eq $tabs->{$tab}->{'path'}) {
+class='currenttab'
+% }
+% else {
+class='inverse'
+% }
+ HREF="<%$RT::WebPath%>/<% $tabs->{$tab}->{'path'}%>?id=<%$id%>&Project=<%$Project%>"><% $tabs->{$tab}->{'title'}%></A>
+ </TD>
+% }
+ </TR>
+</TABLE>
+<BR>
+
+<%INIT>
+
+ my $id = $Ticket->id();
+ my $tabs = {
+ A => { title => 'Details',
+ path => "Projects/Edit.html",
+ },
+
+ B => { title => 'History',
+ path => "Projects/History.html",
+ },
+ };
+
+</%INIT>
+
+
+<%ARGS>
+$Ticket => undef
+$Project => undef
+$current_tab => undef
+</%ARGS>
Added: RT-ProjectManager/trunk/html/Projects/Gantt.html
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/Gantt.html Thu May 27 21:16:23 2004
@@ -0,0 +1,61 @@
+<%ARGS>
+$id => undef
+</%ARGS>
+<%INIT>
+
+my $ProjectObj = LoadTicket($id);
+
+use RT::Projects::Scheduler;
+my $schedule = new RT::Projects::Scheduler;
+
+my ($calendar, $ticketinfo) =$schedule->Build($id);
+
+
+my @dates = sort (keys %{$calendar});
+my $last = $dates[0];
+my @tasks = sort {
+ $ticketinfo->{$a}->{'startson'} <=>
+ $ticketinfo->{$b}->{'startson'} }
+ keys %{$ticketinfo};
+
+
+my $peoplecolors = {};
+my @colors = qw(ffffcc ffccff ccffff aacccc ccaacc ccccaa aaaa99
+ aa99aa 99aaaa 999966 996699 669999 666633 663366 336666);
+
+foreach my $task (keys %{$ticketinfo}) {
+
+ #TODO: We should be getting this from Projects::Scheduler. why aren't we?
+
+ $ticketinfo->{$task}->{'ticketobj'} = LoadTicket($task);
+ my $ticket = $ticketinfo->{$task}->{'ticketobj'};
+ $peoplecolors->{$ticket->OwnerObj->Id} = (shift @colors);
+}
+
+
+
+</%INIT>
+
+<& /Elements/Header, Title => $ProjectObj->Subject . " / Gantt Chart" &>
+<& Elements/Tabs, Ticket => $ProjectObj, current_tab => 'Projects/Gantt.html?id='.$ProjectObj->Id &>
+<TABLE BORDER=1><TR><TD>Subject</TD>
+% foreach my $date (@dates) {
+<TD><%$schedule->{'dates'}->{$date}->{'daymon'}%></TD>
+% }
+
+</TR>
+
+%foreach my $task (@tasks) {
+
+% my $ticket = $ticketinfo->{$task}->{'ticketobj'};
+ <TR><TD><%$ticket->Subject%> </TD>
+<%"<td></td>" x ($ticketinfo->{$task}->{'startson'}-1)|n%>
+<td bgcolor="#<%$peoplecolors->{$ticket->OwnerObj->Id}%>"
+ colspan="<%$ticketinfo->{$task}->{'duration'}%>"><%$ticket->OwnerObj->Name%></td>
+<% "<td></td>"x ($#dates -
+ ( $ticketinfo->{$task}->{'startson'} +
+ $ticketinfo->{$task}->{'duration'})) |n%>
+</tr>
+% }
+
+</table>
Added: RT-ProjectManager/trunk/html/Projects/History.html
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/History.html Thu May 27 21:16:23 2004
@@ -0,0 +1,34 @@
+%# $Header: /raid/cvsroot/rt-addons/Projects/html/History.html,v 1.2 2001/11/13 04:25:29 jesse Exp $
+%# Copyright 1996-2000 Jesse Vincent <jesse at fsck.com>
+<& /Elements/Header, Title => "History: ".$TicketObj->Subject, ShowBar => 0 &>
+<div align="right">
+ <font size=-2>
+ [<a href="#close" onClick="window.close();">Close</a>]
+ </font>
+</div>
+<BR>
+<& Elements/TicketTabs, current_tab => "Projects/History.html", Ticket=> $TicketObj, Project => $Project &>
+
+<& /Ticket/Elements/ShowHistory , Ticket => $TicketObj, ShowHeaders => $ARGS{'ShowHeaders'} , URIFile=> 'History.html', ShowTitleBarCommands => 0, ShowTitle => 0 &>
+
+
+<%ARGS>
+$id => undef
+$Project => undef
+</%ARGS>
+
+<%INIT>
+
+
+
+my $TicketObj = LoadTicket ($id);
+
+unless ($TicketObj->CurrentUserHasRight('ShowTicket')) {
+ Abort("No permission to view ticket");
+}
+
+</%INIT>
+
+
+
+
Added: RT-ProjectManager/trunk/html/Projects/Overview.html
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/Overview.html Thu May 27 21:16:23 2004
@@ -0,0 +1,81 @@
+<& /Elements/Header, Title => $ProjectObj->Subject . " / Project Overview" &>
+<& Elements/Tabs, Ticket => $ProjectObj, current_tab => 'Projects/Overview.html?id='.$ProjectObj->Id &>
+
+<& /Elements/ListActions, actions => \@messages &>
+
+<form method="post" action="Overview.html">
+<input type="hidden" name="Project" value="<%$Project%>">
+<input type="hidden" name="id" value="<%$id%>">
+
+<TABLE WIDTH=100% CELLSPACING=0 BORDER=0 CELLPADDING=2>
+<TR BGCOLOR="#993333">
+<TD CLASS=INVERSE><&|/l&>Task</&></TD>
+<TD CLASS=INVERSE><&|/l&>Owner</&></TD>
+<TD CLASS=INVERSE><&|/l&>Status</&></TD>
+<TD CLASS=INVERSE><&|/l&>Due</&></TD>
+<TD CLASS=INVERSE><&|/l&>Priority</&></TD>
+<TD CLASS=INVERSE><&|/l&>Estimate</&></TD>
+<TD CLASS=INVERSE><&|/l&>Left</&></TD>
+<TD> </TD>
+</TR>
+% my $parents = $task->MemberOf;
+% while (my $link = $parents->Next) {
+% unless ($link->TargetObj->MemberOf->First) {
+<TR><TD colspan=7 BGCOLOR="#cccccc">Top</TD></TR>
+% } else {
+<TR><TD colspan=7 BGCOLOR="#cccccc"><a HREF="Overview.html?Project=<%$Project%>&id=<%$link->TargetObj->Id%>">Up</A></TD></TR>
+% }
+<& Elements/OverviewEntry,
+ Root=> $link->TargetObj,
+ Depth => 0,
+ MaxDepth => 0,
+ Project => $Project,
+ %ARGS &>
+% }
+% unless ($task->MemberOf->First) {
+<TR><TD colspan=7 BGCOLOR="#cccccc">Top</TD></TR>
+% }
+<& Elements/OverviewEntry,
+ Root=> $task,
+ Depth => 1,
+ Project => $Project,
+ %ARGS
+ &>
+
+</FORM>
+<%INIT>
+my (@messages);
+my @tix_to_update;
+
+ grep { /^Ticket-(\d+)-/ && push @tix_to_update, $1 } (keys %ARGS);
+foreach my $ticket_id (@tix_to_update) {
+ my $ticket= LoadTicket($ticket_id);
+ my %ticket_args;
+ grep { /^Ticket-$ticket_id-(.*)$/ && ($ticket_args{$1} = $ARGS{$_})} (keys %ARGS);
+ ProcessTicketDates ( TicketObj =>$ticket, ARGSRef => \%ticket_args);
+ ProcessTicketBasics ( TicketObj =>$ticket, ARGSRef => \%ticket_args);
+}
+
+my $task = LoadTicket($id);
+$Project = $task->Id unless ($Project);
+my $ProjectObj = LoadTicket($Project);
+
+
+
+if ($ARGS{'CreateTask'}) {
+
+ $ARGS{'Queue'} = $task->QueueObj->id;
+my ($new_id, $new_msg) = CreateTicket(%ARGS);
+push (@messages, $new_msg);
+}
+
+
+
+
+</%INIT>
+
+<%ARGS>
+$Project => undef
+$AddChildOf => undef
+$id => undef
+</%ARGS>
Added: RT-ProjectManager/trunk/html/Projects/Schedule.html
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/Schedule.html Thu May 27 21:16:23 2004
@@ -0,0 +1,62 @@
+<%ARGS>
+$id => undef
+</%ARGS>
+<%INIT>
+
+use RT::Projects::Scheduler;
+
+my $ProjectObj = LoadTicket($id);
+my $schedule = RT::Projects::Scheduler->new();
+
+
+my ($retval, $msg) = $schedule->Build($id);
+unless ($retval) {
+ Abort($msg);
+}
+
+my $calendar = $schedule->Calendar();
+my $ticketinfo = $schedule->TicketInfo();
+
+my @dates = sort (keys %{$calendar});
+my $last = $dates[0];
+my @tasks = sort {
+ $ticketinfo->{$a}->{'startson'} <=>
+ $ticketinfo->{$b}->{'startson'} }
+ keys %{$ticketinfo};
+
+
+</%INIT>
+<& /Elements/Header, Title => $ProjectObj->Subject . " / Schedule" &>
+<& Elements/Tabs, Ticket => $ProjectObj, current_tab => 'Projects/Schedule.html?id='.$ProjectObj->Id &>
+
+<H1>Schedule by date</H1>
+
+% foreach my $date ( keys %{$calendar}) {
+<h2><%$schedule->{'dates'}->{$date}->{'daymon'}%></h2>
+<UL>
+% foreach my $person (keys %{$schedule->{'calendar'}->{$date}}) {
+% my $User = new RT::User($session{'CurrentUser'});
+% $User->Load($person);
+% my $Ticket= LoadTicket($schedule->{'calendar'}->{$date}->{$person});
+<LI><%$User->Name%> - Ticket: <%$Ticket->Subject()%>
+% }
+</UL>
+% }
+
+<%INIT>
+
+my $peoplecolors = {};
+my @colors = qw(ffffcc ffccff ccffff aacccc ccaacc ccccaa aaaa99
+ aa99aa 99aaaa 999966 996699 669999 666633 663366 336666);
+
+foreach my $task (keys %{$ticketinfo}) {
+
+ #TODO: We should be getting this from Projects::Scheduler. why aren't we?
+
+ $ticketinfo->{$task}->{'ticketobj'} = LoadTicket($task);
+ my $ticket = $ticketinfo->{$task}->{'ticketobj'};
+ $peoplecolors->{$ticket->OwnerObj->Id} = (shift @colors);
+}
+
+
+</%INIT>
Added: RT-ProjectManager/trunk/html/Projects/ScheduleByActor.html
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/ScheduleByActor.html Thu May 27 21:16:23 2004
@@ -0,0 +1,40 @@
+<%ARGS>
+$id => undef
+</%ARGS>
+<%INIT>
+
+my $ProjectObj = LoadTicket($id);
+use RT::Projects::Scheduler;
+my $schedule = new RT::Projects::Scheduler;
+
+my ($calendar, $ticketinfo) =$schedule->Build($id);
+
+
+my @dates = sort (keys %{$calendar});
+my $last = $dates[0];
+my @tasks = sort {
+ $ticketinfo->{$a}->{'startson'} <=>
+ $ticketinfo->{$b}->{'startson'} }
+ keys %{$ticketinfo};
+
+
+</%INIT>
+<& /Elements/Header, Title => $ProjectObj->Subject . " / Schedule" &>
+<& Elements/Tabs, Ticket => $ProjectObj, current_tab => 'Projects/Schedule.html?id='.$ProjectObj->Id &>
+
+<H1>Schedule by person</H1>
+
+% foreach my $person ( sort keys %{$schedule->{'calendarbyactor'}}) {
+% my $User = new RT::User($session{'CurrentUser'});
+% $User->Load($person);
+<h2><%$User->Name%></h2>
+<UL>
+% foreach my $date (keys %{$schedule->{'calendarbyactor'}->{$person}}) {
+% my $Ticket= LoadTicket($schedule->{'calendar'}->{$date}->{$person});
+<LI>
+<%$schedule->{'dates'}->{$date}->{'daymon'}%> -
+<%$Ticket->Subject()%>
+% }
+</UL>
+% }
+
Added: RT-ProjectManager/trunk/html/Projects/index.html
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/html/Projects/index.html Thu May 27 21:16:23 2004
@@ -0,0 +1,98 @@
+<& /Elements/Header, Title => 'Project Listing' &>
+
+<& /Elements/ListActions, actions => \@results &>
+
+<form action="index.html" method="GET">
+<table border=0 cellpadding=0 width=100%>
+
+<div align=right>
+<font size=-2>
+%if ($ShowResolved) {
+[<A HREF="index.html">Hide finished projects</a>]
+% } else {
+[<A HREF="index.html?ShowResolved=1">Show finished projects</a>]
+% }
+</font>
+</div>
+
+<TABLE WIDTH=100% CELLSPACING=0 BORDER=0 CELLPADDING=2>
+<TR BGCOLOR="#993333">
+<TD CLASS=INVERSE>Project</TD>
+<TD CLASS=INVERSE>Owner</TD>
+<TD CLASS=INVERSE>Status</TD>
+<TD CLASS=INVERSE>Starts</TD>
+<TD CLASS=INVERSE>Due</TD>
+<TD CLASS=INVERSE>Queue</TD>
+</TR>
+
+
+
+% while (my $project = $projects->Next) {
+<TR>
+<TD><A HREF="Overview.html?id=<%$project->Id%>"><%$project->Subject%></a></TD>
+<TD><%$project->OwnerObj->Name%></TD>
+<TD><%$project->Status%></TD>
+<TD><%$project->StartsObj->AsString%></TD>
+<TD><%$project->DueObj->AsString%></TD>
+<TD><%$project->QueueObj->Name%></TD>
+</TR>
+% }
+<TR><TD bgcolor="#cccccc" COLSPAN=7>Create a new project:</TD></TR>
+<TR>
+<TD><input name="Subject" size=30></TD>
+<TD><& /Elements/SelectOwner, Name => 'Owner'&>
+<TD>open</TD>
+<TD><input name="Starts" size=15></TD>
+<TD><input name="Due" size=15></TD>
+<TD><& /Elements/SelectQueue, Name => 'Queue'&>
+
+</TR>
+
+</TABLE>
+<& /Elements/Submit &>
+</form>
+
+
+<%INIT>
+my @results;
+
+
+if ($Subject) {
+ my $DueObj= new RT::Date($session{'CurrentUser'});
+ $DueObj->Set( Format => 'unknown', Value => $Due);
+
+ my $StartsObj= new RT::Date($session{'CurrentUser'});
+ $StartsObj->Set( Format => 'unknown', Value => $Starts);
+
+ my $newproject = new RT::Ticket($session{'CurrentUser'});
+ my ($ticket, $trans, $msg) = $newproject->Create( Queue => $Queue,
+ Owner => $Owner,
+ Status => 'open',
+ Type => 'project',
+ Due => $DueObj->ISO,
+ Starts => $StartsObj->ISO,
+ Subject => $Subject);
+ if ($ticket) {
+ push @results, "New project created with id #$ticket";
+ } else {
+ push @results, "Project could not be created: $msg";
+ }
+}
+
+my $projects = new RT::Tickets($session{'CurrentUser'});
+$projects->LimitType(VALUE => 'project');
+
+unless ($ShowResolved) {
+ $projects->LimitStatus (VALUE => 'resolved',
+ OPERATOR => '!=' );
+}
+
+</%INIT>
+<%ARGS>
+$Subject => undef
+$Starts => undef
+$Due => undef
+$Queue => undef
+$Owner => undef
+$ShowResolved => undef
+</%ARGS>
Added: RT-ProjectManager/trunk/lib/RT/ProjectManager.pm
==============================================================================
--- (empty file)
+++ RT-ProjectManager/trunk/lib/RT/ProjectManager.pm Thu May 27 21:16:23 2004
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+
+package RT::ProjectManager;
+
+our $VERSION = "0.01_01";
More information about the Rt-commit
mailing list