<?php/**
* Content Internationalization API
*
* @package I18n
* @copyright (c) Cotonti Team
* @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
*/defined('COT_CODE') or die('Wrong URL');require_once cot_langfile('i18n','plug');require_once cot_incfile('i18n','plug','resources');cot::$db->registerTable('i18n_locales');cot::$db->registerTable('i18n_pages');cot::$db->registerTable('i18n_structure');/**
* Builds internationalized category path
*
* @param string $area Area code
* @param string $cat Category code
* @param string $locale Locale code
* @return string
*/function cot_i18n_build_catpath($area,$cat,$locale){global$structure,$cfg,$i18n_structure;$tmp=array();$pathcodes=explode('.',$structure[$area][$cat]['path']);foreach($pathcodesas$k=>$x){if($x!='system'){if(empty($i18n_structure[$x][$locale]['title'])){$title=$structure[$area][$x]['title'];$url= cot_url($area,'c='.$x);}else{$title=$i18n_structure[$x][$locale]['title'];$url= cot_url($area,'c='.$x.'&l='.$locale);}$tmp[]=array($url,$title);}}return$tmp;}/**
* Checks if internationalization is enabled in a selected category
*
* @param string $cat Category code
* @return bool TRUE if enabled, FALSE if not
*/function cot_i18n_enabled($cat){global$cfg,$structure; static $i18n_cats=false;if(!$i18n_cats){// Get configured cats$i18n_cats=explode(',',$cfg['plugin']['i18n']['cats']);$i18n_cats=array_map('trim',$i18n_cats);}returnin_array(cot_structure_parents('page',$cat,'first'),$i18n_cats);}/**
* Fetches translation row for a specific category
*
* @param string $cat Category code
* @param string $locale Locale code
* @return mixed Category translation row or FALSE if not found
*/function cot_i18n_get_cat($cat,$locale){global$i18n_structure;returnisset($i18n_structure[$cat][$locale]) ? $i18n_structure[$cat][$locale]:false;}/**
* Fetches translation row for a specific page
*
* @param int $page_id Page ID
* @param string $locale Locale code
* @return mixed Page translation row (array) on success or FALSE on error
* @global CotDB $db
*/function cot_i18n_get_page($page_id,$locale){global$db,$db_i18n_pages;$res=$db->query("SELECT * FROM $db_i18n_pages WHERE ipage_id = ? AND ipage_locale = ?",array((int)$page_id,$locale));return$res->rowCount()==1 ? $res->fetch():false;}/**
* Returns a list of all locales available for a category
*
* @param string $cat Category code
* @return array List of locale codes
*/function cot_i18n_list_cat_locales($cat){global$i18n_structure;return(isset($i18n_structure[$cat])&&is_array($i18n_structure[$cat])) ? array_keys($i18n_structure[$cat]):array();}/**
* Returns a list of all locales available for a specific page
*
* @param int $page_id Page ID
* @return array List of locale codes
* @global CotDB $db
*/function cot_i18n_list_page_locales($page_id){global$db,$db_i18n_pages;$res=$db->query("SELECT DISTINCT ipage_locale FROM $db_i18n_pages WHERE ipage_id = ?",array((int)$page_id));return$res->fetchAll(PDO::FETCH_COLUMN,0);}/**
* Loads registered locales
*
* @global array $i18n_locales Available locale data
* @global CotDB $db
*/function cot_i18n_load_locales(){global$db,$cfg,$i18n_locales;$lines=preg_split('#\r?\n#',$cfg['plugin']['i18n']['locales']);foreach($linesas$line){$lc=explode('|',$line);$lc=array_map('trim',$lc);if(!empty($lc[0])&&!empty($lc[1])){$i18n_locales[$lc[0]]=$lc[1];}}}/**
* Loads structure internationalization data
*
* @global array $i18n_structure Structure localizations
* @global CotDB $db
*/function cot_i18n_load_structure(){global$db,$db_i18n_structure,$i18n_structure;$res=$db->query("SELECT * FROM $db_i18n_structure");while($row=$res->fetch()){$i18n_structure[$row['istructure_code']][$row['istructure_locale']]=array('title'=>$row['istructure_title'],'desc'=>$row['istructure_desc']);}$res->closeCursor();}/**
* Saves a translation for an item
*
* @param string $table_name Table name
* @param string $field Column name
* @param int $item Item ID
* @param string $locale Locale code
* @param string $text Translated text
* @param bool $riched A flag that indicates that a field requires rich text editor
* @return bool
* @global CotDB $db
*/function cot_i18n_save($table_name,$field,$item,$locale,$text,$riched=false){global$db,$db_i18n_translations;$res=$db->query("INSERT INTO $db_i18n_translations (tr_table, tr_field, tr_item, tr_locale, tr_text, tr_riched)
VALUES (?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE tr_text = ?",array($table_name,$field,(int)$item,$locale,$text,$riched,$text));return$res->rowCount()==1;}