Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 34
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
BaseAppMetadata
0.00% covered (danger)
0.00%
0 / 34
0.00% covered (danger)
0.00%
0 / 4
182
0.00% covered (danger)
0.00%
0 / 1
 getDisplayName
n/a
0 / 0
n/a
0 / 0
0
 getPath
n/a
0 / 0
n/a
0 / 0
0
 getHref
n/a
0 / 0
n/a
0 / 0
0
 isAccessibleToUser
n/a
0 / 0
n/a
0 / 0
0
 getBasename
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getIconPath
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
12
 getIcon
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
42
 getJsCssImports
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace Olz\Apps;
4
5use Olz\Entity\Users\User;
6use Olz\Utils\WithUtilsTrait;
7
8abstract class BaseAppMetadata {
9    use WithUtilsTrait;
10
11    abstract public function getDisplayName(): string;
12
13    abstract public function getPath(): string;
14
15    abstract public function getHref(): string;
16
17    abstract public function isAccessibleToUser(?User $user): bool;
18
19    public function getBasename(): string {
20        return basename($this->getPath());
21    }
22
23    public function getIconPath(): ?string {
24        $app_path = $this->getPath();
25        $svg_path = "{$app_path}/icon.svg";
26        if (is_file($svg_path)) {
27            return $svg_path;
28        }
29        $png_path = "{$app_path}/icon.png";
30        if (is_file($png_path)) {
31            return $png_path;
32        }
33        return null;
34    }
35
36    public function getIcon(): ?string {
37        $icon_path = $this->getIconPath();
38        if (!$icon_path) {
39            $base64 = base64_encode(file_get_contents(__DIR__.'/default_icon.svg') ?: '');
40            $mime_type = 'image/svg+xml';
41            return "data:{$mime_type};base64,{$base64}";
42        }
43        $base64 = base64_encode(file_get_contents($icon_path) ?: '');
44        if (substr($icon_path, strlen($icon_path) - 4) == '.svg') {
45            $mime_type = 'image/svg+xml';
46            return "data:{$mime_type};base64,{$base64}";
47        }
48        if (substr($icon_path, strlen($icon_path) - 4) == '.png') {
49            $mime_type = 'image/png';
50            return "data:{$mime_type};base64,{$base64}";
51        }
52        return null;
53    }
54
55    public function getJsCssImports(): string {
56        $data_path = $this->envUtils()->getDataPath();
57        $basename = $this->getBasename();
58        $css_path = "{$data_path}jsbuild/app-{$basename}/main.min.css";
59        $js_path = "{$data_path}jsbuild/app-{$basename}/main.min.js";
60        $css_modified = is_file($css_path) ? filemtime($css_path) : 0;
61        $js_modified = is_file($js_path) ? filemtime($js_path) : 0;
62        $css_href = "/jsbuild/app-{$basename}/main.min.css?modified={$css_modified}";
63        $js_href = "/jsbuild/app-{$basename}/main.min.js?modified={$js_modified}";
64
65        $out = '';
66        $out .= "<link rel='stylesheet' href='{$css_href}' />";
67        $out .= "<script type='text/javascript' src='{$js_href}' onload='olz{$basename}.loaded()'></script>";
68        return $out;
69    }
70}