*/ public $meta = array(); /** * Build a package descriptor. * * @param string $name Base name. * @param string $archive Archive path. * @param string $installer Installer path. * @param int $size Archive size. * @param string $hash Archive hash. * @param array $meta Metadata. * @return self */ public static function create( string $name, string $archive, string $installer, int $size, string $hash, array $meta = array() ): self { $package = new self(); $package->name = $name; $package->archive = $archive; $package->installer = $installer; $package->size = $size; $package->hash = $hash; $package->meta = $meta; return $package; } /** * Serialize. * * @return array */ public function to_array(): array { return array( 'name' => $this->name, 'archive' => $this->archive, 'installer' => $this->installer, 'size' => $this->size, 'hash' => $this->hash, 'meta' => $this->meta, ); } /** * Hydrate from array data. * * @param array $data Data. * @return self */ public static function from_array( array $data ): self { return self::create( isset( $data['name'] ) ? (string) $data['name'] : '', isset( $data['archive'] ) ? (string) $data['archive'] : '', isset( $data['installer'] ) ? (string) $data['installer'] : '', isset( $data['size'] ) ? (int) $data['size'] : 0, isset( $data['hash'] ) ? (string) $data['hash'] : '', isset( $data['meta'] ) && is_array( $data['meta'] ) ? $data['meta'] : array() ); } /** * Default file name of a package. * * @param string $site_host Sanitized site host. * @return string */ public static function default_name( string $site_host ): string { $host = strtolower( preg_replace( '/[^a-z0-9\.\-]+/i', '-', $site_host ) ); return trim( $host, '-' ) . '_' . gmdate( 'Ymd_His' ) . '_' . Str::random( 6 ); } }