original_string: protected function defineFormFields()
      {
          if ($this->fieldsDefined) {
              return;
          }
  
          /**
           * @event backend.form.extendFieldsBefore
           * Called before the form fields are defined
           *
           * Example usage:
           *
           *     Event::listen('backend.form.extendFieldsBefore', function((\Backend\Widgets\Form) $formWidget) {
           *         // You should always check to see if you're extending correct model/controller
           *         if (!$widget->model instanceof \Foo\Example\Models\Bar) {
           *             return;
           *         }
           *
           *         // Here you can't use addFields() because it will throw you an exception because form is not yet created
           *         // and it does not have tabs and fields
           *         // For this example we will pretend that we want to add a new field named example_field
           *         $widget->fields['example_field'] = [
           *             'label' => 'Example field',
           *             'comment' => 'Your example field',
           *             'type' => 'text',
           *         ];
           *     });
           *
           * Or
           *
           *     $formWidget->bindEvent('form.extendFieldsBefore', function () use ((\Backend\Widgets\Form $formWidget)) {
           *         // You should always check to see if you're extending correct model/controller
           *         if (!$widget->model instanceof \Foo\Example\Models\Bar) {
           *             return;
           *         }
           *
           *         // Here you can't use addFields() because it will throw you an exception because form is not yet created
           *         // and it does not have tabs and fields
           *         // For this example we will pretend that we want to add a new field named example_field
           *         $widget->fields['example_field'] = [
           *             'label' => 'Example field',
           *             'comment' => 'Your example field',
           *             'type' => 'text',
           *         ];
           *     });
           *
           */
          $this->fireSystemEvent('backend.form.extendFieldsBefore');
  
          /*
           * Outside fields
           */
          if (!isset($this->fields) || !is_array($this->fields)) {
              $this->fields = [];
          }
  
          $this->allTabs->outside = new FormTabs(FormTabs::SECTION_OUTSIDE, (array) $this->config);
          $this->addFields($this->fields);
  
          /*
           * Primary Tabs + Fields
           */
          if (!isset($this->tabs['fields']) || !is_array($this->tabs['fields'])) {
              $this->tabs['fields'] = [];
          }
  
          $this->allTabs->primary = new FormTabs(FormTabs::SECTION_PRIMARY, $this->tabs);
          $this->addFields($this->tabs['fields'], FormTabs::SECTION_PRIMARY);
  
          /*
           * Secondary Tabs + Fields
           */
          if (!isset($this->secondaryTabs['fields']) || !is_array($this->secondaryTabs['fields'])) {
              $this->secondaryTabs['fields'] = [];
          }
  
          $this->allTabs->secondary = new FormTabs(FormTabs::SECTION_SECONDARY, $this->secondaryTabs);
          $this->addFields($this->secondaryTabs['fields'], FormTabs::SECTION_SECONDARY);
  
          /**
           * @event backend.form.extendFields
           * Called after the form fields are defined
           *
           * Example usage:
           *
           *     Event::listen('backend.form.extendFields', function((\Backend\Widgets\Form) $formWidget) {
           *         // Only for the User controller
           *         if (!$widget->getController() instanceof \RainLab\User\Controllers\Users) {
           *             return;
           *         }
           *
           *         // Only for the User model
           *         if (!$widget->model instanceof \RainLab\User\Models\User) {
           *             return;
           *         }
           *
           *         // Add an extra birthday field
           *         $widget->addFields([
           *             'birthday' => [
           *                 'label'   => 'Birthday',
           *                 'comment' => 'Select the users birthday',
           *                 'type'    => 'datepicker'
           *             ]
           *         ]);
           *
           *         // Remove a Surname field
           *         $widget->removeField('surname');
           *     });
           *
           * Or
           *
           *     $formWidget->bindEvent('form.extendFields', function () use ((\Backend\Widgets\Form $formWidget)) {
           *         // Only for the User controller
           *         if (!$widget->getController() instanceof \RainLab\User\Controllers\Users) {
           *             return;
           *         }
           *
           *         // Only for the User model
           *         if (!$widget->model instanceof \RainLab\User\Models\User) {
           *             return;
           *         }
           *
           *         // Add an extra birthday field
           *         $widget->addFields([
           *             'birthday' => [
           *                 'label'   => 'Birthday',
           *                 'comment' => 'Select the users birthday',
           *                 'type'    => 'datepicker'
           *             ]
           *         ]);
           *
           *         // Remove a Surname field
           *         $widget->removeField('surname');
           *     });
           *
           */
          $this->fireSystemEvent('backend.form.extendFields', [$this->allFields]);
  
          /*
           * Convert automatic spanned fields
           */
          foreach ($this->allTabs->outside->getFields() as $fields) {
              $this->processAutoSpan($fields);
          }
  
          foreach ($this->allTabs->primary->getFields() as $fields) {
              $this->processAutoSpan($fields);
          }
  
          foreach ($this->allTabs->secondary->getFields() as $fields) {
              $this->processAutoSpan($fields);
          }
  
          /*
           * At least one tab section should stretch
           */
          if (
              $this->allTabs->secondary->stretch === null
              && $this->allTabs->primary->stretch === null
              && $this->allTabs->outside->stretch === null
          ) {
              if ($this->allTabs->secondary->hasFields()) {
                  $this->allTabs->secondary->stretch = true;
              }
              elseif ($this->allTabs->primary->hasFields()) {
                  $this->allTabs->primary->stretch = true;
              }
              else {
                  $this->allTabs->outside->stretch = true;
              }
          }
  
          /*
           * Bind all form widgets to controller
           */
          foreach ($this->allFields as $field) {
              if ($field->type !== 'widget') {
                  continue;
              }
  
              $widget = $this->makeFormFieldWidget($field);
              $widget->bindToController();
          }
  
          $this->fieldsDefined = true;
      }
code: protected function defineFormFields()
      {
          if ($this->fieldsDefined) {
              return;
          }
  
          /**
           * @event backend.form.extendFieldsBefore
           * Called before the form fields are defined
           *
           * Example usage:
           *
           *     Event::listen('backend.form.extendFieldsBefore', function((\Backend\Widgets\Form) $formWidget) {
           *         // You should always check to see if you're extending correct model/controller
           *         if (!$widget->model instanceof \Foo\Example\Models\Bar) {
           *             return;
           *         }
           *
           *         // Here you can't use addFields() because it will throw you an exception because form is not yet created
           *         // and it does not have tabs and fields
           *         // For this example we will pretend that we want to add a new field named example_field
           *         $widget->fields['example_field'] = [
           *             'label' => 'Example field',
           *             'comment' => 'Your example field',
           *             'type' => 'text',
           *         ];
           *     });
           *
           * Or
           *
           *     $formWidget->bindEvent('form.extendFieldsBefore', function () use ((\Backend\Widgets\Form $formWidget)) {
           *         // You should always check to see if you're extending correct model/controller
           *         if (!$widget->model instanceof \Foo\Example\Models\Bar) {
           *             return;
           *         }
           *
           *         // Here you can't use addFields() because it will throw you an exception because form is not yet created
           *         // and it does not have tabs and fields
           *         // For this example we will pretend that we want to add a new field named example_field
           *         $widget->fields['example_field'] = [
           *             'label' => 'Example field',
           *             'comment' => 'Your example field',
           *             'type' => 'text',
           *         ];
           *     });
           *
           */
          $this->fireSystemEvent('backend.form.extendFieldsBefore');
  
          /*
           * Outside fields
           */
          if (!isset($this->fields) || !is_array($this->fields)) {
              $this->fields = [];
          }
  
          $this->allTabs->outside = new FormTabs(FormTabs::SECTION_OUTSIDE, (array) $this->config);
          $this->addFields($this->fields);
  
          /*
           * Primary Tabs + Fields
           */
          if (!isset($this->tabs['fields']) || !is_array($this->tabs['fields'])) {
              $this->tabs['fields'] = [];
          }
  
          $this->allTabs->primary = new FormTabs(FormTabs::SECTION_PRIMARY, $this->tabs);
          $this->addFields($this->tabs['fields'], FormTabs::SECTION_PRIMARY);
  
          /*
           * Secondary Tabs + Fields
           */
          if (!isset($this->secondaryTabs['fields']) || !is_array($this->secondaryTabs['fields'])) {
              $this->secondaryTabs['fields'] = [];
          }
  
          $this->allTabs->secondary = new FormTabs(FormTabs::SECTION_SECONDARY, $this->secondaryTabs);
          $this->addFields($this->secondaryTabs['fields'], FormTabs::SECTION_SECONDARY);
  
          /**
           * @event backend.form.extendFields
           * Called after the form fields are defined
           *
           * Example usage:
           *
           *     Event::listen('backend.form.extendFields', function((\Backend\Widgets\Form) $formWidget) {
           *         // Only for the User controller
           *         if (!$widget->getController() instanceof \RainLab\User\Controllers\Users) {
           *             return;
           *         }
           *
           *         // Only for the User model
           *         if (!$widget->model instanceof \RainLab\User\Models\User) {
           *             return;
           *         }
           *
           *         // Add an extra birthday field
           *         $widget->addFields([
           *             'birthday' => [
           *                 'label'   => 'Birthday',
           *                 'comment' => 'Select the users birthday',
           *                 'type'    => 'datepicker'
           *             ]
           *         ]);
           *
           *         // Remove a Surname field
           *         $widget->removeField('surname');
           *     });
           *
           * Or
           *
           *     $formWidget->bindEvent('form.extendFields', function () use ((\Backend\Widgets\Form $formWidget)) {
           *         // Only for the User controller
           *         if (!$widget->getController() instanceof \RainLab\User\Controllers\Users) {
           *             return;
           *         }
           *
           *         // Only for the User model
           *         if (!$widget->model instanceof \RainLab\User\Models\User) {
           *             return;
           *         }
           *
           *         // Add an extra birthday field
           *         $widget->addFields([
           *             'birthday' => [
           *                 'label'   => 'Birthday',
           *                 'comment' => 'Select the users birthday',
           *                 'type'    => 'datepicker'
           *             ]
           *         ]);
           *
           *         // Remove a Surname field
           *         $widget->removeField('surname');
           *     });
           *
           */
          $this->fireSystemEvent('backend.form.extendFields', [$this->allFields]);
  
          /*
           * Convert automatic spanned fields
           */
          foreach ($this->allTabs->outside->getFields() as $fields) {
              $this->processAutoSpan($fields);
          }
  
          foreach ($this->allTabs->primary->getFields() as $fields) {
              $this->processAutoSpan($fields);
          }
  
          foreach ($this->allTabs->secondary->getFields() as $fields) {
              $this->processAutoSpan($fields);
          }
  
          /*
           * At least one tab section should stretch
           */
          if (
              $this->allTabs->secondary->stretch === null
              && $this->allTabs->primary->stretch === null
              && $this->allTabs->outside->stretch === null
          ) {
              if ($this->allTabs->secondary->hasFields()) {
                  $this->allTabs->secondary->stretch = true;
              }
              elseif ($this->allTabs->primary->hasFields()) {
                  $this->allTabs->primary->stretch = true;
              }
              else {
                  $this->allTabs->outside->stretch = true;
              }
          }
  
          /*
           * Bind all form widgets to controller
           */
          foreach ($this->allFields as $field) {
              if ($field->type !== 'widget') {
                  continue;
              }
  
              $widget = $this->makeFormFieldWidget($field);
              $widget->bindToController();
          }
  
          $this->fieldsDefined = true;
      }
code_tokens: protected function defineFormFields ( ) { if ( $ this -> fieldsDefined ) { return ; } /**
           * @event backend.form.extendFieldsBefore
           * Called before the form fields are defined
           *
           * Example usage:
           *
           *     Event::listen('backend.form.extendFieldsBefore', function((\Backend\Widgets\Form) $formWidget) {
           *         // You should always check to see if you're extending correct model/controller
           *         if (!$widget->model instanceof \Foo\Example\Models\Bar) {
           *             return;
           *         }
           *
           *         // Here you can't use addFields() because it will throw you an exception because form is not yet created
           *         // and it does not have tabs and fields
           *         // For this example we will pretend that we want to add a new field named example_field
           *         $widget->fields['example_field'] = [
           *             'label' => 'Example field',
           *             'comment' => 'Your example field',
           *             'type' => 'text',
           *         ];
           *     });
           *
           * Or
           *
           *     $formWidget->bindEvent('form.extendFieldsBefore', function () use ((\Backend\Widgets\Form $formWidget)) {
           *         // You should always check to see if you're extending correct model/controller
           *         if (!$widget->model instanceof \Foo\Example\Models\Bar) {
           *             return;
           *         }
           *
           *         // Here you can't use addFields() because it will throw you an exception because form is not yet created
           *         // and it does not have tabs and fields
           *         // For this example we will pretend that we want to add a new field named example_field
           *         $widget->fields['example_field'] = [
           *             'label' => 'Example field',
           *             'comment' => 'Your example field',
           *             'type' => 'text',
           *         ];
           *     });
           *
           */ $ this -> fireSystemEvent ( 'backend.form.extendFieldsBefore' ) ; /*
           * Outside fields
           */ if ( ! isset ( $ this -> fields ) || ! is_array ( $ this -> fields ) ) { $ this -> fields = [ ] ; } $ this -> allTabs -> outside = new FormTabs ( FormTabs :: SECTION_OUTSIDE , ( array ) $ this -> config ) ; $ this -> addFields ( $ this -> fields ) ; /*
           * Primary Tabs + Fields
           */ if ( ! isset ( $ this -> tabs [ 'fields' ] ) || ! is_array ( $ this -> tabs [ 'fields' ] ) ) { $ this -> tabs [ 'fields' ] = [ ] ; } $ this -> allTabs -> primary = new FormTabs ( FormTabs :: SECTION_PRIMARY , $ this -> tabs ) ; $ this -> addFields ( $ this -> tabs [ 'fields' ] , FormTabs :: SECTION_PRIMARY ) ; /*
           * Secondary Tabs + Fields
           */ if ( ! isset ( $ this -> secondaryTabs [ 'fields' ] ) || ! is_array ( $ this -> secondaryTabs [ 'fields' ] ) ) { $ this -> secondaryTabs [ 'fields' ] = [ ] ; } $ this -> allTabs -> secondary = new FormTabs ( FormTabs :: SECTION_SECONDARY , $ this -> secondaryTabs ) ; $ this -> addFields ( $ this -> secondaryTabs [ 'fields' ] , FormTabs :: SECTION_SECONDARY ) ; /**
           * @event backend.form.extendFields
           * Called after the form fields are defined
           *
           * Example usage:
           *
           *     Event::listen('backend.form.extendFields', function((\Backend\Widgets\Form) $formWidget) {
           *         // Only for the User controller
           *         if (!$widget->getController() instanceof \RainLab\User\Controllers\Users) {
           *             return;
           *         }
           *
           *         // Only for the User model
           *         if (!$widget->model instanceof \RainLab\User\Models\User) {
           *             return;
           *         }
           *
           *         // Add an extra birthday field
           *         $widget->addFields([
           *             'birthday' => [
           *                 'label'   => 'Birthday',
           *                 'comment' => 'Select the users birthday',
           *                 'type'    => 'datepicker'
           *             ]
           *         ]);
           *
           *         // Remove a Surname field
           *         $widget->removeField('surname');
           *     });
           *
           * Or
           *
           *     $formWidget->bindEvent('form.extendFields', function () use ((\Backend\Widgets\Form $formWidget)) {
           *         // Only for the User controller
           *         if (!$widget->getController() instanceof \RainLab\User\Controllers\Users) {
           *             return;
           *         }
           *
           *         // Only for the User model
           *         if (!$widget->model instanceof \RainLab\User\Models\User) {
           *             return;
           *         }
           *
           *         // Add an extra birthday field
           *         $widget->addFields([
           *             'birthday' => [
           *                 'label'   => 'Birthday',
           *                 'comment' => 'Select the users birthday',
           *                 'type'    => 'datepicker'
           *             ]
           *         ]);
           *
           *         // Remove a Surname field
           *         $widget->removeField('surname');
           *     });
           *
           */ $ this -> fireSystemEvent ( 'backend.form.extendFields' , [ $ this -> allFields ] ) ; /*
           * Convert automatic spanned fields
           */ foreach ( $ this -> allTabs -> outside -> getFields ( ) as $ fields ) { $ this -> processAutoSpan ( $ fields ) ; } foreach ( $ this -> allTabs -> primary -> getFields ( ) as $ fields ) { $ this -> processAutoSpan ( $ fields ) ; } foreach ( $ this -> allTabs -> secondary -> getFields ( ) as $ fields ) { $ this -> processAutoSpan ( $ fields ) ; } /*
           * At least one tab section should stretch
           */ if ( $ this -> allTabs -> secondary -> stretch === null && $ this -> allTabs -> primary -> stretch === null && $ this -> allTabs -> outside -> stretch === null ) { if ( $ this -> allTabs -> secondary -> hasFields ( ) ) { $ this -> allTabs -> secondary -> stretch = true ; } elseif ( $ this -> allTabs -> primary -> hasFields ( ) ) { $ this -> allTabs -> primary -> stretch = true ; } else { $ this -> allTabs -> outside -> stretch = true ; } } /*
           * Bind all form widgets to controller
           */ foreach ( $ this -> allFields as $ field ) { if ( $ field -> type !== 'widget' ) { continue ; } $ widget = $ this -> makeFormFieldWidget ( $ field ) ; $ widget -> bindToController ( ) ; } $ this -> fieldsDefined = true ; }
docstring: Creates a flat array of form fields from the configuration.
  Also slots fields in to their respective tabs.
  
  @return void
docstring_tokens: Creates a flat array of form fields from the configuration . Also slots fields in to their respective tabs .