Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
firepot
/
wp-content
/
plugins
/
woocommerce-jetpack
/
src
/
fs
:
Siblings-20241225062800.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?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 __construct( Loco_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(); } }