53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\MetadataResolver;
 | 
						|
 | 
						|
use Carbon\Carbon;
 | 
						|
 | 
						|
class Metadata
 | 
						|
{
 | 
						|
    /** @var string タイトル */
 | 
						|
    public $title = '';
 | 
						|
 | 
						|
    /** @var string 概要 */
 | 
						|
    public $description = '';
 | 
						|
 | 
						|
    /** @var string サムネイルのURL */
 | 
						|
    public $image = '';
 | 
						|
 | 
						|
    /** @var Carbon|null メタデータの有効期限 */
 | 
						|
    public $expires_at = null;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var string[] タグ
 | 
						|
     * チェックインタグと同様に保存されるため、スペースや改行文字を含めてはいけません。
 | 
						|
     */
 | 
						|
    public $tags = [];
 | 
						|
 | 
						|
    /**
 | 
						|
     * 重複を排除し、正規化を行ったタグの集合を返します。
 | 
						|
     * @return string[]
 | 
						|
     */
 | 
						|
    public function normalizedTags(): array
 | 
						|
    {
 | 
						|
        $tags = [];
 | 
						|
        foreach ($this->tags as $tag) {
 | 
						|
            $tag = $this->sanitize($tag);
 | 
						|
            $tag = $this->trim($tag);
 | 
						|
            $tags[$tag] = true;
 | 
						|
        }
 | 
						|
 | 
						|
        return array_keys($tags);
 | 
						|
    }
 | 
						|
 | 
						|
    private function sanitize(string $value): string
 | 
						|
    {
 | 
						|
        return preg_replace('/\r?\n/u', ' ', $value);
 | 
						|
    }
 | 
						|
 | 
						|
    private function trim(string $value): string
 | 
						|
    {
 | 
						|
        return trim($value);
 | 
						|
    }
 | 
						|
}
 |