--- loncom/interface/lonextresedit.pm 2017/12/15 16:33:51 1.22 +++ loncom/interface/lonextresedit.pm 2017/12/18 22:56:45 1.23 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: lonextresedit.pm,v 1.22 2017/12/15 16:33:51 raeburn Exp $ +# $Id: lonextresedit.pm,v 1.23 2017/12/18 22:56:45 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -161,6 +161,9 @@ sub process_changes { $newurl = $1; $marker = $2; $args = $3; + if ((!$symb) && (!$supplementalflag)) { + $symb = "uploaded/$cdom/$cnum/$folder.$container"."___$newidx"."___adm/$cdom/$cnum/$marker/ext.tool"; + } } } if ($supplementalflag) { @@ -170,7 +173,7 @@ sub process_changes { } if ($folder && $container) { if ($env{'form.importdetail'}) { - my ($errtext,$fatal,$mismatchedid,@imports); + my ($errtext,$fatal,$mismatchedid,$needreload,$newgradable,@imports); if (!$supplementalflag) { if (($oldidx) && ($oldidx != $newidx)) { $mismatchedid = 1; @@ -181,9 +184,27 @@ sub process_changes { } elsif (($newtitle eq $oldtitle) && ($newurl eq $oldurl)) { if ($type eq 'tool') { if ($args) { - ($updated,$errormsg) = &update_exttool($marker,$cdom,$cnum,$args); - unless ($updated) { - $output = &mt('No change'); + ($updated,$newgradable,$errormsg) = &update_exttool($marker,$cdom,$cnum, + $supplementalflag,$args); + if ($updated) { + if ($newgradable) { + my $map = "/uploaded/$cdom/$cnum/$folder.$container"; + my ($errtext,$fatal) = &LONCAPA::map::mapread($map); + if ($fatal) { + $errormsg = &mt('Update failed: [_1].',$errtext); + } else { + &LONCAPA::map::storeparameter($residx,'parameter_0_gradable', + $newgradable,'string_yesno'); + my ($outtext,$errtext) = &LONCAPA::map::storemap($map,1,1); + if ($errtext) { + $errormsg = &mt('Update failed: [_1].',$errtext); + } else { + $needreload = 1; + } + } + } + } else { + $output = &mt('No change'); } } else { $output = &mt('No change'); @@ -202,13 +223,25 @@ sub process_changes { my $ext = 'true'; if ($type eq 'tool') { if ($args) { - ($updated,$errormsg) = &update_exttool($marker,$cdom,$cnum,$args); + ($updated,$newgradable,$errormsg) = &update_exttool($marker,$cdom,$cnum, + $supplementalflag,$args); + if ($newgradable) { + &LONCAPA::map::storeparameter($residx,'parameter_0_gradable',$newgradable, + 'string_yesno'); + $needreload = 1; + } } $ext = 'false'; } + my $dotimeupdate; + unless ($supplementalflag) { + if (($newgradable) || ($newurl ne $oldurl)) { + $dotimeupdate = 1; + } + } $LONCAPA::map::resources[$residx] = join(':', ($savetitle,$saveurl,$ext,'normal','res')); - my ($outtext,$errtext) = &LONCAPA::map::storemap($map,1); + my ($outtext,$errtext) = &LONCAPA::map::storemap($map,1,$dotimeupdate); if ($errtext) { $errormsg = &mt('Update failed: [_1].',$errtext); } else { @@ -230,19 +263,24 @@ sub process_changes { &Apache::lonnet::devalidate_title_cache($symb); } } - } - my ($furl,$ferr) = - &Apache::lonuserstate::readmap("$cdom/$cnum"); - if ($ferr) { - $errormsg = &mt('Reload failed: [_1].',$ferr); - } else { - unless ($supplementalflag) { - &Apache::loncommon::update_content_constraints($cdom,$cnum,$chome,$cdom.'_'.$cnum); - } + $needreload = 1; } } } } + if ($needreload) { + my ($furl,$ferr) = &Apache::lonuserstate::readmap("$cdom/$cnum"); + if ($ferr) { + $errormsg = &mt('Reload failed: [_1].',$ferr); + } else { + &Apache::loncommon::update_content_constraints($cdom,$cnum,$chome, + $cdom.'_'.$cnum); + } + } + if (($type eq 'tool') && ($newgradable)) { + my $uri = &Apache::lonnet::declutter($url); + &Apache::lonnet::devalidate_cache_new('meta',$uri); + } } else { $output = &mt('No change'); } @@ -257,16 +295,16 @@ sub process_changes { } sub update_exttool { - my ($marker,$cdom,$cnum,$args) = @_; + my ($marker,$cdom,$cnum,$supplementalflag,$args) = @_; my %toolhash=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum); - my (%newhash,$changed,@deleted,$errormsg); + my (%newhash,$changed,$newgradable,@deleted,$errormsg); ($newhash{'target'},$newhash{'width'},$newhash{'height'},$newhash{'linktext'},$newhash{'explanation'}, - $newhash{'crslabel'},$newhash{'crstitle'},$newhash{'crsappend'}) = split(/:/,$args); + $newhash{'crslabel'},$newhash{'crstitle'},$newhash{'crsappend'},$newhash{'gradable'}) = split(/:/,$args); foreach my $item ('linktext','explanation','crslabel','crstitle','crsappend') { $newhash{$item} = &unescape($newhash{$item}); } my %toolhash=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum); - foreach my $item ('target','width','height','linktext','explanation','crslabel','crstitle','crsappend') { + foreach my $item ('target','width','height','linktext','explanation','crslabel','crstitle','crsappend','gradable') { $newhash{$item} =~ s/^\s+//; $newhash{$item} =~ s/\s+$//; if (($item eq 'width') || ($item eq 'height') || ($item eq 'linktext') || ($item eq 'explanation')) { @@ -277,8 +315,19 @@ sub update_exttool { $newhash{$item} = ''; } } + } elsif ($item eq 'gradable') { + unless ($newhash{$item} == 1) { + $newhash{$item} = ''; + } } if ($toolhash{$item} ne $newhash{$item}) { + if (($item eq 'gradable') && (!$supplementalflag)) { + if ($newhash{$item}) { + $newgradable = 'yes'; + } else { + $newgradable = 'no'; + } + } if ($newhash{$item} eq '') { unless (($item eq 'target') || ((($item eq 'width') || ($item eq 'height')) && @@ -306,7 +355,7 @@ sub update_exttool { if (@deleted) { &Apache::lonnet::del('exttool_'.$marker,\@deleted,$cdom,$cnum); } - return ($changed,$errormsg); + return ($changed,$newgradable,$errormsg); } sub extedit_form { @@ -335,16 +384,16 @@ sub extedit_form { } my ($formname,$formid,$toggle,$fieldsetid,$urlid,$dispdivstyle,$dimendivstyle, $windivstyle,$linktextstyle,$explanationstyle,$labelstyle,$titlestyle, - $appendstyle,$legend,$urlelem,$toolelem,%toolattr); + $appendstyle,$gradablestyle,$legend,$urlelem,$toolelem,%toolattr); $formname = 'new'.$type; $toggle = $type; $fieldsetid = 'upload'.$type.'form'; $urlid = $type.'url'; map { $toolattr{$_} = $type.$_; } ('dispdiv','dimendiv','dimenwidth','dimenheight', 'crstitlediv','crslabeldiv','crsappenddiv', - 'crstitle','crslabel','crsappend','windiv', - 'linktextdiv','explanationdiv','linktext', - 'explanation','providerurl'); + 'gradablediv','crstitle','crslabel','crsappend', + 'windiv','linktextdiv','explanationdiv', + 'linktext','explanation','providerurl'); $dispdivstyle = 'display:none'; $dimendivstyle = 'display:none'; $windivstyle = 'display:none'; @@ -353,6 +402,7 @@ sub extedit_form { $labelstyle = 'display:none'; $titlestyle = 'display:none'; $appendstyle = 'display:none'; + $gradablestyle = 'display:none'; if ($supplementalflag) { $formname = 'newsupp'.$type; $toggle = 'supp'.$type; @@ -362,7 +412,7 @@ sub extedit_form { } my ($link,$legend,$active,$srcclass,$extsrc,$preview,$title,$save,$crstitle,$crslabel, $crsappend,$fieldsetstyle,$action,$hiddenelem,$form,$width,$height,$tooltarget, - $linktext,$explanation,$providerurl,%chkstate); + $linktext,$explanation,$providerurl,$chkgrd,$chknogrd,%chkstate); $fieldsetstyle = 'display: none;'; $action = '/adm/coursedocs'; my $protocol = ($ENV{'SERVER_PORT'} == 443?'https':'http'); @@ -471,6 +521,11 @@ sub extedit_form { $height = $toolhash{'height'}; $linktext = $toolhash{'linktext'}; $explanation = $toolhash{'explanation'}; + if ($toolhash{'gradable'}) { + $chkgrd = ' checked="checked"'; + } else { + $chknogrd = ' checked="checked"'; + } if (ref($ltitools->{$toolhash{'id'}}->{'crsconf'}) eq 'HASH') { if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'title'}) { $crstitle = $toolhash{'crstitle'}; @@ -495,6 +550,7 @@ sub extedit_form { } } $toolelem = ''.$image.' '.$tooltitle.'
'; + $gradablestyle = 'display:inline'; } } } @@ -527,6 +583,7 @@ sub extedit_form { $crslabel = $env{'course.'.$cdom.'_'.$cnum.'.internal.coursecode'}; $crstitle = $env{'course.'.$cdom.'_'.$cnum.'.description'}; $crsappend = ''; + $chknogrd = ' checked="checked"'; } $toolelem .= '
'. ''.&mt('Display target:').' '. @@ -564,7 +621,13 @@ sub extedit_form { ''.&mt('Append to URL[_1]', ' ('.$providerurl.')
'). '

'. - '
'; + ''. + '
'. + ''.&mt('Gradable').' '. + ''.(' 'x2). + '
'; } my $chooser = $toolelem; if ($type eq 'ext') { @@ -656,7 +719,7 @@ sub extedit_javascript { " var ltitoolsLink = new Array($num);\n". " var ltitoolsExplain = new Array($num);\n". " var ltitoolsLabel = new Array($num);\n". - " var ltitoolsTitle = new Array($num);\n"; + " var ltitoolsTitle = new Array($num);\n". " var ltitoolsAppend = new Array($num);\n"; my $i = 0; foreach my $key (sort { $a <=> $b } keys(%{$toolsref})) { @@ -843,6 +906,32 @@ function setExternal(extform,residx,type } else { info += ':'; } + var gradablediv = prefix+'toolgradablediv'; + if (residx > 0) { + gradablediv += '_'+residx; + } + if (document.getElementById(gradablediv)) { + if (document.getElementById(gradablediv).style.display == 'inline') { + if (extform.exttoolgradable.length) { + for (var i=0; i 0) { eval("extform.importdetail.value=title+'='+info+'='+residx;extform.submit();"); @@ -894,6 +983,7 @@ function updateExttool(caller,form,suppl labeldiv = prefix+'toolcrslabeldiv'; titlediv = prefix+'toolcrstitlediv'; appenddiv = prefix+'toolcrsappenddiv'; + gradablediv = prefix+'toolgradablediv'; providerurl = prefix+'toolproviderurl'; labelinput = prefix+'toolcrslabel'; titleinput = prefix+'toolcrstitle'; @@ -931,6 +1021,9 @@ function updateExttool(caller,form,suppl if (document.getElementById(appenddiv)) { document.getElementById(appenddiv).style.display = 'none'; } + if (document.getElementById(gradablediv)) { + document.getElementById(gradablediv).style.display = 'none'; + } } else { if (ltitools.length > 0) { for (var j=0; j