XpressEngine Core  1.11.2
 All Classes Namespaces Files Functions Variables Pages
krzip.model.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) NAVER <http://www.navercorp.com> */
9 class krzipModel extends krzip
10 {
15  function getConfig()
16  {
17  if(!isset($this->module_config))
18  {
19  $oModuleModel = getModel('module');
20  $module_config = $oModuleModel->getModuleConfig('krzip');
21  if(!is_object($module_config))
22  {
23  $module_config = new stdClass();
24  }
25 
26  /* 기본 설정 추가 */
27  $default_config = self::$default_config;
28  foreach($default_config as $key => $val)
29  {
30  if(!isset($module_config->{$key}))
31  {
32  $module_config->{$key} = $val;
33  }
34  }
35 
36  $this->module_config = $module_config;
37  }
38 
39  return $this->module_config;
40  }
41 
47  function getMigratedPostcode($values)
48  {
49  if(is_array($values))
50  {
51  $values = array_values($values);
52 
53  /* 5자리 우편변호 마이그레이션 */
54  if(count($values) == 4 && preg_match('/^\(?[0-9a-z\x20-]{5,10}\)?$/i', trim($values[0])))
55  {
56  return $values;
57  }
58 
59  $values = implode(' ', $values);
60  }
61 
62  $output = array('', trim(preg_replace('/\s+/', ' ', $values)), '', '', '');
63 
64  /* 우편번호 */
65  if(preg_match('/\(?([0-9-]{5,7})\)?/', $output[1], $matches))
66  {
67  $output[1] = trim(preg_replace('/\s+/', ' ', str_replace($matches[0], '', $output[1])));
68  $output[0] = $matches[1];
69  }
70 
71  /* 지번 주소 */
72  if(preg_match('/\(.+\s.+[읍면동리(마을)(0-9+가)]\s[0-9-]+\)/', $output[1], $matches))
73  {
74  $output[1] = trim(str_replace($matches[0], '', $output[1]));
75  $output[2] = $matches[0];
76  }
77 
78  /* 부가 정보 */
79  if(preg_match('/\(.+[읍면동리(마을)(0-9+가)](?:,.*)?\)/u', $output[1], $matches))
80  {
81  $output[1] = trim(str_replace($matches[0], '', $output[1]));
82  $output[4] = $matches[0];
83  }
84 
85  /* 상세 주소 */
86  if(preg_match('/^(.+ [가-힝]+[0-9]*[동리로길]\s*[0-9-]+(?:번지?)?),?\s+(.+)$/u', $output[1], $matches))
87  {
88  $output[1] = trim($matches[1]);
89  $output[3] = trim($matches[2]);
90  }
91 
92  return $output;
93  }
94 
100  function getKrzipCodeList($query)
101  {
102  $module_config = $this->getConfig();
103  if($module_config->api_handler != 1)
104  {
105  return $this->makeObject(-1, 'msg_invalid_request');
106  }
107  if(!isset($query))
108  {
109  $query = Context::get('query');
110  }
111 
112  $query = trim(strval($query));
113  if($query === '')
114  {
115  return $this->stop('msg_krzip_no_query');
116  }
117 
118  $output = $this->getEpostapiSearch($query);
119  /* XML Request에서는 Array 치환에 대한 문제로 이 함수를 제대로 사용할 수 없음 */
120  $this->add('address_list', $output->get('address_list'));
121  if(!$output->toBool())
122  {
123  return $output;
124  }
125  }
126 
132  function getEpostapiSearch($query = '')
133  {
138  $encoding = strtoupper(mb_detect_encoding($query));
139  if($encoding !== 'EUC-KR')
140  {
141  $query = iconv($encoding, 'EUC-KR', $query);
142  }
143 
144  $module_config = $this->getConfig();
145  $regkey = $module_config->epostapi_regkey;
146 
147  $fields = array(
148  'target' => 'postNew', /* 도로명 주소 */
149  'regkey' => $regkey,
150  'query' => $query
151  );
152  $headers = array(
153  'accept-language' => 'ko'
154  );
155  $request_config = array(
156  'ssl_verify_peer' => FALSE
157  );
158 
160  self::$epostapi_host,
161  NULL,
162  30,
163  'POST',
164  'application/x-www-form-urlencoded',
165  $headers,
166  array(),
167  $fields,
168  $request_config
169  );
170 
171  $oXmlParser = new XmlParser();
172  $result = $oXmlParser->parse($buff);
173  if($result->error)
174  {
175  $err_msg = trim($result->error->message->body);
176  if(!$err_msg)
177  {
178  $err_code = intval(str_replace('ERR-', '', $result->error->error_code->body));
179  switch($err_code)
180  {
181  case 1:
182  $err_msg = 'msg_krzip_is_maintenance';
183  break;
184  case 2:
185  $err_msg = 'msg_krzip_wrong_regkey';
186  break;
187  case 3:
188  $err_msg = 'msg_krzip_no_result';
189  break;
190  default:
191  $err_msg = 'msg_krzip_riddling_wrong';
192  break;
193  }
194  }
195 
196  return $this->makeObject(-1, $err_msg);
197  }
198  if(!$result->post)
199  {
200  return $this->makeObject(-1, 'msg_krzip_riddling_wrong');
201  }
202 
203  $item_list = $result->post->itemlist->item;
204  if(!is_array($item_list))
205  {
206  $item_list = array($item_list);
207  }
208  if(!$item_list)
209  {
210  return $this->makeObject(-1, 'msg_krzip_no_result');
211  }
212 
213  $addr_list = array();
214  foreach($item_list as $key => $val)
215  {
216  $postcode = $val->postcd->body;
217  $road_addr = $val->address->body;
218  $jibun_addr = $val->addrjibun->body;
219  $detail = '';
220  $extra = '';
221 
222  if(preg_match('/\((?<detail>.+[읍면동리(마을)(0-9+가)](?:,.*)?)\)/', $road_addr, $matches))
223  {
224  $road_addr = trim(str_replace($matches[0], '', $road_addr));
225  $extra = '(' . $matches['detail'] . ')';
226  }
227  if(preg_match('/\((?<detail>.+[읍면동리(마을)(빌딩)(0-9+가)](?:,.*)?)\)/', $jibun_addr, $matches))
228  {
229  $jibun_addr = '(' . trim(str_replace($matches[0], '', $jibun_addr)) . ')';
230  }
231 
232  $addr_list[] = array(
233  $postcode, // 0 우편번호
234  $road_addr, // 1 도로명 주소
235  $jibun_addr, // 2 지번 주소
236  $detail, // 3 상세 주소
237  $extra // 4 부가 정보 (**동, **빌딩)
238  );
239  }
240 
241  $output = $this->makeObject();
242  $output->add('address_list', $addr_list);
243 
244  return $output;
245  }
246 
253  //06232 서울특별시 강남구 강남대로 382 서울특별시 강남구 역삼동 825-2
254  function getKrzipCodeSearchHtml($column_name, $values)
255  {
256  $template_config = $this->getConfig();
257  $template_config->sequence_id = ++self::$sequence_id;
258  $template_config->column_name = $column_name;
259  $template_config->values = $this->getMigratedPostcode($values);
260  Context::set('template_config', $template_config);
261 
262  $api_name = strval(self::$api_list[$template_config->api_handler]);
263  $oTemplate = TemplateHandler::getInstance();
264  $output = $oTemplate->compile($this->module_path . 'tpl', 'template.' . $api_name);
266  return $output;
267  }
268 }
269 
270 /* End of file krzip.model.php */
271 /* Location: ./modules/krzip/krzip.model.php */
$oModuleModel
Definition: ko.install.php:236
Krzip module high class.
Definition: krzip.class.php:17
getMigratedPostcode($values)
여러 포맷의 우편번호를 모듈 표준 포맷으로 변환
Definition: krzip.model.php:47
debugPrint($debug_output=NULL, $display_option=TRUE, $file= '_debug_message.php')
Definition: func.inc.php:805
$output
Definition: ko.install.php:193
set($key, $val, $set_to_get_vars=0)
getKrzipCodeList($query)
외부 서버로부터 주소 검색 결과 반환
getConfig()
한국 우편번호 모듈 설정 반환
Definition: krzip.model.php:15
getEpostapiSearch($query= '')
우체국 우편번호 API 검색 결과 반환
getRemoteResource($url, $body=null, $timeout=3, $method= 'GET', $content_type=null, $headers=array(), $cookies=array(), $post_data=array(), $request_config=array())
getKrzipCodeSearchHtml($column_name, $values)
HTML 입력 폼 반환
Krzip module model class.
Definition: krzip.model.php:9
getModel($module_name)
Definition: func.inc.php:145
static $default_config
Definition: krzip.class.php:21