Diff for /loncom/interface/lonsyllabus.pm between versions 1.60 and 1.89

version 1.60, 2007/07/27 00:17:17 version 1.89, 2009/05/11 13:34:10
Line 29 Line 29
 package Apache::lonsyllabus;  package Apache::lonsyllabus;
   
 use strict;  use strict;
   use Apache::lontemplate;
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonnet;  use Apache::lonnet;
Line 68  sub handler { Line 69  sub handler {
   
     if ($target eq 'tex') {      if ($target eq 'tex') {
  $r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}));   $r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}));
     }       }
 # -------------------------------------------------- Let's see who handles this  # -------------------------------------------------- Let's see who handles this
     my $externalsyllabus=$courseenv{'externalsyllabus'};      my $externalsyllabus=$courseenv{'externalsyllabus'};
   
     if ($externalsyllabus=~/\w/) {      if ($externalsyllabus=~/\w/) {
   
        if ($env{'form.wrapperdisplay'} eq 'menu') {         if ($env{'form.wrapperdisplay'} eq 'menu') {
    $r->print(&Apache::lonwrapper::simple_menu());     $r->print(&Apache::lonwrapper::simple_menu());
        } else {             } else {
    $r->print(&Apache::lonwrapper::wrapper("/public/$cdom/$cnum/syllabus?wrapperdisplay=menu",     $r->print(&Apache::lonwrapper::wrapper("/public/$cdom/$cnum/syllabus?wrapperdisplay=menu",
    $externalsyllabus));     $externalsyllabus));
        }         }
        return OK;         return OK;
      }        }
   
 # ------------------------------ The buck stops here: internal syllabus display  # ------------------------------ The buck stops here: internal syllabus display
 # --------------------------------------------------------- The syllabus fields  # --------------------------------------------------------- The syllabus fields
Line 106  sub handler { Line 107  sub handler {
     if ($env{'form.forcestudent'}) { $forcestudent='student'; };      if ($env{'form.forcestudent'}) { $forcestudent='student'; };
     my $forceedit='';      my $forceedit='';
     if ($env{'form.forceedit'}) { $forceedit='edit'; }      if ($env{'form.forceedit'}) { $forceedit='edit'; }
          
 # ----------------------------------------------------------------- Make header   # ----------------------------------------------------------------- Make header
     if ($target ne 'tex') {      if ($target ne 'tex') {
  my $rss_link = &Apache::lonrss::rss_link($cnum,$cdom);   my $rss_link = &Apache::lonrss::rss_link($cnum,$cdom);
               my $js;
  my $start_page =           if ($env{'form.backto'} eq 'coursecatalog') {
     &Apache::loncommon::start_page("Syllabus", $rss_link,              $js .= <<"ENDSCRIPT";
   
   <script type="text/javascript">
   function ToCatalog(caller) {
       numidx = getIndexByName('coursenum');
       if (numidx > -1) {
           if (caller != 'details') {
               document.backtocat.elements[numidx].value = '';
           }
       }
       document.backtocat.submit();
   }
   
   function getIndexByName(item) {
       for (var i=0;i<document.backtocat.elements.length;i++) {
           if (document.backtocat.elements[i].name == item) {
               return i;
           }
       }
       return -1;
   }
   
   </script>
   
   ENDSCRIPT
           }
    my $start_page =
       &Apache::loncommon::start_page("Syllabus", $rss_link.$js,
    {'function'       => $forcestudent,     {'function'       => $forcestudent,
     'domain'         => $cdom,      'domain'         => $cdom,
     'force_register' =>      'force_register' =>
  $env{'form.register'},});   $env{'form.register'},});
   
  $r->print($start_page.'<h1>'.$courseenv{'description'}.'</h1><h3>'.   $r->print($start_page);
   &Apache::lonnet::domain($cdom,'description').'</h3>');          if ($env{'form.backto'} eq 'coursecatalog') {
     } else {              &Apache::lonhtmlcommon::clear_breadcrumbs();
  $r->print('\noindent{\large\textbf{'.$courseenv{'description'}.'}}\\\\\\\\\textbf{'.              &Apache::lonhtmlcommon::add_breadcrumb
   &Apache::lonnet::domain($cdom,'description').'}\\\\');               ({href=>"javascript:ToCatalog()",
     }                 text=>"Course Catalog"});
 # -------------------------------------------------------------- Announcements?              if ($env{'form.coursenum'} ne '') {
     my $day = &Apache::lonannounce::showday(time,2,                  &Apache::lonhtmlcommon::add_breadcrumb
  &Apache::lonannounce::readcalendar($cdom.'_'.$cnum));                    ({href=>"javascript:ToCatalog('details')",
     if ($target ne 'tex') {                     text=>"Course details"});
  $r->print($day. &Apache::lonrss::advertisefeeds($cnum,$cdom,$forceedit));              }
     } else {              &Apache::lonhtmlcommon::add_breadcrumb
  $r->print(&Apache::lonxml::xmlparse($r,'tex',$day));                ({href=>$r->uri,
     }                 text=>"Course syllabus"});
               $r->print(&Apache::lonhtmlcommon::breadcrumbs());
           }
   
 # -------------------------------------------------------- Get course personnel  
     my %coursepersonnel=&Apache::lonnet::get_course_adv_roles($cdom.'/'.$cnum);  
     if ($target ne 'tex') {  
  $r->print('<table border="2">');  
     } else {  
  $r->print('\begin{tabular}{|p{0.45\textwidth}|p{0.45\textwidth}|}\hline');  
     }  
     foreach my $element (sort keys %coursepersonnel) {  
  if ($target ne 'tex') {  
     $r->print('<tr><td>'.$element.'</td><td>');  
  } else {  
     $r->print(' '.&Apache::lonxml::xmlparse($r,'tex',$element).' & ');   
  }  
         foreach (split(/\,/,$coursepersonnel{$element})) {  
     my ($puname,$pudom)=split(/\:/,$_);  
     if ($target ne 'tex') {  
  $r->print(' '.&Apache::loncommon::aboutmewrapper(  
                               &Apache::loncommon::plainname($puname,  
                               $pudom),$puname,$pudom));  
     } else {  
  $r->print(' '.&Apache::loncommon::plainname($puname,  
                               $pudom).' ');  
     }  
  }  
  if ($target ne 'tex') {  
     $r->print('</td></tr>');  
  } else {  
     $r->print('\\\\ \hline');  
  }  
     }  
     if ($target ne 'tex') {  
  $r->print('</table>');  
     } else {  
  $r->print('\end{tabular}\\\\');  
     }      }
 # ---------------------------------------------------------- Load syllabus info  # ---------------------------------------------------------- Load syllabus info
     my %syllabus=&Apache::lonnet::dump('syllabus',$cdom,$cnum);      my %syllabus=&Apache::lonnet::dump('syllabus',$cdom,$cnum);
Line 187  sub handler { Line 183  sub handler {
   }    }
           if ($forcestudent or $target eq 'tex') { $allowed=0; }            if ($forcestudent or $target eq 'tex') { $allowed=0; }
        }         }
        if ($allowed) {  
           $r->print('<p>'.  
 &Apache::loncommon::help_open_topic('Uploaded_Templates_TextBoxes','Help with filling in text boxes').'</p><p>'.&mt('This syllabus can be publicly viewed at')  
     .' <tt>http://'.  
     &Apache::lonnet::hostname($homeserver).$r->uri.'</tt>'.  
                &Apache::loncommon::help_open_topic('Syllabus_ExtLink').'</p>'.  
           '<p>'.&mt('You can specify an external URL as Syllabus in the [_1].','<a href="/adm/parmset?action=crsenv">'.&mt('Course Parameters').'</a>').'</p>'.  
   '<p><a href="'.$r->uri.'?forcestudent=1"><font size="+1">'.  
 &mt('Show Public View').'</font></a>'.  
           &Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView').  
           '</p>');  
       } elsif ($privileged) {  
   if ($target ne 'tex') {  
       $r->print('<p><a href="'.$r->uri.'?forceedit=1"><font size="+1">'.  
  &mt('Edit').'</font></a>');   
   }  
       }  
        if (($allowed) && ($env{'form.storesyl'})) {         if (($allowed) && ($env{'form.storesyl'})) {
    foreach my $syl_field (keys(%syllabusfields)) {     foreach my $syl_field (keys(%syllabusfields)) {
                my $field=$env{'form.'.$syl_field};                 my $field=$env{'form.'.$syl_field};
Line 220  sub handler { Line 199  sub handler {
 # get rid of leading and trailing spaces  # get rid of leading and trailing spaces
                       $url=~s/^\s+//;                        $url=~s/^\s+//;
                       $url=~s/\s+$//;                        $url=~s/\s+$//;
                       if ($url=~m|^http://([^/]+)/(.+)$|) {                        if ($url=~m|^https?\://([^/]+)/(.+)$|) {
   my $host = $1;    my $host = $1;
                           my $remainder=$2;                            my $remainder=$2;
 # remove the hostname from internal URLs  # remove the hostname from internal URLs
Line 233  sub handler { Line 212  sub handler {
           }            }
       }        }
 # norm internal URLs  # norm internal URLs
                       unless ($url=~/^http\:/) {                        unless ($url=~/^https?\:/) {
           $url=&Apache::lonnet::clutter($url);            $url=&Apache::lonnet::clutter($url);
                       }                        }
 # re-assemble field  # re-assemble field
Line 250  sub handler { Line 229  sub handler {
            &Apache::lonnet::put('syllabus',\%syllabus,$cdom,$cnum);             &Apache::lonnet::put('syllabus',\%syllabus,$cdom,$cnum);
        }         }
     }      }
 # ---------------------------------------------------------------- Get syllabus  
     if (($syllabus{'uploaded.lastmodified'}) || ($allowed)) {  #---------------------Print External URL Syllabus Info
        my $lastmod=$syllabus{'uploaded.lastmodified'};  if( ($allowed) && ($target ne 'tex') ) {
    my $protocol = $Apache::lonnet::protocol{$homeserver};
     $protocol = 'http' if ($protocol ne 'https');
           $r->print('<p class="LC_info">'
                    .&mt('This syllabus can be publicly viewed at [_1]'
                        ,'<tt>'.$protocol.'://'.&Apache::lonnet::hostname($homeserver).$r->uri.'</tt>')
                    .'&nbsp;'.&Apache::loncommon::help_open_topic('Syllabus_ExtLink')
                    .'</p>'
                    .'<p class="LC_info">'
                    .&mt('Instead of using this template you can specify an external URL as Syllabus in the [_1]Course Parameters[_2].'
                        ,'<a href="/adm/parmset?action=crsenv">','</a>')
                    .'</p>'
           );
   }
   
   #-Print Help Text
   if ($target ne 'tex') {
    if ($allowed) {
    $r->print(&Apache::loncommon::help_open_topic('Uploaded_Templates_TextBoxes',&mt('Help with filling in text boxes')));
    }
   }
   #----------Print last update
    my $lastmod=$syllabus{'uploaded.lastmodified'};
        $lastmod=($lastmod?&Apache::lonlocal::locallocaltime($lastmod):&mt('never'));         $lastmod=($lastmod?&Apache::lonlocal::locallocaltime($lastmod):&mt('never'));
        my $who = &Apache::loncommon::aboutmewrapper(         my $who = &Apache::loncommon::aboutmewrapper(
                     &Apache::loncommon::plainname($syllabus{'uploaded.name'},                      &Apache::loncommon::plainname($syllabus{'uploaded.name'},
                      $syllabus{'uploaded.domain'}),$syllabus{'uploaded.name'},                       $syllabus{'uploaded.domain'}),$syllabus{'uploaded.name'},
                      $syllabus{'uploaded.domain'});                       $syllabus{'uploaded.domain'});
        if ($target ne 'tex') {   if ($target ne 'tex') {
    $r->print('<table><tr><td>'.&mt('Last updated').':</td><td>'.     $r->print('<div class="LC_info">'.&mt('Last updated').': '.
      $lastmod.'</td><td>'.&mt('by').' '.$who.       $lastmod . ' '.
      '</td></tr></table><p>');       ($who ? &mt('by').' '.$who
                              : '' ) .
                '</div>' );
   
        } else {         } else {
    $r->print('\\\\ '.&mt('Last updated').': '.$lastmod.' '.&mt('by').'\\\\ '.     $r->print('\\\\ '.&mt('Last updated').': '.$lastmod.' '.
      &Apache::loncommon::plainname($syllabus{'uploaded.name'},       ($who? &mt('by').'\\\\ '.
                      $syllabus{'uploaded.domain'}).'\\\\');              &Apache::loncommon::plainname($syllabus{'uploaded.name'},$syllabus{'uploaded.domain'})
             :'')
        .'\\\\');
        }         }
   #--------Functions
   if ($target ne 'tex') {
    if( $allowed || $privileged) {
                   $r->print(&Apache::lontemplate::start_functionslist());
    if ($allowed) {
                       $r->print(&Apache::lontemplate::item_functionslist(
                           '<a href="'.$r->uri.'?forcestudent=1">'.&mt('Show Public View').'</a>'
                          .&Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView')));
    } elsif ($privileged) {
                       $r->print(&Apache::lontemplate::item_functionslist(
                           '<a href="'.$r->uri.'?forceedit=1">'.&mt('Edit').'</a>'));
    }
                   $r->print(&Apache::lontemplate::end_functionslist());
    }
    }
   #----------------------------Print Headtitle
   if ($target ne 'tex') {
    $r->print('<h1>'.$courseenv{'description'}.'</h1>');
    $r->print('<h3>'.  &Apache::lonnet::domain($cdom,'description').'</h3>');
   } else {
    $r->print('\noindent{\large\textbf{'.$courseenv{'description'}.'}}\\\\\\\\\textbf{'.
    &Apache::lonnet::domain($cdom,'description').'}\\\\');
   }
   # -------------------------------------------------------- Get course personnel
       my %coursepersonnel=&Apache::lonnet::get_course_adv_roles($cdom.'/'.$cnum);
       if ($target ne 'tex') {
    $r->print(&Apache::lonhtmlcommon::start_pick_box());
       } else {
    $r->print('\begin{tabular}{|p{0.45\textwidth}|p{0.45\textwidth}|}\hline');
       }
       my @personnel=sort(keys(%coursepersonnel));
       my $lastpers=$personnel[$#personnel];
       foreach my $element (@personnel) {
    if ($target ne 'tex') {
       $r->print(&Apache::lonhtmlcommon::row_title($element));
    } else {
       $r->print(' '.&Apache::lonxml::xmlparse($r,'tex',$element).' & ');
    }
           foreach (split(/\,/,$coursepersonnel{$element})) {
       my ($puname,$pudom)=split(/\:/,$_);
       if ($target ne 'tex') {
                   my $courseperson = &Apache::loncommon::plainname($puname,$pudom);
                   if (($env{'user.name'} eq '') || ($env{'user.name'} eq 'public') ||
                       ($env{'user.domain'} eq '') || ($env{'user.domain'} eq 'public')) {
       $r->print(' '.$courseperson);
                   } else {
                       $r->print(' '.&Apache::loncommon::aboutmewrapper($courseperson,
                                 $puname,$pudom));
                   }
       } else {
    $r->print(' '.&Apache::loncommon::plainname($puname,
                                 $pudom).' ');
       }
    }
    if ($target ne 'tex') {
               my $lastclose=$element eq $lastpers?1:0;
               $r->print(&Apache::lonhtmlcommon::row_closure($lastclose));
    } else {
       $r->print('\\\\ \hline');
    }
       }
       if ($target ne 'tex') {
    $r->print(&Apache::lonhtmlcommon::end_pick_box());
       } else {
    $r->print('\end{tabular}\\\\');
       }
   # -------------------------------------------------------------- Announcements?
       my $day = &Apache::lonannounce::showday(time,2,
    &Apache::lonannounce::readcalendar($cdom.'_'.$cnum));
       if ($target ne 'tex') {
    if ($allowed) {
    &Apache::lontemplate::print_start_template($r,'RSS Feeds and Blogs','LC_ContentBoxSpecial');
    $r->print(&Apache::lonrss::advertisefeeds($cnum,$cdom,$forceedit));
    my $editurl= &Apache::lonnet::absolute_url().'/adm/'.$cdom.'/'.$cnum.'/_rss.html';
           $r->print( '<a href="'.$editurl.'">'.&mt('New RSS Feed or Blog').'</a>');
    &Apache::lontemplate::print_end_template($r);
    } elsif (&Apache::lonrss::advertisefeeds($cnum,$cdom) ne '') {
    &Apache::lontemplate::print_start_template($r,'RSS Feeds and Blogs','LC_ContentBoxSpecial');
    $r->print(&Apache::lonrss::advertisefeeds($cnum,$cdom,$forceedit));
    &Apache::lontemplate::print_end_template($r);
    }
   
       } else {
    $r->print(&Apache::lonxml::xmlparse($r,'tex',$day));
       }
   # ---------------------------------------------------------------- Get syllabus
       if (($syllabus{'uploaded.lastmodified'}) || ($allowed)) {
        if ($allowed) {         if ($allowed) {
    $r->print('<form method="post">'.     $r->print('<form method="post">'.
      '<input type="hidden" name="forceedit" value="edit" />');       '<input type="hidden" name="forceedit" value="edit" />');
        }         }
        my @htmlids=();         my @htmlids=();
        foreach my $field (sort(keys(%syllabusfields))) {  
    foreach my $field (sort(keys(%syllabusfields))) {
    if (($syllabus{$field}=~/\w/) || ($allowed)) {     if (($syllabus{$field}=~/\w/) || ($allowed)) {
        my $message=$syllabus{$field};         my $message=$syllabus{$field};
        if ($field eq 'lll_includeurl') { # this is the "included" field         if ($field eq 'lll_includeurl') { # this is the "included" field
Line 280  sub handler { Line 374  sub handler {
    $message='';     $message='';
    foreach my $filelink (split(/\n/,$urls)) {     foreach my $filelink (split(/\n/,$urls)) {
        my $output='';         my $output='';
 # embed style?   # embed style?
        my ($curfext)=($filelink=~/\.([^\.]+)$/);         my ($curfext)=($filelink=~/\.([^\.]+)$/);
        my $embstyle=&Apache::loncommon::fileembstyle($curfext);         my $embstyle=&Apache::loncommon::fileembstyle($curfext);
        if (($embstyle eq 'ssi') || ($curfext=~/\/$/)) {         if (($embstyle eq 'ssi') || ($curfext=~/\/$/)) {# make ssi call and remove everything but the body contents
 # make ssi call and remove everything but the body contents  
    $output=&Apache::lonnet::ssi_body($filelink);     $output=&Apache::lonnet::ssi_body($filelink);
        } elsif ($embstyle eq 'img') {         } elsif ($embstyle eq 'img') {# embed as an image
 # embed as an image  
    $output='<img src="'.$filelink.'" />';     $output='<img src="'.$filelink.'" />';
        }         }
        if ($target ne 'tex') {         if ($output ne '') {
    $message.='<p>'.$output.'</p>';         if ($target ne 'tex') {
        } else {     $message.='<p>'.$output.'</p>';
    $message.=' '.&Apache::lonxml::xmlparse($r,'tex','<p>'.$output.'</p>').' ';         } else {
        }           $message.=' '.&Apache::lonxml::xmlparse($r,'tex','<p>'.$output.'</p>').' ';
          }
    }
    }     }
    if ($allowed) {     if ($allowed) {
        $r->print('<h3>'.$syllabusfields{$field}.         $r->print('<h3>'.$syllabusfields{$field}.
  &Apache::loncommon::help_open_topic('Syllabus_URLs').'</h3>'.   &Apache::loncommon::help_open_topic('Syllabus_URLs').'</h3>');
  '<p><a href="'.$r->uri.'?forcestudent=1"><font size="+1">'.&mt('Show Public View').'</font></a>'.  
  &Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView').'</p>');  
    } else {     } else {
        $r->print($message);         $r->print($message);
    }      }
        } else {         } else {
    &Apache::lonfeedback::newline_to_br(\$message);     &Apache::lonfeedback::newline_to_br(\$message);
    $message =~s|(https*://[^\s]+)|<a href="$1"><tt>$1</tt></a>|g;     $message =~s|(https?\://[^\s]+)|<a href="$1"><tt>$1</tt></a>|g;
    if ($allowed) {     if ($allowed) {
        $message=&Apache::lonspeller::markeduptext($message);         $message=&Apache::lonspeller::markeduptext($message);
    }     }
    $message=&Apache::lontexconvert::msgtexconverted($message);     $message=&Apache::lontexconvert::msgtexconverted($message);
    if ($target ne 'tex') {     if ($target ne 'tex') {
        $r->print('<h3>'.$syllabusfields{$field}.'</h3><blockquote>'.   if ($allowed) {
  $message.'</blockquote>');   $r->print('<p>');
    }
    &Apache::lontemplate::print_template($r, $syllabusfields{$field}, $message,$allowed,'LC_ContentBoxSpecial');
    } else {     } else {
        $r->print('\\\\\textbf{'.$syllabusfields{$field}.'}\\\\'.         $r->print('\\\\\textbf{'.$syllabusfields{$field}.'}\\\\'.
  &Apache::lonxml::xmlparse($r,'tex',$message).'\\\\');   &Apache::lonxml::xmlparse($r,'tex',$message).'\\\\');
Line 321  sub handler { Line 415  sub handler {
    push(@htmlids,$field);     push(@htmlids,$field);
        }         }
        if ($allowed) {         if ($allowed) {
    $r->print('<br /><textarea cols="80" rows="12" name="'.$field.'" id="'.$field.'">'.   if ($target ne 'tex') {
      &HTML::Entities::encode($syllabus{$field},'"&<>').   $r->print('</p>');
      '</textarea> <input type="submit" name="storesyl" value="Save" />');   &Apache::lontemplate::print_editbox_template($r, $syllabus{$field}, $field);
    }
   
        }         }
    }     }
        }         }
   
        if ($allowed) {         if ($allowed) {
    $r->print('</form>'.     $r->print('</form>'.
      &Apache::lonhtmlcommon::htmlareaselectactive(@htmlids));       &Apache::lonhtmlcommon::htmlareaselectactive(@htmlids));
        }         }
        if ($target ne 'tex') {$r->print('</p>');} else {$r->print('\\\\');}        # if ($target ne 'tex') {$r->print('</p>');} else {$r->print('\\\\');}
     } else {      } else {
  if ($target ne 'tex') {$r->print('<p>');} else {$r->print('\par ');}    if ($target ne 'tex') {$r->print('<p>');} else {$r->print('\par ');}
  $r->print('No syllabus information provided.');   $r->print(&mt('No syllabus information provided.'));
  if ($target ne 'tex') {$r->print('</p>');}   if ($target ne 'tex') {$r->print('</p>');}
     }      }
     if ($target ne 'tex') {      if ($target ne 'tex') {
           if ($env{'form.backto'} eq 'coursecatalog') {
               $r->print('<form name="backtocat" method="post" action="/adm/coursecatalog">'.
                         &Apache::lonhtmlcommon::echo_form_input(['backto','courseid']).
                         '</form>');
           }
  $r->print(&Apache::loncommon::end_page());   $r->print(&Apache::loncommon::end_page());
     } else {      } else {
  $r->print('\end{document}');   $r->print('\end{document}');
     }      }
     return OK;      return OK;
 }   }
   
 1;  1;
 __END__  __END__

Removed from v.1.60  
changed lines
  Added in v.1.89


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.