awsmug/torro-forms

View on GitHub
src/modules/actions/action.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php
/**
 * Action base class
 *
 * @package TorroForms
 * @since 1.0.0
 */

namespace awsmug\Torro_Forms\Modules\Actions;

use awsmug\Torro_Forms\Modules\Submodule;
use awsmug\Torro_Forms\Modules\Meta_Submodule_Interface;
use awsmug\Torro_Forms\Modules\Meta_Submodule_Trait;
use awsmug\Torro_Forms\Modules\Settings_Submodule_Interface;
use awsmug\Torro_Forms\Modules\Settings_Submodule_Trait;
use awsmug\Torro_Forms\DB_Objects\Forms\Form;
use awsmug\Torro_Forms\DB_Objects\Submissions\Submission;
use WP_Error;

/**
 * Base class for an action.
 *
 * @since 1.0.0
 */
abstract class Action extends Submodule implements Meta_Submodule_Interface, Settings_Submodule_Interface {
    use Meta_Submodule_Trait, Settings_Submodule_Trait {
        Meta_Submodule_Trait::get_meta_fields as protected _get_meta_fields;
    }

    /**
     * Checks whether the action is enabled for a specific form.
     *
     * @since 1.0.0
     *
     * @param Form $form Form object to check.
     * @return bool True if the action is enabled, false otherwise.
     */
    public function enabled( $form ) {
        return $this->get_form_option( $form->id, 'enabled', false );
    }

    /**
     * Handles the action for a specific form submission.
     *
     * @since 1.0.0
     *
     * @param Submission $submission Submission to handle by the action.
     * @param Form       $form       Form the submission applies to.
     * @return bool|WP_Error True on success, error object on failure.
     */
    abstract public function handle( $submission, $form );

    /**
     * Returns the available meta fields for the submodule.
     *
     * @since 1.0.0
     *
     * @return array Associative array of `$field_slug => $field_args` pairs.
     */
    public function get_meta_fields() {
        $meta_fields = $this->_get_meta_fields();

        $meta_fields['enabled'] = array(
            'type'         => 'checkbox',
            'label'        => _x( 'Enable?', 'action', 'torro-forms' ),
            'visual_label' => _x( 'Status', 'action', 'torro-forms' ),
        );

        return $meta_fields;
    }
}