/var/www/html_sp/wp-content/plugins/loco-translate/src/package/Header.php


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
<?php
/**
 * Common access to bundle headers.
 * Because access to theme and plugin header data via WordPress is a total mess.
 * 
 * @property-read string $Name
 * @property-read string $Version
 * @property-read string $Author
 * @property-read string $AuthorURI
 * @property-read string $PluginURI
 * @property-read string $ThemeURI
 * @property-read string $TextDomain
 * @property-read string $DomainPath
 */
class Loco_package_Header {
    
    
/**
     * WordPress's internal data
     * @var array|ArrayAccess
     */
    
private $wp;    

    
    public function 
__construct$header ){
        
$this->wp $header;
    }


    
/**
     * @param string $prop
     * @return string
     */
    
public function __get$prop ){
        
$wp $this->wp;
        
// prefer "get" method to access raw properties (WP_Theme)
        
if( is_object($wp) && method_exists($wp,'get') ){
            
$value $wp->get($prop);
            if( 
is_string($value) && '' !== $value ){
                return 
$value;
            }
        }
        
// may have key directly, e.g. TextDomain in plugin array
        
if( isset($wp[$prop]) ){
            return 
$wp[$prop];
        }
        
// else header not defined, which is probably fine
        
return '';
    }


    
/**
     * @param string $prop  
     * @param mixed $value
     * @codeCoverageIgnore
     */
    
public function __set$prop$value ){
        throw new 
LogicException('Read only');
    }


    
/**
     * Get bundle author as linked text, just like the WordPress plugin list does
     * @return string escaped HTML
     */
    
public function getAuthorLink():string {
        if( ( 
$link $this->AuthorURI ) || ( $link $this->PluginURI ) || ( $link $this->ThemeURI ) ){
            
$author $this->Author or $author $link;
            return 
'<a href="'.esc_url($link).'" target="_blank">'.esc_html($author).'</a>';
        }
        return 
'';
    }


    
/**
     * Get "name" by <author> credit
     * @return string escaped HTML
     */
    
public function getAuthorCredit(): string {
        if( 
$author $this->Author ){
            
$author esc_htmlstrip_tags($author) );
            if( 
$link $this->AuthorURI ){
                
$author '<a href="'.esc_url($link).'" target="_blank">'.$author.'</a>';
            }
        }
        else {
            
$author __('Unknown author','loco-translate');
        }
        
// translators: Author credit: (1) Product name (2) version number, (3) author name.
        
$html wp_ksessprintf__('"%1$s" %2$s by %3$s','loco-translate'), $this->Name$this->Version$author ), ['a'=>['href'=>true,'target'=>true]], ['http','https'] );
        
        
$link $this->PluginURI ?: $this->ThemeURI;
        if( 
$link ){
            
$html .= sprintf' &mdash; <a href="%s" target="_blank">%s</a>'esc_url($link), esc_html(__('Visit official site','loco-translate')) );
        }
        
        return 
$html;
    }


    
/**
     * Get hostname of vendor that hosts theme/plugin
     * @return string e.g. "wordpress.org"
     */
    
public function getVendorHost(): string {
        
$host '';
        if( ( 
$url $this->PluginURI ) || ( $url $this->ThemeURI ) ){
            if( 
$host parse_url($url,PHP_URL_HOST) ){
                
$bits explode'.'$host );
                
$host implode'.'array_slice($bits,-2) );
            }
        }
        return 
$host;
    }

}