ShuanghongS 1 vecka sedan
förälder
incheckning
d5e4d9c34b

+ 2 - 0
include.ini.php

@@ -48,6 +48,8 @@ include_once ONLINE_ROOT . 'utils' . DS . 'common.class.php';
 include_once ONLINE_ROOT . 'utils' . DS . 'dms_edoc.class.php';
 include_once ONLINE_ROOT . 'libs' . DS . 'phpXLSWriter' . DS . "xlsxwriter.class.php";
 
+//确保每次进入是干净的,不会影响判断
+common::set("tableName", "");
 
 //测试服务器
 if(utils::startWith($_SERVER["HTTP_HOST"],"online-beta.kln.com")){

+ 1 - 1
libs/ams_config.ini.php

@@ -12,7 +12,7 @@ if ($_SESSION['ONLINE_USER']['is_demo'] == "t") {
     $_CBP_DB['port'] = '5432';
     $_CBP_DB['type'] = 'postgres';
 } else {
-    $_CBP_DB['host'] = '192.168.0.177';
+    $_CBP_DB['host'] = '192.168.114.177';
     $_CBP_DB['username'] = 'root';
     $_CBP_DB['password'] = '123456';
     //$_CBP_DB['dbname'] = 'redant_to_cbp';

+ 20 - 18
main_new_version.php

@@ -60,9 +60,9 @@ switch ($action) {
         //如果在没有登录前,没有登录信息,指定用户
         if(!isset($_SESSION['ONLINE_USER'])){
             $menuList = array();
-            $menuList[] = array("index"=>'1',"label"=>"Dashboard","icon"=>"icon_data_fill_b","path"=>"/dashboard");
-            $menuList[] = array("index"=>'2',"label"=>"Booking","icon"=>"icon_booking__fill_b","path"=>"/booking");
-            $menuList[] = array("index"=>'3',"label"=>"Tracking","icon"=>"icon_tracking__fill_b","path"=>"/tracking");
+            $menuList[] = array("index"=>'1',"label"=>"Dashboard","cleaned_field_name"=>"menu.dashboard","icon"=>"icon_data_fill_b","path"=>"/dashboard");
+            $menuList[] = array("index"=>'2',"label"=>"Booking","cleaned_field_name"=>"menu.booking","icon"=>"icon_booking__fill_b","path"=>"/booking");
+            $menuList[] = array("index"=>'3',"label"=>"Tracking","cleaned_field_name"=>"menu.tracking","icon"=>"icon_tracking__fill_b","path"=>"/tracking");
         } else {
             //d登录后,根据配置的权限,是否显示
             if (_isAdmin())
@@ -76,8 +76,8 @@ switch ($action) {
                 $sql = "select f_column, min(menu_id) as menu_id, max(menu_icon_font) as menu_icon_font from public.ra_online_permission where has_new_version=true and default_check = true group by f_column ORDER BY min(order_by)";
                 $rs = common::excuteListSql($sql);
             }
-            $menuSetting = array("Ocean Booking" => array("label"=>"Booking","path"=>"/booking","icon"=>"icon_booking__fill_b"),
-                                "Ocean B/L Info." => array("label"=>"Tracking","path"=>"/tracking","icon"=>"icon_tracking__fill_b"));
+            $menuSetting = array("Ocean Booking" => array("label"=>"Booking","cleaned_field_name"=>"menu.booking","path"=>"/booking","icon"=>"icon_booking__fill_b"),
+                                "Ocean B/L Info." => array("label"=>"Tracking","cleaned_field_name"=>"menu.tracking","path"=>"/tracking","icon"=>"icon_tracking__fill_b"));
             $menuList = array();
             $menuList[] = array("index"=>'1',"label"=>"Dashboard","icon"=>"icon_data_fill_b","path"=>"/dashboard");
             $index = 2;
@@ -96,19 +96,19 @@ switch ($action) {
                     foreach ($ll as $v) {
                         if($v['s_column'] =="Ocean B/L Info."){
                             $urlData = $menuSetting[$v['s_column']];
-                            $menuList[] = array("index"=>"$index","label"=>$urlData['label'],"icon"=>$urlData['icon'],"path"=>$urlData['path']);
+                            $menuList[] = array("index"=>"$index","label"=>$urlData['label'],"cleaned_field_name"=>$urlData['cleaned_field_name'],"icon"=>$urlData['icon'],"path"=>$urlData['path']);
                             $index = $index + 1;
                         }
                         //特殊处理book,需要加二级菜
                         if($v['s_column'] =="Ocean Booking"){
                             // $urlData = $menuSetting[$v['s_column']];
                             // $menuList[] = array("index"=>"$index","label"=>$urlData['label'],"icon"=>$urlData['icon'],"path"=>$urlData['path']);
-                            $bookingManagement = array("index"=>"$index","label"=>"Booking","icon"=>"icon_booking__fill_b","type"=>"list");
+                            $bookingManagement = array("index"=>"$index","label"=>"Booking","cleaned_field_name"=>"menu.booking","icon"=>"icon_booking__fill_b","type"=>"list");
                             $children  = array(); 
 
                             $urlData = $menuSetting[$v['s_column']];
-                            $children[] = array("index"=>$index.'-1',"label"=>"Booking Management","path"=>$urlData['path']);
-                            $children[] = array("index"=>$index.'-2',"label"=>"Destination Delivery","path"=>"/destination-delivery");
+                            $children[] = array("index"=>$index.'-1',"label"=>"Booking Management","cleaned_field_name"=>"menu.booking_management","path"=>$urlData['path']);
+                            $children[] = array("index"=>$index.'-2',"label"=>"Destination Delivery","cleaned_field_name"=>"menu.destination_delivery","path"=>"/destination-delivery");
                             $bookingManagement["children"] = $children;
                             $menuList[] = $bookingManagement;
                             $index = $index + 1;
@@ -118,24 +118,24 @@ switch ($action) {
             }
             //Report 暂时先这么写,后面这个kln 单独维护独有的菜单栏,和online 隔离开
             $urlData = $menuSetting[$v['s_column']];
-            $menuList[] = array("index"=>"4","label"=>"Report","icon"=>'icon_report__fill_b',"path"=>'/report');
+            $menuList[] = array("index"=>"4","label"=>"Report","cleaned_field_name"=>"menu.report","icon"=>'icon_report__fill_b',"path"=>'/report');
             $index = $index + 1;
 
-            $systemManagement = array("index"=>"$index","label"=>"System Management","icon"=>"icon_system__management_fill_b","type"=>"list"); 
+            $systemManagement = array("index"=>"$index","label"=>"System Management","cleaned_field_name"=>"menu.system_management","icon"=>"icon_system__management_fill_b","type"=>"list"); 
             $children  = array();
             if(_isVipReportAdmin(_getLoginName())){
-                $children[] = array("index" =>$index.'-7',"label" =>"Template Management","path"=>"/template-management");
+                $children[] = array("index" =>$index.'-7',"label" =>"Template Management","cleaned_field_name"=>"menu.template_management","path"=>"/template-management");
             } 
-            $children[] = array("index" =>$index.'-1',"label" =>"System Message","path"=>"/system-message");
-            $children[] = array("index" =>$index.'-2',"label" =>"System Settings","path"=>"/system-settings");   
+            $children[] = array("index" =>$index.'-1',"label" =>"System Message","cleaned_field_name"=>"menu.system_message","path"=>"/system-message");
+            $children[] = array("index" =>$index.'-2',"label" =>"System Settings","cleaned_field_name"=>"menu.system_settings","path"=>"/system-settings");   
             //只有chud的账户可以看日志记录
             if(strtolower(_getLoginName()) == "chud" 
                 || strtolower(_getLoginName()) == strtolower("IT.Andywu")
                 || strtolower(_getLoginName()) == "ra.admin"){
-                    $children[] = array("index" =>$index.'-3',"label" =>"Chat Log","path"=>"/chat-log");
-                    $children[] = array("index" =>$index.'-4',"label" =>"AI API Log","path"=>"/ai-api-log");
-                    $children[] = array("index" =>$index.'-5',"label" =>"Operation Log","path"=>"/operation-log");
-                    $children[] = array("index" =>$index.'-6',"label" =>"Prompt Configuration","path"=>"/prompt-configuration");  
+                    $children[] = array("index" =>$index.'-3',"label" =>"Chat Log","cleaned_field_name"=>"menu.chat_log","path"=>"/chat-log");
+                    $children[] = array("index" =>$index.'-4',"label" =>"AI API Log","cleaned_field_name"=>"menu.ai_api_log","path"=>"/ai-api-log");
+                    $children[] = array("index" =>$index.'-5',"label" =>"Operation Log","cleaned_field_name"=>"menu.operation_log","path"=>"/operation-log");
+                    $children[] = array("index" =>$index.'-6',"label" =>"Prompt Configuration","cleaned_field_name"=>"menu.prompt_configuration","path"=>"/prompt-configuration");  
             }
             $systemManagement["children"] = $children;
             if (!empty($children)){
@@ -350,10 +350,12 @@ switch ($action) {
             $edate = "'$edate'";
         }
         $list= array();
+        common::set("tableName", "online_container");
         $sqlWhere = ' and ' . common::searchExtendHandNew("ocean", $_SESSION["ONLINE_USER"]);
         $sqlWhere = common::check_input($sqlWhere);
         $sqlWhere .= common::getDashboardContactIDSqlWhere("container_bar");
         $sqlWhere = " " . $sqlWhere;
+        common::set("tableName", "");
         //这个20  40  45都查询出来。否则值查询都对应的size,其他的不查询
         $value_arr = common::excuteListSql("select * from public.online_order_status_date_kln_r1_r2('$type'::text, 'eta'::text, 'etd'::text, $bdate, $edate, '$sqlWhere'::text, '$container_type'::text, '$date_type'::text) "
                     . "r (month_group text, _20_rc numeric, _40_rc numeric, _45_rc numeric)"); 

+ 34 - 13
service/column.class.php

@@ -128,15 +128,16 @@ class column {
                 $children['All'] = array();
             }
 
+            $page = common::getPageMapping($model_name);
             $allData = $this->getDisplayColumnAllReomveDefault($model_name);
-            $groupColumns_all = $this->allGroupColumns($allData,$children);
+            $groupColumns_all = $this->allGroupColumns($allData,$children,$page);
 
             //总分组的检索要去掉右边的已经选中的部分
             $dataLeft = $this->getDisplayColumn($model_name,false);
-            $groupColumns_left = $this->allGroupColumns($dataLeft,$children);
+            $groupColumns_left = $this->allGroupColumns($dataLeft,$children,$page);
 
             $setting = $this->getDisplayColumn($model_name);
-            $groupSetting = $this->groupColumnsSetting($setting);
+            $groupSetting = $this->groupColumnsSetting($setting,$page);
             
             $data['GroupColumnsAll'] = $groupColumns_all;
             $data['GroupColumnsLeft'] = $groupColumns_left;
@@ -175,7 +176,9 @@ class column {
             $sql = $this->_getSql($rs);
             $rss = common::excuteListSql($sql);
         } else {
-            $sql = "SELECT id, display_name as name, database_column_name, column_width,group_name FROM public.ra_online_search_display_cso WHERE active = true and lower(model_name) = '" . strtolower($model_name) . "' and id not in ($rs)";
+            $sql = "SELECT id, display_name as name, database_column_name, column_width,group_name,
+                        TRIM('_' FROM REGEXP_REPLACE(LOWER(display_name), '[^a-z0-9]+', '_', 'g')) AS cleaned_field_name
+                    FROM public.ra_online_search_display_cso WHERE active = true and lower(model_name) = '" . strtolower($model_name) . "' and id not in ($rs)";
             if (_isCustomerLogin())
                 $sql .= ' and customer_display=true';
             $rss = common::excuteListSql($sql);
@@ -196,11 +199,15 @@ class column {
         foreach ($ids_arr as $value) {
             if (!empty($value)) {
                 if (empty($sql)) {
-                    $sql .= 'SELECT id, display_name as name,  database_column_name,column_width,group_name FROM public.ra_online_search_display_cso where active=true and id = ' . $value;
+                    $sql .= "SELECT id, display_name as name,  database_column_name,column_width,group_name,
+                                TRIM('_' FROM REGEXP_REPLACE(LOWER(display_name), '[^a-z0-9]+', '_', 'g')) AS cleaned_field_name 
+                            FROM public.ra_online_search_display_cso where active=true and id = " . $value;
                     if (_isCustomerLogin())
                         $sql .= ' and CUSTOMER_DISPLAY = true';
                 } else {
-                    $sql .= ' union all SELECT id, display_name as name, database_column_name,column_width,group_name FROM public.ra_online_search_display_cso where active=true and id = ' . $value;
+                    $sql .= " union all SELECT id, display_name as name, database_column_name,column_width,group_name,
+                                TRIM('_' FROM REGEXP_REPLACE(LOWER(display_name), '[^a-z0-9]+', '_', 'g')) AS cleaned_field_name  
+                            FROM public.ra_online_search_display_cso where active=true and id = " . $value;
                     if (_isCustomerLogin())
                         $sql .= ' and CUSTOMER_DISPLAY = true';
                 }
@@ -305,7 +312,10 @@ class column {
     }
 
     public function getDisplayColumnAll($model_name) {
-        $sql = "SELECT id, display_name as name, database_column_name as db,database_column_name, column_width,group_name FROM public.ra_online_search_display_cso WHERE default_display = true and active=true and lower(model_name) = '" . strtolower($model_name) . "'";
+        $sql = "SELECT id, display_name as name, database_column_name as db,database_column_name, column_width,group_name, 
+                TRIM('_' FROM REGEXP_REPLACE(LOWER(display_name), '[^a-z0-9]+', '_', 'g')) AS cleaned_field_name
+            FROM public.ra_online_search_display_cso 
+                WHERE default_display = true and active=true and lower(model_name) = '" . strtolower($model_name) . "'";
         if (_isCustomerLogin())
             $sql .= ' and customer_display=true';
         $sql .= " order by order_by,display_name";
@@ -319,7 +329,10 @@ class column {
             $model_name = "UAT_".$model_name;
         }
 
-        $sql = "SELECT id, display_name as name, database_column_name as db,database_column_name, column_width,group_name FROM public.ra_online_search_display_cso WHERE  active=true and lower(model_name) = '" . strtolower($model_name) . "'";
+        $sql = "SELECT id, display_name as name, database_column_name as db,database_column_name, column_width,group_name,
+                TRIM('_' FROM REGEXP_REPLACE(LOWER(display_name), '[^a-z0-9]+', '_', 'g')) AS cleaned_field_name 
+            FROM public.ra_online_search_display_cso 
+                WHERE  active=true and lower(model_name) = '" . strtolower($model_name) . "'";
         if (_isCustomerLogin())
             $sql .= ' and customer_display=true';
         $sql .= " order by order_by";
@@ -354,18 +367,23 @@ class column {
             if(!($type == "Destination_Delivery_Search" || $type == "destination_delivery_shipment_search")){
                 $temp['field'] = $rs['name'];
             }
+           
+            //$temp['title'] = $rs['cleaned_field_name'];
+            $page = common::getPageMapping($type);
+            $temp['cleaned_field_name'] = $page .'.'.$rs['cleaned_field_name'];
             $tableColumns[] = $temp;
         }
         return $tableColumns;
     }
 
-    public function groupColumnsSetting($column){
+    public function groupColumnsSetting($column,$page){
         $groupSetting = array();
         foreach ($column as $key => $rs) {
             $temp = array();
             $temp['ids'] = $rs['id'];
             $temp['field'] = $rs['database_column_name'];
             $temp['label'] = $rs['name'];
+            $temp['cleaned_field_name'] = $page .'.'.$rs['cleaned_field_name'];
             $groupSetting[] = $temp;
         }
         return $groupSetting;
@@ -431,24 +449,27 @@ class column {
     /**
      * 通用返回setting 分组数据
      */
-    public function allGroupColumns($allData,$children){
+    public function allGroupColumns($allData,$children,$page){
         foreach ($allData as $key => $data) {
             //固定ALl的分组
             if (array_key_exists("All", $children)) {
                 $temp = $children['All'];
-                $temp[] = array("ids"=>$data['id'],"label"=>$data['name'],"field"=>$data['database_column_name']);
+                $temp[] = array("ids"=>$data['id'],"label"=>$data['name'],"field"=>$data['database_column_name'],"cleaned_field_name"=>$page.'.'.$data['cleaned_field_name']);
                 $children['All'] = $temp;
             } 
             if (array_key_exists($data['group_name'], $children)) {
                 $temp = $children[$data['group_name']];
-                $temp[] = array("ids"=>$data['id'],"label"=>$data['name'],"field"=>$data['database_column_name']);
+                $temp[] = array("ids"=>$data['id'],"label"=>$data['name'],"field"=>$data['database_column_name'],"cleaned_field_name"=>$page.'.'.$data['cleaned_field_name']);
                 $children[$data['group_name']] = $temp;
             } 
         }
 
         $groupColumns  = array();
         foreach ($children as $k => $ch) {
-            $groupColumns[] = array("name"=>$k,"children" =>$ch);
+            $field_display_name = strtolower($k);
+            $field_display_name = preg_replace('/[^a-z0-9]+/', '_', $field_display_name); // 非字母数字 → _
+            $field_display_name = trim($field_display_name, '_');
+            $groupColumns[] = array("name"=>$k,"cleaned_field_name"=>$page.'.'.$field_display_name,"children" =>$ch);
         }
         return $groupColumns;
     }

+ 9 - 2
service/destination_delivery.class.php

@@ -80,8 +80,15 @@ class destination_delivery {
             $station = $_REQUEST['station'];
             $sqlwhere = '';
             if(!empty($station)){
-                $more_param = common::getInNotInSqlForSearch(utils::implode(';',$station));
-                $sqlwhere = " and lower(e.contact_id) in ($more_param) ";
+                //more_param = common::getInNotInSqlForSearch(utils::implode(';',$station));
+                //$sqlwhere = " and lower(r.allow_login_remote) in ($more_param) ";
+                $safeStation = [];
+                foreach ($station as $s) {
+                    $safeStation[] = common::check_input($s);
+                }
+                $arrayLiteral = '{' . implode(',', $safeStation) . '}';
+                $sqlwhere = " AND coalesce(r.allow_login_remote,'') <>'' 
+                              AND '$arrayLiteral'::text[] && string_to_array(r.allow_login_remote, ';')";
             }
 
             $sql = "select e.email from public.ra_online_user r, employee e 

+ 1 - 1
service/login.class.php

@@ -1554,7 +1554,7 @@ class login {
             $EDI315TimeAndLocation = array();
         }
         //Milestones 数据信息待定
-        $Milestones = common::getMilestonesInfo($ocean,$ocean['transport_mode'],$order_from,$EDI315TimeAndLocation);
+        $Milestones = common::getMilestonesInfo('tracking',$ocean,$ocean['transport_mode'],$order_from,$EDI315TimeAndLocation);
 
         global $_COPYRIGHT;
         $data = array('transportInfo' => $transportInfo, 

+ 95 - 11
service/multilingual.class.php

@@ -94,21 +94,28 @@ class multilingual{
             $multilingual_param = $_POST['multilingual_param'];
             $this->_multilingual_save($multilingual_param);
         }
+
+        if ($operate == "load_all_pages_by_lang") {
+            $langkey = common::check_input($_POST['langkey']);
+            $this->_loadAllPagesByLang($langkey);
+        }
     }
 
     private function _multilingual_init() {
         // 1. 获取并解析 JSON 数据
-        $sql = "select * from public.kln_i18n_pages_init where page = 'login'";
+        $sql = "select * from public.kln_i18n_pages_init where id = 2";
         $data = common::excuteObjectSql($sql);
         $rawData = $data['data'];
-        $mode = "update";
 
-        $json = json_decode($rawData, true);
-        if (!$json) {
+        $rawDataArr = json_decode($rawData, true);
+        if (!$rawDataArr) {
             common::echo_json_encode(500, "Invalid JSON format");
             exit();
         }
 
+        foreach($rawDataArr as $_rawDataArr){
+        $mode = 'update';    
+        $json = $_rawDataArr;
         // 获取控制模式,默认为 'update'
         $mode = $mode == 'replace' ? 'replace' : 'update';
 
@@ -171,7 +178,7 @@ class multilingual{
             // 第二步:循环处理数据
             foreach ($dataList as $item) {
                 $transKey = $item['key'];
-                $originValue = isset($item['orginEnglish']) ? $item['orginEnglish'] : '';
+                $originValue = isset($item['originEnglish']) ? $item['originEnglish'] : '';
 
                 foreach ($langMap as $jsonKey => $langInfo) {
                     // 只处理 JSON 中存在的数据
@@ -233,6 +240,7 @@ class multilingual{
         } else {
             $msg = 'Save Success';
         }
+        }
         common::echo_json_encode(200, $msg);
         exit();
     }
@@ -348,22 +356,24 @@ class multilingual{
             $langKey = $row['lang_key'];
             
             // 如果这个 key 还没初始化,先初始化
-            if (!isset($dataMap[$key])) {
-                $dataMap[$key] = array(
+            $mapKey = $key.':'.$row['key_page'];
+            //$mapKey = $key;
+            if (!isset($dataMap[$mapKey])) {
+                $dataMap[$mapKey] = array(
                     'key' => $key,
                     'key_page' => $row['key_page']  // 记录所属页面
                 );
-            }
+            } 
             
             // 动态填充语言字段
-            $dataMap[$key][$langKey] = $row['trans_value'];
+            $dataMap[$mapKey][$langKey] = $row['trans_value'];
             
             // 填充状态字段
-            $dataMap[$key][$langKey . 'Status'] = intval($row['status']);
+            $dataMap[$mapKey][$langKey . 'Status'] = intval($row['status']);
             
             // 填充原始值(如果有)
             //if (!empty($row['orgin_value'])) {
-            $dataMap[$key]['orginEnglish'] = $row['orgin_value'];
+            $dataMap[$mapKey]['orginEnglish'] = $row['orgin_value'];
             //}
         }
         
@@ -513,6 +523,80 @@ class multilingual{
         $retLangData['all'] =$unverified_count; 
         return $retLangData;
     }
+
+    /**
+     * 按照指定语言查询所有页面的多语言信息,并输出标准 JSON 格式
+     * 兼容 PHP 7.4
+     * 
+     * @param string $langKey 语言键,例如 'english', 'simplifiedChinese'
+     * @return void 输出 JSON 并终止脚本
+     */
+    public function _loadAllPagesByLang($langKey = 'english') {
+        // 1. 参数校验与安全过滤
+        $langKey = common::check_input($langKey);
+        if (empty($langKey)) {
+            $langKey = 'english'; // 默认回退到英语
+        }
+        try {
+            // 2. 查询指定语言的 ID
+            $langSql = "SELECT id FROM kln_i18n_languages WHERE lang_key = ? AND is_active = TRUE limit 1";
+            $langObj = common::excuteObjectPrepareSql($langSql,array($langKey));
+            
+            if (empty($langObj)) {
+                common::echo_json_encode(500, "Invalid languages");
+                exit();
+            }
+            $langId = $langObj['id'];
+
+            // 3. 查询所有激活的页面
+            $pageSql = "SELECT id, page_key FROM kln_i18n_pages WHERE 1=1";
+            $pageRows = common::excuteListSql($pageSql);
+            
+            // 4. 构建页面 ID 列表,用于后续查询
+            $pageIdMap = array();
+            foreach ($pageRows as $row) {
+                $pageIdMap[$row['id']] = $row['page_key'];
+            }
+            $pageIds = array_keys($pageIdMap);
+
+            // 5. 查询该语言下所有页面的所有翻译词条
+            $inClause = implode(',', $pageIds);
+            $transSql = "SELECT page_id, trans_key, trans_value 
+                        FROM kln_i18n_keys 
+                        WHERE lang_id = $langId
+                        AND page_id IN ($inClause)"; 
+            
+            $transRows = common::excuteListSql($transSql);
+
+            // 6. 数据组装 (核心逻辑)
+            $result = array();
+            
+            // 先初始化所有页面的空数组
+            foreach ($pageIdMap as $pageKey) {
+                $result[$pageKey] = array();
+            }
+            
+            // 填充翻译数据
+            foreach ($transRows as $row) {
+                $pageKey = $pageIdMap[$row['page_id']];
+                $transKey = $row['trans_key'];
+                $transValue = $row['trans_value'];
+                
+                // 直接赋值: $result['login']['username'] = 'User Name'
+                $result[$pageKey][$transKey] = $transValue;
+            }
+
+            // 7. 输出 JSON
+            common::echo_json_encode(200, $result);
+            exit();
+
+        } catch (Exception $e) {
+            // 错误处理
+            error_log("Error in loadAllPagesByLang: " . $e->getMessage());
+            common::echo_json_encode(500, "Invalid languages");
+            exit();
+        }
+    }
 }
 
 ?>

+ 3 - 0
service/ocean_booking.class.php

@@ -437,14 +437,17 @@ class ocean_booking {
         $booking_Container_config = array("QTY" => array("formatter"=>"number","digits"=>0),
                 "KGS" => array("formatter"=>"number","digits"=>3),
                 "CBM" => array("formatter"=>"number","digits"=>3));
+        $page = common::getPageMapping("Booking_Container");        
         foreach($container_column as $cc){
             if(!empty($booking_Container_config[$cc['name']])){
                 $booking_container_column[] =array("field" =>$cc['database_column_name'],"title" =>$cc['name'],
+                "cleaned_field_name" =>$page .'.'.$cc['cleaned_field_name'],
                 "formatter" =>$booking_Container_config[$cc['name']]["formatter"],
                 "digits" =>$booking_Container_config[$cc['name']]["digits"],
                 "type" =>"normal");
             }else{
                 $booking_container_column[] =array("field" =>$cc['database_column_name'],"title" =>$cc['name'],
+                "cleaned_field_name" =>$page .'.'.$cc['cleaned_field_name'],
                 "formatter" =>"",
                 "digits" =>"",
                 "type" =>"normal");

+ 24 - 20
service/ocean_order.class.php

@@ -671,13 +671,13 @@ class ocean_order {
 
             //detail  information 
             $detail_information_column = array();
-            $detail_information_column[] = array("title" =>"SN","field" =>"sn","formatter" =>"","edit_type" =>"normal",);
-            $detail_information_column[] = array("title" =>"Carrier Booking No.","field" =>"carrier_booking_no","formatter" =>"","edit_type" =>"normal");
-            $detail_information_column[] = array("title" =>"Container No","field" =>"container_no","formatter" =>"","edit_type" =>"normal");
-            $detail_information_column[] = array("title" =>"VGM Weight","field" =>"vgm_weight","formatter" =>"","edit_type" =>"number");
-            $detail_information_column[] = array("title" =>"VGM Unit","field" =>"vgm_kg_lg","formatter" =>"","edit_type" =>"select");
-            $detail_information_column[] = array("title" =>"VGM Time","field" =>"vgm_date","formatter" =>"","edit_type" =>"dateTime");
-            $detail_information_column[] = array("title" =>"VGM Method","field" =>"vgm_method","formatter" =>"","edit_type" =>"input");
+            $detail_information_column[] = array("title" =>"SN","cleaned_field_name"=>"tracking.sn","field" =>"sn","formatter" =>"","edit_type" =>"normal",);
+            $detail_information_column[] = array("title" =>"Carrier Booking No.","cleaned_field_name"=>"tracking.carrier_booking_no","field" =>"carrier_booking_no","formatter" =>"","edit_type" =>"normal");
+            $detail_information_column[] = array("title" =>"Container No","cleaned_field_name"=>"tracking.container_no","field" =>"container_no","formatter" =>"","edit_type" =>"normal");
+            $detail_information_column[] = array("title" =>"VGM Weight","cleaned_field_name"=>"tracking.vgm_weight","field" =>"vgm_weight","formatter" =>"","edit_type" =>"number");
+            $detail_information_column[] = array("title" =>"VGM Unit","cleaned_field_name"=>"tracking.vgm_unit","field" =>"vgm_kg_lg","formatter" =>"","edit_type" =>"select");
+            $detail_information_column[] = array("title" =>"VGM Time","cleaned_field_name"=>"tracking.vgm_time","field" =>"vgm_date","formatter" =>"","edit_type" =>"dateTime");
+            $detail_information_column[] = array("title" =>"VGM Method","cleaned_field_name"=>"tracking.vgm_method","field" =>"vgm_method","formatter" =>"","edit_type" =>"input");
 
             foreach($rs as $rk => $rv){
                 $rs[$rk]['sn'] = $rk +1;
@@ -1342,15 +1342,19 @@ class ocean_order {
                 "Gross Weight" => array("formatter"=>"number","digits"=>3),
                 "CBM" => array("formatter"=>"number","digits"=>3),
                 "CFT" => array("formatter"=>"number","digits"=>3));
+        $page = common::getPageMapping("Ocean_Container");          
         foreach($container_column as $cc){
             $cc['name'] = $cc['database_column_name'] == "grs_kgs" ? "Gross Weight(KGS)" : ($cc['database_column_name'] == "grs_lbs" ? "Gross Weight(LBS)" : $cc['name']);
             if(!empty($container_column_config[$cc['name']])){
                 $ocean_container_column[] =array("field" =>$cc['database_column_name'],"title" =>$cc['name'],
+                "cleaned_field_name" =>$page .'.'.$cc['cleaned_field_name'],
                 "formatter" =>$container_column_config[$cc['name']]["formatter"],
                 "digits" =>$container_column_config[$cc['name']]["digits"],
                 "type" =>"normal");
             }else{
-                $ocean_container_column[] =array("field" =>$cc['database_column_name'],"title" =>$cc['name'],"formatter" =>"","type" =>"normal");
+                $ocean_container_column[] =array("field" =>$cc['database_column_name'],"title" =>$cc['name'],
+                "cleaned_field_name" =>$page .'.'.$cc['cleaned_field_name'],
+                "formatter" =>"","type" =>"normal");
             }
 
         }
@@ -1412,12 +1416,12 @@ class ocean_order {
         $packing = array("Quantity/Unit"=>$quantity_tolal,"G. Weight" => $g_weight_tolal." KGS","Ch. Weight" => $g_weight_tolal." LBS","Volume" => $cbm_tolal." CBM");
         
         //Milestones info  列名固定
-        $Milestones = common::getMilestonesInfo($ocean,"sea",$_schemas,$vueData['EDI315TimeAndLocation']);
+        $Milestones = common::getMilestonesInfo($page,$ocean,"sea",$_schemas,$vueData['EDI315TimeAndLocation']);
 
         //页面固定写死的信息
         $document_column = array();
-        $document_column[] = array("title" =>"File Type","field" =>"file_type","formatter" =>"","type" =>"normal");
-        $document_column[] = array("title" =>"File","field" =>"file","formatter" =>"","type" =>"normal");
+        $document_column[] = array("title" =>"File Type","cleaned_field_name"=>$page .'.file_type',"field" =>"file_type","formatter" =>"","type" =>"normal");
+        $document_column[] = array("title" =>"File","cleaned_field_name"=>$page .'.file',"field" =>"file","formatter" =>"","type" =>"normal");
 
         $document_data = array();
         $document = _getViewDocType($_REQUEST["_schemas"]);
@@ -1609,7 +1613,7 @@ class ocean_order {
         $packing = array("Quantity/Unit"=>$quantity_tolal,"G. Weight" => $g_weight_tolal,"Ch. Weight" => $ch_weight_tolal,"Volume" => $cbm_tolal);
         
         //Milestones info  列名固定
-        $Milestones = common::getMilestonesInfo($air,"air",$_schemas);
+        $Milestones = common::getMilestonesInfo('tracking',$air,"air",$_schemas);
 
         //页面固定写死的信息
         $document_column = array();
@@ -1847,10 +1851,10 @@ class ocean_order {
         $amsLog = array();
         //页面固定写死的信息
         $amsLog_column = array();
-        $amsLog_column[] = array("title" =>"Date Time","field" =>"atime","formatter" =>"","type" =>"dateTime");
-        $amsLog_column[] = array("title" =>"Code","field" =>"cbperrorcode","formatter" =>"","type" =>"normal");
-        $amsLog_column[] = array("title" =>"Name","field" =>"isams_submit","formatter" =>"","type" =>"normal");
-        $amsLog_column[] = array("title" =>"Description","field" =>"amslog","formatter" =>"","type" =>"normal");
+        $amsLog_column[] = array("title" =>"Date Time","cleaned_field_name"=>"tracking.date_time","field" =>"atime","formatter" =>"","type" =>"dateTime");
+        $amsLog_column[] = array("title" =>"Code","cleaned_field_name"=>"tracking.code","field" =>"cbperrorcode","formatter" =>"","type" =>"normal");
+        $amsLog_column[] = array("title" =>"Name","cleaned_field_name"=>"tracking.name","field" =>"isams_submit","formatter" =>"","type" =>"normal");
+        $amsLog_column[] = array("title" =>"Description","cleaned_field_name"=>"tracking.description","field" =>"amslog","formatter" =>"","type" =>"normal");
         $amsLog["amsLog_column"] = $amsLog_column;
         $amsLog["msg"] = "Origin have not filed ACE-M1, no data found";
         $amsLog["data"] = array();
@@ -1887,10 +1891,10 @@ class ocean_order {
         $isfLog = array();
         //页面固定写死的信息
         $isfLog_column = array();
-        $isfLog_column[] = array("title" =>"Date Time","field" =>"atime","formatter" =>"","type" =>"dateTime");
-        $isfLog_column[] = array("title" =>"Code","field" =>"cbperrorcode","formatter" =>"","type" =>"normal");
-        $isfLog_column[] = array("title" =>"Name","field" =>"isfsubmit","formatter" =>"","type" =>"normal");
-        $isfLog_column[] = array("title" =>"Description","field" =>"isflog","formatter" =>"","type" =>"normal");
+        $isfLog_column[] = array("title" =>"Date Time","cleaned_field_name"=>"tracking.date_time","field" =>"atime","formatter" =>"","type" =>"dateTime");
+        $isfLog_column[] = array("title" =>"Code","cleaned_field_name"=>"tracking.code","field" =>"cbperrorcode","formatter" =>"","type" =>"normal");
+        $isfLog_column[] = array("title" =>"Name","cleaned_field_name"=>"tracking.name","field" =>"isfsubmit","formatter" =>"","type" =>"normal");
+        $isfLog_column[] = array("title" =>"Description","cleaned_field_name"=>"tracking.description","field" =>"isflog","formatter" =>"","type" =>"normal");
         $isfLog["isfLog_column"] = $isfLog_column;
         $isfLog["msg"] = "Origin have not filed ISF, no data found";
         $isfLog["data"] = array();

+ 35 - 10
service/report.class.php

@@ -402,6 +402,7 @@ class report {
 
             $reportFiled = common::excuteListSql("select * from public.kln_report_field_config where template_serial_no = '".$serial_no."' 
                 and is_enabled = true order by id ");
+            $page = common::getPageMapping("shipment_status_report"); 
             foreach($reportFiled as $filed){
                 if($filed['is_filter_enabled'] == 't'){
                     $field_display_name = $filed['field_display_name'];
@@ -424,6 +425,8 @@ class report {
                         "label"=>$filed['field_display_name_user'],
                         "field"=>$field_display_name,
                         "field_real"=>$filed['field_display_name'],
+                        "cleaned_field_name"=>$page.'.'.$field_display_name,
+                        "is_translate"=>$filed['field_display_name'] <> $filed['field_display_name_user'] || $filed['field_type'] == 'Custom',
                         "data_type"=>$data_type,
                         "value"=>'',"options"=>$realSelect,"supportMultiple"=>$supportMultiple);
                 }
@@ -444,14 +447,18 @@ class report {
             $mappingConfig = array();
 
             $CustomFiled = "";
-            $reportFiled = common::excuteListSql("select * from public.kln_report_field_config where template_serial_no = '".$serial_no."' 
-                and is_enabled = true order by id ");
+            $reportFiled = common::excuteListSql("select *,
+                        TRIM('_' FROM REGEXP_REPLACE(LOWER(field_display_name_user), '[^a-z0-9]+', '_', 'g')) AS cleaned_field_name
+                    from public.kln_report_field_config where template_serial_no = '".$serial_no."' 
+                    and is_enabled = true order by id ");
+            $page = common::getPageMapping("shipment_status_report");    
             foreach($reportFiled as $filed){
                 if($filed['is_filter_enabled'] == 't'){
-                    $field_display_name = $filed['field_display_name'];
-                    $field_display_name = strtolower($field_display_name);
-                    $field_display_name = preg_replace('/[^a-z0-9]+/', '_', $field_display_name); // 非字母数字 → _
-                    $field_display_name = trim($field_display_name, '_');
+                    //$field_display_name = $filed['field_display_name'];
+                    //$field_display_name = strtolower($field_display_name);
+                    //$field_display_name = preg_replace('/[^a-z0-9]+/', '_', $field_display_name); // 非字母数字 → _
+                    //$field_display_name = trim($field_display_name, '_');
+                    $field_display_name = $filed['cleaned_field_name'];
                     
                     $realSelect = common::getSelectedArray($filed['field_display_name']);
                     $data_type = $filed['data_type'];
@@ -464,10 +471,13 @@ class report {
                         || $filed['field_display_name_user'] == "Controlling Customer"){
                         $supportMultiple = true;
                     }
+                    $is_translate = $filed['field_display_name'] <> $filed['field_display_name_user'] || $filed['field_type'] == 'Custom';
                     $filtersList[] = array(
                         "label"=>$filed['field_display_name_user'],
                         "field"=>$field_display_name,
                         "field_real"=>$filed['field_display_name'],
+                        "cleaned_field_name"=>$is_translate ? $filed['field_display_name_user'] : $page.'.'.$field_display_name,
+                        "is_translate"=>$is_translate,
                         "data_type"=>$data_type,
                         "value"=>'',"options"=>$realSelect,"supportMultiple"=>$supportMultiple);
                 }
@@ -484,8 +494,11 @@ class report {
                 }
 
                 $temp = array();
+                $is_translate = $filed['field_display_name'] <> $filed['field_display_name_user'] || $filed['field_type'] == 'Custom';
                 $temp['field'] = $filed['field_display_name'];
                 $temp['title'] = $filed['field_display_name_user'];
+                $temp["cleaned_field_name"]=$is_translate ? $filed['field_display_name_user'] : $page.'.'.$filed['cleaned_field_name'];
+                $temp["is_translate"]= $is_translate;
                 $temp['type'] = $filed['field_db'] == "Status" ? "status" : "normal";
                 if($filed['data_type'] == "date"){
                     $temp['formatter'] = "dateTime";
@@ -644,13 +657,19 @@ class report {
 
         if ($operate == "manage_fileds") {
             $serial_no = common::check_input($_POST ['serial_no']); 
-            $reportFiled = common::excuteListSql("select * from public.kln_report_field_config 
-                where template_serial_no = '".$serial_no."' order by id ");
+            $reportFiled = common::excuteListSql("select *,
+                    TRIM('_' FROM REGEXP_REPLACE(LOWER(field_display_name_user), '[^a-z0-9]+', '_', 'g')) AS cleaned_field_name 
+                from public.kln_report_field_config 
+                    where template_serial_no = '".$serial_no."' order by id ");
             $data = array(); 
             foreach($reportFiled as $_reportFiled){
                 $_reportFiled['is_filter_enabled'] = $_reportFiled['is_filter_enabled'] == 't' ? true : false;
                 $_reportFiled['is_sort_enabled'] = $_reportFiled['is_sort_enabled'] == 't' ? true : false;
                 $_reportFiled['is_enabled'] = $_reportFiled['is_enabled'] == 't' ? true : false;
+
+                $is_translate = $_reportFiled['field_display_name'] <> $_reportFiled['field_display_name_user'] || $_reportFiled['field_type'] == 'Custom';
+                $_reportFiled["cleaned_field_name"]='report.'.$_reportFiled['cleaned_field_name'];
+                $_reportFiled["is_translate"]= $is_translate;
                 $data[] = $_reportFiled;
             }    
             common::echo_json_encode(200,array("msg"=>"success","data" => $data));
@@ -774,12 +793,18 @@ class report {
             $tableColumns = array();
             $mappingConfig = array();
             $CustomFiled = "";
-            $reportFiled = common::excuteListSql("select * from public.kln_report_field_config where template_serial_no = '".$serial_no."' 
-                and is_enabled = true order by id ");
+            $reportFiled = common::excuteListSql("select *,
+                    TRIM('_' FROM REGEXP_REPLACE(LOWER(field_display_name_user), '[^a-z0-9]+', '_', 'g')) AS cleaned_field_name
+                from public.kln_report_field_config where template_serial_no = '".$serial_no."' 
+                    and is_enabled = true order by id ");
+            $page = common::getPageMapping("shipment_status_report");        
             foreach($reportFiled as $filed){
                 $temp = array();
+                $is_translate = $filed['field_display_name'] <> $filed['field_display_name_user'] || $filed['field_type'] == 'Custom';
                 $temp['field'] = $filed['field_display_name'];
                 $temp['title'] = $filed['field_display_name_user'];
+                $temp["cleaned_field_name"]=$is_translate ? $filed['field_display_name_user'] : $page.'.'.$filed['cleaned_field_name'];
+                $temp["is_translate"]=$is_translate;
                 $temp['type'] = $filed['field_db'] == "Status" ? "status" : "normal";
                 $temp['formatter'] = "";
                 $tableColumns[] = $temp;

+ 71 - 24
utils/common.class.php

@@ -11,6 +11,19 @@ if (!defined('IN_ONLINE')) {
  */
 class common {
 
+    private static $data = [];
+    
+    public static function set($key, $value)
+    {
+        self::$data[$key] = $value;
+    }
+    
+    public static function get($key)
+    {
+        $data = self::$data[$key];
+        return !empty($data)? $data:"";
+    }
+
     /*
      * mysql check input
      */
@@ -133,6 +146,15 @@ class common {
                     return;
                 }
             }
+
+            //tools是为了避免查询的用户,没有配置tools权限,但是新版mark_save需要进入
+            if($action == "multilingual" ){
+                $operate = strtolower(utils::_get('operate'));
+                if ($operate == "load_all_pages_by_lang"){
+                    return;
+                }
+            }
+            
             if (!isset($_SESSION['ONLINE_USER'])) {
                 self::timeoutPrintInfor($httpAccept, $ajax, 'no');
             } else {
@@ -624,7 +646,11 @@ class common {
         $follow = $user['ocean_following_sales'];
         $follow_or = $user['ocean_following_sales_or'];
 
-        $tableName = "kln_ocean";
+        $tableName = common::get("tableName");
+        if(empty($tableName)){
+            $tableName = "kln_ocean";
+        }
+        
         $sqlWhere = "";
         if (_isCustomerLoginHandNew($user)) {
             $sqlWhere .= " and " . _customerFilerSearchHandNew($tableName,$user, $schemas);
@@ -647,11 +673,14 @@ class common {
                     $sql .= utils::getInSql($o);
                 }
                 if (!empty($d) && strtolower($d) != 'all') {
-                    //$sql .= " and lower(agent)";
-                    //$sql .= utils::getInSql($d);
-                    $inClause = common::getInNotInSqlForSearchWithoutLower($d); 
-                    $arrayLiteral = 'ARRAY[' . $inClause . ']::text[]';
-                    $sql .= " and edi_agent && $arrayLiteral";
+                    if ($tableName == 'online_container'){
+                        $sql .= " and lower(agent)";
+                        $sql .= utils::getInSql($d);
+                    } else {
+                        $inClause = common::getInNotInSqlForSearchWithoutLower($d); 
+                        $arrayLiteral = 'ARRAY[' . $inClause . ']::text[]';
+                        $sql .= " and edi_agent && $arrayLiteral";
+                    }
                 }
                 $sqlWhere .= " and (" . $sql . ")";
             }
@@ -698,19 +727,25 @@ class common {
                 $sqlWhere .= utils::getInSql($o_or);
             }
             if (!empty($d_or)) {
-                //$sqlWhere .= " or lower(agent)";
-                //$sqlWhere .= utils::getInSql($d_or);
-                $inClause = utils::getInSql($d_or); 
-                $sqlWhere .= " OR (";
-                $sqlWhere .= " LOWER(agent) " . $inClause;
-                //$sqlWhere .= " OR LOWER(to_other_stations) " . $inClause;
-                $sqlWhere .= " OR EXISTS(SELECT 1 FROM ".$schemas.".ocean  where ocean.serial_no = ".$tableName.".serial_no AND LOWER(ocean.to_other_stations) " . $inClause.")" ;
-                $sqlWhere .= " OR EXISTS (";
-                $sqlWhere .= "     SELECT 1 FROM ".$schemas.".ocean_agent ";
-                $sqlWhere .= "     WHERE ocean_agent.serial_no = ".$tableName.".serial_no ";
-                $sqlWhere .= "       AND LOWER(ocean_agent.edi_agent) " . $inClause;
-                $sqlWhere .= " )";
-                $sqlWhere .= " )";
+                if ($tableName == 'online_container'){
+                    $sqlWhere .= " or lower(agent)";
+                    $sqlWhere .= utils::getInSql($d_or);
+                } else {
+                    $inClause = common::getInNotInSqlForSearchWithoutLower($d_or); 
+                    $arrayLiteral = 'ARRAY[' . $inClause . ']::text[]';
+                    $sqlWhere .= " or edi_agent && $arrayLiteral";
+
+                    // $inClause = utils::getInSql($d_or); 
+                    // $sqlWhere .= " OR (";
+                    // $sqlWhere .= " LOWER(agent) " . $inClause;
+                    // $sqlWhere .= " OR EXISTS(SELECT 1 FROM ".$schemas.".ocean  where ocean.serial_no = ".$tableName.".serial_no AND LOWER(ocean.to_other_stations) " . $inClause.")" ;
+                    // $sqlWhere .= " OR EXISTS (";
+                    // $sqlWhere .= "     SELECT 1 FROM ".$schemas.".ocean_agent ";
+                    // $sqlWhere .= "     WHERE ocean_agent.serial_no = ".$tableName.".serial_no ";
+                    // $sqlWhere .= "       AND LOWER(ocean_agent.edi_agent) " . $inClause;
+                    // $sqlWhere .= " )";
+                    // $sqlWhere .= " )";
+                }
             }
             if (!empty($sales_or)) {
                 if (utils::checkExist($sales_or, ";")) {
@@ -2141,13 +2176,13 @@ class common {
         return $str;
     }
 
-    public static function getMilestonesInfo($ocean,$transport_mode,$_schemas,$EDI315TimeAndLocation=array()){
+    public static function getMilestonesInfo($page,$ocean,$transport_mode,$_schemas,$EDI315TimeAndLocation=array()){
         //Milestones info列名固定
         $Milestones_column = array();
-        $Milestones_column[] = array("title" =>"Milestones","field" =>"milestones","formatter" =>"normal","type" =>"normal");
-        $Milestones_column[] = array("title" =>"Date Time","field" =>"date_time","formatter" =>"dateTime","type" =>"normal");
-        $Milestones_column[] = array("title" =>"Locations","field" =>"locations","formatter" =>"normal","type" =>"normal");
-        $Milestones_column[] = array("title" =>"Remarks","field" =>"remarks","formatter" =>"normal","type" =>"normal");
+        $Milestones_column[] = array("title" =>"Milestones","cleaned_field_name"=>$page.".milestones","field" =>"milestones","formatter" =>"normal","type" =>"normal");
+        $Milestones_column[] = array("title" =>"Date Time","cleaned_field_name"=>$page.".date_time","field" =>"date_time","formatter" =>"dateTime","type" =>"normal");
+        $Milestones_column[] = array("title" =>"Locations","cleaned_field_name"=>$page.".locations","field" =>"locations","formatter" =>"normal","type" =>"normal");
+        $Milestones_column[] = array("title" =>"Remarks","cleaned_field_name"=>$page.".remarks","field" =>"remarks","formatter" =>"normal","type" =>"normal");
 
         //EDI315 有关联查询,以那个为准。但是如果是手工录入或者不是EDI 进去的Milestone的情况,这以这个为准
         $Milestones_NO_Mapping = common::getMilestones_NO_Mapping_Data($ocean);
@@ -5396,5 +5431,17 @@ class common {
         }
         return true; // 全部为空
     }
+
+    /**
+     *  获取页面mapping
+    */
+    public static function getPageMapping($key){
+        $pagemapping = ['Booking_Search'=>'booking','Booking_Container'=>'booking',
+            'Ocean_Search'=>'tracking','Ocean_Container'=>'tracking',
+            'shipment_status_report'=>'report',
+            'Destination_Delivery_Search'=>'destinationDelivery',
+            'destination_delivery_shipment_search'=>'destinationDelivery'];
+        return $pagemapping[$key];
+    }
 }
 ?>