getActifendInfo(); return $info->asset_id; } /** * getActifendInfo * * Get the user asset id from the database. * @return object . */ public function getActifendInfo() { try { global $wpdb; $actifend_table_name = $wpdb->prefix . ACTIFEND_TABLE_NAME; $actifend_results = $wpdb->get_row("SELECT * FROM $actifend_table_name"); return $actifend_results; } catch ( Exception $e ) { debug_log( $e->getMessage() ); throw new Exception( 'Exception 1x02: ' . $e->getMessage() ); } } /** * actifend_postViaCurl * * This function is used to post the data to api endpoints. * * @param string $actifend_url url of the API. * @param string $actifend_params json string which send by curl. * @param string $method default value post which specify the method used by curl. * @return string json response string return */ public function actifend_postViaCurl($actifend_url, $actifend_params, $method = "POST", $custom_headers = array()) { try { $heads = array('ACTIFEND_PLUGIN_VERSION' => ACTIFEND_PLUGIN_VERSION, 'ACTIFEND_ASSET_NAME' => get_bloginfo( 'name' )); if ( !empty( $custom_headers ) ) { $heads = array_merge( $heads, $custom_headers ); } $response = wp_remote_request( $actifend_url, array( 'headers' => $heads, 'timeout' => ACTIFEND_CURL_TIMEOUT, 'method' => $method, 'body' => $actifend_params) ); if ( is_array( $response ) && ! is_wp_error( $response ) ) { $return = array(); $return['headers'] = wp_remote_retrieve_headers($response); $return['output'] = wp_remote_retrieve_body($response); return json_encode($return); } else { $error = array(); $error['ERROR_MSG'] = wp_remote_retrieve_response_message($response); $error['ERROR_CODE'] = wp_remote_retrieve_response_code($response); $error['url'] = $actifend_url; $return = array(); $return['STATUS_ID'] = '222'; $return['STATUS_MSG'] = 'REMOTE_REQUEST_ERROR'; $return['RESPONSE'] = $error; // echo "
";print_r($error);die;
                return json_encode( $return );
            }

        } catch ( Exception $e ) {
            throw new Exception( 'Exception 1x05: ' . $e->getMessage() );
        }
    }

    /**
     * actifend_validIP
     *
     * This function is used to validate the IP address or range of ip address.
     * @param string $ip ip address string
     * @return boolean
     */
    public function actifend_validIP( $ip ) {
        if (preg_match("^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}^", $ip))
            return true;
        else
            return false;
    }

    /**
     * is_dir_empty
     *
     * This function is used to check if a folder is empty
     * @param folder name to check if empty
     * @return boolean
     */
    public function is_dir_empty( $dir ) {
        if ( !is_readable( $dir )) return NULL;
        $handle = opendir( $dir );
        while ( false !== ( $entry = readdir( $handle )) ) {
            if ( $entry != '.' && $entry != '..' ) {
            return false;
            }
        }
        return true;
    }

    /**
     * actifend_rrmdir
     *
     * This function is used to remove the directory that is not empty.
     *
     * @param string $path path of directory
     *
     */
    public function actifend_rrmdir( $path ) {
        // should not be used for wp-content folder
        try {
            global $wp_filesystem;
            // if ( $wp_filesystem->delete( $path, true ) )
            //     return true;
            // else
            //     return false;

            $files = list_files( $path );
            foreach ( $files as $file ) {
                $tmpdir = trailingslashit( $wp_filesystem->wp_content_dir() )
                          . 'actifend_tmp';
                if ( strstr( $file, UPLOADS_DIR )
                    || strstr( $file, $tmpdir ) ) continue;

                if ( is_file( $file ) ) {
                    $wp_filesystem->delete( $file );
                }
            }

           // Open the source directory to read in files
            // $i = new DirectoryIterator($path);
            // foreach ($i as $f) {
            //     if ($f->isFile()) {
            //         @unlink($f->getRealPath());
            //     } elseif (!$f->isDot() && $f->isDir()) {
            //         $tmpdir = trailingslashit(WP_CONTENT_DIR) . 'actifend_tmp';
            //         if (($f == UPLOADS_DIR) || ($f == $tmpdir)) continue;
            //         $this->actifend_rrmdir($f->getRealPath());
            //     }
            // }
            return true;
        } catch ( Exception $e ) {
            debug_log( $e->getMessage() );
            throw new Exception( 'Exception 1x16: ' . $e->getMessage() );
        }
    }

    /**
     * reset_actifend_crons
     * Disable / Enable crons that are accessing remote api
     * so they do not interfere with the running process
     * @param activate to be true or false
     */
    public function reset_actifend_crons( $activate ) {
        if ( $activate == 'remove' ) {
            remove_action( 'init', 'Actifend::enable_actifend_crons' );
            remove_filter( 'cron_schedules', 'Actifend::actifend_crons' );
            Actifend::clear_actifend_crons();
            debug_log( 'Actifend crons cleared!' );
        }

        if ( $activate == 'add' ) {
            add_action( 'init', 'Actifend::enable_actifend_crons' );
            Actifend::enable_actifend_crons();
            add_filter( 'cron_schedules', 'Actifend::actifend_crons' );
            debug_log( 'Actifend crons re-initiated!' );
        }
    }

    /**
     * pclZipData
     * This function is used to zip directory content using pcl zip
     * This will create a .zip file
     * @param string source dirname
     * @param string destination zip file
     * @return boolean
     * added in v1.3.7
     */
    public function pclZipData( $source, $dest ) {
        try{
			if ( ! class_exists( 'PclZip' ) ) {
                require( trailingslashit( ADMIN_DIR ) . trailingslashit( 'includes' ) . 'class-pclzip.php' );
			}

            $v_remove = $source;
            // To support windows and the C: root you need to add the
            // following 3 lines, should be ignored on linux
            // http://www.phpconcept.net/pclzip/faq#faq05
            if ( strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN' ) {
                if ( substr($source, 1, 1 ) == ':' ) {
                    $v_remove = substr( $source, 2 );
                }
            }

            $zip = new PclZip( $dest );
            if ( $zip->create( $source, PCLZIP_OPT_REMOVE_PATH, $v_remove ) == 0 ) {
                return false;
            }
            return true;
        }catch ( Exception $e ) {
            debug_log( $e->getMessage() );
            throw new Exception( 'Exception 1x51: ' . $e->getMessage() );
        }
    }

    /**
     * pclExtractZipData
     * This function is used to zip directory content using pcl zip
     * This will create a .zip file
     * @param string source dirname
     * @param string destination zip file
     * @return boolean
     * added in v1.3.7
     */
    public function pclExtractZipData( $source, $dest ) {
        try{
			if ( ! class_exists( 'PclZip' ) ) {
                require( trailingslashit( ABSPATH ) . 'wp-admin/includes/class-pclzip.php' );
			}

            $zip = new PclZip( $source );
            if ($zip->extract( PCLZIP_OPT_PATH, $dest, PCLZIP_OPT_STOP_ON_ERROR ) == 0 ) {
                debug_log( "$source extract to $dest failed." );
                return false;
            }
            debug_log( "$source extracted to $dest." );
            return true;
        }catch ( Exception $e ) {
            debug_log( $e->getMessage() );
            throw new Exception( 'Exception 1x52: ' . $e->getMessage() );
        }
    }

    /**
     * zipData
     *
     * This function is used to zip directory content.
     *
     * @param string $source sources directory.
     * @param string $destination destination directoy path where you want to create the zip file.
     * @return boolean
     */
    public function zipData( $source, $destination ) {
        try {
            if ( extension_loaded( 'zip' ) ) {
                if ( file_exists( $source ) ) {
                    $zip = new ZipArchive();
                    if ( $zip->open( $destination, ZIPARCHIVE::CREATE ) ) {
                        $source = realpath( $source );
                        if (is_dir( $source )) {
                            $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $source ), RecursiveIteratorIterator::SELF_FIRST );
                            foreach ( $files as $file ) {
                                $file = realpath( $file );
                                if ( is_dir( $file ) ) {
                                    $zip->addEmptyDir( str_replace( trailingslashit( $source ), '', trailingslashit( $file ) ) );
                                } elseif ( is_file( $file ) ) {
                                    $zip->addFromString( str_replace( trailingslashit( $source ), '', $file ), file_get_contents( $file ) );
                                }
                            }
                        } elseif ( is_file( $source )) {
                            $zip->addFromString( basename( $source ), file_get_contents( $source ));
                        }
                    }
                    return $zip->close();
                }
            }
            return false;
        } catch ( Exception $e ) {
            debug_log( $e->getMessage() );
            throw new Exception( 'Exception 1x36: ' . $e->getMessage());
        }
    }

    /**
     * actifend_unzip
     *
     * Function unzip the zipped file and create the directory.
     *
     * @param string $source_path zip file path
     * @param string $destination_path directory where zip file extract.
     * @return boolean
     */
    public function actifend_unzip( $source_path, $destination_path ) {
        try {
            $zip = new ZipArchive;
            $res = $zip->open( $source_path );
            mkdir( $destination_path );
            chmod( $destination_path, 0777 );
            if ( $res == true ) {
                $zip->extractTo( $destination_path );
                $zip->close();
                $this->chmod_r( $destination_path );
                debug_log( "$source_path extracted to $destination_path" );
                return true;
            }
        } catch ( Exception $e ) {
            debug_log( $e->getMessage() );
            throw new Exception( 'Exception 1x40: ' . $e->getMessage() );
        }
    }

    /**
     * chmod_r
     *
     * This function is used to change the permission mode of the files in directory.
     * @param string $path directory which directory structure
     *
     */
    public function chmod_r( $path ) {
        try{
            $dir = new DirectoryIterator( $path );
            foreach ( $dir as $item ) {
                if ( $item->isDot() ) continue;
                if ( $item->isDir() ) {
                    @chmod( $item->getPathname(), 0775 );
                    $this->chmod_r( $item->getPathname() );
                }elseif ( !chmod( $item->getPathname(), 0775 ) ) {
                    debug_log( "Could NOT do chmod for " . $item->getPathname() );
                    return false;
                }
            }
            return true;
        } catch ( Exception $e ) {
            debug_log( $e->getMessage() );
            throw new Exception( 'Exception 1x41: ' .$e->getMessage() );
        }
    }

    /**
     * getViaCurl
     *
     * This function is used get the data from API endpoint.
     *
     * @param string $uri API enpoint URL
     * @param string $asset_id user asset id
     * @param string $end_point select the endpiont.
     * @return string $response response of the curl resquest.
     */
    public function getViaCurl( $uri, $asset_id, $end_point, $headers=array() ) {
        $url = $uri . $asset_id . "/" . $end_point;
        $args = array( 'timeout' => ACTIFEND_CURL_TIMEOUT );
        $vers = array(
            'ACTIFEND_PLUGIN_VERSION' => ACTIFEND_PLUGIN_VERSION,
            'ACTIFEND_ASSET_NAME'     => get_bloginfo( 'name' )
        );

        $headers = array_merge( $vers, $headers );
        $heads = array( 'headers' => $headers );
        $args = array_merge( $args, $heads );
        $response = wp_remote_get($url, $args);
        if ( is_array( $response ) && ! is_wp_error( $response ) ) {
            return json_decode( $response['body'], true );
        } else {
            return $response;
        }
    }

    /**
     * actifend_validEmail
     *
     * Function validate the email id used in plugin registration.
     *
     * @param string $actifend_email  registration email id
     * @return  boolean
     */
    public function actifend_validEmail( $actifend_email ) {
        $email = $actifend_email;
        $email = filter_var( $email, FILTER_SANITIZE_EMAIL );
        // Validate e-mail
        // 9/5/2017 v1.4.6.4 - added domain check against MX records
        if ( !filter_var( $email, FILTER_VALIDATE_EMAIL ) === false ) {
            list( $user, $domain ) = explode('@', $email );
            return checkdnsrr( $domain, 'MX' );
        } else {
            return false;
        }
    }

    /**
     * actifend_rrmdir_wp_content
     *
     * Function remove the wp-content directory content except wp_backup directory from wp-content directory.
     *
     * @param string $actifend_email  registration email id
     * @return  boolean
     */
    public function actifend_rrmdir_wp_content( $path, $wpcontent2skip=array() ) {
        try {
            global $wp_filesystem;
            $i = new DirectoryIterator( $path );
            // $wpcontent2skip = array('uploads', 'actifend_tmp', 'wflogs');
            foreach ( $i as $f ) {
                $backup_dir = $f->getRealPath();
                if ( strcmp( $backup_dir, BACKUP_DIR ) !== 0 ) {
                    @$ext = pathinfo( $f, PATHINFO_EXTENSION );
                    if ( $f->isFile() && $ext != 'log' ) {
                        // delete the real folder / file
                        $wp_filesystem->delete( $f->getRealPath() );
                    } elseif ( !$f->isDot() && $f->isDir() ) {
                        if ( !in_array( $f, $wpcontent2skip ) ) {
                            $this->actifend_rrmdir_wp_content( $f->getRealPath() );
                        }
                    }
                }
            }
            // debug_log($path . " folder deleted recursively!");
            return true;
        } catch ( Exception $e ) {
            debug_log( $e->getMessage() );
            throw new Exception( 'Exception 1x45: ' .$e->getMessage() );
        }
    }

    /**
     * url_origin
     *
     * Function used to get exact origin url of the page accessed.
     *
     * @param string $s $_SERVER server poperties.
     * @param string $use_forwarded_host
     * @return  string return origin url.
     */
    private function url_origin( $s, $use_forwarded_host = false ) {
        $ssl = ( !empty( $s['HTTPS'] ) && $s['HTTPS'] == 'on' );
        $sp = strtolower( $s['SERVER_PROTOCOL'] );
        $protocol = substr( $sp, 0, strpos($sp, '/') ) . ( ( $ssl ) ? 's' : '' );
        $port = $s['SERVER_PORT'];
        $port = ( !$ssl && $port == '80' || $ssl && $port == '443' ) ? '' : ':' . $port;
        $host = ( $use_forwarded_host && isset($s['HTTP_X_FORWARDED_HOST']) ) ? $s['HTTP_X_FORWARDED_HOST'] : ( isset($s['HTTP_HOST']) ? $s['HTTP_HOST'] : null );
        $host = isset( $host ) ? $host : $s['SERVER_NAME'] . $port;
        return $protocol . '://' . $host;
    }

    /**
     * full_url
     *
     * Function provide the full origin url.
     *
     * @param string $s $_SERVER server poperties.
     * @param string $use_forwarded_host by defaul false.
     * @return  string return origin url.
     */
    public function full_url( $s, $use_forwarded_host = false ) {
        return $this->url_origin( $s, $use_forwarded_host ) . $s['REQUEST_URI'];
    }


    public function actifend_isValidAssetId( $asset_id, $response_code ) {
        $asset_id = trim( $asset_id );
        $response_code = trim( $response_code );
        if ( strlen( $asset_id ) <= 12 && ctype_alnum( $asset_id ) && $response_code == '2000' ) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * actifend_pluginInstallation_log
     *
     * Function send the detail of intalled theme  and plugin  when plugin register
     */
    public function actifend_pluginInstallation_log() {
        try {
            Actifend::actifend_update_check();
            $asset_id = '';
            $result   = $this->getActifendInfo();
            $path = plugin_dir_path( __FILE__ );

            $reportObj = new report;
            $plugin_install_status = $reportObj->get_status();
            $flag                  = $plugin_install_status['status'];

            if ( $flag == '0' ) {
                if ( isset( $result->asset_id ) && !empty( $result->asset_id ) ) {
                    $asset_id          = $result->asset_id;
                    $default_end_point = $result->default_end_point;
                    $size_of_response  = 0;
                    if ( count($_POST) > 0 ) {
                        $size_of_response = strlen( implode( " ", $_POST ) );
                    }
                    $installArray      = array();
                    $installed_plugins = array();
                    $count             = 1;
                    if ( !function_exists( 'get_plugins' ) ) {
                        require_once( trailingslashit( ADMIN_DIR ) . 'includes/plugin.php' );
                    }
                    $all_plugins = get_plugins();
                    foreach ( $all_plugins as $installed_plugins ) {
                        $installArray[] = array(
                                                "name" => @$installed_plugins['Name'],
                                                "version" => @$installed_plugins['Version']
                                                );
                    }

                    $insatlled_plugin_info = array();
                    $insatlled_plugin_info['admin_email'] = get_bloginfo( 'admin_email' );
                    $insatlled_plugin_info['wp_version'] = get_bloginfo( 'version' );
                    $insatlled_plugin_info['installed_plugins'] = $this->actifendPluginsLatestVersion();
                    $insatlled_plugin_info['installed_themes'] = $this->actifendThemesLatestVersion();

                    $final_end_point = ACTIFEND_ASSETS_END_POINT . $asset_id . "/wpinfo";
                    $actifend_json   = json_encode( $insatlled_plugin_info );
                    $res             = $this->actifend_postViaCurl( $final_end_point, $actifend_json, "PATCH" );
                    $res_json        = json_decode( $res );

                    if ( empty( $res_json ) || !isset( $res_json->headers ) ) {
                        if ( ACTIFEND_DEBUG_MODE_ON ) {
                            $res = "EXCEPTION: While opening " . $final_end_point . "
Response: = " . json_encode($res_json); } else { $res = "EXCEPTION: While opening " . $final_end_point; } } else { $res = "ASSET ID: " . $asset_id; global $wpdb; $actifend_update_table = $wpdb->prefix . ACTIFEND_TABLE_VERSION; // $update_query_version = " // UPDATE `" . $actifend_update_table . "` SET `status`='1' WHERE `status`='0';"; // if (!function_exists('dbDelta')) { // require_once(trailingslashit( ADMIN_DIR ) . 'includes/upgrade.php'); // } // dbDelta($update_query_version); $wpdb->update($actifend_update_table, array( 'status' => '1' ), array( 'status' => '0' ) ); $actifend_update_theme_info = $wpdb->prefix . ACTIFEND_THEMES_TABLE; // $update_query = " // UPDATE `" . $actifend_update_theme_info . "` SET `status`='1' WHERE `status`='0';"; // dbDelta($update_query); $wpdb->update($actifend_update_theme_info, array( 'status' => '1' ), array( 'status' => '0' ) ); } // echo "\r\n" . ''; // echo "\r\n"; } } } catch ( Exception $e ) { debug_log( $e->getMessage() ); throw new Exception('Exception 1x24: ' . $e->getMessage()); } } /** * actifendPluginsLatestVersion * * Function is check the latest update available for the plugin. * @return array $plugin_deatil return the plugins with latest available update. */ private function actifendPluginsLatestVersion() { try { $pluin_detail = array(); if ( !function_exists( 'get_plugins' ) ) { require_once( trailingslashit( ADMIN_DIR ) . 'includes/plugin.php' ); } $all_plugins = get_plugins(); if (!function_exists( 'wp_update_plugins' )) { require_once( trailingslashit( INCLUDES_DIR ) . 'update.php' ); } // This will set the site transient update_plugins wp_update_plugins(); $update_plugins = get_site_transient( 'update_plugins' ); $update_response = $update_plugins->response; foreach ( $update_plugins->checked as $key => $value ) { $new_version = $value; if ( !empty( $update_response ) && isset( $update_response[$key] ) ) { $new_version = $update_response[$key]->new_version; } $plugin_detail[] = array( 'name' => $all_plugins[$key]['Name'], 'version' => $all_plugins[$key]['Version'], 'latest' => $new_version ); } if ( !empty( $plugin_detail ) ) { return $plugin_detail; } else { return; } } catch ( Exception $e ) { throw new Exception( 'Exception 1x28: ' . $e->getMessage() ); } } /** * actifendThemesLatestVersion * * Function is check the latest update available for the themes. * @return array $themeArray return the themes with latest available updates. */ private function actifendThemesLatestVersion() { try { if ( !function_exists( 'wp_update_themes' ) ) { require_once( trailingslashit( ADMIN_DIR ) . 'includes/theme.php' ); } wp_update_themes(); // Check for Theme updates $update_themes = get_site_transient( 'update_themes' ); $theme_update_avail = $update_themes->response; $themes = wp_get_themes(); $themeArray = array(); foreach ( $themes as $name => $theme ) { $new_verison = $theme->get('Version'); if ( !empty( $theme_update_avail[$name] ) && isset( $theme_update_avail[$name] ) ) { $new_verison = $theme_update_avail[$name]['new_version']; } $themeArray[] = array( 'name' => $theme->get('Name'), 'version' => $theme->get('Version'), 'latest' => $new_verison ); } if ( !empty( $themeArray ) ) { return $themeArray; } else { return; } } catch ( Exception $e ) { throw new Exception( 'Exception 1x29: ' . $e->getMessage() ); } } public static function initFileSystem() { // check if file system permissions are there for the user global $wp_filesystem; $url = admin_url( 'admin.php' ) . '?page=get_actifend_email'; $credentials = request_filesystem_credentials( wp_nonce_url( $url ) ); WP_Filesystem( $credentials ); if ( $wp_filesystem->errors->get_error_code() ) { foreach ( $wp_filesystem->errors->get_error_messages() as $message ) debug_log( $message ); exit; } } /** * check_file privileges * Check file privileges so restore can happen properly * @param array of files & folders to check * @return sets the option FilePrivilegesInsufficient value to 1 if * privileges are insufficient */ public function check_file_privileges() { $this->initFileSystem(); global $wp_filesystem; $fileList = array( trailingslashit( $wp_filesystem->abspath() ) . 'wp-admin', trailingslashit( $wp_filesystem->abspath() ) . 'wp-includes', $wp_filesystem->wp_content_dir(), $wp_filesystem->wp_plugins_dir(), $wp_filesystem->wp_themes_dir() ); // By default assumption is that all folders are not writeable add_option( 'FilePrivilegesInsufficient', 1 ); foreach ( $fileList as $value ) { if ( is_link( $value ) ) $dirVal = readlink( $value ); else $dirVal = $value; if ( ! @is_writable( $dirVal ) ) { debug_log( "$dirVal is not writeable!" ); update_option( 'FilePrivilegesInsufficient', 1 ); return 1; } } return 0; } /** * get_asset_status() * Gets the status of the asset on the app * @param string $actifend_url * @param string $actifend_h1 * @param string $actifend_h2 * @param string $actifend_fqdn * @return string $return */ public function get_asset_status( $actifend_fqdn, $iso ) { try { $utilObj = new Utility; $actifend_timestamp = date( 'Y-m-d' ); $actifend_asset_name = get_bloginfo( 'name' ); $actifend_req = $actifend_asset_name . $actifend_timestamp . 'wordpress' . ACTIFEND_SALT2; $actifend_reqhash = hash_hmac('sha512', utf8_encode($actifend_req), utf8_encode(ACTIFEND_SALT1)); $custom_headers = array('actifend_client_id' => ACTIFEND_SALT2, 'ACTIFEND_PLUGIN_VERSION' => ACTIFEND_PLUGIN_VERSION, 'ACTIFEND_NAME' => $actifend_asset_name, 'actifend_signature' => $actifend_reqhash); $actifend_params = array('ACTIFEND_FQDN' => $actifend_fqdn, 'ACTIFEND_NAME' => $actifend_asset_name, 'ACTIFEND_EMAIL' => $iso); $response = $utilObj->actifend_postViaCurl(ACTIFEND_REGISTER_END_POINT, $actifend_params, "GET", $custom_headers); $RESULT = json_decode( $response ); $OUT = @json_decode( $RESULT->output ); if (!empty($OUT)) { if ( $OUT->ResponseCode == '2000' && $OUT->Message == 'success' ) { // It create the backup of the files of the wordpress// $status = $OUT->Result[0]; $asset_id = $OUT->Result[1]; update_option( 'mapp_activated', ( strcmp( strtolower( $status ), 'false') === 0 ) ? 1 : 0 ); } } debug_log("get_asset_status executed!"); } catch ( Exception $e ) { debug_log( $e->getMessage() ); return $e->getMessage(); } } /** * get_subscription_status() * Gets the subscription status of the asset * @param string $actifend_url * @param string $actifend_h1 * @param string $actifend_h2 * @param string $actifend_fqdn * @return string $return */ public static function get_subscription_status() { try { $utilObj = new Utility; $asset_info = $utilObj->getActifendInfo(); $asset_id = $asset_info->asset_id; $actifend_timestamp = date( 'Y-m-d' ); $actifend_asset_name = get_bloginfo( 'name' ); $actifend_req = $actifend_asset_name . $actifend_timestamp . 'wordpress' . ACTIFEND_SALT2; $actifend_reqhash = hash_hmac('sha512', utf8_encode($actifend_req), utf8_encode(ACTIFEND_SALT1)); $custom_headers = array('actifend_client_id' => ACTIFEND_SALT2, 'actifend_signature' => $actifend_reqhash, 'ACTIFEND_PLUGIN_VERSION' => ACTIFEND_PLUGIN_VERSION, 'ACTIFEND_NAME' => $actifend_asset_name); $response = $utilObj->getViaCurl(ACTIFEND_ASSETS_END_POINT, $asset_id, 'wpsubsinfo', $custom_headers); if ( isset( $response ) && !empty( $response ) && array_key_exists( 'ResponseCode', $response ) && !is_wp_error( $response ) ) { if (($response['ResponseCode'] == '2000') && ($response['Message'] == 'success')) { update_option("actifend_usage_category", $response['Result']['category']); // $subs_valid_till = substr($response['Result']['valid_till'], 5); $subs_plan = $response['Result']['subscribed_plan']; // update_option("actifend_subs_validity", $subs_valid_till); @$current_plan = get_option( 'actifend_subs_plan' ); update_option( 'actifend_subs_plan', $subs_plan ); update_option( 'actifend_plan_changed', ( $current_plan != $subs_plan ) ? true : false ); return $response['Result']; } else { @debug_log( 'Response is ' . $response ); return false; } } else { debug_log( 'Response is invalid.' ); return false; } debug_log( 'get_subscription_status executed!' ); } catch ( Exception $e ) { debug_log( $e->getMessage() ); return $e->getMessage(); } } /** * get_size_of_folder * gets size of the folder including files and sub-folders in it * @param $folder name of the folder (with path) * @return size of folder (including files and folders inside) in bytes */ public static function get_size_of_folder( $folder ) { if ( ! empty( $folder ) ) { $dir = new RecursiveDirectoryIterator( $folder, RecursiveDirectoryIterator::FOLLOW_SYMLINKS ); $iter = new RecursiveIteratorIterator( $dir, RecursiveIteratorIterator::SELF_FIRST, RecursiveIteratorIterator::CATCH_GET_CHILD ); $result = 0; while ( $iter->valid() ) { if ( !$iter->isDot() ) { $result += filesize( $iter->key() ); } $iter->next(); } return $result; } else { debug_log( 'No folder given to get size of...' ); return false; } } public static function update_assetid( $actifend_fqdn, $iso ) { try { $status = get_asset_status( $actifend_fqdn, $iso ); $asset_id = $status[1]; // update the database global $wpdb; $last_checked = date( 'Y-m-d H:i:s' ); $actifend_table_name = $wpdb->prefix . ACTIFEND_TABLE_NAME; $res = $wpdb->update($actifend_table_name, array("asset_id" => $asset_id, "last_checked" => $last_checked), array("actifend_email" => $iso)); if ( false === $res ) { debug_log( 'DB record not updated with email.' ); return false; } return true; } catch ( Exception $e ) { debug_log( $e->getMessage() ); return $e->getMessage(); } } // Checks if a variable is of type associated array public static function is_assoc( $var ) { return is_array( $var ) && array_diff_key( $var, array_keys( array_keys( $var ) ) ); } /** * Generate a 403 response for a request * * @since 1.5.3 */ public static function generate_403() { header('HTTP/1.1 403 Forbidden'); header('Status: 403 Forbidden'); header('Connection: Close'); debug_log("403 generated."); exit; } // disabling the ability to call the xmlrpc pinback methods public static function afend_remove_xmlrpc_pingback( $methods ) { // unset( $methods['system.multicall'] ); unset( $methods['pingback.ping'] ); unset( $methods['pingback.extensions.getPingbacks'] ); return $methods; } } ?>