Back to FormController class

Method reload

public void
reload
(mixed $key = null, mixed $urlVar = null)
Method to reload a record.
Parameters
  • string $key The name of the primary key of the URL variable.
  • string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions).
Returns
  • void
Since
  • 3.7.4

Method reload - Source code

/**
 * Method to reload a record.
 *
 * @param   string  $key     The name of the primary key of the URL variable.
 * @param   string  $urlVar  The name of the URL variable if different from the primary key (sometimes required to avoid router collisions).
 *
 * @return  void
 *
 * @since   3.7.4
 */
public function reload($key = null, $urlVar = null)
{
    // Check for request forgeries.
    $this->checkToken();
    $app = Factory::getApplication();
    $model = $this->getModel();
    $data = $this->input->post->get('jform', array(), 'array');
    // Determine the name of the primary key for the data.
    if (empty($key)) {
        $key = $model->getTable()->getKeyName();
    }
    // To avoid data collisions the urlVar may be different from the primary key.
    if (empty($urlVar)) {
        $urlVar = $key;
    }
    $recordId = $this->input->getInt($urlVar);
    // Populate the row id from the session.
    $data[$key] = $recordId;
    // Check if it is allowed to edit or create the data
    if ($recordId && !$this->allowEdit($data, $key) || !$recordId && !$this->allowAdd($data)) {
        $this->setRedirect(Route::_('index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false));
        $this->redirect();
    }
    // The redirect url
    $redirectUrl = Route::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, $urlVar), false);
    /** @var \Joomla\CMS\Form\Form $form */
    $form = $model->getForm($data, false);
    /**
     * We need the filtered value of calendar fields because the UTC normalisation is
     * done in the filter and on output. This would apply the Timezone offset on
     * reload. We set the calendar values we save to the processed date.
     */
    $filteredData = $form->filter($data);
    foreach ($form->getFieldset() as $field) {
        if ($field->type === 'Calendar') {
            $fieldName = $field->fieldname;
            if ($field->group) {
                if (isset($filteredData[$field->group][$fieldName])) {
                    $data[$field->group][$fieldName] = $filteredData[$field->group][$fieldName];
                }
            } else {
                if (isset($filteredData[$fieldName])) {
                    $data[$fieldName] = $filteredData[$fieldName];
                }
            }
        }
    }
    // Save the data in the session.
    $app->setUserState($this->option . '.edit.' . $this->context . '.data', $data);
    $this->setRedirect($redirectUrl);
    $this->redirect();
}