| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379 |
- <?php
- /**
- * Base class that gets extended by all module classes.
- *
- * @since 1.0
- */
- class FLBuilderModule {
- /**
- * A unique ID for the module.
- *
- * @since 1.0
- * @var string $node
- */
- public $node;
- /**
- * A unique ID for the module's parent.
- *
- * @since 1.0
- * @var int $parent
- */
- public $parent;
- /**
- * The sort order for this module.
- *
- * @since 1.0
- * @var int $position
- */
- public $position;
- /**
- * A display name for the module.
- *
- * @since 1.0
- * @var string $name
- */
- public $name;
- /**
- * A description to display for the module.
- *
- * @since 1.0
- * @var string $description
- */
- public $description;
- /**
- * The category this module belongs to.
- *
- * @since 1.0
- * @var string $category
- */
- public $category;
- /**
- * Must be the module's folder name.
- *
- * @since 1.0
- * @var string $slug
- */
- public $slug;
- /**
- * The module's directory path.
- *
- * @since 1.0
- * @var string $dir
- */
- public $dir;
- /**
- * The module's directory url.
- *
- * @since 1.0
- * @var string $url
- */
- public $url;
- /**
- * An array of form settings.
- *
- * @since 1.0
- * @var array $form
- */
- public $form = array();
- /**
- * Whether this module is enabled on the
- * frontend or not.
- *
- * @since 1.0
- * @var boolean $enabled
- */
- public $enabled = true;
- /**
- * Whether this module's content should
- * be exported to the WP editor or not.
- *
- * @since 1.0
- * @var boolean $editor_export
- */
- public $editor_export = true;
- /**
- * Whether partial refresh should be enabled
- * for this module or not.
- *
- * @since 1.7
- * @var boolean $partial_refresh
- */
- public $partial_refresh = false;
- /**
- * The module settings object.
- *
- * @since 1.0
- * @var object $settings
- */
- public $settings;
- /**
- * Additional CSS to enqueue.
- *
- * @since 1.0
- * @var array $css
- */
- public $css = array();
- /**
- * Additional JS to enqueue.
- *
- * @since 1.0
- * @var array $js
- */
- public $js = array();
- /**
- * The class of the font icon for this module.
- *
- * @since 2.0
- */
- public $icon = '';
- /**
- * Module constructor.
- *
- * @since 1.0
- */
- public function __construct( $params ) {
- $class_info = new ReflectionClass( $this );
- $class_path = $class_info->getFileName();
- $dir_path = dirname( $class_path );
- $this->slug = basename( $class_path, '.php' );
- $this->enabled = isset( $params['enabled'] ) ? $params['enabled'] : true;
- $this->editor_export = isset( $params['editor_export'] ) ? $params['editor_export'] : true;
- $this->partial_refresh = isset( $params['partial_refresh'] ) ? $params['partial_refresh'] : false;
- // We need to normalize the paths here since path comparisons
- // break on Windows because they use backslashes.
- $abspath = str_replace( '\\', '/', ABSPATH );
- $fl_builder_dir = str_replace( '\\', '/', FL_BUILDER_DIR );
- $dir_path = str_replace( '\\', '/', $dir_path );
- $stylesheet_directory = str_replace( '\\', '/', get_stylesheet_directory() );
- $stylesheet_directory_uri = str_replace( '\\', '/', get_stylesheet_directory_uri() );
- $template_directory = str_replace( '\\', '/', get_template_directory() );
- $template_directory_uri = str_replace( '\\', '/', get_template_directory_uri() );
- // Find the right paths.
- if ( is_child_theme() && stristr( $dir_path, $stylesheet_directory ) ) {
- $this->url = trailingslashit( str_replace( $stylesheet_directory, $stylesheet_directory_uri, $dir_path ) );
- $this->dir = trailingslashit( $dir_path );
- } elseif ( stristr( $dir_path, $template_directory ) ) {
- $this->url = trailingslashit( str_replace( $template_directory, $template_directory_uri, $dir_path ) );
- $this->dir = trailingslashit( $dir_path );
- } elseif ( isset( $params['url'] ) && isset( $params['dir'] ) ) {
- $this->url = trailingslashit( $params['url'] );
- $this->dir = trailingslashit( $params['dir'] );
- } elseif ( ! stristr( $dir_path, $fl_builder_dir ) ) {
- $this->url = trailingslashit( str_replace( trailingslashit( $abspath ), trailingslashit( home_url() ), $dir_path ) );
- $this->dir = trailingslashit( $dir_path );
- } else {
- $this->url = trailingslashit( FL_BUILDER_URL . 'modules/' . $this->slug );
- $this->dir = trailingslashit( FL_BUILDER_DIR . 'modules/' . $this->slug );
- }
- // Icon requires dir be defined before calling get_icon()
- $this->icon = isset( $params['icon'] ) ? $this->get_icon( $params['icon'] ) : $this->get_icon();
- $details = apply_filters( 'fl_builder_module_details', array(
- 'name' => $params['name'],
- 'description' => $params['description'],
- 'category' => $this->normalize_category_name( $params['category'] ),
- 'group' => isset( $params['group'] ) ? $params['group'] : false,
- 'icon' => $this->icon,
- ), $this->slug );
- $this->name = $details['name'];
- $this->description = $details['description'];
- $this->category = $details['category'];
- $this->group = $details['group'];
- $this->icon = $details['icon'];
- }
- /**
- * Used to enqueue additional frontend styles. Do not enqueue
- * frontend.css or frontend.responsive.css as those will be
- * enqueued automatically. Params are the same as those used in
- * WordPress' wp_enqueue_style function.
- *
- * @since 1.0
- * @param string $handle
- * @param string $src
- * @param array $deps
- * @param string $ver
- * @param string $media
- * @return void
- */
- public function add_css( $handle, $src = null, $deps = null, $ver = null, $media = null ) {
- $this->css[ $handle ] = array( $src, $deps, $ver, $media );
- }
- /**
- * Used to enqueue additional frontend scripts. Do not enqueue
- * frontend.js as that will be enqueued automatically. Params
- * are the same as those used in WordPress' wp_enqueue_script function.
- *
- * @since 1.0
- * @param string $handle
- * @param string $src
- * @param array $deps
- * @param string $ver
- * @param bool $in_footer
- * @return void
- */
- public function add_js( $handle, $src = null, $deps = null, $ver = null, $in_footer = null ) {
- $this->js[ $handle ] = array( $src, $deps, $ver, $in_footer );
- }
- /**
- * Enqueues the needed styles for any icon fields
- * in this module.
- *
- * @since 1.4.6
- * @return void
- */
- public function enqueue_icon_styles() {
- FLBuilderIcons::enqueue_styles_for_module( $this );
- }
- /**
- * Enqueues the needed styles for any font fields
- * in this module.
- *
- * @since 1.6.3
- * @return void
- */
- public function enqueue_font_styles() {
- FLBuilderFonts::add_fonts_for_module( $this );
- }
- /**
- * Should be overridden by subclasses to enqueue
- * additional css/js using the add_css and add_js methods.
- *
- * @since 1.0
- * @return void
- */
- public function enqueue_scripts() {
- }
- /**
- * Should be overridden by subclasses to
- * work with settings data before it is saved.
- *
- * @since 1.0
- * @param object A settings object that is going to be saved.
- * @return object
- */
- public function update( $settings ) {
- return $settings;
- }
- /**
- * Should be overridden by subclasses to work with a module before
- * it is deleted. Please note, this method is called when a module
- * is updated and when it's actually removed from the page and should
- * be used for things like clearing photo cache from the builder's
- * cache directory. If only need to run logic when a module is
- * actually removed from the page, use the remove method instead.
- *
- * @since 1.0
- * @return void
- */
- public function delete() {
- }
- /**
- * Should be overridden by subclasses to work with a module when
- * it is actually removed from the page.
- *
- * @since 1.0
- * @return void
- */
- public function remove() {
- }
- /**
- * Get svg icon string
- *
- * @since 2.0
- * @return String
- */
- public function get_icon( $icon = '' ) {
- // check if $icon is referencing an included icon.
- if ( '' != $icon && file_exists( FL_BUILDER_DIR . 'img/svg/' . $icon ) ) {
- $path = FL_BUILDER_DIR . 'img/svg/' . $icon;
- // check if module directory includes an icon.svg file
- } elseif ( file_exists( $this->dir . 'icon.svg' ) ) {
- $path = $this->dir . 'icon.svg';
- // default to included icon
- } else {
- $path = FL_BUILDER_DIR . 'img/svg/insert.svg';
- }
- if ( file_exists( $path ) ) {
- return file_get_contents( $path );
- } else {
- return '';
- }
- }
- /**
- * Normalizes category names to support 2.0 since the default
- * category names changed.
- *
- * @since 2.0
- * @access private
- * @param string $cat
- * @return string
- */
- private function normalize_category_name( $cat ) {
- if ( __( 'Basic Modules', 'fl-builder' ) === $cat ) {
- $cat = __( 'Basic', 'fl-builder' );
- } elseif ( __( 'Advanced Modules', 'fl-builder' ) === $cat ) {
- $cat = __( 'Advanced', 'fl-builder' );
- }
- return $cat;
- }
- /**
- * Get the default svg icon
- *
- * @since 2.0
- * @return String
- */
- static public function get_default_icon() {
- $path = FL_BUILDER_DIR . 'img/svg/insert.svg';
- return file_get_contents( $path );
- }
- /**
- * Get the widget icon
- *
- * @since 2.0
- * @return String
- */
- static public function get_widget_icon() {
- $path = FL_BUILDER_DIR . 'img/svg/wordpress-alt.svg';
- return file_get_contents( $path );
- }
- }
|