Completed
Push — master ( 2e73d7...e7e967 )
by Tim
14:56
created

ContentObjectRenderer   A

Complexity

Total Complexity 18

Size/Duplication

Total Lines 170
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 5
Bugs 0 Features 1
Metric Value
wmc 18
lcom 1
cbo 2
dl 0
loc 170
rs 10
c 5
b 0
f 1

4 Methods

Rating   Name   Duplication   Size   Complexity  
A IMG_RESOURCE() 0 20 2
D cImage() 0 65 12
A getImgResource() 0 23 3
A setSkipRealUrlImageInGetImgResource() 0 4 1
1
<?php
2
3
/**
4
 * ContentObjectRenderer Xclass
5
 *
6
 * @author Tim Lochmüller
7
 */
8
9
namespace FRUIT\FlRealurlImage\Xclass\Frontend\ContentObject;
10
11
use FRUIT\FlRealurlImage\RealUrlImage;
12
use TYPO3\CMS\Core\Resource\File;
13
use TYPO3\CMS\Core\Resource\FileReference;
14
use TYPO3\CMS\Core\Utility\GeneralUtility;
15
16
/**
17
 * Extends tslib_cObj to change the path for the images
18
 */
19
class ContentObjectRenderer extends \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
20
{
21
    /**
22
     * Skips RealUrlImage execution in getImgResource method.
23
     * Otherwise RealUrlImage is executed twice in IMG_RESOURCE, cImage and cImage7AndUp
24
     *
25
     * @var boolean
26
     */
27
    protected $skipRealUrlImageInGetImgResource = false;
28
29
    /**
30
     * Rendering the cObject, IMG_RESOURCE
31
     *
32
     * @param    array $conf
33
     *
34
     * @return    string        Output
35
     * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=354&cHash=46f9299706
36
     * @see  getImgResource()
37
     */
38
    public function IMG_RESOURCE($conf)
39
    {
40
        $this->setSkipRealUrlImageInGetImgResource(true);
41
        $GLOBALS['TSFE']->lastImgResourceInfo = $this->getImgResource($conf['file'], $conf['file.']);
42
43
        // ###################################
44
        // ## Here begins RealUrl_image ######
45
        // ###################################
46
        /** @var RealUrlImage $tx_flrealurlimage */
47
        $tx_flrealurlimage = GeneralUtility::makeInstance(RealUrlImage::class);
48
        $tx_flrealurlimage->start($this->data, $this->table);
49
        $new_fileName = $tx_flrealurlimage->main($conf, $GLOBALS['TSFE']->lastImgResourceInfo);
50
        $imageResource = $tx_flrealurlimage->addAbsRefPrefix($new_fileName);
51
        // ##################################
52
        // ### Here ends RealURL_Image ######
53
        // ##################################
54
55
        $theValue = isset($conf['stdWrap.']) ? $this->stdWrap($imageResource, $conf['stdWrap.']) : $imageResource;
56
        return $theValue;
57
    }
58
59
    /**
60
     * @param string $file
61
     * @param array  $conf
62
     *
63
     * @return string
64
     */
65
    public function cImage($file, $conf)
66
    {
67
        $tsfe = $this->getTypoScriptFrontendController();
68
        $this->setSkipRealUrlImageInGetImgResource(true);
69
        $info = $this->getImgResource($file, $conf['file.']);
70
        $tsfe->lastImageInfo = $info;
71
        if (!is_array($info)) {
72
            return '';
73
        }
74
        if (is_file(PATH_site . $info['3'])) {
75
            $source = $tsfe->absRefPrefix . str_replace('%2F', '/', rawurlencode($info['3']));
76
        } else {
77
            $source = $info[3];
78
        }
79
80
        $layoutKey = $this->stdWrap($conf['layoutKey'], $conf['layoutKey.']);
81
        $imageTagTemplate = $this->getImageTagTemplate($layoutKey, $conf);
82
        $sourceCollection = $this->getImageSourceCollection($layoutKey, $conf, $file);
83
84
        // This array is used to collect the image-refs on the page...
85
        $tsfe->imagesOnPage[] = $source;
86
        $altParam = $this->getAltParam($conf);
87
        $params = $this->stdWrapValue('params', $conf);
88
        if ($params !== '' && $params[0] !== ' ') {
89
            $params = ' ' . $params;
90
        }
91
92
        $imageTagValues = [
93
            'width'               => (int)$info[0],
94
            'height'              => (int)$info[1],
95
            'src'                 => htmlspecialchars($source),
96
            'params'              => $params,
97
            'altParams'           => $altParam,
98
            'border'              => $this->getBorderAttr(' border="' . (int)$conf['border'] . '"'),
99
            'sourceCollection'    => $sourceCollection,
100
            'selfClosingTagSlash' => (!empty($tsfe->xhtmlDoctype) ? ' /' : ''),
101
        ];
102
103
        // ###################################
104
        // ## Here begins RealUrl_image ######
105
        // ###################################
106
        $tx_flrealurlimage = GeneralUtility::makeInstance(RealUrlImage::class);
107
        $tx_flrealurlimage->start($this->data, $this->table);
108
        $new_fileName = $tx_flrealurlimage->main($conf, $info, $file, $this);
109
        $imageTagValues['src'] = $tx_flrealurlimage->addAbsRefPrefix($new_fileName);
110
        // ##################################
111
        // ### Here ends RealURL_Image ######
112
        // ##################################
113
114
        $theValue = $this->templateService->substituteMarkerArray($imageTagTemplate, $imageTagValues, '###|###', true, true);
115
116
117
        $linkWrap = isset($conf['linkWrap.']) ? $this->stdWrap($conf['linkWrap'], $conf['linkWrap.']) : $conf['linkWrap'];
118
        if ($linkWrap) {
119
            $theValue = $this->linkWrap($theValue, $linkWrap);
120
        } elseif ($conf['imageLinkWrap']) {
121
            $originalFile = !empty($info['originalFile']) ? $info['originalFile'] : $info['origFile'];
122
            $theValue = $this->imageLinkWrap($theValue, $originalFile, $conf['imageLinkWrap.']);
123
        }
124
        $wrap = isset($conf['wrap.']) ? $this->stdWrap($conf['wrap'], $conf['wrap.']) : $conf['wrap'];
125
        if ((string)$wrap !== '') {
126
            $theValue = $this->wrap($theValue, $conf['wrap']);
127
        }
128
        return $theValue;
129
    }
130
131
    /**
132
     * Creates and returns a TypoScript "imgResource".
133
     * The value ($file) can either be a file reference (TypoScript resource) or the string "GIFBUILDER".
134
     * In the first case a current image is returned, possibly scaled down or otherwise processed.
135
     * In the latter case a GIFBUILDER image is returned; This means an image is made by TYPO3 from layers of elements as GIFBUILDER defines.
136
     * In the function IMG_RESOURCE() this function is called like $this->getImgResource($conf['file'], $conf['file.']);
137
     *
138
     * Structure of the returned info array:
139
     *  0 => width
140
     *  1 => height
141
     *  2 => file extension
142
     *  3 => file name
143
     *  origFile => original file name
144
     *  origFile_mtime => original file mtime
145
     *  -- only available if processed via FAL: --
146
     *  originalFile => original file object
147
     *  processedFile => processed file object
148
     *  fileCacheHash => checksum of processed file
149
     *
150
     * @param string|File|FileReference $file      A "imgResource" TypoScript data type. Either a TypoScript file resource, a file or a file reference object or the string GIFBUILDER. See description above.
151
     * @param array                     $fileArray TypoScript properties for the imgResource type
152
     *
153
     * @return array|NULL Returns info-array
154
     * @see IMG_RESOURCE(), cImage(), \TYPO3\CMS\Frontend\Imaging\GifBuilder
155
     */
156
    public function getImgResource($file, $fileArray)
157
    {
158
        $result = parent::getImgResource($file, $fileArray);
159
        if (!is_array($result)) {
160
            return $result;
161
        }
162
163
        if (!$this->skipRealUrlImageInGetImgResource) {
164
            // ###################################
165
            // ## Here begins RealUrl_image ######
166
            // ###################################
167
            $tx_flrealurlimage = GeneralUtility::makeInstance(RealUrlImage::class);
168
            /** @var $tx_flrealurlimage \FRUIT\FlRealurlImage\RealUrlImage */
169
            $tx_flrealurlimage->start($this->data, $this->table);
170
            $new_fileName = $tx_flrealurlimage->main([], $result, $file, $this);
171
            $result[3] = $tx_flrealurlimage->addAbsRefPrefix($new_fileName);
172
            // ##################################
173
            // ### Here ends RealURL_Image ######
174
            // ##################################
175
        }
176
177
        return $result;
178
    }
179
180
    /**
181
     * Set skipRealUrlImageInGetImgResource
182
     * @param $skipRealUrlImageInGetImgResource
183
     */
184
    public function setSkipRealUrlImageInGetImgResource($skipRealUrlImageInGetImgResource)
185
    {
186
        $this->skipRealUrlImageInGetImgResource = $skipRealUrlImageInGetImgResource;
187
    }
188
}
189