Completed
Push — master ( e193c7...4949c6 )
by Bob Olde
05:30
created

AssetTransforms::populateAssetTransform()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 16
ccs 13
cts 13
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 12
nc 1
nop 3
crap 1
1
<?php
2
3
namespace NerdsAndCompany\Schematic\Services;
4
5
use Craft\Craft;
6
use Craft\AssetTransformModel;
7
8
/**
9
 * Schematic Asset Transforms Service.
10
 *
11
 * Sync Craft Setups.
12
 *
13
 * @author    Nerds & Company
14
 * @copyright Copyright (c) 2015-2017, Nerds & Company
15
 * @license   MIT
16
 *
17
 * @see      http://www.nerds.company
18
 */
19
class AssetTransforms extends Base
20
{
21
    /**
22
     * @return AssetTransformsService
23
     */
24 4
    private function getAssetTransformsService()
25
    {
26 4
        return Craft::app()->assetTransforms;
27
    }
28
29
    /**
30
     * Export all asset transforms.
31
     *
32
     * @param AssetTransformModel[] $assetTransforms
33
     *
34
     * @return array
35
     */
36 3
    public function export(array $assetTransforms = [])
37
    {
38 3
        Craft::log(Craft::t('Exporting Asset Transforms'));
39
40 3
        $assetTransformDefinitions = [];
41
42 3
        foreach ($assetTransforms as $assetTransform) {
43 2
            $assetTransformDefinitions[$assetTransform->handle] = $this->getAssetTransformDefinition($assetTransform);
44 3
        }
45
46 3
        return $assetTransformDefinitions;
47
    }
48
49
    /**
50
     * @param AssetTransformModel $assetTransform
51
     *
52
     * @return array
53
     */
54 2
    private function getAssetTransformDefinition(AssetTransformModel $assetTransform)
55
    {
56
        return [
57 2
            'name' => $assetTransform->name,
58 2
            'width' => $assetTransform->width,
59 2
            'height' => $assetTransform->height,
60 2
            'format' => $assetTransform->format,
61 2
            'dimensionChangeTime' => $assetTransform->dimensionChangeTime,
62 2
            'mode' => $assetTransform->mode,
63 2
            'position' => $assetTransform->position,
64 2
            'quality' => $assetTransform->quality,
65 2
        ];
66
    }
67
68
    /**
69
     * Import asset transform definitions.
70
     *
71
     * @param array $assetTransformDefinitions
72
     * @param bool  $force
73
     *
74
     * @return Result
75
     */
76 4
    public function import(array $assetTransformDefinitions, $force = false)
77
    {
78 4
        Craft::log(Craft::t('Importing Asset Transforms'));
79
80 4
        $this->resetCraftAssetTransformsServiceCache();
81 4
        $assetTransforms = $this->getAssetTransformsService()->getAllTransforms('handle');
82
83 4
        foreach ($assetTransformDefinitions as $assetTransformHandle => $assetTransformDefinition) {
84 2
            $assetTransform = array_key_exists($assetTransformHandle, $assetTransforms)
85 2
                ? $assetTransforms[$assetTransformHandle]
86 2
                : new AssetTransformModel();
87
88 2
            unset($assetTransforms[$assetTransformHandle]);
89
90 2
            $this->populateAssetTransform($assetTransform, $assetTransformDefinition, $assetTransformHandle);
91
92 2
            if (!$this->getAssetTransformsService()->saveTransform($assetTransform)) { // Save asset transform via craft
93 2
                $this->addErrors($assetTransform->getAllErrors());
94
95 2
                continue;
96
            }
97 4
        }
98
99 4
        if ($force) {
100 2
            foreach ($assetTransforms as $assetTransform) {
101
                $this->getAssetTransformsService()->deleteTransform($assetTransform->id);
102 2
            }
103 2
        }
104
105 4
        return $this->getResultModel();
106
    }
107
108
    /**
109
     * Populate asset transform.
110
     *
111
     * @param AssetTransformModel $assetTransform
112
     * @param array               $assetTransformDefinition
113
     * @param string              $assetTransformHandle
114
     *
115
     * @return AssetTransformModel
116
     */
117 2
    private function populateAssetTransform(AssetTransformModel $assetTransform, array $assetTransformDefinition, $assetTransformHandle)
118
    {
119 2
        $assetTransform->setAttributes([
120 2
            'handle' => $assetTransformHandle,
121 2
            'name' => $assetTransformDefinition['name'],
122 2
            'width' => $assetTransformDefinition['width'],
123 2
            'height' => $assetTransformDefinition['height'],
124 2
            'format' => $assetTransformDefinition['format'],
125 2
            'dimensionChangeTime' => $assetTransformDefinition['dimensionChangeTime'],
126 2
            'mode' => $assetTransformDefinition['mode'],
127 2
            'position' => $assetTransformDefinition['position'],
128 2
            'quality' => $assetTransformDefinition['quality'],
129 2
        ]);
130
131 2
        return $assetTransform;
132
    }
133
134
    /**
135
     * Reset craft fields service cache using reflection.
136
     */
137 4
    private function resetCraftAssetTransformsServiceCache()
138
    {
139 4
        $obj = $this->getAssetTransformsService();
140 4
        $refObject = new \ReflectionObject($obj);
141 4
        if ($refObject->hasProperty('_fetchedAllTransforms')) {
142
            $refProperty = $refObject->getProperty('_fetchedAllTransforms');
143
            $refProperty->setAccessible(true);
144
            $refProperty->setValue($obj, false);
145
        }
146 4
        if ($refObject->hasProperty('_transformsByHandle')) {
147
            $refProperty = $refObject->getProperty('_transformsByHandle');
148
            $refProperty->setAccessible(true);
149
            $refProperty->setValue($obj, array());
150
        }
151 4
    }
152
}
153