<?php

     if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
     
     class WPH_Environment
        {
            
            var $wph                            =   '';
            var $functions                      =   '';
        
            var $environment_variable           =   array();
            
                                  
            function __construct()
                {
                    global $wph;

                    $this->wph          =   $wph;
                    $this->functions    =   new WPH_functions();
                    
                    $this->setup_variable();
                    
                }
            
                
            /**
            * create the environment content variable
            * 
            */
            private function setup_variable()
                {
                                        
                    $this->environment_variable['theme'] =   array(
                                                                    'folder_name'   =>  $this->wph->templates_data['main']['folder_name'],
                                                                    'mapped_name'   =>  isset($this->wph->settings['module_settings']['new_theme_path']) ?   $this->wph->settings['module_settings']['new_theme_path']    :   ''
                                                                    );
                                                                    
                    if(isset($this->wph->templates_data['child']))
                        {
                            $this->environment_variable['child_theme'] =   array(
                                                                    'folder_name'   =>  $this->wph->templates_data['child']['folder_name'],
                                                                    'mapped_name'   =>  isset($this->wph->settings['module_settings']['new_theme_child_path']) ?     $this->wph->settings['module_settings']['new_theme_child_path']  :   ''
                                                                    );   
                        }
                    
                    $themes_url     =   untrailingslashit($this->wph->templates_data['themes_url']);
                    $themes_url     =   str_replace(array("http://", "https://"), "", $themes_url);
                    
                    
                    $site_url       =   site_url();
                    $site_url       =   str_replace(array("http://", "https://"), "", $site_url);
                    
                    $themes_url     =   str_replace($site_url, "", $themes_url);
                    $themes_path    =   str_replace( '\\', '/', ABSPATH . ltrim($themes_url, '/'));
                    
                    //set the allowe paths
                    $this->environment_variable['allowed_paths']  =   apply_filters('wp-hide/environment_file/allowed_paths', array( $themes_path ));
                    
                    $this->environment_variable['cache_path']     =   str_replace( '\\', '/', WPH_CACHE_PATH);
                    
                    $this->environment_variable['wordpress_directory']            =   $this->wph->default_variables['wordpress_directory'];
                    $this->environment_variable['site_relative_path']             =   $this->wph->default_variables['site_relative_path'];   
                    
                }
                
            
            /**
            * Check if the environment file exists and include correct data
            * 
            */
            public function is_correct_environment()
                {
                    
                    $wp_upload_dir              =   wp_upload_dir();
                    $environment_variable       =   '';
                            
                    if( file_exists(  $wp_upload_dir['basedir'] . '/wph/environment.php' ) )
                        {
                            require_once( $wp_upload_dir['basedir'] . '/wph/environment.php' );
                        }
                        else
                        return FALSE;
                                            
                    //if nothing has changed exit
                    if ( $environment_variable   ==  json_encode($this->environment_variable) )
                        {
                            //clear any notices regarding this file which is not correct
                            self::delete_all_notices();
                            
                            return TRUE;
                        }
                        
                    return FALSE;
                    
                }
                 
                
            public static function delete_all_notices()
                {
                    delete_option( 'wph-process_set_static_environment_errors');    
                }
      
            
            function get_environment_content()
                {
                    
                    ob_start();
                    
                    echo "<?php ";
                    echo "if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly";
                    echo "\n";
                    echo '$environment_variable = \''. json_encode($this->environment_variable) .'\';';
                    echo " ?>";
                    
                    $file_data = ob_get_contents();
                    ob_end_clean();
                    
                    return $file_data;    
                    
                }
            
            function write_environment()
                {
                    
                    require_once ( ABSPATH . '/wp-admin/includes/file.php' );
                    
                    global $wp_filesystem;

                    if ( ! is_object ( $wp_filesystem ) ) 
                        WP_Filesystem();

                    $file_data  =   $this->get_environment_content();
                    
                    $wp_upload_dir              =   wp_upload_dir();
                    $errors         =   FALSE;
                    $error_messages  =   array();
                    
                    if ( is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() )
                        {
                            
                            $error_messages[]  =     array(
                                                            'type'      =>  'error',
                                                            'message'   =>  __('<b>WP Hide</b> - Unable to create environment static file. The system returned the following error: ', 'wp-hide-security-enhancer') . implode("," , (array)$wp_filesystem->errors->get_error_messages() )
                                                            );
                                                                                   
                            update_option( 'wph-process_set_static_environment_errors', $error_messages);
                            
                            return;   
                        }
                        
                    if ( ! is_dir( $wp_upload_dir['basedir'] . '/wph/' ) ) 
                        {
                            if  ( $wp_filesystem->mkdir( $wp_upload_dir['basedir'] . '/wph/' ) )
                                {
                                    $errors             =   TRUE;
                                    $error_messages[]   =     array(
                                                                    'type'      =>  'error',
                                                                    'message'   => __('Some of plugin options will not work correctly so where turned off: <b>Remove description header from Style file</b>, <b>Child - Remove description header from Style file</b>', 'wp-hide-security-enhancer')
                                                                    );
                                }
                        }
                        
                    if( !$errors    &&  ! $wp_filesystem->put_contents( $wp_upload_dir['basedir'] . '/wph/environment.php' , $file_data , FS_CHMOD_FILE) ) 
                        {
                            $errors             =   TRUE;
                            
                            $error_messages[]   =     array(
                                                                    'type'      =>  'error',
                                                                    'message'   => '<b>WP Hide</b> - ' . __('Unable to create environment data at ', 'wp-hide-security-enhancer') . $wp_upload_dir['basedir'] . '/wph/environment.php ' . __('Is file writable', 'wp-hide-security-enhancer') . '? ' . __('Check with folder/file permission or contact server administrator.', 'wp-hide-security-enhancer')
                                                                    );
                                     
                            $error_messages[]   =     array(
                                                                    'type'      =>  'error',
                                                                    'message'   => __('Some of plugin options will not work correctly so where turned off: <b>Remove description header from Style file</b>, <b>Child - Remove description header from Style file</b>', 'wp-hide-security-enhancer')
                                                                    );
                                 
                            //disable certain options
                            $this->settings['module_settings']['style_file_clean']          =   'no';
                            $this->settings['module_settings']['child_style_file_clean']    =   'no';
                            
                            //save the new options
                            $this->functions->update_settings( $this->settings );
                            
                            //regenerate permalinks
                            $this->wph->settings_changed();
                            
                        }    
                        
                    if  (  ! $errors )
                        {
                            self::delete_all_notices();
                        }
                        else
                        {
                            update_option( 'wph-process_set_static_environment_errors', $error_messages );
                        }
                    
                    
                }
                
        }   
            



?>