defs = apply_filters( 'frontglut_register_modules', array( 'dashboard' => array( 'label' => __( 'Dashboard', 'frontglut' ), 'desc' => __( 'Frontend app shell, menus, widgets, theming.', 'frontglut' ), 'class' => 'FrontGlut\\Modules\\Dashboard\\Dashboard', 'core' => true ), 'auth' => array( 'label' => __( 'Accounts & Auth', 'frontglut' ), 'desc' => __( 'Login, registration, profiles, roles, captcha, social login.', 'frontglut' ), 'class' => 'FrontGlut\\Modules\\Auth\\Auth', 'core' => true ), 'forms' => array( 'label' => __( 'Forms & Fields', 'frontglut' ), 'desc' => __( 'Drag-and-drop form builder and field engine.', 'frontglut' ), 'class' => 'FrontGlut\\Modules\\Forms\\Forms', 'core' => true ), 'posts' => array( 'label' => __( 'Post Submission', 'frontglut' ), 'desc' => __( 'Guest and member posting, moderation, my submissions.', 'frontglut' ), 'class' => 'FrontGlut\\Modules\\Posts\\Posts' ), 'posttypes' => array( 'label' => __( 'Post Types & Taxonomies', 'frontglut' ), 'desc' => __( 'Custom post type and taxonomy builder with frontend CRUD.', 'frontglut' ), 'class' => 'FrontGlut\\Modules\\PostTypes\\PostTypes' ), 'products' => array( 'label' => __( 'WooCommerce Products', 'frontglut' ), 'desc' => __( 'Manage products from the frontend.', 'frontglut' ), 'class' => 'FrontGlut\\Modules\\Products\\Products', 'requires' => 'woocommerce' ), 'orders' => array( 'label' => __( 'Orders, Coupons & Reports', 'frontglut' ), 'desc' => __( 'Orders, coupons, reports, customers, reviews.', 'frontglut' ), 'class' => 'FrontGlut\\Modules\\Orders\\Orders', 'requires' => 'woocommerce' ), 'vendors' => array( 'label' => __( 'Multivendor', 'frontglut' ), 'desc' => __( 'Vendors, storefronts, commissions, withdrawals.', 'frontglut' ), 'class' => 'FrontGlut\\Modules\\Vendors\\Vendors', 'requires' => 'woocommerce', 'default' => false ), 'engage' => array( 'label' => __( 'Communication', 'frontglut' ), 'desc' => __( 'Notifications, messages, enquiries, tickets, knowledge base, followers.', 'frontglut' ), 'class' => 'FrontGlut\\Modules\\Engage\\Engage' ), 'files' => array( 'label' => __( 'Files', 'frontglut' ), 'desc' => __( 'Uploader and file explorer.', 'frontglut' ), 'class' => 'FrontGlut\\Modules\\Files\\Files' ), 'system' => array( 'label' => __( 'System', 'frontglut' ), 'desc' => __( 'Status, audit log, tools, privacy.', 'frontglut' ), 'class' => 'FrontGlut\\Modules\\System\\System', 'core' => true ), ) ); $saved = get_option( self::OPTION, null ); foreach ( $this->defs as $slug => $d ) { $default = isset( $d['default'] ) ? (bool) $d['default'] : true; if ( ! empty( $d['core'] ) ) { $on = true; } elseif ( is_array( $saved ) && array_key_exists( $slug, $saved ) ) { $on = (bool) $saved[ $slug ]; } else { $on = $default; } $this->enabled[ $slug ] = $on && $this->available( $slug ); } } public function definitions() { return $this->defs; } /** Dependencies satisfied? */ public function available( $slug ) { $req = isset( $this->defs[ $slug ]['requires'] ) ? $this->defs[ $slug ]['requires'] : ''; if ( 'woocommerce' === $req ) { return class_exists( 'WooCommerce' ); } return true; } public function is_enabled( $slug ) { return ! empty( $this->enabled[ $slug ] ); } public function save( array $on ) { $out = array(); foreach ( $this->defs as $slug => $d ) { $out[ $slug ] = ! empty( $d['core'] ) || ! empty( $on[ $slug ] ); } update_option( self::OPTION, $out, false ); } public function boot_all() { foreach ( $this->defs as $slug => $d ) { if ( empty( $this->enabled[ $slug ] ) || ! class_exists( $d['class'] ) ) { continue; } $obj = new $d['class'](); $obj->boot(); $this->booted[ $slug ] = $obj; } do_action( 'frontglut_modules_loaded', $this ); } public function get( $slug ) { return isset( $this->booted[ $slug ] ) ? $this->booted[ $slug ] : null; } }