Diff for /loncom/interface/lonfeedback.pm between versions 1.320 and 1.321

version 1.320, 2012/01/04 20:12:40 version 1.321, 2012/01/04 23:31:36
Line 2821  sub getfeedbackrecords { Line 2821  sub getfeedbackrecords {
   
 sub getfeedbackstats {  sub getfeedbackstats {
     my %record=&getfeedbackrecords(@_);      my %record=&getfeedbackrecords(@_);
     my $subnumber=$record{'subnumber'};      return ($record{'subnumber'},$record{'points'},$record{'totallikes'});
     my $points=0;  
     my $likes=0;  
     foreach my $key (keys(%record)) {  
         if ($key=~/^\d+\:points$/) {  
             $points+=$record{$key};  
         }  
         if ($key=~/^\d+\:likes$/) {  
             $likes+=$record{$key};  
         }  
     }  
     return ($subnumber,$points,$likes);  
 }  }
   
 # Store feedback credit  # Store feedback credit
Line 2859  sub storefeedbacklikes { Line 2848  sub storefeedbacklikes {
     unless ($uname) { $uname=$env{'user.name'}; }      unless ($uname) { $uname=$env{'user.name'}; }
     unless ($udom)  { $udom=$env{'user.domain'}; }      unless ($udom)  { $udom=$env{'user.domain'}; }
     unless ($course) { $course=$env{'request.course.id'}; }      unless ($course) { $course=$env{'request.course.id'}; }
     my %record=('likes_user'   => $env{'user.name'},      my %record=&getfeedbackrecords($uname,$udom,$course);
                 'likes_domain' => $env{'user.domain'},      my $totallikes=$record{'totallikes'};
                 'likes' => $likes);      $totallikes+=$likes;
     return &Apache::lonnet::cstore(\%record,'_feedback');      my %newrecord=('likes_user'   => $env{'user.name'},
                      'likes_domain' => $env{'user.domain'},
                      'likes' => $likes,
                      'totallikes' => $totallikes);
       return &Apache::lonnet::cstore(\%newrecord,'_feedback');
 }  }
   
   
Line 2964  sub adddiscuss { Line 2957  sub adddiscuss {
                      $env{'course.'.$env{'request.course.id'}.'.domain'},                       $env{'course.'.$env{'request.course.id'}.'.domain'},
      $env{'course.'.$env{'request.course.id'}.'.num'});       $env{'course.'.$env{'request.course.id'}.'.num'});
     }      }
     my %record=&Apache::lonnet::restore('_discussion');      my %record=&getdiscussionrecords();
     my ($temp)=keys(%record);      my ($temp)=keys(%record);
     unless ($temp=~/^error\:/) {      unless ($temp=~/^error\:/) {
        my %newrecord=();         my %newrecord=();
Line 2979  sub adddiscuss { Line 2972  sub adddiscuss {
     return $status.'<br />';         return $status.'<br />';   
 }  }
   
   
   # Routine to get the complete discussion records
   
   sub getdiscussionrecords {
       my ($uname,$udom,$course)=@_;
       unless ($uname) { $uname=$env{'user.name'}; }
       unless ($udom)  { $udom=$env{'user.domain'}; }
       unless ($course) { $course=$env{'request.course.id'}; }
       my %record=&Apache::lonnet::restore('_discussion',$course,$udom,$uname);
       return %record;
   }
   
   # Routine to get discussion statistics
   
   sub getdiscussionstats {
       my %record=&getdiscussionrecords(@_);
       return ($record{'subnumber'},$record{'points'},$record{'totallikes'});
   }
   
   
   # Store discussion credit
   
   sub storediscussionpoints {
       my ($points,$uname,$udom,$course)=@_;
       unless ($points) { $points=0; }
       unless ($uname) { $uname=$env{'user.name'}; }
       unless ($udom)  { $udom=$env{'user.domain'}; }
       unless ($course) { $course=$env{'request.course.id'}; }
       my %record=('grader_user'   => $env{'user.name'},
                   'grader_domain' => $env{'user.domain'},
                   'points' => $points);
       return &Apache::lonnet::cstore(\%record,'_discussion');
   }
   
   # Store discussion "likes"
   
   sub storediscussionlikes {
       my ($likes,$uname,$udom,$course)=@_;
       unless ($likes) { $likes=0; }
       if ($likes>0) { $likes=1; }
       if ($likes<0) { $likes=-1; }
       unless ($uname) { $uname=$env{'user.name'}; }
       unless ($udom)  { $udom=$env{'user.domain'}; }
       unless ($course) { $course=$env{'request.course.id'}; }
       my %record=&getdiscussionrecords($uname,$udom,$course);
       my $totallikes=$record{'totallikes'};
       $totallikes+=$likes;
       my %newrecord=('likes_user'   => $env{'user.name'},
                      'likes_domain' => $env{'user.domain'},
                      'likes' => $likes,
                      'totallikes' => $totallikes);
       return &Apache::lonnet::cstore(\%newrecord,'_discussion');
   }
   
 sub get_discussion_info {  sub get_discussion_info {
     my ($idx,%contrib) = @_;      my ($idx,%contrib) = @_;
     my $changelast = 0;      my $changelast = 0;
Line 3782  ENDREDIR Line 3829  ENDREDIR
      '0','0','','',$env{'form.previous'},undef,undef,undef,       '0','0','','',$env{'form.previous'},undef,undef,undef,
                      undef,undef,undef,$group);                       undef,undef,undef,$group);
       return OK;        return OK;
     } elsif (($env{'form.like'}) || ($env{'form.unlike'})) {
   # ----------------------------------------------------------------- Like/unlike
         my $entry=$env{'form.like'}?$env{'form.like'}:$env{'form.unlike'};
         my ($symb,$idx)=split(/\:\:\:/,$entry);
         ($symb,my $feedurl)=&get_feedurl_and_clean_symb($symb);
         my %contrib=&Apache::lonnet::restore($symb,$env{'request.course.id'},
                             $env{'course.'.$env{'request.course.id'}.'.domain'},
                             $env{'course.'.$env{'request.course.id'}.'.num'});
   # Get all who like or unlike this
         my $currentlikers=$contrib{$idx.':likers'};
         my $currentunlikers=$contrib{$idx.':unlikers'};
         my $likes=$contrib{$idx.':likes'};
   # Find out if they already voted
         my $alreadyflag=0;
         my $thisuser=$env{'user.name'}.':'.$env{'user.domain'};
         if ($env{'form.like'}) {
             if ($currentlikers=~/\.\Q$thisuser\E\./) {
                 $alreadyflag=1;
             } else {
                 $currentunlikers=~s/\.\Q$thisuser\E\.//;
                 $currentlikers.='.'.$thisuser.'.';
                 $likes++;
             } 
         } else {
             if ($currentunlikers=~/\.\Q$thisuser\E\./) {
                 $alreadyflag=1;
             } else {
                 $currentlikers=~s/\.\Q$thisuser\E\.//;
                 $currentunlikers.='.'.$thisuser.'.';
                 $likes--;
             } 
         }
         my $result;
         unless ($alreadyflag) {
             my %newhash=($idx.':likes'    => $likes,
                          $idx.':likers'   => $currentlikers,
                          $idx.':unlikers' => $currentunlikers);
             if (&Apache::lonnet::store(\%newhash,$symb,$env{'request.course.id'},
                              $env{'course.'.$env{'request.course.id'}.'.domain'},
                              $env{'course.'.$env{'request.course.id'}.'.num'}) eq 'ok') {
                 if ($env{'form.like'}) {
                     &storediscussionlikes(1,$contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'});
                     $result=&mt("Registered 'Like'");
                 } else {
                     &storediscussionlikes(-1,$contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'});
                     $result=&mt("Registered 'Unlike'");
                 }
             } else {
                 $result=&mt("Failed to register vote");
             }
         }
         &redirect_back($r,$feedurl,$result.'<br />',
                        '0','0','','',$env{'form.previous'},undef,undef,undef,
                        undef,undef,undef,$group);
         return OK;
   } elsif ($env{'form.cmd'}=~/^(threadedoff|threadedon)$/) {    } elsif ($env{'form.cmd'}=~/^(threadedoff|threadedon)$/) {
       my ($symb,$feedurl)=&get_feedurl_and_clean_symb($env{'form.symb'});        my ($symb,$feedurl)=&get_feedurl_and_clean_symb($env{'form.symb'});
       if ($env{'form.cmd'} eq 'threadedon') {        if ($env{'form.cmd'} eq 'threadedon') {

Removed from v.1.320  
changed lines
  Added in v.1.321


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