use DBI ;
use MIME::Base64 ;
use HTML::Entities ;
+use Digest::MD5 ;
use vars qw/$dbh @reqlist $query/ ;
use vars qw/$sys_default_domain $sys_scm_host $sys_download_host
$sys_news_group $sys_dbhost $sys_dbname $sys_dbuser $sys_dbpasswd
$sys_ldap_base_dn $sys_ldap_host $admin_login $admin_password
$server_admin $domain_name $newsadmin_groupid $statsadmin_groupid
- $skill_list/ ;
+ $skill_list $libdir $sqldir/ ;
require ("/etc/gforge/local.pl") ;
-require ("/usr/lib/gforge/lib/sqlparser.pm") ; # Our magic SQL parser
-require ("/usr/lib/gforge/lib/sqlhelper.pm") ; # Our SQL functions
+$libdir="/usr/share/gforge/lib";
+$sqldir="/usr/share/gforge/db";
+require ("$libdir/sqlparser.pm") ; # Our magic SQL parser
+require ("$libdir/sqlhelper.pm") ; # Our SQL functions
+require ("$libdir/include.pl"); # Some other functions
&debug ("You'll see some debugging info during this installation.") ;
&debug ("Do not worry unless told otherwise.") ;
-if ( "$sys_dbname" ne "gforge" || "$sys_dbuser" ne "gforge" ) {
-$dbh ||= DBI->connect("DBI:Pg:dbname=$sys_dbname","$sys_dbuser","$sys_dbpasswd");
-} else {
-$dbh ||= DBI->connect("DBI:Pg:dbname=$sys_dbname");
-}
-die "Cannot connect to database: $!" if ( ! $dbh );
-
-# debug "Connected to the database OK." ;
+&db_connect ;
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
my ($sth, @array, $version, $action, $path, $target) ;
# Do we have at least the basic schema?
-
- $query = "SELECT count(*) from pg_class where relname = 'groups' and relkind = 'r'";
- # debug $query ;
- $sth = $dbh->prepare ($query) ;
- $sth->execute () ;
- @array = $sth->fetchrow_array () ;
- $sth->finish () ;
-
# Create Sourceforge database
-
- if ($array [0] == 0) { # No 'groups' table
+ if (! &table_exists ($dbh, 'groups')) { # No 'groups' table
# Installing SF 2.6 from scratch
$action = "installation" ;
&debug ("Creating initial Sourceforge database from files.") ;
} else { # A 'groups' table exists
$action = "upgrade" ;
- $query = "SELECT count(*) from pg_class where relname = 'debian_meta_data' and relkind = 'r'";
- # debug $query ;
- $sth = $dbh->prepare ($query) ;
- $sth->execute () ;
- @array = $sth->fetchrow_array () ;
- $sth->finish () ;
-
- if ($array[0] == 0) { # No 'debian_meta_data' table
+ if (! &table_exists ($dbh, 'debian_meta_data')) { # No 'debian_meta_data' table
# If we're here, we're upgrading from 2.5-7 or earlier
# We therefore need to create the table
&create_metadata_table ("2.5-7+just+before+8") ;
$version = &get_db_version ;
$target = "2.5.9999.1+global+data+done" ;
if (&is_lesser ($version, $target)) {
- my @filelist = qw{ /usr/lib/gforge/db/sf-2.6-complete.sql } ;
+ my @filelist = qw{ sf-2.6-complete.sql } ;
# TODO: user_rating.sql
foreach my $file (@filelist) {
&debug ("Processing $file") ;
- @reqlist = @{ &parse_sql_file ($file) } ;
+ @reqlist = @{ &parse_sql_file ($sqldir."/".$file) } ;
foreach my $s (@reqlist) {
$query = $s ;
- # debug $query ;
+ # &debug ($query) ;
$sth = $dbh->prepare ($query) ;
$sth->execute () ;
$sth->finish () ;
if (&is_lesser ($version, $target)) {
&debug ("Inserting skills.") ;
- foreach my $skill (split /;/, $skill_list) {
+ foreach my $skill (split m/;/, $skill_list) {
push @reqlist, "INSERT INTO people_skill (name) VALUES ('$skill')" ;
}
if (&is_lesser ($version, $target)) {
&debug ("Upgrading your database scheme from 2.5") ;
- my $pg_version = &get_pg_version ;
-
- if (&is_lesser ($pg_version, "7.3")) {
- @reqlist = (
- "DROP INDEX groups_pkey",
- "DROP INDEX users_pkey",
- ) ;
- } else {
- @reqlist = (
- "ALTER TABLE groups DROP CONSTRAINT groups_pkey",
- "ALTER TABLE users DROP CONSTRAINT users_pkey",
- ) ;
- }
+ @reqlist = (
+ "ALTER TABLE groups DROP CONSTRAINT groups_pkey",
+ "ALTER TABLE users DROP CONSTRAINT users_pkey",
+ ) ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
$sth->finish () ;
}
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/sf2.5-to-sf2.6.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/sf2.5-to-sf2.6.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Updating supported_languages table.") ;
- my $pg_version = &get_pg_version ;
-
- if (&is_lesser ($pg_version, "7.3")) {
- @reqlist = (
- "ALTER TABLE supported_languages RENAME TO supported_languages_old",
- "CREATE TABLE supported_languages (language_id integer DEFAULT nextval('supported_languages_pk_seq'::text) NOT NULL, name text, filename text, classname text, language_code character(5))",
- "INSERT INTO supported_languages SELECT * FROM supported_languages_old",
- "DROP TABLE supported_languages_old",
- "ALTER TABLE supported_languages ADD CONSTRAINT supported_languages_pkey PRIMARY KEY (language_id)",
- "ALTER TABLE users ADD CONSTRAINT users_languageid_fk FOREIGN KEY (language) REFERENCES supported_languages(language_id) MATCH FULL",
- "ALTER TABLE doc_data ADD CONSTRAINT docdata_languageid_fk FOREIGN KEY (language_id) REFERENCES supported_languages(language_id) MATCH FULL",
- "UPDATE supported_languages SET language_code='pt_BR', classname='PortugueseBrazilian', name='Pt. Brazilian', filename='PortugueseBrazilian.class' where classname='PortugueseBrazillian'",
- ) ;
- } else {
- @reqlist = (
- "ALTER TABLE supported_languages RENAME COLUMN language_code TO language_code_old",
- "ALTER TABLE supported_languages ADD COLUMN language_code character(5)",
- "UPDATE supported_languages SET language_code = language_code_old",
- "ALTER TABLE supported_languages DROP COLUMN language_code_old",
- "UPDATE supported_languages SET language_code='pt_BR', classname='PortugueseBrazilian', name='Pt. Brazilian', filename='PortugueseBrazilian.class' where classname='PortugueseBrazillian'",
- ) ;
- }
+ @reqlist = (
+ "ALTER TABLE supported_languages RENAME COLUMN language_code TO language_code_old",
+ "ALTER TABLE supported_languages ADD COLUMN language_code character(5)",
+ "UPDATE supported_languages SET language_code = language_code_old",
+ "ALTER TABLE supported_languages DROP COLUMN language_code_old",
+ "UPDATE supported_languages SET language_code='pt_BR', classname='PortugueseBrazilian', name='Pt. Brazilian', filename='PortugueseBrazilian.class' where classname='PortugueseBrazillian'",
+ ) ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20021125.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20021125.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20021125.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20021212.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20021212.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20021212.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
$version = &get_db_version ;
$target = "2.6-0+checkpoint+14" ;
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with 20021213.sql") ;
+ &debug ("Upgrading with 20021213-1.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20021213.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20021213-1.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20021214.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20021214.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20021214.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20021215.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20021215.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20021215.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20021216.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20021216.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20021216.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
$version = &get_db_version ;
$target = "2.6-0+checkpoint+19" ;
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with 20021223.sql") ;
+ &debug ("Upgrading with 20021223-2.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20021223.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20021223-2.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
$version = &get_db_version ;
$target = "2.6-0+checkpoint+20" ;
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with 20030102.sql") ;
+ &debug ("Upgrading with 20030102-2.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20030102.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20030102-2.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20030105.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20030105.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20030105.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20030107.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20030107.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20030107.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20030109.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20030109.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20030109.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
&debug ("Upgrading with 20030112.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20030112.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20030112.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
$version = &get_db_version ;
$target = "2.6-0+checkpoint+25" ;
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with 20030113.sql") ;
+ &debug ("Upgrading with 20030113-2.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20030113.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20030113-2.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20030131.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20030131.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20030131.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20030209.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20030209.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20030209.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20030312.sql") ;
- my $pg_version = &get_pg_version ;
-
- if (&is_lesser ($pg_version, "7.3")) {
- @reqlist = (
- "DROP TRIGGER projtask_insert_depend_trig ON project_task",
- "DROP FUNCTION projtask_insert_depend ()",
- "CREATE OR REPLACE FUNCTION projtask_insert_depend () RETURNS OPAQUE AS '
-DECLARE
- dependon RECORD;
- delta INTEGER;
-BEGIN
- IF NEW.start_date > NEW.end_date THEN
- RAISE EXCEPTION ''START DATE CANNOT BE AFTER END DATE'';
- END IF;
- FOR dependon IN SELECT * FROM project_dependon_vw
- WHERE project_task_id=NEW.project_task_id LOOP
- IF dependon.end_date > NEW.start_date THEN
- delta := dependon.end_date-NEW.start_date;
- RAISE NOTICE ''Bumping Back: % Delta: % '',NEW.project_task_id,delta;
- NEW.start_date := NEW.start_date+delta;
- NEW.end_date := NEW.end_date+delta;
- END IF;
- END LOOP;
- RETURN NEW;
-END;
-' LANGUAGE 'plpgsql'",
-"CREATE TRIGGER projtask_insert_depend_trig BEFORE INSERT OR UPDATE ON project_task
- FOR EACH ROW EXECUTE PROCEDURE projtask_insert_depend()",
- ) ;
- } else {
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20030312.sql") } ;
- }
+ @reqlist = @{ &parse_sql_file ("$sqldir/20030312.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20030513.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20030513.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20030513.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20030822.sql") ;
- @reqlist = (
- "DROP TRIGGER artifactgroup_update_trig ON artifact",
- "DROP FUNCTION artifactgroup_update_agg ()",
- @{ &parse_sql_file ("/usr/lib/gforge/db/20030822.sql") },
- "CREATE TRIGGER artifactgroup_update_trig AFTER UPDATE ON artifact FOR EACH ROW EXECUTE PROCEDURE artifactgroup_update_agg()",
- ) ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20030822.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20031105.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20031105.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20031105.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
&debug ("Upgrading with 20031124.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20031124.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20031124.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20031129.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20031129.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20031129.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
# They are independent anyway.
&debug ("Upgrading with 20031126.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20031126.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20031126.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20031205.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20031205.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20031205.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20040130.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20040130.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20040130.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20040204.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20040204.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20040204.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20040315.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20040315.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20040315.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
$version = &get_db_version ;
$target = "3.3.0-0+0" ;
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with 20040325.sql") ;
+ &debug ("Upgrading with 200403251.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20040325.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/200403251.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 200403252.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/200403252.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/200403252.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20040507.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20040507.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20040507.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
if (&is_lesser ($version, $target)) {
&debug ("Upgrading with 20040722.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20040722.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20040722.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
}
$version = &get_db_version ;
- $target = "3.3.0-0+5" ;
+ $target = "3.3.0-0+6" ;
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with 20040729.sql") ;
+ &debug ("Upgrading with 20040804.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20040729.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20040804.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
}
$version = &get_db_version ;
- $target = "3.3.0-0+6" ;
+ $target = "3.3.0-0+7" ;
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with 20040804.sql") ;
+ &debug ("Upgrading with 20040826.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20040804.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20040826.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
}
$version = &get_db_version ;
- $target = "3.3.0-0+7" ;
+ $target = "3.3.0-2+1" ;
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with 20040826.sql") ;
+ &debug ("Migrating forum names") ;
+
+ $query = "SELECT group_forum_id,forum_name FROM forum_group_list" ;
+ # &debug ($query) ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ while (@array = $sth->fetchrow_array) {
+ my $forumid = $array[0] ;
+ my $oldname = $array[1] ;
+
+ my $newname = lc $oldname ;
+ $newname =~ s/[^_.0-9a-z-]/-/g ;
+
+ my $query2 = "UPDATE forum_group_list SET forum_name='$newname' WHERE group_forum_id=$forumid" ;
+ # &debug ($query2) ;
+ my $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ $sth2->finish () ;
+ }
+ $sth->finish () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "3.3.0-2+2" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Migrating permissions to RBAC") ;
+
+ my $defaultroles = {
+ 'Admin' => { 'projectadmin'=>'A', 'frs'=>'1', 'scm'=>'1', 'docman'=>'1', 'forumadmin'=>'2', 'forum'=>'2', 'trackeradmin'=>'2', 'tracker'=>'2', 'pmadmin'=>'2', 'pm'=>'2' },
+ 'Senior Developer' => { 'projectadmin'=>'0', 'frs'=>'1', 'scm'=>'1', 'docman'=>'1', 'forumadmin'=>'2', 'forum'=>'2', 'trackeradmin'=>'2', 'tracker'=>'2', 'pmadmin'=>'2', 'pm'=>'2' },
+ 'Junior Developer' => { 'projectadmin'=>'0', 'frs'=>'0', 'scm'=>'1', 'docman'=>'0', 'forumadmin'=>'0', 'forum'=>'1', 'trackeradmin'=>'0', 'tracker'=>'1', 'pmadmin'=>'0', 'pm'=>'1' },
+ 'Doc Writer' => { 'projectadmin'=>'0', 'frs'=>'0', 'scm'=>'0', 'docman'=>'1', 'forumadmin'=>'0', 'forum'=>'1', 'trackeradmin'=>'0', 'tracker'=>'0', 'pmadmin'=>'0', 'pm'=>'0' },
+ 'Support Tech' => { 'projectadmin'=>'0', 'frs'=>'0', 'scm'=>'0', 'docman'=>'1', 'forumadmin'=>'0', 'forum'=>'1', 'trackeradmin'=>'0', 'tracker'=>'2', 'pmadmin'=>'0', 'pm'=>'0' }
+ } ;
+
+ $query = "SELECT group_id FROM groups where status != 'P'" ;
+ # &debug ($query) ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ while (@array = $sth->fetchrow_array) {
+ my $group_id = $array[0] ;
+
+ my ($query2, $sth2, @array2, $admin_rid, $jd_rid, %roledata) ;
+ foreach my $rname (keys %$defaultroles) {
+ $query2 = "SELECT nextval('role_role_id_seq'::text)" ;
+ # &debug ($query2) ;
+ $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ @array2 = $sth2->fetchrow_array ;
+ my $rid = $array2[0] ;
+ $sth2->finish () ;
+ if ($rname eq 'Admin') {
+ $admin_rid = $rid ;
+ } elsif ($rname eq 'Junior Developer') {
+ $jd_rid = $rid ;
+ }
+
+ $query2 = "INSERT INTO role (role_id, group_id, role_name)
+ VALUES ($rid, $group_id, '$rname')" ;
+ # &debug ($query2) ;
+ $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ $sth2->finish () ;
+
+ foreach my $section (keys %{$defaultroles->{$rname}}) {
+ if ($section eq 'forum') {
+ $query2 = "SELECT group_forum_id
+ FROM forum_group_list
+ WHERE group_id = $group_id" ;
+ # &debug ($query2) ;
+ $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ while (@array2 = $sth2->fetchrow_array) {
+ $roledata{'forum'}{$array2[0]} = $defaultroles->{$rname}{'forum'} ;
+ }
+ $sth2->finish () ;
+ } elsif ($section eq 'pm') {
+ $query2 = "SELECT group_project_id
+ FROM project_group_list
+ WHERE group_id = $group_id" ;
+ # &debug ($query2) ;
+ $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ while (@array2 = $sth2->fetchrow_array) {
+ $roledata{'pm'}{$array2[0]} = $defaultroles->{$rname}{'pm'} ;
+ }
+ $sth2->finish () ;
+ } elsif ($section eq 'tracker') {
+ $query2 = "SELECT group_artifact_id
+ FROM artifact_group_list
+ WHERE group_id = $group_id" ;
+ # &debug ($query2) ;
+ $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ while (@array2 = $sth2->fetchrow_array) {
+ $roledata{'tracker'}{$array2[0]} = $defaultroles->{$rname}{'tracker'} ;
+ }
+ $sth2->finish () ;
+ } else {
+ $roledata{$section}{0} = $defaultroles->{$rname}{$section} ;
+ }
+
+ foreach my $rd_it (keys %{$roledata{$section}}) {
+ $query2 = "INSERT INTO role_setting (role_id, section_name, ref_id, value)
+ VALUES ($rid, '$section', $rd_it, '$roledata{$section}{$rd_it}')" ;
+ # &debug ($query2) ;
+ $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ $sth2->finish () ;
+ }
+
+ }
+
+ }
+
+ # affecter le rôle Admin aux admins, JD aux autres
+ $query2 = "SELECT user_id, admin_flags FROM user_group WHERE group_id = $group_id" ;
+ # &debug ($query2) ;
+ $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ while (@array2 = $sth2->fetchrow_array) {
+ my $uid = $array2[0] ;
+ my $adminflags = $array2[1] ;
+ my ($rid, $rname) ;
+
+ $adminflags =~ s/\s//g ;
+ if ($adminflags eq 'A') {
+ $rid = $admin_rid ;
+ $rname = 'Admin' ;
+ } else {
+ $rid = $jd_rid ;
+ $rname = 'Junior Developer' ;
+ }
+ my @reqlist3 = (
+ "UPDATE user_group
+ SET role_id = $rid,
+ admin_flags = '$defaultroles->{$rname}{'projectadmin'}',
+ forum_flags = '$defaultroles->{$rname}{'forumadmin'}',
+ project_flags = '$defaultroles->{$rname}{'pmadmin'}',
+ doc_flags = '$defaultroles->{$rname}{'docman'}',
+ cvs_flags = '$defaultroles->{$rname}{'scm'}',
+ release_flags = '$defaultroles->{$rname}{'frs'}',
+ artifact_flags = '$defaultroles->{$rname}{'trackeradmin'}'
+ WHERE user_id = $uid AND group_id = $group_id" ,
+ "UPDATE forum_perm
+ SET perm_level=$defaultroles->{$rname}{'forum'}
+ WHERE group_forum_id IN (
+ SELECT group_forum_id
+ FROM forum_group_list
+ WHERE group_id=$group_id)
+ AND user_id=$uid" ,
+ "UPDATE project_perm
+ SET perm_level=$defaultroles->{$rname}{'pm'}
+ WHERE group_project_id IN (
+ SELECT group_project_id
+ FROM project_group_list
+ WHERE group_id=$group_id)
+ AND user_id=$uid" ,
+ "UPDATE artifact_perm
+ SET perm_level=$defaultroles->{$rname}{'tracker'}
+ WHERE group_artifact_id IN (
+ SELECT group_artifact_id
+ FROM artifact_group_list
+ WHERE group_id=$group_id)
+ AND user_id=$uid" ,
+ ) ;
+ foreach my $query3 (@reqlist3) {
+ # &debug ($query3) ;
+ my $sth3 = $dbh->prepare ($query3) ;
+ $sth3->execute () ;
+ $sth3->finish () ;
+ }
+ }
+ $sth2->finish () ;
+ }
+ $sth->finish () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "3.3.0-2+4" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20040914.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20040826.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20040914.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
}
$version = &get_db_version ;
- $target = "3.3.0-2+1" ;
+ $target = "3.3.0-2+4+1" ;
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with migrateforum.php") ;
- system("/usr/lib/gforge/db/20040826_migrateforum.php -d include_path=/usr/share/gforge/:/usr/share/gforge/www/include") == 0
- or die "system call of 20040826_migrateforum.php failed: $?" ;
+ &debug ("Upgrading with 20041001.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20041001.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
&update_db_version ($target) ;
&debug ("Committing.") ;
$dbh->commit () ;
}
$version = &get_db_version ;
- $target = "3.3.0-2+2" ;
+ $target = "3.3.0-2+5" ;
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with migraterbac.php") ;
- system("/usr/lib/gforge/db/20040826_migraterbac.php -d include_path=/usr/share/gforge/:/usr/share/gforge/www/include") == 0
- or die "system call of 20040826_migraterbac.php failed: $?" ;
+ &debug ("Upgrading with 20041005.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20041005.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
&update_db_version ($target) ;
&debug ("Committing.") ;
$dbh->commit () ;
}
$version = &get_db_version ;
- $target = "3.3.0-2+3" ;
+ $target = "3.3.0-2+6" ;
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with 20041001.sql") ;
+ &debug ("Upgrading with 20041006.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20041001.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20041006.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
}
$version = &get_db_version ;
- $target = "3.3.0-2+4" ;
+ $target = "3.3.0-3" ;
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with 20040914.sql") ;
+ &debug ("Upgrading with 20041014.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20040914.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20041014.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
}
$version = &get_db_version ;
- $target = "3.3.0-2+5" ;
+ $target = "3.3.0-4" ;
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with 20041005.sql") ;
+ &debug ("Upgrading with 20041020.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20041005.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20041020.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
}
$version = &get_db_version ;
- $target = "3.3.0-2+6" ;
+ $target = "4.0.0-0" ;
+ # This is an exception, I reapply a modified version of 20040729.sql since it was doing nothing
+ # the other call was deleted from this file
if (&is_lesser ($version, $target)) {
- &debug ("Upgrading with 20041006.sql") ;
+ &debug ("Upgrading with 20040729.sql") ;
- @reqlist = @{ &parse_sql_file ("/usr/lib/gforge/db/20041006.sql") } ;
+ @reqlist = @{ &parse_sql_file ("$sqldir/20040729.sql") } ;
foreach my $s (@reqlist) {
$query = $s ;
# debug $query ;
$dbh->commit () ;
}
+ $version = &get_db_version ;
+ $target = "4.0.0-0+1" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Granting read access permissions to NSS") ;
- &debug ("It seems your database $action went well and smoothly. That's cool.") ;
- &debug ("Please enjoy using Gforge.") ;
+ @reqlist = ( "GRANT SELECT ON nss_passwd TO gforge_nss",
+ "GRANT SELECT ON nss_groups TO gforge_nss",
+ "GRANT SELECT ON nss_usergroups TO gforge_nss",
+ ) ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
- # There should be a commit at the end of every block above.
- # If there is not, then it might be symptomatic of a problem.
- # For safety, we roll back.
- $dbh->rollback ();
-};
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
-if ($@) {
- warn "Transaction aborted because $@" ;
- &debug ("Transaction aborted because $@") ;
- &debug ("Last SQL query was:\n$query\n(end of query)") ;
- $dbh->rollback ;
- my $version = &get_db_version ;
- if ($version) {
- &debug ("Your database schema is at version $version") ;
- } else {
- &debug ("Couldn't get your database schema version.") ;
+ $version = &get_db_version ;
+ $target = "4.0.0-0+2" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20041031.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20041031.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &debug ("Granting read access permissions to NSS") ;
+
+ @reqlist = ( "GRANT SELECT ON mta_users TO gforge_mta",
+ "GRANT SELECT ON mta_lists TO gforge_mta",
+ ) ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
}
- &debug ("Please report this bug on the Debian bug-tracking system.") ;
- &debug ("Please include the previous messages as well to help debugging.") ;
- &debug ("You should not worry too much about this,") ;
- &debug ("your DB is still in a consistent state and should be usable.") ;
- exit 1 ;
-}
-$dbh->rollback ;
-$dbh->disconnect ;
+ $version = &get_db_version ;
+ $target = "4.0.0-0+3" ;
+ # This is an exception, I reapply a modified version of 20040729.sql since it was doing nothing
+ # the other call was deleted from this file
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20041104.sql") ;
-sub get_pg_version () {
- my $command = q(dpkg -s postgresql | awk '/^Version: / { print $2 }') ;
- my $version = qx($command) ;
- chomp $version ;
- return $version ;
-}
+ @reqlist = @{ &parse_sql_file ("$sqldir/20041104.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
-sub create_metadata_table ( $ ) {
- my $v = shift || "2.5-7+just+before+8" ;
- # Do we have the metadata table?
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
- $query = "SELECT count(*) FROM pg_class WHERE relname = 'debian_meta_data' and relkind = 'r'";
- # debug $query ;
- my $sth = $dbh->prepare ($query) ;
- $sth->execute () ;
- my @array = $sth->fetchrow_array () ;
- $sth->finish () ;
+ $version = &get_db_version ;
+ $target = "4.0.0-0+4" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20041108.sql") ;
- # Let's create this table if we have it not
+ @reqlist = @{ &parse_sql_file ("$sqldir/20041108.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
- if ($array [0] == 0) {
- &debug ("Creating debian_meta_data table.") ;
- $query = "CREATE TABLE debian_meta_data (key varchar primary key, value text not null)" ;
- # debug $query ;
- $sth = $dbh->prepare ($query) ;
- $sth->execute () ;
- $sth->finish () ;
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
}
- $query = "SELECT count(*) FROM debian_meta_data WHERE key = 'db-version'";
- # debug $query ;
- $sth = $dbh->prepare ($query) ;
- $sth->execute () ;
- @array = $sth->fetchrow_array () ;
- $sth->finish () ;
+ $version = &get_db_version ;
+ $target = "4.0.2-0+0" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20041124.sql") ;
- # Empty table? We'll have to fill it up a bit
+ @reqlist = @{ &parse_sql_file ("$sqldir/20041124.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
- if ($array [0] == 0) {
- &debug ("Inserting first data into debian_meta_data table.") ;
- $query = "INSERT INTO debian_meta_data (key, value) VALUES ('db-version', '$v')" ;
- # debug $query ;
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.0.2-0+1" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Creating automatic commit notification mailing-lists") ;
+
+
+ $query = "SELECT group_id, unix_group_name FROM groups WHERE status='A' ORDER BY group_id" ;
+ # &debug ($query) ;
$sth = $dbh->prepare ($query) ;
$sth->execute () ;
+ while (@array = $sth->fetchrow_array) {
+ my $group_id = $array[0] ;
+ my $group_name = $array[1] ;
+
+ my $query2 = "SELECT count(*) FROM mail_group_list
+ WHERE group_id = $group_id
+ AND list_name = '".$group_name."-commits'" ;
+ # &debug ($query2) ;
+ my $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ my @array2 = $sth2->fetchrow_array ;
+ $sth2->finish () ;
+ if ($array2[0] == 0) {
+ my $listname = $group_name."-commits" ;
+ my $listpw = substr (Digest::MD5::md5_base64 ($listname . rand(1)), 0, 16) ;
+
+
+ $query2 = "SELECT user_id FROM user_group
+ WHERE admin_flags = 'A'
+ AND group_id = $group_id" ;
+ # &debug ($query2) ;
+ $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ my $group_admin = -1 ;
+ if (@array2 = $sth2->fetchrow_array) {
+ $group_admin = $array2[0] ;
+ }
+ $sth2->finish () ;
+
+ $query2 = "INSERT INTO mail_group_list (group_id, list_name, is_public, password, list_admin, status, description)
+ VALUES ($group_id, '$listname', 1, '$listpw', $group_admin, 1, 'commits')" ;
+ # &debug ($query2) ;
+ $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ $sth2->finish () ;
+ }
+ }
$sth->finish () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
}
-}
-sub update_db_version ( $ ) {
- my $v = shift or die "Not enough arguments" ;
+# $version = &get_db_version ;
+# $target = "4.0.2-0+2" ;
+# if (&is_lesser ($version, $target)) {
+# &debug ("Upgrading with 20041222-debian.sql") ;
+#
+# @reqlist = @{ &parse_sql_file ("$sqldir/20041222-debian.sql") } ;
+# foreach my $s (@reqlist) {
+# $query = $s ;
+# # debug $query ;
+# $sth = $dbh->prepare ($query) ;
+# $sth->execute () ;
+# $sth->finish () ;
+# }
+# @reqlist = () ;
+#
+# &update_db_version ($target) ;
+# &debug ("Committing.") ;
+# $dbh->commit () ;
+# }
- &debug ("Updating debian_meta_data table.") ;
- $query = "UPDATE debian_meta_data SET value = '$v' WHERE key = 'db-version'" ;
- # debug $query ;
- my $sth = $dbh->prepare ($query) ;
+ $version = &get_db_version ;
+ $target = "4.0.2-0+3" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20050115.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20050115.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+#
+# We got this at upgrade
+#
+#DBD::Pg::st execute failed: ERREUR: la relation avec l'OID 387345 n'existe pas at /usr/share/gforge/bin/db-upgrade.pl line 1970.
+#Transaction aborted because DBD::Pg::st execute failed: ERREUR: la relation avec l'OID 387345 n'existe pas at /usr/share/gforge/bin/db-upgrade.pl line 1970.
+#Transaction aborted because DBD::Pg::st execute failed: ERREUR: la relation avec l'OID 387345 n'existe pas at /usr/share/gforge/bin/db-upgrade.pl line 1970.
+#Last SQL query was:
+#update project_task SET last_modified_date=EXTRACT(EPOCH FROM now())::integer;
+#(end of query)
+#Your database schema is at version 4.0.2-0+5
+#
+# This is a hack to disconnect and reconnect the DB and solve the problem
+#
+ $dbh->rollback ;
+ &db_disconnect ;
+ &db_connect ;
+
+ $dbh->{AutoCommit} = 0;
+ $dbh->{RaiseError} = 1;
+
+ $version = &get_db_version ;
+ $target = "4.0.2-0+5" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20050130.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20050130.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.0.2-0+6" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20050212.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20050212.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.0.2-0+7" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20050214-nss.sql valantine") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20050214-nss.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.1-0" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20050224-2.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20050224-2.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.1-1" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20050225-nsssetup.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20050225-nsssetup.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.1-2" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20050311.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20050311.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.1-3" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20050315.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20050315.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.1-4" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20050325-2.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20050325-2.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.1-5" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Converting trackers to use their extra fields") ;
+
+ $query = "SELECT group_id,group_artifact_id,use_resolution FROM artifact_group_list" ;
+ # &debug ($query) ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ while (@array = $sth->fetchrow_array) {
+ my $group_id = $array[0] ;
+ my $gaid = $array[1] ;
+ my $ur = $array[2] ;
+
+ # Ajout du champ Category
+ my $query2 = "SELECT nextval('artifact_extra_field_list_extra_field_id_seq'::text)" ;
+ # &debug ($query2) ;
+ my $sth2 = $dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ my @array2 = $sth2->fetchrow_array ;
+ $sth2->finish () ;
+ my $aefid = $array2[0] ;
+
+ $query2 = "INSERT INTO artifact_extra_field_list (extra_field_id, group_artifact_id,field_name,field_type)
+ VALUES ($aefid, $gaid, 'Category', 1)" ;
+ # &debug ($query2) ;
+ $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+
+ $query2 = "SELECT id, category_name FROM artifact_category WHERE group_artifact_id=$gaid" ;
+ # &debug ($query2) ;
+ $sth2 = $dbh->prepare ($query2) ;
+ $sth2->execute () ;
+
+ while (@array2 = $sth2->fetchrow_array) {
+ my $cat_id = $array2[0] ;
+ my $catname = $array2[1] ;
+
+ if ($catname eq '') { $catname = '[empty]' ; }
+
+ my $query3 = "SELECT nextval('artifact_extra_field_elements_element_id_seq'::text)" ;
+ # &debug ($query3) ;
+ my $sth3 = $dbh->prepare ($query3) ;
+ $sth3->execute () ;
+ my @array3 = $sth3->fetchrow_array ;
+ $sth3->finish () ;
+ my $efeid = $array3[0] ;
+
+ $query3 = "INSERT INTO artifact_extra_field_elements (element_id, extra_field_id, element_name, status_id)
+ VALUES ($efeid, $aefid, ?, 0)" ;
+ # &debug ($query3) ;
+ $sth3 =$dbh->prepare ($query3) ;
+ $sth3->execute ($catname) ;
+ $sth3->finish () ;
+
+ $query3 = "INSERT INTO artifact_extra_field_data (artifact_id,field_data,extra_field_id)
+ SELECT artifact_id,$efeid,$aefid FROM artifact
+ WHERE category_id=$cat_id" ;
+ # &debug ($query3) ;
+ $sth3 =$dbh->prepare ($query3) ;
+ $sth3->execute () ;
+ $sth3->finish () ;
+
+ $query3 = "UPDATE artifact_history SET old_value=?,field_name='Category'
+ WHERE old_value='$cat_id' AND field_name='category_id'" ;
+ # &debug ($query3) ;
+ $sth3 =$dbh->prepare ($query3) ;
+ $sth3->execute ($catname) ;
+ $sth3->finish () ;
+ }
+ $sth2->finish () ;
+
+ # Ajout du champ Group
+ $query2 = "SELECT nextval('artifact_extra_field_list_extra_field_id_seq'::text)" ;
+ # &debug ($query2) ;
+ $sth2 = $dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ @array2 = $sth2->fetchrow_array ;
+ $sth2->finish () ;
+ $aefid = $array2[0] ;
+
+ $query2 = "INSERT INTO artifact_extra_field_list (extra_field_id, group_artifact_id,field_name,field_type)
+ VALUES ($aefid, $gaid, 'Group', 1)" ;
+ # &debug ($query2) ;
+ $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+
+ $query2 = "SELECT id, group_name FROM artifact_group WHERE group_artifact_id=$gaid" ;
+ # &debug ($query2) ;
+ $sth2 = $dbh->prepare ($query2) ;
+ $sth2->execute () ;
+
+ while (@array2 = $sth2->fetchrow_array) {
+ my $grp_id = $array2[0] ;
+ my $grpname = $array2[1] ;
+
+ if ($grpname eq '') { $grpname = '[empty]' ; }
+
+ my $query3 = "SELECT nextval('artifact_extra_field_elements_element_id_seq'::text)" ;
+ # &debug ($query3) ;
+ my $sth3 = $dbh->prepare ($query3) ;
+ $sth3->execute () ;
+ my @array3 = $sth3->fetchrow_array ;
+ $sth3->finish () ;
+ my $efeid = $array3[0] ;
+
+ $query3 = "INSERT INTO artifact_extra_field_elements (element_id, extra_field_id, element_name, status_id)
+ VALUES ($efeid, $aefid, ?, 0)" ;
+ # &debug ($query3) ;
+ $sth3 =$dbh->prepare ($query3) ;
+ $sth3->execute ($grpname) ;
+ $sth3->finish () ;
+
+ $query3 = "INSERT INTO artifact_extra_field_data (artifact_id,field_data,extra_field_id)
+ SELECT artifact_id,$efeid,$aefid FROM artifact
+ WHERE artifact_group_id=$grp_id" ;
+ # &debug ($query3) ;
+ $sth3 =$dbh->prepare ($query3) ;
+ $sth3->execute () ;
+ $sth3->finish () ;
+
+ $query3 = "UPDATE artifact_history SET old_value=?,field_name='Group'
+ WHERE old_value='$grp_id' AND field_name='artifact_group_id'" ;
+ # &debug ($query3) ;
+ $sth3 =$dbh->prepare ($query3) ;
+ $sth3->execute ($grpname) ;
+ $sth3->finish () ;
+ }
+ $sth2->finish () ;
+
+ # Ajout du champ Resolution (s'il existe, cf. $ur)
+ if ($ur) {
+ $query2 = "SELECT nextval('artifact_extra_field_list_extra_field_id_seq'::text)" ;
+ # &debug ($query2) ;
+ $sth2 = $dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ @array2 = $sth2->fetchrow_array ;
+ $sth2->finish () ;
+ $aefid = $array2[0] ;
+
+ $query2 = "INSERT INTO artifact_extra_field_list (extra_field_id, group_artifact_id,field_name,field_type)
+ VALUES ($aefid, $gaid, 'Resolution', 1)" ;
+ # &debug ($query2) ;
+ $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+
+ $query2 = "SELECT id, resolution_name FROM artifact_resolution" ;
+ # &debug ($query2) ;
+ $sth2 = $dbh->prepare ($query2) ;
+ $sth2->execute () ;
+
+ while (@array2 = $sth2->fetchrow_array) {
+ my $res_id = $array2[0] ;
+ my $resname = $array2[1] ;
+
+ if ($resname eq '') { $resname = '[empty]' ; }
+
+ my $query3 = "SELECT nextval('artifact_extra_field_elements_element_id_seq'::text)" ;
+ # &debug ($query3) ;
+ my $sth3 = $dbh->prepare ($query3) ;
+ $sth3->execute () ;
+ my @array3 = $sth3->fetchrow_array ;
+ $sth3->finish () ;
+ my $efeid = $array3[0] ;
+
+ $query3 = "INSERT INTO artifact_extra_field_elements (element_id, extra_field_id, element_name, status_id)
+ VALUES ($efeid, $aefid, ?, 0)" ;
+ # &debug ($query3) ;
+ $sth3 =$dbh->prepare ($query3) ;
+ $sth3->execute ($resname) ;
+ $sth3->finish () ;
+
+ $query3 = "INSERT INTO artifact_extra_field_data (artifact_id,field_data,extra_field_id)
+ SELECT artifact_id,$efeid,$aefid FROM artifact
+ WHERE resolution_id=$res_id and group_artifact_id=$gaid" ;
+ # &debug ($query3) ;
+ $sth3 =$dbh->prepare ($query3) ;
+ $sth3->execute () ;
+ $sth3->finish () ;
+
+ $query3 = "UPDATE artifact_history SET old_value=?,field_name='Resolution'
+ WHERE old_value='$res_id' AND field_name='resolution_id'" ;
+ # &debug ($query3) ;
+ $sth3 =$dbh->prepare ($query3) ;
+ $sth3->execute ($resname) ;
+ $sth3->finish () ;
+ }
+ $sth2->finish () ;
+ }
+ }
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.1-6" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20050325-5.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20050325-5.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.1-7" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20050605.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20050605.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.1-8" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Creating aliases for the extra fields") ;
+
+ $query = "ALTER TABLE artifact_extra_field_list ADD COLUMN alias TEXT" ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+
+ my %reserved_alias = (
+ "project" => 1,
+ "type" => 1,
+ "priority" => 1,
+ "assigned_to" => 1,
+ "summary" => 1,
+ "details" => 1,
+ ) ;
+
+ $query = "SELECT field_name, alias, group_artifact_id, extra_field_id FROM artifact_extra_field_list" ;
+ # &debug ($query) ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ while (@array = $sth->fetchrow_array) {
+ my $name = $array[0] ;
+ my $alias = $array[1] ;
+ my $gaid = $array[2] ;
+ my $efid = $array[3] ;
+
+ if (! $alias) {
+ my $newalias = lc $name ;
+ $newalias =~ s/\s/_/g ;
+ $newalias =~ s/[^_a-z]//g ;
+
+ if ($newalias ne "") {
+ if ($reserved_alias{$newalias}) {
+ $newalias = "extra_" . $newalias ;
+ }
+
+ my $candidate ;
+ my $conflict = 0 ;
+ my $count = 0 ;
+ do {
+ $candidate = $newalias ;
+ $candidate .= $count if ($count > 0) ;
+ my $query2 = "SELECT count(*) FROM artifact_extra_field_list WHERE group_artifact_id=$gaid AND LOWER(alias)='$candidate' AND extra_field_id <> $efid" ;
+ # &debug ($query2) ;
+ my $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ my @array2 = $sth2->fetchrow_array ;
+ if ($array2[0] == 0) {
+ $conflict = 0 ;
+ } else {
+ $conflict = 1 ;
+ $count++ ;
+ }
+ $sth2->finish () ;
+ } until ($conflict == 0) ;
+
+ my $query2 = "UPDATE artifact_extra_field_list SET alias='$candidate' WHERE extra_field_id=$efid" ;
+ # &debug ($query2) ;
+ my $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ $sth2->finish () ;
+ }
+ }
+
+ }
+ $sth->finish () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.1-9" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20050628.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20050628.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.5-1" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with 20050711.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/20050711.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ &update_with_sql("20050906","4.5-2");
+ # 20051027-1 was renamed 20050804-1
+ #&update_with_sql("20051027-1","4.5-3");
+ &update_with_sql("20050804-1","4.5-3");
+
+ $version = &get_db_version ;
+ $target = "4.5-4" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Updating document sizes") ;
+
+ $query = "SELECT docid, data FROM doc_data" ;
+ # &debug ($query) ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ while (@array = $sth->fetchrow_array) {
+ my $docid = $array[0] ;
+ my $b64data = $array[1] ;
+ my $data = decode_base64 ($b64data) ;
+ my $size = length ($data) ;
+
+ my $query2 = "UPDATE doc_data SET filesize=$size WHERE docid=$docid" ;
+ # &debug ($query2) ;
+ my $sth2 =$dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ $sth2->finish () ;
+ }
+ $sth->finish () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.5.14-3" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Setting up time tracking") ;
+
+ if (&table_exists ($dbh, "rep_time_category")) {
+ &debug ("...already set up.") ;
+ } else {
+ &drop_table_if_exists ($dbh, "rep_time_category") ;
+ &drop_sequence_if_exists ($dbh, "rep_time_category_time_code_seq") ;
+ &drop_table_if_exists ($dbh, "rep_time_tracking") ;
+ &drop_table_if_exists ($dbh, "rep_users_added_daily") ;
+ &drop_table_if_exists ($dbh, "rep_users_added_weekly") ;
+ &drop_table_if_exists ($dbh, "rep_users_added_monthly") ;
+ &drop_table_if_exists ($dbh, "rep_users_cum_daily") ;
+ &drop_table_if_exists ($dbh, "rep_users_cum_weekly") ;
+ &drop_table_if_exists ($dbh, "rep_users_cum_monthly") ;
+ &drop_table_if_exists ($dbh, "rep_groups_added_daily") ;
+ &drop_table_if_exists ($dbh, "rep_groups_added_weekly") ;
+ &drop_table_if_exists ($dbh, "rep_groups_added_monthly") ;
+ &drop_table_if_exists ($dbh, "rep_groups_cum_daily") ;
+ &drop_table_if_exists ($dbh, "rep_groups_cum_weekly") ;
+ &drop_table_if_exists ($dbh, "rep_groups_cum_monthly") ;
+ &drop_view_if_exists ($dbh, "rep_group_act_oa_vw") ;
+ &drop_view_if_exists ($dbh, "rep_user_act_oa_vw") ;
+ &drop_view_if_exists ($dbh, "rep_site_act_daily_vw") ;
+ &drop_view_if_exists ($dbh, "rep_site_act_weekly_vw") ;
+ &drop_view_if_exists ($dbh, "rep_site_act_monthly_vw") ;
+ &drop_table_if_exists ($dbh, "rep_user_act_daily") ;
+ &drop_table_if_exists ($dbh, "rep_user_act_weekly") ;
+ &drop_table_if_exists ($dbh, "rep_user_act_monthly") ;
+ &drop_table_if_exists ($dbh, "rep_group_act_daily") ;
+ &drop_index_if_exists ($dbh, "repgroupactdaily_daily") ;
+ &drop_table_if_exists ($dbh, "rep_group_act_weekly") ;
+ &drop_index_if_exists ($dbh, "repgroupactweekly_weekly") ;
+ &drop_table_if_exists ($dbh, "rep_group_act_monthly") ;
+ &drop_index_if_exists ($dbh, "repgroupactmonthly_monthly") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/timetracking-init.sql") } ;
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+ }
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ # I had to increase versions from 4.5.14 to 4.5.15
+ # The activity view is created by 20060216-nocommit
+ # If the view doesn't exists apply
+ if (! &view_exists ($dbh, 'activity_vw')) {
+ &update_with_sql("20050812","4.5.15-10merge");
+ &update_with_sql("20050822-2","4.5.15-11merge");
+ &update_with_sql("20050823","4.5.15-12merge");
+ &update_with_sql("20050824","4.5.15-13merge");
+ &update_with_sql("20050831","4.5.15-14merge");
+
+ &update_with_sql("20060113","4.5.15-15");
+ &update_with_sql("20060214","4.5.15-16");
+ &update_with_sql("20060216-2-debian-nocommit","4.5.15-17");
+ }
+
+ $version = &get_db_version ;
+ $target = "4.5.15-21" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Fixing past mistakes in role naming") ;
+
+ my $defaultroles_restricted = {
+ 'Admin' => { 'projectadmin'=>'A', 'frs'=>'1', 'scm'=>'1', 'docman'=>'1', 'forumadmin'=>'2', 'trackeradmin'=>'2', 'pmadmin'=>'2' },
+ 'Senior Developer' => { 'projectadmin'=>'0', 'frs'=>'1', 'scm'=>'1', 'docman'=>'1', 'forumadmin'=>'2', 'trackeradmin'=>'2', 'pmadmin'=>'2' },
+ 'Junior Developer' => { 'projectadmin'=>'0', 'frs'=>'0', 'scm'=>'1', 'docman'=>'0', 'forumadmin'=>'0', 'trackeradmin'=>'0', 'pmadmin'=>'0' },
+ 'Doc Writer' => { 'projectadmin'=>'0', 'frs'=>'0', 'scm'=>'0', 'docman'=>'1', 'forumadmin'=>'0', 'trackeradmin'=>'0', 'pmadmin'=>'0' },
+ 'Support Tech' => { 'projectadmin'=>'0', 'frs'=>'0', 'scm'=>'0', 'docman'=>'1', 'forumadmin'=>'0', 'trackeradmin'=>'0', 'pmadmin'=>'0' }
+ } ;
+
+ foreach my $drname (keys %{$defaultroles_restricted}) {
+ $query = "UPDATE role SET role_name='$drname' WHERE role_id IN (SELECT role.role_id" ;
+ my $from = "" ;
+ my $where = "" ;
+ my $setting = "" ;
+ my $value = 0 ;
+ foreach my $setting (keys %{$defaultroles_restricted->{$drname}}) {
+ $value = $defaultroles_restricted->{$drname}->{$setting} ;
+ $from .= ", role_setting rs_$setting" ;
+ $where .= "role.role_id = rs_$setting.role_id AND rs_$setting.section_name='$setting' AND " ;
+ $where .= "rs_$setting.value = '$value' \nAND " ;
+ }
+ $query .= "\nFROM role$from" ;
+ $query .= "\nWHERE $where role.role_name='rname')";
+ push @reqlist, $query;
+ }
+
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ &update_with_sql("20051103_transiciel_motscle_document","4.6-1");
+
+ &update_with_sql("20070924-forum-perm","4.6.99-1");
+ &update_with_sql("20070924-project-perm","4.6.99-2");
+ &update_with_sql("20070924-artifact-perm","4.6.99-3");
+
+ $version = &get_db_version ;
+ $target = "4.6.99-4" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Dropping old translations table") ;
+
+ &drop_table_if_exists ($dbh, "tmp_lang") ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.6.99-5" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Updating available themes") ;
+
+ my @obsolete_themes = qw/ classic debian savannah
+ savannah_codex savannah_forest
+ savannah_reverse savannah_sad
+ savannah_savannah savannah_slashd
+ savannah_startrek
+ savannah_transparent savannah_water
+ savannah_www.gnu.org
+ savannah_darkslate forged kde
+ darkaqua / ;
+
+ my $otids = join (',', map { "'$_'" } @obsolete_themes) ;
+
+ $query = "UPDATE users SET theme_id=1 WHERE theme_id IN
+ (SELECT theme_id FROM themes WHERE dirname IN ($otids))" ;
+ push @reqlist, $query;
+
+ $query = "DELETE FROM themes WHERE dirname IN ($otids)" ;
+ push @reqlist, $query;
+
+ my %new_themes = (
+ 'gforge-classic' => 'GForge classic',
+ 'gforge-simple-theme' => 'GForge simple',
+ 'lite' => 'GForge lite'
+ ) ;
+
+ foreach my $dir (sort keys %new_themes) {
+ $query = "INSERT INTO themes (dirname, fullname) VALUES ('$dir', '$new_themes{$dir}')" ;
+ push @reqlist, $query;
+ }
+
+ foreach my $s (@reqlist) {
+ $query = $s ;
+ # &debug ($query) ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ $version = &get_db_version ;
+ $target = "4.6.99-6" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("DROP UNIQUE INDEX never UNIQUE") ;
+ &drop_index_if_exists ($dbh, "statsaggsitebygrp_oid") ;
+ &drop_index_if_exists ($dbh, "statsprojectmetric_oid") ;
+ &drop_index_if_exists ($dbh, "statsagglogobygrp_oid") ;
+ &drop_index_if_exists ($dbh, "statsprojectdevelop_oid") ;
+ &drop_index_if_exists ($dbh, "statssubdpages_oid") ;
+ &drop_index_if_exists ($dbh, "statscvsgrp_oid") ;
+ &drop_index_if_exists ($dbh, "statsproject_oid") ;
+ &drop_index_if_exists ($dbh, "statssite_oid") ;
+ &drop_index_if_exists ($dbh, "statssitepgsbyday_oid") ;
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ &update_with_sql("20090327_create_table_project_tags","4.6.99-7");
+ &update_with_sql("20090402-add-projecttags-constraints","4.7.99-1");
+ &update_with_sql("20090402-forum-attachment-types","4.7.99-2");
+
+ &update_with_sql("20090507-add_artifact_workflow","4.8.99-1");
+ &update_with_sql("20090507-add_element_pos","4.8.99-2");
+ &update_with_sql("20090507-add_project_query","4.8.99-3");
+ &update_with_sql("20090507-browse_list","4.8.99-4");
+
+ $version = &get_db_version ;
+ $target = "4.8.99-5" ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Initialising tracker workflows") ;
+
+
+ $query = "SELECT group_id, artifact_group_list.group_artifact_id, element_id, artifact_extra_field_elements.extra_field_id
+ FROM artifact_extra_field_list, artifact_extra_field_elements, artifact_group_list
+ WHERE artifact_extra_field_list.extra_field_id=artifact_extra_field_elements.extra_field_id
+ AND artifact_group_list.group_artifact_id = artifact_extra_field_list.group_artifact_id
+ AND field_type=7" ;
+ # &debug ($query) ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ while (@array = $sth->fetchrow_array) {
+ my $gid = $array[0];
+ my $gaid = $array[1];
+ my $eid = $array[2];
+
+ my $query2 = "SELECT extra_field_id
+ FROM artifact_extra_field_list
+ WHERE group_artifact_id=$gaid
+ AND field_type = 7
+ ORDER BY field_type ASC" ;
+ my $sth2 = $dbh->prepare ($query2) ;
+ $sth2->execute () ;
+
+ if (my @array2 = $sth2->fetchrow_array) {
+ my $efid = $array2[0];
+ $sth2->finish () ;
+
+ $query2 = "SELECT element_id,element_name,status_id
+ FROM artifact_extra_field_elements
+ WHERE extra_field_id = $efid
+ ORDER BY element_pos ASC, element_id ASC" ;
+ # debug $query2;
+ $sth2 = $dbh->prepare ($query2) ;
+ $sth2->execute () ;
+ while (@array2 = $sth2->fetchrow_array) {
+ my $eid2 = $array2[0];
+ if ($eid2 != $eid) {
+ my $query3 = "INSERT INTO artifact_workflow_event
+ (group_artifact_id, field_id, from_value_id, to_value_id)
+ VALUES ($gaid, $efid, $eid, $eid2)";
+ # debug $query3;
+ my $sth3 = $dbh->prepare ($query3) ;
+ $sth3->execute () ;
+ $sth3->finish () ;
+ $query3 = "INSERT INTO artifact_workflow_event
+ (group_artifact_id, field_id, from_value_id, to_value_id)
+ VALUES ($gaid, $efid, $eid2, $eid)";
+ # debug $query3;
+ $sth3 = $dbh->prepare ($query3) ;
+ $sth3->execute () ;
+ $sth3->finish () ;
+ }
+ }
+ $sth2->finish () ;
+ my $query3 = "INSERT INTO artifact_workflow_event
+ (group_artifact_id, field_id, from_value_id, to_value_id)
+ VALUES ($gaid, $efid, 100, $eid)";
+ # debug $query3;
+ my $sth3 = $dbh->prepare ($query3) ;
+ $sth3->execute () ;
+ $sth3->finish () ;
+ }
+ }
+ $sth->finish () ;
+
+ @reqlist = () ;
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+
+ &update_with_sql("20100308-forum-attachment-types","4.8.99-6");
+
+ &update_with_sql("20100330-add-system-event","5.0.0-1");
+ &update_with_sql("20100331-alter-system-event","5.0.0-2");
+
+ ########################### INSERT HERE #################################
+
+ &debug ("It seems your database $action went well and smoothly. That's cool.") ;
+ &debug ("Please enjoy using FusionForge.") ;
+
+ # There should be a commit at the end of every block above.
+ # If there is not, then it might be symptomatic of a problem.
+ # For safety, we roll back.
+ $dbh->rollback ();
+};
+
+if ($@) {
+ warn "Transaction aborted because $@" ;
+ &debug ("Transaction aborted because $@") ;
+ &debug ("Last SQL query was:\n$query\n(end of query)") ;
+ $dbh->rollback ;
+ my $version = &get_db_version ;
+ if ($version) {
+ &debug ("Your database schema is at version $version") ;
+ } else {
+ &debug ("Couldn't get your database schema version.") ;
+ }
+ &debug ("Please report this bug on the Debian bug-tracking system.") ;
+ &debug ("Please include the previous messages as well to help debugging.") ;
+ &debug ("You should not worry too much about this,") ;
+ &debug ("your DB is still in a consistent state and should be usable.") ;
+ exit 1 ;
+}
+
+$dbh->rollback ;
+&db_disconnect ;
+
+sub get_pg_version () {
+ my $command;
+ if (-x '/usr/bin/pg_lsclusters' ) {
+ $command = q(/usr/bin/pg_lsclusters | grep 5432 | grep online | cut -d' ' -f1) ;
+ } else {
+ $command = q(dpkg -s postgresql | awk '/^Version: / { print $2 }') ;
+ }
+ my $version = qx($command) ;
+ chomp $version ;
+ return $version ;
+}
+
+sub create_metadata_table ( $ ) {
+ my $v = shift || "2.5-7+just+before+8" ;
+
+ my ($query, $sth, @array) ;
+
+ # Let's create this table if we have it not
+ if (! &table_exists ($dbh, 'debian_meta_data')) {
+ &debug ("Creating debian_meta_data table.") ;
+ $query = "CREATE TABLE debian_meta_data (key varchar primary key, value text not null)" ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+
+ $query = "SELECT count(*) FROM debian_meta_data WHERE key = 'db-version'";
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ @array = $sth->fetchrow_array () ;
+ $sth->finish () ;
+
+ # Empty table? We'll have to fill it up a bit
+
+ if ($array [0] == 0) {
+ &debug ("Inserting first data into debian_meta_data table.") ;
+ $query = "INSERT INTO debian_meta_data (key, value) VALUES ('db-version', '$v')" ;
+ # debug $query ;
+ $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+}
+
+sub update_db_version ( $ ) {
+ my $v = shift or die "Not enough arguments" ;
+
+ &debug ("Updating debian_meta_data table.") ;
+ $query = "UPDATE debian_meta_data SET value = '$v' WHERE key = 'db-version'" ;
+ # debug $query ;
+ my $sth = $dbh->prepare ($query) ;
$sth->execute () ;
$sth->finish () ;
}
return $version ;
}
+
+sub update_with_sql ( $ ) {
+ my $sqldate = shift or die "Not enough arguments" ;
+ my $target = shift or die "Not enough arguments" ;
+ my $version = &get_db_version ;
+ if (&is_lesser ($version, $target)) {
+ &debug ("Upgrading with $sqldate.sql") ;
+
+ @reqlist = @{ &parse_sql_file ("$sqldir/$sqldate.sql") } ;
+ foreach my $s (@reqlist) {
+ my $query = $s ;
+ # debug $query ;
+ my $sth = $dbh->prepare ($query) ;
+ $sth->execute () ;
+ $sth->finish () ;
+ }
+ @reqlist = () ;
+
+ &update_db_version ($target) ;
+ &debug ("Committing.") ;
+ $dbh->commit () ;
+ }
+}