original_string: public function files_input(question_attempt $qa, $numallowed,
              question_display_options $options) {
          global $CFG;
          require_once($CFG->dirroot . '/lib/form/filemanager.php');
  
          $pickeroptions = new stdClass();
          $pickeroptions->mainfile = null;
          $pickeroptions->maxfiles = $numallowed;
          $pickeroptions->itemid = $qa->prepare_response_files_draft_itemid(
                  'attachments', $options->context->id);
          $pickeroptions->context = $options->context;
          $pickeroptions->return_types = FILE_INTERNAL | FILE_CONTROLLED_LINK;
  
          $pickeroptions->itemid = $qa->prepare_response_files_draft_itemid(
                  'attachments', $options->context->id);
          $pickeroptions->accepted_types = $qa->get_question()->filetypeslist;
  
          $fm = new form_filemanager($pickeroptions);
          $filesrenderer = $this->page->get_renderer('core', 'files');
  
          $text = '';
          if (!empty($qa->get_question()->filetypeslist)) {
              $text = html_writer::tag('p', get_string('acceptedfiletypes', 'qtype_essay'));
              $filetypesutil = new \core_form\filetypes_util();
              $filetypes = $qa->get_question()->filetypeslist;
              $filetypedescriptions = $filetypesutil->describe_file_types($filetypes);
              $text .= $this->render_from_template('core_form/filetypes-descriptions', $filetypedescriptions);
          }
          return $filesrenderer->render($fm). html_writer::empty_tag(
                  'input', array('type' => 'hidden', 'name' => $qa->get_qt_field_name('attachments'),
                  'value' => $pickeroptions->itemid)) . $text;
      }
code: public function files_input(question_attempt $qa, $numallowed,
              question_display_options $options) {
          global $CFG;
          require_once($CFG->dirroot . '/lib/form/filemanager.php');
  
          $pickeroptions = new stdClass();
          $pickeroptions->mainfile = null;
          $pickeroptions->maxfiles = $numallowed;
          $pickeroptions->itemid = $qa->prepare_response_files_draft_itemid(
                  'attachments', $options->context->id);
          $pickeroptions->context = $options->context;
          $pickeroptions->return_types = FILE_INTERNAL | FILE_CONTROLLED_LINK;
  
          $pickeroptions->itemid = $qa->prepare_response_files_draft_itemid(
                  'attachments', $options->context->id);
          $pickeroptions->accepted_types = $qa->get_question()->filetypeslist;
  
          $fm = new form_filemanager($pickeroptions);
          $filesrenderer = $this->page->get_renderer('core', 'files');
  
          $text = '';
          if (!empty($qa->get_question()->filetypeslist)) {
              $text = html_writer::tag('p', get_string('acceptedfiletypes', 'qtype_essay'));
              $filetypesutil = new \core_form\filetypes_util();
              $filetypes = $qa->get_question()->filetypeslist;
              $filetypedescriptions = $filetypesutil->describe_file_types($filetypes);
              $text .= $this->render_from_template('core_form/filetypes-descriptions', $filetypedescriptions);
          }
          return $filesrenderer->render($fm). html_writer::empty_tag(
                  'input', array('type' => 'hidden', 'name' => $qa->get_qt_field_name('attachments'),
                  'value' => $pickeroptions->itemid)) . $text;
      }
code_tokens: public function files_input ( question_attempt $ qa , $ numallowed , question_display_options $ options ) { global $ CFG ; require_once ( $ CFG -> dirroot . '/lib/form/filemanager.php' ) ; $ pickeroptions = new stdClass ( ) ; $ pickeroptions -> mainfile = null ; $ pickeroptions -> maxfiles = $ numallowed ; $ pickeroptions -> itemid = $ qa -> prepare_response_files_draft_itemid ( 'attachments' , $ options -> context -> id ) ; $ pickeroptions -> context = $ options -> context ; $ pickeroptions -> return_types = FILE_INTERNAL | FILE_CONTROLLED_LINK ; $ pickeroptions -> itemid = $ qa -> prepare_response_files_draft_itemid ( 'attachments' , $ options -> context -> id ) ; $ pickeroptions -> accepted_types = $ qa -> get_question ( ) -> filetypeslist ; $ fm = new form_filemanager ( $ pickeroptions ) ; $ filesrenderer = $ this -> page -> get_renderer ( 'core' , 'files' ) ; $ text = '' ; if ( ! empty ( $ qa -> get_question ( ) -> filetypeslist ) ) { $ text = html_writer :: tag ( 'p' , get_string ( 'acceptedfiletypes' , 'qtype_essay' ) ) ; $ filetypesutil = new \ core_form \ filetypes_util ( ) ; $ filetypes = $ qa -> get_question ( ) -> filetypeslist ; $ filetypedescriptions = $ filetypesutil -> describe_file_types ( $ filetypes ) ; $ text .= $ this -> render_from_template ( 'core_form/filetypes-descriptions' , $ filetypedescriptions ) ; } return $ filesrenderer -> render ( $ fm ) . html_writer :: empty_tag ( 'input' , array ( 'type' => 'hidden' , 'name' => $ qa -> get_qt_field_name ( 'attachments' ) , 'value' => $ pickeroptions -> itemid ) ) . $ text ; }
docstring: Displays the input control for when the student should upload a single file.
  @param question_attempt $qa the question attempt to display.
  @param int $numallowed the maximum number of attachments allowed. -1 = unlimited.
  @param question_display_options $options controls what should and should
  not be displayed. Used to get the context.
docstring_tokens: Displays the input control for when the student should upload a single file .