ShuanghongS 1 year ago
parent
commit
78a93ca5ee

+ 1 - 1
include.ini.php

@@ -10,7 +10,7 @@ if (!empty($_REQUEST['sessionid'])) {
 }
 }
 session_start();
 session_start();
 error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
 error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
-//error_reporting(0);
+error_reporting(0);
 
 
 ini_set("magic_quotes_runtime", 0);
 ini_set("magic_quotes_runtime", 0);
 define('IN_ONLINE', TRUE);
 define('IN_ONLINE', TRUE);

+ 15 - 11
main_new_version.php

@@ -22,7 +22,7 @@ include 'service/tools.class.php';
 //为了调用,临时做一个登录动作
 //为了调用,临时做一个登录动作
 $_POST['uname'] = "ra.admin";
 $_POST['uname'] = "ra.admin";
 $_POST['psw'] = "abc123456789";
 $_POST['psw'] = "abc123456789";
-//login::getInstance()->do_login_auto();
+login::getInstance()->do_login_auto();
 //验证路由权限
 //验证路由权限
 common::securityCheckHandNew($action);
 common::securityCheckHandNew($action);
 if (_is_only_vgm()) {
 if (_is_only_vgm()) {
@@ -48,8 +48,6 @@ switch ($action) {
     case 'opreation_log':
     case 'opreation_log':
         echo operation_log::getInstance()->operation_log();
         echo operation_log::getInstance()->operation_log();
         break;
         break;
-    
-    /* display index page */
     case 'main':
     case 'main':
         //todo
         //todo
         break;
         break;
@@ -415,9 +413,9 @@ switch ($action) {
 
 
         $sqlWhere = ' where ' . common::searchExtendHandNew("ocean", $_SESSION["ONLINE_USER"]);
         $sqlWhere = ' where ' . common::searchExtendHandNew("ocean", $_SESSION["ONLINE_USER"]);
         //默认初始条件:ALL& ETD& Current Month 当前月的1号到最后一天
         //默认初始条件:ALL& ETD& Current Month 当前月的1号到最后一天
-        if(isset($_POST['is_default']) && strtolower($_POST['is_default']) == "yes"){
+        if (isset($_POST['is_default']) && strtolower($_POST['is_default']) == "yes"){
             $sqlWhere .= "and etd>='" . date("Y-m") . "-01' and etd<='" . date("Y-m") . "-01'::date + interval '1 month'";
             $sqlWhere .= "and etd>='" . date("Y-m") . "-01' and etd<='" . date("Y-m") . "-01'::date + interval '1 month'";
-        }else{
+        } else {
             $date_type = common::check_input($_POST ['date_type']);
             $date_type = common::check_input($_POST ['date_type']);
             if (isset($_POST['date_start']) && !empty($_POST['date_start']))
             if (isset($_POST['date_start']) && !empty($_POST['date_start']))
                 $sqlWhere .= " and $date_type >= '" . common::usDate2sqlDate($_POST['date_start']) . " 00:00:00'";
                 $sqlWhere .= " and $date_type >= '" . common::usDate2sqlDate($_POST['date_start']) . " 00:00:00'";
@@ -442,15 +440,16 @@ switch ($action) {
                     to_char(etd, 'MM/DD/YYYY'::text) as etd, to_char(eta, 'MM/DD/YYYY'::text) AS eta, 
                     to_char(etd, 'MM/DD/YYYY'::text) as etd, to_char(eta, 'MM/DD/YYYY'::text) AS eta, 
                     fport_of_loading_un, mport_of_discharge_un, place_of_receipt_un, place_of_delivery_un, ctnrs, count_cntr, last_status_ctnr,booking_no,
                     fport_of_loading_un, mport_of_discharge_un, place_of_receipt_un, place_of_delivery_un, ctnrs, count_cntr, last_status_ctnr,booking_no,
                     to_char(last_status_315_date, 'MM/DD/YYYY'::text) as last_status_315_date,last_status_315_code, last_status_loc, last_status_city, order_from,
                     to_char(last_status_315_date, 'MM/DD/YYYY'::text) as last_status_315_date,last_status_315_code, last_status_loc, last_status_city, order_from,
-                    dd.status
+                    f_vessel,f_voyage,dd.*
                     FROM public.online_ocean 
                     FROM public.online_ocean 
-                    left join LATERAL (select case when a.description='Booking Confirmation' then 'Booked'
+                    left join LATERAL (select 
+                            case when a.description='Booking Confirmation' then 'Booked'
                                 when a.description='Cargo Pickup' then 'Cargo Received'
                                 when a.description='Cargo Pickup' then 'Cargo Received'
                                 when a.description='Cargo Arrived at Origin' then 'Cargo Received'
                                 when a.description='Cargo Arrived at Origin' then 'Cargo Received'
                                 when a.description='Departure' then 'Departed'
                                 when a.description='Departure' then 'Departed'
                                 when a.description='Arrived at Final Destination Port Arrived' then 'Arrived'
                                 when a.description='Arrived at Final Destination Port Arrived' then 'Arrived'
                                 when a.description='Arrived at Final Destination' then 'Completed'
                                 when a.description='Arrived at Final Destination' then 'Completed'
-                                else 'Booked' END as status
+                            else 'Booked' END as status,act_date,act_date,description
                         from  ocean_milestone a 
                         from  ocean_milestone a 
                             where a.serial_no=online_ocean.serial_no 
                             where a.serial_no=online_ocean.serial_no 
                             and a.description in (
                             and a.description in (
@@ -466,9 +465,11 @@ switch ($action) {
             //RecentStatusList
             //RecentStatusList
             $RecentStatusList = array();
             $RecentStatusList = array();
             foreach ($rss as $key => $value) {
             foreach ($rss as $key => $value) {
-                $Arrived = utils::outDisplayForMerge(common::getStatusDesc($value["last_status_315_code"]),common::_toString($value["last_status_loc"]),";");
+                //这个换成ocean_milestone,但是保留以前逻辑
+                //$Arrived = utils::outDisplayForMerge(common::getStatusDesc($value["last_status_315_code"]),common::_toString($value["last_status_loc"]),";");
+                $Arrived = $value['description'];
                 $RecentStatusList[] = array("Title"=>$value['h_bol'],
                 $RecentStatusList[] = array("Title"=>$value['h_bol'],
-                    "name"=>"MSC SHANVI III / HD433A",
+                    "name"=>$value['f_vessel']." / ".$value['f_voyage'],
                     "bookingNumber" =>$value['booking_no'],
                     "bookingNumber" =>$value['booking_no'],
                     "IsSubscribe" =>false,
                     "IsSubscribe" =>false,
                     "shipperName"=>$value['shipper'],
                     "shipperName"=>$value['shipper'],
@@ -479,7 +480,7 @@ switch ($action) {
                     "ETA"=>$value['eta'],
                     "ETA"=>$value['eta'],
                     "type"=>$value['status'],
                     "type"=>$value['status'],
                     "Arrived"=>$Arrived,
                     "Arrived"=>$Arrived,
-                    "Time"=>$value["last_status_315_date"],
+                    "Time"=>$value["act_date"],
                     "a" =>common::deCode($value['serial_no'], 'E'));
                     "a" =>common::deCode($value['serial_no'], 'E'));
             }
             }
             $arrTmp = array('searchData' => $RecentStatusList, 
             $arrTmp = array('searchData' => $RecentStatusList, 
@@ -505,6 +506,9 @@ switch ($action) {
         break; 
         break; 
     case 'password':
     case 'password':
         tools::getInstance()->updatePassword();
         tools::getInstance()->updatePassword();
+        break;    
+    case 'tools':
+        tools::getInstance()->markSystem();
         break;        
         break;        
     default:
     default:
         $data = array(
         $data = array(

+ 1 - 1
service/ajax.class.php

@@ -48,7 +48,7 @@ class ajax {
     public function save_setting_display() {
     public function save_setting_display() {
         $ids = $_POST['ids'];
         $ids = $_POST['ids'];
         if(!empty($ids)){
         if(!empty($ids)){
-            column::getInstance()->saveSettingDisplay(implode(",", $_POST['ids']),"", $_POST['model_name']);
+            column::getInstance()->saveSettingDisplay(utils::implode(",", $_POST['ids']),"", $_POST['model_name']);
             $data = array(
             $data = array(
                 'msg' => 'success'
                 'msg' => 'success'
             );
             );

+ 4 - 17
service/login.class.php

@@ -554,9 +554,10 @@ class login {
 
 
     public function generateCaptcha($length = 6) {
     public function generateCaptcha($length = 6) {
         $captcha = '';
         $captcha = '';
+        $chars = "abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ23456789";
         for ($i = 0; $i < $length; $i++) {
         for ($i = 0; $i < $length; $i++) {
             // 随机选择字母或数字
             // 随机选择字母或数字
-            $char = mt_rand(0, 1) ? rand(0, 9) : chr(rand(ord('A'), ord('Z')));
+            $char = $chars[mt_rand(0, strlen($chars) - 1)];
             $captcha .= strval($char);
             $captcha .= strval($char);
         }
         }
         return $captcha;
         return $captcha;
@@ -1229,7 +1230,7 @@ class login {
         //处理marksAndDescription
         //处理marksAndDescription
         $marksAndDescription = array("marks"=>$ocean['marks'],"description"=>$ocean['description']);
         $marksAndDescription = array("marks"=>$ocean['marks'],"description"=>$ocean['description']);
         
         
-        $sql = "SELECT " . column::getInstance()->getSearchSql('Ocean_Container') . " from oc_container where lower(serial_no) = '" . strtolower($serial_no) . "'";
+        $sql = "SELECT " . column::getInstance()->getSearchSql('Ocean_Container') . " from oc_container where lower(serial_no) = '" . strtolower($ocean['serial_no']) . "'";
         $rss = common::excuteListSql($sql);
         $rss = common::excuteListSql($sql);
         $quantity_tolal = 0;
         $quantity_tolal = 0;
         $packages = "CTN";
         $packages = "CTN";
@@ -1245,23 +1246,9 @@ class login {
         }
         }
         //Packing 不确定信息
         //Packing 不确定信息
         $packing = array("Quantity/Unit"=>$quantity_tolal.$packages,"G. Weight" => $g_weight_tolal." KGS","Ch. Weight" => $ch_weight_tolal." LBS","Volume" => $cbm_tolal." CBM");
         $packing = array("Quantity/Unit"=>$quantity_tolal.$packages,"G. Weight" => $g_weight_tolal." KGS","Ch. Weight" => $ch_weight_tolal." LBS","Volume" => $cbm_tolal." CBM");
-       
-        //Milestones info  列名固定
-        $Milestones_column = array();
-        $Milestones_column[] = array("title" =>"Milestones","field" =>"milestones","formatter" =>"","type" =>"normal");
-        $Milestones_column[] = array("title" =>"Date Time","field" =>"date_time","formatter" =>"","type" =>"dateTime");
-        $Milestones_column[] = array("title" =>"Locations","field" =>"locations","formatter" =>"","type" =>"normal");
-        $Milestones_column[] = array("title" =>"Remarks","field" =>"remarks","formatter" =>"","type" =>"normal");
 
 
         //Milestones 数据信息待定
         //Milestones 数据信息待定
-        $Milestones_data = array();
-        $Milestones_data_arr = common::excuteListSql("select description,act_date||' '||act_time as date_time, remark,timezone from  ocean_milestone a 
-		 			where a.serial_no='".$ocean['serial_no']."' order by id");           
-        foreach($Milestones_data_arr as $mda){
-            $Milestones_data[] = array("milestones"=>$mda['description'],"date_time"=>$mda['date_time'],"timezone" =>$mda['timezone'],
-                "locations" => "", "remarks" =>$mda['remark']);
-        }            
-        $Milestones = array("Milestones_column"=>$Milestones_column,"Milestones_data" =>$Milestones_data);
+        $Milestones = common::getMilestonesInfo($ocean);
 
 
         global $_COPYRIGHT;
         global $_COPYRIGHT;
         $data = array('transportInfo' => $transportInfo, 
         $data = array('transportInfo' => $transportInfo, 

+ 8 - 11
service/ocean_booking.class.php

@@ -130,11 +130,11 @@ class ocean_booking {
         $sqlWhere .= search::getInstance()->getSearchSQL("Booking_Search");
         $sqlWhere .= search::getInstance()->getSearchSQL("Booking_Search");
 
 
         //前端提交是数组
         //前端提交是数组
-        if (!empty($_POST['filterTag']) && count($_POST['filterTag']) < 4) {
-            if (count($_POST['filterTag']) == 1){
+        if (!empty($_POST['filterTag']) && utils::count($_POST['filterTag']) < 4) {
+            if (utils::count($_POST['filterTag']) == 1){
                 $filterTag = $_POST['filterTag'][0];
                 $filterTag = $_POST['filterTag'][0];
             }else{
             }else{
-                $filterTag = implode(",", $_POST['filterTag']);
+                $filterTag = utils::implode(",", $_POST['filterTag']);
             }
             }
             $_sqlwhere = "1<>1";
             $_sqlwhere = "1<>1";
             if (stripos($filterTag, "Confirmed") !== FALSE) {
             if (stripos($filterTag, "Confirmed") !== FALSE) {
@@ -201,10 +201,10 @@ class ocean_booking {
 
 
             //前端数据返回,不管有无数据
             //前端数据返回,不管有无数据
             if (!empty($_POST["filterTag"])) {
             if (!empty($_POST["filterTag"])) {
-                $tagsList = array(array("name"=>"All","number"=>$rc,"type"=>"all","checked"=>in_array('All', $_POST["filterTag"])? true : false),
-                array("name"=>"Created","number"=>$Creatd,"type"=>"created","checked"=>in_array('Created', $_POST["filterTag"])? true : false),
-                array("name"=>"Confirmed","number"=>$Confirmed,"type"=>"confirmed","checked"=>in_array('Confirmed', $_POST["filterTag"])? true : false),
-                array("name"=>"Cancelled","number"=>$Concelled,"type"=>"cancelled","checked"=>in_array('Cancelled', $_POST["filterTag"])? true : false));
+                $tagsList = array(array("name"=>"All","number"=>$rc,"type"=>"all","checked"=>utils::in_array('All', $_POST["filterTag"])? true : false),
+                array("name"=>"Created","number"=>$Creatd,"type"=>"created","checked"=>utils::in_array('Created', $_POST["filterTag"])? true : false),
+                array("name"=>"Confirmed","number"=>$Confirmed,"type"=>"confirmed","checked"=>utils::in_array('Confirmed', $_POST["filterTag"])? true : false),
+                array("name"=>"Cancelled","number"=>$Concelled,"type"=>"cancelled","checked"=>utils::in_array('Cancelled', $_POST["filterTag"])? true : false));
             }else{
             }else{
                 //初始,前端有选择着带入选择
                 //初始,前端有选择着带入选择
                 $tagsList = array(array("name"=>"All","number"=>$rc,"type"=>"all","checked"=>true),
                 $tagsList = array(array("name"=>"All","number"=>$rc,"type"=>"all","checked"=>true),
@@ -335,17 +335,14 @@ class ocean_booking {
         $ocean = common::excuteObjectSql($sql);
         $ocean = common::excuteObjectSql($sql);
 
 
         $vueData = $this->returnBookingDetailData($ocean,$status);
         $vueData = $this->returnBookingDetailData($ocean,$status);
+
         //处理transportInfo信息数据
         //处理transportInfo信息数据
         $transportInfo = $vueData["transportInfo"];
         $transportInfo = $vueData["transportInfo"];
-
         //处理basicInfo信息数据
         //处理basicInfo信息数据
         $basicInfo = $vueData["basicInfo"];
         $basicInfo = $vueData["basicInfo"];
-
         //处理 拼接地址 ocean表单exp 字段无法精准分割电话和地址信息,只能从contacts表里查询
         //处理 拼接地址 ocean表单exp 字段无法精准分割电话和地址信息,只能从contacts表里查询
         $businessPartners = $vueData["businessPartners"];
         $businessPartners = $vueData["businessPartners"];
-
         $marksAndDescription = $vueData["marksAndDescription"];
         $marksAndDescription = $vueData["marksAndDescription"];
-
         //处理ocean_reference
         //处理ocean_reference
         $ref_no = array();
         $ref_no = array();
         $ref_arr = common::excuteListSql("select * from ocean_reference where lower(serial_no) = '" . strtolower($serial_no) . "'");
         $ref_arr = common::excuteListSql("select * from ocean_reference where lower(serial_no) = '" . strtolower($serial_no) . "'");

+ 89 - 83
service/ocean_order.class.php

@@ -32,9 +32,6 @@ class ocean_order {
         $operate = utils::_get('operate');
         $operate = utils::_get('operate');
         $operate = strtolower($operate);
         $operate = strtolower($operate);
 
 
-        /*
-         * index page
-         */
         if (empty($operate)) {
         if (empty($operate)) {
             //search
             //search
             //栏位信息
             //栏位信息
@@ -44,16 +41,11 @@ class ocean_order {
             common::echo_json_encode(200,$data);
             common::echo_json_encode(200,$data);
             exit();
             exit();
         }
         }
-        /*
-         * ocean order search
-        */
+
         if ($operate == "search") {
         if ($operate == "search") {
             $this->_ocean_search();
             $this->_ocean_search();
         }
         }
 
 
-        /*
-         * ocean order detail
-        */
         if ($operate == "detail") {
         if ($operate == "detail") {
             $this->_ocean_detail();
             $this->_ocean_detail();
         }
         }
@@ -140,7 +132,7 @@ class ocean_order {
         if ($operate == "ocean_vgm") {
         if ($operate == "ocean_vgm") {
             if (!_canEdiVgm()) {
             if (!_canEdiVgm()) {
                 $data = array("msg" =>"Vgm Permission Error");
                 $data = array("msg" =>"Vgm Permission Error");
-                common::echo_json_encode(200, $data);
+                common::echo_json_encode(400, $data);
                 exit();
                 exit();
             }
             }
             $serial_no = common::deCode(($_GET["a"]), 'D');
             $serial_no = common::deCode(($_GET["a"]), 'D');
@@ -195,13 +187,17 @@ class ocean_order {
             $detail_information_column = array();
             $detail_information_column = array();
             $detail_information_column[] = array("title" =>"SN","field" =>"sn","formatter" =>"","edit_type" =>"normal",);
             $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" =>"Carrier Booking No.","field" =>"carrier_booking_no","formatter" =>"","edit_type" =>"normal");
-            $detail_information_column[] = array("title" =>"Container No","field" =>"ctnr","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" =>"input");
             $detail_information_column[] = array("title" =>"VGM Weight","field" =>"vgm_weight","formatter" =>"","edit_type" =>"input");
-            $detail_information_column[] = array("title" =>"VGM Unit","field" =>"unit","formatter" =>"","edit_type" =>"select");
-            $detail_information_column[] = array("title" =>"VGM Time","field" =>"vgm_time","formatter" =>"","edit_type" =>"dateTime");
+            $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" =>"VGM Method","field" =>"vgm_method","formatter" =>"","edit_type" =>"input");
+
             foreach($rs as $rk => $rv){
             foreach($rs as $rk => $rv){
-                $log[$rk]['sn'] = $rk +1;
+                $rs[$rk]['sn'] = $rk +1;
+                $rs[$rk]['container_no'] = $rv['ctnr'];
+                $rs[$rk]['vgm_kg_lg'] = $rv['unit'];
+                $rs[$rk]['vgm_date'] = $rv['vgm_time'];
             }
             }
             $detail_information =array("detail_information_column" =>$detail_information_column,
             $detail_information =array("detail_information_column" =>$detail_information_column,
                 "detail_information_data" =>$rs);
                 "detail_information_data" =>$rs);
@@ -246,12 +242,17 @@ class ocean_order {
         if ($operate == "save_ocean_vgm") {
         if ($operate == "save_ocean_vgm") {
             if (!_canEdiVgm()) {
             if (!_canEdiVgm()) {
                 $data = array("msg" =>"Vgm Permission Error");
                 $data = array("msg" =>"Vgm Permission Error");
-                common::echo_json_encode(200, $data);
+                common::echo_json_encode(400, $data);
                 exit();
                 exit();
             }
             }
             $msg = $this->save_vgm();
             $msg = $this->save_vgm();
-            $data = array("msg" =>$msg);
-            common::echo_json_encode(200, $data);
+            if ($msg == "success"){
+                $data = array("msg" =>$msg);
+                common::echo_json_encode(200, $data);
+            } else {
+                $data = array("msg" =>$msg);
+                common::echo_json_encode(500, $data);
+            }
             exit();
             exit();
         }
         }
     }
     }
@@ -373,10 +374,10 @@ class ocean_order {
         // IFFARR;Arrived at Final Destination Port
         // IFFARR;Arrived at Final Destination Port
         // IFFAFD;Arrived at Final Destination
         // IFFAFD;Arrived at Final Destination
         if (!empty($_POST["filterTag"])) {
         if (!empty($_POST["filterTag"])) {
-            if (count($_POST['filterTag']) == 1){
+            if (utils::count($_POST['filterTag']) == 1){
                 $filterTag = $_POST['filterTag'][0];
                 $filterTag = $_POST['filterTag'][0];
             }else{
             }else{
-                $filterTag = implode(",", $_POST['filterTag']);
+                $filterTag = utils::implode(",", $_POST['filterTag']);
             }
             }
 
 
             $_sqlwhere = "1<>1";
             $_sqlwhere = "1<>1";
@@ -463,12 +464,12 @@ class ocean_order {
             
             
 
 
             if (!empty($_POST["filterTag"])) {
             if (!empty($_POST["filterTag"])) {
-                $tagsList = array(array("name"=>"All","number"=>$rc,"type"=>"all","checked"=>in_array('All', $_POST["filterTag"])? true : false),
-                array("name"=>"Booked","number"=>$Booked,"type"=>"booked","checked"=>in_array('Booked', $_POST["filterTag"])? true : false),
-                array("name"=>"Cargo Received","number"=>$Cargo_Received,"type"=>"cargo_received","checked"=>in_array('Cargo Received', $_POST["filterTag"])? true : false),
-                array("name"=>"Departure","number"=>$Departed,"type"=>"departure","checked"=>in_array('Departure', $_POST["filterTag"])? true : false),
-                array("name"=>"Arrived","number"=>$Arrived,"type"=>"arrived","checked"=>in_array('Arrived', $_POST["filterTag"])? true : false),
-                array("name"=>"Completed","number"=>$Completed,"type"=>"completed","checked"=>in_array('Completed', $_POST["filterTag"])? true : false));
+                $tagsList = array(array("name"=>"All","number"=>$rc,"type"=>"all","checked"=>utils::in_array('All', $_POST["filterTag"])? true : false),
+                array("name"=>"Booked","number"=>$Booked,"type"=>"booked","checked"=>utils::in_array('Booked', $_POST["filterTag"])? true : false),
+                array("name"=>"Cargo Received","number"=>$Cargo_Received,"type"=>"cargo_received","checked"=>utils::in_array('Cargo Received', $_POST["filterTag"])? true : false),
+                array("name"=>"Departure","number"=>$Departed,"type"=>"departure","checked"=>utils::in_array('Departure', $_POST["filterTag"])? true : false),
+                array("name"=>"Arrived","number"=>$Arrived,"type"=>"arrived","checked"=>utils::in_array('Arrived', $_POST["filterTag"])? true : false),
+                array("name"=>"Completed","number"=>$Completed,"type"=>"completed","checked"=>utils::in_array('Completed', $_POST["filterTag"])? true : false));
             }else{
             }else{
                 //初始,前端有选择着带入选择
                 //初始,前端有选择着带入选择
                 $tagsList = array(array("name"=>"All","number"=>$rc,"type"=>"all","checked"=> true ),
                 $tagsList = array(array("name"=>"All","number"=>$rc,"type"=>"all","checked"=> true ),
@@ -546,7 +547,7 @@ class ocean_order {
                 'tagsList' => $tagsList,
                 'tagsList' => $tagsList,
                 'TransportList' => $TransportList,
                 'TransportList' => $TransportList,
                 'allColums' => $allBookingColumns,
                 'allColums' => $allBookingColumns,
-                'allColcanEdiVgmums' => _canEdiVgm(),
+                'canEdiVgm' => _canEdiVgm(),
                 'rc' => $rc,
                 'rc' => $rc,
                 'ps' => $ps,
                 'ps' => $ps,
                 'cp' => $cp,
                 'cp' => $cp,
@@ -585,7 +586,6 @@ class ocean_order {
                 //desc 逻辑处理取消
                 //desc 逻辑处理取消
                 $state = common::getStatusStage($mostStatus["last_status_315_code"]);
                 $state = common::getStatusStage($mostStatus["last_status_315_code"]);
             }
             }
-
             //请求地图是需要的参数
             //请求地图是需要的参数
             $uncode = "'";
             $uncode = "'";
             if ($mostStatus["place_of_receipt_un"] != $mostStatus["fport_of_loading_un"]) {
             if ($mostStatus["place_of_receipt_un"] != $mostStatus["fport_of_loading_un"]) {
@@ -599,32 +599,28 @@ class ocean_order {
         }
         }
 
 
         $vueData = $this->returnOceanDetailData($ocean,$state);
         $vueData = $this->returnOceanDetailData($ocean,$state);
+
         //处理shipment data暂时写死
         //处理shipment data暂时写死
         $simplexData = $vueData['shipmentData'];
         $simplexData = $vueData['shipmentData'];
-       
         //处理transportInfo信息数据
         //处理transportInfo信息数据
         $transportInfo = $vueData['transportInfo'];
         $transportInfo = $vueData['transportInfo'];
-
         //处理basicInfo信息数据
         //处理basicInfo信息数据
         $basicInfo = $vueData['basicInfo'];
         $basicInfo = $vueData['basicInfo'];
-
         //处理 拼接地址 ocean表单exp 字段无法精准分割电话和地址信息,只能从contacts表里查询
         //处理 拼接地址 ocean表单exp 字段无法精准分割电话和地址信息,只能从contacts表里查询
         $businessPartners = $vueData['businessPartners'];
         $businessPartners = $vueData['businessPartners'];
-    
         //处理routes 转船可能有多个情况
         //处理routes 转船可能有多个情况
         $routes = $vueData['routes']; 
         $routes = $vueData['routes']; 
-
         //处理marksAndDescription
         //处理marksAndDescription
         $marksAndDescription = $vueData['marksAndDescription']; 
         $marksAndDescription = $vueData['marksAndDescription']; 
 
 
-         //处理ocean_reference
-         $ref_no = array();
-         $ref_arr = common::excuteListSql("select * from ocean_reference where lower(serial_no) = '" . strtolower($serial_no) . "'");
-         if(!empty($ref_arr)){
-             foreach($ref_arr as  $ref) {
-                 $ref_no[] = array("label"=>$ref["ref_code"],"value"=>$ref["ref_value"]);
-             }
-         }
+        //处理ocean_reference
+        $ref_no = array();
+        $ref_arr = common::excuteListSql("select * from ocean_reference where lower(serial_no) = '" . strtolower($serial_no) . "'");
+        if(!empty($ref_arr)){
+            foreach($ref_arr as  $ref) {
+                $ref_no[] = array("label"=>$ref["ref_code"],"value"=>$ref["ref_value"]);
+            }
+        }
         
         
         //处理Container :配置Ocean_Container字段 UI 需要的字段有:Container.no Packing,quantity,Gross weight(kg),Gross weight(LB),CBM,seal#,size.service
         //处理Container :配置Ocean_Container字段 UI 需要的字段有:Container.no Packing,quantity,Gross weight(kg),Gross weight(LB),CBM,seal#,size.service
         $ocean_container_column = array();
         $ocean_container_column = array();
@@ -660,30 +656,50 @@ class ocean_order {
        
        
         /* Container Status */
         /* Container Status */
         //数据库里配置好
         //数据库里配置好
-        $sql = "SELECT " . column::getInstance()->getSearchSql('Ocean_Container_Status') . " from oc_container_v where lower(serial_no) = '" . strtolower($serial_no) . "'";
-        $rss = common::excuteListSql($sql);
-        $containerStatusData = array();
-        if (!empty($rss)) {
+        //$sql = "SELECT " . column::getInstance()->getSearchSql('Ocean_Container_Status') . " from oc_container_v where lower(serial_no) = '" . strtolower($serial_no) . "'";
+        $ctnr_sql = "SELECT oc.ctnr, oc.serial_no,oc.size FROM oc_container oc LEFT JOIN ocean o ON oc.serial_no = o.serial_no 
+                WHERE o.serial_no='$serial_no'";
+        $ctnr_data = common::excuteListSql($ctnr_sql); 
+        $containerStatusData = array();   
+        foreach ($ctnr_data as $cd){
+            $ctnr_status_sql = "select s.source_id, s.event_base as event,
+                    to_char(to_timestamp(s.event_date, 'YYYYMMDD'), 'YYYY-MM-DD') as eventdate,
+                    to_char(to_timestamp(s.event_time, 'HH24MI'), 'HH24:MI') as eventtime,
+                    e.description,s.event_type as eventtype, 
+                    s.event_code as eventcode, s.event_city as eventcity 
+                from public.ra_online_container_status_v s 
+                    left join ra_online_edi_event e on s.event_base = e.ra_name 
+                where s.serial_no = '" . pg_escape_string($cd['serial_no']) . "' 
+                    and s.container_no = '" . pg_escape_string($cd['ctnr']) . "' and is_display = true 
+                order by to_timestamp(s.event_date, 'YYYYMMDD') asc,
+                    to_timestamp(s.event_time, 'HH24MI') asc,
+                    e.ra_order asc";
+            $ctnr_status = common::excuteListSql($ctnr_status_sql);       
+
             //Container_Status 新版只显示几个状态, CTNR# EE I AE VD VA
             //Container_Status 新版只显示几个状态, CTNR# EE I AE VD VA
             $container_status_column = array("EE","I","AE","VD","VA");
             $container_status_column = array("EE","I","AE","VD","VA");
-            foreach ($rss as $rsk => $rs) {
-                $containerStatusDataTemp = array();
-                $content = array();
-                //新UI 还有站点取值,但不清楚取的什么值,CN,SHK 暂时写死
-                foreach($container_status_column as $status){
-                    $dec = common::excuteOneSql("select description from ra_online_edi_event where ra_name = '" . $status . "'");
-                    $status = strtolower($status);
-                    $content[] = array("title" =>$dec,"date"=>common::date2usdate($rs[$status]),"country"=>"CN,SHK");
+            $containerStatusDataTemp = array();
+            $content = array();
+            foreach($container_status_column as $status){
+                foreach($ctnr_status as $event){
+                    if(strtolower($event['event']) == strtolower($status)){
+                        $eventdate = $event["eventdate"];
+                        if (empty($event["source_id"]) || $event["source_id"]==0) {
+                            $eventdate.= " " . $event["eventtime"];
+                        }
+                        $location_code = $event["eventtype"] . "," . $event["eventcode"];
+                        $content[] = array("title" =>$event['description'],"date"=>$eventdate,"country"=>$location_code);
+                    }
                 }
                 }
-
-                $containerStatusDataTemp['label'] = $rs['ctnr']." / ".$rs['size'];
-                $containerStatusDataTemp['content'] = $content;
-                $containerStatusData[] = $containerStatusDataTemp;
             }
             }
-        }
+
+            $containerStatusDataTemp['label'] = $cd['ctnr']." / ".$cd['size'];
+            $containerStatusDataTemp['content'] = $content;
+            $containerStatusData[] = $containerStatusDataTemp;
+        } 
 
 
         //Milestones info  列名固定
         //Milestones info  列名固定
-        $Milestones = $this->getMilestonesInfo($ocean);
+        $Milestones = common::getMilestonesInfo($ocean);
 
 
         //页面固定写死的信息
         //页面固定写死的信息
         $document_column = array();
         $document_column = array();
@@ -823,7 +839,7 @@ class ocean_order {
                     $amses[] = $cbpdb->GetAll("select * from ams_info where h_bol = '" . pg_escape_string($v['h_bol']) . "'");
                     $amses[] = $cbpdb->GetAll("select * from ams_info where h_bol = '" . pg_escape_string($v['h_bol']) . "'");
                 }
                 }
                 //考虑一个情况
                 //考虑一个情况
-                if (count($amses) > 0) {
+                if (utils::count($amses) > 0) {
                     $ams = $amses[0];
                     $ams = $amses[0];
                     $carrier_hbol = substr($ams[0]['m_bol'], 4);
                     $carrier_hbol = substr($ams[0]['m_bol'], 4);
                     $carrier_scac = substr($ams[0]['m_bol'], 0, 4);
                     $carrier_scac = substr($ams[0]['m_bol'], 0, 4);
@@ -1192,6 +1208,7 @@ class ocean_order {
 
 
     private function returnOceanDetailData($ocean,$state){
     private function returnOceanDetailData($ocean,$state){
         $data = array();
         $data = array();
+
         //处理shipment data暂时写死
         //处理shipment data暂时写死
         $simplexData = array();
         $simplexData = array();
         $simplexData[] = array("index" =>1,"label" =>"Place of Receipt",
         $simplexData[] = array("index" =>1,"label" =>"Place of Receipt",
@@ -1242,9 +1259,19 @@ class ocean_order {
         $data['businessPartners'] = $businessPartners;  
         $data['businessPartners'] = $businessPartners;  
     
     
         //处理routes 转船可能有多个情况
         //处理routes 转船可能有多个情况
-        $routes = array(array("mode" =>"Sea", "origin" =>$ocean['origin_station'],
-            "destination" => $ocean['destination_station'], "etd" => $ocean['f_etd'],"atd" => "",
-            "eta" =>$ocean['m_eta'],"ata" =>"","vessel" =>$vessel,"voyageNo" =>$voyage));
+        $routes = array(array("mode" =>"Sea", "origin" =>$ocean['fport_of_loading'],
+            "destination" => $ocean['fport_of_discharge'],
+            "etd" => $ocean['f_etd'],"atd" => "",
+            "eta" =>$ocean['f_eta'],"ata" =>"",
+            "vessel" =>$ocean['f_vessel'],"voyageNo" =>$ocean['f_voyage']));
+        //不是直航
+        if ($ocean['is_vessel_direct'] <> "t"){
+            $routes[] = array("mode" =>"Sea", "origin" =>$ocean['mport_of_loading'],
+                "destination" => $ocean['mport_of_discharge'],
+                "etd" => $ocean['m_etd'],"atd" => "",
+                "eta" =>$ocean['m_eta'],"ata" =>"",
+                "vessel" =>$ocean['m_vessel'],"voyageNo" =>$ocean['m_voyage']);
+        }
         $data['routes'] = $routes;
         $data['routes'] = $routes;
         
         
         //处理marksAndDescription
         //处理marksAndDescription
@@ -1253,26 +1280,5 @@ class ocean_order {
 
 
         return $data;    
         return $data;    
     }
     }
-
-    private function getMilestonesInfo($ocean){
-        //Milestones info  列名固定
-        $Milestones_column = array();
-        $Milestones_column[] = array("title" =>"Milestones","field" =>"milestones","formatter" =>"","type" =>"normal");
-        $Milestones_column[] = array("title" =>"Date Time","field" =>"date_time","formatter" =>"","type" =>"dateTime");
-        $Milestones_column[] = array("title" =>"Locations","field" =>"locations","formatter" =>"","type" =>"normal");
-        $Milestones_column[] = array("title" =>"Remarks","field" =>"remarks","formatter" =>"","type" =>"normal");
-
-        //Milestones 数据信息待定
-        $Milestones_data = array();
-        $Milestones_data_arr = common::excuteListSql("select description,act_date||' '||act_time as date_time, remark,timezone from  ocean_milestone a 
-		 			where a.serial_no='".$ocean["serial_no"]."' order by id");           
-        foreach($Milestones_data_arr as $mda){
-            $Milestones_data[] = array("milestones"=>$mda['description'],"date_time"=>$mda['date_time'],"timezone" =>$mda['timezone'],
-                "locations" => "", "remarks" =>$mda['remark']);
-        }  
-        $Milestones = array("Milestones_column"=>$Milestones_column,"Milestones_data" =>$Milestones_data);
-
-        return $Milestones;
-    }
 }
 }
 ?>
 ?>

+ 13 - 2
service/tools.class.php

@@ -24,7 +24,7 @@ class tools {
     /*
     /*
      * update password when login success
      * update password when login success
     */
     */
-     public function updatePassword() {
+    public function updatePassword() {
         if ($_SESSION['ONLINE_USER']['is_demo'] == "t") {
         if ($_SESSION['ONLINE_USER']['is_demo'] == "t") {
             $str = "DEMO cannot update password.";
             $str = "DEMO cannot update password.";
         } else {
         } else {
@@ -61,7 +61,18 @@ class tools {
         common::echo_json_encode(200, $returnData);
         common::echo_json_encode(200, $returnData);
         exit();
         exit();
     }
     }
-    
+
+    public function markSystem(){
+        $operate = utils::_get('operate');
+        $operate = strtolower($operate);
+
+        if ($operate == "mark_save") {
+            $data = array("msg" =>"success");
+            common::echo_json_encode(200,$data);
+            exit();
+        }
+    }
+
 }
 }
 
 
 ?>
 ?>

+ 45 - 6
utils/common.class.php

@@ -1194,7 +1194,7 @@ class common {
                 $co2e_orgin_sql = "select SUM(COALESCE(carbon_emission,0)::numeric(12,10)) as catnum ,origin as station from online_ocean  where 1=1 $sqlWhere group by origin order by catnum desc limit 10";
                 $co2e_orgin_sql = "select SUM(COALESCE(carbon_emission,0)::numeric(12,10)) as catnum ,origin as station from online_ocean  where 1=1 $sqlWhere group by origin order by catnum desc limit 10";
                 $co2e = common::excuteListSql($co2e_orgin_sql);
                 $co2e = common::excuteListSql($co2e_orgin_sql);
             }
             }
-            if ($type == "co2e_desination"){
+            if ($type == "co2e_destination"){
                 $co2e_agent_sql = "select SUM(COALESCE(carbon_emission,0)::numeric(12,10)) as catnum,agent as station from online_ocean  where 1=1 $sqlWhere group by agent order by catnum desc limit 10";
                 $co2e_agent_sql = "select SUM(COALESCE(carbon_emission,0)::numeric(12,10)) as catnum,agent as station from online_ocean  where 1=1 $sqlWhere group by agent order by catnum desc limit 10";
                 $co2e = common::excuteListSql($co2e_agent_sql);
                 $co2e = common::excuteListSql($co2e_agent_sql);
             }
             }
@@ -1253,6 +1253,7 @@ class common {
 
 
 
 
         $toporigin = array();
         $toporigin = array();
+        $toporiginMap = array();
         $i = 0;
         $i = 0;
         $origiNunMax = 0;
         $origiNunMax = 0;
         foreach($orgin10 as $orgin){
         foreach($orgin10 as $orgin){
@@ -1264,11 +1265,19 @@ class common {
             $map = common::excuteObjectSql($map_sql);   
             $map = common::excuteObjectSql($map_sql);   
             $json = '{"lng":"100.78594000","lat":"13.68521000","label":"'.$orgin['origin'].'","infor":"LAT KRABANG, THAILAND","sort":"0","stime":null,"ptype":"por"}';
             $json = '{"lng":"100.78594000","lat":"13.68521000","label":"'.$orgin['origin'].'","infor":"LAT KRABANG, THAILAND","sort":"0","stime":null,"ptype":"por"}';
             $map = json_decode($json,true); 
             $map = json_decode($json,true); 
-            $toporigin[] = array("name"=>$orgin['origin'],"value"=>$orgin['num'],"color"=>common::getItemStyle("top",$i),"map"=>$map);
+
+            $toporiginMap[] = array("qandl"=>array($map['lng']-$i*10,$map['lat']-$i*10),
+                "divIcon" => array("iconSize"=>0),
+                "name" =>$orgin['origin'],
+                "color" =>common::getItemStyle("top",$i),
+                "value" =>$orgin['num'],
+                "textcolor" =>"#FFF");
+            $toporigin[] = array("name"=>$orgin['origin'],"value"=>$orgin['num'],"color"=>common::getItemStyle("top",$i));
             $origiNunMax = $origiNunMax < $orgin['num'] ? $orgin['num'] : $origiNunMax;
             $origiNunMax = $origiNunMax < $orgin['num'] ? $orgin['num'] : $origiNunMax;
         }
         }
 
 
         $topdestination = array();
         $topdestination = array();
+        $topdestinationinMap = array();
         $i = 0;
         $i = 0;
         $agentiNunMax = 0;
         $agentiNunMax = 0;
         foreach($agent10 as $agent){
         foreach($agent10 as $agent){
@@ -1281,17 +1290,26 @@ class common {
 
 
             $json = '{"lng":"100.78594000","lat":"13.68521000","label":"'.$agent['agent'].'","infor":"LAT KRABANG, THAILAND","sort":"0","stime":null,"ptype":"por"}';
             $json = '{"lng":"100.78594000","lat":"13.68521000","label":"'.$agent['agent'].'","infor":"LAT KRABANG, THAILAND","sort":"0","stime":null,"ptype":"por"}';
             $map = json_decode($json,true);
             $map = json_decode($json,true);
-            $topdestination[] = array("name"=>$agent['agent'],"value"=>$agent['num'],"color"=>common::getItemStyle("top",$i),"map"=>$map);
+
+            $toporiginMap[] = array("qandl"=>array($map['lng'],$map['lat']),
+                "divIcon" => array("iconSize"=>0),
+                "name" =>$orgin['origin'],
+                "color" =>common::getItemStyle("top",$i),
+                "value" =>$agent['num'],
+                "textcolor" =>"#FFF");
+            $topdestination[] = array("name"=>$agent['agent'],"value"=>$agent['num'],"color"=>common::getItemStyle("top",$i));
             $agentiNunMax = $agentiNunMax < $agent['num'] ? $agent['num'] : $agentiNunMax;
             $agentiNunMax = $agentiNunMax < $agent['num'] ? $agent['num'] : $agentiNunMax;
         }
         }
 
 
         //处理返回原表数据格式
         //处理返回原表数据格式
-        $interval = utils::calculateTicks(0,$origiNunMax,10);
+        $maximum_of_both = $origiNunMax >$agentiNunMax ? $origiNunMax : $agentiNunMax;
+        $interval = utils::calculateTicks(0,$maximum_of_both,10);
         if($interval == 0){
         if($interval == 0){
             //处理返回默认值
             //处理返回默认值
             $interval = 1;
             $interval = 1;
         }
         }
-        $returnData = array("seller_data_list_origin"=>$toporigin,"seller_data_list_destination"=>$topdestination,
+        $returnData = array("seller_data_list_origin"=>$toporigin,"toporiginMap"=>$toporiginMap,
+            "seller_data_list_destination"=>$topdestination,"topdestinationinMap"=>$topdestinationinMap,
             "min" => 0,"Max" =>$interval*10,"interval" =>$interval);
             "min" => 0,"Max" =>$interval*10,"interval" =>$interval);
         return $returnData;
         return $returnData;
     }
     }
@@ -1385,7 +1403,7 @@ class common {
                 continue;
                 continue;
             }
             }
             if (is_array($v)) {
             if (is_array($v)) {
-                $v = implode(",", $v);
+                $v = utils::implode(",", $v);
             }
             }
             if (empty($field)) {
             if (empty($field)) {
                 $field = $k;
                 $field = $k;
@@ -1441,5 +1459,26 @@ class common {
 
 
         return $str;
         return $str;
     }
     }
+
+    public static function getMilestonesInfo($ocean){
+        //Milestones info  列名固定
+        $Milestones_column = array();
+        $Milestones_column[] = array("title" =>"Milestones","field" =>"milestones","formatter" =>"","type" =>"normal");
+        $Milestones_column[] = array("title" =>"Date Time","field" =>"date_time","formatter" =>"","type" =>"dateTime");
+        $Milestones_column[] = array("title" =>"Locations","field" =>"locations","formatter" =>"","type" =>"normal");
+        $Milestones_column[] = array("title" =>"Remarks","field" =>"remarks","formatter" =>"","type" =>"normal");
+
+        //Milestones 数据信息待定
+        $Milestones_data = array();
+        $Milestones_data_arr = common::excuteListSql("select description,act_date||' '||act_time as date_time, remark,timezone from  ocean_milestone a 
+		 			where a.serial_no='".$ocean["serial_no"]."' order by id");           
+        foreach($Milestones_data_arr as $mda){
+            $Milestones_data[] = array("milestones"=>$mda['description'],"date_time"=>$mda['date_time'],"timezone" =>$mda['timezone'],
+                "locations" => "", "remarks" =>$mda['remark']);
+        }  
+        $Milestones = array("Milestones_column"=>$Milestones_column,"Milestones_data" =>$Milestones_data);
+
+        return $Milestones;
+    }
 }
 }
 ?>
 ?>

+ 43 - 11
utils/utils.class.php

@@ -355,8 +355,10 @@ class utils {
         }
         }
         $user_type = _isCustomerLogin() ? "Customer" : "Employee";
         $user_type = _isCustomerLogin() ? "Customer" : "Employee";
         $user_name = _getLoginName();
         $user_name = _getLoginName();
-        $page = utils::getPageByAction($_REQUEST["action"],$_REQUEST["operate"]);
-        $operation = $_REQUEST["operate"];
+
+        $operateInfo = utils::getPageByAction($_REQUEST["action"],$_REQUEST["operate"]);
+        $page = $operateInfo["page"];
+        $operation = $operateInfo["operate"];
         $operation_detail = utils::jsonFiltration("null", "\"\"", json_encode($_REQUEST));
         $operation_detail = utils::jsonFiltration("null", "\"\"", json_encode($_REQUEST));
         $sql = "INSERT INTO public.customer_service_operation_log(user_type, user_name, page, operation, operation_detail, 
         $sql = "INSERT INTO public.customer_service_operation_log(user_type, user_name, page, operation, operation_detail, 
             operation_time) 
             operation_time) 
@@ -366,18 +368,26 @@ class utils {
 
 
     public static function getPageByAction($action,$operate){
     public static function getPageByAction($action,$operate){
         //取消
         //取消
-        $actionConvert = array(
+        $operationConvertName = array(
             "login=do_login" => array("page" =>"Login","operate"=>"Login"),
             "login=do_login" => array("page" =>"Login","operate"=>"Login"),
             "login=logout" => array("page" =>"logout","operate"=>"logout"),
             "login=logout" => array("page" =>"logout","operate"=>"logout"),
-            "ocean_booking" => array("page" =>"logout","operate"=>"logout"),
-            "ocean_order" => array("page" =>"logout","operate"=>"logout"));
+            "login=update_pwd_expires" => array("page" =>"Login","operate"=>"Reset password"),
+            "ocean_booking=search" => array("page" =>"Booking","operate"=>"Search"),
+            "ocean_booking=setting_display" => array("page" =>"Booking","operate"=>"Customize Coulumns"),
+            "ocean_booking=detail" => array("page" =>"Booking","operate"=>"Open Detailed Page"),
+            "ocean_booking=excel" => array("page" =>"Booking","operate"=>"Download"),
+            "ocean_booking=save_communication" => array("page" =>"Booking","operate"=>"Send Email"),
 
 
-        if($action == "ocean_booking"){
-            $action = "Booking";
-        }elseif($action == "ocean_order"){
-            $action = "Tracking";
-        }
-        return ucfirst($action);
+            "login=tracking_checked" => array("page" =>"Tracking","operate"=>"Public tracking"),
+            "ocean_order=search" => array("page" =>"Tracking","operate"=>"Search"),
+            "ocean_order=setting_display" => array("page" =>"Tracking","operate"=>"Customize Coulumns"),
+            "ocean_order=detail" => array("page" =>"Tracking","operate"=>"Open Detailed Page"),
+            "ocean_order=excel" => array("page" =>"Tracking","operate"=>"Download"),
+            "ocean_booking=save_communication" => array("page" =>"Tracking","operate"=>"Send Email"),
+
+            "password=" => array("page" =>"Profile","operate"=>"Change password"));
+
+        return $operationConvertName[$action."=".$operate];
     }
     }
 
 
     public static function calculateTicks($minValue, $maxValue, $targetTickCount = 10) {
     public static function calculateTicks($minValue, $maxValue, $targetTickCount = 10) {
@@ -395,5 +405,27 @@ class utils {
     public static function uuid() {
     public static function uuid() {
         return strtoupper(md5(uniqid("", TRUE) . mt_rand()));
         return strtoupper(md5(uniqid("", TRUE) . mt_rand()));
     }
     }
+
+    public static function count($variable){
+        if (is_array($variable)) {
+            $count = count($variable);
+        } else {
+            $count = 0;
+        }
+        return $count;
+    }
+
+    public static function implode($variable){
+        $variable = isset($variable) && is_array($variable) ? $variable : array();
+        return implode(',', $variable);
+    }
+
+    public static function in_array($str, $arr){
+        if (is_array($arr)) {
+            return in_array($str, $arr);
+        } else {
+            return false;
+        }
+    }
 }
 }
 ?>
 ?>