Sindbad~EG File Manager
<?php
namespace RealPress\Helpers;
use RealPress\Helpers\Translation\PolyLang;
use RealPress\Helpers\Translation\WPML;
/**
* Class Settings
* @package RealPress\Helpers
*/
class Settings {
/**
* Get all options
*
* @return false|mixed|void|null
*/
public static function get_all_settings( $lang = '' ) {
if ( PolyLang::is_active() ) {
$current_lang = pll_current_language();
if ( ! empty( $lang ) ) {
return self::get_pll_setting( $lang );
} elseif ( $current_lang && pll_default_language() !== $current_lang ) {
return self::get_pll_setting( $current_lang );
} else {
return self::get_settings();
}
}
if ( WPML::is_active() ) {
$current_lang = WPML::get_current_language();
$default_lang = WPML::get_default_language();
if ( ! empty( $lang ) ) {
return self::get_wpml_setting( $lang );
} elseif ( $current_lang && $default_lang !== $current_lang ) {
return self::get_wpml_setting( $current_lang );
} else {
return self::get_settings();
}
}
return self::get_settings();
}
/**
* @return array|null
*/
public static function get_settings() {
static $settings = null;
if ( null === $settings ) {
$settings = get_option( self::get_option_key() );
if ( empty( $settings ) ) {
$settings = self::get_default_data();
} else { // Handle when add key, remove key or change key settings
//If key exist in config, not in settings, add key into key into settings
$settings = wp_parse_args(
$settings,
self::get_default_data()
);
//If key exist in settings, not in config, remove key in settings
$diff_key = array_diff_key( $settings, self::get_default_data() );
if ( ! empty( $diff_key ) ) {
foreach ( $diff_key as $key => $value ) {
unset( $settings[ $key ] );
}
}
}
}
return $settings;
}
/**
* @param $lang
*
* @return array
*/
public static function get_wpml_setting( $lang = '' ) {
static $wpml_settings = null;
if ( empty( $lang ) ) {
$lang = WPML::get_current_language();
}
if ( null === $wpml_settings || ! isset( $wpml_settings[ $lang ] ) ) {
$wpml_settings[ $lang ] = get_option( self::get_option_key( $lang ) );
if ( empty( $wpml_settings[ $lang ] ) ) {
$wpml_settings[ $lang ] = self::get_default_data();
} else {
$wpml_settings[ $lang ] = wp_parse_args(
$wpml_settings[ $lang ],
self::get_default_data()
);
//If key exist in settings, not in config, remove key in settings
$diff_key = array_diff_key( $wpml_settings[ $lang ], self::get_default_data() );
if ( ! empty( $diff_key ) ) {
foreach ( $diff_key as $key => $value ) {
unset( $wpml_settings[ $lang ][ $key ] );
}
}
}
}
return $wpml_settings[ $lang ];
}
/**
* @return array
*/
public static function get_pll_setting( $lang = '' ) {
static $pll_settings = null;
if ( empty( $lang ) ) {
$lang = pll_current_language();
}
if ( null === $pll_settings || ! isset( $pll_settings[ $lang ] ) ) {
$pll_settings[ $lang ] = get_option( self::get_option_key( $lang ) );
if ( empty( $pll_settings[ $lang ] ) ) {
$pll_settings[ $lang ] = self::get_default_data();
} else {
$pll_settings[ $lang ] = wp_parse_args(
$pll_settings[ $lang ],
self::get_default_data()
);
//If key exist in settings, not in config, remove key in settings
$diff_key = array_diff_key( $pll_settings[ $lang ], self::get_default_data() );
if ( ! empty( $diff_key ) ) {
foreach ( $diff_key as $key => $value ) {
unset( $pll_settings[ $lang ][ $key ] );
}
}
}
}
return $pll_settings[ $lang ];
}
/**
* @return array
*/
public static function get_default_data() {
$config = Config::instance()->get( 'realpress-setting' );
return Config::instance()->get_default_data( $config );
}
/**
* @param string $group_key
*
* @return array|false|\stdClass|string
*/
public static function get_setting_detail( string $group_key = '', $lang = '' ) {
global $rp_lang;
if ( ! empty( $rp_lang ) ) {
$lang = $rp_lang;
}
return self::get_all_settings( $lang )[ $group_key ] ?? '';
}
/**
* @return string
*/
public static function get_property_slug(): string {
$settings = self::get_all_settings();
if ( empty( $settings->group->url_slug->fields->property_slug->value ) ) {
return REALPRESS_PROPERTY_CPT;
}
return $settings->group->url_slug->fields->property_slug->value;
}
/**
* @return array|false|\stdClass|string
*/
public static function get_agent_slug() {
$agent_slug = self::get_setting_detail( 'group:slug:fields:agent' );
if ( PolyLang::is_active() ) {
$agent_slug = self::get_setting_detail( 'group:slug:fields:agent', pll_default_language() );
}
if ( WPML::is_active() ) {
$agent_slug = self::get_setting_detail( 'group:slug:fields:agent', WPML::get_default_language() );
}
if ( $agent_slug === '' ) {
$agent_slug = REALPRESS_AGENT_ROLE;
}
return $agent_slug;
}
/**
* @return array|false|\stdClass|string
*/
public static function get_advanced_search() {
$advanced_search = self::get_setting_detail( 'group:advanced_search:fields:advanced_search' );
unset( $advanced_search['order'] );
return $advanced_search;
}
public static function get_property_per_page() {
$property_per_page = self::get_setting_detail( 'group:property:fields:property_per_page' );
if ( empty( $property_per_page ) ) {
$property_per_page = 10;
}
return apply_filters( 'realpress/filter/property_per_page', $property_per_page );
}
/**
* @return array|false|int|\stdClass|string
*/
public static function get_search_suggest_property_number() {
$property_per_page = self::get_setting_detail( 'group:advanced_search:fields:search_suggest_property_number' );
if ( empty( $property_per_page ) ) {
$property_per_page = 10;
}
return $property_per_page;
}
/**
* @return array|false|int|\stdClass|string
*/
public static function get_agent_per_page() {
$agent_per_page = self::get_setting_detail( 'group:agent:fields:agent_per_page' );
if ( empty( $agent_per_page ) ) {
$agent_per_page = 10;
}
return $agent_per_page;
}
/**
* @param $key
*
* @return array|\stdClass|string
*/
public static function get_page_id( $key ) {
$page_id = Settings::get_setting_detail( 'group:page:fields:' . $key );
if ( empty( $page_id ) ) {
return '';
}
if ( get_post_status( $page_id ) !== 'publish' ) {
return '';
}
return $page_id;
}
/**
* @param $key
* @param $value
*
* @return void
*/
public static function update_field( $key, $value ) {
$settings = self::get_all_settings();
if ( ! isset( $settings[ $key ] ) ) {
return;
}
$settings[ $key ] = $value;
update_option( Settings::get_option_key(), $settings );
}
/**
* @return array
*/
public static function get_all_static_pages() {
$settings = self::get_all_settings();
$fields = Config::instance()->get( 'realpress-setting:group:page:fields' );
$fields = array_keys( $fields );
$page_ids = array();
foreach ( $fields as $field ) {
if ( ! empty( $settings[ 'group:page:fields:' . $field ] ) ) {
$page_ids[] = $settings[ 'group:page:fields:' . $field ];
}
}
return $page_ids;
}
public static function get_pagination_type() {
$pagination_type = self::get_setting_detail( 'group:advanced:fields:pagination_type' );
//For demo
if ( isset( $_GET['view'] ) && ( $_GET['view'] === 'loadmore' || $_GET['view'] === 'infinite_scroll' ) ) {
return $_GET['view'];
}
return apply_filters( 'realpress/filter/pagination_type', $pagination_type );
}
/**
* @return mixed|null
*/
public static function get_option_key( $lang = '' ) {
$option_key = REALPRESS_OPTION_KEY;
if ( empty( $lang ) ) {
if ( PolyLang::is_active() ) {
$option_key .= '_' . pll_current_language();
}
if ( WPML::is_active() ) {
$option_key .= '_' . WPML::get_current_language();
}
} else {
$option_key .= '_' . $lang;
}
return apply_filters( 'realpress/filter/option_key', $option_key );
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists