version 1.349.2.3, 2015/05/26 13:25:52
|
version 1.356, 2015/07/17 19:11:09
|
Line 49 use Apache::matchresponse();
|
Line 49 use Apache::matchresponse();
|
use Apache::chemresponse(); |
use Apache::chemresponse(); |
use Apache::functionplotresponse(); |
use Apache::functionplotresponse(); |
use Apache::drawimage(); |
use Apache::drawimage(); |
|
use Apache::loncapamath(); |
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apace::lonparmset(); |
use Apache::lonparmset(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Time::HiRes qw( gettimeofday tv_interval ); |
use Time::HiRes qw( gettimeofday tv_interval ); |
use HTML::Entities(); |
use HTML::Entities(); |
Line 209 sub proctor_checked_in {
|
Line 210 sub proctor_checked_in {
|
} |
} |
|
|
sub check_slot_access { |
sub check_slot_access { |
my ($id,$type)=@_; |
my ($id,$type,$symb)=@_; |
|
|
# does it pass normal muster |
# does it pass normal muster |
my ($status,$datemsg)=&check_access($id); |
my ($status,$datemsg)=&check_access($id,$symb); |
|
|
my $useslots = &Apache::lonnet::EXT("resource.0.useslots"); |
my $useslots = &Apache::lonnet::EXT("resource.0.useslots",$symb); |
if ($useslots ne 'resource' && $useslots ne 'map' |
if ($useslots ne 'resource' && $useslots ne 'map' |
&& $useslots ne 'map_map') { |
&& $useslots ne 'map_map') { |
return ($status,$datemsg); |
return ($status,$datemsg); |
Line 238 sub check_slot_access {
|
Line 239 sub check_slot_access {
|
} |
} |
} |
} |
|
|
my $availablestudent = &Apache::lonnet::EXT("resource.0.availablestudent"); |
my $availablestudent = &Apache::lonnet::EXT("resource.0.availablestudent",$symb); |
my $available = &Apache::lonnet::EXT("resource.0.available"); |
my $available = &Apache::lonnet::EXT("resource.0.available",$symb); |
my @slots= (split(':',$availablestudent),split(':',$available)); |
my @slots= (split(':',$availablestudent),split(':',$available)); |
|
|
# if (!@slots) { |
# if (!@slots) { |
Line 311 sub check_slot_access {
|
Line 312 sub check_slot_access {
|
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my ($symb)=&Apache::lonnet::whichuser(); |
unless ($symb) { |
|
($symb)=&Apache::lonnet::whichuser(); |
|
} |
$slotstatus = 'NOTRESERVABLE'; |
$slotstatus = 'NOTRESERVABLE'; |
my ($reservable_now_order,$reservable_now,$reservable_future_order, |
my ($reservable_now_order,$reservable_now,$reservable_future_order, |
$reservable_future) = |
$reservable_future) = |
Line 365 sub check_slot_access {
|
Line 368 sub check_slot_access {
|
# JB, 9/24/2002: Any changes in this function may require a change |
# JB, 9/24/2002: Any changes in this function may require a change |
# in lonnavmaps::resource::getDateStatus. |
# in lonnavmaps::resource::getDateStatus. |
sub check_access { |
sub check_access { |
my ($id) = @_; |
my ($id,$symb) = @_; |
my $date =''; |
my $date =''; |
my $status; |
my $status; |
my $datemsg = ''; |
my $datemsg = ''; |
Line 395 sub check_access {
|
Line 398 sub check_access {
|
&Apache::lonxml::debug("checking for part :$id:"); |
&Apache::lonxml::debug("checking for part :$id:"); |
&Apache::lonxml::debug("time:".time); |
&Apache::lonxml::debug("time:".time); |
|
|
my ($symb)=&Apache::lonnet::whichuser(); |
unless ($symb) { |
|
($symb)=&Apache::lonnet::whichuser(); |
|
} |
&Apache::lonxml::debug("symb:".$symb); |
&Apache::lonxml::debug("symb:".$symb); |
#if ($env{'request.state'} ne "construct" && $symb ne '') { |
#if ($env{'request.state'} ne "construct" && $symb ne '') { |
if ($env{'request.state'} ne "construct") { |
if ($env{'request.state'} ne "construct") { |
my $idacc = &Apache::lonnet::EXT("resource.$id.acc"); |
my $idacc = &Apache::lonnet::EXT("resource.$id.acc",$symb); |
my $allowed=&Apache::loncommon::check_ip_acc($idacc); |
my $allowed=&Apache::loncommon::check_ip_acc($idacc); |
if (!$allowed && ($Apache::lonhomework::browse ne 'F')) { |
if (!$allowed && ($Apache::lonhomework::browse ne 'F')) { |
$status='INVALID_ACCESS'; |
$status='INVALID_ACCESS'; |
Line 415 sub check_access {
|
Line 420 sub check_access {
|
foreach my $temp ("opendate","duedate","answerdate") { |
foreach my $temp ("opendate","duedate","answerdate") { |
$lastdate = $date; |
$lastdate = $date; |
if ($temp eq 'duedate') { |
if ($temp eq 'duedate') { |
$date = &due_date($id); |
$date = &due_date($id,$symb); |
} else { |
} else { |
$date = &Apache::lonnet::EXT("resource.$id.$temp"); |
$date = &Apache::lonnet::EXT("resource.$id.$temp",$symb); |
} |
} |
|
|
my $thistype = &Apache::lonnet::EXT("resource.$id.$temp.type"); |
my $thistype = &Apache::lonnet::EXT("resource.$id.$temp.type",$symb); |
if ($thistype =~ /^(con_lost|no_such_host)/ || |
if ($thistype =~ /^(con_lost|no_such_host)/ || |
$date =~ /^(con_lost|no_such_host)/) { |
$date =~ /^(con_lost|no_such_host)/) { |
$status='UNAVAILABLE'; |
$status='UNAVAILABLE'; |
Line 429 sub check_access {
|
Line 434 sub check_access {
|
} |
} |
if ($thistype eq 'date_interval') { |
if ($thistype eq 'date_interval') { |
if ($temp eq 'opendate') { |
if ($temp eq 'opendate') { |
$date=&Apache::lonnet::EXT("resource.$id.duedate")-$date; |
$date=&Apache::lonnet::EXT("resource.$id.duedate",$symb)-$date; |
} |
} |
if ($temp eq 'answerdate') { |
if ($temp eq 'answerdate') { |
$date=&Apache::lonnet::EXT("resource.$id.duedate")+$date; |
$date=&Apache::lonnet::EXT("resource.$id.duedate",$symb)+$date; |
} |
} |
} |
} |
&Apache::lonxml::debug("found :$date: for :$temp:"); |
&Apache::lonxml::debug("found :$date: for :$temp:"); |
Line 466 sub check_access {
|
Line 471 sub check_access {
|
(($Apache::lonhomework::browse eq 'F') && ($status eq 'CLOSED'))) { |
(($Apache::lonhomework::browse eq 'F') && ($status eq 'CLOSED'))) { |
#check #tries, and if correct. |
#check #tries, and if correct. |
my $tries = $Apache::lonhomework::history{"resource.$id.tries"}; |
my $tries = $Apache::lonhomework::history{"resource.$id.tries"}; |
my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries"); |
my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries",$symb); |
if ( $tries eq '' ) { $tries = '0'; } |
if ( $tries eq '' ) { $tries = '0'; } |
if ( $maxtries eq '' && |
if ( $maxtries eq '' && |
$env{'request.state'} ne 'construct') { $maxtries = '2'; } |
$env{'request.state'} ne 'construct') { $maxtries = '2'; } |
Line 475 sub check_access {
|
Line 480 sub check_access {
|
if ( ($Apache::lonhomework::history{"resource.$id.solved"}=~/^correct/) |
if ( ($Apache::lonhomework::history{"resource.$id.solved"}=~/^correct/) |
&& (&show_problem_status()) ) { |
&& (&show_problem_status()) ) { |
if (($Apache::lonhomework::history{"resource.$id.awarded"} >= 1) || |
if (($Apache::lonhomework::history{"resource.$id.awarded"} >= 1) || |
(&Apache::lonnet::EXT("resource.$id.retrypartial") !~/^1|on|yes$/i)) { |
(&Apache::lonnet::EXT("resource.$id.retrypartial",$symb) !~/^1|on|yes$/i)) { |
$status = 'CANNOT_ANSWER'; |
$status = 'CANNOT_ANSWER'; |
} |
} |
} elsif ($Apache::lonhomework::history{"resource.$id.solved"}=~/^excused/) { |
} elsif ($Apache::lonhomework::history{"resource.$id.solved"}=~/^excused/) { |
Line 487 sub check_access {
|
Line 492 sub check_access {
|
} |
} |
} |
} |
if ($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER') { |
if ($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER') { |
my @interval=&Apache::lonnet::EXT("resource.$id.interval"); |
my @interval=&Apache::lonnet::EXT("resource.$id.interval",$symb); |
&Apache::lonxml::debug("looking for interval @interval"); |
&Apache::lonxml::debug("looking for interval @interval"); |
if ($interval[0]) { |
if ($interval[0]) { |
my $first_access=&Apache::lonnet::get_first_access($interval[1]); |
my $first_access=&Apache::lonnet::get_first_access($interval[1],$symb); |
&Apache::lonxml::debug("looking for accesstime $first_access"); |
&Apache::lonxml::debug("looking for accesstime $first_access"); |
if (!$first_access) { |
if (!$first_access) { |
$status='NOT_YET_VIEWED'; |
$status='NOT_YET_VIEWED'; |
my $due_date = &due_date($id); |
my $due_date = &due_date($id,$symb); |
my $seconds_left = $due_date - time; |
my $seconds_left = $due_date - time; |
if ($seconds_left > $interval[0] || $due_date eq '') { |
if ($seconds_left > $interval[0] || $due_date eq '') { |
$seconds_left = $interval[0]; |
$seconds_left = $interval[0]; |
Line 1015 sub editxmlmode {
|
Line 1020 sub editxmlmode {
|
&mt('Problem Editing').' '.&Apache::loncommon::help_open_topic('Problem_Editor_XML_Index'). |
&mt('Problem Editing').' '.&Apache::loncommon::help_open_topic('Problem_Editor_XML_Index'). |
'</div><div class="LC_edit_actionbar" id="actionbar">'; |
'</div><div class="LC_edit_actionbar" id="actionbar">'; |
|
|
$result.='<input type="hidden" name="problemmode" value="saveedit" />'. |
$result.='<input type="hidden" name="problemmode" value="saveedit" />'. |
&Apache::structuretags::problem_edit_buttons('editxml'); |
&Apache::structuretags::problem_edit_buttons('editxml'); |
$result.='<div class="LC_edit_problem_discards">'; |
$result.='<div>'; |
|
|
unless ($env{'environment.nocodemirror'}) { |
$result .= '<ol class="LC_primary_menu" style="display:inline-block;font-size:90%;vertical-align:middle;">'; |
# dropdown menues |
|
$result .= '<ol class="LC_primary_menu LC_floatleft">'. |
unless ($env{'environment.nocodemirror'}) { |
&Apache::lonmenu::create_submenu("#", "", &mt("Insert Menu"), &Apache::structuretags::insert_menu_datastructure(),"").'</ol>'; |
# dropdown menus |
} |
$result .= Apache::lonmenu::create_submenu("#", "", |
$result .= '<ol class="LC_primary_menu LC_floatleft">'. |
&mt("Problem Templates"), template_dropdown_datastructure()); |
Apache::lonmenu::create_submenu("#", "", &mt("Help"), &Apache::structuretags::helpmenu_datastructure(),"").'</ol>'; |
|
$result.="</div>"; |
$result .= Apache::lonmenu::create_submenu("#", "", |
|
&mt("Response Types"), responseblock_dropdown_datastructure()); |
|
|
|
$result .= Apache::lonmenu::create_submenu("#", "", |
|
&mt("Conditional Blocks"), conditional_scripting_datastructure()); |
|
|
|
$result .= Apache::lonmenu::create_submenu("#", "", |
|
&mt("Miscellaneous"), misc_datastructure()); |
|
} |
|
|
|
$result .= Apache::lonmenu::create_submenu("#", "", |
|
&mt("Help") . ' <img src="/adm/help/help.png" alt="' . &mt("Help") . |
|
'" style="vertical-align:text-bottom; height: auto; margin:0; "/>', |
|
helpmenu_datastructure(),""); |
|
|
|
$result.="</ol></div>"; |
|
|
$result.='<hr style="clear:both;visibility:hidden" /></div></div>'.&Apache::lonxml::message_location(). |
$result .= '</div></div>' . |
&Apache::loncommon::xmleditor_js(). |
&Apache::lonxml::message_location() . |
'<textarea '.&Apache::edit::element_change_detection(). |
&Apache::loncommon::xmleditor_js() . |
' rows="'.$rows.'" cols="'.$cols.'" style="width:100%" '. |
'<textarea ' . &Apache::edit::element_change_detection() . |
' name="editxmltext" id="LC_editxmltext">'. |
' rows="'.$rows.'" cols="'.$cols.'" style="width:100%" ' . |
&HTML::Entities::encode($problem,'<>&"').'</textarea> |
' name="editxmltext" id="LC_editxmltext">' . |
<div id="LC_aftertextarea"> |
&HTML::Entities::encode($problem,'<>&"') . |
</div> |
'</textarea> <div id="LC_aftertextarea"> </div> </form>'; |
</form>'; |
|
my $resource = $env{'request.ambiguous'}; |
my $resource = $env{'request.ambiguous'}; |
unless($env{'environment.nocodemirror'}){ |
unless($env{'environment.nocodemirror'}){ |
|
$result .= '<link rel="stylesheet" href="/adm/codemirror/codemirror-combined-xml.css"> |
$result .= '<link rel="stylesheet" href="/adm/codemirror/codemirror-combined-xml.css"> |
<script src="/adm/codemirror/codemirror-compressed-xml.js"></script> |
<script src="/adm/codemirror/codemirror-compressed-xml.js"></script> |
<script> |
<script> |
CodeMirror.defineMode("mixedmode", function(config) { |
CodeMirror.defineMode("mixedmode", function(config) { |
return CodeMirror.multiplexingMode( |
return CodeMirror.multiplexingMode( |
CodeMirror.getMode(config, "xml"), |
CodeMirror.getMode(config, "xml"), |
{ |
{ |
open: "\<script type=\"loncapa/perl\"\>", close: "\</script\>", |
open: "\<script type=\"loncapa/perl\"\>", close: "\</script\>", |
mode: CodeMirror.getMode(config, "perl"), |
mode: CodeMirror.getMode(config, "perl"), |
delimStyle: "tag", |
delimStyle: "tag", |
} |
} |
); |
); |
}); |
}); |
var cm = CodeMirror.fromTextArea(document.getElementById("LC_editxmltext"), |
var cm = CodeMirror.fromTextArea(document.getElementById("LC_editxmltext"), |
{ |
{ |
mode: "mixedmode", |
mode: "mixedmode", |
lineWrapping: true, |
lineWrapping: true, |
lineNumbers: true, |
lineNumbers: true, |
tabSize: 4, |
tabSize: 4, |
indentUnit: 4, |
indentUnit: 4, |
|
|
autoCloseTags: true, |
autoCloseTags: true, |
autoCloseBrackets: true, |
autoCloseBrackets: true, |
height: "auto", |
height: "auto", |
styleActiveLine: true, |
styleActiveLine: true, |
|
|
extraKeys: { |
extraKeys: { |
"Tab": "indentMore", |
"Tab": "indentMore", |
"Shift-Tab": "indentLess", |
"Shift-Tab": "indentLess", |
} |
} |
}); |
}); |
restoreScrollPosition("'.$resource.'"); |
restoreScrollPosition("'.$resource.'"); |
</script>'; |
</script>'; |
} |
} |
|
$result .= &Apache::loncommon::end_page(); |
$result .= &Apache::loncommon::end_page(); |
&Apache::lonxml::add_messages(\$result); |
&Apache::lonxml::add_messages(\$result); |
$request->print($result); |
$request->print($result); |
} |
} |
return ''; |
return ''; |
} |
} |
Line 1340 sub update_construct_style {
|
Line 1360 sub update_construct_style {
|
sub zero_timer { |
sub zero_timer { |
my ($symb) = @_; |
my ($symb) = @_; |
my ($hastimeleft,$first_access,$now); |
my ($hastimeleft,$first_access,$now); |
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
my @interval=&Apache::lonnet::EXT("resource.0.interval",$symb); |
if (@interval > 1) { |
if (@interval > 1) { |
if ($interval[1] eq 'course') { |
if ($interval[1] eq 'course') { |
return; |
return; |
Line 1380 sub handler {
|
Line 1400 sub handler {
|
my $file=&Apache::lonnet::filelocation("",$request->uri); |
my $file=&Apache::lonnet::filelocation("",$request->uri); |
|
|
#check if we know where we are |
#check if we know where we are |
if ($env{'request.course.fn'} && !&Apache::lonnet::symbread()) { |
if ($env{'request.course.fn'} && !&Apache::lonnet::symbread('','',1,1)) { |
# if we are browsing we might not be able to know where we are |
# if we are browsing we might not be able to know where we are |
if ($Apache::lonhomework::browse ne 'F' && |
if ($Apache::lonhomework::browse ne 'F' && |
$env{'request.state'} ne "construct") { |
$env{'request.state'} ne "construct") { |
Line 1444 sub handler {
|
Line 1464 sub handler {
|
|
|
} |
} |
|
|
|
sub template_dropdown_datastructure { |
|
# gathering the all templates and their path, title, category and help topic |
|
my @templates = get_template_list('problem'); |
|
# template category => title |
|
my %tmplthash = (); |
|
# template title => path |
|
my %tmpltcontent = (); |
|
|
|
foreach my $template (@templates){ |
|
# put in hash if the template is not empty |
|
unless ($template->[1] eq ''){ |
|
push(@{$tmplthash{$template->[2]}}, $template->[1]); |
|
push(@{$tmpltcontent{$template->[1]}},$template->[0]); |
|
} |
|
} |
|
|
|
my $catList = []; |
|
foreach my $cat (sort keys %tmplthash) { |
|
my $catItems = []; |
|
foreach my $title (sort @{$tmplthash{$cat}}) { |
|
my $path = $tmpltcontent{$title}->[0]; |
|
my $code; |
|
open(FH, "<$path"); |
|
while(<FH>){ |
|
$code.= $_ unless $_ =~ /(<problem>)|(<\/problem>)/; |
|
} |
|
close(FH); |
|
|
|
if ($code ne '') { |
|
my $href = 'javascript:insertText(\'' . &convert_for_js(&HTML::Entities::encode($code,'<>&"')) . '\')'; |
|
my $currItem = [$href, $title, undef]; |
|
push @{$catItems}, $currItem; |
|
} |
|
} |
|
push @{$catList}, [$catItems, $cat, undef]; |
|
} |
|
|
|
return $catList; |
|
} |
|
|
|
sub responseblock_dropdown_datastructure { |
|
|
|
my $mathCat = [ |
|
[ |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_formularesponse())) . "\')", &mt("Formula Response"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_functionplotresponse())) . "\')", &mt("Function Plot Response"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_mathresponse())) . "\')", &mt("Math Response"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_numericalresponse())) . "\')", &mt("Numerical Response"), undef] |
|
], |
|
&mt("Math"), |
|
undef |
|
]; |
|
|
|
my $miscCat = [ |
|
[ |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_imageresponse())) . "\')", &mt("Click on Image"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_customresponse())) . "\')", &mt("Custom Response"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_externalresponse())) . "\')", &mt("External Response"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_matchresponse())) . "\')", &mt("Match Two Lists"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_radiobuttonresponse())) . "\')", &mt("One out of N statements"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_optionresponse())) . "\')", &mt("Select from Options"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_rankresponse())) . "\')", &mt("Rank Values"), undef] |
|
], |
|
&mt("Miscellaneous"), |
|
undef |
|
]; |
|
|
|
my $chemCat = [ |
|
[ |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_reactionresponse())) . "\')", &mt("Chemical Reaction"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_organicresponse())) . "\')", &mt("Organic Chemical Structure"), undef] |
|
], |
|
&mt("Chemistry"), |
|
undef |
|
]; |
|
|
|
my $textCat = [ |
|
[ |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_stringresponse())) . "\')", &mt("String Response"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_essayresponse())) . "\')", &mt("Essay"), undef] |
|
], |
|
&mt("Text"), |
|
undef |
|
]; |
|
|
|
return [$mathCat, $miscCat, $chemCat, $textCat]; |
|
} |
|
|
|
|
|
sub conditional_scripting_datastructure { |
|
# TODO: corresponding routines should be used for the javascript:insertText parts |
|
# instead of the placeholder routine default_xml_tag with the tags |
|
# e.g. &default_xml_tag("postanswerdate") should be replaced with a routine which |
|
# returns the corresponding content for this case |
|
|
|
#TODO translated is currently temporarily here, another solution should be found where the |
|
# needed string can be retrieved |
|
|
|
my $translatedTag = ' |
|
<translated> |
|
<lang which="en"></lang> |
|
<lang which="default"></lang> |
|
</translated>'; |
|
return [ |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode($translatedTag)) . "\')", &mt("Translated Block"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("block"))) . "\')", &mt("Conditional Block"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("postanswerdate"))) . "\')", &mt("After Answer Date Block"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("preduedate"))) . "\')", &mt("Before Due Date Block"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("solved"))) . "\')", &mt("Block For After Solved"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("notsolved"))) . "\')", &mt("Block For When Not Solved"), undef] |
|
]; |
|
} |
|
|
|
sub misc_datastructure { |
|
return [ |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_img())) . "\')", &mt("Image"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::lonplot::insert_gnuplot())) . "\')", &mt("GNU Plot"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_organicstructure())) . "\')", &mt("Organic Structure"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_script())) . "\')", &mt("Script Block"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("allow"))) . "\')", &mt("File Dependencies"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("import"))) . "\')", &mt("Import a File"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::londefdef::insert_meta())) . "\')", &mt("Custom Metadata"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("part"))) . "\')", &mt("Problem Part"), undef] |
|
]; |
|
} |
|
|
|
# helper routine for the datastructure building subroutines |
|
sub default_xml_tag { |
|
my ($tag) = @_; |
|
return "\n<$tag></$tag>"; |
|
} |
|
|
|
|
|
sub helpmenu_datastructure { |
|
|
|
my $width = 500; |
|
my $height = 600; |
|
|
|
my $helpers = [ |
|
['Problem_LON-CAPA_Functions', &mt('Script Functions')], |
|
['Greek_Symbols', &mt('Greek Symbols')], |
|
['Other_Symbols', &mt('Other Symbols')], |
|
['Authoring_Output_Tags', &mt('Output Tags')], |
|
['Authoring_Multilingual_Problems', |
|
&mt('How to create problems in different languages')] |
|
]; |
|
|
|
my $help_structure = []; |
|
|
|
foreach my $count (0..(scalar(@{$helpers})-1)) { |
|
my $filename = $helpers->[$count]->[0]; |
|
my $title = $helpers->[$count]->[1]; |
|
my $href = &HTML::Entities::encode("javascript:openMyModal('/adm/help/$filename.hlp',$width,$height,'yes');"); |
|
push @{$help_structure}, [$href, $title, undef]; |
|
} |
|
|
|
return $help_structure; |
|
} |
|
|
|
# we need substitution to not break javascript code |
|
sub convert_for_js { |
|
my $return = shift; |
|
$return =~ s|script|ESCAPEDSCRIPT|g; |
|
$return =~ s|\\|\\\\|g; |
|
$return =~ s|\n|\\r\\n|g; |
|
$return =~ s|'|\\'|g; |
|
$return =~ s|'|\\'|g; |
|
return $return; |
|
} |
|
|
1; |
1; |
__END__ |
__END__ |