','',$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'); } } ?>