Diff for /loncom/homework/daxepage.pm between versions 1.8 and 1.17

version 1.8, 2023/11/26 02:15:29 version 1.17, 2024/04/19 03:48:23
Line 31  package Apache::daxepage; Line 31  package Apache::daxepage;
 use strict;  use strict;
   
 use Apache::loncommon();  use Apache::loncommon();
   use Apache::lonnet();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
   use Apache::lonxml();
   use Apache::edit();
 use Apache::lonmenu();  use Apache::lonmenu();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
   use LONCAPA qw(:DEFAULT :match);
 use HTML::Entities();  use HTML::Entities();
   
 sub handler {  sub handler {
Line 42  sub handler { Line 46  sub handler {
     my $uri = $request->uri;      my $uri = $request->uri;
     $uri =~ s{^/daxepage}{};      $uri =~ s{^/daxepage}{};
     &Apache::loncommon::content_type($request,'text/html');      &Apache::loncommon::content_type($request,'text/html');
     if ($uri !~ /\.(task|problem|exam|quiz|assess|survey|library|xml|html|htm|xhtml|xhtm)$/) {      my ($is_not_assess,$is_assess,$is_course_doc,$is_supp,$supp_path,$supp_title);
       if ($uri =~/\.(xml|html|htm|xhtml|xhtm)$/) {
           $is_not_assess = 1;
           if ($Apache::lonnet::env{'request.course.id'}) {
               my $cid = $Apache::lonnet::env{'request.course.id'};
               my $cdom = $Apache::lonnet::env{'course.'.$cid.'.domain'};
               my $cnum = $Apache::lonnet::env{'course.'.$cid.'.num'};
               if ($uri =~ m{^/uploaded/\Q$cdom/$cnum\E/(docs|supplemental)/}) {
                   if ($1 eq 'supplemental') {
                       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                                               ['folderpath','title']);
                       $is_supp = 1;
                       $supp_path = &escape(&HTML::Entities::decode($Apache::lonnet::env{'form.folderpath'}));
                       $supp_title = &escape(&HTML::Entities::decode($Apache::lonnet::env{'form.title'}));
                   }
                   $is_course_doc = 1;
                   $Apache::lonnet::env{'form.forceedit'} = 1;
               }
           }
       } elsif ($uri =~ /$LONCAPA::assess_re/) {
           unless ($uri =~ /\.form$/) {
               $is_assess = 1;
           }
       }
       unless ($is_not_assess || $is_assess) {
         $request->status(406);          $request->status(406);
         return OK;          return OK;
     }      }
     my %editors = &Apache::loncommon::permitted_editors();      my %editors = &Apache::loncommon::permitted_editors($uri);
     unless ($editors{'daxe'}) {      unless ($editors{'daxe'}) {
         my $msg = '<p class="LC_warning">'.          my $msg = '<p class="LC_warning">'.
                   &mt('Daxe editor is not enabled for this Authoring Space.').'</p>';                    &mt('Daxe editor is not enabled for this Authoring Space.').'</p>';
         &do_redirect($request,$uri,$msg);          &do_redirect($request,$uri,$msg);
         return OK;          return OK;
     }      }
       if ($is_not_assess) {
           delete($editors{'xml'});
           $editors{'edit'} = 1;
           $Apache::lonnet::env{'form.editmode'} = 'daxe';
       } else {
           $Apache::lonnet::env{'form.problemmode'} = 'daxe';
       }
       &Apache::lonhtmlcommon::clear_breadcrumbs();
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                                           'noif' => 'No iframe support.',                                            'noif' => 'No iframe support.',
                                           'show' => 'Show content in pop-up window',                                            'show' => 'Show content in pop-up window',
                                             'save' => 'Save',
                                             'text' => 'Text Editor',
                                             'oeds' => 'other editors',
                                             'othe' => 'other editor',
                                             'edit' => 'Save and Edit',
                                             'disc' => 'Discard and View',
                                             'save' => 'Save and View',
                                         );                                          );
     my $name = $uri;      my $name = $uri;
     $name =~ s/^.*\/([^\/]+)$/$1/;      $name =~ s/^.*\/([^\/]+)$/$1/;
       my $lang = &Apache::lonlocal::current_language();
       my $filearg = '/daxeopen'.$uri;
     my $daxeurl = '/adm/daxe/daxe.html?config=config/loncapa_config.xml&save=/daxesave'.      my $daxeurl = '/adm/daxe/daxe.html?config=config/loncapa_config.xml&save=/daxesave'.
                   '&file=/daxeopen'.$uri;                    '&file='.$filearg;
     my $headjs = &Apache::loncommon::iframe_wrapper_headjs().      my $headjs = &Apache::loncommon::iframe_wrapper_headjs().
                  &toggle_LCmenus_js();                   &listener_js($lang,$filearg,$is_assess).
                    &toggle_LCmenus_js().&saveandview_js().
                    &Apache::edit::js_change_detection();
   
       my ($clickexit,$clicksave,$clickedit);
       if ($is_assess) {
           $headjs .= &Apache::lonxml::setmode_javascript();
           $clickexit = "javascript:setmode(this.form,'view');";
       } else {
           $headjs .= &Apache::lonxml::seteditor_javascript($is_course_doc,$is_supp,
                                                            $supp_path,$supp_title);
           $clickexit = "javascript:seteditmode(this.form,'view');";
       }
       $clicksave = "javascript:daxesave('exit');";
       $clickedit = "javascript:daxesave();";
       my $form_events = &Apache::edit::form_change_detection();
       my $editheader = '<form '.$form_events.' method="post" name="daxeedit" action="'.$uri.'">';
       if ($is_assess) {
           $editheader .= '<input type="hidden" name="problemmode" value="daxe" />'."\n";
       }
       $editheader .= '<div class="LC_edit_problem_editxml_header">'."\n";
       my $saveeditbutton = '<input type="button" name="submitmode" accesskey="s" value="'.$lt{'edit'}.
                        '" onclick="'.$clickedit.'" />'."\n";
       my $exitbutton = '<input type="button" name="submitmode" accesskey="d" value="'.$lt{'disc'}.
                        '" onclick="'.$clickexit.'" />'."\n";
       my $saveexitbutton = '<input type="button" name="submitmode" accesskey="v" value="'.$lt{'save'}.
                        '" onclick="'.$clicksave.'" />'."\n";
       $editheader .= '<table class="LC_edit_problem_header_title"><tr><td>'.
                      $uri.'</td><td align="right"><span class="LC_nobreak">'.
                      $saveeditbutton.$saveexitbutton.$exitbutton.'</span>';
       if ($editors{'edit'} || $editors{'xml'}) {
           my $other = (($editors{'edit'} && $editors{'xml'})? $lt{'oeds'} : $lt{'othe'});
           $editheader .= '&nbsp;&nbsp;|&nbsp;&nbsp;<span class="LC_nobreak">'.$other.':</span> '.
                          '<span class="LC_nobreak">';
           if ($is_not_assess) {
               $editheader .= '<input type="hidden" name="editmode" value="daxe" />'."\n".
                              '<input type="button" name="editordefault" value="'.$lt{'text'}.
                              '" onclick="javascript:seteditmode(this.form,'."'edit'".');" />'."\n";
           } else {
               if ($editors{'edit'}) {
                   $editheader .= '<input type="button" name="submitmode" accesskey="e" value="'.&mt('Edit').'" '.
                                  'onclick="javascript:setmode(this.form,'."'edit'".')" />'."\n";
               }
               if ($editors{'xml'}) {
                   $editheader .= '<input type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" '.
                                  'onclick="javascript:setmode(this.form,'."'editxml'".')" />'."\n";
               }
           }
           $editheader .= '</span>';
       }
       $editheader .= '</td></tr></table></div></form>'."\n";
       my $start_collapsed = &collapsible_std_LCmenus();
     my $args = {      my $args = {
                 'collapsible_header' => 1,                  'collapsible_header' => $editheader,
                   'start_collapsed'    => $start_collapsed,
                };                 };
     my $startpage = &Apache::loncommon::start_page('Daxe: '.$name,$headjs,$args).      my $startpage = &Apache::loncommon::start_page('Daxe: '.$name,$headjs,$args).
                     &Apache::lonmenu::constspaceform();                      &Apache::lonmenu::constspaceform();
Line 79  sub handler { Line 176  sub handler {
 $startpage  $startpage
 $script  $script
 <div class="LC_iframecontainer" style="padding-right: 5px">  <div class="LC_iframecontainer" style="padding-right: 5px">
 <iframe src="$dest">$lt{'noif'} $noiframe</iframe>  <iframe src="$dest" id="lcdiframe">$lt{'noif'} $noiframe</iframe>
 </div>  </div>
 $endpage  $endpage
 ENDFRAME  ENDFRAME
     return OK;      return OK;
 }  }
   
   sub listener_js {
       my ($lang,$filearg,$is_assess) = @_;
       return <<"ENDJS";
   <script type="text/javascript">
   //<![CDATA[
   
   var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
   var eventer = window[eventMethod];
   var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
   
   eventer(messageEvent,function(e) {
       var reqdOrigin = window.location.protocol+'//'+window.location.hostname;
       var is_assess = '$is_assess';
       if (e.origin == reqdOrigin) {
           if (e.data == '$filearg') {
               if (is_assess) {
                   setmode(document.daxeedit,'view');
               } else {
                   seteditmode(document.daxeedit,'view');
               }
           } else if ((e.data == 'userlclang') || (e.data == 'userlang')) {
               window.myIframe = document.getElementById("lcdiframe").contentWindow;
               window.myIframe.postMessage(e.data+':$lang',reqdOrigin);
           }
           return;
       }
   },false);
   
   //]]>
   </script>
   ENDJS
   
   }
   
   sub saveandview_js {
       return <<"ENDJS";
   
   <script type="text/javascript">
   //<![CDATA[
   
   function daxesave(exit) {
       window.myIframe = document.getElementById("lcdiframe").contentWindow;
       window.myIframe.focus();
       window.myIframe.savelcdoc(exit);
       return;
   }
   
   //]]>
   </script>
   ENDJS
   }
   
 sub toggle_LCmenus_js {  sub toggle_LCmenus_js {
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                                          altc => 'menu state: collapsed',                                           altc => 'menu state: collapsed',
Line 149  sub do_redirect { Line 298  sub do_redirect {
     return;      return;
 }  }
   
   sub collapsible_std_LCmenus {
       my $daxecollapse = $Apache::lonnet::env{'environment.daxecollapse'};
       unless ($daxecollapse) {
           my %domdefs = &Apache::lonnet::get_domain_defaults($Apache::lonnet::env{'user.domain'});
           if ($domdefs{'daxecollapse'}) {
               $daxecollapse = 'yes';
           }
       }
       if ($daxecollapse eq 'yes') {
           return 1;
       }
       return;
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.8  
changed lines
  Added in v.1.17


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>