blob: 002e2252fde41773cd9224b10098343261675f98 [file] [log] [blame]
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# Copyright (c) 2012 Frank Becker and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# Frank Becker - initial API and implementation
#
package Bugzilla::Extension::Mylyn;
use strict;
use base qw(Bugzilla::Extension);
use constant MORE_SUB_CLASSES => qw(
Bugzilla::Extension::Mylyn::Gerrit
Bugzilla::Extension::Mylyn::Git
);
# This code for this is in ./extensions/Mylyn/lib/Util.pm
use Bugzilla::Extension::Mylyn::Util;
use Bugzilla::Constants;
use Bugzilla::Error;
use Bugzilla::Product;
use Bugzilla::FlagType;
use Data::Dumper;
our $VERSION = '0.01';
<% if @custom_wf %>
use constant STATUS_WORKFLOW => (
['IN_PROGRESS','UNCONFIRMED'],
['CONFIRMED','VERIFIED'],
);
use constant STATUS_WORKFLOW_DELETE => (
['IN_PROGRESS','CONFIRMED'],
);
<% end %>
<% if @custom_wf_and_status %>
use constant STATUS_WORKFLOW => (
['VERIFIED','MODIFIED'],
['ON_DEV','POST'],
['MODIFIED','ON_DEV'],
);
use constant STATUS_WORKFLOW_DELETE => (
['UNCONFIRMED','ASSIGNED'],
['RESOLVED','UNCONFIRMED'],
['VERIFIED','UNCONFIRMED'],
);
<% end %>
sub install_before_final_checks {
my ($self, $args) = @_;
print "Mylyn Extension: install-before_final_checks hook\n" unless $args->{silent};
my $dbh = Bugzilla->dbh;
if (!$dbh->selectrow_array('SELECT 1 FROM profiles where userid > 1')) {
print "create additional profiles...\n" unless $args->{silent};
# create tests@mylyn.eclipse.org
# add this user to group bz_canusewhineatothers
my $testu = Bugzilla::User->create({ login_name => 'tests@mylyn.eclipse.org',
<% if @envversionInternal >= "5.1" %>
email => 'tests@mylyn.eclipse.org',
<% end %>
realname => 'Mylyn Test',
cryptpassword => 'mylyntest' });
my $private_group = new Bugzilla::Group({name => 'bz_canusewhineatothers'});
my $sth = $dbh->prepare( "INSERT INTO user_group_map
(user_id, group_id, isbless, grant_type)
VALUES (?, ?, ?, ?)");
$sth->execute($testu->id, $private_group->id, 0, GRANT_DIRECT);
# create guest@mylyn.eclipse.org
Bugzilla::User->create({ login_name => 'guest@mylyn.eclipse.org',
<% if @envversionInternal >= "5.1" %>
email => 'guest@mylyn.eclipse.org',
<% end %>
realname => 'Mylyn guest',
cryptpassword => 'mylyntest' });
}
<% if @api_key_enabled %>
my ($testuser_id_admin) = $dbh->selectrow_array(
'SELECT userid FROM profiles WHERE login_name = ? ' ,
undef, 'admin@mylyn.eclipse.org');
my ($testuser_id_test) = $dbh->selectrow_array(
'SELECT userid FROM profiles WHERE login_name = ? ' ,
undef, 'tests@mylyn.eclipse.org');
if (!$dbh->selectrow_array('SELECT 1 FROM user_api_keys where user_id > 1')) {
my $sth = $dbh->prepare( "INSERT INTO user_api_keys
(user_id, api_key, description)
VALUES (?, ?, ?)");
$sth->execute($testuser_id_admin, 'XkjcuGGfDcoNx0U6uyMM8ZaNuBlEdjrmXd8In3no', 'Mylyn REST Connector Admin');
$sth->execute($testuser_id_test, 'wvkz2SoBMBQEKv6ishp1j7NY1R9l711g5w2afXc6', 'Mylyn REST Connector Test');
}
<% end %>
# create two new products
if (!$dbh->selectrow_array('SELECT 1 FROM products where id > 1')) {
print "create additional products...\n" unless $args->{silent};
# Get the user who will be the owner of the Component.
# We pick the tests@mylyn.eclipse.org, which is the
# user Extension.pl just created.
my ($testuser_id) = $dbh->selectrow_array(
'SELECT userid FROM profiles WHERE login_name = ? ' ,
undef, 'tests@mylyn.eclipse.org');
my $testuser = Bugzilla::User->new($testuser_id);
my $product2 = Bugzilla::Product->create({
name => 'Product with Spaces',
description => 'Product with Spaces is the renamed Scratch Product.',
version => Bugzilla::Version::DEFAULT_VERSION,
classification => 'Unclassified',
defaultmilestone => DEFAULT_MILESTONE,
});
Bugzilla::Component->create({ %{ ({
name => 'Component 1',
description => '1'
}) },
product => $product2,
initialowner => $testuser->login });
Bugzilla::Component->create({ %{ ({
name => 'Component 2',
description => '2'
}) },
product => $product2,
initialowner => $testuser->login });
Bugzilla::Version->create({ <%= @VersionCreateName %> => 'a', product => $product2 });
Bugzilla::Version->create({ <%= @VersionCreateName %> => 'b', product => $product2 });
Bugzilla::Version->create({ <%= @VersionCreateName %> => 'c', product => $product2 });
Bugzilla::Milestone->create({ <%= @VersionCreateName %> => 'M1.0', product => $product2 });
Bugzilla::Milestone->create({ <%= @VersionCreateName %> => 'M2.0', product => $product2 });
Bugzilla::Milestone->create({ <%= @VersionCreateName %> => 'M3.0', product => $product2 });
my $product3 = Bugzilla::Product->create({
name => 'ManualTest',
description => 'Product for manual testing',
version => Bugzilla::Version::DEFAULT_VERSION,
classification => 'Unclassified',
defaultmilestone => DEFAULT_MILESTONE,
allows_unconfirmed => 0,
});
Bugzilla::Component->create({ %{ ({
name => 'ManualC1',
description => '1'
}) },
product => $product3,
initialowner => $testuser->login });
Bugzilla::Component->create({ %{ ({
name => 'ManualC2',
description => '2'
}) },
product => $product3,
initialowner => $testuser->login });
Bugzilla::Version->create({ <%= @VersionCreateName %> => 'R1', product => $product3 });
Bugzilla::Version->create({ <%= @VersionCreateName %> => 'R1.1', product => $product3 });
Bugzilla::Version->create({ <%= @VersionCreateName %> => 'R2.0', product => $product3 });
Bugzilla::Milestone->create({ <%= @VersionCreateName %> => 'M1', product => $product3 });
Bugzilla::Milestone->create({ <%= @VersionCreateName %> => 'M2', product => $product3 });
Bugzilla::Milestone->create({ <%= @VersionCreateName %> => 'M3', product => $product3 });
}
# create the needed custon fields
if (!$dbh->selectrow_array('SELECT 1 FROM fielddefs where name like "cf_%"')) {
print "create additional fielddefs...\n" unless $args->{silent};
Bugzilla::Field->create({ %{ ({
description => 'free text custom field',
type => 1,
sortkey => 351,
mailhead => 1,
enter_bug => 1,
obsolete => 0,
buglist => 1,
}) },
name => 'cf_freetext', custom => 1
});
Bugzilla::Field->create({ %{ ({
description => 'drop down custom field',
type => 2,
sortkey => 451,
mailhead => 1,
enter_bug => 1,
obsolete => 0,
buglist => 1,
}) },
name => 'cf_dropdown', custom => 1
});
# create the options for cf_dropdown
Bugzilla::Field::Choice->type('cf_dropdown')->create({
value => 'one',
sortkey => 0,
is_open => 1,
});
Bugzilla::Field::Choice->type('cf_dropdown')->create({
value => 'two',
sortkey => 0,
is_open => 1,
});
Bugzilla::Field::Choice->type('cf_dropdown')->create({
value => 'three',
sortkey => 0,
is_open => 1,
});
Bugzilla::Field->create({ %{ ({
description => 'large text box custom field',
type => 4,
sortkey => 551,
mailhead => 1,
enter_bug => 1,
obsolete => 0,
buglist => 1,
}) },
name => 'cf_largetextbox', custom => 1
});
Bugzilla::Field->create({ %{ ({
description => 'multi selection box custom field',
type => 3,
sortkey => 651,
mailhead => 1,
enter_bug => 1,
obsolete => 0,
buglist => 1,
}) },
name => 'cf_multiselect', custom => 1
});
# create the options for cf_multiselect
Bugzilla::Field::Choice->type('cf_multiselect')->create({
value => 'Blue',
sortkey => 0,
is_open => 1,
});
Bugzilla::Field::Choice->type('cf_multiselect')->create({
value => 'Green',
sortkey => 0,
is_open => 1,
});
Bugzilla::Field::Choice->type('cf_multiselect')->create({
value => 'Red',
sortkey => 0,
is_open => 1,
});
Bugzilla::Field::Choice->type('cf_multiselect')->create({
value => 'Yellow',
sortkey => 0,
is_open => 1,
});
Bugzilla::Field->create({ %{ ({
description => 'date time custom field',
type => 5,
sortkey => 751,
mailhead => 1,
enter_bug => 1,
obsolete => 0,
buglist => 1,
}) },
name => 'cf_datetime', custom => 1
});
Bugzilla::Field->create({ %{ ({
description => 'bug id custom field',
type => 6,
sortkey => 851,
mailhead => 1,
enter_bug => 1,
obsolete => 0,
buglist => 1,
}) },
name => 'cf_bugid', custom => 1
});
}
# if (!$dbh->selectrow_array('SELECT 1 FROM bug_status where value = "test"')) {
# print "Anlegen von Status!!!!\n" unless $args->{silent};
# Bugzilla::Status->create({ value => 'test', is_open => 0 });
# }
if (!$dbh->selectrow_array('SELECT 1 FROM flagtypes')) {
print "create additional flagtypes...\n" unless $args->{silent};
my $flagtype = Bugzilla::FlagType->insert_create_data({
name => 'BugFlag1',
description => '1',
target_type => 'bug',
cc_list => '',
sortkey => 1,
is_active => 1,
is_requestable => 0,
is_requesteeble => 0,
is_multiplicable => 0,
});
# set the inclusion to __Any__:__Any__
my $sth = $dbh->prepare("INSERT INTO flaginclusions
(type_id, product_id, component_id) VALUES (?, ?, ?)");
$sth->execute(bless($flagtype, 'Bugzilla::FlagType' )->id, undef, undef);
$flagtype = Bugzilla::FlagType->insert_create_data({
name => 'BugFlag2',
description => '2',
target_type => 'bug',
cc_list => '',
sortkey => 1,
is_active => 1,
is_requestable => 1,
is_requesteeble => 0,
is_multiplicable => 0,
});
# set the inclusion to __Any__:__Any__
$sth = $dbh->prepare("INSERT INTO flaginclusions
(type_id, product_id, component_id) VALUES (?, ?, ?)");
$sth->execute(bless($flagtype, 'Bugzilla::FlagType' )->id, undef, undef);
$flagtype = Bugzilla::FlagType->insert_create_data({
name => 'AttachmentFlag1',
description => '1',
target_type => 'attachment',
cc_list => '',
sortkey => 1,
is_active => 1,
is_requestable => 1,
is_requesteeble => 1,
is_multiplicable => 1,
});
# set the inclusion to __Any__:__Any__
$sth = $dbh->prepare("INSERT INTO flaginclusions
(type_id, product_id, component_id) VALUES (?, ?, ?)");
$sth->execute(bless($flagtype, 'Bugzilla::FlagType' )->id, undef, undef);
$flagtype = Bugzilla::FlagType->insert_create_data({
name => 'AttachmentFlag2',
description => '2',
target_type => 'attachment',
cc_list => '',
sortkey => 1,
is_active => 1,
is_requestable => 1,
is_requesteeble => 1,
is_multiplicable => 1,
});
# set the inclusion to __Any__:__Any__
$sth = $dbh->prepare("INSERT INTO flaginclusions
(type_id, product_id, component_id) VALUES (?, ?, ?)");
$sth->execute(bless($flagtype, 'Bugzilla::FlagType' )->id, undef, undef);
$flagtype = Bugzilla::FlagType->insert_create_data({
name => 'BugFlag3',
description => '3',
target_type => 'bug',
cc_list => '',
sortkey => 1,
is_active => 1,
is_requestable => 1,
is_requesteeble => 0,
is_multiplicable => 1,
});
# set the inclusion to __Any__:__Any__
$sth = $dbh->prepare("INSERT INTO flaginclusions
(type_id, product_id, component_id) VALUES (?, ?, ?)");
$sth->execute(bless($flagtype, 'Bugzilla::FlagType' )->id, undef, undef);
$flagtype = Bugzilla::FlagType->insert_create_data({
name => 'BugFlag4',
description => '4',
target_type => 'bug',
cc_list => '',
sortkey => 1,
is_active => 1,
is_requestable => 1,
is_requesteeble => 1,
is_multiplicable => 1,
});
# set the inclusion to __Any__:__Any__
$sth = $dbh->prepare("INSERT INTO flaginclusions
(type_id, product_id, component_id) VALUES (?, ?, ?)");
$sth->execute(bless($flagtype, 'Bugzilla::FlagType' )->id, undef, undef);
}
if (!$dbh->selectrow_array('SELECT 1 FROM keyworddefs')) {
print "create additional keyworddefs...\n" unless $args->{silent};
Bugzilla::Keyword->create({ name => 'Keyword1', description => '1' });
Bugzilla::Keyword->create({ name => 'Keyword2', description => '2' });
}
<% if @custom_wf %>
my %status_ids = @{ $dbh->selectcol_arrayref(
'SELECT value, id FROM bug_status', {Columns=>[1,2]}) };
my $old_id = $status_ids{'IN_PROGRESS'};
my $new_id = $status_ids{'UNCONFIRMED'};
if (!$dbh->selectrow_array('SELECT 1 FROM status_workflow where old_status = '. $old_id . ' and new_status = '.$new_id)) {
print "create additional status_workflow...\n" unless $args->{silent};
my $sth_insert = $dbh->prepare('INSERT INTO status_workflow (old_status, new_status)
VALUES (?, ?)');
my $sth_delete = $dbh->prepare('DELETE FROM status_workflow
WHERE old_status = ? AND new_status = ?');
foreach my $pair (STATUS_WORKFLOW) {
my $old_id = $pair->[0] ? $status_ids{$pair->[0]} : undef;
my $new_id = $status_ids{$pair->[1]};
$sth_insert->execute($old_id, $new_id);
}
foreach my $pair (STATUS_WORKFLOW_DELETE) {
my $old_id = $pair->[0] ? $status_ids{$pair->[0]} : undef;
my $new_id = $status_ids{$pair->[1]};
$sth_delete->execute($old_id, $new_id);
}
}
<% end %>
<% if @custom_wf_and_status %>
if (!$dbh->selectrow_array('SELECT 1 FROM bug_status where value = "ON_DEV"')) {
print "Anlegen von Status!!!!\n" unless $args->{silent};
Bugzilla::Status->create({ value => 'ON_DEV', is_open => 1 , sortkey => 800});
Bugzilla::Status->create({ value => 'POST', is_open => 0 , sortkey => 900});
Bugzilla::Status->create({ value => 'MODIFIED', is_open => 1 , sortkey => 1200});
}
my %status_ids = @{ $dbh->selectcol_arrayref(
'SELECT value, id FROM bug_status', {Columns=>[1,2]}) };
my $old_id = $status_ids{'IN_PROGRESS'};
my $new_id = $status_ids{'UNCONFIRMED'};
if (!$dbh->selectrow_array('SELECT 1 FROM status_workflow where old_status = '. $old_id . ' and new_status = '.$new_id)) {
print "create additional status_workflow...\n" unless $args->{silent};
my $sth_insert = $dbh->prepare('INSERT INTO status_workflow (old_status, new_status)
VALUES (?, ?)');
my $sth_delete = $dbh->prepare('DELETE FROM status_workflow
WHERE old_status = ? AND new_status = ?');
my $sth_delnul = $dbh->prepare('DELETE FROM status_workflow
WHERE old_status IS NULL AND new_status = ?');
foreach my $pair (STATUS_WORKFLOW) {
my $old_id = $pair->[0] ? $status_ids{$pair->[0]} : undef;
my $new_id = $status_ids{$pair->[1]};
if (!$dbh->selectrow_array('SELECT 1 FROM status_workflow where old_status ='. $old_id . ' and new_status ='.$new_id)) {
$sth_insert->execute($old_id, $new_id);
}
}
foreach my $pair (STATUS_WORKFLOW_DELETE) {
my $old_id = $pair->[0] ? $status_ids{$pair->[0]} : undef;
my $new_id = $status_ids{$pair->[1]};
$sth_delete->execute($old_id, $new_id);
}
my $new_id = $status_ids{'ASSIGNED'};
$sth_delnul->execute($new_id);
}
<% end %>
print "Mylyn Extension: end of install-before_final_checks hook\n" unless $args->{silent};
}
sub bug_url_sub_classes {
my ($self, $args) = @_;
push @{ $args->{sub_classes} }, MORE_SUB_CLASSES;
}
__PACKAGE__->NAME;