/var/www/html_sp/wp-content/plugins/loco-translate/src/fs/Siblings.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<?php
/**
 * Manages a POT or PO/MO pair and its on-disk dependants
 */
class Loco_fs_Siblings {

    
/**
     * @var Loco_fs_File
     */
    
private $po;

    
/**
     * @var Loco_fs_File|null
     */
    
private $mo;

    
/**
     * @var Loco_fs_File|null
     */
    
private $php;

    
/**
     * @var string
     */
    
private $td '';


    
/**
     * @param Loco_fs_File $file Master file, either PO/MO or POT
     */
    
public function __constructLoco_fs_File $file ){
        
$ext $file->extension();
        if( 
'pot' === $ext ){
            
$this->po $file;
        }
        else if( 
'po' === $ext ){
            
$this->po $file;
            
$this->mo $file->cloneExtension('mo');
        }
        else if( 
'mo' === $ext ){
            
$this->mo $file;
            
$this->po $file->cloneExtension('po');
        }
        else {
            throw new 
InvalidArgumentException('Unexpected file extension: '.$ext);
        }
        if( 
$this->mo && class_exists('WP_Translation_Controller') ){
            
$this->php $this->mo->cloneExtension('l10n.php');
        }
    }


    
/**
     * Set text domain explicitly, required if unknown from PO/POT file name
     * @return void
     */
    
public function setDomain$domain ){
        
$this->td $domain ?: 'default';
    }


    
/**
     * Get all dependant files (including primary po) that actually exist on disk
     * @return Loco_fs_File[]
     */
    
public function expand(){
        
$siblings = [];
        
// Source and binary pair
        
foreach( [ $this->po$this->mo$this->php ] as $file ){
            if( 
$file && $file->exists() ){
                
$siblings[] = $file;
            }
        }
        
// PO revisions / backup files:
        
$revs = new Loco_fs_Revisions$this->po );
        foreach( 
$revs->getPaths() as $path ){
            
$siblings[] = new Loco_fs_File$path );
        }
        
// JSON exports, unless in POT mode:
        
if( $this->mo ){
            
$siblings array_merge($siblings,$this->getJsons($this->td));
        }
        
/*/ Note that the beta "performant-translations" plugin originally used .mo.php instead of .l10n.php
        if( $this->mo && class_exists('Performant_Translations') ){
            $file = $this->mo->cloneExtension('mo.php');
            if( $file->exists() ){
                $siblings[] = $file;
            }
        }*/
        
return $siblings;
    }


    
/**
     * @return Loco_fs_File
     */
    
public function getSource(){
        return 
$this->po;
    }


    
/**
     * @return Loco_fs_File|null
     */
    
public function getBinary(){
        return 
$this->mo;
    }


    
/**
     * @return Loco_fs_File|null
     */
    
public function getCache(){
        return 
$this->php;
    }

    
    
/**
     * @param string $prefix Prefix required in case not present in PO file name
     * @return Loco_fs_File[]
     */
    
public function getJsons$prefix ){
        
$list = new Loco_fs_FileList;
        
$name $this->po->filename();
        
$finder = new Loco_fs_FileFinder$this->po->dirname() );
        
// Handle problem that PO file has no text domain prefix
        
if( $prefix && 'default' !== $prefix && preg_match('/^[a-z]{2,3}(?:_[a-z\\d_]+)?$/i',$name) ){
            
$name $prefix.'-'.$name;
        }
        
// match .json files with same name as .po, suffixed with md5 hash.
        // note that JSON files are localised, so won't be found if PO has no locale suffix.
        
$regex '/^'.preg_quote($name,'/').'-[0-9a-f]{32}$/';
        
/* @var Loco_fs_File $file */
        
foreach( $finder->group('json')->exportGroups() as $files ) {
            foreach( 
$files as $file ){
                
$match $file->filename();
                if( 
$match === $name || preg_match($regex,$match) ) {
                    
$list->add($file);
                }
            }
        }
        
// append single json using our filter
        
$path apply_filters('loco_compile_single_json'''$this->po->getPath() );
        if( 
is_string($path) && '' !== $path && file_exists($path) ){
            
$list->add( new Loco_fs_File($path) );
        }

        return 
$list->getArrayCopy();
    }

}