> $files Rows with id, name, mimeType. * @return array|null */ public static function pick_default( array $files ): ?array { $ranked = array( self::KIND_MARKDOWN => null, self::KIND_GOOGLE_DOC => null, self::KIND_DOCX => null, ); foreach ( $files as $file ) { if ( ! is_array( $file ) ) { continue; } $kind = self::kind( (string) ( $file['mimeType'] ?? '' ), (string) ( $file['name'] ?? '' ) ); if ( ! self::is_article( $kind ) ) { continue; } if ( null === $ranked[ $kind ] ) { $ranked[ $kind ] = $file; } } foreach ( $ranked as $file ) { if ( is_array( $file ) ) { return $file; } } return null; } /** * @param array> $files Candidate files. * @return array */ public static function to_source_files( array $files ): array { $out = array(); foreach ( $files as $file ) { if ( ! is_array( $file ) ) { continue; } $id = (string) ( $file['id'] ?? '' ); $name = (string) ( $file['name'] ?? '' ); $mime = (string) ( $file['mimeType'] ?? '' ); if ( '' === $id || '' === $name ) { continue; } $kind = self::kind( $mime, $name ); if ( ! self::is_article( $kind ) ) { continue; } $out[] = array( 'id' => $id, 'name' => $name, 'kind' => 'document', 'mime' => $mime, ); } return $out; } /** * Pick a row by id from a file list. * * @param array> $files Files. * @param string $id File id. * @return array|null */ public static function find_by_id( array $files, string $id ): ?array { if ( '' === $id ) { return null; } foreach ( $files as $file ) { if ( is_array( $file ) && (string) ( $file['id'] ?? '' ) === $id ) { return $file; } } return null; } private static function name_looks_markdown( string $name ): bool { return (bool) preg_match( '/\.(md|markdown|mdx)$/i', $name ); } }