Diff for /loncom/interface/lonparmset.pm between versions 1.623 and 1.626

version 1.623, 2025/06/30 20:29:03 version 1.626, 2025/07/02 16:33:51
Line 1285  ENDSCRIPT Line 1285  ENDSCRIPT
   
 # Javascript function validateParms, for overview mode  # Javascript function validateParms, for overview mode
 sub validateparms_js {  sub validateparms_js {
     return <<'ENDSCRIPT';      my %lt = &Apache::lonlocal::texthash (
                  nodom => "A link type of 'domain LTI launch' was selected but no domain LTI launcher was selected.",
                  nocrs => "A link type of 'course LTI launch' was selected but no course LTI launcher was selected.",
                  plss  => 'Please select one, or choose a different supported link type.',
                  disa  => 'disallowed character(s) removed from deeplink key.',
                  nokyr => "A link type of 'deep with key' was selected but the key value was blank, after removing disallowed characters.",
                  plse  => 'Please enter a key using one or more of:',
                  nokey => "A link type of 'deep with key' was selected but the key value was blank.",
                  plsk  => 'Please enter a key.',
                  dise  => 'disallowed character(s) removed from Exit Button text.',
                  exit  => "An exit link type of 'In use' was selected but the button text value was blank, after removing disallowed characters.",
                  disc  => 'Disallowed characters are ',
                  notxt => "An exit link type of 'In use' was selected but the button text value was blank.",
                  plst  => 'Please enter the text to use.',
                  gppc  => 'Grace Period Past-Due: enter partial credit (number between 0 and 1.0).',
                  gpsn  => 'Grace Period Past-Due: select a number in at least one of the time past due select boxes, or delete the value for partial credit.',
       );
       &js_escape(\%lt);
       return <<"ENDSCRIPT";
   
 function validateParms() {  function validateParms() {
     var textRegExp = /^settext_/;      var textRegExp = /^settext_/;
     var tailLenient = /\.lenient$/;      var tailLenient = /\\.lenient\$/;
     var patternRelWeight = /^\-?[\d.]+$/;      var patternRelWeight = /^\\-?[\\d.]+\$/;
     var patternLenientStd = /^(yes|no|default)$/;      var patternLenientStd = /^(yes|no|default)\$/;
     var ipRegExp = /^setip/;      var ipRegExp = /^setip/;
     var ipallowRegExp = /^setipallow_/;      var ipallowRegExp = /^setipallow_/;
     var ipdenyRegExp = /^setipdeny_/;       var ipdenyRegExp = /^setipdeny_/; 
Line 1307  function validateParms() { Line 1325  function validateParms() {
     var dlTargetRegExp = /^deeplink_target_/;      var dlTargetRegExp = /^deeplink_target_/;
     var dlExitRegExp = /^deeplink_exit_/;      var dlExitRegExp = /^deeplink_exit_/;
     var dlExitTextRegExp = /^deeplink_exittext_/;      var dlExitTextRegExp = /^deeplink_exittext_/;
     var patternIP = /[\[\]\*\.a-zA-Z\d\-]+/;      var patternIP = /[\\[\\]\\*\\.a-zA-Z\\d\\-]+/;
     var patternGrace = /^\d+:(0|1)\.?\d*:(0|1)\$/;      var patternGrace = /^\\d+:(0|1)\\.?\\d*:(0|1)\$/;
     var numelements = document.parmform.elements.length;      var numelements = document.parmform.elements.length;
     if ((typeof(numelements) != 'undefined') && (numelements != null)) {      if ((typeof(numelements) != 'undefined') && (numelements != null)) {
         if (numelements) {          if (numelements) {
Line 1322  function validateParms() { Line 1340  function validateParms() {
                                 if (document.parmform.elements['set_'+identifier][j].checked) {                                  if (document.parmform.elements['set_'+identifier][j].checked) {
                                     if (!(patternLenientStd.test(document.parmform.elements['set_'+identifier][j].value))) {                                      if (!(patternLenientStd.test(document.parmform.elements['set_'+identifier][j].value))) {
                                         var relweight = document.parmform.elements[i].value;                                          var relweight = document.parmform.elements[i].value;
                                         relweight = relweight.replace(/^\s+|\s+$/g,'');                                          relweight = relweight.replace(/^\s+|\s+\$/g,'');
                                         if (!patternRelWeight.test(relweight)) {                                          if (!patternRelWeight.test(relweight)) {
                                             relweight = '0.0';                                              relweight = '0.0';
                                         }                                          }
Line 1341  function validateParms() { Line 1359  function validateParms() {
                     if (ipallowRegExp.test(name)) {                      if (ipallowRegExp.test(name)) {
                         var identifier = name.replace(ipallowRegExp,'');                          var identifier = name.replace(ipallowRegExp,'');
                         var possallow = document.parmform.elements[i].value;                          var possallow = document.parmform.elements[i].value;
                         possallow = possallow.replace(/^\s+|\s+$/g,'');                          possallow = possallow.replace(/^\s+|\s+\$/g,'');
                         if (patternIP.test(possallow)) {                          if (patternIP.test(possallow)) {
                             if (document.parmform.elements['set_'+identifier].value) {                              if (document.parmform.elements['set_'+identifier].value) {
                                 possallow = ','+possallow;                                  possallow = ','+possallow;
Line 1351  function validateParms() { Line 1369  function validateParms() {
                     } else if (ipdenyRegExp.test(name)) {                      } else if (ipdenyRegExp.test(name)) {
                         var identifier = name.replace(ipdenyRegExp,'');                          var identifier = name.replace(ipdenyRegExp,'');
                         var possdeny = document.parmform.elements[i].value;                          var possdeny = document.parmform.elements[i].value;
                         possdeny = possdeny.replace(/^\s+|\s+$/g,'');                          possdeny = possdeny.replace(/^\s+|\s+\$/g,'');
                         if (patternIP.test(possdeny)) {                          if (patternIP.test(possdeny)) {
                             possdeny = '!'+possdeny;                              possdeny = '!'+possdeny;
                             if (document.parmform.elements['set_'+identifier].value) {                              if (document.parmform.elements['set_'+identifier].value) {
Line 1366  function validateParms() { Line 1384  function validateParms() {
                         var idx = document.parmform.elements[i].selectedIndex;                          var idx = document.parmform.elements[i].selectedIndex;
                         if (idx > 0) {                           if (idx > 0) { 
                             var possdeeplink = document.parmform.elements[i].options[idx].value                              var possdeeplink = document.parmform.elements[i].options[idx].value
                             possdeeplink = possdeeplink.replace(/^\s+|\s+$/g,'');                              possdeeplink = possdeeplink.replace(/^\s+|\s+\$/g,'');
                             if (document.parmform.elements['set_'+identifier].value) {                              if (document.parmform.elements['set_'+identifier].value) {
                                 possdeeplink = ','+possdeeplink;                                  possdeeplink = ','+possdeeplink;
                             }                              }
Line 1376  function validateParms() { Line 1394  function validateParms() {
                         if (document.parmform.elements[i].checked) {                          if (document.parmform.elements[i].checked) {
                             var identifier =  name.replace(dlLinkProtectRegExp,'');                              var identifier =  name.replace(dlLinkProtectRegExp,'');
                             var posslinkurl = document.parmform.elements[i].value;                              var posslinkurl = document.parmform.elements[i].value;
                             posslinkurl = posslinkurl.replace(/^\s+|\s+$/g,'');                              posslinkurl = posslinkurl.replace(/^\s+|\s+\$/g,'');
                             if (document.parmform.elements['set_'+identifier].value) {                              if (document.parmform.elements['set_'+identifier].value) {
                                 posslinkurl = ','+posslinkurl;                                  posslinkurl = ','+posslinkurl;
                             }                              }
Line 1394  function validateParms() { Line 1412  function validateParms() {
                                 document.parmform.elements['set_'+identifier].value += possltid;                                  document.parmform.elements['set_'+identifier].value += possltid;
                             } else {                              } else {
                                 document.parmform.elements['set_'+identifier].value = '';                                  document.parmform.elements['set_'+identifier].value = '';
                                 alert("A link type of 'domain LTI launch' was selected but no domain LTI launcher was selected.\nPlease select one, or choose a different supported link type.");                                  alert("$lt{'nodom'}\\n$lt{'plss'}");
                                 return false;                                    return false;  
                             }                              }
                         }                          }
Line 1410  function validateParms() { Line 1428  function validateParms() {
                                 document.parmform.elements['set_'+identifier].value += possltic;                                  document.parmform.elements['set_'+identifier].value += possltic;
                             } else {                              } else {
                                 document.parmform.elements['set_'+identifier].value = '';                                  document.parmform.elements['set_'+identifier].value = '';
                                 alert("A link type of 'course LTI launch' was selected but no course LTI launcher was selected.\nPlease select one, or choose a different supported link type.");                                  alert("$lt{'nocrs'}\\n$lt{'plss'}");
                                 return false;                                  return false;
                             }                              }
                         }                          }
Line 1418  function validateParms() { Line 1436  function validateParms() {
                         var identifier = name.replace(dlKeyRegExp,'');                          var identifier = name.replace(dlKeyRegExp,'');
                         if (isRadioSet('deeplink_protect_'+identifier,'key')) {                          if (isRadioSet('deeplink_protect_'+identifier,'key')) {
                             var posskey = document.parmform.elements[i].value;                              var posskey = document.parmform.elements[i].value;
                             posskey = posskey.replace(/^\s+|\s+$/g,'');                              posskey = posskey.replace(/^\s+|\s+\$/g,'');
                             var origlength = posskey.length;                              var origlength = posskey.length;
                             posskey = posskey.replace(/[^a-zA-Z\d_.!@#$%^&*()+=-]/g,'');                              posskey = posskey.replace(/[^a-zA-Z\d_.!\@#\$%^&*()+=-]/g,'');
                             var newlength = posskey.length;                              var newlength = posskey.length;
                             if (newlength > 0) {                              if (newlength > 0) {
                                 var change = origlength - newlength;                                  var change = origlength - newlength;
                                 if (change) {                                  if (change) {
                                     alert(change+' disallowed character(s) removed from deeplink key');                                       alert(change+" $lt{'disa'}"); 
                                 }                                  }
                                 if (document.parmform.elements['set_'+identifier].value) {                                  if (document.parmform.elements['set_'+identifier].value) {
                                     posskey = ':'+posskey;                                      posskey = ':'+posskey;
Line 1434  function validateParms() { Line 1452  function validateParms() {
                             } else {                              } else {
                                 document.parmform.elements['set_'+identifier].value = '';                                  document.parmform.elements['set_'+identifier].value = '';
                                 if (newlength < origlength) {                                  if (newlength < origlength) {
                                     alert("A link type of 'deep with key' was selected but the key value was blank, after removing disallowed characters.\nPlease enter a key using one or more of: a-zA-Z0-9_.!@#$%^&*()+=-");                                      alert("$lt{'nokyr'}\\n$lt{'plse'} "+'a-zA-Z0-9_.!\@#\$%^&*()+=-');
                                 } else {                                  } else {
                                     alert("A link type of 'deep with key' was selected but the key value was blank.\nPlease enter a key.");                                      alert("$lt{'nokey'}\\n$lt{'plsk'}");
                                 }                                  }
                                 return false;                                  return false;
                             }                              }
Line 1445  function validateParms() { Line 1463  function validateParms() {
                         if (document.parmform.elements[i].checked) {                          if (document.parmform.elements[i].checked) {
                             var identifier =  name.replace(dlMenusRegExp,'');                              var identifier =  name.replace(dlMenusRegExp,'');
                             var posslinkmenu = document.parmform.elements[i].value;                              var posslinkmenu = document.parmform.elements[i].value;
                             posslinkmenu = posslinkmenu.replace(/^\s+|\s+$/g,'');                              posslinkmenu = posslinkmenu.replace(/^\s+|\s+\$/g,'');
                             if (posslinkmenu == 'std') {                              if (posslinkmenu == 'std') {
                                 posslinkmenu = '0';                                  posslinkmenu = '0';
                                 if (document.parmform.elements['set_'+identifier].value) {                                  if (document.parmform.elements['set_'+identifier].value) {
Line 1468  function validateParms() { Line 1486  function validateParms() {
                         var idx = document.parmform.elements[i].selectedIndex;                          var idx = document.parmform.elements[i].selectedIndex;
                         if (idx > 0) {                          if (idx > 0) {
                             var linktarget = document.parmform.elements[i].options[idx].value                              var linktarget = document.parmform.elements[i].options[idx].value
                             linktarget = linktarget.replace(/^\s+|\s+$/g,'');                              linktarget = linktarget.replace(/^\s+|\s+\$/g,'');
                             if (document.parmform.elements['set_'+identifier].value) {                              if (document.parmform.elements['set_'+identifier].value) {
                                 linktarget = ','+linktarget;                                  linktarget = ','+linktarget;
                             }                              }
Line 1478  function validateParms() { Line 1496  function validateParms() {
                         if (document.parmform.elements[i].checked) {                          if (document.parmform.elements[i].checked) {
                             var identifier =  name.replace(dlExitRegExp,'');                              var identifier =  name.replace(dlExitRegExp,'');
                             var posslinkexit = document.parmform.elements[i].value;                              var posslinkexit = document.parmform.elements[i].value;
                             posslinkexit = posslinkexit.replace(/^\s+|\s+$/g,'');                              posslinkexit = posslinkexit.replace(/^\s+|\s+\$/g,'');
                             if (document.parmform.elements['set_'+identifier].value) {                              if (document.parmform.elements['set_'+identifier].value) {
                                 posslinkexit = ','+posslinkexit;                                  posslinkexit = ','+posslinkexit;
                             }                              }
Line 1489  function validateParms() { Line 1507  function validateParms() {
                         if ((isRadioSet('deeplink_exit_'+identifier,'yes')) ||                          if ((isRadioSet('deeplink_exit_'+identifier,'yes')) ||
                             (isRadioSet('deeplink_exit_'+identifier,'url'))) {                              (isRadioSet('deeplink_exit_'+identifier,'url'))) {
                             var posstext = document.parmform.elements[i].value;                              var posstext = document.parmform.elements[i].value;
                             posstext = posstext.replace(/^\s+|\s+$/g,'');                              posstext = posstext.replace(/^\s+|\s+\$/g,'');
                             var origlength = posstext.length;                              var origlength = posstext.length;
                             posstext = posstext.replace(/[:;'",]/g,'');                              posstext = posstext.replace(/[:;'",]/g,'');
                             var newlength = posstext.length;                              var newlength = posstext.length;
                             if (newlength > 0) {                              if (newlength > 0) {
                                 var change = origlength - newlength;                                  var change = origlength - newlength;
                                 if (change) {                                  if (change) {
                                     alert(change+' disallowed character(s) removed from Exit Button text');                                      alert(change+" $lt{'dise'}");
                                 }                                  }
                                 if (posstext !== 'Exit Tool') {                                  if (posstext !== 'Exit Tool') {
                                     posstext = ':'+posstext;                                      posstext = ':'+posstext;
Line 1505  function validateParms() { Line 1523  function validateParms() {
                             } else {                              } else {
                                 document.parmform.elements['set_'+identifier].value = '';                                  document.parmform.elements['set_'+identifier].value = '';
                                 if (newlength < origlength) {                                  if (newlength < origlength) {
                                     alert("An exit link type of 'In use' was selected but the button text value was blank, after removing disallowed characters.\nDisallowed characters are ,\":;'");                                      alert("$lt{'exit'}\\n$lt{'disc'}"+'":;\\'');
                                 } else {                                  } else {
                                     alert("An exit link type of 'In use' was selected but the button text value was blank.\nPlease enter the text to use.");                                      alert("$lt{'notxt'}\\n$lt{'plst'}");
                                 }                                  }
                                 return false;                                  return false;
                             }                              }
Line 1586  function validateParms() { Line 1604  function validateParms() {
                             document.parmform.elements['set_'+identifier].value += document.parmform.elements[i].value;                              document.parmform.elements['set_'+identifier].value += document.parmform.elements[i].value;
                         } else {                          } else {
                             if (frac == '') {                              if (frac == '') {
                                 alert('Grace Period Past-Due: enter partial credit (number between 0 and 1.0).');                                  alert("$lt{'gppc'}");
                                 return false;                                  return false;
                             } else {                              } else {
                                 alert('Grace Period Past-Due: select a number in at least one of the time past due select boxes, or delete the value for partial credit.');                                  alert("$lt{'gpsn'}");
                                 return false;                                  return false;
                             }                              }
                         }                          }
Line 6396  sub newoverview { Line 6414  sub newoverview {
     $r->print($start_page.$breadcrumbs);      $r->print($start_page.$breadcrumbs);
     &startSettingsScreen($r,'parmset',$crstype);      &startSettingsScreen($r,'parmset',$crstype);
     $r->print(<<ENDOVER);      $r->print(<<ENDOVER);
 <form method="post" action="/adm/parmset?action=newoverview" name="parmform" onsubmit="return validateParms();">  <form method="post" action="/adm/parmset?action=newoverview" name="parmform" id="newoverviewform">
   <input type="hidden" name="newoverviewsubm" value="dis" id="newoverviewsubm" />
 ENDOVER  ENDOVER
     my @ids=();      my @ids=();
     my %typep=();      my %typep=();
Line 6504  ENDOVER Line 6523  ENDOVER
     &sortmenu($r,$sortorder,'newoverview');      &sortmenu($r,$sortorder,'newoverview');
     $r->print('</div></div>');      $r->print('</div></div>');
   
     $r->print('<p><input type="submit" name="dis" value="'.&mt('Display').'" /></p>');      $r->print('<p><input type="submit" name="dis" value="'.&mt('Display').'" id="newoverviewdis" /></p>');
   
 # Build the list data hash from the specified parms  # Build the list data hash from the specified parms
   
Line 6516  ENDOVER Line 6535  ENDOVER
         &secgroup_lister($cat,$pschp,$parmlev,$listdata,\@psprt,\@selected_groups,\%defkeytype,\%allmaps,\@ids,\%symbp);          &secgroup_lister($cat,$pschp,$parmlev,$listdata,\@psprt,\@selected_groups,\%defkeytype,\%allmaps,\@ids,\%symbp);
     }      }
   
     if (($env{'form.store'}) || ($env{'form.dis'})) {      my $foundkeys;
       if ($env{'form.newoverviewsubm'}) {
   
         if ($env{'form.store'}) { &storedata($r,$crs,$dom); }          if ($env{'form.newoverviewsubm'} eq 'store') { &storedata($r,$crs,$dom); }
   
 # Read modified data  # Read modified data
   
Line 6534  ENDOVER Line 6554  ENDOVER
                 $hash_for_realm->{$symbp{$ids[$i]}} = $i;                  $hash_for_realm->{$symbp{$ids[$i]}} = $i;
             }              }
         }          }
         &listdata($r,$resourcedata,$listdata,$sortorder,'newoverview',undef,$readonly,$parmlev,$hash_for_realm,$pschp);          $foundkeys = &listdata($r,$resourcedata,$listdata,$sortorder,'newoverview',undef,$readonly,$parmlev,$hash_for_realm,$pschp);
     }      }
     $r->print(&tableend());      $r->print(&tableend());
     unless ($readonly) {      if ((!$readonly) && ($foundkeys)) {
         $r->print( ((($env{'form.store'}) || ($env{'form.dis'}))?'<p><input type="submit" name="store" value="'.&mt('Save').'" /></p>':'') );          $r->print( ($env{'form.newoverviewsubm'}? '<p><input type="submit" name="store" id="newoverviewstore" value="'.&mt('Save').'" /></p>':'') );
     }      }
     $r->print('</form>');      $r->print('</form>');
       if ($env{'form.newoverviewsubm'}) {
           $r->print(<<"END");
   <script type="text/javascript">
   const form = document.getElementById('newoverviewform');
   const storebutton = document.getElementById('newoverviewstore');
   const disbutton = document.getElementById('newoverviewdis');
   const submethod = document.getElementById('newoverviewsubm');
   if (storebutton) { 
     storebutton.addEventListener('keydown', (e) => {
       if (e.key === 'Enter') {
         if (validateParms()) {
           if (form) {
             if (submethod) {
               submethod.value='store';
             }
             form.submit();
           }
         }
         e.preventDefault();
         return;
       }
     });
     storebutton.addEventListener('click', (e) => {
       if (validateParms()) {
         if (form) {
           if (submethod) {
             submethod.value='store';
           }
           form.submit();
         }
       }
       e.preventDefault();
       return;
     });
   }
   if (disbutton) {
     disbutton.addEventListener('keydown', (e) => {
       if (e.key === 'Enter') {
         if (form) {
           if (submethod) {
             submethod.value='dis';
           }
           form.submit();
         }
         e.preventDefault();
       }
     });
     disbutton.addEventListener('click', (e) => {
       if (form) {
         if (submethod) {
           submethod.value='dis';
         }
         form.submit();
         return;
       }
       e.preventDefault();
     });
   }
   
   </script>
   
   END
       }
     &endSettingsScreen($r);      &endSettingsScreen($r);
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
 }  }

Removed from v.1.623  
changed lines
  Added in v.1.626


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