diff --git a/docs/upgrades/upgrade_4.0.4-4.1.0.sql b/docs/upgrades/upgrade_4.0.4-4.1.0.sql index 695c24592..8af406479 100644 --- a/docs/upgrades/upgrade_4.0.4-4.1.0.sql +++ b/docs/upgrades/upgrade_4.0.4-4.1.0.sql @@ -42,4 +42,10 @@ INSERT INTO international VALUES (548,'WebGUI','English','Group name'); INSERT INTO international VALUES (549,'WebGUI','English','Group description'); INSERT INTO international VALUES (550,'WebGUI','English','View Image group'); INSERT INTO international VALUES (382,'WebGUI','English','Edit Image'); +alter table messageLog add column subject varchar(255); +alter table messageLog add column status varchar(30) default 'notice'; +INSERT INTO international VALUES (551,'WebGUI','English','Notice'); +INSERT INTO international VALUES (552,'WebGUI','English','Pending'); +INSERT INTO international VALUES (553,'WebGUI','English','Status'); + diff --git a/lib/WebGUI/MessageLog.pm b/lib/WebGUI/MessageLog.pm index e9ae52ea3..2d97d0bb2 100644 --- a/lib/WebGUI/MessageLog.pm +++ b/lib/WebGUI/MessageLog.pm @@ -12,88 +12,99 @@ package WebGUI::MessageLog; use strict; use Tie::CPHash; +use WebGUI::International; use WebGUI::Macro; use WebGUI::Mail; use WebGUI::Session; use WebGUI::SQL; use WebGUI::URL; +use WebGUI::User; + #------------------------------------------------------------------- -sub _getUserInfo { - my (%default, $key, %user, %profile, $value); - tie %user, 'Tie::CPHash'; - %user = WebGUI::SQL->quickHash("select * from users where userId='$_[0]'"); - if ($user{userId} ne "") { - %profile = WebGUI::SQL->buildHash("select userProfileField.fieldName, userProfileData.fieldData - from userProfileData, userProfileField - where userProfileData.fieldName=userProfileField.fieldName and userProfileData.userId=$user{userId}"); - %user = (%user, %profile); - %default = WebGUI::SQL->buildHash("select fieldName, dataDefault from userProfileField where profileCategoryId=4"); - foreach $key (keys %default) { - if ($user{$key} eq "") { - $value = eval($default{$key}); - if (ref $value eq "ARRAY") { - $user{$key} = $$value[0]; - } else { - $user{$key} = $value; - } - } - } - } - return \%user; +sub _notify { + my ($u, $message, $subject); + $u = $_[0]; + $subject = $_[1]; + $message = $_[2]; + if ($u->profileField("INBOXNotifications") eq "email") { + if ($u->profileField("email") ne "") { + WebGUI::Mail::send($u->profileField("email"),$subject,$message); + } + } elsif ($u->profileField("INBOXNotifications") eq "emailToPager") { + if ($u->profileField("emailToPagerGateway") ne "") { + WebGUI::Mail::send($u->profileField("emailToPagerGateway"),$subject,$message); + } + } elsif ($u->profileField("INBOXNotifications") eq "icq") { + if ($u->profileField("icq")) { + WebGUI::Mail::send($u->profileField("icq").'@pager.icq.com',$subject,$message); + } + } } #------------------------------------------------------------------- sub addEntry { - my (@users, $messageLogId,$sth, $user, %message, %subject, $message, $subject, $namespace); + my ($u, @users, $messageLogId, $sth, $userId, $groupId, $subject, $message, $url, $status, $user); $messageLogId = getNextId("messageLogId"); - $namespace = $_[4] || "WebGUI"; - %message = WebGUI::SQL->buildHash("select language,message from international where internationalId=$_[3] and namespace='$namespace'"); - %subject = WebGUI::SQL->buildHash("select language,message from international where internationalId=523 and namespace='WebGUI'"); - if ($_[1] ne "") { - @users = WebGUI::SQL->quickArray("select userId from groupings where groupId=$_[1]"); + $userId = $_[0]; + $groupId = $_[1]; + $subject = $_[2]; + $message = $_[3]; + $url = $_[4]; + $status = $_[5]; + if ($groupId ne "") { + @users = WebGUI::SQL->quickArray("select userId from groupings where groupId=$groupId"); } - @users = ($_[0],@users); + @users = ($userId,@users); foreach $user (@users) { - $user = _getUserInfo($user); - if (${$user}{userId} ne "") { - WebGUI::SQL->write("insert into messageLog values ($messageLogId,".${$user}{userId}.", - ".quote($message{${$user}{language}}).",".quote($_[2]).",".time().")"); - $subject{${$user}{language}} = $subject{'English'} if ($subject{${$user}{language}} eq ""); - $subject = $subject{${$user}{language}}; - $message{${$user}{language}} = $message{'English'} if ($message{${$user}{language}} eq ""); - $message = WebGUI::Macro::process($message{${$user}{language}}); - if ($_[2] ne "") { - $message .= "\n".WebGUI::URL::append('http://'.$session{env}{HTTP_HOST}.$_[2],'mlog='.$messageLogId); - } - if (${$user}{INBOXNotifications} eq "email") { - if (${$user}{email} ne "") { - WebGUI::Mail::send(${$user}{email},$subject,$message); - } - } elsif (${$user}{INBOXNotifications} eq "emailToPager") { - if (${$user}{emailToPagerGateway} ne "") { - WebGUI::Mail::send(${$user}{emailToPagerGateway},$subject,$message); - } - } elsif (${$user}{INBOXNotifications} eq "icq") { - if (${$user}{icq}) { - WebGUI::Mail::send(${$user}{icq}.'@pager.icq.com',$subject,$message); - } + $u = WebGUI::User->new($user); + if ($u->userId ne "") { + WebGUI::SQL->write("insert into messageLog values ($messageLogId,".$u->userId.", + ".quote($message).",".quote($url).",".time().",".quote($subject).", ".quote($status).")"); + if ($url ne "") { + $message .= "\n".WebGUI::URL::append('http://'.$session{env}{HTTP_HOST}.$url,'mlog='.$messageLogId); } + _notify($u,$subject,$message); } } } +#------------------------------------------------------------------- +sub addInternationalizedEntry { + my ($u, $userId, $url, $groupId, $internationalId, @users, $messageLogId,$sth, $user, %message, %subject, $message, $subject, $namespace, $status); + $messageLogId = getNextId("messageLogId"); + $userId = $_[0]; + $groupId = $_[1]; + $url = $_[2]; + $internationalId = $_[3]; + $namespace = $_[4] || "WebGUI"; + $status = $_[5] || 'notice'; + %message = WebGUI::SQL->buildHash("select language,message from international where internationalId=$internationalId and namespace='$namespace'"); + %subject = WebGUI::SQL->buildHash("select language,message from international where internationalId=523 and namespace='WebGUI'"); + if ($groupId ne "") { + @users = WebGUI::SQL->quickArray("select userId from groupings where groupId=$groupId"); + } + @users = ($userId,@users); + foreach $user (@users) { + $u = WebGUI::User->new($user); + if ($u->userId ne "") { + $subject{$u->profileField("language")} = $subject{'English'} if ($subject{$u->profileField("language")} eq ""); + $subject = $subject{$u->profileField("language")}; + $message{$u->profileField("language")} = $message{'English'} if ($message{$u->profileField("language")} eq ""); + $message = WebGUI::Macro::process($message{$u->profileField("language")}); + WebGUI::SQL->write("insert into messageLog values ($messageLogId,".$u->userId.", + ".quote($message).",".quote($url).",".time().",".quote($message).",".quote($status).")"); + if ($url ne "") { + $message .= "\n".WebGUI::URL::append('http://'.$session{env}{HTTP_HOST}.$url,'mlog='.$messageLogId); + } + _notify($u,$subject,$message); + } + } +} + #------------------------------------------------------------------- sub completeEntry { - my ($sth, @data, $completeMessage); - $completeMessage = WebGUI::International::get(350); - # unfortunately had to loop through reading and writing because I couldn't - # find a concatination function that worked the same in all DB servers - $sth = WebGUI::SQL->read("select message,userId from messageLog where messageLogId='$_[0]'"); - while (@data = $sth->array) { - WebGUI::SQL->write("update messageLog set message=".quote($completeMessage.": ".$data[0]).", dateOfEntry=".time()." where messageLogId='$_[0]' and userId=$data[1]"); - } - $sth->finish; + WebGUI::SQL->write("update messageLog set status='completed', dateOfEntry=".time()." where messageLogId='$_[0]'"); } diff --git a/lib/WebGUI/Operation/Account.pm b/lib/WebGUI/Operation/Account.pm index f1c17a0b7..46be7d56a 100644 --- a/lib/WebGUI/Operation/Account.pm +++ b/lib/WebGUI/Operation/Account.pm @@ -30,7 +30,7 @@ use WebGUI::User; use WebGUI::Utility; our @ISA = qw(Exporter); -our @EXPORT = qw(&www_viewMessageLog &www_viewProfile &www_editProfile &www_editProfileSave &www_createAccount &www_deactivateAccount &www_deactivateAccountConfirm &www_displayAccount &www_displayLogin &www_login &www_logout &www_recoverPassword &www_recoverPasswordFinish &www_createAccountSave &www_updateAccount); +our @EXPORT = qw(&www_viewMessageLogMessage &www_viewMessageLog &www_viewProfile &www_editProfile &www_editProfileSave &www_createAccount &www_deactivateAccount &www_deactivateAccountConfirm &www_displayAccount &www_displayLogin &www_login &www_logout &www_recoverPassword &www_recoverPasswordFinish &www_createAccountSave &www_updateAccount); our %ldapStatusCode = ( 0=>'success (0)', 1=>'Operations Error (1)', 2=>'Protocol Error (2)', 3=>'Time Limit Exceeded (3)', 4=>'Size Limit Exceeded (4)', 5=>'Compare False (5)', 6=>'Compare True (6)', 7=>'Auth Method Not Supported (7)', 8=>'Strong Auth Required (8)', @@ -253,7 +253,7 @@ sub www_createAccountSave { } WebGUI::Session::start($u->userId); _logLogin($u->userId,"success"); - WebGUI::MessageLog::addEntry('',$session{setting}{onNewUserAlertGroup},'',536) if ($session{setting}{alertOnNewUser}); + WebGUI::MessageLog::addInternationalizedEntry('',$session{setting}{onNewUserAlertGroup},'',536) if ($session{setting}{alertOnNewUser}); } else { $output = "

".WebGUI::International::get(70)."

".$error.www_createAccount(); } @@ -563,27 +563,32 @@ sub www_updateAccount { #------------------------------------------------------------------- sub www_viewMessageLog { - my (@data, $output, $sth, @row, $i, $p); + my (%status, @data, $output, $sth, @row, $i, $p); if (WebGUI::Privilege::isInGroup(2,$session{user}{userId})) { + %status = (notice=>WebGUI::International::get(551),pending=>WebGUI::International::get(552),completed=>WebGUI::International::get(350)); $output = '

'.WebGUI::International::get(159).'

'; - $sth = WebGUI::SQL->read("select messageLogId,message,url,dateOfEntry from messageLog where userId=$session{user}{userId} order by dateOfEntry desc"); + $sth = WebGUI::SQL->read("select messageLogId,subject,url,dateOfEntry,status from messageLog where userId=$session{user}{userId} order by dateOfEntry desc"); while (@data = $sth->array) { $row[$i] = ''; + $row[$i] .= ''.$data[1].''; + $row[$i] .= ''; if ($data[2] ne "") { $data[2] = WebGUI::URL::append($data[2],'mlog='.$data[0]); $row[$i] .= ''; } - $row[$i] .= $data[1]; + $row[$i] .= $status{$data[4]}; if ($data[2] ne "") { $row[$i] .= ''; } - $row[$i] .= ''.epochToHuman($data[3],"%m/%d/%Y @ %H:%n%p").''; + $row[$i] .= ''.epochToHuman($data[3]).''; $i++; } $sth->finish; $p = WebGUI::Paginator->new(WebGUI::URL::page('op=viewMessageLog'),\@row); $output .= ''; - $output .= ''; + $output .= ' + + '; if ($p->getPage($session{form}{pn}) eq "") { $output .= ''; } else { @@ -598,6 +603,33 @@ sub www_viewMessageLog { return $output; } +#------------------------------------------------------------------- +sub www_viewMessageLogMessage { + my (%status, %data, $output, $sth, @row, $i, $p); + tie %data, 'Tie::CPHash'; + if (WebGUI::Privilege::isInGroup(2,$session{user}{userId})) { + %status = (notice=>WebGUI::International::get(551),pending=>WebGUI::International::get(552),completed=>WebGUI::International::get(350)); + $output = '

'.WebGUI::International::get(159).'

'; + %data = WebGUI::SQL->quickHash("select * from messageLog where messageLogId=$session{form}{mlog} and userId=$session{user}{userId}"); + $output .= ''.$data{subject}.'
'; + $output .= epochToHuman($data{dateOfEntry}).'
'; + if ($data{url} ne "" && $data{status} eq 'pending') { + $data{url} = WebGUI::URL::append($data{url},'mlog='.$data{messageLogId}); + $output .= ''; + } + $output .= $status{$data{status}}.'
'; + if ($data{url} ne "") { + $output .= '
'; + } + $output .= '
'.$data{message}.'

'; + $output .= ''.WebGUI::International::get(354).'

'; + $output .= _accountOptions(); + } else { + $output = WebGUI::Privilege::insufficient(); + } + return $output; +} + #------------------------------------------------------------------- sub www_viewProfile { my ($a, %data, $category, $label, $value, $previousCategory, $output, $u, %gender); diff --git a/lib/WebGUI/User.pm b/lib/WebGUI/User.pm index 2b9931af7..901fa7424 100644 --- a/lib/WebGUI/User.pm +++ b/lib/WebGUI/User.pm @@ -295,7 +295,7 @@ sub ldapURL { =cut sub new { - my ($class, $userId, %user, %profile); + my (%default, $class, $userId, %default, $value, $key, %user, %profile); tie %user, 'Tie::CPHash'; $class = shift; $userId = shift || 1; @@ -304,6 +304,17 @@ sub new { %profile = WebGUI::SQL->buildHash("select userProfileField.fieldName, userProfileData.fieldData from userProfileField, userProfileData where userProfileField.fieldName=userProfileData.fieldName and userProfileData.userId='$user{userId}'"); + # %default = WebGUI::SQL->buildHash("select fieldName, dataDefault from userProfileField where profileCategoryId=4"); + #foreach $key (keys %default) { + # if ($profile{$key} eq "") { + # $value = eval($default{$key}); + # if (ref $value eq "ARRAY") { + # $profile{$key} = $$value[0]; + # } else { + # $profile{$key} = $value; + # } + # } + #} bless {_userId => $userId, _user => \%user, _profile =>\%profile }, $class; } diff --git a/lib/WebGUI/Wobject/UserSubmission.pm b/lib/WebGUI/Wobject/UserSubmission.pm index ece7ce6db..2e7ad2361 100644 --- a/lib/WebGUI/Wobject/UserSubmission.pm +++ b/lib/WebGUI/Wobject/UserSubmission.pm @@ -265,7 +265,7 @@ sub www_approveSubmission { if (WebGUI::Privilege::isInGroup(4,$session{user}{userId}) || WebGUI::Privilege::isInGroup(3,$session{user}{userId})) { %submission = WebGUI::SQL->quickHash("select * from UserSubmission_submission where submissionId=$session{form}{sid}"); WebGUI::SQL->write("update UserSubmission_submission set status='Approved' where submissionId=$session{form}{sid}"); - WebGUI::MessageLog::addEntry($submission{userId},'',WebGUI::URL::page('func=viewSubmission&wid='. + WebGUI::MessageLog::addInternationalizedEntry($submission{userId},'',WebGUI::URL::page('func=viewSubmission&wid='. $session{form}{wid}.'&sid='.$session{form}{sid}),4,$namespace); WebGUI::MessageLog::completeEntry($session{form}{mlog}); return WebGUI::Operation::www_viewMessageLog(); @@ -363,7 +363,7 @@ sub www_denySubmission { if (WebGUI::Privilege::isInGroup(4,$session{user}{userId}) || WebGUI::Privilege::isInGroup(3,$session{user}{userId})) { %submission = WebGUI::SQL->quickHash("select * from UserSubmission_submission where submissionId=$session{form}{sid}"); WebGUI::SQL->write("update UserSubmission_submission set status='Denied' where submissionId=$session{form}{sid}"); - WebGUI::MessageLog::addEntry($submission{userId},'',WebGUI::URL::page('func=viewSubmission&wid='. + WebGUI::MessageLog::addInternationalizedEntry($submission{userId},'',WebGUI::URL::page('func=viewSubmission&wid='. $session{form}{wid}.'&sid='.$session{form}{sid}),5,$namespace); WebGUI::MessageLog::completeEntry($session{form}{mlog}); return WebGUI::Operation::www_viewMessageLog(); @@ -520,9 +520,9 @@ sub www_editSubmissionSave { status='".$_[0]->get("defaultStatus")."' where submissionId=$session{form}{sid}"); if ($_[0]->get("defaultStatus") ne "Approved") { - WebGUI::MessageLog::addEntry('',$_[0]->get("groupToApprove"), + WebGUI::MessageLog::addInternationalizedEntry('',$_[0]->get("groupToApprove"), WebGUI::URL::page('func=viewSubmission&wid='.$_[0]->get("wobjectId").'&sid='. - $session{form}{sid}),3,$namespace); + $session{form}{sid}),3,$namespace,'pending'); } return $_[0]->www_viewSubmission(); } else {

'.WebGUI::International::get(351).''.WebGUI::International::get(352).'
'.WebGUI::International::get(351).''.WebGUI::International::get(553).''.WebGUI::International::get(352).'
'.WebGUI::International::get(353).'