<?php /** * File upload initializer. * Uploads a PO file to the bundle and compiles MO. */ class Loco_admin_init_UploadController extends Loco_admin_bundle_BaseController { /** * {@inheritdoc} **/ public function init() { parent::init(); // Use Ajax controller for standard postback if( $this->checkNonce('upload') ){ try { $ctrl = new Loco_ajax_UploadController; $ctrl->_init($_POST); $href = $ctrl->process( Loco_mvc_PostParams::get() ); if( wp_redirect($href) ){ exit; } } catch( Exception $e ){ Loco_error_AdminNotices::add( Loco_error_Exception::convert($e) ); } } // Set page title before render sets inline title $bundle = $this->getBundle(); $this->set('title', __('Upload','loco-translate').' &lsaquo; '.$bundle->getName() ); } /** * {@inheritdoc} */ public function render(){ // file upload requires a properly configured project $bundle = $this->getBundle(); $project = $this->getProject(); $fields = new Loco_mvc_HiddenFields( [ 'path' => '', 'auth' => 'upload', 'type' => $bundle->getType(), 'domain' => $project->getId(), 'bundle' => $bundle->getHandle(), ] ); $fields->setNonce('upload'); $this->set('hidden',$fields); $this->prepareFsConnect('upload',''); // standard bundle navigation with link back to overview $breadcrumb = $this->prepareNavigation(); $breadcrumb->add( __('Upload a translation file','loco-translate') ); $this->set( 'breadcrumb', $breadcrumb ); // we won't know the locale until the file is uploaded, so use a dummy for location choice $locale = new Loco_Locale('zxx'); $filechoice = $this->getProject()->initLocaleFiles($locale); // $locations = []; /* @var Loco_fs_LocaleFile $pofile */ foreach( $filechoice as $pofile ){ // initialize location type (system, etc..) $parent = new Loco_fs_LocaleDirectory( $pofile->dirname() ); $typeId = $parent->getTypeId(); if( ! isset($locations[$typeId]) ){ $locations[$typeId] = new Loco_mvc_ViewParams( [ 'label' => $parent->getTypeLabel($typeId), 'paths' => [], ] ); } $locations[$typeId]['paths'][] = new Loco_mvc_ViewParams( [ 'parent' => Loco_mvc_FileParams::create($parent), 'holder' => str_replace('zxx.po','{locale}</span>.po', $pofile->basename() ), ] ); } // we don't know what the specifics will be until a location is chosen and a file is presented. $this->set('locale',get_locale()); $this->set('locations', $locations ); // file upload will be done via ajax if possible $settings = Loco_data_Settings::get(); $this->set('js',new Loco_mvc_ViewParams( [ 'multipart' => (bool) $settings->ajax_files, 'nonces' => [ 'upload' => $fields->getNonce() ], ] ) ); $this->enqueueScript('upload'); return $this->view('admin/init/upload'); } }