PageRenderTime 26ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/b2b/core/api/shipping/2.0/api_b2b_2_0_region.php

http://phpfor.googlecode.com/
PHP | 182 lines | 134 code | 18 blank | 30 comment | 17 complexity | b64fe775be90fd9a9d9e06672978ec9b MD5 | raw file
  1. <?php
  2. include_once(CORE_DIR.'/api/shop_api_object.php');
  3. class api_b2b_2_0_region extends shop_api_object {
  4. var $app_error=array(
  5. 'region has not info'=>array('no'=>'b_region_001','debug'=>'','level'=>'warning','info'=>'??????????','desc'=>'')
  6. );
  7. function getColumns(){
  8. /* $columns=array(
  9. 'area_id'=>array('type'=>'int'),
  10. 'name'=>array('type'=>'int'),
  11. 'disabled'=>array('type'=>'int'),
  12. 'ordernum'=>array('type'=>'string')
  13. );
  14. return $columns;*/
  15. }
  16. /**
  17. * ???????????
  18. *
  19. * @param array $data
  20. *
  21. * @return ?????????
  22. */
  23. function search_sub_regions($data){
  24. $p_region_id = $data['p_region_id'];
  25. $region_id = array();
  26. if($p_region_id == 0){
  27. $sql='select region_id,local_name,region_grade from sdb_regions where disabled="false" and p_region_id IS NULL';
  28. }else{
  29. $sql='select region_id,local_name,region_grade from sdb_regions where disabled="false" and p_region_id ='.$p_region_id;
  30. }
  31. $region_list = $this->db->select($sql);
  32. //????
  33. foreach($region_list as $k=>$region){
  34. $region_id[$k]=$region['region_id'];//????????region_id
  35. $region_list[$k]['is_node'] = 0;//??????0?0:???? 1:?????
  36. unset($region_list[$k]['region_grade']);
  37. }
  38. $sql ="SELECT DISTINCT(p_region_id) FROM sdb_regions WHERE disabled='false' AND p_region_id IN (".implode(",",$region_id).")";
  39. $list = $this->db->select($sql);
  40. if($list){
  41. foreach($list as $key => $val){
  42. $search_result = array_search($val['p_region_id'],$region_id);
  43. if($search_result!==false){
  44. $region_list[$search_result]['is_node']=1;
  45. }
  46. }
  47. }
  48. $result['data_info'] = $region_list;
  49. $this->api_response('true',false,$result);
  50. }
  51. /**
  52. * ???????????
  53. *
  54. * @param array $data
  55. *
  56. * @return ?????????
  57. */
  58. function search_child_regions($data){
  59. //$key = md5($data['id'].$data['certificate_id']);//TTServer key?
  60. $case = $data['need'];
  61. if($case == 'md5'){
  62. $result['regions_md5key'] = $this->system->getConf('regions.md5key');
  63. if(!$result['regions_md5key']){
  64. $this->set_info();
  65. $result['regions_md5key'] = $this->system->getConf('regions.md5key');
  66. }
  67. }elseif ($case == 'all'){
  68. $result['regions_md5key'] = $this->system->getConf('regions.md5key');
  69. $result['regions_list'] = $this->system->getConf('regions.list');
  70. if(!$result['regions_md5key'] || !$result['regions_list']){
  71. $this->set_info();
  72. $result['regions_md5key'] = $this->system->getConf('regions.md5key');
  73. $result['regions_list'] = $this->system->getConf('regions.list');
  74. }
  75. }
  76. $this->api_response('true',false,array('data_info'=>$result));
  77. }
  78. function set_info()
  79. {
  80. $sql='select region_id,local_name,region_grade,p_region_id,region_path from sdb_regions where disabled="false"';
  81. $region_list = $this->db->select($sql);
  82. foreach($region_list as $k=>$region){
  83. $region_id[$k]=$region['region_id'];//????????region_id
  84. $region_list[$k]['is_node'] = 0;//??????0?0:???? 1:?????
  85. unset($region_list[$k]['region_grade']);
  86. }
  87. $sql ="SELECT DISTINCT(p_region_id) FROM sdb_regions WHERE disabled='false' AND p_region_id IN (".implode(",",$region_id).")";
  88. $list = $this->db->select($sql);
  89. if($list){
  90. foreach($list as $key => $val){
  91. $search_result = array_search($val['p_region_id'],$region_id);
  92. if($search_result!==false){
  93. $region_list[$search_result]['is_node']=1;
  94. }
  95. }
  96. }
  97. $listjson = serialize($region_list);
  98. $key = md5($listjson);
  99. $this->system->setConf('regions.md5key',$key,false);
  100. $this->system->setConf('regions.list',$listjson,false);
  101. }
  102. /* ????ID????ID?????????
  103. *
  104. * @param array $data
  105. *
  106. * @return ????ID????ID?????????
  107. */
  108. function search_dly_type_byid($data){
  109. //$dly_type = $this->db->selectrow('select '.implode(',',$data['columns']).' from sdb_dly_type where disabled = "false" and dt_id="'.$data['delivery_id'].'"');
  110. $dly_type_list = $this->_dltype_byarea($data['area_id']);
  111. if(!$dly_type_list){
  112. $this->add_application_error($this->app_error['region has not info']);
  113. }
  114. $dly_type = false;
  115. foreach($dly_type_list as $dly_type_row){
  116. if($dly_type_row['dt_id'] == $data['delivery_id']){
  117. $dly_type = $dly_type_row;
  118. break;
  119. }
  120. }
  121. if(!$dly_type){
  122. $this->add_application_error('region has not info');
  123. }
  124. $result['data_info'] = $dly_type;
  125. $this->api_response('true',false,$result);
  126. }
  127. function search_dltype_byarea($data){ //??????????????
  128. $rs = $this->_dltype_byarea($data['area_id']);
  129. $result['data_info'] = $rs;
  130. $this->api_response('true',false,$result);
  131. }
  132. function _dltype_byarea($areaid){
  133. $rsall = array();
  134. $rs1 = $this->db->select('SELECT t.dt_id,t.dt_name, t.protect, t.detail ,a.config AS dt_config, t.minprice,t.protect_rate,a.expressions, a.has_cod AS pad, t.ordernum
  135. FROM sdb_dly_type t INNER JOIN sdb_dly_h_area a ON t.dt_id = a.dt_id
  136. WHERE t.disabled = \'false\' AND t.dt_status = 1 AND a.areaid_group like \'%,'.intval($areaid).',%\' '.$where.' ORDER BY t.ordernum ASC , a.dha_id ASC');
  137. foreach( $rs1 as $val1) {
  138. if( !$rsall[$val1['dt_id']] )
  139. $rsall[$val1['dt_id']] = $val1;
  140. }
  141. $rs2 = $this->db->select('SELECT t.dt_id,t.dt_name, t.has_cod AS pad, t.protect, t.dt_config,
  142. t.dt_expressions AS expressions ,t.detail,t.minprice,t.protect_rate, t.ordernum
  143. FROM sdb_dly_type t WHERE t.disabled = \'false\' AND t.dt_status = 1
  144. AND ( dt_config LIKE \'%"setting";s:11:"setting_hda"%\'
  145. OR ( dt_config LIKE \'%"defAreaFee";i:1%\' AND dt_config LIKE \'%"setting";s:11:"setting_sda"%\') ) '
  146. .( $rsall?' AND t.dt_id NOT IN ( '.implode(',',array_keys($rsall)).' ) ':'' )
  147. .$where.' ORDER BY t.ordernum');
  148. foreach( $rs2 as $val2) {
  149. $rsall[$val2['dt_id']] = $val2;
  150. }
  151. $rsall1 = array();
  152. foreach( $rsall as $rsv ){
  153. $rsall1[$rsv['ordernum']][] = $rsv;
  154. }
  155. ksort( $rsall1 );
  156. $rs = array();
  157. foreach( $rsall1 as $rsorderv ){
  158. foreach( $rsorderv as $rsallv ){
  159. $rs[] = $rsallv;
  160. }
  161. }
  162. return $rs;
  163. }
  164. }