summaryrefslogtreecommitdiff
path: root/rt/tools/insertdata
diff options
context:
space:
mode:
authorivan <ivan>2002-08-12 06:17:09 +0000
committerivan <ivan>2002-08-12 06:17:09 +0000
commit3ef62a0570055da710328937e7f65dbb2c027c62 (patch)
treed549158b172fd499b4f81a2981b62aabbde4f99b /rt/tools/insertdata
parent030438c9cb1c12ccb79130979ef0922097b4311a (diff)
import rt 2.0.14
Diffstat (limited to 'rt/tools/insertdata')
-rwxr-xr-xrt/tools/insertdata618
1 files changed, 618 insertions, 0 deletions
diff --git a/rt/tools/insertdata b/rt/tools/insertdata
new file mode 100755
index 000000000..b3e76e623
--- /dev/null
+++ b/rt/tools/insertdata
@@ -0,0 +1,618 @@
+#!/usr/bin/perl -w
+#
+# $Header: /home/cvs/cvsroot/freeside/rt/tools/Attic/insertdata,v 1.1 2002-08-12 06:17:08 ivan Exp $
+# RT is (c) 1996-2002 Jesse Vincent (jesse@bestpractical.com);
+
+package RT;
+use strict;
+use vars qw($VERSION $Handle $Nobody $SystemUser $item);
+
+use lib "!!RT_LIB_PATH!!";
+use lib "!!RT_ETC_PATH!!";
+
+#This drags in RT's config.pm
+use config;
+use Carp;
+
+use RT::Handle;
+use RT::User;
+use RT::CurrentUser;
+
+#
+my $LastVersion = shift || undef;
+my $LastMinorVersion = undef;
+
+#connect to the db
+$RT::Handle = new RT::Handle($RT::DatabaseType);
+$RT::Handle->Connect();
+
+#Put together a current user object so we can create a User object
+my $CurrentUser = new RT::CurrentUser();
+
+if ($LastVersion) {
+ if ( $LastVersion =~ /^2.0.(\d+)$/ ) {
+ $LastMinorVersion = $1;
+ print "Looking for new objects to add to the database"
+ . " since $LastVersion\n\n";
+ }
+ else {
+ print "This tool does not support upgrades from development releases "
+ . "or non 2.0.x versions";
+ }
+}
+else { # this is a virgin install
+ print "Checking for existing system user...";
+ my $test_user = RT::User->new($CurrentUser);
+ $test_user->Load('RT_System');
+ if ( $test_user->id ) {
+ print "Found!\n\nYou appear to have already run insertdata.\n"
+ . "Exiting, so as not to clobber your existing data. To ERASE your\n"
+ . "RT database and start over, type 'make dropdb; make install' in\n"
+ . "the RT installation directory. If you just meant to upgrade the\n"
+ . "content of your database, rerun this program as: \n",
+ " $0 <version>\n"
+ . "where <version> is the last RELEASED version of RT you installed\n"
+ . "for example, if you're upgrading from 2.0.4, you'd type:\n"
+ . " $0 2.0.4\n";
+ exit(-1);
+
+ }
+ else {
+ print "not found. This appears to be a new installation";
+ }
+
+ print "Creating system user...";
+ my $RT_System = new RT::User($CurrentUser);
+
+ my ( $val, $msg ) = $RT_System->_BootstrapCreate(
+ Name => 'RT_System',
+ RealName => 'The RT System itself',
+ Comments =>
+'Do not delete or modify this user. It is integral to RT\'s internal database structures',
+ Privileged => '2',
+ Creator => '1'
+ );
+
+ if ($val) {
+ print "done.\n";
+ }
+ else {
+ print "$msg\n";
+ exit(1);
+ }
+
+}
+
+#now that we bootstrapped that little bit, we can use the standard RT cli
+# helpers to do what we need
+
+use RT::Interface::CLI qw(CleanEnv LoadConfig DBConnect
+ GetCurrentUser GetMessageContent);
+
+#Clean out all the nasties from the environment
+CleanEnv();
+
+#Load etc/config.pm and drop privs
+LoadConfig();
+
+#Connect to the database and get RT::SystemUser and RT::Nobody loaded
+DBConnect();
+
+$CurrentUser->LoadByName('RT_System');
+
+# {{{ Users
+
+my @users;
+
+unless ($LastVersion) {
+ @users = (
+ {
+ Name => 'Nobody',
+ RealName => 'Nobody in particular',
+ Comments => 'Do not delete or modify this user. It is integral '
+ . 'to RT\'s internal data structures',
+ Privileged => '2',
+ },
+
+ {
+ Name => 'root',
+ Gecos => 'root',
+ RealName => 'Enoch Root',
+ Password => 'password',
+ EmailAddress => "root\@localhost",
+ Comments => 'SuperUser',
+ Privileged => '1',
+ }
+ );
+}
+
+# }}}
+
+# {{{ Groups
+
+my @groups;
+unless ($LastVersion) {
+ @groups = (
+ {
+ Name => 'Everyone',
+ Description => 'Pseudogroup for internal use',
+ Pseudo => '1',
+ },
+ {
+ Name => 'Owner',
+ Description => 'Pseudogroup for internal use',
+ Pseudo => '1',
+ },
+ {
+ Name => 'Requestor',
+ Description => 'Pseudogroup for internal use',
+ Pseudo => '1',
+ },
+ {
+ Name => 'Cc',
+ Description => 'Pseudogroup for internal use',
+ Pseudo => '1',
+ },
+ {
+ Name => 'AdminCc',
+ Description => 'Pseudogroup for internal use',
+ Pseudo => '1',
+ },
+ );
+}
+
+# }}}
+
+# {{{ ACL
+my @acl;
+
+unless ($LastVersion) {
+ @acl = ( #TODO: make this actually take the serial # granted to root.
+ {
+ PrincipalId => '1',
+ PrincipalType => 'User',
+ RightName => 'SuperUser',
+ RightScope => 'System',
+ RightAppliesTo => '0'
+ },
+ {
+ PrincipalId => '2',
+ PrincipalType => 'User',
+ RightName => 'SuperUser',
+ RightScope => 'System',
+ RightAppliesTo => '0'
+ },
+
+ {
+ PrincipalId => '3',
+ PrincipalType => 'User',
+ RightName => 'SuperUser',
+ RightScope => 'System',
+ RightAppliesTo => '0'
+ }
+
+ );
+}
+
+# }}}
+
+# {{{ Queues
+
+my @queues;
+unless ($LastVersion) {
+ @queues = (
+ {
+ Name => 'general',
+ Description => 'The default queue',
+ CorrespondAddress => "rt\@localhost",
+ CommentAddress => "rt-comment\@localhost"
+ }
+ );
+}
+
+# }}}
+
+# {{{ ScripActions
+
+my @ScripActions;
+
+unless ($LastVersion) {
+ @ScripActions = (
+
+ {
+ Name => 'AutoreplyToRequestors',
+ Description =>
+'Always sends a message to the requestors independent of message sender',
+ ExecModule => 'Autoreply',
+ Argument => 'Requestor'
+ },
+ {
+ Name => 'NotifyRequestors',
+ Description => 'Sends a message to the requestors',
+ ExecModule => 'Notify',
+ Argument => 'Requestor'
+ },
+ {
+ Name => 'NotifyOwnerAsComment',
+ Description => 'Sends mail to the owner',
+ ExecModule => 'NotifyAsComment',
+ Argument => 'Owner'
+ },
+ {
+ Name => 'NotifyOwner',
+ Description => 'Sends mail to the owner',
+ ExecModule => 'Notify',
+ Argument => 'Owner'
+ },
+ {
+ Name => 'NotifyAdminCcsAsComment',
+ Description => 'Sends mail to the administrative Ccs as a comment',
+ ExecModule => 'NotifyAsComment',
+ Argument => 'AdminCc'
+ },
+ {
+ Name => 'NotifyAdminCcs',
+ Description => 'Sends mail to the administrative Ccs',
+ ExecModule => 'Notify',
+ Argument => 'AdminCc'
+ },
+
+ {
+ Name => 'NotifyRequestorsAndCcsAsComment',
+ Description => 'Send mail to requestors and Ccs as a comment',
+ ExecModule => 'NotifyAsComment',
+ Argument => 'Requestor,Cc'
+ },
+
+ {
+ Name => 'NotifyRequestorsAndCcs',
+ Description => 'Send mail to requestors and Ccs',
+ ExecModule => 'Notify',
+ Argument => 'Requestor,Cc'
+ },
+
+ {
+ Name => 'NotifyAllWatchersAsComment',
+ Description => 'Send mail to all watchers',
+ ExecModule => 'NotifyAsComment',
+ Argument => 'All'
+ },
+ {
+ Name => 'NotifyAllWatchers',
+ Description => 'Send mail to all watchers',
+ ExecModule => 'Notify',
+ Argument => 'All'
+ },
+ );
+}
+
+if ( $LastMinorVersion < 12 ) {
+ push (
+ @ScripActions,
+ {
+ Name => 'NotifyOtherRecipientsAsComment',
+ Description => 'Sends mail to explicitly listed Ccs and Bccs',
+ ExecModule => 'NotifyAsComment',
+ Argument => 'OtherRecipients'
+ },
+ {
+ Name => 'NotifyOtherRecipients',
+ Description => 'Sends mail to explicitly listed Ccs and Bccs',
+ ExecModule => 'Notify',
+ Argument => 'OtherRecipients'
+ },
+ );
+}
+
+# }}}
+
+# {{{ ScripConditions
+
+my @ScripConditions;
+unless ($LastVersion) {
+ @ScripConditions = (
+ {
+ Name => 'OnCreate',
+ Description => 'When a ticket is created',
+ ApplicableTransTypes => 'Create',
+ ExecModule => 'AnyTransaction',
+ },
+
+ {
+ Name => 'OnTransaction',
+ Description => 'When anything happens',
+ ApplicableTransTypes => 'Any',
+ ExecModule => 'AnyTransaction',
+ },
+ {
+
+ Name => 'OnCorrespond',
+ Description => 'Whenever correspondence comes in',
+ ApplicableTransTypes => 'Correspond',
+ ExecModule => 'AnyTransaction',
+ },
+
+ {
+
+ Name => 'OnComment',
+ Description => 'Whenever comments come in',
+ ApplicableTransTypes => 'Comment',
+ ExecModule => 'AnyTransaction'
+ },
+ {
+
+ Name => 'OnStatus',
+ Description => 'Whenever a ticket\'s status changes',
+ ApplicableTransTypes => 'Status',
+ ExecModule => 'AnyTransaction',
+
+ },
+ {
+ Name => 'OnResolve',
+ Description => 'Whenever a ticket is resolved.',
+ ApplicableTransTypes => 'Status',
+ ExecModule => 'StatusChange',
+ Argument => 'resolved'
+
+ },
+
+ );
+}
+
+# }}}
+
+# {{{ Templates
+my @templates;
+
+unless ($LastVersion) {
+ @templates = (
+ {
+ Queue => '0',
+ Name => 'Autoreply',
+ Description => 'Default Autoresponse Template',
+ Content => 'Subject: AutoReply: {$Ticket->Subject}
+
+
+Greetings,
+
+This message has been automatically generated in response to the
+creation of a trouble ticket regarding:
+ "{$Ticket->Subject()}",
+a summary of which appears below.
+
+There is no need to reply to this message right now. Your ticket has been
+assigned an ID of [{$rtname} #{$Ticket->id()}].
+
+Please include the string:
+
+ [{$rtname} #{$Ticket->id}]
+
+in the subject line of all future correspondence about this issue. To do so,
+you may reply to this message.
+
+ Thank you,
+ {$Ticket->QueueObj->CorrespondAddress()}
+
+-------------------------------------------------------------------------
+{$Transaction->Content()}
+'
+ },
+
+ {
+
+ # id => 2,
+ Queue => '0',
+ Name => 'Transaction',
+ Description => 'Default transaction template',
+ Content => '
+
+
+{$Transaction->CreatedAsString}: Request {$Ticket->id} was acted upon.
+Transaction: {$Transaction->Description}
+ Queue: {$Ticket->QueueObj->Name}
+ Subject: {$Transaction->Subject || $Ticket->Subject || "(No subject given)"}
+ Owner: {$Ticket->OwnerObj->Name}
+ Requestors: {$Ticket->Requestors->EmailsAsString()}
+ Status: {$Ticket->Status}
+ Ticket <URL: {$RT::WebURL}Ticket/Display.html?id={$Ticket->id} >
+-------------------------------------------------------------------------
+{$Transaction->Content()}'
+ },
+
+ {
+
+ Queue => '0',
+ Name => 'AdminCorrespondence',
+ Description => 'Default admin correspondence template',
+ Content => '
+
+
+<URL: {$RT::WebURL}Ticket/Display.html?id={$Ticket->id} >
+
+{$Transaction->Content()}'
+ },
+
+ {
+ Queue => '0',
+ Name => 'Correspondence',
+ Description => 'Default correspondence template',
+ Content => '
+
+{$Transaction->Content()}'
+ },
+
+ {
+ Queue => '0',
+ Name => 'AdminComment',
+ Description => 'Default admin comment template',
+ Content =>
+'Subject: [Comment] {my $s=($Transaction->Subject||$Ticket->Subject); $s =~ s/\\[Comment\\]//g; $comment =~ s/^Re//i; $s;}
+
+
+{$RT::WebURL}Ticket/Display.html?id={$Ticket->id}
+This is a comment. It is not sent to the Requestor(s):
+
+{$Transaction->Content()}
+'
+ },
+
+ {
+ Queue => '0',
+ Name => 'StatusChange',
+ Description => 'Ticket status changed',
+ Content => 'Subject: Status Changed to: {$Transaction->NewValue}
+
+
+{$RT::WebURL}Ticket/Display.html?id={$Ticket->id}
+
+{$Transaction->Content()}
+'
+ },
+
+ {
+
+ Queue => '0',
+ Name => 'Resolved',
+ Description => 'Ticket Resolved',
+ Content => 'Subject: Ticket Resolved
+
+According to our records, your request has been resolved. If you have any
+further questions or concerns, please respond to this message.
+'
+ }
+ );
+}
+
+# }}}
+
+# {{{ Scrips;
+
+my @scrips;
+unless ($LastVersion) {
+ @scrips = (
+ { Queue => 0,
+ ScripCondition => 'OnCreate',
+ ScripAction => 'AutoreplyToRequestors',
+ Template => 'Autoreply'
+ },
+ { Queue => 0,
+ ScripCondition => 'OnCreate',
+ ScripAction => 'NotifyAdminCcs',
+ Template => 'Transaction',
+ },
+ { Queue => 0,
+ ScripCondition => 'OnCorrespond',
+ ScripAction => 'NotifyAllWatchers',
+ Template => 'Correspondence',
+ },
+ { Queue => 0,
+ ScripCondition => 'OnComment',
+ ScripAction => 'NotifyAdminCcsAsComment',
+ Template => 'AdminComment',
+ },
+ )
+}
+if ( $LastMinorVersion < 12 ) {
+ push (
+ @scrips,
+ { Queue => 0,
+ ScripCondition => 'OnComment',
+ ScripAction => 'NotifyOtherRecipientsAsComment',
+ Template => 'Correspondence',
+ },
+ { Queue => 0,
+ ScripCondition => 'OnCorrespond',
+ ScripAction => 'NotifyOtherRecipients',
+ Template => 'Correspondence',
+ },
+ );
+}
+# }}}
+
+print "Creating ACL...";
+use RT::ACE;
+for $item (@acl) {
+ my $new_entry = new RT::ACE($CurrentUser);
+
+ #Using an internal function. this should never be used outside of the bootstrap script
+ my $return = $new_entry->_BootstrapRight(%$item);
+ print $return. ".";
+}
+print "done.\n";
+
+print "Creating users...";
+use RT::User;
+foreach $item (@users) {
+ my $new_entry = new RT::User($CurrentUser);
+ my ( $return, $msg ) = $new_entry->Create(%$item);
+ print "(Error: $msg)" unless ($return);
+ print $return. ".";
+}
+print "done.\n";
+
+print "Creating groups...";
+use RT::Group;
+foreach $item (@groups) {
+ my $new_entry = new RT::Group($CurrentUser);
+ my $return = $new_entry->Create(%$item);
+ print $return. ".";
+}
+print "done.\n";
+
+print "Creating queues...";
+use RT::Queue;
+for $item (@queues) {
+ my $new_entry = new RT::Queue($CurrentUser);
+ my ( $return, $msg ) = $new_entry->Create(%$item);
+ print "(Error: $msg)" unless ($return);
+ print $return. ".";
+}
+
+print "done.\n";
+print "Creating ScripActions...";
+
+use RT::ScripAction;
+for $item (@ScripActions) {
+ my $new_entry = new RT::ScripAction($CurrentUser);
+ my $return = $new_entry->Create(%$item);
+ print $return. ".";
+}
+
+print "done.\n";
+print "Creating ScripConditions...";
+
+use RT::ScripCondition;
+for $item (@ScripConditions) {
+ my $new_entry = new RT::ScripCondition($CurrentUser);
+ my $return = $new_entry->Create(%$item);
+ print $return. ".";
+}
+
+print "done.\n";
+
+print "Creating templates...";
+
+use RT::Template;
+for $item (@templates) {
+ my $new_entry = new RT::Template($CurrentUser);
+ my $return = $new_entry->Create(%$item);
+ print $return. ".";
+}
+print "done.\n";
+
+print "Creating Scrips...";
+
+use RT::Scrip;
+for $item (@scrips) {
+ my $new_entry = RT::Scrip->new($CurrentUser);
+ my ($return,$msg) = $new_entry->Create(%$item);
+ print "(Error: $msg)" unless ($return);
+ print $return.".";
+
+}
+print "done.\n";
+
+$RT::Handle->Disconnect();
+
+1;
+