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 
<?php
/* --------------------------------------------------------------
   LanguageHelper.inc.php 2016-01-19
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2016 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

MainFactory::load_class('LanguageHelperInterface');

/**
 * Class LanguageHelper
 *
 * @category   System
 * @package    Extensions
 * @subpackage Helpers
 */
class LanguageHelper implements LanguageHelperInterface, CrossCuttingObjectInterface
{
    /**
     * Database connector.
     * @var CI_DB_query_builder
     */
    protected $db;
    
    
    /**
     * LanguageHelper constructor.
     *
     * @param CI_DB_query_builder $db
     */
    public function __construct(CI_DB_query_builder $db)
    {
        $this->db = $db;
    }
    
    
    /**
     * @override
     */
    public function getLanguageCodeById(IdType $id)
    {
        $result = $this->db->select('code')->where('languages_id', (string)$id->asInt())->get('languages');
        
        if($result->num_rows() === 0)
        {
            throw new InvalidArgumentException('Unknown language ID: ' . (int)$id);
        }
        
        $languageCodeArray = $result->row_array();
        $languageCode      = new LanguageCode(new NonEmptyStringType($languageCodeArray['code']));
        
        return $languageCode;
    }
    
    
    /**
     * @override
     */
    public function getLanguageCodes(BoolType $onlyActiveLanguages = null)
    {
        if($onlyActiveLanguages === null)
        {
            $onlyActiveLanguages = new BoolType(false);
        }
        $languageArray = array();
        
        $result = $this->db->select(array('languages_id', 'code'));
        
        if($onlyActiveLanguages->asBool())
        {
            $result->where('status', '1');
        }
        $result = $result->get('languages');
        
        foreach($result->result_array() as $row)
        {
            $languageArray[$row['languages_id']] = new LanguageCode(new NonEmptyStringType($row['code']));
        }
        
        $languageCollection = new KeyValueCollection($languageArray);
        
        return $languageCollection;
    }
    
    
    public function getActiveLanguageCodes()
    {
        return $this->getLanguageCodes(new BoolType(true));
    }
}