--- loncom/metadata_database/LONCAPA/lonmetadata.pm 2007/07/25 23:17:49 1.23 +++ loncom/metadata_database/LONCAPA/lonmetadata.pm 2012/03/14 20:53:56 1.35 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonmetadata.pm,v 1.23 2007/07/25 23:17:49 raeburn Exp $ +# $Id: lonmetadata.pm,v 1.35 2012/03/14 20:53:56 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); @@ -488,7 +492,7 @@ sub store_metadata { =pod -=item () +=item lookup_metadata() Inputs: database handle ($dbh) and a hash or hash reference containing metadata which will be used for a search. @@ -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'}}); @@ -935,16 +943,20 @@ sub process_dynamic_metadata { } # # put together comments - my $comments = '
'; + my $comments = ''; foreach my $evaluator (keys(%{$resdata->{'evaluation'}->{'comments'}})){ $comments .= '

'. - ''.$evaluator.':'. + ''.$evaluator.': '. $resdata->{'evaluation'}->{'comments'}->{$evaluator}. '

'; } - $comments .= '
'; - $data{'comments'} = $comments; + if ($comments) { + $comments = '
' + .$comments + .'
'; + $data{'comments'} = $comments; + } # if (exists($resdata->{'stats'})) { $data{'stats'} = $resdata->{'stats'}; @@ -1076,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'}, @@ -1123,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; } @@ -1138,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); @@ -1183,8 +1203,8 @@ sub process_allusers_data { if ($udom eq '' || $uname eq '' ) { $error = 'No domain and/or username specified'; } else { - $delitem = 'domain = '.$dbh->quote($udom).' AND username = '. - $dbh->quote($uname); + $delitem = 'domain = '.$dbh->quote($udom).' AND username '. + 'COLLATE latin1_general_cs = '.$dbh->quote($uname); $error=&delete_metadata($dbh,$newnames->{'allusers'},$delitem); } if (defined($error)) { @@ -1229,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]; @@ -1242,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 @@ -1275,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;