1000, 'max_height' => 1000, 'max_size' => 500000, ]); function user_avatar_default_options(): array { return array_merge(MSZ_USER_AVATAR_OPTIONS, config_get_default([], 'Avatar')); } define('MSZ_USER_AVATAR_NO_ERRORS', 0); define('MSZ_USER_AVATAR_ERROR_INVALID_IMAGE', 1); define('MSZ_USER_AVATAR_ERROR_PROHIBITED_TYPE', 2); define('MSZ_USER_AVATAR_ERROR_DIMENSIONS_TOO_LARGE', 3); define('MSZ_USER_AVATAR_ERROR_DATA_TOO_LARGE', 4); define('MSZ_USER_AVATAR_ERROR_TMP_FAILED', 5); define('MSZ_USER_AVATAR_ERROR_STORE_FAILED', 6); define('MSZ_USER_AVATAR_ERROR_FILE_NOT_FOUND', 7); function user_avatar_set_from_path(int $userId, string $path, array $options = []): int { if (!file_exists($path)) { return MSZ_USER_AVATAR_ERROR_FILE_NOT_FOUND; } $options = array_merge(MSZ_USER_AVATAR_OPTIONS, $options); // 0 => width, 1 => height, 2 => type $imageInfo = getimagesize($path); if ($imageInfo === false || count($imageInfo) < 3 || $imageInfo[0] < 1 || $imageInfo[1] < 1) { return MSZ_USER_AVATAR_ERROR_INVALID_IMAGE; } if (!user_avatar_is_allowed_type($imageInfo[2])) { return MSZ_USER_AVATAR_ERROR_PROHIBITED_TYPE; } if ($imageInfo[0] > $options['max_width'] || $imageInfo[1] > $options['max_height']) { return MSZ_USER_AVATAR_ERROR_DIMENSIONS_TOO_LARGE; } if (filesize($path) > $options['max_size']) { return MSZ_USER_AVATAR_ERROR_DATA_TOO_LARGE; } user_avatar_delete($userId); $fileName = sprintf(MSZ_USER_AVATAR_FORMAT, $userId); $storageDir = MSZ_STORAGE . '/avatars/original'; mkdirs($storageDir, true); $avatarPath = "{$storageDir}/{$fileName}"; if (!copy($path, $avatarPath)) { return MSZ_USER_AVATAR_ERROR_STORE_FAILED; } return MSZ_USER_AVATAR_NO_ERRORS; } function user_avatar_set_from_data(int $userId, string $data, array $options = []): int { $tmp = tempnam(sys_get_temp_dir(), 'msz'); if ($tmp === false || !file_exists($tmp)) { return MSZ_USER_AVATAR_ERROR_TMP_FAILED; } chmod($tmp, 644); file_put_contents($tmp, $data); $result = user_avatar_set_from_path($userId, $tmp, $options); safe_delete($tmp); return $result; }