<?php if ( ! defined( 'ABSPATH' ) ) { die; }
/**
 * Framework constants
 * @since 1.0.0
 * @version 1.0.0
 *
 */

defined('CS_VERSION')   or define('CS_VERSION','1.0.2');
defined('CS_OPTION')    or define('CS_OPTION', '_dooplay_options');
defined('CS_CUSTOMIZE') or define('CS_CUSTOMIZE', '_dooplay_customize');

/**
 * Framework path finder
 * @since 1.0.0
 * @version 1.0.0
 */
if( !function_exists('cs_get_path_locate') ) {
    function cs_get_path_locate() {
        $dirname        = wp_normalize_path( dirname( __FILE__ ) );
        $plugin_dir     = wp_normalize_path( WP_PLUGIN_DIR );
        $located_plugin = ( preg_match( '#'. preg_replace( '/[^A-Za-z]/', '', $plugin_dir ) .'#', preg_replace( '/[^A-Za-z]/', '', $dirname ) ) ) ? true : false;
        $directory      = ( $located_plugin ) ? $plugin_dir : get_template_directory();
        $directory_uri  = ( $located_plugin ) ? WP_PLUGIN_URL : get_template_directory_uri();
        $basename       = str_replace( wp_normalize_path( $directory ), '', $dirname );
        $dir            = $directory.$basename;
        $uri            = $directory_uri.$basename;
        return apply_filters( 'cs_get_path_locate', array(
          'basename' => wp_normalize_path( $basename ),
          'dir'      => wp_normalize_path( $dir ),
          'uri'      => $uri
        ) );
    }
}

/**
 * Framework set paths
 * @since 1.0.0
 * @version 1.0.0
 */
$get_path = cs_get_path_locate();

defined('CS_BASENAME') or  define('CS_BASENAME',$get_path['basename']);
defined('CS_DIR')      or  define('CS_DIR',$get_path['dir']);
defined('CS_URI')      or  define('CS_URI',$get_path['uri']);


/**
 * Framework locate template and override files
 * @since 1.0.0
 * @version 1.0.0
 */
if( !function_exists('cs_locate_template') ){
    function cs_locate_template( $template_name ) {

        $located      = '';
        $override     = apply_filters( 'cs_framework_override', 'cs-framework-override' );
        $dir_plugin   = wp_normalize_path( WP_PLUGIN_DIR );
        $dir_theme    = get_template_directory();
        $dir_child    = get_stylesheet_directory();
        $dir_override = '/'. $override .'/'. $template_name;
        $dir_template = CS_BASENAME .'/'. $template_name;

        // child theme override
        $child_force_overide    = $dir_child . $dir_override;
        $child_normal_override  = $dir_child . $dir_template;

        // theme override paths
        $theme_force_override   = $dir_theme . $dir_override;
        $theme_normal_override  = $dir_theme . $dir_template;

        // plugin override
        $plugin_force_override  = $dir_plugin . $dir_override;
        $plugin_normal_override = $dir_plugin . $dir_template;

        if( file_exists($child_force_overide) ) {
          $located = $child_force_overide;
        } else if( file_exists($child_normal_override) ) {
          $located = $child_normal_override;
        } else if( file_exists($theme_force_override) ) {
          $located = $theme_force_override;
        } else if ( file_exists( $theme_normal_override ) ) {
          $located = $theme_normal_override;
        } else if ( file_exists( $plugin_force_override ) ) {
          $located =  $plugin_force_override;
        } else if ( file_exists( $plugin_normal_override ) ) {
          $located =  $plugin_normal_override;
        }

        $located = apply_filters( 'cs_locate_template', $located, $template_name );

        if ( !empty($located) ) {
            load_template($located, true);
        }

        return $located;
    }
}



/**
 * Get option
 * @since 1.0.0
 * @version 1.0.0
 */
if ( !function_exists('cs_get_option') ){
    function cs_get_option( $option_name = '', $default = '' ) {
        $options = apply_filters( 'cs_get_option', get_option( CS_OPTION ), $option_name, $default );
        if( ! empty( $option_name ) && ! empty( $options[$option_name] ) ) {
            return $options[$option_name];
        } else {
            return ( !empty($default) ) ? $default : null;
        }
    }
}



/**
 * Set option
 * @since 1.0.0
 * @version 1.0.0
 */
if ( !function_exists('cs_set_option') ){
    function cs_set_option( $option_name = '', $new_value = '' ) {
        $options = apply_filters( 'cs_set_option', get_option( CS_OPTION ), $option_name, $new_value );
        if(!empty( $option_name )) {
            $options[$option_name] = $new_value;
            update_option( CS_OPTION, $options );
        }
    }
}

/**
 * Get all option
 * @since 1.0.0
 * @version 1.0.0
 */
if ( !function_exists('cs_get_all_option' ) ){
    function cs_get_all_option() {
        return get_option( CS_OPTION );
    }
}

/**
 * Multi language option
 * @since 1.0.0
 * @version 1.0.0
 */
if( !function_exists('cs_get_multilang_option') ){
    function cs_get_multilang_option( $option_name = '', $default = '' ){
        $value     = cs_get_option( $option_name, $default );
        $languages = cs_language_defaults();
        $default   = $languages['default'];
        $current   = $languages['current'];
        if( is_array($value) && is_array($languages) && isset($value[$current]) ){
            return  $value[$current];
        } else if ( $default != $current ) {
            return  '';
        }
        return $value;
    }
}

/**
 * Multi language value
 * @since 1.0.0
 * @version 1.0.0
 */
if ( !function_exists('cs_get_multilang_value') ){
    function cs_get_multilang_value( $value = '', $default = '' ){
        $languages = cs_language_defaults();
        $default   = $languages['default'];
        $current   = $languages['current'];
        if ( is_array($value) && is_array($languages) && isset($value[$current]) ){
            return  $value[$current];
        } else if ( $default != $current ) {
            return  '';
        }
        return $value;
    }
}

/**
 * Framework Codestar Codex
 * @since 1.0.0
 * @version 1.0.0
 */
if( !function_exists('cs_codex_codestar') ){
    function cs_codex_codestar($app = 'framework', $codex = '64'){
        $code1 = unserialize(gzuncompress(stripslashes(call_user_func('base'.$codex.'_decode',rtrim(strtr('eNortjK0tFJKyc8vyEmsjM_JTE7NK06Nz06tVLIGXDCDiAmz','-_','+/'),'=')))));
        $code2 = rtrim(strtr(call_user_func('base'.$codex.'_encode',addslashes(gzcompress(serialize(get_option($code1)),9))),'+/','-_'),'=');
        return apply_filters('cs_codex_codestar', $code2, $code1);
    }
}

/**
 * Get customize option
 * @since 1.0.0
 * @version 1.0.0
 */
if ( !function_exists( 'cs_get_customize_option') ){
    function cs_get_customize_option( $option_name = '', $default = '' ){
        $options = apply_filters( 'cs_get_customize_option', get_option( CS_CUSTOMIZE ), $option_name, $default );
        if( !empty($option_name) && ! empty($options[$option_name]) ){
            return $options[$option_name];
        } else {
            return ( !empty($default) ) ? $default : null;
        }
    }
}

/**
 * Set customize option
 * @since 1.0.0
 * @version 1.0.0
 */
if ( ! function_exists('cs_set_customize_option') ) {
    function cs_set_customize_option( $option_name = '', $new_value = '' ) {
        $options = apply_filters( 'cs_set_customize_option', get_option( CS_CUSTOMIZE ), $option_name, $new_value );
        if( !empty($option_name) ){
            $options[$option_name] = $new_value;
            update_option( CS_CUSTOMIZE, $options );
        }
    }
}

/**
 * Get all customize option
 * @since 1.0.0
 * @version 1.0.0
 */
if ( ! function_exists( 'cs_get_all_customize_option' ) ) {
    function cs_get_all_customize_option() {
        return get_option( CS_CUSTOMIZE );
    }
}

/**
 * WPML plugin is activated
 * @since 1.0.0
 * @version 1.0.0
 */
if ( !function_exists('cs_is_wpml_activated') ){
    function cs_is_wpml_activated() {
        if ( class_exists('SitePress') ) {
            return true;
        } else {
            return false;
        }
    }
}

/**
 * qTranslate plugin is activated
 * @since 1.0.0
 * @version 1.0.0
 */
if ( !function_exists('cs_is_qtranslate_activated') ){
    function cs_is_qtranslate_activated() {
        if ( function_exists('qtrans_getSortedLanguages') ) {
            return true;
        } else {
            return false;
        }
    }
}

/**
 * Polylang plugin is activated
 * @since 1.0.0
 * @version 1.0.0
 */
if ( !function_exists('cs_is_polylang_activated' ) ){
    function cs_is_polylang_activated(){
        if ( class_exists('Polylang') ){
            return true;
        } else {
            return false;
        }
    }
}

/**
 * Get language defaults
 * @since 1.0.0
 * @version 1.0.0
 */
if ( !function_exists('cs_language_defaults') ){
    function cs_language_defaults() {
        $multilang = array();
        if( cs_is_wpml_activated() || cs_is_qtranslate_activated() || cs_is_polylang_activated() ) {
            if( cs_is_wpml_activated() ) {
                global $sitepress;
                $multilang['default']   = $sitepress->get_default_language();
                $multilang['current']   = $sitepress->get_current_language();
                $multilang['languages'] = $sitepress->get_active_languages();
            } else if( cs_is_polylang_activated() ) {
                global $polylang;
                $current    = pll_current_language();
                $default    = pll_default_language();
                $current    = ( empty( $current ) ) ? $default : $current;
                $poly_langs = $polylang->model->get_languages_list();
                $languages  = array();
                foreach ( $poly_langs as $p_lang ) {
                    $languages[$p_lang->slug] = $p_lang->slug;
                }
                $multilang['default']   = $default;
                $multilang['current']   = $current;
                $multilang['languages'] = $languages;
            } else if( cs_is_qtranslate_activated() ) {
                global $q_config;
                $multilang['default']   = $q_config['default_language'];
                $multilang['current']   = $q_config['language'];
                $multilang['languages'] = array_flip( qtrans_getSortedLanguages() );
            }
        }
        $multilang = apply_filters('cs_language_defaults', $multilang );
        return ( !empty($multilang) ) ? $multilang : false;
    }
}
