Plugin_Upgrader::check_package()

最后更新于:2021-11-25 20:37:57

Plugin_Upgrader::check_package( string$source)

Checks that the source package contains a valid plugin.

参数

$source

(string) (Required) The path to the downloaded package source.

响应

(string|GC_Error) The source as passed, or a GC_Error object on failure.

源文件

文件: gc-admin/includes/class-plugin-upgrader.php

	public function check_package( $source ) {
		global $gc_filesystem, $gc_version;

		$this->new_plugin_data = array();

		if ( is_gc_error( $source ) ) {
			return $source;
		}

		$working_directory = str_replace( $gc_filesystem->gc_content_dir(), trailingslashit( GC_CONTENT_DIR ), $source );
		if ( ! is_dir( $working_directory ) ) { // Sanity check, if the above fails, let's not prevent installation.
			return $source;
		}

		// Check that the folder contains at least 1 valid plugin.
		$files = glob( $working_directory . '*.php' );
		if ( $files ) {
			foreach ( $files as $file ) {
				$info = get_plugin_data( $file, false, false );
				if ( ! empty( $info['Name'] ) ) {
					$this->new_plugin_data = $info;
					break;
				}
			}
		}

		if ( empty( $this->new_plugin_data ) ) {
			return new GC_Error( 'incompatible_archive_no_plugins', $this->strings['incompatible_archive'], __( 'No valid plugins were found.' ) );
		}

		$requires_php = isset( $info['RequiresPHP'] ) ? $info['RequiresPHP'] : null;
		$requires_gc  = isset( $info['RequiresGC'] ) ? $info['RequiresGC'] : null;

		if ( ! is_php_version_compatible( $requires_php ) ) {
			$error = sprintf(
				/* translators: 1: Current PHP version, 2: Version required by the uploaded plugin. */
				__( 'The PHP version on your server is %1$s, however the uploaded plugin requires %2$s.' ),
				phpversion(),
				$requires_php
			);

			return new GC_Error( 'incompatible_php_required_version', $this->strings['incompatible_archive'], $error );
		}

		if ( ! is_gc_version_compatible( $requires_gc ) ) {
			$error = sprintf(
				/* translators: 1: Current GeChiUI version, 2: Version required by the uploaded plugin. */
				__( 'Your GeChiUI version is %1$s, however the uploaded plugin requires %2$s.' ),
				$gc_version,
				$requires_gc
			);

			return new GC_Error( 'incompatible_gc_required_version', $this->strings['incompatible_archive'], $error );
		}

		return $source;
	}