Skip to content

Instantly share code, notes, and snippets.

@vladimir-light
Last active November 8, 2018 08:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vladimir-light/608315079aef5890c67b to your computer and use it in GitHub Desktop.
Save vladimir-light/608315079aef5890c67b to your computer and use it in GitHub Desktop.
FuelPHP lang-files to DB task (dirty)
<?php
/*
* @author Vladimir Leitenberger (vLight)
*/
namespace Fuel\Tasks;
class Langfiles2database
{
private static $_default_lang;
private static $_fallback_lang;
private static $_lang_table_nane;
/**
* RUN function.
* @param string $args lanc-code, i.e. 'ru'
* @return void
*/
public function run($args = NULL)
{
self::_init();
self::port_lang_files($args);
\Cli::write('All Complete', 'green');
}
/**
* Function to find and port all php-lang-files to DB
* @param string $args lanc-code, i.e. 'ru'
* @return void
*/
public function port_lang_files($lang = NULL)
{
null === $lang and $lang = '*';
$path = APPPATH.'lang/'. $lang . '/' . '*.php';
$files = new \GlobIterator($path);
if($files->count() > 0)
{
\Cli::write(__FUNCTION__ . ' > Total lang files found : '.$files->count() );
foreach ($files as $fullpath => $file)
{
if($file instanceof \SplFileInfo)
{
$parent_dir = $file->getPathInfo()->getBasename();
$filename = $file->getBasename( '.' . $file->getExtension() );
$files_to_process[ $parent_dir ][] = $filename;
}
}
}
else
{
\Cli::write(__FUNCTION__." > Nothing to convert in : {$path}", 'red');
return;
}
$succeed = array();
$counter = 0;
// dd($files_to_process);
foreach ($files_to_process as $lang => $files_list)
{
foreach ($files_list as $filename)
{
\Cli::write(__FUNCTION__." > working with {$lang}:{$filename}\n");
if(true === self::_does_exists($filename, $lang) )
{
\Cli::write(__FUNCTION__ ." > {$lang}:{$filename} already exists. Jumping to the next one...\n", 'orange');
continue;
}
//load lang file from APPPATH/lang/
if ( \Lang::load($filename, $filename, $lang, false, true) )
{
//try to save
$filename_suffix = '.db';
try
{
\Lang::save($filename . $filename_suffix, $filename, $lang); //i.e. $fulename = 'general' -> \Lang::save('general.db', 'general', 'de');
}
catch (Exception $e)
{
\Cli::error(__FUNCTION__ . " > Can't save {$filename}{$filename_suffix} into DB! Abborting...\n", "red");
return;
}
//check if exsists after \Lang::save and if Loading from DB was successefull
if( self::_does_exists($filename, $lang) && \Lang::load($filename . $filename_suffix, $filename, $lang, false, true) )
{
\Cli::write(__FUNCTION__ ." > moving of {$lang}:{$filename} to `" . self::$_lang_table_nane . "` was successefull\n", 'green');
// array_push($succeed, $filename . $filename_suffix);
$succeed[ $lang ][] = $filename . $filename_suffix;
++$counter;
}
}
else
{
\Cli::error(__FUNCTION__ . " > Can't load {$filename} into memory! Abborting...\n", "red");
}
}
}
\Cli::write(__FUNCTION__." > Totaly lang files ported : " . $counter, 'green');
\Cli::write(__FUNCTION__." > Complete\n", 'green');
}
/**
* Initialization method
* @access private
* @return void
*/
private function _init()
{
self::$_default_lang = \Config::get('language', 'en');
self::$_fallback_lang = \Config::get('language_fallback', 'en');
self::$_lang_table_nane = \Config::get('lang.table_name', 'lang');
}
/**
* checks if lang-group already exists
* @access private
* @param string $langfile language-file (a.k.a. language group)
* @param string $lang language code
* @return bool wheather or not the group ist already exists
*/
private function _does_exists($langfile, $lang)
{
try
{
$results = \DB::select()->
from( self::$_lang_table_nane )->
where('identifier', '=', $langfile)->
where('language', '=', $lang)->
execute();
}
catch (Exception $e)
{
\Cli::beep();
\Cli::error('Some DB problems...');
}
return !!$results->count();
}
}
/* End of file tasks/langfiles2database.php */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment