File.php 2.4 KB
Newer Older
Ketan's avatar
Ketan committed
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
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Magento\Framework\View;

use Magento\Framework\View\Design\ThemeInterface;

/**
 * View file in the file system with context of its identity
 */
class File
{
    /**
     * File name
     *
     * @var string
     */
    protected $filename;

    /**
     * Module
     *
     * @var string
     */
    protected $module;

    /**
     * Theme
     *
     * @var ThemeInterface
     */
    protected $theme;

    /**
     * Base flag
     *
     * @var string
     */
    protected $isBase;

    /**
     * Identifier
     *
     * @var string
     */
    protected $identifier;

    /**
     * Constructor
     *
     * @param string $filename
     * @param string $module
     * @param ThemeInterface $theme
     * @param bool $isBase
     */
    public function __construct($filename, $module, ThemeInterface $theme = null, $isBase = false)
    {
        $this->filename = $filename;
        $this->module = $module;
        $this->theme = $theme;
        $this->isBase = $isBase;
    }

    /**
     * Retrieve full filename
     *
     * @return string
     */
    public function getFilename()
    {
        return $this->filename;
    }

    /**
     * Retrieve name of a file without a directory path
     *
     * @return string
     */
    public function getName()
    {
        return basename($this->filename);
    }

    /**
     * Retrieve fully-qualified name of a module a file belongs to
     *
     * @return string
     */
    public function getModule()
    {
        return $this->module;
    }

    /**
     * Retrieve instance of a theme a file belongs to
     *
     * @return ThemeInterface|null
     */
    public function getTheme()
    {
        return $this->theme;
    }

    /**
     * Whether file is a base one
     *
     * @return bool
     */
    public function isBase()
    {
        return $this->theme === null;
    }

    /**
     * Calculate unique identifier for a view file
     *
     * @return string
     */
    public function getFileIdentifier()
    {
        if (null === $this->identifier) {
            $theme = $this->getTheme() ? ('|theme:' . $this->theme->getFullPath()) : '';
            $this->identifier = ($this->isBase ? 'base' : '')
                . $theme . '|module:' . $this->getModule() . '|file:' . $this->getName();
        }
        return $this->identifier;
    }
}