dvadf
File manager - Edit - /home/theblueo/tv/wp-includes/pomo/lib/init.tar
Back
InitPotController.php 0000666 00000012163 15214144411 0010713 0 ustar 00 <?php /** * pre-xgettext function. Initializes a new PO file for a given locale */ class Loco_admin_init_InitPotController extends Loco_admin_bundle_BaseController { /** * {@inheritdoc} */ public function init(){ parent::init(); $this->enqueueStyle('poinit'); // $bundle = $this->getBundle(); $this->set('title', __('New template','loco').' ‹ '.$bundle ); } /** * {@inheritdoc} */ public function getHelpTabs(){ return array ( __('Overview','default') => $this->view('tab-init-pot'), ); } /** * {@inheritdoc} */ public function render(){ $breadcrumb = $this->prepareNavigation(); // "new" tab is confising when no project-scope navigation // $this->get('tabs')->add( __('New POT','loco'), '', true ); $bundle = $this->getBundle(); $project = $this->getProject(); $slug = $project->getSlug(); $domain = (string) $project->getDomain(); $this->set('domain', $domain ); // Tokenizer required for string extraction if( ! loco_check_extension('tokenizer') ){ return $this->view('admin/errors/no-tokenizer'); } // Establish default POT path whether it exists or not $pot = $project->getPot(); while( ! $pot ){ $name = ( $slug ? $slug : $domain ).'.pot'; /* @var $dir Loco_fs_Directory */ foreach( $project->getConfiguredTargets() as $dir ){ $pot = new Loco_fs_File( $dir->getPath().'/'.$name ); break 2; } // unlikely to have no configured targets, but possible ... so default to standard $pot = new Loco_fs_File( $bundle->getDirectoryPath().'/languages/'.$name ); break; } // POT should actually not exist at this stage. It should be edited instead. if( $pot->exists() ){ throw new Loco_error_Exception( __('Template file already exists','loco') ); } // Bundle may deliberately lock template to avoid end-user tampering // it makes little sense to do so when template doesn't exist, but we will honour the setting anyway. if( $project->isPotLocked() ){ throw new Loco_error_Exception('Template is protected from updates by the bundle configuration'); } // Just warn if POT writing will fail when saved, but still show screen $dir = $pot->getParent(); // Avoiding full source scan until actioned, but calculate size to manage expectations $bytes = 0; $nfiles = 0; $nskip = 0; $largest = 0; $sources = $project->findSourceFiles(); // skip files larger than configured maximum $opts = Loco_data_Settings::get(); $max = wp_convert_hr_to_bytes( $opts->max_php_size ); /* @var $sourceFile Loco_fs_File */ foreach( $sources as $sourceFile ){ $nfiles++; $fsize = $sourceFile->size(); $largest = max( $largest, $fsize ); if( $fsize > $max ){ $nskip += 1; } else { $bytes += $fsize; } } $this->set( 'scan', new Loco_mvc_ViewParams( array ( 'bytes' => $bytes, 'count' => $nfiles, 'skip' => $nskip, 'size' => Loco_mvc_FileParams::renderBytes($bytes), 'large' => Loco_mvc_FileParams::renderBytes($max), 'largest' => Loco_mvc_FileParams::renderBytes($largest), ) ) ); // file metadata $this->set('pot', Loco_mvc_FileParams::create( $pot ) ); $this->set('dir', Loco_mvc_FileParams::create( $dir ) ); $title = __('New template file','loco'); $subhead = sprintf( __('New translations template for "%s"','loco'), $project ); $this->set('subhead', $subhead ); // navigate up to bundle listing page $breadcrumb->add( $title ); $this->set( 'breadcrumb', $breadcrumb ); // ajax service takes the target directory path $content_dir = loco_constant('WP_CONTENT_DIR'); $target_path = $pot->getParent()->getRelativePath($content_dir); // hidden fields to pass through to Ajax endpoint $this->set( 'hidden', new Loco_mvc_ViewParams( array( 'action' => 'loco_json', 'route' => 'xgettext', 'loco-nonce' => $this->setNonce('xgettext')->value, 'type' => $bundle->getType(), 'bundle' => $bundle->getHandle(), 'domain' => $project->getId(), 'path' => $target_path, 'name' => $pot->basename(), ) ) ); // File system connect required if location not writable if( ! $pot->creatable() ){ $path = $pot->getRelativePath($content_dir); $this->prepareFsConnect('create', $path ); } $this->enqueueScript('potinit'); return $this->view( 'admin/init/init-pot' ); } } BaseController.php 0000666 00000000000 15214144411 0010162 0 ustar 00 InitPoController.php 0000666 00000022653 15214144411 0010534 0 ustar 00 <?php /** * pre-msginit function. Prepares arguments for creating a new PO language file */ class Loco_admin_init_InitPoController extends Loco_admin_bundle_BaseController { /** * {@inheritdoc} */ public function init(){ parent::init(); $this->enqueueStyle('poinit'); // $bundle = $this->getBundle(); $this->set('title', __('New language','loco').' ‹ '.$bundle ); } /** * {@inheritdoc} */ public function getHelpTabs(){ return array ( __('Overview','default') => $this->view('tab-init-po'), ); } /** * {@inheritdoc} */ public function render(){ $breadcrumb = $this->prepareNavigation(); // "new" tab is confising when no project-scope navigation // $this->get('tabs')->add( __('New PO','loco'), '', true ); // bundle mandatory, but project optional $bundle = $this->getBundle(); try { $project = $this->getProject(); $slug = $project->getSlug(); $domain = (string) $project->getDomain(); $subhead = sprintf( __('Initializing new translations in "%s"','loco'), $slug?$slug:$domain ); } catch( Loco_error_Exception $e ){ $project = null; $subhead = __('Initializing new translations in unknown set','loco'); } $title = __('New language','loco'); $this->set('subhead', $subhead ); // navigate up to bundle listing page $breadcrumb->add( $title ); $this->set( 'breadcrumb', $breadcrumb ); // default locale is a placeholder $locale = new Loco_Locale('zxx'); $content_dir = rtrim( loco_constant('WP_CONTENT_DIR'), '/' ); $copying = false; // Permit using any provided file a template instead of POT if( $potpath = $this->get('source') ){ $potfile = new Loco_fs_LocaleFile($potpath); $potfile->normalize( $content_dir ); if( ! $potfile->exists() ){ throw new Loco_error_Exception('Forced template argument must exist'); } $copying = true; // forced source could be a POT (although UI would normally prevent it) if( $potfile->getSuffix() ){ $locale = $potfile->getLocale(); $this->set('sourceLocale', $locale ); } } // else project not configured. UI should prevent this by not offering msginit else if( ! $project ){ throw new Loco_error_Exception('Cannot add new language to unconfigured set'); } // else POT file may or may not be known, and may or may not exist else { $potfile = $project->getPot(); } // start dropdown list with installed languages $default = new Loco_Locale('en','US'); $installed = array( new Loco_mvc_ViewParams( array( 'icon' => $default->getIcon(), 'value' => (string) $default, 'label' => $default->buildName(), ) ) ); // pull the same list of "available" languages as used in WordPress settings $api = new Loco_api_WordPressTranslations; $locales = array(); foreach( $api->getAvailableCore() as $tag => $raw ){ $locale = Loco_Locale::parse($tag); $vparam = new Loco_mvc_ViewParams( array( 'icon' => $locale->getIcon(), 'value' => (string) $locale, 'label' => $locale->fetchName($api), ) ); if( $api->isInstalled($tag) ){ $installed[] = $vparam; } else { $locales[] = $vparam; } } $this->set( 'locales', $locales ); $this->set( 'installed', $installed ); // Critical that user selects the correct save location: if( $project ){ $filechoice = $project->initLocaleFiles( $locale ); } // without configured project we will only allow save to same location else { $filechoice = new Loco_fs_FileList; } // show information about POT file if we are initialializing from template if( $potfile && $potfile->exists() ){ $meta = Loco_gettext_Metadata::load($potfile); $total = $meta->getTotal(); $summary = sprintf( _n('One string found in %2$s','%s strings found in %s',$total,'loco'), number_format($total), $potfile->basename() ); $this->set( 'pot', new Loco_mvc_ViewParams( array( 'name' => $potfile->basename(), 'path' => $meta->getPath(false), ) ) ); // if copying an existing PO file, we can fairly safely establish the correct prefixing if( $copying ){ $poname = ( $prefix = $potfile->getPrefix() ) ? sprintf('%s-%s.po',$prefix,$locale) : sprintf('%s.po',$locale); $pofile = new Loco_fs_LocaleFile( $poname ); $pofile->normalize( $potfile->dirname() ); $filechoice->add( $pofile ); } /// else if POT is in a folder we don't know about, we may as well add to the choices // TODO this means another utilty function in project for prefixing rules on individual location } // else no template exists, so we prompt to extract from source else { $this->set( 'ext', new Loco_mvc_ViewParams( array( 'link' => Loco_mvc_AdminRouter::generate( $this->get('type').'-xgettext', $_GET ), 'text' => __('Create template','loco'), ) ) ); // if forcing source extraction show brief description of source files if( $this->get('extract') ){ // Tokenizer required for string extraction if( ! loco_check_extension('tokenizer') ){ return $this->view('admin/errors/no-tokenizer'); } $nfiles = count( $project->findSourceFiles() ); $summary = sprintf( _n('1 source file will be scanned for translatable strings','%s source files will be scanned for translatable strings',$nfiles,'loco'), number_format_i18n($nfiles) ); } // else prompt for template creation before continuing else { $this->set( 'skip', new Loco_mvc_ViewParams( array( 'link' => Loco_mvc_AdminRouter::generate( $this->get('_route'), $_GET + array( 'extract' => '1' ) ), 'text' => __('Skip template','loco'), ) ) ); // POT could still be defined, it might just not exist yet if( $potfile ){ $this->set('pot', Loco_mvc_FileParams::create($potfile) ); } return $this->view('admin/init/init-prompt'); } } $this->set( 'summary', $summary ); // group established locations into types (offical, etc..) // there is no point checking whether any of these file exist, because we don't know what language will be chosen yet. $locations = array(); $preferred = null; /* @var $pofile Loco_fs_File */ foreach( $filechoice as $pofile ){ $parent = new Loco_fs_LocaleDirectory( $pofile->dirname() ); $typeId = $parent->getTypeId(); if( ! isset($locations[$typeId]) ){ $locations[$typeId] = new Loco_mvc_ViewParams( array( 'label' => $parent->getTypeLabel( $typeId ), 'paths' => array(), ) ); } // lazy build of directory path, suppressing errors if( ! $parent->exists() ){ try { $parent->mkdir(); } catch( Exception $e ){ // Loco_error_AdminNotices::warn( $e->getMessage() ); } } $params = new Loco_mvc_ViewParams( array ( 'locked' => ! $parent->writable(), 'parent' => Loco_mvc_FileParams::create( $parent ), 'hidden' => $pofile->getRelativePath($content_dir), 'holder' => str_replace( (string) $locale, '<span><locale></span>', $pofile->basename() ), ) ); // use first writable (or createable) location as default option if( is_null($preferred) && ! $params['locked'] ){ $preferred = $pofile; $params['checked'] = 'checked'; } $locations[$typeId]['paths'][] = $params; } $this->set( 'locations', $locations ); // hidden fields to pass through to Ajax endpoint $this->set('hidden', new Loco_mvc_ViewParams( array( 'action' => 'loco_json', 'route' => 'msginit', 'loco-nonce' => $this->setNonce('msginit')->value, 'type' => $bundle->getType(), 'bundle' => $bundle->getHandle(), 'domain' => $project ? $project->getId() : '', 'source' => $this->get('source'), ) ) ); // file system prompts will be handled when paths are selected (i.e. we don't have one yet) $this->prepareFsConnect( 'create', '' ); $this->enqueueScript('poinit'); return $this->view( 'admin/init/init-po', array() ); } } init-pot.php 0000666 00000004175 15214165172 0007037 0 ustar 00 <?php /** * Initialize a new POT template file */ $this->extend('../layout'); $help = apply_filters('loco_external','https://localise.biz/wordpress/plugin/manual/templates'); ?> <div class="notice inline notice-generic"> <h2><?php $params->e('subhead')?></h2> <p> <?php esc_html_e('Source files to scan:','loco-translate')?> <strong><?php $scan->n('count')?></strong> <span>(<?php // Translators: Where %s is the size of a file $scan->f( 'size', __('%s on disk','loco-translate') );?>, <?php // Translators: Where %s is the size of a file $scan->f( 'largest', __('largest is %s','loco-translate') )?>)</span> </p><?php if( $n = $scan->skip ):?> <p> <em><?php // Translators: Where %2$s is the size of a file self::e( _n('Excludes one file over %2$s','Excludes %s files over %2$s',$n,'loco-translate'), $n, $scan->large )?>. <a class="icon icon-help" href="<?php echo esc_url(apply_filters('loco_external','https://localise.biz/wordpress/plugin/faqs/skipped-files'))?>" target="_blank"><span class="screen-reader-text">Help</span></a> </em> </p><?php endif?> <p> <?php esc_html_e('Strings will be extracted to:','loco-translate')?> <code class="path"><?php $pot->e('relpath')?></code> </p> <form action="" method="post" enctype="application/x-www-form-urlencoded" id="loco-potinit"><?php foreach( $hidden as $name => $value ):?> <input type="hidden" name="<?php echo $name?>" value="<?php $hidden->e($name)?>" /><?php endforeach;?> <p class="submit"> <button type="submit" class="button button-large button-primary" disabled><?php esc_html_e('Create template','loco-translate')?></button> <a href="<?php echo esc_url($help)?>" class="button button-large button-link" target="_blank"><?php esc_html_e('About templates','loco-translate')?></a> </p> </form> </div> init-po.php 0000666 00000022107 15214165172 0006646 0 ustar 00 <?php /** * Initialize a new PO translations file */ $this->extend('../layout'); // warn if doing direct extraction /* @var Loco_mvc_ViewParams $ext */ if( $params->has('ext') ):?> <div class="notice inline notice-info"> <p> <?php esc_html_e("You're creating translations directly from source code",'loco-translate')?>. <a href="<?php $ext->e('link')?>"><?php esc_html_e('Create template instead','loco-translate')?></a>. </p> </div><?php endif; /*/ warning to show/hide when locations are marked unsafe if( $params->has('fsNotice') ):?> <div id="loco-fs-info" class="has-nav notice inline notice-info jshide"> <p> <strong class="has-icon"><?php esc_html_e('Warning','loco-translate')?>:</strong> <span><?php $params->e('fsNotice')?>.</span> </p> <nav> <a href="<?php echo $help?>#locations" target="_blank"><?php esc_html_e('Documentation','loco-translate')?></a> <span>|</span> <a href="<?php $this->route('config')->e('href')?>#loco--fs-protect"><?php esc_html_e('Settings','loco-translate')?></a> </nav> </div><?php endif*/?> <div class="notice inline notice-generic"> <h2><?php $params->e('subhead')?></h2> <p><?php $params->e('summary')?></p> <form action="" method="post" enctype="application/x-www-form-urlencoded" id="loco-poinit"><?php /* @var Loco_mvc_HiddenFields $hidden */ $hidden->_e();?> <table class="form-table"> <tbody class="loco-locales"> <tr valign="top"> <th scope="row"> <label for="loco-select-locale"> 1. <?php esc_html_e('Choose a language','loco-translate')?>: </label> </th> <td> <fieldset> <label for="loco-use-selector-1"> <span><input type="radio" name="use-selector" value="1" checked id="loco-use-selector-1" /></span> <?php esc_attr_e('WordPress language','loco-translate')?>: </label> <div> <span class="lang nolang"></span> <select id="loco-select-locale" name="select-locale"> <option value=""><?php esc_attr_e('No language selected','loco-translate')?></option> <optgroup label="<?php esc_attr_e( 'Installed languages', 'loco-translate' )?>"><?php /* @var Loco_mvc_ViewParams[] $installed */ foreach( $installed as $option ):?> <option value="<?php $option->e('value')?>" data-icon="<?php $option->e('icon')?>"><?php $option->e('label')?></option><?php endforeach;?> </optgroup> <optgroup label="<?php esc_attr_e( 'Available languages', 'loco-translate' )?>"><?php /* @var Loco_mvc_ViewParams[] $locales */ foreach( $locales as $option ):?> <option value="<?php $option->e('value')?>" data-icon="<?php $option->e('icon')?>"><?php $option->e('label')?></option><?php endforeach;?> </optgroup> </select> </div> </fieldset> <fieldset class="disabled"> <label for="loco-user-selector-0"> <span><input type="radio" name="use-selector" value="0" /></span> <?php esc_attr_e('Custom language','loco-translate')?>: </label> <div> <span class="lang nolang"></span> <span class="loco-clearable"><input type="text" maxlength="14" name="custom-locale" value="" /></span> </div> </fieldset> </td> </tr> </tbody> <tbody class="loco-paths"> <tr valign="top"> <th scope="row"> <label> 2. <?php esc_html_e('Choose a location','loco-translate')?>: </label> </th> <td> <a href="<?php $help->e('href')?>#locations" class="has-icon icon-help" target="_blank" tabindex="-1"><?php $help->e('text')?></a> </td> </tr><?php $choiceId = 0; /* @var Loco_mvc_ViewParams[] $locations */ foreach( $locations as $typeId => $location ):?> <tr class="compact"> <td> <p class="description"><?php $location->e('label')?>:</p> </td> <td><?php /* @var Loco_mvc_FileParams $choice */ /* @var Loco_mvc_FileParams $parent */ foreach( $location['paths'] as $choice ): $parent = $choice['parent']; $offset = sprintf('%u',++$choiceId);?> <p><?php if( $choice->disabled ):?> <label class="for-disabled"> <span class="icon icon-lock"></span> <input type="radio" name="select-path" class="disabled" disabled /><?php else:?> <label> <input type="radio" name="select-path" value="<?php echo $offset?>" <?php echo $choice->checked?> /> <input type="hidden" name="path[<?php echo $offset?>]" value="<?php $choice->e('hidden')?>" /><?php endif?> <code class="path"><?php $parent->e('relpath')?>/<?php echo $choice->holder?></code> </label> </p><?php endforeach?> </td> </tr><?php endforeach;?> </tbody><?php if( $params->has('sourceLocale') ):?> <tbody> <tr valign="top"> <th scope="row" rowspan="3"> 3. <?php esc_html_e('Template options','loco-translate')?>: </th> <td> <a href="<?php $help->e('href')?>#copy" class="has-icon icon-help" target="_blank" tabindex="-1"><?php $help->e('text')?></a> </td> </tr> <tr valign="top" class="compact"> <td> <p> <label> <input type="radio" name="strip" value="" /> <?php $params->f('sourceLocale', __('Copy target translations from "%s"','loco-translate') )?> </label> </p> <p> <label> <input type="radio" name="strip" value="1" checked /> <?php esc_html_e('Just copy English source strings','loco-translate')?> </label> </p> </td> </tr> <tr valign="top" class="compact"> <td> <p> <label> <input type="checkbox" name="link" value="1" /> <?php $params->f('sourceLocale',__('Use "%s" as template when running Sync','loco-translate') )?> </label> </p> </td> </tr> </tbody><?php endif?> </table> <p class="submit"> <button type="submit" class="button button-large button-primary" disabled><?php esc_html_e('Start translating','loco-translate')?></button> </p> </form> </div>