function translation_statistics_category_lang($lang) { $list=array(); $sql_str="select category.* from category_current left join category on category_current.version=category.version"; $res=sql_query($sql_str); while($elem=pg_fetch_assoc($res)) { $tags=new tags(parse_hstore($elem['tags'])); $cat_lang=coalesce($tags->get("lang"), "en"); if(($s=$tags->get("name:$lang"))||(($s=$tags->get("name"))&&$lang==$cat_lang)) $list["category:{$elem['category_id']}:name"]=$s; if(($s=$tags->get("description:$lang"))||(($s=$tags->get("description"))&&$lang==$cat_lang)) $list["category:{$elem['category_id']}:description"]=$s; $sql_str="select * from category_rule where version='{$elem['version']}'"; $res_r=sql_query($sql_str); while($elem_r=pg_fetch_assoc($res_r)) { $tags_r=new tags(parse_hstore($elem_r['tags'])); if(($s=$tags_r->get("name:$lang"))||(($s=$tags_r->get("name"))&&$lang==$cat_lang)) $list["category:{$elem['category_id']}:{$elem_r['rule_id']}:name"]=$s; } } return $list; }
$cat->set("lang", "en"); if(preg_match("/lang_str\[\".*\"\]=\[ (\".*\", )?\"(.*)\" \];/", $r, $m)) { $cat->set("name", $m[2]); } else { $cat->set("name", $cat_id); } foreach(array("de", "it", "ja") as $lang) { $f=popen("grep 'cat:$cat_id' $root_path/www/lang/$lang.js", "r"); $r=fgets($f); pclose($f); if(preg_match("/lang_str\[\".*\"\]=\[ (\".*\", )?\"(.*)\" \];/", $r, $m)) { if($cat->get("name")!=$m[2]) $cat->set("name:$lang", $m[2]); } } if(preg_match("/\//", $cat_id)) $cat->set("hide", "yes"); $list=array(); foreach($list_category as $sub_cat_id=>$sub_cat_data) { if((substr($sub_cat_id, 0, strlen($cat_id))==$cat_id)&& (substr_count($sub_cat_id, "/")-substr_count($cat_id, "/")==1)) { $list[]=strtr($sub_cat_id, array("/"=>"_")); } }
<?php // +---------------------------------------------------------------------- // | Demila [ Beautiful Digital Content Trading System ] // +---------------------------------------------------------------------- // | Copyright (c) 2015 http://demila.org All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Email author@demila.org // +---------------------------------------------------------------------- _setView(ROOT_PATH . "/apps/" . $_GET['m'] . "/admin/add.php"); _setTitle($langArray['edit']); if (!isset($_GET['id']) || !is_numeric($_GET['id'])) { refresh('?m=' . $_GET['m'] . '&c=list', 'INVALID ID', 'error'); } $cms = new tags(); if (isset($_POST['edit'])) { $status = $cms->edit($_GET['id']); if ($status !== true) { abr('error', $status); } else { refresh("?m=" . $_GET['m'] . "&c=list", $langArray['edit_complete']); } } else { $_POST = $cms->get($_GET['id']); } require_once ROOT_PATH . '/apps/lists/leftlist_admin.php';
function category_save($request_id, $content, $param=array()) { global $db_central; global $current_user; // Create a sql-statement to import whole category in one transaction $sql="begin;"; // Load file into $file $file=new DOMDocument(); if(!($file->loadXML($content))) { return array("status"=>"Could not load data"); } // Calculate a new version ID $version=uniqid(); // read main tags $tags=new tags(); $root=$file->firstChild; $tags->readDOM($root); // compile version tags $version_tags=new tags(); $version_tags->set("user", $current_user->username); $version_tags->set("date", Date("c")); $version_tags->set("msg", $param['msg']); if(($current_user->tags->get("admin")=="yes")&&($param['lock']=="yes")) $version_tags->set("lock", "yes"); // and old version $old_version=$root->getAttribute("version"); if(!$old_version) $pg_old_version="null"; else $pg_old_version="Array[".postgre_escape($old_version)."]"; // check what we want as new id $new_id=$tags->get("id"); if(!$new_id) $new_id=$request_id; if(!$new_id) $new_id="cat_{$version}"; // is id available? $res=sql_query("select * from category_current where category_id=".postgre_escape($new_id), $db_central); if(($elem=pg_fetch_assoc($res))&&($elem['version']!=$old_version)) { // already taken by another category - we should include a message $tags->set("id:message", "ID '$new_id' has already been taken"); $id="cat_{$version}"; } else { $id=$new_id; } if($old_version&&($id==$tags->get("id"))) { $res=sql_query("select * from category where version=".postgre_escape($old_version), $db_central); $old_cat=pg_fetch_assoc($res); $old_version_tags=parse_hstore($old_cat['version_tags']); if(($old_version_tags['lock'])&&($current_user->tags->get("admin")!="yes")) { // category is locked and we are not admin $tags->set("id:message", "Category '$id' is locked."); $id="cat_{$version}"; } } // add id to tags $tags->set("id", $id); // write main tags to db $sql.="insert into category values (". postgre_escape($id).", ". array_to_hstore($tags->data()).", ". "'$version', ". "$pg_old_version, ". array_to_hstore($version_tags->data()). ");"; // process rules $current=$root->firstChild; while($current) { if($current->nodeName=="rule") { // read rule tags $rule_id=$current->getAttribute("id"); $tags=new tags(); $tags->readDOM($current); // write rule tags to db $sql.="insert into category_rule values (". postgre_escape($id).", ". postgre_escape($rule_id).", ". array_to_hstore($tags->data()).", ". "'$version');"; } $current=$current->nextSibling; } // delete old version from category_current if($old_version) $sql.="delete from category_current ". "where version=".postgre_escape($old_version).";"; // set current category version $sql.="insert into category_current values (". postgre_escape($id).", ". "'$version', now());"; // inform other cluster servers of new category if(plugins_loaded("cluster_call")) { $sql.="select cluster_call('category_save', ". postgre_escape($id).");"; } else { categories_has_saved($id); } // we are done. $sql.="commit;"; sql_query($sql, $db_central); return array("status"=>true, "id"=>$id, "version"=>$version); }