# bit-form/1.2/includes/Plugin.php

Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator &amp; Custom Form Builder, version 1.2. 221 lines.

- Page: https://pluginprobe.com/plugins/bit-form/1.2/code/includes/Plugin.php
- Raw: https://pluginprobe.com/plugins/bit-form/1.2/raw/includes/Plugin.php
- Modified: 2021-01-25T14:41:16+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/bit-form/1.2/code/includes/Plugin.php#L10-L20`.

```php
<?php

namespace BitCode\BitForm;

/**
 * Main class for the plugin.
 *
 * @since 1.0.0-alpha
 */

use BitCode\BitForm\Admin\Admin_Bar;
use BitCode\BitForm\Core\Database\DB;
use BitCode\BitForm\Core\Util\Activation;
use BitCode\BitForm\Core\Form\FormHandler;
use BitCode\BitForm\Core\Ajax\AjaxService;
use BitCode\BitForm\Core\Util\Deactivation;
use BitCode\BitForm\Core\Util\Uninstallation;
use BitCode\BitForm\Core\Capability\Request;
use BitCode\BitForm\Core\Util\GutenBlockProvider;
use BitCode\BitForm\Core\Integration\Integrations;
use BitCode\BitForm\Core\Util\FileDownloadProvider;
use BitCode\BitForm\Core\Fallback\FormEntryMetaChange;
use BitCode\BitForm\API\Route\Routes;

final class Plugin
{

    /**
     * Main instance of the plugin.
     *
     * @since 1.0.0-alpha
     * @var   Plugin|null
     */
    private static $instance = null;


    /**
     * Registers the plugin with WordPress.
     *
     * @since 1.0.0-alpha
     */
    public function register()
    {
        add_action('plugins_loaded', array($this, 'init_plugin'));
        (new Activation())->activate();
        (new Deactivation())->register();
        (new Uninstallation())->register();
    }


    /**
     * Initialize the hooks
     *
     * @return void
     */
    public function init_hooks()
    {
        add_action('init', array($this, 'registerBitformsPostType'));
        add_action("bitforms_exec_integrations", array(Integrations::class, 'integrationExecutionHelper'), 1, 5);
        // Localize our plugin
        add_action('init', array($this, 'localization_setup'));

        // initialize the classes
        add_action('init', array($this, 'init_classes'));

        add_action('init', array($this, 'entryMetaKeyUpdate'));

        add_filter('plugin_action_links_' . plugin_basename(BITFORMS_PLUGIN_MAIN_FILE), array($this, 'plugin_action_links'));
        add_action('rest_api_init', [$this, 'register_api']);
    }

	public function register_api()
    {
        $routes = new Routes();
        $routes->register_routes();
    }

    public function entryMetaKeyUpdate()
    {
        $installed = get_option('bitforms_installed');
        $oldversion = null;
        if ($installed) {
            $oldversion = get_option('bitforms_version');
        }
        if ($oldversion && version_compare($oldversion, BITFORMS_VERSION, '!=')) {
            update_option('bitforms_version', BITFORMS_VERSION);
            if (version_compare('1.0.4', $oldversion, '>=')) {
                // if version is lower or equal than 1.0.4
                $formEntryMetaChange = new FormEntryMetaChange();
                $formEntryMetaChange->changeMeta();
            }
        }
    }

    /**
     * Updates bit form content tables on wp db
     *
     * @return void
     */
    public function update_tables()
    {
        if (!current_user_can('manage_options')) {
            return;
        }

        global $bitforms_db_version;
        $installed_db_version = get_site_option("bitforms_db_version");
        if ($installed_db_version != $bitforms_db_version) {
            DB::migrate();
        }
    }

    /**
     * Register post type for bitforms
     *
     * @return void
     */
    public function registerBitformsPostType()
    {
        $args = array(
            'label'           => __('Bitform Pages', 'bitform'),
            'public'          => true,
            'show_ui'         => true,
            'show_in_menu'    => false,
            'capability_type' => 'page',
            'hierarchical'    => false,
            'query_var'       => false,
            'supports'        => array('title'),
            'show_in_rest'    => false
        );
        register_post_type('bitforms', $args);
    }

    /**
     * Initialize plugin for localization
     *
     * @uses load_plugin_textdomain()
     */
    public function localization_setup()
    {
        load_plugin_textdomain('bitform', false, dirname(BITFORMS_PLUGIN_BASENAME) . '/languages');
    }

    /**
     * Instantiate the required classes
     *
     * @return void
     */
    public function init_classes()
    {
        if (Request::Check('admin')) {
            (new Admin_Bar())->register();
        }
        if (Request::Check('ajax')) {
            new AjaxService();
        }
        if (Request::Check('frontend')) {
            $formHandler = new FormHandler();
            $formHandler->frontend;
        }
        if (Request::isPluginPage()) {
            (new FileDownloadProvider())->register();
        }
        if (current_user_can('edit_posts')) {
            (new GutenBlockProvider())->register();
        }
    }

    /**
     * Plugin action links
     *
     * @param  array $links
     *
     * @return array
     */
    public function plugin_action_links($links)
    {
        $links[] = '<a href="https://www.bitpress.pro" target="_blank">' . __('Docs', 'bitform') . '</a>';

        return $links;
    }


    public function init_plugin()
    {
        $this->init_hooks();
        $this->update_tables();
        do_action('bitform_loaded');
    }

    /**
     * Retrieves the main instance of the plugin.
     *
     * @since 1.0.0-alpha
     *
     * @return BITFORM Plugin main instance.
     */
    public static function instance()
    {
        return static::$instance;
    }

    /**
     * Loads the plugin main instance and initializes it.
     *
     * @param  string $main_file Absolute path to the plugin main file.
     *
     * @return bool True if the plugin main instance could be loaded, false otherwise.
     */
    public static function load($main_file)
    {
        if (null !== static::$instance) {
            return false;
        }

        static::$instance = new static($main_file);
        static::$instance->register();
        return true;
    }
}

```
