Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
56.67% covered (warning)
56.67%
17 / 30
33.33% covered (danger)
33.33%
1 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ConverterFactory
56.67% covered (warning)
56.67%
17 / 30
33.33% covered (danger)
33.33%
1 / 3
23.72
0.00% covered (danger)
0.00%
0 / 1
 converterIdToClassname
47.62% covered (danger)
47.62%
10 / 21
0.00% covered (danger)
0.00%
0 / 1
17.20
 makeConverterFromClassname
60.00% covered (warning)
60.00%
3 / 5
0.00% covered (danger)
0.00%
0 / 1
2.26
 makeConverter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace WebPConvert\Convert;
4
5use WebPConvert\Convert\Exceptions\ConversionFailed\InvalidInput\ConverterNotFoundException;
6use WebPConvert\Convert\Converters\AbstractConverter;
7
8/**
9 * Make converters from their ids.
10 *
11 * @package    WebPConvert
12 * @author     Bjørn Rosell <it@rosell.dk>
13 * @since      Class available since Release 2.0.0
14 */
15class ConverterFactory
16{
17    /**
18     * Get classname of a converter (by id)
19     *
20     * @param  string  $converterId    Id of converter (ie "cwebp")
21     *
22     * @throws ConverterNotFoundException  If there is no converter with that id.
23     * @return string  Fully qualified class name of converter
24     */
25    public static function converterIdToClassname($converterId)
26    {
27        switch ($converterId) {
28            case 'ffmpeg':
29                $classNameShort = 'FFMpeg';
30                break;
31            case 'imagickbinary':
32                $classNameShort = 'ImagickBinary';
33                break;
34            case 'imagemagick':
35                $classNameShort = 'ImageMagick';
36                break;
37            case 'gmagickbinary':
38                $classNameShort = 'GmagickBinary';
39                break;
40            case 'graphicsmagick':
41                $classNameShort = 'GraphicsMagick';
42                break;
43            default:
44                $classNameShort = ucfirst($converterId);
45        }
46        $className = 'WebPConvert\\Convert\\Converters\\' . $classNameShort;
47        if (is_callable([$className, 'convert'])) {
48            return $className;
49        } else {
50            throw new ConverterNotFoundException('There is no converter with id:' . $converterId);
51        }
52    }
53
54    /**
55     * Make a converter instance by class name.
56     *
57     * @param  string  $converterClassName    Fully qualified class name
58     * @param  string  $source                The path to the file to convert
59     * @param  string  $destination           The path to save the converted file to
60     * @param  array   $options               (optional)
61     * @param  \WebPConvert\Loggers\BaseLogger   $logger       (optional)
62     *
63     * @throws ConverterNotFoundException  If the specified converter class isn't found
64     * @return AbstractConverter  An instance of the specified converter
65     */
66    public static function makeConverterFromClassname(
67        $converterClassName,
68        $source,
69        $destination,
70        $options = [],
71        $logger = null
72    ) {
73        if (!is_callable([$converterClassName, 'convert'])) {
74            throw new ConverterNotFoundException(
75                'There is no converter with class name:' . $converterClassName . ' (or it is not a converter)'
76            );
77        }
78        //$converter = new $converterClassName($source, $destination, $options, $logger);
79
80        return call_user_func(
81            [$converterClassName, 'createInstance'],
82            $source,
83            $destination,
84            $options,
85            $logger
86        );
87    }
88
89    /**
90     * Make a converter instance by either id or class name.
91     *
92     * @param  string  $converterIdOrClassName   Either a converter ID or a fully qualified class name
93     * @param  string  $source                   The path to the file to convert
94     * @param  string  $destination              The path to save the converted file to
95     * @param  array   $options                  (optional)
96     * @param  \WebPConvert\Loggers\BaseLogger   $logger       (optional)
97     *
98     * @throws ConverterNotFoundException  If the specified converter class isn't found
99     * @return AbstractConverter  An instance of the specified converter
100     */
101    public static function makeConverter($converterIdOrClassName, $source, $destination, $options = [], $logger = null)
102    {
103        // We take it that all lowercase means it is an id rather than a class name
104        if (strtolower($converterIdOrClassName) == $converterIdOrClassName) {
105            $converterClassName = self::converterIdToClassname($converterIdOrClassName);
106        } else {
107            $converterClassName = $converterIdOrClassName;
108        }
109
110        return self::makeConverterFromClassname($converterClassName, $source, $destination, $options, $logger);
111    }
112}