> For the complete documentation index, see [llms.txt](https://docs.norrnext.com/norrcompetition/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.norrnext.com/norrcompetition/customisation/events/entry-form.md).

# Entry Form

Entry Form events cover frontend participant submissions (`com_competition.appform`) and frontend contest submissions (`com_competition.cform`).

***

### `onAppformDisplay`

* **Event Class:** `\NorrNext\Component\Competition\Administrator\Event\Display\AppformDisplayEvent`
* **Context:** `com_competition.appform`
* **Triggered In:** Frontend Application Form view (`site/src/View/Appform/HtmlView.php`)

#### Description

Fired when the frontend entry submission form view is initialized, allowing plugins to inspect or enrich the form state and default data.

```php
use NorrNext\Component\Competition\Administrator\Event\Display\AppformDisplayEvent;

public function onAppformDisplay(AppformDisplayEvent $event): void
{
    $context = $event->getContext(); // 'com_competition.appform'
    $item    = $event->getItem();    // Form item object
}
```

***

### `onCompetitionFormDisplay`

* **Event Class:** `\NorrNext\Component\Competition\Administrator\Event\Display\CformDisplayEvent`
* **Context:** `com_competition.cform`
* **Triggered In:** Frontend Contest Creation Form view (`site/src/View/Cform/HtmlView.php`)

#### Description

Fired when the frontend contest creation form view is initialized, allowing plugins to enrich or alter form state.

```php
use NorrNext\Component\Competition\Administrator\Event\Display\CformDisplayEvent;

public function onCompetitionFormDisplay(CformDisplayEvent $event): void
{
    $context = $event->getContext(); // 'com_competition.cform'
    $item    = $event->getItem();
}
```

***

### `onAppformBeforeSave`

* **Event Class:** `\NorrNext\Component\Competition\Administrator\Event\Model\BeforeSaveEvent`
* **Context:** `com_competition.appform`
* **Triggered In:** `AppformModel::save()` (site)
* **Cancellable:** Yes (returning `false` aborts the save)

#### Description

Fired inside the database transaction before the entry submission is saved. Returning `false` aborts the save and rolls back the database transaction.

```php
use NorrNext\Component\Competition\Administrator\Event\Model\BeforeSaveEvent;

public function onAppformBeforeSave(BeforeSaveEvent $event): bool
{
    $table = $event->getItem();
    $isNew = $event->getIsNew();

    return true;
}
```

***

### `onAppformAfterSave`

* **Event Class:** `\NorrNext\Component\Competition\Administrator\Event\Model\AfterSaveEvent`
* **Context:** `com_competition.appform`
* **Triggered In:** `AppformModel::save()` (site)

#### Description

Fired inside the transaction immediately after saving the submitted entry.

```php
use NorrNext\Component\Competition\Administrator\Event\Model\AfterSaveEvent;

public function onAppformAfterSave(AfterSaveEvent $event): void
{
    $table = $event->getItem();
    $isNew = $event->getIsNew();
}
```

***

### `onAppformBeforeSaveTransactionCommit`

* **Event Class:** `\NorrNext\Component\Competition\Administrator\Event\Model\BeforeTransactionCommitEvent`
* **Context:** `com_competition.appform`
* **Triggered In:** `AppformModel::save()` (site)
* **Cancellable:** Yes (returning `false` rolls back the transaction)

#### Description

Fired before committing the transaction for the newly submitted entry. Returning `false` cancels the entire submission.

```php
use NorrNext\Component\Competition\Administrator\Event\Model\BeforeTransactionCommitEvent;

public function onAppformBeforeSaveTransactionCommit(BeforeTransactionCommitEvent $event): bool
{
    $data  = $event->getData();  // Validated form data array
    $isNew = $event->getIsNew();

    return true;
}
```

***

### `onAppformAfterSaveTransactionCommit`

* **Event Class:** `\NorrNext\Component\Competition\Administrator\Event\Model\AfterTransactionCommitEvent`
* **Context:** `com_competition.appform`
* **Triggered In:** `AppformModel::save()` (site)

#### Description

Fired after the submission transaction is successfully committed. Used to dispatch notification emails to moderators or trigger integration hooks.

```php
use NorrNext\Component\Competition\Administrator\Event\Model\AfterTransactionCommitEvent;

public function onAppformAfterSaveTransactionCommit(AfterTransactionCommitEvent $event): void
{
    $data  = $event->getData();
    $isNew = $event->getIsNew();
}
```

***

### `onSaveRedirect`

* **Event Class:** `\NorrNext\Component\Competition\Administrator\Event\Controller\SaveRedirectEvent`
* **Context:** `com_competition.appform` or `com_competition.cform`
* **Triggered In:** `AppformController::save()` and `CformController::save()` (site)

#### Description

Allows plugins to customize the redirect URL and flash system message shown to the contestant after submitting their entry or contest.

```php
use NorrNext\Component\Competition\Administrator\Event\Controller\SaveRedirectEvent;

public function onSaveRedirect(SaveRedirectEvent $event): void
{
    $context   = $event->getContext();
    $validData = $event->getValidData();

    if ($context === 'com_competition.appform') {
        // Redirect contestant to custom thank-you page
        $event->setArgument('url', '/thank-you-for-submitting');
        $event->setArgument('message', 'Thank you! Your entry has been submitted for moderation.');
    }
}
```
