Annotation of modules/gci/Autoreport.pl, revision 1.1

1.1     ! gci         1: #!/usr/bin/perl
        !             2: #
        !             3: # Automated Report Availability 
        !             4: #
        !             5: # $Id: Autoreport.pl,v 1.1 2009/01/10 21:35:12 raeburn Exp $
        !             6: # Run as www. Call this from an entry in /etc/cron.d/loncapa
        !             7: #
        !             8: # www /home/httpd/perl/Autoreport.pl
        !             9: #
        !            10: 
        !            11:     use strict;
        !            12:     use lib '/home/httpd/lib/perl';
        !            13:     use Apache::lonnet;
        !            14:     use Apache::loncommon;
        !            15:     use Apache::lonmsg;
        !            16:     use Apache::lonlocal;
        !            17:     use LONCAPA::Configuration;
        !            18:     use LONCAPA qw(:DEFAULT :match);
        !            19: 
        !            20: # Determine the library server's domain and hostID
        !            21:     my $perlvarref = &LONCAPA::Configuration::read_conf('loncapa.conf');
        !            22:     my $logfile = $$perlvarref{'lonDaemons'}.'/logs/autoreport.log';
        !            23:     my @hostids = &Apache::lonnet::current_machine_ids();
        !            24: 
        !            25: # Determine the present time;
        !            26:     my $now = time();
        !            27:     my $output;
        !            28:     $env{'user.domain'} = 'gci';
        !            29:     # Initialize language handler
        !            30:     &Apache::lonlocal::get_language_handle();
        !            31:     # Determine the courses
        !            32:     my %courses = 
        !            33:         &Apache::lonnet::courseiddump('gcitest','.',1,'.','.','.',1,\@hostids,'Course');
        !            34:     foreach my $key (sort(keys(%courses))) {
        !            35:         my %args = (
        !            36:                      one_time => 1,
        !            37:                    );
        !            38: # Get course settings
        !            39:         my %settings = &Apache::lonnet::coursedescription($key,\%args);
        !            40:         my $cnum = $settings{'num'};
        !            41:         next if ($settings{'domain'} ne 'gcitest');
        !            42:         next if ($settings{'internal.autoreportmailsent'});
        !            43:         my $courseopt=&Apache::lonnet::get_courseresdata($cnum,'gcitest');
        !            44:         my $duedate = $courseopt->{$key.'.0.duedate'};
        !            45:         my %courseenv;
        !            46:         if ($duedate < $now) {
        !            47:             my $numsent = &send_message($settings{'internal.courseowner'},
        !            48:                                      $settings{'description'},$cnum,'gcitest');
        !            49:             $output .= &mt('[quant,_1,message] sent with statistics link for concept test: [_2] owned by [_3].',$numsent,$settings{'description'}.' ('.$cnum.':gcitest)',$settings{'internal.courseowner'})."\n";
        !            50:             $courseenv{'internal.autoreportmailsent'} = 1;
        !            51:             my $putresult = &Apache::lonnet::put('environment',\%courseenv,'gcitest',$cnum);
        !            52:             if ($putresult eq 'ok') {
        !            53:                 $output .= &mt('autoreportmailsent item set to [_1] for [_2].',$courseenv{'internal.autoreportmailsent'},$settings{'description'}.' ('.$cnum.':gcitest)')."\n\n";
        !            54:             } else {
        !            55:                 $output .= &mt('An error - [_1] occurred storing autoreportmailsent in the course environment for [_2].',$putresult,$settings{'description'}.' ('.$cnum.':gcitest)')."\n\n";
        !            56:             }
        !            57:         }
        !            58:     }
        !            59:     delete($env{'user.domain'});
        !            60:     if ($output) {
        !            61:         if (open (my $fh,">>$logfile")) {
        !            62:             print $fh "********************\n".localtime(time)." Autoreport messages start --\n".$output."-- ".localtime(time).' '.&mt('Autoreport messages end')."\n*******************\n\n";
        !            63:             close($fh);
        !            64:         }
        !            65:     }
        !            66: 
        !            67: sub send_message {
        !            68:     my ($owner,$cdesc,$cnum,$dom) = @_;
        !            69:     my ($ownername,$ownerdom) = split(':',$owner);
        !            70:     my $numsent = 0;
        !            71:     if (($ownername =~ /^$match_username$/) &&
        !            72:         ($ownerdom =~ /^$match_domain$/)) {
        !            73:         $env{'form.can_reply'} = 'N';
        !            74:         $env{'user.name'} = $ownername;
        !            75:         $env{'user.domain'} = $ownerdom;
        !            76:         $env{'user.home'} = &Apache::lonnet::homeserver($env{'user.name'},$env{'user.domain'});
        !            77:         $env{'request.course.id'} = $dom.'_'.$cnum;
        !            78:         my $subject = &mt('GCI Concept Test Report in [_1]',$cdesc);
        !            79:         my $message = &mt('Aggregated test performance data are available from the Overall Statistics Page of your GCI Concept Test: [_1]:',$cdesc).'<br /><br />'."\n\n".
        !            80:                       &mt('The following link will take you to the statistics page for the Concept Test: ').'<br /><br />'."\n\n".
        !            81:                       'http://jefferson.lite.msu.edu/adm/login?username='.$ownername.'&symb=%2fadm%2fstatistics&role=cc.%2f'.$dom.'%2f'.$cnum."\n\n";
        !            82:         my @recusers;
        !            83:         my @recudoms;
        !            84:         my %cc_hash = &Apache::lonnet::get_my_roles($cnum,$dom,'','',['cc']);
        !            85:         my @to_notify;
        !            86:         my $msgcc = {};
        !            87:         foreach my $key (keys(%cc_hash)) {
        !            88:             if ($key =~ /^($match_username:$match_domain):cc$/) {
        !            89:                 my $cc = $1;
        !            90:                 unless (grep(/^\Q$cc\E/,@to_notify)) {
        !            91:                     push(@to_notify,$cc);
        !            92:                 }
        !            93:             }
        !            94:         }
        !            95:         if (@to_notify) {
        !            96:             foreach my $cc (@to_notify) {
        !            97:                 my ($ccname,$ccdom) = split(/:/,$cc);
        !            98:                 unless((grep(/^\Q$ccname\E$/,@recusers)) && (grep(/^\Q$ccdom\E$/,@recudoms))) {
        !            99:                     push(@recusers,$ccname);
        !           100:                     push(@recudoms,$ccdom);
        !           101:                     $msgcc->{$ccname.':'.$ccdom}='';
        !           102:                     $numsent ++;
        !           103:                 }
        !           104:             }
        !           105:         }
        !           106:         if ($numsent) {
        !           107:             my %reciphash = (
        !           108:                              cc => $msgcc,
        !           109:                             );
        !           110:             my %sentmessage;
        !           111:             my $stamp = time;
        !           112:             my $msgcount = &Apache::lonmsg::get_uniq();
        !           113:             &Apache::lonmsg::process_sent_mail($subject,'',$numsent,$stamp,$env{'user.name'},$env{'user.domain'},$msgcount,$cnum,$$,$message,\@recusers,\@recudoms);
        !           114:             my ($recipid,$recipstatus) =
        !           115:                 &Apache::lonmsg::store_recipients($subject,
        !           116:                     $env{'user.name'},$env{'user.domain'},\%reciphash);
        !           117:             foreach my $recip (sort(keys(%{$msgcc}))) {
        !           118:                 my ($ccname,$ccdom) = split(/:/,$recip);
        !           119:                 my $status =
        !           120:                     &Apache::lonmsg::user_normal_msg($ccname,$ccdom,$subject,$message,undef,undef,undef,1,\%sentmessage,undef,undef,undef,1,$recipid);
        !           121:             }
        !           122:             delete($env{'form.can_reply'});
        !           123:         }
        !           124:         delete($env{'user.name'});
        !           125:         delete($env{'user.home'});
        !           126:         delete($env{'request.course.id'});
        !           127:     }
        !           128:     return $numsent;
        !           129: }
        !           130: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>