ClassNamingUtility::getExtensionKeyByModel()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 9
ccs 0
cts 4
cp 0
rs 9.9666
cc 2
nc 2
nop 1
crap 6
1
<?php
2
3
/**
4
 * ClassNamingUtility.php.
5
 */
6
declare(strict_types = 1);
7
8
namespace HDNET\Autoloader\Utility;
9
10
use HDNET\Autoloader\Exception;
11
use TYPO3\CMS\Core\Utility\GeneralUtility;
12
13
/**
14
 * ClassNamingUtility.
15
 */
16
class ClassNamingUtility
17
{
18
    /**
19
     * Explodes a modelName like \Vendor\Ext\Domain\Model\Foo into several
20
     * pieces like vendorName, extensionName, subpackageKey and controllerName.
21
     *
22
     * @param string $modelName The model name to be exploded
23
     *
24
     * @throws Exception
25
     *
26
     * @return array Parts of the object model name
27
     *
28
     * @see \TYPO3\CMS\Core\Utility\ClassNamingUtility::explodeObjectControllerName
29
     */
30
    public static function explodeObjectModelName($modelName)
31
    {
32
        if (false !== mb_strpos($modelName, '\\')) {
33
            if ('TYPO3\\CMS' === mb_substr($modelName, 0, 9)) {
34
                $extensionName = '^(?P<vendorName>[^\\\\]+\\\[^\\\\]+)\\\(?P<extensionName>[^\\\\]+)';
35
            } else {
36
                $extensionName = '^(?P<vendorName>[^\\\\]+)\\\\(?P<extensionName>[^\\\\]+)';
37
            }
38
            $regEx = '/' . $extensionName . '\\\\Domain\\\\Model\\\\(?P<modelName>[a-z0-9\\\\]+)$/ix';
39
        } else {
40
            $regEx = '/^Tx_(?P<extensionName>[^_]+)_Domain_Model_(?P<modelName>[a-z0-9_]+)/ix';
41
        }
42
43
        preg_match($regEx, $modelName, $matches);
44
        if (empty($matches)) {
45
            throw new Exception('Could not determine extension key for: ' . $modelName, 140657775);
46
        }
47
48
        return $matches;
49
    }
50
51
    /**
52
     * Get the extension key by the given model name.
53
     *
54
     * @param string|object $modelClassName
55
     *
56
     * @return string
57
     */
58
    public static function getExtensionKeyByModel($modelClassName)
59
    {
60
        if (\is_object($modelClassName)) {
61
            $modelClassName = \get_class($modelClassName);
62
        }
63
        $matches = self::explodeObjectModelName($modelClassName);
64
65
        return GeneralUtility::camelCaseToLowerCaseUnderscored($matches['extensionName']);
66
    }
67
68
    /**
69
     * Get FQN by path (segment).
70
     *
71
     * @param string $vendorName
72
     * @param string $extensionKey
73
     * @param string $path
74
     *
75
     * @return string
76
     */
77
    public static function getFqnByPath($vendorName, $extensionKey, $path)
78
    {
79
        return $vendorName . '\\' . ucfirst(GeneralUtility::underscoredToUpperCamelCase($extensionKey)) . '\\' . str_replace(
80
            '/',
81
            '\\',
82
            ltrim($path, '/')
83
        );
84
    }
85
}
86