--- loncom/metadata_database/LONCAPA/lonmetadata.pm 2009/04/29 15:21:00 1.27 +++ loncom/metadata_database/LONCAPA/lonmetadata.pm 2012/03/15 20:53:27 1.36 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonmetadata.pm,v 1.27 2009/04/29 15:21:00 bisitz Exp $ +# $Id: lonmetadata.pm,v 1.36 2012/03/15 20:53:27 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -93,7 +93,7 @@ FULLTEXT idx_language (language), FULLTEXT idx_owner (owner), FULLTEXT idx_copyright (copyright)) -TYPE=MYISAM; +ENGINE=MYISAM; =cut @@ -356,6 +356,9 @@ sub create_metadata_storage { $col_des.="(".$coldata->{'size'}.")"; } } + if (($tablename =~ /allusers/) && ($column eq 'username')) { + $col_des .= ' CHARACTER SET latin1 COLLATE latin1_general_cs'; + } # Modifiers if (exists($coldata->{'restrictions'})){ $col_des.=" ".$coldata->{'restrictions'}; @@ -381,7 +384,7 @@ sub create_metadata_storage { $text .= 'idx_'.$colname.' ('.$colname.')'; push (@Columns,$text); } - $request .= "(".join(", ",@Columns).") TYPE=MyISAM"; + $request .= "(".join(", ",@Columns).") ENGINE=MyISAM"; return $request; } @@ -460,7 +463,8 @@ sub store_metadata { $mdata->{$fname} eq '') { push(@MData,'NULL'); } else { - push(@MData,$mdata->{$fname}); + push(@MData, $field->{type} eq 'DATETIME' ? + sqltime($mdata->{$fname}) : $mdata->{$fname}); } } else { push(@MData,undef); @@ -915,6 +919,10 @@ sub process_dynamic_metadata { $data{$type.'_list'} = join(',',@{$resdata->{$type}}); } } +# +# NOTE: usage is named sequsage elsewhere in LON-CAPA +# The translation happens here +# if (defined($resdata->{'usage'}) && ref($resdata->{'usage'}) eq 'ARRAY') { $data{'sequsage'} = scalar(@{$resdata->{'usage'}}); @@ -966,18 +974,18 @@ sub dynamic_metadata_storage { my $courseid = $data->{'course'}; my $sections = $data->{'sections'}; my $numstu = $data->{'num_students'}; - my $urlres = $data->{'urlres'}; - my $key = $courseid.'&'.$sections.'&'.$numstu.'___'.$urlres.'___stats'; + my $part = $data->{'part'}; + my $symb = $data->{'symb'}; + my $key = $courseid.'&'.$sections.'&'.$numstu.'&'.$part.'___'.$symb.'___stats'; $Store{$key} = 'course='.$courseid.'&'. 'sections='.$sections.'&'. 'timestamp='.time.'&'. - 'stdno='.$data->{'num_students'}.'&'. + 'part='.$part.'&'. + 'stdno='.$numstu.'&'. 'avetries='.$data->{'mean_tries'}.'&'. - 'difficulty='.$data->{'deg_of_diff'}; - if (exists($data->{'deg_of_disc'})) { - $Store{$key} .= '&'.'disc='.$data->{'deg_of_disc'}; - } + 'difficulty='.$data->{'deg_of_diff'}.'&'. + 'disc='.$data->{'deg_of_disc'}; return %Store; } @@ -1080,10 +1088,14 @@ sub process_portfolio_access_data { ($key =~ /^([^:]+):([a-z]+)_(\d*)_?(\d*)$/); next if (($scope ne 'public') && ($scope ne 'guest')); $acc_data->{scope} = $scope; + my $sqltime_error; if ($end != 0) { - $acc_data->{end} = &sqltime($end); + $acc_data->{end} = &sqltime($end,\$sqltime_error); + } + $acc_data->{start} = &sqltime($start,\$sqltime_error); + if ($sqltime_error) { + $loghash{$key}{'err'} = $sqltime_error; } - $acc_data->{start} = &sqltime($start); if (! $simulate) { my ($count,$err) = &store_metadata($dbh,$newnames->{'access'}, @@ -1127,7 +1139,8 @@ sub process_portfolio_metadata { if (-e $fullpath) { my ($ref,$crs,$addedfields) = &portfolio_metadata($fullpath,$dom,$uname, $group); - &getfiledates($ref,$fullpath); + my $sqltime_error; + &getfiledates($ref,$fullpath,\$sqltime_error); if ($is_course) { $ref->{'groupname'} = $group; } @@ -1142,6 +1155,9 @@ sub process_portfolio_metadata { ); my %loghash; if (! $simulate) { + if ($sqltime_error) { + $loghash{'metadata'."\0"}{'err'} = $sqltime_error; + } my ($count,$err) = &store_metadata($dbh,$newnames->{'portfolio'},'portfolio_metadata', \%Data); @@ -1233,11 +1249,11 @@ sub getfile { } ## -## &getfiledates() +## &getfiledates($ref,$target,$sqltime_error) ## Converts creationdate and modifieddates to SQL format ## Applies stat() to file to retrieve dates if missing sub getfiledates { - my ($ref,$target) = @_; + my ($ref,$target,$sqltime_error) = @_; if (! defined($ref->{'creationdate'}) || $ref->{'creationdate'} =~ /^\s*$/) { $ref->{'creationdate'} = (stat($target))[9]; @@ -1246,17 +1262,17 @@ sub getfiledates { $ref->{'lastrevisiondate'} =~ /^\s*$/) { $ref->{'lastrevisiondate'} = (stat($target))[9]; } - $ref->{'creationdate'} = &sqltime($ref->{'creationdate'}); - $ref->{'lastrevisiondate'} = &sqltime($ref->{'lastrevisiondate'}); + $ref->{'creationdate'} = &sqltime($ref->{'creationdate'},$sqltime_error); + $ref->{'lastrevisiondate'} = &sqltime($ref->{'lastrevisiondate'},$sqltime_error); } ## -## &sqltime($timestamp) +## &sqltime($timestamp,$sqltime_error) ## ## Convert perl $timestamp to MySQL time. MySQL expects YYYY-MM-DD HH:MM:SS ## sub sqltime { - my ($time) = @_; + my ($time,$sqltime_error) = @_; my $mysqltime; if ($time =~ /(\d+)-(\d+)-(\d+) # YYYY-MM-DD @@ -1279,7 +1295,9 @@ sub sqltime { } elsif (! defined($time) || $time == 0) { $mysqltime = 0; } else { - &log(0," sqltime:Unable to decode time ".$time); + if (ref($sqltime_error) eq 'SCALAR') { + $$sqltime_error = "sqltime:Unable to decode time ".$time; + } $mysqltime = 0; } return $mysqltime;