aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/assets/PluginAssetFactory.php
blob: c4b394d5ab4715410da8162ae9e22d77a03b1997 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
namespace Assets;

use PluginAsset as AssetModel;

/**
 * @author  Jan-Hendrik Willms <tleilax+studip@gmail.com>
 * @license GPL2 or any later version
 * @since   Stud.IP 3.4
 */
class PluginAssetFactory implements AssetFactory
{
    /**
     * Restores or create a css file based on the given information.
     *
     * @param String $filename Filename of the original file
     * @param Array  $metadata Potential metadata
     * @return Assets\PluginAsset
     */
    public function createCSSFile($filename, array $metadata = [])
    {
        $hash = $this->createHash($filename, $metadata);

        $asset = new AssetModel($hash);
        if ($asset->isNew()) {
            $css_filename = sprintf(
                '%s.%s.css',
                pathinfo($filename, PATHINFO_FILENAME),
                $metadata['plugin_version']
            );

            $asset->plugin_id   = $metadata['plugin_id'];
            $asset->type        = 'css';
            $asset->filename    = $css_filename;
            $asset->storagename = "{$hash}.css";
            $asset->size        = null;
            $asset->store();
        }
        $file = new PluginAsset($asset);
        $file->setOriginalFilename($filename);
        return $file;
    }

    /**
     * Restores or create a js file based on the given information.
     *
     * @param String $filename Filename of the original file
     * @param Array  $metadata Potential metadata
     * @return Assets\PluginAsset
     */
    public function createJSFile($filename, array $metadata = [])
    {
        $hash = $this->createHash($filename, $metadata);

        $asset = new AssetModel($hash);
        if ($asset->isNew()) {
            $js_filename = sprintf(
                '%s.%s.js',
                basename($filename, '.js'),
                $metadata['plugin_version']
            );

            $asset->plugin_id   = $metadata['plugin_id'];
            $asset->type        = 'js';
            $asset->filename    = $js_filename;
            $asset->storagename = "{$hash}.js";
            $asset->size        = null;
            $asset->store();
        }
        $file = new PluginAsset($asset);
        $file->setOriginalFilename($filename);
        return $file;
    }

    private function createHash($filename, array $metadata)
    {
        return md5(implode('|', [
            $metadata['plugin_id'] ?: 'unknown',
            $metadata['plugin_version'] ?: '0.0',
            $filename
        ]));
    }
}