Diff for /loncom/interface/lonmeta.pm between versions 1.149 and 1.158

version 1.149, 2005/12/29 19:42:44 version 1.158, 2006/05/31 17:44:14
Line 39  use Apache::lonpublisher; Line 39  use Apache::lonpublisher;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonmysql;  use Apache::lonmysql;
 use Apache::lonmsg;  use Apache::lonmsg;
   use lib '/home/httpd/lib/perl/';
   use LONCAPA;
   
   
 ############################################################  ############################################################
Line 71  sub get_dynamic_metadata_from_sql { Line 73  sub get_dynamic_metadata_from_sql {
     if (! defined($authordom) || ! defined($author)) {      if (! defined($authordom) || ! defined($author)) {
         return ();          return ();
     }      }
     my @Fields = ('url','count','course',      my $query = 'SELECT * FROM metadata WHERE url LIKE "'.$url.'%"';
                   'goto','goto_list',  
                   'comefrom','comefrom_list',  
                   'sequsage','sequsage_list',  
                   'stdno','stdno_list',  
   'dependencies',  
                   'avetries','avetries_list',  
                   'difficulty','difficulty_list',  
                   'disc','disc_list',  
                   'clear','technical','correct',  
                   'helpful','depth');  
     #  
     my $query = 'SELECT '.join(',',@Fields).  
         ' FROM metadata WHERE url LIKE "'.$url.'%"';  
     my $server = &Apache::lonnet::homeserver($author,$authordom);      my $server = &Apache::lonnet::homeserver($author,$authordom);
     my $reply = &Apache::lonnet::metadata_query($query,undef,undef,      my $reply = &Apache::lonnet::metadata_query($query,undef,undef,
                                                 ,[$server]);                                                  ,[$server]);
Line 106  sub get_dynamic_metadata_from_sql { Line 95  sub get_dynamic_metadata_from_sql {
         while (my $result = <$fh>) {          while (my $result = <$fh>) {
             chomp($result);              chomp($result);
             next if (! $result);              next if (! $result);
             my @Data =               my %hash=&LONCAPA::lonmetadata::metadata_col_to_hash(map { &unescape($_) } split(/\,/,$result));
                 map {               foreach my $key (keys(%hash)) {
                     &Apache::lonnet::unescape($_);                   $ReturnHash{$hash{'url'}}->{$key}=$hash{$key};
                 } split(',',$result);  
             my $url = $Data[0];  
             for (my $i=0;$i<=$#Fields;$i++) {  
                 $ReturnHash{$url}->{$Fields[$i]}=$Data[$i];  
             }              }
         }          }
         $finished = 1;          $finished = 1;
Line 296  sub fieldnames { Line 281  sub fieldnames {
 }  }
   
 sub portfolio_linked_path {  sub portfolio_linked_path {
     my ($path) = @_;      my ($path,$group,$port_path) = @_;
     my $result = &Apache::portfolio::make_anchor('portfolio','/');  
       my $start = 'portfolio';
       if ($group) {
    $start = "groups/$group/".$start;
       }
       my $result = &Apache::portfolio::make_anchor($port_path,$start,'/',
    undef,undef,undef,$group);
       
     my $fullpath = '/';      my $fullpath = '/';
     my (undef,@tree) = split('/',$path);      my (undef,@tree) = split('/',$path);
     my $filename = pop(@tree);      my $filename = pop(@tree);
     foreach my $dir (@tree) {      foreach my $dir (@tree) {
  $fullpath .= $dir.'/';   $fullpath .= $dir.'/';
  $result .= '/';   $result .= '/';
  $result .= &Apache::portfolio::make_anchor($dir,$fullpath);   $result .= &Apache::portfolio::make_anchor($port_path,$dir,$fullpath,
      undef,undef,undef,$group);
     }      }
     $result .= "/$filename";      $result .= "/$filename";
     return $result;      return $result;
 }  }
   
   sub get_port_path_and_group {
       my ($uri)=@_;
   
       my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
       my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
   
       my ($port_path,$group);
       if ($uri =~ m{^/editupload/\Q$cdom\E/\Q$cnum\E/groups/}) {
    $group = (split('/',$uri))[5];
    $port_path = '/adm/coursegrp_portfolio';
       } else {
    $port_path = '/adm/portfolio';
       }
       return ($port_path,$group);
   }
   
 sub portfolio_display_uri {  sub portfolio_display_uri {
     my ($uri,$as_links)=@_;      my ($uri,$as_links)=@_;
   
       my ($port_path,$group) = &get_port_path_and_group($uri);
   
     $uri =~ s|.*/(portfolio/.*)$|$1|;      $uri =~ s|.*/(portfolio/.*)$|$1|;
     my ($res_uri,$meta_uri) = ($uri,$uri);      my ($res_uri,$meta_uri) = ($uri,$uri);
   
     if ($uri =~ /\.meta$/) {      if ($uri =~ /\.meta$/) {
  $res_uri =~ s/\.meta//;   $res_uri =~ s/\.meta//;
     } else {      } else {
Line 322  sub portfolio_display_uri { Line 333  sub portfolio_display_uri {
     }      }
   
     my ($path) = ($res_uri =~ m|^portfolio(.*/)[^/]*$|);      my ($path) = ($res_uri =~ m|^portfolio(.*/)[^/]*$|);
   
     if ($as_links) {      if ($as_links) {
  $res_uri = &portfolio_linked_path($res_uri);   $res_uri = &portfolio_linked_path($res_uri,$group,$port_path);
  $meta_uri = &portfolio_linked_path($meta_uri);   $meta_uri = &portfolio_linked_path($meta_uri,$group,$port_path);
     }      }
     return ($res_uri,$meta_uri,$path);      return ($res_uri,$meta_uri,$path);
 }  }
Line 350  sub pre_select_course { Line 360  sub pre_select_course {
                   &mt('Associate Resource With Selected Course').'">');                    &mt('Associate Resource With Selected Course').'">');
     $r->print('</form>');      $r->print('</form>');
           
     $r->print('<br /><br /><form method="POST" action="/adm/portfolio">'.      my ($port_path,$group) = &get_port_path_and_group($uri);
       $r->print('<br /><br /><form method="POST" action="'.$port_path.'">'.
               '<input type="hidden" name="currentpath" value="'.$path.'" />'.                '<input type="hidden" name="currentpath" value="'.$path.'" />'.
         '<input type="hidden" name="group" value="'.$group.'" />'.
       '<input type="submit" name="cancel" value="'.&mt('Cancel').'">'.        '<input type="submit" name="cancel" value="'.&mt('Cancel').'">'.
       '</form>');        '</form>');
   
     return;      return;
 }  }
 sub select_course {  sub select_course {
     my %courses;      my $output=$/;
     my $output;      my $current_restriction=
     my $selected;   $Apache::lonpublisher::metadatafields{'courserestricted'};
     foreach my $key (keys(%env)) {       my $selected = ($current_restriction eq 'none' ? 'selected="selected"' 
         if ($key =~ m/\.metadata\./) {                                     : '');
             $key =~ m/^course\.(.+)(\.metadata.+$)/;  
             my $course = $1;  
             my $coursekey = 'course.'.$course.'.description';  
             my $value = $env{$coursekey};  
             $courses{$coursekey} = $value;  
         }  
     }  
     my $meta_not_found = 1;  
     if ($Apache::lonpublisher::metadatafields{'courserestricted'} eq 'none') {  
         $selected = ' SELECTED ';  
     } else {  
         $selected = '';  
     }  
     $output .= '<select name="new_courserestricted" >';      $output .= '<select name="new_courserestricted" >';
     $output .= '<option value="none" '.$selected.'>None</option>';      $output .= '<option value="none" '.$selected.'>'.
     foreach my $key (keys (%courses)) {       &mt('None').'</option>'.$/;
         $key =~ m/(^.+)\.description$/;      my %courses;
         if ($Apache::lonpublisher::metadatafields{'courserestricted'} eq $1) {      foreach my $key (keys(%env)) {
             $selected = ' SELECTED ';          if ($key !~ m/^course\.(.+)\.description$/) { next; }
         } else {   my $cid = $1;
             $selected = '';          if ($env{$key} !~ /\S/) { next; }
         }   $courses{$key} = $cid;
         $output .= '<option value="'.$1.'"'.$selected.'>';      }
         $output .= $courses{$key};      foreach my $key (sort { lc($env{$a}) cmp lc($env{$b}) } (keys(%courses))) {
         $output .= '</option>';   my $cid = 'course.'.$courses{$key};
    my $selected = ($current_restriction eq $cid ? 'selected="selected"' 
                                        : '');
           if ($env{$key} !~ /\S/) { next; }
    $output .= '<option value="'.$cid.'" '.$selected.'>';
    $output .= $env{$key};
    $output .= '</option>'.$/;
    $selected = '';
     }      }
     $output .= '</select><br />';      $output .= '</select><br />';
     return ($output);      return ($output);
Line 452  sub prettyprint { Line 459  sub prettyprint {
  ($type eq 'comefrom_list') ||   ($type eq 'comefrom_list') ||
  ($type eq 'sequsage_list') ||   ($type eq 'sequsage_list') ||
  ($type eq 'dependencies')) {   ($type eq 'dependencies')) {
  return '<ul><font size="-1">'.join("\n",map {   return '<font size="-1"><ul>'.join("\n",map {
             my $url = &Apache::lonnet::clutter($_);              my $url = &Apache::lonnet::clutter($_);
             my $title = &Apache::lonnet::gettitle($url);              my $title = &Apache::lonnet::gettitle($url);
             if ($title eq '') {              if ($title eq '') {
Line 489  sub prettyprint { Line 496  sub prettyprint {
     # List of courses      # List of courses
     if ($type=~/\_list/) {      if ($type=~/\_list/) {
         my @Courses = split(/\s*\,\s*/,$value);          my @Courses = split(/\s*\,\s*/,$value);
         my $Str;          my $Str='<font size="-1"><ul>';
         foreach my $course (@Courses) {          foreach my $course (@Courses) {
             my %courseinfo = &Apache::lonnet::coursedescription($course);              my %courseinfo =
    &Apache::lonnet::coursedescription($course,
      {'one_time' => 1});
             if (! exists($courseinfo{'num'}) || $courseinfo{'num'} eq '') {              if (! exists($courseinfo{'num'}) || $courseinfo{'num'} eq '') {
                 next;                  next;
             }              }
             if ($Str ne '') { $Str .= '<br />'; }              $Str .= '<li><a href="/public/'.$courseinfo{'domain'}.'/'.
             $Str .= '<a href="/public/'.$courseinfo{'domain'}.'/'.  
                 $courseinfo{'num'}.'/syllabus" target="preview">'.                  $courseinfo{'num'}.'/syllabus" target="preview">'.
                 $courseinfo{'description'}.'</a>';                  $courseinfo{'description'}.'</a></li>';
         }          }
  return $Str;   return $Str.'</ul></font>';
     }      }
     # No pretty print found      # No pretty print found
     return $value;      return $value;
Line 549  sub prettyinput { Line 557  sub prettyinput {
         $size = 80;          $size = 80;
     }      }
     my $output;      my $output;
     if (defined($course_key)) {      if (defined($course_key) 
    && exists($env{$course_key.'.metadata.'.$type.'.options'})) {
         my $stu_add;          my $stu_add;
         my $only_one;          my $only_one;
         my %meta_options;          my %meta_options;
Line 706  sub handler { Line 715  sub handler {
     #      #
     my ($resdomain,$resuser)=      my ($resdomain,$resuser)=
         (&Apache::lonnet::declutter($uri)=~/^(\w+)\/(\w+)\//);          (&Apache::lonnet::declutter($uri)=~/^(\w+)\/(\w+)\//);
     my $html=&Apache::lonxml::xmlbegin();  
     $r->print($html.'<head><title>'.  
               'Catalog Information'.  
               '</title></head>');  
     if ($uri=~m:/adm/bombs/(.*)$:) {      if ($uri=~m:/adm/bombs/(.*)$:) {
         $r->print(&Apache::loncommon::bodytag('Error Messages'));          $r->print(&Apache::loncommon::start_page('Error Messages'));
         # Looking for all bombs?          # Looking for all bombs?
         &report_bombs($r,$uri);          &report_bombs($r,$uri);
     } elsif ($uri=~/\/portfolio\//) {      } elsif ($uri=~/\/portfolio\//) {
     ($resdomain,$resuser)=      ($resdomain,$resuser)=
     (&Apache::lonnet::declutter($uri)=~m|^(\w+)/(\w+)/portfolio|);      (&Apache::lonnet::declutter($uri)=~m|^(\w+)/(\w+)/portfolio|);
         $r->print(&Apache::loncommon::bodytag          $r->print(&Apache::loncommon::start_page('Edit Portfolio File Catalog Information',
           ('Edit Portfolio File Information','','','',$resdomain));   undef,
    {'domain' => $resdomain,}));
         if ($env{'form.store'}) {          if ($env{'form.store'}) {
             &present_editable_metadata($r,$uri,'portfolio');              &present_editable_metadata($r,$uri,'portfolio');
         } else {          } else {
Line 726  sub handler { Line 733  sub handler {
         }          }
     } elsif ($uri=~/^\/\~/) {       } elsif ($uri=~/^\/\~/) { 
         # Construction space          # Construction space
         $r->print(&Apache::loncommon::bodytag          $r->print(&Apache::loncommon::start_page('Edit Catalog nformation',
                   ('Edit Catalog Information','','','',$resdomain));   undef,
    {'domain' => $resdomain,}));
         &present_editable_metadata($r,$uri);          &present_editable_metadata($r,$uri);
     } else {      } else {
         $r->print(&Apache::loncommon::bodytag          $r->print(&Apache::loncommon::start_page('Catalog Information',
   ('Catalog Information','','','',$resdomain));   undef,
    {'domain' => $resdomain,}));
         &present_uneditable_metadata($r,$uri);          &present_uneditable_metadata($r,$uri);
     }      }
     $r->print('</body></html>');      $r->print(&Apache::loncommon::end_page());
     return OK;      return OK;
 }  }
   
Line 798  sub present_uneditable_metadata { Line 807  sub present_uneditable_metadata {
     my ($thisversion)=($uri=~/\.(\d+)\.(\w+)\.meta$/);      my ($thisversion)=($uri=~/\.(\d+)\.(\w+)\.meta$/);
     $uri=~s/\.meta$//;      $uri=~s/\.meta$//;
     my $disuri=&Apache::lonnet::clutter($uri);      my $disuri=&Apache::lonnet::clutter($uri);
       $disuri=~s/^\/adm\/wrapper//;
     # version      # version
     my $currentversion=&Apache::lonnet::getversion($disuri);      my $currentversion=&Apache::lonnet::getversion($disuri);
     my $versiondisplay='';      my $versiondisplay='';
Line 948  sub print_dynamic_metadata { Line 958  sub print_dynamic_metadata {
             foreach my $identifier (sort(keys(%{$dynmeta{'stats'}}))) {              foreach my $identifier (sort(keys(%{$dynmeta{'stats'}}))) {
                 my $data = $dynmeta{'stats'}->{$identifier};                  my $data = $dynmeta{'stats'}->{$identifier};
                 my $course = $data->{'course'};                  my $course = $data->{'course'};
                 my %courseinfo = &Apache::lonnet::coursedescription($course);                  my %courseinfo = 
       &Apache::lonnet::coursedescription($course,
          {'one_time' => 1});
                 if (! exists($courseinfo{'num'}) || $courseinfo{'num'} eq '') {                  if (! exists($courseinfo{'num'}) || $courseinfo{'num'} eq '') {
                     &Apache::lonnet::logthis('lookup for '.$course.' failed');                      &Apache::lonnet::logthis('lookup for '.$course.' failed');
                     next;                      next;
Line 1073  sub present_editable_metadata { Line 1085  sub present_editable_metadata {
     # Header      # Header
     my $disuri=$uri;      my $disuri=$uri;
     my $fn=&Apache::lonnet::filelocation('',$uri);      my $fn=&Apache::lonnet::filelocation('',$uri);
     $disuri=~s/^\/\~/\/priv\//;      $disuri=~s{^/\~}{/priv/};
     $disuri=~s/\.meta$//;      $disuri=~s/\.meta$//;
     my $meta_uri = $disuri;      my $meta_uri = $disuri;
     my $path;      my $path;
Line 1081  sub present_editable_metadata { Line 1093  sub present_editable_metadata {
  ($disuri, $meta_uri, $path) =  &portfolio_display_uri($disuri,1);   ($disuri, $meta_uri, $path) =  &portfolio_display_uri($disuri,1);
     }      }
     my $target=$uri;      my $target=$uri;
     $target=~s/^\/\~/\/res\/$env{'request.role.domain'}\//;      $target=~s{^/\~}{/res/$env{'request.role.domain'}/};
     $target=~s/\.meta$//;      $target=~s/\.meta$//;
     my $bombs=&Apache::lonmsg::retrieve_author_res_msg($target);      my $bombs=&Apache::lonmsg::retrieve_author_res_msg($target);
     if ($bombs) {      if ($bombs) {
Line 1183  ENDEDIT Line 1195  ENDEDIT
                 $Apache::lonpublisher::metadatafields{$field_name}=                  $Apache::lonpublisher::metadatafields{$field_name}=
                     join(',',&Apache::loncommon::get_env_multiple('form.new_'.$field_name));                      join(',',&Apache::loncommon::get_env_multiple('form.new_'.$field_name));
             }              }
             if ($Apache::lonpublisher::metadatafields{'courserestricted'} ne 'none') {              if ($Apache::lonpublisher::metadatafields{'courserestricted'} ne 'none'
    && exists($env{$Apache::lonpublisher::metadatafields{'courserestricted'}.'.metadata.'.$field_name.'.options'})) {
                 # handle restrictions here                  # handle restrictions here
                 if (($env{$Apache::lonpublisher::metadatafields{'courserestricted'}.'.metadata.'.$field_name.'.options'} =~ m/active/) ||                  if (($env{$Apache::lonpublisher::metadatafields{'courserestricted'}.'.metadata.'.$field_name.'.options'} =~ m/active/) ||
                     ($field_name eq 'courserestricted')){                      ($field_name eq 'courserestricted')){
Line 1268  ENDEDIT Line 1281  ENDEDIT
                   &mt('Store Catalog Information').'">');                    &mt('Store Catalog Information').'">');
   
  if ($file_type eq 'portfolio') {   if ($file_type eq 'portfolio') {
       my ($port_path,$group) = &get_port_path_and_group($uri);
     $r->print('</form>      $r->print('</form>
                <br /><br /><form method="POST" action="/adm/portfolio">'.                 <br /><br /><form method="POST" action="'.$port_path.'">'.
         '<input type="hidden" name="group" value="'.$group.'" />'.
       '<input type="hidden" name="currentpath" value="'.$path.'" />'.        '<input type="hidden" name="currentpath" value="'.$path.'" />'.
       '<input type="submit" name="cancel" value="'.&mt('Discard Edits and Return to Portfolio').'">');        '<input type="submit" name="cancel" value="'.&mt('Discard Edits and Return to Portfolio').'">');
  }   }

Removed from v.1.149  
changed lines
  Added in v.1.158


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