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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
<?php
/* --------------------------------------------------------------
Asset.inc.php 2016-04-18
Gambio GmbH
http://www.gambio.de
Copyright (c) 2016 Gambio GmbH
Released under the GNU General Public License (Version 2)
[http://www.gnu.org/licenses/gpl-2.0.html]
--------------------------------------------------------------
*/
MainFactory::load_class('AssetInterface');
/**
* Class Asset
*
* @category System
* @package Http
* @subpackage ValueObjects
*/
class Asset implements AssetInterface
{
/**
* JavaScript Asset Type
*/
const JAVASCRIPT = 'javascript';
/**
* CSS Asset Type
*/
const CSS = 'css';
/**
* JavaScript Translation
*/
const TRANSLATION = 'translation';
/**
* @var string Asset's relative path.
*/
protected $path;
/**
* @var string Asset's type (defined by the file extension).
*/
protected $type;
/**
* Initializes the asset.
*
* @throws InvalidArgumentException
*
* @param string $path Relative path to the asset file (relative to the "src" directory). Provide only the filename
* for translations (no path is required - e.g. general.lang.inc.php).
*/
public function __construct($path)
{
if(!is_string($path) || empty($path))
{
throw new InvalidArgumentException('Invalid argument $p_path provided (relative asset path - string expected): '
. print_r($path, true));
}
$this->path = (string)$path;
if(substr($this->path, -3) === '.js')
{
$this->type = self::JAVASCRIPT;
}
else if(substr($this->path, -4) === '.css')
{
$this->type = self::CSS;
}
else if(substr(basename($this->path), -13) === '.lang.inc.php')
{
$this->type = self::TRANSLATION;
}
else
{
throw new InvalidArgumentException('Provided asset is not supported, provide JavaScript(.js) and CSS (.css) assets.');
}
}
/**
* Get asset HTML markup.
*
* @return string Returns the HTML markup that will load the file when the page is loaded.
*/
public function __toString()
{
switch($this->type)
{
case self::JAVASCRIPT:
return '<script type="text/javascript" src="' . $this->path . '"></script>';
break;
case self::CSS:
return '<link rel="stylesheet" type="text/css" href="' . $this->path . '" />';
break;
case self::TRANSLATION:
$section = str_replace('.lang.inc.php', '', basename($this->path));
$languageTextManager = MainFactory::create('LanguageTextManager', $section, $_SESSION['languages_id']);
return json_encode($languageTextManager->get_section_array($section));
break;
default:
return ''; // Just in case the asset type was not set correctly.
}
}
/**
* Get the path of the asset.
*
* @return string
*/
public function getPath()
{
return $this->path;
}
/**
* Get the type of the asset.
*
* @return string
*/
public function getType()
{
return $this->type;
}
}