function htmltransformer_lang($str)
{
//
$str=str_replace('','',$str);
$str=str_replace('','',$str);
$str=str_replace('','',$str);
$str=str_replace('','',$str);
$str=html_entity_decode($str);
/*$str=str_replace('','',$str);
$str=str_replace('','',$str);
$str=str_replace('','',$str);
$str=str_replace('','',$str);*/
// вырезать все кроме
//$str = strip_tags($str, '
');
return $str;
}
/**
* Языки
*
*/
class QLanguage extends Qubix
{
/**
* Создание дерева данных для вывода в флеш
*
* @param unknown_type $data
* @return unknown
*/
function full_data($data)
{
global $qubix_data;
$ct=new QCategory();
$exm=new QExemplar();
$qct=new QComplex_type();
$qinm = new QInmail();
$list=null;
foreach($data as $order => $cat)
{
;
$current=$cat['order_in_parent_category'];
if($cat['childNodes']!=null) $list['cat'][$current]=$this->full_data($cat['childNodes']);
if($cat['complex_type_id']!=null)
{
$category=$ct->fread($cat['category_id']);
foreach ($category as $order => $element){
if($element['content']['type']=='text') $category[$order]['content']['content']=htmltransformer_lang($element['content']['content']);
if(!isset($list['cat'][$current]['content'][$element['content']['type']]))
$list['cat'][$current]['content'][$element['content']['type']][1]=$element['content']['content'];
else
$list['cat'][$current]['content'][$element['content']['type']][]=$element['content']['content'];
}
}
$exemplars=$exm->get_list_in_category($cat['category_id']);
$list['cat'][$current]['translated']=$cat['translated'];
foreach ($exemplars as $exemplar)
{
$fexemp=$exm->fread($exemplar['exemplar_id']);
$list['cat'][$current][$exemplar['complex_type_site_name']][$exemplar['order_in_category']]['name']=$exemplar['exemplar_name'];
foreach ($fexemp as $order => $element)
{
if($element['type']=='text') $element['content']=htmltransformer_lang($element['content']);
if(!isset($list['cat'][$current][$exemplar['complex_type_site_name']][$exemplar['order_in_category']][$element['type']]))
$list['cat'][$current][$exemplar['complex_type_site_name']][$exemplar['order_in_category']][$element['type']][1]=$element['content'];
else
$list['cat'][$current][$exemplar['complex_type_site_name']][$exemplar['order_in_category']][$element['type']][]=$element['content'];
}
}
$mail_rows = $qinm->get_by_field('category_id', $cat['category_id']);
$inmail_content = array();
// $i = 1;
foreach($mail_rows as $mail_row)
{
if ($qubix_data['user']['id'] == $mail_row['from_user_id'])
{
$type_content = "outcoming";
}
elseif ($qubix_data['user']['id'] == $mail_row['to_user_id'])
{
$type_content = "incoming";
}
else
{
continue;
}
$complex_type_name = $qct->get_flash_name($mail_row['complex_type_id']);
$last_el = count($inmail_content[$type_content][$complex_type_name]);
$cur_el = $last_el + 1;
$inmail_content[$type_content][$complex_type_name][$cur_el] = $qinm->read_content($mail_row['inmail_id']);
}
$list['cat'][$current]['publication']=$cat['publication'];
$list['cat'][$current]['name']=$cat['category_name'];
$list['cat'][$current]['url']=$cat['category_url'];
$list['cat'][$current]['cat_amount']=count($cat['childNodes']);
$list['cat'][$current]['incoming'] = $inmail_content['incoming'];
$list['cat'][$current]['outcoming'] = $inmail_content['outcoming'];
}
return $list;
}
/**
* Прочитать для флеша
*
* @param unknown_type $language_name - имя языка во флеше
* @return unknown
*/
function fread($language_name)
{
$file = QS_ROOT."/files/data/cache/".$this->get_id($language_name);
if (!is_file($file)) $this->cache_data();
$fp = @fopen($file, "rb");
@flock($fp, LOCK_SH);
if ($fp)
{
$length = @filesize($file);
$data = @fread($fp, $length);
}
@flock($fp, LOCK_UN);
@fclose($fp);
return unserialize($data);
}
/**
* Очистить кеш
*
*/
function clear_cache()
{
global $qubix_data;
$qbx = new QInstall();
$configs = $qbx->get_config();
$sinh = $configs['langmode'];
if ($sinh == 'asinh')
{
// Если нет синхронизации контента то при очистке кеша удаляем
// только файл редактируемого языка
$file = QS_ROOT."/files/data/cache/".$qubix_data['data']['language_id'];
if(is_file($file)) unlink($file);
}
else
{
// Если включена синхронизация контента
// то удаляем кеш во всех имеющихся языках
$langs = $this->get_list();
foreach ($langs as $lang)
{
$file = QS_ROOT . '/files/data/cache/'.$lang['language_id'];
if(is_file($file)) unlink($file);
}
}
}
/**
* Кешировать данные
*
*/
function cache_data()
{
$cat=new QCategory;
$ls=$this->get_list();
foreach ($ls as $lang){
$data=serialize($this->full_data($cat->get_list($lang["language_id"])));
$file=QS_ROOT."/files/data/cache/".$lang["language_id"];
$fp = @fopen($file, "wb");
if ($fp) {
@flock($fp, LOCK_EX);
$len = strlen($data);
@fwrite($fp, $data, $len);
@flock($fp, LOCK_UN);
@fclose($fp);
}
}
}
/**
* Скопировать дерево данных
*
* @param unknown_type $d_lang - язык назначения
* @param unknown_type $tree - дерево данных
* @param unknown_type $parentnode - родительский узел
*/
function copytree($d_lang,$tree,$parentnode)
{
foreach ($tree as $order => $cat){
$newcat=$cat;
unset($newcat['category_id']);
unset($newcat['childNodes']);
$newcat['parent_category_id']=$parentnode;
$newcat['translated']=0;
$newcat['language_id']=$d_lang;
$newcategory_id=$this->db->query('INSERT INTO category SET ?a', $newcat);
// КОПИРОВАНИЕ описания категории
if($cat['complex_type_id']!=null){
$ct=new QComplex_type();
$ct->copy_content($cat['category_id'],$newcategory_id,'category');
}
// копивание экземпляров категории
$exempl= new QExemplar();
$exempl->copy_all_in_category($cat['category_id'],$newcategory_id);
if($cat['childNodes']!=null) $this->copytree($d_lang,$cat['childNodes'],$newcategory_id);
}
}
/**
* Скопировать все данные из одного языка в друго
*
* @param unknown_type $s_lang - язык источник
* @param unknown_type $d_lang - язык назначения
*/
function copy($s_lang,$d_lang)
{
$cat=new QCategory();
// дерево категорий в старом языке
$tree=$cat->get_list($s_lang);
$this->copytree($d_lang,$tree,null);
$this->clear_cache();
}
/**
* Создать язык
*
* @param unknown_type $data
* @param unknown_type $s_lang - язык источник, если не null,
* то все дерево данных от категорий до экземляров копируются
* из этого языка во вновь созданный
*/
function add($data,$s_lang=null)
{
// data[language_name]
$order = $this->db->query('SELECT language_order FROM language ORDER BY language_order DESC');
if ($order != null)
{
$data['language_order'] = $order[0]['language_order']+1;
}
else
{
$data['language_order'] = 1;
}
$d_lang = $this->db->query('INSERT INTO language SET ?a', $data);
if ($s_lang != null)
{
$this->copy($s_lang,$d_lang);
}
}
/**
* Редактировать язык
*
* @param unknown_type $data
*/
function edit($data)
{
$this->db->query('UPDATE language SET ?a WHERE language_id=?',$data,$data['language_id']);
$this->clear_cache();
}
/**
* Взять id языка зная его
*
* @param unknown_type $lang_name site_name
* @return unknown
*/
function get_id($lang_name)
{
$result=$this->db->selectRow('SELECT * FROM language WHERE site_name=?',$lang_name);
return $result['language_id'];
}
/**
* Прочитать информацию о языке
*
* @param unknown_type $lang_id
* @return array
*/
function read($lang_id)
{
$result=$this->db->selectRow('SELECT * FROM language WHERE language_id=?',$lang_id);
return $result;
}
/**
* Удалить язык
*
* @param unknown_type $language_id
*/
function delete($language_id)
{
// удалять, только если языков больше одного
if(count($this->get_list())>1){
// найти все категории в корне и данном языке, и удалить их
$categorys=$this->db->select('SELECT * FROM category WHERE language_id=? AND parent_category_id IS NULL',$language_id);
$qcat=new QCategory();
foreach ($categorys as $category) $qcat->delete($category['category_id']);
// удалить язык
$this->db->query('DELETE FROM language WHERE language_id=?',$language_id);
}
$this->clear_cache();
}
/**
* Взять список языков
*
* @return array
*/
function get_list()
{
return $this->db->select('SELECT * FROM language');
}
}
?>