Massive refactoring and bug fixing in InOutBoard.

Used placeholders for many queries, i18n'ed the Search button in
viewReport, fixed bugs related to users with no selected department
in their profile, fixed a bad query still looking for old style
user profile data.
This commit is contained in:
Colin Kuskie 2009-09-03 17:10:06 -07:00
parent 39b9bd399e
commit f4d8725190

View file

@ -147,17 +147,20 @@ status.
=cut
sub view {
my $self = shift;
my $self = shift;
my $session = $self->session;
my %var;
my $url = $self->getUrl('func=view');
my $i18n = WebGUI::International->new($self->session, "Asset_InOutBoard");
if ($self->session->user->isInGroup($self->getValue("reportViewerGroup"))) {
$var{'viewReportURL'} = $self->getUrl("func=viewReport");
$var{'viewReportLabel'} = $i18n->get('view report label');
$var{canViewReport} = 1;
if ($session->user->isInGroup($self->getValue("reportViewerGroup"))) {
$var{'viewReportURL'} = $self->getUrl("func=viewReport");
$var{'viewReportLabel'} = $i18n->get('view report label');
$var{canViewReport} = 1;
}
else { $var{canViewReport} = 0; }
else {
$var{canViewReport} = 0;
}
my $statusUserId = $self->session->scratch->get("userId") || $self->session->user->userId;
my $statusListString = $self->getValue("statusList");
@ -171,13 +174,19 @@ sub view {
$statusListHashRef->{$status} = $status;
}
#$self->session->errorHandler->warn("VIEW: userId: ".$statusUserId."\n" );
my ($status) = $self->session->db->quickArray("select status from InOutBoard_status where userId=".$self->session->db->quote($statusUserId)." and assetId=".$self->session->db->quote($self->getId));
#$self->session->log->warn("VIEW: userId: ".$statusUserId."\n" );
my ($status) = $session->db->quickArray(
"select status from InOutBoard_status where userId=? and assetId=?",
[ $statusUserId, $self->getId]
);
##Find all the users for which I am a delegate
my @users = $self->session->db->buildArray("select userId from InOutBoard_delegates where assetId=".$self->session->db->quote($self->getId)." and delegateUserId=".$self->session->db->quote($self->session->user->userId));
my @users = $session->db->buildArray(
"select userId from InOutBoard_delegates where assetId=? and delegateUserId=?",
[ $self->getId, $session->user->userId ]
);
my $f = WebGUI::HTMLForm->new($self->session,-action=>$self->getUrl);
my $f = WebGUI::HTMLForm->new($session,-action=>$self->getUrl);
if (@users) {
my %nameHash;
tie %nameHash, "Tie::IxHash";
@ -188,7 +197,7 @@ sub view {
$f->selectBox(
-name=>"delegate",
-options=>\%nameHash,
-value=>[ $self->session->scratch->get("userId") ],
-value=>[ $session->scratch->get("userId") ],
-label=>$i18n->get('delegate'),
-hoverHelp=>$i18n->get('delegate description'),
-extras=>q|onchange="this.form.submit();"|,
@ -212,18 +221,23 @@ sub view {
);
$f->submit;
my ($isInGroup) = $self->session->db->quickArray("select count(*) from groupings where userId=".$self->session->db->quote($self->session->user->userId)." and groupId=".$self->session->db->quote($self->get("inOutGroup")));
my ($isInGroup) = $session->db->quickArray(
"select count(*) from groupings where userId=? and groupId=?",
[ $session->user->userId, $self->get("inOutGroup") ]
);
if ($isInGroup) {
$var{displayForm} = 1;
$var{'form'} = $f->print;
$var{'selectDelegatesURL'} = $self->getUrl("func=selectDelegates");
$var{'selectDelegatesLabel'} = $i18n->get('select delegates label');
$var{displayForm} = 1;
$var{'form'} = $f->print;
$var{'selectDelegatesURL'} = $self->getUrl("func=selectDelegates");
$var{'selectDelegatesLabel'} = $i18n->get('select delegates label');
}
else { $var{displayForm} = 0; }
else {
$var{displayForm} = 0;
}
my $lastDepartment = "_nothing_";
my $p = WebGUI::Paginator->new($self->session,$url, $self->getValue("paginateAfter"));
my $p = WebGUI::Paginator->new($session, $url, $self->getValue("paginateAfter"));
my $sql = "select users.username,
users.userId,
@ -238,12 +252,12 @@ from users
left join groupings on groupings.userId=users.userId
left join InOutBoard on groupings.groupId=InOutBoard.inOutGroup
left join userProfileData on users.userId=userProfileData.userId
left join InOutBoard_status on users.userId=InOutBoard_status.userId and InOutBoard_status.assetId=".$self->session->db->quote($self->getId())."
where users.userId<>'1' and InOutBoard.inOutGroup=".$self->session->db->quote($self->get("inOutGroup"))."
left join InOutBoard_status on users.userId=InOutBoard_status.userId and InOutBoard_status.assetId=?
where users.userId<>'1' and InOutBoard.inOutGroup=?
group by userId
order by department, lastName, firstName";
$p->setDataByQuery($sql);
$p->setDataByQuery($sql, 0, [ $self->getId, $self->get('inOutGroup') ], );
my $rowdata = $p->getPageData();
my @rows;
foreach my $data (@$rowdata) {
@ -344,14 +358,20 @@ Process the selectDeletages form.
=cut
sub www_selectDelegatesEditSave {
my $self = shift;
my @delegates = $self->session->form->selectList("delegates");
$self->session->db->write("delete from InOutBoard_delegates where assetId=".$self->session->db->quote($self->getId)." and userId=".$self->session->db->quote($self->session->user->userId));
my $self = shift;
my $session = $self->session;
my $db = $session->db;
my @delegates = $session->form->selectList("delegates");
$db->write(
"delete from InOutBoard_delegates where assetId=? and userId=?",
[ $self->getId, $session->user->userId ]
);
foreach my $delegate (@delegates) {
$self->session->db->write("insert into InOutBoard_delegates
(userId,delegateUserId,assetId) values
(".$self->session->db->quote($self->session->user->userId).",".$self->session->db->quote($delegate).",".$self->session->db->quote($self->getId).")");
$db->write(
"insert into InOutBoard_delegates (userId,delegateUserId,assetId) values (?,?,?)",
[$session->user->userId, $delegate, $self->getId ],
);
}
return "";
}
@ -364,24 +384,26 @@ Process the form from the view method to set status for a user.
=cut
sub www_setStatus {
my $self = shift;
#$self->session->errorHandler->warn("delegateId: ". $self->session->form->process("delegate")."\n" );
#$self->session->errorHandler->warn("userId: ".$self->session->scratch->get("userId") ."\n" );
if ($self->session->form->process("delegate") eq $self->session->scratch->get("userId")) {
#$self->session->errorHandler->warn("Wrote data and removed scratch\n");
my $sessionUserId = $self->session->scratch->get("userId") || $self->session->user->userId;
#$self->session->errorHandler->warn("user Id: ".$sessionUserId."\n");
$self->session->scratch->delete("userId");
$self->session->db->write("delete from InOutBoard_status where userId=".$self->session->db->quote($sessionUserId)." and assetId=".$self->session->db->quote($self->getId));
$self->session->db->write("insert into InOutBoard_status (assetId,userId,status,dateStamp,message) values (".$self->session->db->quote($self->getId).",".$self->session->db->quote($sessionUserId).","
.$self->session->db->quote($self->session->form->process("status")).",".$self->session->datetime->time().",".$self->session->db->quote($self->session->form->process("message")).")");
$self->session->db->write("insert into InOutBoard_statusLog (assetId,userId,createdBy,status,dateStamp,message) values (".$self->session->db->quote($self->getId).",".$self->session->db->quote($sessionUserId).",".$self->session->db->quote($self->session->user->userId).","
.$self->session->db->quote($self->session->form->process("status")).",".$self->session->datetime->time().",".$self->session->db->quote($self->session->form->process("message")).")");
my $self = shift;
my $session = $self->session;
my $db = $session->db;
my $delegate = $session->form->process('delegate');
if ($delegate eq $self->session->scratch->get("userId")) {
my $sessionUserId = $session->scratch->get("userId") || $session->user->userId;
$session->scratch->delete("userId");
$db->write("delete from InOutBoard_status where userId=? and assetId=?", [ $sessionUserId, $self->getId ]);
my $message = $session->form->process('message');
$db->write(
"insert into InOutBoard_status (assetId,userId,status,dateStamp,message) values (?,?,?,?,?)",
[$self->getId, $sessionUserId, $session->form->process("status"), $session->datetime->time(), $message ],
);
$db->write(
"insert into InOutBoard_status (assetId,userId,createdBy,status,dateStamp,message) values (?,?,?,?,?,?)",
[$self->getId, $sessionUserId, $session->user->userId, $session->form->process("status"), $session->datetime->time(), $message ],
);
}
else {
#$self->session->errorHandler->warn("Set scratch, redisplay\n");
#$self->session->errorHandler->warn(sprintf "Delegate is %s\n", $self->session->form->process("delegate"));
$self->session->scratch->set("userId",$self->session->form->process("delegate"));
$session->scratch->set("userId",$session->form->process("delegate"));
}
return $self->www_view;
}
@ -426,14 +448,18 @@ sub www_viewReport {
-hoverHelp=>$i18n->get('17 description'),
-value=>$endDate
);
##Make a list of available departments. Map empty departments to the No departments label, and
##handle the SQL clause for searching.
my %depHash;
%depHash = map { $_ => $_ } ($self->_fetchDepartments(),
$i18n->get('all departments'));
my $defaultDepartment = $self->session->form->process("selectDepartment")
|| $i18n->get('all departments');
my $departmentSQLclause = ($defaultDepartment eq $i18n->get('all departments'))
%depHash = map { $_ => $_ }
($self->_fetchDepartments(), $i18n->get('all departments'));
$depHash{''} = $i18n->get('7');
my $defaultDepartment = $self->session->form->process("selectDepartment");
my $departmentSQLclause = $defaultDepartment eq $i18n->get('all departments')
? ''
: 'and c.fieldData='.$self->session->db->quote($defaultDepartment);
: $defaultDepartment eq ''
? 'and userProfileData.department IS NULL'
: 'and userProfileData.department='.$self->session->db->quote($defaultDepartment);
$f->selectBox(
-name=>"selectDepartment",
-options=>\%depHash,
@ -452,10 +478,10 @@ sub www_viewReport {
-label=>$i18n->get(14),
-hoverHelp=>$i18n->get('14 description'),
);
$f->submit(-value=>"Search");
$f->submit(-value=>$i18n->get('search','Asset'));
$var{'reportTitleLabel'} = $i18n->get('report title');
$var{'form'} = $f->print;
my $url = $self->getUrl("func=viewReport;selectDepartment=".$self->session->form->process("selectDepartment").";reportPagination=".$self->session->form->process("reportPagination").";startDate=".$self->session->form->process("startDate").";endDate=".$self->session->form->process("endDate").";doit=1");
$var{'form'} = $f->print;
my $url = $self->getUrl("func=viewReport;selectDepartment=".$defaultDepartment.";reportPagination=".$pageReportAfter.";startDate=".$self->session->form->process("startDate").";endDate=".$endDate.";doit=1");
if ($self->session->form->process("doit")) {
$var{showReport} = 1;
$endDate = $self->session->datetime->addToTime($endDate,24,0,0);
@ -484,7 +510,7 @@ where users.userId<>'1' and
$departmentSQLclause
group by InOutBoard_statusLog.dateStamp
order by department, lastName, firstName, InOutBoard_statusLog.dateStamp";
#$self->session->errorHandler->warn("QUERY: $sql\n");
$self->session->log->warn("QUERY: $sql\n");
$p->setDataByQuery($sql);
my $rowdata = $p->getPageData();
my @rows;
@ -520,7 +546,9 @@ order by department, lastName, firstName, InOutBoard_statusLog.dateStamp";
$var{'updatedBy.label'} = $i18n->get('updatedBy label');
$p->appendTemplateVars(\%var);
}
else { $var{showReport} = 0; }
else {
$var{showReport} = 0;
}
return $self->processStyle($self->processTemplate(\%var, $self->getValue("reportTemplateId")));
}