'', 'image_size' => '1K', 'file_format' => 'jpg', 'aspect_ratio' => '3:4', 'gallery_position' => Gallery_Layout::FIRST, 'old_main' => Gallery_Layout::TO_GALLERY, 'ask_variation' => 'yes', 'variation_to_gallery' => 'yes', ); } /** * Все настройки с подставленными значениями по умолчанию. * * @return array{api_key: string, image_size: string, file_format: string, aspect_ratio: string, gallery_position: string, old_main: string, ask_variation: string, variation_to_gallery: string} */ public static function all(): array { $stored = get_option( self::OPTION, array() ); $defaults = self::defaults(); if ( ! is_array( $stored ) ) { $stored = array(); } return array( 'api_key' => is_string( $stored['api_key'] ?? null ) ? $stored['api_key'] : $defaults['api_key'], 'image_size' => self::one_of( $stored, 'image_size', self::IMAGE_SIZES, $defaults ), 'file_format' => self::one_of( $stored, 'file_format', self::FILE_FORMATS, $defaults ), 'aspect_ratio' => self::one_of( $stored, 'aspect_ratio', self::ASPECT_RATIOS, $defaults ), 'gallery_position' => self::one_of( $stored, 'gallery_position', Gallery_Layout::POSITIONS, $defaults ), 'old_main' => self::one_of( $stored, 'old_main', Gallery_Layout::OLD_MAIN_MODES, $defaults ), 'ask_variation' => self::one_of( $stored, 'ask_variation', self::YES_NO, $defaults ), 'variation_to_gallery' => self::one_of( $stored, 'variation_to_gallery', self::YES_NO, $defaults ), ); } /** * Ключ доступа из настроек (не из константы — для этого Config::api_key()). * * @return string */ public static function stored_api_key(): string { return self::all()['api_key']; } /** * Размер фото для товара: «1K» или «2K». * * @return string */ public static function image_size(): string { return self::all()['image_size']; } /** * Тип файла для товара: «jpg» или «png». * * @return string */ public static function file_format(): string { return self::all()['file_format']; } /** * Формат кадров новой съёмки: «3:4», «1:1», «4:5» или «9:16». Уходит в окно через * пропуск; окно ставит его форматом по умолчанию для фотосессии без кадров, а поменять * формат для конкретного товара можно прямо в окне. * * @return string */ public static function aspect_ratio(): string { return self::all()['aspect_ratio']; } /** * Куда встаёт новое фото в галерее товара: первым или последним (Gallery_Layout::POSITIONS). * * @return string */ public static function gallery_position(): string { return self::all()['gallery_position']; } /** * Что делать с прежним изображением товара, когда новое фото становится изображением * товара: перенести в галерею или убрать из карточки (Gallery_Layout::OLD_MAIN_MODES). * * @return string */ public static function old_main(): string { return self::all()['old_main']; } /** * Спрашивать ли в окне, для какой вариации фото, при «Сделать изображением товара» * у товара с вариациями. Нет — фото сохраняется как изображение товара целиком. * * @return bool */ public static function ask_variation(): bool { return 'yes' === self::all()['ask_variation']; } /** * Начальное положение галочки «Добавить в галерею товара» в вопросе о вариации. * * @return bool */ public static function variation_to_gallery(): bool { return 'yes' === self::all()['variation_to_gallery']; } /** * Значение настройки из записи, если оно из списка допустимых; иначе — по умолчанию. * * @param array $stored Запись настроек. * @param string $key Имя настройки. * @param string[] $allowed Допустимые значения. * @param array $defaults Значения по умолчанию. * @return string */ private static function one_of( array $stored, string $key, array $allowed, array $defaults ): string { $value = $stored[ $key ] ?? null; return in_array( $value, $allowed, true ) ? $value : $defaults[ $key ]; } }