Diff for /loncom/interface/Attic/lonwizard.pm between versions 1.6 and 1.7

version 1.6, 2003/02/10 22:13:55 version 1.7, 2003/02/13 21:00:11
Line 103  sub new { Line 103  sub new {
   
 =cut  =cut
   
   # Sometimes the wizard writer will want to use the result of the previous
   # state to change the text of the next state. In order to do that, it
   # has to be done during the declaration of the states, or it won't be
   # available. Therefore, basic form processing must occur before the
   # actual display routine is called and the actual pre-process is called,
   # or it won't be available.
   # This also factors common code out of the preprocess calls.
 sub declareVars {  sub declareVars {
     my $self = shift;      my $self = shift;
     my $varlist = shift;      my $varlist = shift;
Line 119  sub declareVars { Line 126  sub declareVars {
  {   {
     $self->{VARS}->{$element} = $ENV{$envname};      $self->{VARS}->{$element} = $ENV{$envname};
  }   }
           
           # If there's an incoming form submission, use that
           my $envname = "form." . $element . ".forminput";
           if (defined ($ENV{$envname})) {
               $self->{VARS}->{$element} = $ENV{$envname};
           }
     }      }
 }  }
   
Line 366  sub handler { Line 379  sub handler {
     $r->rflush();      $r->rflush();
   
     my $mes = <<WIZBEGIN;      my $mes = <<WIZBEGIN;
 <p>This wizard will allow you to</p>  <p>This wizard will allow you to <b>set open, due, and answer dates for problems</b>. You will be asked to select a problem, what kind of date you want to set, and for whom the date should be effective.</p>
   
 <ul>  
   <li>Change assignment parameters, such as due date or open date...</li>  
   <li>... for a whole class</li>  
   <li>... for a whole section</li>  
   <li>... for an individual student</li>  
   <li>... by folder</li>  
   <li>... by individual assignment</li>  
 </ul>  
   
 <p>After the wizard is done, you will be shown where in the advanced interface you would have gone to change the parameter you have chosen, so in the future you can do it directly.</p>  <p>After the wizard is done, you will be shown where in the advanced interface you would have gone to change the parameter you have chosen, so in the future you can do it directly.</p>
   
   <p>Press <b>Next -&gt;</b> to begin, or select <b>&lt;- Previous</b> to go back to the previous screen.</p>
 WIZBEGIN  WIZBEGIN
           
     my $wizard = Apache::lonwizard->new("Course Parameter Wizard");      my $wizard = Apache::lonwizard->new("Course Parameter Wizard");
     $wizard->declareVars(['ACTION_TYPE', 'GRANULARITY', 'TARGETS', 'PARM_DATE', 'RESOURCE_ID', 'USER_NAME', 'SECTION_NAME']);      $wizard->declareVars(['ACTION_TYPE', 'GRANULARITY', 'TARGETS', 'PARM_DATE', 'RESOURCE_ID', 'USER_NAME', 'SECTION_NAME']);
     my %dateTypeHash = ('open_date' => "Opening Date",      my %dateTypeHash = ('open_date' => "opening date",
                         'due_date' => "Due Date",                          'due_date' => "due date",
                         'answer_date' => "Answer Date");                          'answer_date' => "answer date");
       my %levelTypeHash = ('whole_course' => "all problems in the course",
                            'map' => 'the selected folder',
                            'resource' => 'the selected problem');
           
     Apache::lonwizard::message_state->new($wizard, "START", "Welcome to the Assignment Parameter Wizard", $mes, "CHOOSE_ACTION");      Apache::lonwizard::message_state->new($wizard, "START", "Welcome to the Assignment Parameter Wizard", $mes, "CHOOSE_LEVEL");
     Apache::lonwizard::switch_state->new($wizard, "CHOOSE_ACTION", "What do you want to do?", "ACTION_TYPE", [       Apache::lonwizard::switch_state->new($wizard, "CHOOSE_LEVEL", "Which Problem or Problems?", "GRANULARITY", [
        ["open_date", "Set an Open Date for a problem", "CHOOSE_LEVEL"],          ["whole_course", "<b>Every problem</b> in the course", "CHOOSE_ACTION"],
        ["due_date", "Set a Due Date for a problem", "CHOOSE_LEVEL"],         ["map", "Every problem in a particular <b>folder</b>", "CHOOSE_FOLDER"],
        ["answer_date", "Set an Answer Open Date for a problem", "CHOOSE_LEVEL" ] ]);         ["resource", "One particular <b>problem</b>", "CHOOSE_RESOURCE"]],
     Apache::lonwizard::switch_state->new($wizard, "CHOOSE_LEVEL", "Parameter Granularity", "GRANULARITY", [                                           "Which problems do you wish to change a date for?");
        ["whole_course", "Set for Whole Course", "CHOOSE_STUDENT_LEVEL"],      Apache::lonwizard::resource_choice->new($wizard, "CHOOSE_FOLDER", "Select Folder", "Select the folder you wish to set the date for:", "", "CHOOSE_ACTION", "RESOURCE_ID", sub {my $res = shift; return $res->is_map();});
        ["map", "Set for a Folder/Map", "CHOOSE_FOLDER"],      Apache::lonwizard::resource_choice->new($wizard, "CHOOSE_RESOURCE", "Select Resource", "", "", "CHOOSE_ACTION", "RESOURCE_ID", sub {my $res = shift; return $res->is_map() || $res->is_problem();}, sub {my $res = shift; return $res->is_problem(); });
        ["resource", "Set for a Particular Problem", "CHOOSE_RESOURCE"]],      my $levelType = $levelTypeHash{$wizard->{VARS}->{GRANULARITY}};
                                          "How general should this setting be?");      Apache::lonwizard::switch_state->new($wizard, "CHOOSE_ACTION", "Parameter Type", "ACTION_TYPE", [ 
     Apache::lonwizard::resource_choice->new($wizard, "CHOOSE_FOLDER", "Select Folder", "", "", "CHOOSE_STUDENT_LEVEL", "RESOURCE_ID", sub {my $res = shift; return $res->is_map();});         ["open_date", "Set an <b>open date</b>", "CHOOSE_DATE"], 
     Apache::lonwizard::resource_choice->new($wizard, "CHOOSE_RESOURCE", "Select Resource", "", "", "CHOOSE_STUDENT_LEVEL", "RESOURCE_ID", sub {my $res = shift; return $res->is_map() || $res->is_problem();}, sub {my $res = shift; return $res->is_problem(); });         ["due_date", "Set a <b>due date</b>", "CHOOSE_DATE"],
     Apache::lonwizard::switch_state->new($wizard, "CHOOSE_STUDENT_LEVEL", "Parameter Targets", "TARGETS", [         ["answer_date", "Set an <b>answer open date</b>", "CHOOSE_DATE" ] ],
        ["course", "Set for All Students in Course", "CHOOSE_DATE"],         "What parameters do you want to set for $levelType?");
        ["section", "Set for Section", "CHOOSE_SECTION"],  
        ["student", "Set for an Individual Student", "CHOOSE_STUDENT"]],  
                                        "Whom should this setting affect?");  
   
     my $dateType = $dateTypeHash{$wizard->{VARS}->{ACTION_TYPE}};      my $dateType = $dateTypeHash{$wizard->{VARS}->{ACTION_TYPE}};
     Apache::lonwizard::choose_section->new($wizard, "CHOOSE_SECTION", "Select Section", "Please select the section you wish to set the $dateType for:", "", "CHOOSE_DATE", "SECTION_NAME");      Apache::lonwizard::date_state->new($wizard, "CHOOSE_DATE", "Set Date", "PARM_DATE", "CHOOSE_STUDENT_LEVEL", "What should the $dateType be set to?");
     Apache::lonwizard::choose_student->new($wizard, "CHOOSE_STUDENT", "Select Student", "Please select the student you wish to set the $dateType for:", "", "CHOOSE_DATE", "USER_NAME");      Apache::lonwizard::switch_state->new($wizard, "CHOOSE_STUDENT_LEVEL", "Students Affected", "TARGETS", [
     Apache::lonwizard::date_state->new($wizard, "CHOOSE_DATE", "Set Date", "PARM_DATE", "FINISH", "What should the $dateType be set to?");         ["course", ". . . for <b>all students</b> in the course", "FINISH"],
          ["section", ". . . for a particular <b>section</b>", "CHOOSE_SECTION"],
          ["student", ". . . for an individual <b>student</b>", "CHOOSE_STUDENT"]],
                                          "Set $dateType of $levelType for. . .");
   
       Apache::lonwizard::choose_section->new($wizard, "CHOOSE_SECTION", "Select Section", "Please select the section you wish to set the $dateType for:", "", "FINISH", "SECTION_NAME");
       Apache::lonwizard::choose_student->new($wizard, "CHOOSE_STUDENT", "Select Student", "Please select the student you wish to set the $dateType for:", "", "FINISH", "USER_NAME");
     Apache::lonwizard::parmwizfinal->new($wizard, "FINISH", "Confirm Selection");      Apache::lonwizard::parmwizfinal->new($wizard, "FINISH", "Confirm Selection");
   
     $r->print($wizard->display());      $r->print($wizard->display());
Line 429  It is importent to remember when constru Line 440  It is importent to remember when constru
   
 None of the pre-packaged states correctly handle there being B<no> input, as the wizard does not currently have any protection against errors in the states themselves. (The closest thing you can do is set the wizard to be done and display an error message, which should be adequate.)  None of the pre-packaged states correctly handle there being B<no> input, as the wizard does not currently have any protection against errors in the states themselves. (The closest thing you can do is set the wizard to be done and display an error message, which should be adequate.)
   
   By default, the wizard framework will take form elements of the form {VAR_NAME}.forminput and automatically insert the contents of that form element into the wizard variable {VAR_NAME}. You only need to use postprocess to do something fancy if that is not sufficient, for instance, processing a multi-element selection. (See resource choice for an example of that.)
   
 =head2 lonwizstate methods  =head2 lonwizstate methods
   
 These methods should be overridden in derived states, except B<new> which may be sufficient.  These methods should be overridden in derived states, except B<new> which may be sufficient.
Line 663  sub postprocess { Line 676  sub postprocess {
     my $wizard = $self->{WIZARD};      my $wizard = $self->{WIZARD};
     my $formvalue = $ENV{'form.' . $self->{VAR_NAME} . '.forminput'};      my $formvalue = $ENV{'form.' . $self->{VAR_NAME} . '.forminput'};
     if ($formvalue) {      if ($formvalue) {
         $wizard->setVar($self->{VAR_NAME}, $formvalue);          # Value already stored by Wizard
         $wizard->changeState($self->{NEXT_STATE});          $wizard->changeState($self->{NEXT_STATE});
     } else {      } else {
         $self->{ERROR_MSG} = "Can't continue the wizard because you must make"          $self->{ERROR_MSG} = "Can't continue the wizard because you must make"
Line 745  sub render { Line 758  sub render {
 }  }
   
 sub postprocess {  sub postprocess {
       # Value already stored by wizard
     my $self = shift;      my $self = shift;
     my $wizard = $self->{WIZARD};      my $wizard = $self->{WIZARD};
     my $chosenValue = $ENV{"form." . $self->{VAR_NAME} . '.forminput'};      my $chosenValue = $ENV{"form." . $self->{VAR_NAME} . '.forminput'};
     $wizard->setVar($self->{VAR_NAME}, $chosenValue)  
  if (defined ($self->{VAR_NAME}));  
   
     foreach my $choice (@{$self->{CHOICE_LIST}})      foreach my $choice (@{$self->{CHOICE_LIST}})
     {      {
Line 1152  sub postprocess { Line 1164  sub postprocess {
         return;          return;
     }      }
   
     my $chosenValue = $ENV{"form." . $self->{VAR_NAME} . ".forminput"};      if (!$ENV{'form.' . $self->{VAR_NAME} . '.forminput'}) {
     $wizard->setVar($self->{VAR_NAME}, $chosenValue)          $self->{ERROR_MSG} = "Can't continue wizard because you must ".
         if (defined($self->{VAR_NAME}));              "select a resource.";
               return;
       }
           
   
       # Value stored by wizard framework
   
     $wizard->changeState($self->{NEXT_STATE});      $wizard->changeState($self->{NEXT_STATE});
 }  }
   
Line 1174  sub render { Line 1191  sub render {
         $vals->{$curVal} = 1;          $vals->{$curVal} = 1;
     }      }
   
       if (defined $self->{ERROR_MSG}) {
           $result .= '<font color="#FF0000">' . $self->{ERROR_MSG} . '</font><br /><br />';
       }
   
     $result .= $self->{MESSAGE_BEFORE} if (defined $self->{MESSAGE_BEFORE});      $result .= $self->{MESSAGE_BEFORE} if (defined $self->{MESSAGE_BEFORE});
   
     # Get the course nav map      # Get the course nav map

Removed from v.1.6  
changed lines
  Added in v.1.7


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