Sindbad~EG File Manager

Current Path : /var/www/html/amopropiedades.com/wp-content/plugins/realtyna-mls-sync/realtyna/Core/
Upload File :
Current File : /var/www/html/amopropiedades.com/wp-content/plugins/realtyna-mls-sync/realtyna/Core/Api.php

<?php

namespace Realtyna\Sync\Core;

/** Block direct access to file.*/ 
defined( 'ABSPATH' ) || die( 'Access Denied!' );

/**
 * Communicate with RealtyFeed API
 * 
 * @author Chris A <chris.a@realtyna.net>
 * 
 * @version 1.0
 */
class Api
{

    /** @var string API Server URL */
    const API_SERVER = 'https://idx.realtyfeed.com/';

    /**
     * Register User in RealtyFeed
     * 
     * @author Chris A <chris.a@realtyna.net>
     * 
     * @param array Needed info for Regiseter User
     * 
     * @return array 
     */
    public function register( $params )
    {

        $response = array( "status" => "ERROR" , "message" => __("Invalid Params!" , REALTYNA_MLS_SYNC_SLUG ) );

        if ( is_array( $params ) && !empty( $params ) ){

            $apiEndpoint = self::API_SERVER . 'api/create-user/';
            
            $params['second_email'] = $params['email'];
            $params['domain'] = $this->getDomain() ;

            $request = wp_remote_post( $apiEndpoint, array(
                'timeout' => 60,
                'body' => $params
            ));

            if ( !is_wp_error( $request ) ){

                $statusCode = wp_remote_retrieve_response_code( $request );

                if ($statusCode != 201) {

                    $response['message'] = __("Invalid Response!" , REALTYNA_MLS_SYNC_SLUG ) ;

                }else{

                    $response['status'] = "OK";
                    $response['message'] = array_merge( $params , json_decode( $request['body'] , true ) );

                }
        
            }else{
                $response['message'] = __("Request Error!" , REALTYNA_MLS_SYNC_SLUG ) ;
            }    

        }
        
        return $response;
    }

    /**
     * Get Providers
     * 
     * @author Chris A <chris.a@realtyna.net>
     * 
     * @param string Token
     * 
     * @return bool
     */
    public function getProviders( $token )
    {

        $response = array( "status" => "ERROR" , "message" => __("Invalid Token!" , REALTYNA_MLS_SYNC_SLUG ) );

        if ( !empty( $token ) ){

            $apiEndpoint = self::API_SERVER . 'api/providers/';
            
            $cacheNextUpdate = get_option( REALTYNA_MLS_SYNC_SLUG . "-CACHE-NEXT-UPDATE" , '' );
			
			$responseBody = '';
			
			if ( !empty( $cacheNextUpdate ) &&  time() < $cacheNextUpdate ){
				
				$responseBody = get_option( REALTYNA_MLS_SYNC_SLUG . "-PROVIDERS" , '' );
				
			}
            
            if ( empty( $responseBody ) ){

                $request = wp_remote_get( $apiEndpoint, array(
                    'timeout' => 60,
                    'headers' => array(
                        'Authorization' => 'Token ' . $token
                    )
                ));
        
                if ( !is_wp_error( $request ) ){
        
                    $statusCode = wp_remote_retrieve_response_code( $request );
        
                    if ($statusCode != 200) {
        
                        $response['message'] = __("Invalid Response!" , REALTYNA_MLS_SYNC_SLUG ) ;
        
                    }else{
        
                        $responseBody = $request['body'];

                        update_option( REALTYNA_MLS_SYNC_SLUG . "-PROVIDERS" , $responseBody );

                        $response['status'] = "OK";
                        $response['message'] = json_decode( $responseBody , true );
        
                    }
                
                }else{
                    $response['message'] = __("Invalid Request!" , REALTYNA_MLS_SYNC_SLUG ) ;
                }    
    
            }else{
                
                $response['status'] = "OK";
                $response['message'] = json_decode( $responseBody , true );

            }

    
        }
        
        return $response;

    }

    /**
     * Get Provider Mapping data from Local Json file
     * 
     * @author Chris A <chris.a@realtyna.net>
     * 
     * @param string Provider short name
     * @param string selected theme for mapping
     * 
     * @return array
     */
    private function getLocalProviderMapping( $provider, $theme )
    {
		
		$content = '';
		
		$localFile = __DIR__ . DIRECTORY_SEPARATOR . "mappings" . DIRECTORY_SEPARATOR . "{$provider}.{$theme}.json";
		
		if ( file_exists( $localFile ) ){
			
			$content = file_get_contents( $localFile );
			
		}
		
		return $content;
	}


    /**
     * Get Provider Mapping data from API
     * 
     * @author Chris A <chris.a@realtyna.net>
     * 
     * @param string Token
     * @param string Provider short name
     * @param string selected theme for mapping
     * 
     * @return array
     */
    private function getProviderMapping( $token, $provider, $theme )
    {

        $response = array( "status" => "ERROR" , "message" => __("Invalid Token!" , REALTYNA_MLS_SYNC_SLUG ) );

        if ( !empty( $token ) ){

            $apiEndpoint = self::API_SERVER . "api/mapping/{$provider}/{$theme}";
            
			$cacheNextUpdate = get_option( REALTYNA_MLS_SYNC_SLUG . "-CACHE-NEXT-UPDATE" , '' );
			
			$responseBody = $this->getLocalProviderMapping( $provider , $theme );
			
			if ( empty( $responseBody ) ){
				
				if ( !empty( $cacheNextUpdate ) &&  time() < $cacheNextUpdate ){
					
					$responseBody = get_option( REALTYNA_MLS_SYNC_SLUG . "-" . $provider . "-" . $theme , '' );
					
				}
					
			}
			
            if ( empty( $responseBody ) ){

                $request = wp_remote_get( $apiEndpoint, array(
                    'timeout' => 60,
                    'headers' => array(
                        'Authorization' => 'Token ' . $token
                    )
                ));
        
                if ( !is_wp_error( $request ) ){
        
                    $statusCode = wp_remote_retrieve_response_code( $request );
        
                    if ($statusCode != 200) {
        
                        $response['message'] = __("Invalid Response!" , REALTYNA_MLS_SYNC_SLUG ) ;
        
                    }else{

                        $responseBody = $request['body'];

                        update_option( REALTYNA_MLS_SYNC_SLUG . "-" . $provider . "-" . $theme , $responseBody );
						update_option( REALTYNA_MLS_SYNC_SLUG . "-CACHE-NEXT-UPDATE" , strtotime("+1 day") );
        
                        $response['status'] = "OK";
                        $response['message'] = $responseBody;
        
                    }
                
                }else{
                    $response['message'] = __("Invalid Request!" , REALTYNA_MLS_SYNC_SLUG ) ;
                }    
    
            }else{

                $response['status'] = "OK";
                $response['message'] = $responseBody;

            }
    
        }
        
        return $response;

    }

    /**
     * Get Mapping Structure of selected Provider
     * 
     * @author Chris A <chris.a@realtyna.net>
     * 
     * @param string Token
     * @param string Provider short name
     * @param string selected theme for mapping
     * 
     * @return string Mapping structure in Json encoded string
     */
    public function getMapping( $token, $provider, $theme )
    {

        if ( !empty( $token ) && !empty( $provider ) && !empty( $theme ) ){

            $providerMapping = $this->getProviderMapping( $token, $provider, $theme );
			
			if ( defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG && defined( 'WP_DEBUG_MLS_SYNC' ) ){
				error_log( "Mapping : " . var_export( $providerMapping , true ) );
			}
			
            if ( is_array( $providerMapping ) && isset( $providerMapping['message'] ) && ( $providerMapping['status'] == "OK"  ) )
                return $providerMapping['message'];
    
        }

        return '';

    }

    /**
     * Request For Custom Provider
     * 
     * @author Chris A <chris.a@realtyna.net>
     * 
     * @param string Token
     * @param int User id of registered User in realtyfeed
     * @param string Custom Provider Name
     * @param string Custom Provider State
     * @param string|null Domain URL
     * 
     * @return array
     */
    public function requestProvider( $token , $userId , $provider , $state , $domain = null )
    {

        $response = array( "status" => "ERROR" , "message" => __("Invalid Params!" , REALTYNA_MLS_SYNC_SLUG ) );

        if ( !empty( $token ) && !empty( $userId ) && !empty( $provider ) && !empty( $state ) ){

            $apiEndpoint = self::API_SERVER . 'api/request-provider/';

            $fields = array();
            $fields['user_id'] = $userId;
            $fields['provider'] = $provider;
            $fields['state'] = $state;
            $fields['domain'] = ( !empty( $domain ) ? $domain : $this->getDomain() );

            
            $request = wp_remote_post( $apiEndpoint, array(
                'timeout' => 60,
                'headers' => array(
                    'Authorization' => 'Token ' . $token
                ),
                'body' => $fields
            ));
    
            if ( !is_wp_error( $request ) ){
    
                $statusCode = wp_remote_retrieve_response_code( $request );
    
                if ($statusCode != 201) {
    
                    $response['message'] = __("Invalid Response!" , REALTYNA_MLS_SYNC_SLUG ) ;
    
                }else{
    
                    $responseBody = json_decode( $request['body'] , true );
                    $response['status'] = ( isset( $responseBody['message'] ) && $responseBody['message'] == 'success' ) ? "OK" : "ERROR";
                    $response['message'] = ( isset( $responseBody['message'] ) ? $responseBody['message'] : '' );
    
                }
            
            }else{
                $response['message'] = __("Invalid Request!" , REALTYNA_MLS_SYNC_SLUG ) ;
            }    
    
        }
        
        return $response;


    }

    /**
     * Get User Status
     * 
     * @author Chris A <chris.a@realtyna.net>
     * 
     * @param string Token
     * @param int Registered User ID in RealtyFeed
     * 
     * @return array
     */
    public function getStatus( $token , $userId )
    {

        $response = array( "status" => "ERROR" , "message" => __("Invalid Token!" , REALTYNA_MLS_SYNC_SLUG ) );

        if ( !empty( $token ) && !empty( $userId ) && is_numeric( $userId ) ){

            $apiEndpoint = self::API_SERVER . 'api/check-status/' . $userId ;
            
            $request = wp_remote_get( $apiEndpoint, array(
                'timeout' => 60,
                'headers' => array(
                    'Authorization' => 'Token ' . $token
                )
            ));
    
            if ( !is_wp_error( $request ) ){
    
                $statusCode = wp_remote_retrieve_response_code( $request );
    
                if ($statusCode != 200) {
    
                    $response['message'] = __("Invalid Response!" , REALTYNA_MLS_SYNC_SLUG ) ;
    
                }else{
    
                    $responseBody = json_decode( $request['body'] , true );

                    $response['message'] = $responseBody['status'];

                    if ( $responseBody['status'] == 'Active' ){

                        $response['status'] = "OK";

                    }
    
                }
            
            }else{
                $response['message'] = __("Invalid Request!" , REALTYNA_MLS_SYNC_SLUG ) ;
            }    
    
        }
        
        return $response;

    }

    /**
     * Get Chosen Provider
     * 
     * @author Chris A <chris.a@realtyna.net>
     * 
     * @param string Token
     * @param int Registered User ID in RealtyFeed
     * 
     * @return array
     */
    public function getChosenProvider( $token , $userId  )
    {

        $response = array( "status" => "ERROR" , "message" => __("Invalid Params!" , REALTYNA_MLS_SYNC_SLUG ) );

        if ( !empty( $token ) && !empty( $userId ) && is_numeric( $userId ) ){

            $apiEndpoint = self::API_SERVER . 'api/selected-provider/';
            
            $request = wp_remote_post( $apiEndpoint, array(
                'timeout' => 60,
                'headers' => array(
                    'Authorization' => 'Token ' . $token
                ),
                'body' => array( 
                    "user_id" => $userId
                )
            ));
    
            if ( !is_wp_error( $request ) ){
    
                $statusCode = wp_remote_retrieve_response_code( $request );
    
                if ($statusCode != 200) {
    
                    $response['message'] = __("Invalid Response!" , REALTYNA_MLS_SYNC_SLUG ) ;
    
                }else{
    
                    $responseBody = json_decode( $request['body'] , true );
                    $response['status'] = "OK";
                    $response['message'] = ( isset( $responseBody['message'] ) ? $responseBody['message'] : '' );
    
                }
            
            }else{
                $response['message'] = __("Invalid Request!" , REALTYNA_MLS_SYNC_SLUG ) ;
            }    
    
        }
        
        return $response;


    }

    /**
     * Generate stripe checkout on API-Side
     * 
     * @author Chris A <chris.a@realtyna.net>
     * 
     * @param string $token
     * @param int $userID
     * @param int $providerID provider id to proceed payment
     * 
     * @return array response array
     */
    public function checkout( $token , $userID , $providerID )
    {

        $response = array( "status" => "ERROR" , "message" => __("Invalid Params!" , REALTYNA_MLS_SYNC_SLUG ) );

        if ( !empty( $token ) && !empty( $userID ) && !empty( $providerID ) ){

            $apiEndpoint = self::API_SERVER . 'api/payment-checkout/';
            
            $request = wp_remote_post( $apiEndpoint, array(
                'timeout' => 60,
                'headers' => array(
                    'Authorization' => 'Token ' . $token
                ),
                'body' => array( 
                    "user_id" => $userID,
                    "provider_id" => $providerID,
                    "callback" => base64_encode( $this->getDomain() )
                )
            ));
    
            if ( !is_wp_error( $request ) ){
    
                $statusCode = wp_remote_retrieve_response_code( $request );
    
                if ($statusCode != 200) {
    
                    $response['message'] = __("Invalid Response!" , REALTYNA_MLS_SYNC_SLUG ) ;
    
                }else{
    
                    $responseBody = json_decode( $request['body'] , true );

                    if ( !empty( $responseBody['checkout_url'] ) ){

                        $response['status'] = "OK";
                        $response['message'] = $responseBody['checkout_url'];
    
                    }else{

                        $response['message'] = __("Invalid Checkout Response!" , REALTYNA_MLS_SYNC_SLUG ) ;
                        error_log("payment issue: " . var_export($responseBody , true) );
                    }
    
                }
            
            }else{
                $response['message'] = __("Invalid Request!" , REALTYNA_MLS_SYNC_SLUG ) ;
            }    
    
        }
        
        return $response;

    }

    /**
     * Get Payment Status
     * 
     * @author Chris A <chris.a@realtyna.net>
     * 
     * @param string Token
     * @param int Regietered User Id
     * 
     * @return array
     */
    public function getPayment( $token , $userId )
    {

        $response = array( "status" => "ERROR" , "message" => __("Invalid Token!" , REALTYNA_MLS_SYNC_SLUG ) );

        if ( !empty( $token ) && !empty( $userId ) && is_numeric( $userId ) ){

            $apiEndpoint = self::API_SERVER . 'api/check-payment/' . $userId ;
            
            $request = wp_remote_get( $apiEndpoint, array(
                'timeout' => 60,
                'headers' => array(
                    'Authorization' => 'Token ' . $token
                )
            ));
    
            if ( !is_wp_error( $request ) ){
    
                $statusCode = wp_remote_retrieve_response_code( $request );
    
                if ($statusCode != 200) {
    
                    $response['message'] = __("Invalid Response!" , REALTYNA_MLS_SYNC_SLUG ) ;
    
                }else{
    
                    $responseBody = json_decode( $request['response'] , true );
                    $response['status'] = "OK";
                    $response['message'] = $responseBody['message'];
    
                }
            
            }else{
                $response['message'] = __("Invalid Request!" , REALTYNA_MLS_SYNC_SLUG ) ;
            }    
    
        }
        
        return $response;

    }

    /**
     * Cancel Payment Subscriptions
     * 
     * @author Chris A <chris.a@realtyna.net>
     * 
     * @param string token
     * @param int Registered User Id in RealtyFeed
     * 
     * @return array
     */
    public function cancelPayment( $token , $userId )
    {

        $response = array( "status" => "ERROR" , "message" => __("Invalid Token!" , REALTYNA_MLS_SYNC_SLUG ) );

        if ( !empty( $token ) && !empty( $userId ) && is_numeric( $userId ) ){

            $apiEndpoint = self::API_SERVER . 'api/payment/cancel/' . $userId ;
            
            $request = wp_remote_get( $apiEndpoint, array(
                'timeout' => 60,
                'headers' => array(
                    'Authorization' => 'Token ' . $token
                )
            ));
    
            if ( !is_wp_error( $request ) ){
    
                $statusCode = wp_remote_retrieve_response_code( $request );
    
                if ($statusCode != 200) {
    
                    $response['message'] = __("Invalid Response!" , REALTYNA_MLS_SYNC_SLUG ) ;
    
                }else{
    
                    $responseBody = json_decode( $request['body'] , true );
                    $response['status'] = "OK";
                    $response['message'] = ( $responseBody['message'] ) ? $responseBody['message'] : $responseBody ;
    
                }
            
            }else{
                $response['message'] = __("Invalid Request!" , REALTYNA_MLS_SYNC_SLUG ) ;
            }    
    
        }
        
        return $response;

    }

    /**
     * Get Current Domain URL
     * 
     * @author Chris A <chris.a@realtyna.net>
     * 
     * @return string
     */
    private function getDomain()
    {

        if ( function_exists('site_url') ){
            return site_url();
        }

        return isset( $_SERVER['HTTP_HOST'] ) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];

    }

}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists