Diff for /loncom/interface/loncommon.pm between versions 1.994 and 1.1021

version 1.994, 2011/01/05 18:39:38 version 1.1021, 2011/10/17 12:41:30
Line 409  sub studentbrowser_javascript { Line 409  sub studentbrowser_javascript {
 <script type="text/javascript" language="Javascript">  <script type="text/javascript" language="Javascript">
 // <![CDATA[  // <![CDATA[
     var stdeditbrowser;      var stdeditbrowser;
     function openstdbrowser(formname,uname,udom,roleflag,ignorefilter,courseadvonly) {      function openstdbrowser(formname,uname,udom,clicker,roleflag,ignorefilter,courseadvonly) {
         var url = '/adm/pickstudent?';          var url = '/adm/pickstudent?';
         var filter;          var filter;
  if (!ignorefilter) {   if (!ignorefilter) {
Line 421  sub studentbrowser_javascript { Line 421  sub studentbrowser_javascript {
    }     }
         }          }
         url += 'form=' + formname + '&unameelement='+uname+          url += 'form=' + formname + '&unameelement='+uname+
                                     '&udomelement='+udom;                                      '&udomelement='+udom+
                                       '&clicker='+clicker;
  if (roleflag) { url+="&roles=1"; }   if (roleflag) { url+="&roles=1"; }
         if (courseadvonly) { url+="&courseadvonly=1"; }          if (courseadvonly) { url+="&courseadvonly=1"; }
         var title = 'Student_Browser';          var title = 'Student_Browser';
Line 435  sub studentbrowser_javascript { Line 436  sub studentbrowser_javascript {
 ENDSTDBRW  ENDSTDBRW
 }  }
   
   sub resourcebrowser_javascript {
      unless ($env{'request.course.id'}) { return ''; }
      return (<<'ENDRESBRW');
   <script type="text/javascript" language="Javascript">
   // <![CDATA[
       var reseditbrowser;
       function openresbrowser(formname,reslink) {
           var url = '/adm/pickresource?form='+formname+'&reslink='+reslink;
           var title = 'Resource_Browser';
           var options = 'scrollbars=1,resizable=1,menubar=0';
           options += ',width=700,height=500';
           reseditbrowser = open(url,title,options,'1');
           reseditbrowser.focus();
       }
   // ]]>
   </script>
   ENDRESBRW
   }
   
 sub selectstudent_link {  sub selectstudent_link {
    my ($form,$unameele,$udomele,$courseadvonly)=@_;     my ($form,$unameele,$udomele,$courseadvonly,$clickerid)=@_;
    my $callargs = "'".$form."','".$unameele."','".$udomele."'";     my $callargs = "'".&Apache::lonhtmlcommon::entity_encode($form)."','".
                         &Apache::lonhtmlcommon::entity_encode($unameele)."','".
                         &Apache::lonhtmlcommon::entity_encode($udomele)."'";
    if ($env{'request.course.id'}) {       if ($env{'request.course.id'}) {  
        if (!&Apache::lonnet::allowed('srm',$env{'request.course.id'})         if (!&Apache::lonnet::allowed('srm',$env{'request.course.id'})
    && !&Apache::lonnet::allowed('srm',$env{'request.course.id'}.     && !&Apache::lonnet::allowed('srm',$env{'request.course.id'}.
  '/'.$env{'request.course.sec'})) {   '/'.$env{'request.course.sec'})) {
    return '';     return '';
        }         }
          $callargs.=",'".&Apache::lonhtmlcommon::entity_encode($clickerid)."'";
        if ($courseadvonly)  {         if ($courseadvonly)  {
            $callargs .= ",'',1,1";             $callargs .= ",'',1,1";
        }         }
Line 452  sub selectstudent_link { Line 475  sub selectstudent_link {
               &mt('Select User').'</a></span>';                &mt('Select User').'</a></span>';
    }     }
    if ($env{'request.role'}=~/^(au|dc|su)/) {     if ($env{'request.role'}=~/^(au|dc|su)/) {
        $callargs .= ",1";          $callargs .= ",'',1"; 
        return '<span class="LC_nobreak">'.         return '<span class="LC_nobreak">'.
               '<a href="javascript:openstdbrowser('.$callargs.');">'.                '<a href="javascript:openstdbrowser('.$callargs.');">'.
               &mt('Select User').'</a></span>';                &mt('Select User').'</a></span>';
Line 460  sub selectstudent_link { Line 483  sub selectstudent_link {
    return '';     return '';
 }  }
   
   sub selectresource_link {
      my ($form,$reslink,$arg)=@_;
      
      my $callargs = "'".&Apache::lonhtmlcommon::entity_encode($form)."','".
                         &Apache::lonhtmlcommon::entity_encode($reslink)."'";
      unless ($env{'request.course.id'}) { return $arg; }
      return '<span class="LC_nobreak">'.
                 '<a href="javascript:openresbrowser('.$callargs.');">'.
                 $arg.'</a></span>';
   }
   
   
   
 sub authorbrowser_javascript {  sub authorbrowser_javascript {
     return <<"ENDAUTHORBRW";      return <<"ENDAUTHORBRW";
 <script type="text/javascript" language="JavaScript">  <script type="text/javascript" language="JavaScript">
Line 596  ENDJS Line 632  ENDJS
   
 }  }
   
   sub javascript_array_indexof {
       return <<ENDJS;
   <script type="text/javascript" language="JavaScript">
   // <![CDATA[
   
   if (!Array.prototype.indexOf) {
       Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
           "use strict";
           if (this === void 0 || this === null) {
               throw new TypeError();
           }
           var t = Object(this);
           var len = t.length >>> 0;
           if (len === 0) {
               return -1;
           }
           var n = 0;
           if (arguments.length > 0) {
               n = Number(arguments[1]);
               if (n !== n) { // shortcut for verifying if it's NaN
                   n = 0;
               } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
                   n = (n > 0 || -1) * Math.floor(Math.abs(n));
               }
           }
           if (n >= len) {
               return -1;
           }
           var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
           for (; k < len; k++) {
               if (k in t && t[k] === searchElement) {
                   return k;
               }
           }
           return -1;
       }
   }
   
   // ]]>
   </script>
   
   ENDJS
   
   }
   
 sub userbrowser_javascript {  sub userbrowser_javascript {
     my $id_functions = &javascript_index_functions();      my $id_functions = &javascript_index_functions();
     return <<"ENDUSERBRW";      return <<"ENDUSERBRW";
Line 766  sub selectcourse_link { Line 847  sub selectcourse_link {
    } elsif ($selecttype eq 'Course/Community') {     } elsif ($selecttype eq 'Course/Community') {
        $linktext = &mt('Select Course/Community');         $linktext = &mt('Select Course/Community');
        $type = '';         $type = '';
      } elsif ($selecttype eq 'Select') {
          $linktext = &mt('Select');
          $type = '';
    }     }
    return '<span class="LC_nobreak">'     return '<span class="LC_nobreak">'
          ."<a href='"           ."<a href='"
Line 1722  sub create_workbook { Line 1806  sub create_workbook {
         return (undef);          return (undef);
     }      }
     #      #
     $workbook->set_tempdir('/home/httpd/perl/tmp');      $workbook->set_tempdir(LONCAPA::tempdir());
     #      #
     my $format = &Apache::loncommon::define_excel_formats($workbook);      my $format = &Apache::loncommon::define_excel_formats($workbook);
     return ($workbook,$filename,$format);      return ($workbook,$filename,$format);
Line 3423  sub get_previous_attempt { Line 3507  sub get_previous_attempt {
   my $data=$parts[-1];    my $data=$parts[-1];
           next if ($data eq 'foilorder');            next if ($data eq 'foilorder');
   pop(@parts);    pop(@parts);
             $prevattempts.='<th>'.&mt('Part ').join('.',@parts).'<br />'.$data.'&nbsp;</th>';
           if ($data eq 'type') {            if ($data eq 'type') {
               unless ($showsurv) {                unless ($showsurv) {
                   my $id = join(',',@parts);                    my $id = join(',',@parts);
Line 3431  sub get_previous_attempt { Line 3516  sub get_previous_attempt {
                       $lasthidden{$ign.'.'.$id} = 1;                        $lasthidden{$ign.'.'.$id} = 1;
                   }                    }
               }                }
               delete($lasthash{$key});            } 
           } else {  
       $prevattempts.='<th>'.&mt('Part ').join('.',@parts).'<br />'.$data.'&nbsp;</th>';  
           }  
  } else {   } else {
   if ($#parts == 0) {    if ($#parts == 0) {
     $prevattempts.='<th>'.$parts[0].'</th>';      $prevattempts.='<th>'.$parts[0].'</th>';
Line 3551  sub get_previous_attempt { Line 3633  sub get_previous_attempt {
   
 sub format_previous_attempt_value {  sub format_previous_attempt_value {
     my ($key,$value) = @_;      my ($key,$value) = @_;
     if ($key =~ /timestamp/) {      if (($key =~ /timestamp/) || ($key=~/duedate/)) {
  $value = &Apache::lonlocal::locallocaltime($value);   $value = &Apache::lonlocal::locallocaltime($value);
     } elsif (ref($value) eq 'ARRAY') {      } elsif (ref($value) eq 'ARRAY') {
  $value = '('.join(', ', @{ $value }).')';   $value = '('.join(', ', @{ $value }).')';
Line 3560  sub format_previous_attempt_value { Line 3642  sub format_previous_attempt_value {
         my @anskeys = sort(keys(%answers));          my @anskeys = sort(keys(%answers));
         if (@anskeys == 1) {          if (@anskeys == 1) {
             my $answer = $answers{$anskeys[0]};              my $answer = $answers{$anskeys[0]};
             if ($answer =~ m{\Q\0\E}) {              if ($answer =~ m{\0}) {
                 $answer =~ s{\Q\0\E}{, }g;                  $answer =~ s{\0}{,}g;
             }              }
             my $tag_internal_answer_name = 'INTERNAL';              my $tag_internal_answer_name = 'INTERNAL';
             if ($anskeys[0] eq $tag_internal_answer_name) {              if ($anskeys[0] eq $tag_internal_answer_name) {
Line 3572  sub format_previous_attempt_value { Line 3654  sub format_previous_attempt_value {
         } else {          } else {
             foreach my $ans (@anskeys) {              foreach my $ans (@anskeys) {
                 my $answer = $answers{$ans};                  my $answer = $answers{$ans};
                 if ($answer =~ m{\Q\0\E}) {                  if ($answer =~ m{\0}) {
                     $answer =~ s{\Q\0\E}{, }g;                      $answer =~ s{\0}{,}g;
                 }                  }
                 $value .=  $ans.'='.$answer.'<br />';;                  $value .=  $ans.'='.$answer.'<br />';;
             }               } 
Line 4272  sub get_domainconf { Line 4354  sub get_domainconf {
                     if (ref($domconfig{'login'}{$key}) eq 'HASH') {                      if (ref($domconfig{'login'}{$key}) eq 'HASH') {
                         if ($key eq 'loginvia') {                          if ($key eq 'loginvia') {
                             if (ref($domconfig{'login'}{'loginvia'}) eq 'HASH') {                              if (ref($domconfig{'login'}{'loginvia'}) eq 'HASH') {
                                 my @ids = &Apache::lonnet::current_machine_ids();                                  foreach my $hostname (keys(%{$domconfig{'login'}{'loginvia'}})) {
                                 foreach my $hostname (@ids) {  
                                     if (ref($domconfig{'login'}{'loginvia'}{$hostname}) eq 'HASH') {                                      if (ref($domconfig{'login'}{'loginvia'}{$hostname}) eq 'HASH') {
                                         if ($domconfig{'login'}{'loginvia'}{$hostname}{'server'}) {                                          if ($domconfig{'login'}{'loginvia'}{$hostname}{'server'}) {
                                             my $server = $domconfig{'login'}{'loginvia'}{$hostname}{'server'};                                              my $server = $domconfig{'login'}{'loginvia'}{$hostname}{'server'};
Line 4282  sub get_domainconf { Line 4363  sub get_domainconf {
   
                                                 $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'custompath'};                                                  $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'custompath'};
                                             } else {                                              } else {
                                                  $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'};                                                  $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'};
                                             }                                              }
                                             if ($domconfig{'login'}{'loginvia'}{$hostname}{'exempt'}) {                                              if ($domconfig{'login'}{'loginvia'}{$hostname}{'exempt'}) {
                                                 $designhash{$udom.'.login.loginvia_exempt_'.$hostname} = $domconfig{'login'}{'loginvia'}{$hostname}{'exempt'};                                                  $designhash{$udom.'.login.loginvia_exempt_'.$hostname} = $domconfig{'login'}{'loginvia'}{$hostname}{'exempt'};
Line 4423  sub designparm { Line 4504  sub designparm {
         return $env{'environment.color.'.$which};          return $env{'environment.color.'.$which};
     }      }
     $domain=&determinedomain($domain);      $domain=&determinedomain($domain);
     my %domdesign = &get_domainconf($domain);      my %domdesign;
       unless ($domain eq 'public') {
           %domdesign = &get_domainconf($domain);
       }
     my $output;      my $output;
     if ($domdesign{$domain.'.'.$which} ne '') {      if ($domdesign{$domain.'.'.$which} ne '') {
         $output = $domdesign{$domain.'.'.$which};          $output = $domdesign{$domain.'.'.$which};
Line 4925  form, .inline { Line 5009  form, .inline {
   text-decoration:none;    text-decoration:none;
 }  }
   
   .LC_setting {
     text-decoration:underline;
   }
   
 .LC_error {  .LC_error {
   color: red;    color: red;
   font-size: larger;    font-size: larger;
Line 5089  td.LC_table_cell_checkbox { Line 5177  td.LC_table_cell_checkbox {
   overflow: hidden;    overflow: hidden;
   margin: 0;    margin: 0;
   padding: 0;    padding: 0;
     text-align: left;
 }  }
   
 .LC_head_subbox {  .LC_head_subbox {
Line 5097  td.LC_table_cell_checkbox { Line 5186  td.LC_table_cell_checkbox {
   border: 1px solid $sidebg;    border: 1px solid $sidebg;
   margin: 0 0 10px 0;          margin: 0 0 10px 0;      
   padding: 3px;    padding: 3px;
     text-align: left;
 }  }
   
 .LC_fontsize_medium {  .LC_fontsize_medium {
Line 5119  td.LC_table_cell_checkbox { Line 5209  td.LC_table_cell_checkbox {
   
 li.LC_menubuttons_inline_text img,a {  li.LC_menubuttons_inline_text img,a {
   cursor:pointer;    cursor:pointer;
     text-decoration: none;
 }  }
   
 .LC_menubuttons_link {  .LC_menubuttons_link {
Line 5166  table.LC_nested { Line 5257  table.LC_nested {
   width: 100%;    width: 100%;
 }  }
   
 .ui-accordion,  
 .ui-accordion table.LC_data_table,  
 .ui-accordion table.LC_nested_outer{  
   border: 0px;  
   border-spacing: 0px;  
   margin: 3px;  
 }  
   
 table.LC_data_table tr th,  table.LC_data_table tr th,
 table.LC_calendar tr th,  table.LC_calendar tr th,
 table.LC_prior_tries tr th,  table.LC_prior_tries tr th,
Line 5289  table.LC_nested tr td.LC_right_item { Line 5372  table.LC_nested tr td.LC_right_item {
   text-align: right;    text-align: right;
 }  }
   
 .ui-accordion table.LC_nested tr.LC_odd_row td.LC_left_item,  
 .ui-accordion table.LC_nested tr.LC_even_row td.LC_left_item {  
   text-align: right;  
   width: 40%;  
   padding-right:10px;  
   vertical-align: top;  
   padding: 5px;  
 }  
   
 .ui-accordion table.LC_nested tr.LC_odd_row td.LC_right_item,  
 .ui-accordion table.LC_nested tr.LC_even_row td.LC_right_item {  
   text-align: left;  
   width: 60%;  
   padding: 2px 4px;  
 }  
   
 table.LC_nested tr.LC_odd_row td {  table.LC_nested tr.LC_odd_row td {
   background-color: #EEEEEE;    background-color: #EEEEEE;
 }  }
Line 6064  fieldset > legend { Line 6131  fieldset > legend {
   
 #LC_nav_bar {  #LC_nav_bar {
   float: left;    float: left;
     background-color: $pgbg_or_bgcolor;
   margin: 0 0 2px 0;    margin: 0 0 2px 0;
 }  }
   
Line 6072  fieldset > legend { Line 6140  fieldset > legend {
   padding: 0;    padding: 0;
   font-weight: bold;    font-weight: bold;
   text-align: center;    text-align: center;
     background-color: $pgbg_or_bgcolor;
 }  }
   
 #LC_nav_bar em {  #LC_nav_bar em {
Line 6082  fieldset > legend { Line 6151  fieldset > legend {
 ol.LC_primary_menu {  ol.LC_primary_menu {
   float: right;    float: right;
   margin: 0;    margin: 0;
     background-color: $pgbg_or_bgcolor;
 }  }
   
 ol#LC_PathBreadcrumbs {  ol#LC_PathBreadcrumbs {
Line 6141  ul#LC_secondary_menu { Line 6211  ul#LC_secondary_menu {
   padding: 0;    padding: 0;
   margin: 0;    margin: 0;
   width: 100%;    width: 100%;
     text-align: left;
 }  }
   
 ul#LC_secondary_menu li {  ul#LC_secondary_menu li {
Line 6157  ul.LC_TabContent { Line 6228  ul.LC_TabContent {
   background: $sidebg;    background: $sidebg;
   border-bottom: solid 1px $lg_border_color;    border-bottom: solid 1px $lg_border_color;
   list-style:none;    list-style:none;
   margin: 0 -10px;    margin: -1px -10px 0 -10px;
   padding: 0;    padding: 0;
 }  }
   
Line 6180  ul.LC_TabContent li { Line 6251  ul.LC_TabContent li {
   padding: 0 16px 0 10px;    padding: 0 16px 0 10px;
   background-color:$tabbg;    background-color:$tabbg;
   border-bottom:solid 1px $lg_border_color;    border-bottom:solid 1px $lg_border_color;
   border-right: solid 1px $font;    border-left: solid 1px $font;
 }  }
   
 ul.LC_TabContent .right {  ul.LC_TabContent .right {
Line 6274  ul.LC_TabContentBigger li.active b { Line 6345  ul.LC_TabContentBigger li.active b {
   background:url('/adm/lonIcons/tabbgright.gif') right top no-repeat;    background:url('/adm/lonIcons/tabbgright.gif') right top no-repeat;
   color:$font;    color:$font;
   border: 0;    border: 0;
   cursor:default;  
 }  }
   
   
 ul.LC_CourseBreadcrumbs {  ul.LC_CourseBreadcrumbs {
   background: $sidebg;    background: $sidebg;
   line-height: 32px;    height: 2em;
   padding-left: 10px;    padding-left: 10px;
   margin: 0 0 10px 0;    margin: 0;
   list-style-position: inside;    list-style-position: inside;
   
 }  }
   
 ol#LC_MenuBreadcrumbs,  ol#LC_MenuBreadcrumbs,
Line 6326  ol#LC_PathBreadcrumbs li a { Line 6395  ol#LC_PathBreadcrumbs li a {
   padding: 0 10px 10px 10px;    padding: 0 10px 10px 10px;
 }  }
   
   .LC_DocsBox {
     border: solid 1px $lg_border_color;
     padding: 0 0 10px 10px;
   }
   
 .LC_AboutMe_Image {  .LC_AboutMe_Image {
   float:left;    float:left;
   margin-right:10px;    margin-right:10px;
Line 6530  ul.LC_funclist li { Line 6604  ul.LC_funclist li {
   line-height: 150%;    line-height: 150%;
 }  }
   
 .ui-accordion .LC_advanced_toggle {  
   float: right;  
   font-size: 90%;  
   padding: 0px 4px  
 }  
   
 .LC_hidden {  .LC_hidden {
   display: none;    display: none;
 }  }
Line 6877  sub validate_page { Line 6945  sub validate_page {
     }      }
 }  }
   
   
   sub start_scrollbox {
       my ($outerwidth,$width,$height,$id)=@_;
       unless ($outerwidth) { $outerwidth='520px'; }
       unless ($width) { $width='500px'; }
       unless ($height) { $height='200px'; }
       my ($table_id,$div_id);
       if ($id ne '') {
           $table_id = " id='table_$id'";
           $div_id = " id='div_$id'";
       }
       return "<table style='width: $outerwidth; border: 1px solid none;'$table_id><tr><td style='width: $width;' bgcolor='#FFFFFF'><div style='overflow:auto; width:$width; height: $height;'$div_id>";
   }
   
   sub end_scrollbox {
       return '</td></tr></table>';
   }
   
 sub simple_error_page {  sub simple_error_page {
     my ($r,$title,$msg) = @_;      my ($r,$title,$msg) = @_;
     my $page =      my $page =
Line 6904  sub simple_error_page { Line 6990  sub simple_error_page {
     }      }
   
     sub start_data_table {      sub start_data_table {
  my ($add_class) = @_;   my ($add_class,$id) = @_;
  my $css_class = (join(' ','LC_data_table',$add_class));   my $css_class = (join(' ','LC_data_table',$add_class));
           my $table_id;
           if (defined($id)) {
               $table_id = ' id="'.$id.'"';
           }
  &start_data_table_count();   &start_data_table_count();
  return '<table class="'.$css_class.'">'."\n";   return '<table class="'.$css_class.'"'.$table_id.'>'."\n";
     }      }
   
     sub end_data_table {      sub end_data_table {
Line 8409  sub ask_for_embedded_content { Line 8499  sub ask_for_embedded_content {
     foreach my $path (keys(%subdependencies)) {      foreach my $path (keys(%subdependencies)) {
         my %currsubfile;          my %currsubfile;
         if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {           if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) { 
             my @subdir_list = &Apache::lonnet::dirlist($url.$path,$udom,$uname,$getpropath);              my ($sublistref,$listerror) =
             foreach my $line (@subdir_list) {                  &Apache::lonnet::dirlist($url.$path,$udom,$uname,$getpropath);
                 my ($file_name,$rest) = split(/\&/,$line,2);              if (ref($sublistref) eq 'ARRAY') {
                 $currsubfile{$file_name} = 1;                  foreach my $line (@{$sublistref}) {
                       my ($file_name,$rest) = split(/\&/,$line,2);
                       $currsubfile{$file_name} = 1;
                   }
             }              }
         } elsif (($actionurl eq '/adm/upload') || ($actionurl eq '/adm/testbank')) {          } elsif (($actionurl eq '/adm/upload') || ($actionurl eq '/adm/testbank')) {
             if (opendir(my $dir,$url.'/'.$path)) {              if (opendir(my $dir,$url.'/'.$path)) {
Line 8435  sub ask_for_embedded_content { Line 8528  sub ask_for_embedded_content {
     }      }
     my %currfile;      my %currfile;
     if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {      if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {
         my @dir_list = &Apache::lonnet::dirlist($url,$udom,$uname,$getpropath);          my ($dirlistref,$listerror) =
         foreach my $line (@dir_list) {              &Apache::lonnet::dirlist($url,$udom,$uname,$getpropath);
             my ($file_name,$rest) = split(/\&/,$line,2);          if (ref($dirlistref) eq 'ARRAY') {
             $currfile{$file_name} = 1;              foreach my $line (@{$dirlistref}) {
                   my ($file_name,$rest) = split(/\&/,$line,2);
                   $currfile{$file_name} = 1;
               }
         }          }
     } elsif (($actionurl eq '/adm/upload') || ($actionurl eq '/adm/testbank')) {      } elsif (($actionurl eq '/adm/upload') || ($actionurl eq '/adm/testbank')) {
         if (opendir(my $dir,$url)) {          if (opendir(my $dir,$url)) {
Line 8874  sub modify_html_refs { Line 8970  sub modify_html_refs {
                 if ($allfiles{$ref}) {                  if ($allfiles{$ref}) {
                     my $newname =  $orig;                      my $newname =  $orig;
                     my ($attrib_regexp,$codebase);                      my ($attrib_regexp,$codebase);
                     my $attrib_regexp = &unescape($env{'form.embedded_attrib_'.$i});                      $attrib_regexp = &unescape($env{'form.embedded_attrib_'.$i});
                     if ($attrib_regexp =~ /:/) {                      if ($attrib_regexp =~ /:/) {
                         $attrib_regexp =~ s/\:/|/g;                          $attrib_regexp =~ s/\:/|/g;
                     }                      }
Line 8883  sub modify_html_refs { Line 8979  sub modify_html_refs {
                         $count += $numchg;                          $count += $numchg;
                     }                      }
                     if ($env{'form.embedded_codebase_'.$i} ne '') {                      if ($env{'form.embedded_codebase_'.$i} ne '') {
                         my $codebase = &unescape($env{'form.embedded_codebase_'.$i});                          $codebase = &unescape($env{'form.embedded_codebase_'.$i});
                         my $numchg = ($content =~ s/(codebase\s*=\s*["']?)\Q$codebase\E(["']?)/$1.$2/i); #' stupid emacs                          my $numchg = ($content =~ s/(codebase\s*=\s*["']?)\Q$codebase\E(["']?)/$1.$2/i); #' stupid emacs
                         $codebasecount ++;                          $codebasecount ++;
                     }                      }
Line 8952  sub check_for_upload { Line 9048  sub check_for_upload {
                   &mt('Unable to upload [_1]. (size = [_2] bytes)',                     &mt('Unable to upload [_1]. (size = [_2] bytes)', 
                       '<span class="LC_filename">'.$fname.'</span>',                        '<span class="LC_filename">'.$fname.'</span>',
                       $filesize).'<br />'.                        $filesize).'<br />'.
                   &mt('Either the file you attempted to upload was empty, or your web browser was unable to read its contents.').'<br />';                    &mt('Either the file you attempted to upload was empty, or your web browser was unable to read its contents.').'<br />'.
                   '</span>';                    '</span>';
         return ('zero_bytes',$msg);          return ('zero_bytes',$msg);
     }      }
     $filesize =  $filesize/1000; #express in k (1024?)      $filesize =  $filesize/1000; #express in k (1024?)
     my $getpropath = 1;      my $getpropath = 1;
     my @dir_list = &Apache::lonnet::dirlist($portfolio_root.$path,$udom,$uname,      my ($dirlistref,$listerror) =
                                             $getpropath);           &Apache::lonnet::dirlist($portfolio_root.$path,$udom,$uname,$getpropath);
     my $found_file = 0;      my $found_file = 0;
     my $locked_file = 0;      my $locked_file = 0;
     my @lockers;      my @lockers;
Line 8967  sub check_for_upload { Line 9063  sub check_for_upload {
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
         $navmap = Apache::lonnavmaps::navmap->new();          $navmap = Apache::lonnavmaps::navmap->new();
     }      }
     foreach my $line (@dir_list) {      if (ref($dirlistref) eq 'ARRAY') {
         my ($file_name,$rest)=split(/\&/,$line,2);          foreach my $line (@{$dirlistref}) {
         if ($file_name eq $fname){              my ($file_name,$rest)=split(/\&/,$line,2);
             $file_name = $path.$file_name;              if ($file_name eq $fname){
             if ($group ne '') {                  $file_name = $path.$file_name;
                 $file_name = $group.$file_name;                  if ($group ne '') {
             }                      $file_name = $group.$file_name;
             $found_file = 1;                  }
             if (&Apache::lonnet::is_locked($file_name,$udom,$uname,\@lockers) eq 'true') {                  $found_file = 1;
                 foreach my $lock (@lockers) {                  if (&Apache::lonnet::is_locked($file_name,$udom,$uname,\@lockers) eq 'true') {
                     if (ref($lock) eq 'ARRAY') {                      foreach my $lock (@lockers) {
                         my ($symb,$crsid) = @{$lock};                          if (ref($lock) eq 'ARRAY') {
                         if ($crsid eq $env{'request.course.id'}) {                              my ($symb,$crsid) = @{$lock};
                             if (ref($navmap)) {                              if ($crsid eq $env{'request.course.id'}) {
                                 my $res = $navmap->getBySymb($symb);                                  if (ref($navmap)) {
                                 foreach my $part (@{$res->parts()}) {                                       my $res = $navmap->getBySymb($symb);
                                     my ($slot_status,$slot_time,$slot_name)=$res->check_for_slot($part);                                      foreach my $part (@{$res->parts()}) { 
                                     unless (($slot_status == $res->RESERVED) ||                                          my ($slot_status,$slot_time,$slot_name)=$res->check_for_slot($part);
                                             ($slot_status == $res->RESERVED_LOCATION)) {                                          unless (($slot_status == $res->RESERVED) ||
                                         $locked_file = 1;                                                  ($slot_status == $res->RESERVED_LOCATION)) {
                                               $locked_file = 1;
                                           }
                                     }                                      }
                                   } else {
                                       $locked_file = 1;
                                 }                                  }
                             } else {                              } else {
                                 $locked_file = 1;                                  $locked_file = 1;
                             }                              }
                         } else {  
                             $locked_file = 1;  
                         }                          }
                     }                     }
                 }                  } else {
             } else {                      my @info = split(/\&/,$rest);
                 my @info = split(/\&/,$rest);                      my $currsize = $info[6]/1000;
                 my $currsize = $info[6]/1000;                      if ($currsize < $filesize) {
                 if ($currsize < $filesize) {                          my $extra = $filesize - $currsize;
                     my $extra = $filesize - $currsize;                          if (($current_disk_usage + $extra) > $disk_quota) {
                     if (($current_disk_usage + $extra) > $disk_quota) {                              my $msg = '<span class="LC_error">'.
                         my $msg = '<span class="LC_error">'.                                        &mt('Unable to upload [_1]. (size = [_2] kilobytes). Disk quota will be exceeded if existing (smaller) file with same name (size = [_3] kilobytes) is replaced.',
                                   &mt('Unable to upload [_1]. (size = [_2] kilobytes). Disk quota will be exceeded if existing (smaller) file with same name (size = [_3] kilobytes) is replaced.',                                            '<span class="LC_filename">'.$fname.'</span>',$filesize,$currsize).'</span>'.
                                       '<span class="LC_filename">'.$fname.'</span>',$filesize,$currsize).'</span>'.                                        '<br />'.&mt('Disk quota is [_1] kilobytes. Your current disk usage is [_2] kilobytes.',
                                   '<br />'.&mt('Disk quota is [_1] kilobytes. Your current disk usage is [_2] kilobytes.',                                                     $disk_quota,$current_disk_usage);
                                                $disk_quota,$current_disk_usage);                              return ('will_exceed_quota',$msg);
                         return ('will_exceed_quota',$msg);                          }
                     }                      }
                 }                  }
             }              }
Line 9080  sub check_for_traversal { Line 9178  sub check_for_traversal {
   
 =pod  =pod
   
   =item * &get_turnedin_filepath()
   
   Determines path in a user's portfolio file for storage of files uploaded
   to a specific essayresponse or dropbox item.
   
   Inputs: 3 required + 1 optional.
   $symb is symb for resource, $uname and $udom are for current user (required).
   $caller is optional (can be "submission", if routine is called when storing
   an upoaded file when "Submit Answer" button was pressed).
   
   Returns array containing $path and $multiresp. 
   $path is path in portfolio.  $multiresp is 1 if this resource contains more
   than one file upload item.  Callers of routine should append partid as a 
   subdirectory to $path in cases where $multiresp is 1.
   
   Called by: homework/essayresponse.pm and homework/structuretags.pm
   
   =cut
   
   sub get_turnedin_filepath {
       my ($symb,$uname,$udom,$caller) = @_;
       my ($map,$resid,$resurl)=&Apache::lonnet::decode_symb($symb);
       my $turnindir;
       my %userhash = &Apache::lonnet::userenvironment($udom,$uname,'turnindir');
       $turnindir = $userhash{'turnindir'};
       my ($path,$multiresp);
       if ($turnindir eq '') {
           if ($caller eq 'submission') {
               $turnindir = &mt('turned in');
               $turnindir =~ s/\W+/_/g;
               my %newhash = (
                               'turnindir' => $turnindir,
                             );
               &Apache::lonnet::put('environment',\%newhash,$udom,$uname);
           }
       }
       if ($turnindir ne '') {
           $path = '/'.$turnindir.'/';
           my ($multipart,$turnin,@pathitems);
           my $navmap = Apache::lonnavmaps::navmap->new();
           if (defined($navmap)) {
               my $mapres = $navmap->getResourceByUrl($map);
               if (ref($mapres)) {
                   my $pcslist = $mapres->map_hierarchy();
                   if ($pcslist ne '') {
                       foreach my $pc (split(/,/,$pcslist)) {
                           my $res = $navmap->getByMapPc($pc);
                           if (ref($res)) {
                               my $title = $res->compTitle();
                               $title =~ s/\W+/_/g;
                               if ($title ne '') {
                                   push(@pathitems,$title);
                               }
                           }
                       }
                   }
                   my $maptitle = $mapres->compTitle();
                   $maptitle =~ s/\W+/_/g;
                   if ($maptitle ne '') {
                       push(@pathitems,$maptitle);
                   }
                   unless ($env{'request.state'} eq 'construct') {
                       my $res = $navmap->getBySymb($symb);
                       if (ref($res)) {
                           my $partlist = $res->parts();
                           my $totaluploads = 0;
                           if (ref($partlist) eq 'ARRAY') {
                               foreach my $part (@{$partlist}) {
                                   my @types = $res->responseType($part);
                                   my @ids = $res->responseIds($part);
                                   for (my $i=0; $i < scalar(@ids); $i++) {
                                       if ($types[$i] eq 'essay') {
                                           my $partid = $part.'_'.$ids[$i];
                                           if (&Apache::lonnet::EXT("resource.$partid.uploadedfiletypes") ne '') {
                                               $totaluploads ++;
                                           }
                                       }
                                   }
                               }
                               if ($totaluploads > 1) {
                                   $multiresp = 1;
                               }
                           }
                       }
                   }
               } else {
                   return;
               }
           } else {
               return;
           }
           my $restitle=&Apache::lonnet::gettitle($symb);
           $restitle =~ s/\W+/_/g;
           if ($restitle eq '') {
               $restitle = ($resurl =~ m{/[^/]+$});
               if ($restitle eq '') {
                   $restitle = time;
               }
           }
           push(@pathitems,$restitle);
           $path .= join('/',@pathitems);
       }
       return ($path,$multiresp);
   }
   
   =pod
   
 =back  =back
   
 =head1 CSV Upload/Handling functions  =head1 CSV Upload/Handling functions
Line 11210  sub init_user_environment { Line 11415  sub init_user_environment {
  }   }
   
         my %is_adv = ( is_adv => $env{'user.adv'} );          my %is_adv = ( is_adv => $env{'user.adv'} );
         my %domdef = &Apache::lonnet::get_domain_defaults($domain);          my %domdef;
           unless ($domain eq 'public') {
               %domdef = &Apache::lonnet::get_domain_defaults($domain);
           }
   
         foreach my $tool ('aboutme','blog','portfolio') {          foreach my $tool ('aboutme','blog','portfolio') {
             $userenv{'availabletools.'.$tool} =               $userenv{'availabletools.'.$tool} = 

Removed from v.1.994  
changed lines
  Added in v.1.1021


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