[LON-CAPA-cvs] cvs: loncom /interface lonmeta.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Tue, 13 Apr 2004 16:03:46 -0000
This is a MIME encoded message
--matthew1081872226
Content-Type: text/plain
matthew Tue Apr 13 12:03:46 2004 EDT
Modified files:
/loncom/interface lonmeta.pm
Log:
Break &handler into 3 subs, &report_bombs, &present_uneditable_metadata,
and &present_editable_metadata.
--matthew1081872226
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20040413120346.txt"
Index: loncom/interface/lonmeta.pm
diff -u loncom/interface/lonmeta.pm:1.65 loncom/interface/lonmeta.pm:1.66
--- loncom/interface/lonmeta.pm:1.65 Tue Apr 13 11:41:19 2004
+++ loncom/interface/lonmeta.pm Tue Apr 13 12:03:46 2004
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Metadata display handler
#
-# $Id: lonmeta.pm,v 1.65 2004/04/13 15:41:19 matthew Exp $
+# $Id: lonmeta.pm,v 1.66 2004/04/13 16:03:46 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -146,7 +146,10 @@
return $output;
}
+#
# Turn MySQL row into hash
+# This routine is here for historic reasons. Probably should be moved to
+# a more generic place since it has nothing to do with metadata
sub metadata_col_to_hash {
my @cols=@_;
my %hash=();
@@ -396,107 +399,125 @@
#
my $uri=$r->uri;
#
- # Looking for all bombs?
- if ($uri=~/\/adm\/bombs\/(.*)$/) {
- # Set document type
- $uri=&Apache::lonnet::declutter($1);
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- #
- return OK if $r->header_only;
- $r->print(&Apache::loncommon::bodytag('Error Messages'));
- $r->print('<h1>'.&Apache::lonnet::clutter($uri).'</h1>');
- my ($domain,$author)=($uri=~/^(\w+)\/(\w+)\//);
- if (&Apache::loncacc::constructaccess('/~'.$author.'/',$domain)) {
- my %brokenurls=&Apache::lonmsg::all_url_author_res_msg($author,
- $domain);
- foreach (sort keys %brokenurls) {
- if ($_=~/^\Q$uri\E/) {
- $r->print(&Apache::lonhtmlcommon::crumbs
- (&Apache::lonnet::clutter($_)).
- &Apache::lonmsg::retrieve_author_res_msg($_).
- '<hr />');
- }
+ if ($uri=~m:/adm/bombs/(.*)$:) {
+ # Looking for all bombs?
+ &report_bombs($r,$uri);
+ } elsif ($uri=~/^\/\~/) {
+ # Construction space
+ &present_editable_metadata($r,$uri);
+ } else {
+ &present_uneditable_metadata($r,$uri);
+ }
+ return OK;
+}
+
+sub report_bombs {
+ my ($r,$uri) = @_;
+ # Set document type
+ $uri=~ s:/adm/bombs/::;
+ $uri=&Apache::lonnet::declutter($uri);
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
+ #
+ return OK if $r->header_only;
+ $r->print(&Apache::loncommon::bodytag('Error Messages'));
+ $r->print('<h1>'.&Apache::lonnet::clutter($uri).'</h1>');
+ my ($domain,$author)=($uri=~/^(\w+)\/(\w+)\//);
+ if (&Apache::loncacc::constructaccess('/~'.$author.'/',$domain)) {
+ my %brokenurls=&Apache::lonmsg::all_url_author_res_msg($author,
+ $domain);
+ foreach (sort keys %brokenurls) {
+ if ($_=~/^\Q$uri\E/) {
+ $r->print(&Apache::lonhtmlcommon::crumbs
+ (&Apache::lonnet::clutter($_)).
+ &Apache::lonmsg::retrieve_author_res_msg($_).
+ '<hr />');
}
- } else {
- $r->print(&mt('Not authorized'));
- }
- $r->print('</body></html>');
- } elsif ($uri!~/^\/\~/) {
- # This is not in construction space
- my ($resdomain,$resuser)=
- (&Apache::lonnet::declutter($uri)=~/^(\w+)\/(\w+)\//);
- $loaderror=&Apache::lonnet::overloaderror
- ($r,
- &Apache::lonnet::homeserver($resuser,$resdomain));
- if ($loaderror) { return $loaderror; }
- #
- my %content=();
- # Set document type
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- return OK if $r->header_only;
- # Read file
- foreach (split(/\,/,&Apache::lonnet::metadata($uri,'keys'))) {
- $content{$_}=&Apache::lonnet::metadata($uri,$_);
- }
- # Render Output
- # displayed url
- my ($thisversion)=($uri=~/\.(\d+)\.(\w+)\.meta$/);
- $uri=~s/\.meta$//;
- my $disuri=&Apache::lonnet::clutter($uri);
- # version
- my $currentversion=&Apache::lonnet::getversion($disuri);
- my $versiondisplay='';
- if ($thisversion) {
- $versiondisplay=&mt('Version').': '.$thisversion.
- ' ('.&mt('most recent version').': '.
- ($currentversion>0 ?
- $currentversion :
- &mt('information not available')).')';
- } else {
- $versiondisplay='Version: '.$currentversion;
- }
- # crumbify displayed URL
- $disuri=&Apache::lonhtmlcommon::crumbs($disuri);
- # obsolete
- my $obsolete=$content{'obsolete'};
- my $obsoletewarning='';
- if (($obsolete) && ($ENV{'user.adv'})) {
- $obsoletewarning='<p><font color="red">'.
- &mt('This resource has been marked obsolete by the author(s)').
- '</font></p>';
- }
- #
- my %lt=&fieldnames();
- my $table='';
- my $bodytag=&Apache::loncommon::bodytag
- ('Catalog Information','','','',$resdomain);
- foreach ('title',
- 'author',
- 'subject',
- 'keywords',
- 'notes',
- 'abstract',
- 'lowestgradelevel',
- 'highestgradelevel',
- 'standards',
- 'mime',
- 'language',
- 'creationdate',
- 'lastrevisiondate',
- 'owner',
- 'copyright',
- 'customdistributionfile',
- 'obsolete',
- 'obsoletereplacement') {
- $table.='<tr><td bgcolor="#AAAAAA">'.$lt{$_}.
- '</td><td bgcolor="#CCCCCC">'.
- &prettyprint($_,$content{$_}).'</td></tr>';
- delete $content{$_};
}
- #
- $r->print(<<ENDHEAD);
+ } else {
+ $r->print(&mt('Not authorized'));
+ }
+ $r->print('</body></html>');
+ return;
+}
+
+sub present_uneditable_metadata {
+ my ($r,$uri) = @_;
+ my ($resdomain,$resuser)=
+ (&Apache::lonnet::declutter($uri)=~/^(\w+)\/(\w+)\//);
+ my $loaderror=&Apache::lonnet::overloaderror
+ ($r,
+ &Apache::lonnet::homeserver($resuser,$resdomain));
+ if ($loaderror) {
+ return $loaderror;
+ }
+ #
+ my %content=();
+ # Set document type
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
+ return OK if $r->header_only;
+ # Read file
+ foreach (split(/\,/,&Apache::lonnet::metadata($uri,'keys'))) {
+ $content{$_}=&Apache::lonnet::metadata($uri,$_);
+ }
+ # Render Output
+ # displayed url
+ my ($thisversion)=($uri=~/\.(\d+)\.(\w+)\.meta$/);
+ $uri=~s/\.meta$//;
+ my $disuri=&Apache::lonnet::clutter($uri);
+ # version
+ my $currentversion=&Apache::lonnet::getversion($disuri);
+ my $versiondisplay='';
+ if ($thisversion) {
+ $versiondisplay=&mt('Version').': '.$thisversion.
+ ' ('.&mt('most recent version').': '.
+ ($currentversion>0 ?
+ $currentversion :
+ &mt('information not available')).')';
+ } else {
+ $versiondisplay='Version: '.$currentversion;
+ }
+ # crumbify displayed URL
+ $disuri=&Apache::lonhtmlcommon::crumbs($disuri);
+ # obsolete
+ my $obsolete=$content{'obsolete'};
+ my $obsoletewarning='';
+ if (($obsolete) && ($ENV{'user.adv'})) {
+ $obsoletewarning='<p><font color="red">'.
+ &mt('This resource has been marked obsolete by the author(s)').
+ '</font></p>';
+ }
+ #
+ my %lt=&fieldnames();
+ my $table='';
+ my $bodytag=&Apache::loncommon::bodytag
+ ('Catalog Information','','','',$resdomain);
+ foreach ('title',
+ 'author',
+ 'subject',
+ 'keywords',
+ 'notes',
+ 'abstract',
+ 'lowestgradelevel',
+ 'highestgradelevel',
+ 'standards',
+ 'mime',
+ 'language',
+ 'creationdate',
+ 'lastrevisiondate',
+ 'owner',
+ 'copyright',
+ 'customdistributionfile',
+ 'obsolete',
+ 'obsoletereplacement') {
+ $table.='<tr><td bgcolor="#AAAAAA">'.$lt{$_}.
+ '</td><td bgcolor="#CCCCCC">'.
+ &prettyprint($_,$content{$_}).'</td></tr>';
+ delete $content{$_};
+ }
+ #
+ $r->print(<<ENDHEAD);
<html><head><title>Catalog Information</title></head>
$bodytag
<h2>$content{'title'}</h2>
@@ -507,117 +528,119 @@
$table
</table>
ENDHEAD
- if ($ENV{'user.adv'}) {
- # Dynamic Metadata
+ if ($ENV{'user.adv'}) {
+ # Dynamic Metadata
+ $r->print(
+ '<h3>'.&mt('Dynamic Metadata').' ('.
+ &mt('updated periodically').')</h3>'.&mt('Processing').
+ ' ...<br />');
+ $r->rflush();
+ my %items=&fieldnames();
+ my %dynmeta=&dynamicmeta($uri);
+ # General Access and Usage Statistics
+ $r->print('<h4>'.&mt('Access and Usage Statistics').'</h4>'.
+ '<table cellspacing=2 border=0>');
+ foreach ('count',
+ 'sequsage','sequsage_list',
+ 'comefrom','comefrom_list',
+ 'goto','goto_list',
+ 'course','course_list') {
+ $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
+ '<td bgcolor="#CCCCCC">'.
+ &prettyprint($_,$dynmeta{$_})."</td></tr>\n");
+ }
+ $r->print('</table>');
+ if ($uri=~/\.(problem|exam|quiz|assess|survey|form)\.meta$/) {
+ # This is an assessment, print assessment data
$r->print(
- '<h3>'.&mt('Dynamic Metadata').' ('.
- &mt('updated periodically').')</h3>'.&mt('Processing').
- ' ...<br />');
- $r->rflush();
- my %items=&fieldnames();
- my %dynmeta=&dynamicmeta($uri);
- # General Access and Usage Statistics
- $r->print('<h4>'.&mt('Access and Usage Statistics').'</h4>'.
+ '<h4>'.&mt('Assessment Statistical Data').'</h4>'.
'<table cellspacing=2 border=0>');
- foreach ('count',
- 'sequsage','sequsage_list',
- 'comefrom','comefrom_list',
- 'goto','goto_list',
- 'course','course_list') {
+ foreach ('stdno','avetries','difficulty') {
$r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
'<td bgcolor="#CCCCCC">'.
&prettyprint($_,$dynmeta{$_})."</td></tr>\n");
}
- $r->print('</table>');
- if ($uri=~/\.(problem|exam|quiz|assess|survey|form)\.meta$/) {
- # This is an assessment, print assessment data
- $r->print(
- '<h4>'.&mt('Assessment Statistical Data').'</h4>'.
- '<table cellspacing=2 border=0>');
- foreach ('stdno','avetries','difficulty') {
- $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
- '<td bgcolor="#CCCCCC">'.
- &prettyprint($_,$dynmeta{$_})."</td></tr>\n");
- }
- $r->print('</table>');
- }
- $r->print('<h4>'.&mt('Evaluation Data').'</h4>'.
- '<table cellspacing=2 border=0>');
- foreach ('clear','depth','helpful','correct','technical') {
- $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
- '<td bgcolor="#CCCCCC">'.
- &prettyprint($_,$dynmeta{$_})."</td></tr>\n");
- }
- $r->print('</table>');
- $uri=~/^\/res\/(\w+)\/(\w+)\//;
- if ((($ENV{'user.domain'} eq $1) && ($ENV{'user.name'} eq $2))
- || ($ENV{'user.role.ca./'.$1.'/'.$2})) {
- $r->print('<h4>'.&mt('Evaluation Comments').' ('.
- &mt('visible to author and co-authors only').
- ')</h4>'.
- '<blockquote>'.$dynmeta{'comments'}.'</blockquote>');
- $r->print('<a name="bombs" /><h4>'.&mt('Error Messages').' ('.
- &mt('visible to author and co-authors only').')'.
- '</h4>'.
- &Apache::lonmsg::retrieve_author_res_msg($uri));
- }
- # All other stuff
- $r->print('<h3>'.
- &mt('Additional Metadata (non-standard, parameters, exports)').
- '</h3>');
- foreach (sort keys %content) {
- my $name=$_;
- if ($name!~/\.display$/) {
- my $display=&Apache::lonnet::metadata($uri,
- $name.'.display');
- if (! $display) {
- $display=$name;
- };
- my $otherinfo='';
- foreach ('name','part','type','default') {
- if (defined(&Apache::lonnet::metadata($uri,
- $name.'.'.$_))) {
- $otherinfo.=' '.$_.'='.
- &Apache::lonnet::metadata($uri,
- $name.'.'.$_).'; ';
- }
- }
- $r->print('<b>'.$display.':</b> '.$content{$name});
- if ($otherinfo) {
- $r->print(' ('.$otherinfo.')');
+ $r->print('</table>');
+ }
+ $r->print('<h4>'.&mt('Evaluation Data').'</h4>'.
+ '<table cellspacing=2 border=0>');
+ foreach ('clear','depth','helpful','correct','technical') {
+ $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
+ '<td bgcolor="#CCCCCC">'.
+ &prettyprint($_,$dynmeta{$_})."</td></tr>\n");
+ }
+ $r->print('</table>');
+ $uri=~/^\/res\/(\w+)\/(\w+)\//;
+ if ((($ENV{'user.domain'} eq $1) && ($ENV{'user.name'} eq $2))
+ || ($ENV{'user.role.ca./'.$1.'/'.$2})) {
+ $r->print('<h4>'.&mt('Evaluation Comments').' ('.
+ &mt('visible to author and co-authors only').
+ ')</h4>'.
+ '<blockquote>'.$dynmeta{'comments'}.'</blockquote>');
+ $r->print('<a name="bombs" /><h4>'.&mt('Error Messages').' ('.
+ &mt('visible to author and co-authors only').')'.
+ '</h4>'.
+ &Apache::lonmsg::retrieve_author_res_msg($uri));
+ }
+ # All other stuff
+ $r->print('<h3>'.
+ &mt('Additional Metadata (non-standard, parameters, exports)').
+ '</h3>');
+ foreach (sort keys %content) {
+ my $name=$_;
+ if ($name!~/\.display$/) {
+ my $display=&Apache::lonnet::metadata($uri,
+ $name.'.display');
+ if (! $display) {
+ $display=$name;
+ };
+ my $otherinfo='';
+ foreach ('name','part','type','default') {
+ if (defined(&Apache::lonnet::metadata($uri,
+ $name.'.'.$_))) {
+ $otherinfo.=' '.$_.'='.
+ &Apache::lonnet::metadata($uri,
+ $name.'.'.$_).'; ';
}
- $r->print("<br />\n");
}
+ $r->print('<b>'.$display.':</b> '.$content{$name});
+ if ($otherinfo) {
+ $r->print(' ('.$otherinfo.')');
+ }
+ $r->print("<br />\n");
}
}
- # End Resource Space Call
- } else {
- # Construction Space Call
- # Set document type
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- #
- return OK if $r->header_only;
- # Header
- my $disuri=$uri;
- my $fn=&Apache::lonnet::filelocation('',$uri);
- $disuri=~s/^\/\~/\/priv\//;
- $disuri=~s/\.meta$//;
- my $target=$uri;
- $target=~s/^\/\~/\/res\/$ENV{'request.role.domain'}\//;
- $target=~s/\.meta$//;
- my $bombs=&Apache::lonmsg::retrieve_author_res_msg($target);
- if ($bombs) {
- if ($ENV{'form.delmsg'}) {
- if (&Apache::lonmsg::del_url_author_res_msg($target) eq 'ok') {
- $bombs=&mt('Messages deleted.');
- } else {
- $bombs=&mt('Error deleting messages');
- }
+ }
+}
+
+sub present_editable_metadata {
+ my ($r,$uri) = @_;
+ # Construction Space Call
+ # Set document type
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
+ #
+ return OK if $r->header_only;
+ # Header
+ my $disuri=$uri;
+ my $fn=&Apache::lonnet::filelocation('',$uri);
+ $disuri=~s/^\/\~/\/priv\//;
+ $disuri=~s/\.meta$//;
+ my $target=$uri;
+ $target=~s/^\/\~/\/res\/$ENV{'request.role.domain'}\//;
+ $target=~s/\.meta$//;
+ my $bombs=&Apache::lonmsg::retrieve_author_res_msg($target);
+ if ($bombs) {
+ if ($ENV{'form.delmsg'}) {
+ if (&Apache::lonmsg::del_url_author_res_msg($target) eq 'ok') {
+ $bombs=&mt('Messages deleted.');
+ } else {
+ $bombs=&mt('Error deleting messages');
}
- my $bodytag=&Apache::loncommon::bodytag('Error Messages');
- my $del=&mt('Delete Messages');
- $r->print(<<ENDBOMBS);
+ }
+ my $bodytag=&Apache::loncommon::bodytag('Error Messages');
+ my $del=&mt('Delete Messages');
+ $r->print(<<ENDBOMBS);
<html><head><title>Edit Catalog Information</title></head>
$bodytag
<h1>$disuri</h1>
@@ -628,84 +651,85 @@
</body>
</html>
ENDBOMBS
- } else {
- my $displayfile='Catalog Information for '.$disuri;
- if ($disuri=~/\/default$/) {
- my $dir=$disuri;
- $dir=~s/default$//;
- $displayfile=
- &mt('Default Cataloging Information for Directory').' '.
- $dir;
- }
- my $bodytag=
- &Apache::loncommon::bodytag('Edit Catalog Information');
- %Apache::lonpublisher::metadatafields=();
- %Apache::lonpublisher::metadatakeys=();
- &Apache::lonpublisher::metaeval(&Apache::lonnet::getfile($fn));
- $r->print(<<ENDEDIT);
+ } else {
+ my $displayfile='Catalog Information for '.$disuri;
+ if ($disuri=~/\/default$/) {
+ my $dir=$disuri;
+ $dir=~s/default$//;
+ $displayfile=
+ &mt('Default Cataloging Information for Directory').' '.
+ $dir;
+ }
+ my $bodytag=
+ &Apache::loncommon::bodytag('Edit Catalog Information');
+ %Apache::lonpublisher::metadatafields=();
+ %Apache::lonpublisher::metadatakeys=();
+ &Apache::lonpublisher::metaeval(&Apache::lonnet::getfile($fn));
+ $r->print(<<ENDEDIT);
<html><head><title>Edit Catalog Information</title></head>
$bodytag
<h1>$displayfile</h1>
<form method="post" name="defaultmeta">
ENDEDIT
- $r->print('<script language="JavaScript">'.
- &Apache::loncommon::browser_and_searcher_javascript.
- '</script>');
- my %lt=&fieldnames();
- foreach ('author','title','subject','keywords','abstract','notes',
- 'copyright','customdistributionfile','language',
- 'standards',
- 'lowestgradelevel','highestgradelevel',
- 'obsolete','obsoletereplacement') {
- if (defined($ENV{'form.new_'.$_})) {
- $Apache::lonpublisher::metadatafields{$_}=
- $ENV{'form.new_'.$_};
- }
- if (! $Apache::lonpublisher::metadatafields{'copyright'}) {
- $Apache::lonpublisher::metadatafields{'copyright'}=
- 'default';
- }
- $r->print('<p>'.$lt{$_}.': '.
- &prettyinput
- ($_,$Apache::lonpublisher::metadatafields{$_},
- 'new_'.$_,'defaultmeta').'</p>');
+ $r->print('<script language="JavaScript">'.
+ &Apache::loncommon::browser_and_searcher_javascript.
+ '</script>');
+ my %lt=&fieldnames();
+ foreach ('author','title','subject','keywords','abstract','notes',
+ 'copyright','customdistributionfile','language',
+ 'standards',
+ 'lowestgradelevel','highestgradelevel',
+ 'obsolete','obsoletereplacement') {
+ if (defined($ENV{'form.new_'.$_})) {
+ $Apache::lonpublisher::metadatafields{$_}=
+ $ENV{'form.new_'.$_};
}
- if ($ENV{'form.store'}) {
- my $mfh;
- if (! ($mfh=Apache::File->new('>'.$fn))) {
- $r->print('<p><font color=red>'.
- &mt('Could not write metadata').', '.
- &mt('FAIL').'</font>');
- } else {
- foreach (sort keys %Apache::lonpublisher::metadatafields) {
- if ($_!~/\./) {
- my $unikey=$_;
- $unikey=~/^([A-Za-z]+)/;
- my $tag=$1;
- $tag=~tr/A-Z/a-z/;
- print $mfh "\n\<$tag";
- foreach (split(/\,/,
+ if (! $Apache::lonpublisher::metadatafields{'copyright'}) {
+ $Apache::lonpublisher::metadatafields{'copyright'}=
+ 'default';
+ }
+ $r->print('<p>'.$lt{$_}.': '.
+ &prettyinput
+ ($_,$Apache::lonpublisher::metadatafields{$_},
+ 'new_'.$_,'defaultmeta').'</p>');
+ }
+ if ($ENV{'form.store'}) {
+ my $mfh;
+ if (! ($mfh=Apache::File->new('>'.$fn))) {
+ $r->print('<p><font color=red>'.
+ &mt('Could not write metadata').', '.
+ &mt('FAIL').'</font>');
+ } else {
+ foreach (sort keys %Apache::lonpublisher::metadatafields) {
+ if ($_!~/\./) {
+ my $unikey=$_;
+ $unikey=~/^([A-Za-z]+)/;
+ my $tag=$1;
+ $tag=~tr/A-Z/a-z/;
+ print $mfh "\n\<$tag";
+ foreach (split(/\,/,
$Apache::lonpublisher::metadatakeys{$unikey})
- ) {
- my $value=
+ ) {
+ my $value=
$Apache::lonpublisher::metadatafields{$unikey.'.'.$_};
- $value=~s/\"/\'\'/g;
- print $mfh ' '.$_.'="'.$value.'"';
- }
- print $mfh '>'.
- &HTML::Entities::encode($Apache::lonpublisher::metadatafields{$unikey},'<>&"').
- '</'.$tag.'>';
+ $value=~s/\"/\'\'/g;
+ print $mfh ' '.$_.'="'.$value.'"';
}
+ print $mfh '>'.
+ &HTML::Entities::encode
+ ($Apache::lonpublisher::metadatafields{$unikey},
+ '<>&"').
+ '</'.$tag.'>';
}
- $r->print('<p>'.&mt('Wrote Metadata'));
}
+ $r->print('<p>'.&mt('Wrote Metadata'));
}
- $r->print('<br /><input type="submit" name="store" value="'.
- &mt('Store Catalog Information').'"></form>'.
- '</body></html>');
}
+ $r->print('<br /><input type="submit" name="store" value="'.
+ &mt('Store Catalog Information').'"></form>'.
+ '</body></html>');
}
- return OK;
+ return;
}
# BEGIN Block
--matthew1081872226--