Main class for Torro Forms.
Description
Takes care of initializing the plugin.
This file must always be parseable by PHP 5.2.
Source
File: src/torro-forms.php
class Torro_Forms extends Leaves_And_Love_Plugin { /** * The forms manager instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\DB_Objects\Forms\Form_Manager */ protected $forms; /** * The form categories manager instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\DB_Objects\Form_Categories\Form_Category_Manager */ protected $form_categories; /** * The containers manager instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\DB_Objects\Containers\Container_Manager */ protected $containers; /** * The elements manager instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\DB_Objects\Elements\Element_Manager */ protected $elements; /** * The element choices manager instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\DB_Objects\Element_Choices\Element_Choice_Manager */ protected $element_choices; /** * The element settings manager instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\DB_Objects\Element_Settings\Element_Setting_Manager */ protected $element_settings; /** * The submissions manager instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\DB_Objects\Submissions\Submission_Manager */ protected $submissions; /** * The submission values manager instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\DB_Objects\Submission_Values\Submission_Value_Manager */ protected $submission_values; /** * The post types API instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\DB_Objects\Post_Type_Manager */ protected $post_types; /** * The taxonomies API instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\DB_Objects\Taxonomy_Manager */ protected $taxonomies; /** * The form uploads instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\Components\Form_Upload_Manager */ protected $form_uploads; /** * The template tag handlers instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\Components\Template_Tag_Handler_Manager */ protected $template_tag_handlers; /** * The Admin Pages instance. * * @since 1.0.0 * @var Leaves_And_Love\Plugin_Lib\Components\Admin_Pages */ protected $admin_pages; /** * The Extensions instance. * * @since 1.0.0 * @var Leaves_And_Love\Plugin_Lib\Components\Extensions */ protected $extensions; /** * The module manager instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\Modules\Module_Manager */ protected $modules; /** * The Option API instance. * * @since 1.0.0 * @var Leaves_And_Love\Plugin_Lib\Options */ protected $options; /** * The cache instance. * * @since 1.0.0 * @var Leaves_And_Love\Plugin_Lib\Cache */ protected $cache; /** * The database instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\DB */ protected $db; /** * The Metadata API instance. * * @since 1.0.0 * @var Leaves_And_Love\Plugin_Lib\Meta */ protected $meta; /** * The Assets manager instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\Assets */ protected $assets; /** * The Template instance. * * @since 1.0.0 * @var Leaves_And_Love\Plugin_Lib\Template */ protected $template; /** * The AJAX handler instance. * * @since 1.0.0 * @var Leaves_And_Love\Plugin_Lib\AJAX */ protected $ajax; /** * The error handler instance. * * @since 1.0.0 * @var awsmug\Torro_Forms\Error_Handler */ protected $error_handler; /** * The plugin's API-API instance. * * @since 1.0.0 * @var APIAPI\Core\APIAPI */ protected $apiapi; /** * The plugin's logger instance. * * @since 1.0.0 * @var Psr\Log\LoggerInterface */ protected $logger; /** * The plugin's API-API config. * * @since 1.0.0 * @var awsmug\Torro_Forms\APIAPI_Config */ protected $apiapi_config; /** * Deactivates the plugin. * * Clears the cron task scheduled. * * @since 1.0.0 * @static * * @codeCoverageIgnore */ public static function deactivate( $network_wide = false ) { if ( $network_wide ) { $sites = get_sites( array( 'network_id' => get_current_network_id(), 'no_found_rows' => true, ) ); foreach ( $sites as $site ) { switch_to_blog( $site->id ); torro()->submissions->clear_cron_task(); restore_current_blog(); } } else { torro()->submissions->clear_cron_task(); } } /** * Uninstalls the plugin. * * Drops all database tables and related content. * * @since 1.0.0 * @static * * @codeCoverageIgnore */ public static function uninstall() { torro()->db()->uninstall(); } /** * Returns the current version of Torro Forms. * * @since 1.0.0 * * @return string Version number. */ public function version() { return $this->version; } /** * Returns the deactivation callback. * * @since 1.0.0 * * @return callable Deactivation callback. */ public function get_deactivation_hook() { return array( __CLASS__, 'deactivate' ); } /** * Returns the uninstall callback. * * @since 1.0.0 * * @return callable Uninstall callback. */ public function get_uninstall_hook() { return array( __CLASS__, 'uninstall' ); } /** * Returns the plugin's API-API instance. * * @since 1.0.0 * * @return APIAPI\Core\APIAPI The API-API instance. */ public function apiapi() { if ( ! $this->apiapi ) { $this->apiapi = apiapi( $this->prefix . 'forms', $this->apiapi_config ); } return $this->apiapi; } /** * Returns the plugin's logger instance. * * @since 1.0.0 * * @return Psr\Log\LoggerInterface The logger instance. */ public function logger() { if ( ! $this->logger ) { /** * Filters initializing the plugin's logger instance. * * An implementation of Psr\Log\LoggerInterface may be returned to use * that instead of the regular logger, which simply uses the typical * PHP error handler controlled by WordPress. * * @since 1.0.0 * * @param Psr\Log\LoggerInterface|null Logger instance to use, or null to not override (default). */ $logger = apply_filters( "{$this->prefix}set_logger", null ); if ( $logger && is_a( $logger, 'Psr\Log\LoggerInterface' ) ) { $this->logger = $logger; } else { $this->logger = $this->instantiate_plugin_class( 'Logger' ); } } return $this->logger; } /** * Loads the base properties of the class. * * @since 1.0.0 */ protected function load_base_properties() { $this->version = '1.0.0'; $this->prefix = 'torro_'; $this->vendor_name = 'awsmug'; $this->project_name = 'Torro_Forms'; $this->minimum_php = '5.6'; $this->minimum_wp = '4.8'; } /** * Loads the plugin's textdomain. * * @since 1.0.0 */ protected function load_textdomain() { /** This filter is documented in wp-includes/l10n.php */ $locale = apply_filters( 'plugin_locale', get_locale(), 'torro-forms' ); $mofile = WP_LANG_DIR . '/plugins/torro-forms/torro-forms-' . $locale . '.mo'; if ( file_exists( $mofile ) ) { return load_textdomain( 'torro-forms', $mofile ); } $this->load_plugin_textdomain( 'torro-forms' ); } /** * Loads the class messages. * * @since 1.0.0 */ protected function load_messages() { $this->messages['cheatin_huh'] = __( 'Cheatin’ huh?', 'torro-forms' ); /* translators: %s: PHP version number */ $this->messages['outdated_php'] = __( 'Torro Forms cannot be initialized because your setup uses a PHP version older than %s.', 'torro-forms' ); /* translators: %s: WordPress version number */ $this->messages['outdated_wp'] = __( 'Torro Forms cannot be initialized because your setup uses a WordPress version older than %s.', 'torro-forms' ); } /** * Checks whether the dependencies have been loaded. * * @since 1.0.0 * * @return bool True if the dependencies are loaded, false otherwise. */ protected function dependencies_loaded() { if ( ! class_exists( 'PHPExcel' ) ) { return false; } if ( ! interface_exists( 'Psr\Log\LoggerInterface' ) ) { return false; } if ( ! function_exists( 'apiapi_manager' ) ) { return false; } if ( ! apiapi_manager()->transporters()->is_registered( 'wordpress' ) ) { return false; } if ( ! apiapi_manager()->storages()->is_registered( 'wordpress-option' ) ) { return false; } return true; } /** * Instantiates the plugin services. * * @since 1.0.0 */ protected function instantiate_services() { if ( defined( 'WP_CLI' ) && WP_CLI ) { WP_CLI::add_command( substr( $this->prefix, 0, -1 ), $this->instantiate_library_class( 'CLI_Command_Aggregate' ), array( 'shortdesc' => 'Manage Torro Forms content.', ) ); } $this->instantiate_core_services(); $this->instantiate_component_services(); $this->instantiate_db_object_managers(); $this->instantiate_modules(); $this->setup_capabilities(); $this->connect_db_object_managers(); $this->setup_admin_pages(); } /** * Instantiates the plugin core services. * * @since 1.0.0 */ protected function instantiate_core_services() { call_user_func( array( 'Leaves_And_Love\Plugin_Lib\Fields\Field_Manager', 'set_translations' ), $this->instantiate_plugin_class( 'Translations\Translations_Field_Manager' ) ); $this->error_handler = $this->instantiate_plugin_service( 'Error_Handler', $this->prefix, $this->instantiate_plugin_class( 'Translations\Translations_Error_Handler' ) ); $this->options = $this->instantiate_library_service( 'Options', $this->prefix ); $this->cache = $this->instantiate_library_service( 'Cache', $this->prefix ); $this->db = $this->instantiate_plugin_service( 'DB', $this->prefix, array( 'options' => $this->options, 'error_handler' => $this->error_handler, ), $this->instantiate_plugin_class( 'Translations\Translations_DB' ) ); $this->meta = $this->instantiate_library_service( 'Meta', $this->prefix, array( 'db' => $this->db, 'error_handler' => $this->error_handler, ) ); $this->assets = $this->instantiate_plugin_service( 'Assets', $this->prefix, array( 'path_callback' => array( $this, 'path' ), 'url_callback' => array( $this, 'url' ), 'plugin_version' => $this->version, ) ); $this->template = $this->instantiate_library_service( 'Template', $this->prefix, array( 'default_location' => $this->path( 'templates/' ), ) ); $this->ajax = $this->instantiate_library_service( 'AJAX', $this->prefix, $this->instantiate_plugin_class( 'Translations\Translations_AJAX' ) ); $this->apiapi_config = $this->instantiate_plugin_class( 'APIAPI_Config', $this->prefix ); } /** * Instantiates the plugin component services. * * @since 1.0.0 */ protected function instantiate_component_services() { $this->admin_pages = $this->instantiate_library_service( 'Components\Admin_Pages', $this->prefix, array( 'ajax' => $this->ajax, 'assets' => $this->assets, 'error_handler' => $this->error_handler, ) ); $this->extensions = $this->instantiate_library_service( 'Components\Extensions', $this->prefix, $this->instantiate_plugin_class( 'Translations\Translations_Extensions' ) ); $this->extensions->set_plugin( $this ); $this->template_tag_handlers = $this->instantiate_plugin_service( 'Components\Template_Tag_Handler_Manager', $this->prefix ); $this->post_types = $this->instantiate_plugin_service( 'DB_Objects\Post_Type_Manager', $this->prefix, array( 'options' => $this->options, 'error_handler' => $this->error_handler, ) ); $this->taxonomies = $this->instantiate_plugin_service( 'DB_Objects\Taxonomy_Manager', $this->prefix, array( 'options' => $this->options, 'error_handler' => $this->error_handler, ) ); $this->form_uploads = $this->instantiate_plugin_service( 'Components\Form_Upload_Manager', $this->prefix, array( 'taxonomies' => $this->taxonomies, 'error_handler' => $this->error_handler, ) ); } /** * Instantiates the plugin DB object managers. * * @since 1.0.0 */ protected function instantiate_db_object_managers() { $this->forms = $this->instantiate_plugin_service( 'DB_Objects\Forms\Form_Manager', $this->prefix, array( 'capabilities' => $this->instantiate_plugin_service( 'DB_Objects\Forms\Form_Capabilities', $this->prefix ), 'template' => $this->template, 'options' => $this->options, 'assets' => $this->assets, 'ajax' => $this->ajax, 'db' => $this->db, 'cache' => $this->cache, 'meta' => $this->meta, 'error_handler' => $this->error_handler, ), $this->instantiate_plugin_class( 'Translations\Translations_Form_Manager' ) ); $this->form_categories = $this->instantiate_plugin_service( 'DB_Objects\Form_Categories\Form_Category_Manager', $this->prefix, array( 'capabilities' => $this->instantiate_plugin_service( 'DB_Objects\Form_Categories\Form_Category_Capabilities', $this->prefix ), 'db' => $this->db, 'cache' => $this->cache, 'meta' => $this->meta, 'error_handler' => $this->error_handler, ), $this->instantiate_plugin_class( 'Translations\Translations_Form_Category_Manager' ) ); $this->containers = $this->instantiate_plugin_service( 'DB_Objects\Containers\Container_Manager', $this->prefix, array( 'capabilities' => $this->instantiate_plugin_service( 'DB_Objects\Containers\Container_Capabilities', $this->prefix ), 'db' => $this->db, 'cache' => $this->cache, 'error_handler' => $this->error_handler, ), $this->instantiate_plugin_class( 'Translations\Translations_Container_Manager' ) ); $this->elements = $this->instantiate_plugin_service( 'DB_Objects\Elements\Element_Manager', $this->prefix, array( 'capabilities' => $this->instantiate_plugin_service( 'DB_Objects\Elements\Element_Capabilities', $this->prefix ), 'db' => $this->db, 'assets' => $this->assets, 'ajax' => $this->ajax, 'cache' => $this->cache, 'error_handler' => $this->error_handler, ), $this->instantiate_plugin_class( 'Translations\Translations_Element_Manager' ) ); $this->element_choices = $this->instantiate_plugin_service( 'DB_Objects\Element_Choices\Element_Choice_Manager', $this->prefix, array( 'capabilities' => $this->instantiate_plugin_service( 'DB_Objects\Element_Choices\Element_Choice_Capabilities', $this->prefix ), 'db' => $this->db, 'cache' => $this->cache, 'error_handler' => $this->error_handler, ), $this->instantiate_plugin_class( 'Translations\Translations_Element_Choice_Manager' ) ); $this->element_settings = $this->instantiate_plugin_service( 'DB_Objects\Element_Settings\Element_Setting_Manager', $this->prefix, array( 'capabilities' => $this->instantiate_plugin_service( 'DB_Objects\Element_Settings\Element_Setting_Capabilities', $this->prefix ), 'db' => $this->db, 'cache' => $this->cache, 'error_handler' => $this->error_handler, ), $this->instantiate_plugin_class( 'Translations\Translations_Element_Setting_Manager' ) ); $this->submissions = $this->instantiate_plugin_service( 'DB_Objects\Submissions\Submission_Manager', $this->prefix, array( 'capabilities' => $this->instantiate_plugin_service( 'DB_Objects\Submissions\Submission_Capabilities', $this->prefix ), 'db' => $this->db, 'cache' => $this->cache, 'meta' => $this->meta, 'error_handler' => $this->error_handler, ), $this->instantiate_plugin_class( 'Translations\Translations_Submission_Manager' ) ); $this->submission_values = $this->instantiate_plugin_service( 'DB_Objects\Submission_Values\Submission_Value_Manager', $this->prefix, array( 'capabilities' => $this->instantiate_plugin_service( 'DB_Objects\Submission_Values\Submission_Value_Capabilities', $this->prefix ), 'db' => $this->db, 'cache' => $this->cache, 'error_handler' => $this->error_handler, ), $this->instantiate_plugin_class( 'Translations\Translations_Submission_Value_Manager' ) ); $this->db->set_version( 20180125 ); } /** * Instantiates the module manager. * * @since 1.0.0 */ protected function instantiate_modules() { $this->modules = $this->instantiate_plugin_service( 'Modules\Module_Manager', $this->prefix, array( 'options' => $this->options, 'meta' => $this->meta, 'assets' => $this->assets, 'ajax' => $this->ajax, 'forms' => $this->forms, 'template_tag_handlers' => $this->template_tag_handlers, 'error_handler' => $this->error_handler, ) ); } /** * Sets up capabilities for the plugin DB object managers. * * @since 1.0.0 */ protected function setup_capabilities() { // Map form and its component capabilities to post capabilities. $this->forms->capabilities()->map_capabilities( 'posts' ); $this->containers->capabilities()->map_capabilities( 'posts' ); $this->elements->capabilities()->map_capabilities( 'posts' ); $this->element_choices->capabilities()->map_capabilities( 'posts' ); $this->element_settings->capabilities()->map_capabilities( 'posts' ); $this->submissions->capabilities()->map_capabilities( 'posts' ); $this->submission_values->capabilities()->map_capabilities( 'posts' ); // Map form category capabilities to category capabilities. $this->form_categories->capabilities()->map_capabilities( 'categories' ); // Grant access to plugin settings if the user can manage options. $this->forms->capabilities()->grant_capabilities( array( 'manage_item_settings' => 'manage_options', ) ); } /** * Connects the plugin DB object managers through hierarchical relationships. * * @since 1.0.0 */ protected function connect_db_object_managers() { $this->forms->add_child_manager( 'form_categories', $this->form_categories ); $this->forms->add_child_manager( 'containers', $this->containers ); $this->forms->add_child_manager( 'submissions', $this->submissions ); $this->form_categories->add_parent_manager( 'forms', $this->forms ); $this->containers->add_parent_manager( 'forms', $this->forms ); $this->containers->add_child_manager( 'elements', $this->elements ); $this->elements->add_parent_manager( 'containers', $this->containers ); $this->elements->add_child_manager( 'element_choices', $this->element_choices ); $this->elements->add_child_manager( 'element_settings', $this->element_settings ); $this->element_choices->add_parent_manager( 'elements', $this->elements ); $this->element_settings->add_parent_manager( 'elements', $this->elements ); $this->submissions->add_parent_manager( 'forms', $this->forms ); $this->submissions->add_child_manager( 'submission_values', $this->submission_values ); $this->submission_values->add_parent_manager( 'submissions', $this->submissions ); } /** * Sets up the admin pages. * * @since 1.0.0 */ protected function setup_admin_pages() { if ( ! is_admin() ) { return; } $submissions_list_class_name = 'awsmug\Torro_Forms\DB_Objects\Submissions\Submissions_List_Page'; $submission_edit_class_name = 'awsmug\Torro_Forms\DB_Objects\Submissions\Submission_Edit_Page'; $submissions_list_page = new $submissions_list_class_name( $this->admin_pages->get_prefix() . 'list_submissions', $this->admin_pages, $this->submissions ); $submission_edit_page = new $submission_edit_class_name( $this->admin_pages->get_prefix() . 'edit_submission', $this->admin_pages, $this->submissions ); $this->admin_pages->add( 'list_submissions', $submissions_list_page, 'edit.php?post_type=' . $this->admin_pages->get_prefix() . 'form', null, 'site' ); $this->admin_pages->add( 'edit_submission', $submission_edit_page, null, null, 'site', true ); $form_settings_class_name = 'awsmug\Torro_Forms\DB_Objects\Forms\Form_Settings_Page'; $form_settings_page = new $form_settings_class_name( $this->admin_pages->get_prefix() . 'form_settings', $this->admin_pages, $this->forms ); $this->admin_pages->add( 'form_settings', $form_settings_page, 'edit.php?post_type=torro_form', null, 'site' ); } /** * Adds the necessary plugin hooks. * * @since 1.0.0 */ protected function add_hooks() { $this->add_core_service_hooks(); $this->add_component_service_hooks(); $this->add_db_object_manager_hooks(); $this->add_module_hooks(); } /** * Adds the necessary plugin core service hooks. * * @since 1.0.0 */ protected function add_core_service_hooks() { $this->options->add_hooks(); $this->db->add_hooks(); $this->assets->add_hooks(); $this->ajax->add_hooks(); $this->apiapi_config->add_hooks(); } /** * Adds the necessary plugin component service hooks. * * @since 1.0.0 */ protected function add_component_service_hooks() { $this->admin_pages->add_hooks(); $this->extensions->add_hooks(); } /** * Adds the necessary plugin DB object manager hooks. * * @since 1.0.0 */ protected function add_db_object_manager_hooks() { $this->forms->add_hooks(); $this->form_categories->add_hooks(); $this->containers->add_hooks(); $this->elements->add_hooks(); $this->element_choices->add_hooks(); $this->element_settings->add_hooks(); $this->submissions->add_hooks(); $this->submission_values->add_hooks(); $this->forms->capabilities()->add_hooks(); $this->form_categories->capabilities()->add_hooks(); $this->containers->capabilities()->add_hooks(); $this->elements->capabilities()->add_hooks(); $this->element_choices->capabilities()->add_hooks(); $this->element_settings->capabilities()->add_hooks(); $this->submissions->capabilities()->add_hooks(); $this->submission_values->capabilities()->add_hooks(); $this->post_types->add_hooks(); $this->taxonomies->add_hooks(); } /** * Adds the necessary module hooks. * * @since 1.0.0 */ protected function add_module_hooks() { $this->modules->add_hooks(); } }
Changelog
Version | Description |
---|---|
1.0.0 | Introduced. |
Methods
- add_component_service_hooks — Adds the necessary plugin component service hooks.
- add_core_service_hooks — Adds the necessary plugin core service hooks.
- add_db_object_manager_hooks — Adds the necessary plugin DB object manager hooks.
- add_hooks — Adds the necessary plugin hooks.
- add_module_hooks — Adds the necessary module hooks.
- apiapi — Returns the plugin's API-API instance.
- connect_db_object_managers — Connects the plugin DB object managers through hierarchical relationships.
- deactivate — Deactivates the plugin.
- dependencies_loaded — Checks whether the dependencies have been loaded.
- get_deactivation_hook — Returns the deactivation callback.
- get_uninstall_hook — Returns the uninstall callback.
- instantiate_component_services — Instantiates the plugin component services.
- instantiate_core_services — Instantiates the plugin core services.
- instantiate_db_object_managers — Instantiates the plugin DB object managers.
- instantiate_modules — Instantiates the module manager.
- instantiate_services — Instantiates the plugin services.
- load_base_properties — Loads the base properties of the class.
- load_messages — Loads the class messages.
- load_textdomain — Loads the plugin's textdomain.
- logger — Returns the plugin's logger instance.
- setup_admin_pages — Sets up the admin pages.
- setup_capabilities — Sets up capabilities for the plugin DB object managers.
- uninstall — Uninstalls the plugin.
- version — Returns the current version of Torro Forms.