Files
2026-08-07 17:38:18 +09:00

147 lines
4.0 KiB
Perl

package TTXGrpCmd;
#
# This module is a part of Trouble Ticket Express package
# http://www.troubleticketexpress.com
#
# COPYRIGHT: 2006, United Web Coders
# http://www.unitedwebcoders.com
#
# $Revision: 216 $
# $Date: 2006-07-21 05:19:45 -0400 (Fri, 21 Jul 2006) $
#
$TTXGrpCmd::VERSION='2.22';
BEGIN {
$TTXGrpCmd::REVISION = '$Revision: 216 $';
if ($TTXGrpCmd::REVISION =~ /(\d+)/) {
$TTXGrpCmd::REVISION = $1;
}
};
use strict;
use TTXCommon;
require TTXUser;
use TTXTickets;
require TTXMail;
require TTXMarkup;
require TTXTicket;
# ================================================================== checkgroups
my $groupsenabled;
sub checkgroups {
if ($groupsenabled eq undef) {
eval "use TTXGroups";
if (!$@) {
$groupsenabled = 1;
} else {
$groupsenabled = 0;
if ($_[0]->get('usegrpsel')) {
$_[0]->set('usegrpsel', 0);
$_[0]->save();
}
}
}
}
# ======================================================================= lockdb
my $lockcnt;
sub lockdb {
return ++$lockcnt if $lockcnt;
my $cfg = TTXData::get('CONFIG');
return 1 if $cfg->get('dbmode') !~ /sql/;
my $lockfile = $cfg->get('basedir')."/lockdb.ttx";
if (! -f $lockfile) {
if (!open(LOCK, ">$lockfile")) {
return 0;
}
} elsif (!open(LOCK,"+<$lockfile")) {
return 0;
}
flock(LOCK, 2);
$lockcnt = 1;
return 1;
}
# ===================================================================== unlockdb
sub unlockdb {
return if !$lockcnt;
my $cfg = TTXData::get('CONFIG');
return if $cfg->get('dbmode') !~ /sql/;
--$lockcnt;
if (!$lockcnt) {
flock(LOCK, 8);
close LOCK;
}
}
# =========================================================================== do
sub do {
my ($cfg, $query, $data) = @_;
checkgroups($cfg);
lockdb();
my $tickets = TTXCommon::dbtik();
if ($tickets eq undef || $tickets->error() ne undef) {
$data->{ERROR_MESSAGE} = $tickets->errortext();
return undef;
}
my $update = 0;
my @tidlist = $query->param('tid');
my $user = $cfg->get('_USER');
my $userid = $user->{login};
my $readonly = $user->get('ro') ? 1:0;
if (!$readonly) {
foreach my $tid (@tidlist) {
if ($query->param('del') ne undef) {
if (!($cfg->get('demo') && $userid ne 'admin') &&
($cfg->get('grant.delete') eq undef || grep(/^$userid$/, split(/,/, $cfg->get('grant.delete'))))) {
$tickets->deltik($tid);
$update = 1;
}
} elsif ($query->param('close') ne undef) {
my $t = $tickets->ticket($tid);
next if $t eq undef;
if ($t->{status} ne 'CLS') {
if ($t->{oper} eq undef) {
$t->{oper} = $userid;
}
$t->{status} = 'CLS';
$t->{updated} = time();
$t->{closed} = $t->{updated};
TTXCommon::logit("CLOSE|$userid|".$t->{id});
$update = 1;
}
} elsif ($query->param('assign') ne undef) {
my $t = $tickets->ticket($tid);
next if $t eq undef;
my $to = TTXCommon::cleanit($query, 'to');
next if $to eq undef;
if ($to !~ /^\+/ && $t->{oper} ne $to) {
my $user = TTXUser->new($to);
next if ($user eq undef || $user->get('login') eq undef);
$t->{oper} = $to;
$t->{status} = 'OPN' if $cfg->get('transferopens') || $t->{status} eq 'PND';
$update = 1;
$t->{updated} = time();
TTXCommon::logit("TRANSFER|$userid|".$t->{id}."|$to");
TTXTicket::transfernotice({cfg => $cfg, ticket => $t});
} elsif($cfg->get('usegrpsel')) {
next if $t->{grp} eq "+$to";
$t->{grp} = $to;
TTXGroups::grptransfer({cfg => $cfg, ticket => $t});
$update = 1;
$t->{updated} = time();
}
}
}
}
$tickets->save() if $update;
unlockdb();
$query->param(-name => 'tid', -value => '');
$query->param(-name => 'del', -value => '');
$query->param(-name => 'close', -value => '');
$query->param(-name => 'assign', -value => '');
return 'helpdesk'
}
1;
#