Jonathan Druart
45a35f1ecc
This patch should not modify a lot the behaviours of the onboarding tool. Its goal is mainly to remove duplicated as well as useless (because copy/pasted from existing script files) code. It assumes that the onboarding tool will be done on an empty database and will skip steps that are not needed. For instance if a library already exists, the first step will be skipped. One of the main problem was the lack of feedback messages sent to the user when something wrong/ok happened. Explanation on main changes: 1. Use checkauth first, then get_template_and_user => As we do not know the template to use, it's better to use checkauth first to know if the user is logged in, then retrieve the template we need, depending on the success or the failure of the action 2. Create a @messages variables Pushing messages to this variable and handling the messages via an include files (onboarding_messages.inc) simplify error handling. Note that we could remove this include file if we merge all the onboardingstepX.tt files altogether 3. Simplify creation of the admnistrator user This patch removes some unecessary checks done on the user's info (passwd to short, mandatory fields Todo (minor): Add style to feedback messages Signed-off-by: Alex Buckley <alexbuckley@catalyst.net.nz> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
329 lines
11 KiB
Perl
Executable file
329 lines
11 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
# This file is part of Koha.
|
|
#
|
|
# Copyright (C) 2017 Catalyst IT
|
|
#
|
|
# Koha is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Koha is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Koha; if not, see <http://www.gnu.org/licenses>.
|
|
|
|
use Modern::Perl;
|
|
use C4::Context;
|
|
use C4::InstallAuth;
|
|
use CGI qw ( -utf8 );
|
|
use C4::Output;
|
|
use C4::Members;
|
|
use Koha::Patrons;
|
|
use Koha::Libraries;
|
|
use Koha::Database;
|
|
use Koha::DateUtils;
|
|
use Koha::Patron::Categories;
|
|
use Koha::Patron::Category;
|
|
use Koha::ItemTypes;
|
|
use Koha::IssuingRule;
|
|
use Koha::IssuingRules;
|
|
|
|
#Setting variables
|
|
my $input = new CGI;
|
|
|
|
unless ( C4::Context->preference('Version') ) {
|
|
print $input->redirect("/cgi-bin/koha/installer/install.pl");
|
|
exit;
|
|
}
|
|
|
|
my ( $user, $cookie, $sessionID, $flags ) =
|
|
C4::InstallAuth::checkauth( $input, 0, undef, 'intranet' );
|
|
die "Not logged in"
|
|
unless $user
|
|
; # Should not happen, we should be redirect if the user is not logged in. But do not trust authentication...
|
|
|
|
my $step = $input->param('step') || 1;
|
|
my $op = $input->param('op') || '';
|
|
|
|
my $template_params = {};
|
|
$template_params->{op} = $op;
|
|
|
|
my $schema = Koha::Database->new()->schema();
|
|
|
|
my @messages;
|
|
|
|
if ( $step == 1 ) {
|
|
|
|
if ( $op eq 'add_validate_library' ) {
|
|
|
|
my $branchcode = $input->param('branchcode');
|
|
$branchcode = uc($branchcode);
|
|
|
|
$branchcode =~ s|\s||g
|
|
; # Use a regular expression to check the value of the inputted branchcode
|
|
|
|
my $library = Koha::Library->new(
|
|
{
|
|
branchcode => $branchcode,
|
|
branchname => scalar $input->param('branchname'),
|
|
}
|
|
);
|
|
|
|
eval { $library->store; };
|
|
unless ($@) {
|
|
push @messages,
|
|
{ type => 'message', code => 'success_on_insert_library' };
|
|
}
|
|
else {
|
|
push @messages,
|
|
{ type => 'message', code => 'error_on_insert_library' };
|
|
}
|
|
}
|
|
|
|
$step++ if Koha::Libraries->count;
|
|
}
|
|
if ( $step == 2 ) {
|
|
if ( $op eq "add_validate_category" ) {
|
|
|
|
my $searchfield = $input->param('description') // q||;
|
|
my $categorycode = $input->param('categorycode');
|
|
my $category;
|
|
$template_params->{categorycode} = $categorycode;
|
|
|
|
$categorycode = $input->param('categorycode');
|
|
my $description = $input->param('description');
|
|
my $overduenoticerequired = $input->param('overduenoticerequired');
|
|
my $category_type = $input->param('category_type');
|
|
my $default_privacy = $input->param('default_privacy');
|
|
my $enrolmentperiod = $input->param('enrolmentperiod');
|
|
my $enrolmentperioddate = $input->param('enrolmentperioddate') || undef;
|
|
|
|
#Converts the string into a date format
|
|
if ($enrolmentperioddate) {
|
|
$enrolmentperioddate = output_pref(
|
|
{
|
|
dt => dt_from_string($enrolmentperioddate),
|
|
dateformat => 'DateTime',
|
|
dateonly => 1,
|
|
}
|
|
);
|
|
}
|
|
|
|
#Adds a new patron category to the database
|
|
$category = Koha::Patron::Category->new(
|
|
{
|
|
categorycode => $categorycode,
|
|
description => $description,
|
|
overduenoticerequired => $overduenoticerequired,
|
|
category_type => $category_type,
|
|
default_privacy => $default_privacy,
|
|
enrolmentperiod => $enrolmentperiod,
|
|
enrolmentperioddate => $enrolmentperioddate
|
|
}
|
|
);
|
|
|
|
eval { $category->store; };
|
|
|
|
unless ($@) {
|
|
push @messages,
|
|
{ type => 'message', code => 'success_on_insert_category' };
|
|
}
|
|
else {
|
|
push @messages,
|
|
{ type => 'message', code => 'error_on_insert_category' };
|
|
}
|
|
}
|
|
|
|
$step++ if Koha::Patron::Categories->count;
|
|
}
|
|
if ( $step == 3 ) {
|
|
if ( $op eq 'add_validate_patron' ) {
|
|
|
|
#Create a patron
|
|
my $firstpassword = $input->param('password') || '';
|
|
my $secondpassword = $input->param('password2') || '';
|
|
my $cardnumber = $input->param('cardnumber');
|
|
my $userid = $input->param('userid');
|
|
|
|
if ( my $error_code = checkcardnumber($cardnumber) ) {
|
|
if ( $error_code == 1 ) {
|
|
push @messages,
|
|
{
|
|
type => 'alert',
|
|
code => 'ERROR_cardnumber_already_exists'
|
|
};
|
|
}
|
|
elsif ( $error_code == 2 ) {
|
|
push @messages,
|
|
{ type => 'alert', code => 'ERROR_cardnumber_length' };
|
|
}
|
|
}
|
|
elsif ( $firstpassword ne $secondpassword ) {
|
|
|
|
push @messages,
|
|
{ type => 'alert', code => 'ERROR_password_mismatch' };
|
|
}
|
|
else {
|
|
|
|
my $patron_data = {
|
|
surname => scalar $input->param('surname'),
|
|
firstname => scalar $input->param('firstname'),
|
|
cardnumber => scalar $input->param('cardnumber'),
|
|
branchcode => scalar $input->param('libraries'),
|
|
categorycode => scalar $input->param('categorycode_entry'),
|
|
userid => scalar $input->param('userid'),
|
|
password => scalar $input->param('password'),
|
|
password2 => scalar $input->param('password2'),
|
|
privacy => "default",
|
|
address => "",
|
|
city => "",
|
|
flags => 1, # Will be superlibrarian
|
|
};
|
|
|
|
my $patron_category =
|
|
Koha::Patron::Categories->find( $patron_data->{categorycode} );
|
|
$patron_data->{dateexpiry} =
|
|
$patron_category->get_expiry_date( $patron_data->{dateenrolled} );
|
|
|
|
my $borrowernumber = C4::Members::AddMember(%$patron_data);
|
|
|
|
#Error handling checking if the patron was created successfully
|
|
if ($borrowernumber) {
|
|
push @messages,
|
|
{ type => 'message', code => 'success_on_insert_patron' };
|
|
}
|
|
else {
|
|
push @messages,
|
|
{ type => 'error', code => 'error_on_insert_patron' };
|
|
}
|
|
}
|
|
}
|
|
|
|
$step++ if Koha::Patrons->search( { flags => 1 } )->count;
|
|
}
|
|
if ( $step == 4 ) {
|
|
if ( $op eq 'add_validate_itemtype' ) {
|
|
my $description = $input->param('description');
|
|
my $itemtype_code = $input->param('itemtype');
|
|
$itemtype_code = uc($itemtype_code);
|
|
|
|
my $itemtype = Koha::ItemType->new(
|
|
{
|
|
itemtype => $itemtype_code,
|
|
description => $description,
|
|
}
|
|
);
|
|
eval { $itemtype->store; };
|
|
|
|
unless ($@) {
|
|
push @messages,
|
|
{ type => 'message', code => 'success_on_insert_itemtype' };
|
|
}
|
|
else {
|
|
push @messages,
|
|
{ type => 'message', code => 'error_on_insert_itemtype' };
|
|
}
|
|
}
|
|
|
|
$step++ if Koha::ItemTypes->count;
|
|
}
|
|
if ( $step == 5 ) {
|
|
|
|
if ( $op eq 'add_validate_circ_rule' ) {
|
|
|
|
#If no libraries exist then set the $branch value to *
|
|
my $branch = $input->param('branch') || '*';
|
|
|
|
my $type = $input->param('type');
|
|
my $branchcode = $input->param('branch');
|
|
my $categorycode = $input->param('categorycode');
|
|
my $itemtype = $input->param('itemtype');
|
|
my $maxissueqty = $input->param('maxissueqty');
|
|
my $issuelength = $input->param('issuelength');
|
|
my $lengthunit = $input->param('lengthunit');
|
|
my $renewalsallowed = $input->param('renewalsallowed');
|
|
my $renewalperiod = $input->param('renewalperiod');
|
|
my $onshelfholds = $input->param('onshelfholds') || 0;
|
|
$maxissueqty =~ s/\s//g;
|
|
$maxissueqty = undef if $maxissueqty !~ /^\d+/;
|
|
$issuelength = $issuelength eq q{} ? undef : $issuelength;
|
|
|
|
my $params = {
|
|
branchcode => $branchcode,
|
|
categorycode => $categorycode,
|
|
itemtype => $itemtype,
|
|
maxissueqty => $maxissueqty,
|
|
renewalsallowed => $renewalsallowed,
|
|
renewalperiod => $renewalperiod,
|
|
issuelength => $issuelength,
|
|
lengthunit => $lengthunit,
|
|
onshelfholds => $onshelfholds,
|
|
};
|
|
|
|
my $issuingrule = Koha::IssuingRule->new($params);
|
|
eval { $issuingrule->store; };
|
|
|
|
unless ($@) {
|
|
push @messages,
|
|
{ type => 'message', code => 'success_on_insert_circ_rule' };
|
|
}
|
|
else {
|
|
push @messages,
|
|
{ type => 'message', code => 'error_on_insert_circ_rule' };
|
|
}
|
|
}
|
|
|
|
$step++ if Koha::IssuingRules->count;
|
|
}
|
|
|
|
my $libraries = Koha::Libraries->search( {}, { order_by => ['branchcode'] }, );
|
|
$template_params->{libraries} = $libraries;
|
|
$template_params->{group_types} = [
|
|
{
|
|
categorytype => 'searchdomain',
|
|
categories => [
|
|
Koha::LibraryCategories->search(
|
|
{ categorytype => 'searchdomain' }
|
|
)
|
|
],
|
|
},
|
|
{
|
|
categorytype => 'properties',
|
|
categories => [
|
|
Koha::LibraryCategories->search( { categorytype => 'properties' } )
|
|
],
|
|
},
|
|
];
|
|
|
|
if ( $step > 5 ) {
|
|
$template_params->{all_done} = 1; # If step 5 is complete, we are done!
|
|
$step = 5;
|
|
}
|
|
|
|
#Getting the appropriate template to display to the user
|
|
my ( $template, $loggedinuser );
|
|
( $template, $loggedinuser, $cookie ) = C4::InstallAuth::get_template_and_user(
|
|
{
|
|
template_name => "onboarding/onboardingstep${step}.tt",
|
|
query => $input,
|
|
type => "intranet",
|
|
authnotrequired => 0,
|
|
debug => 1,
|
|
}
|
|
);
|
|
|
|
$template_params->{messages} = \@messages;
|
|
my $categories = Koha::Patron::Categories->search();
|
|
$template_params->{categories} = $categories;
|
|
|
|
my $itemtypes = Koha::ItemTypes->search();
|
|
$template_params->{itemtypes} = $itemtypes;
|
|
|
|
$template->param(%$template_params);
|
|
|
|
output_html_with_http_headers $input, $cookie, $template->output;
|