function sendComment($args, $manual_data = null) { $result = new Object(); set_time_limit(0); $oSocialxeModel =& getModel('socialxe'); if ($manual_data) { $logged_provider_list = $manual_data->logged_provider_list; $master_provider = $manual_data->master_provider; $slave_provider = $manual_data->slave_provider; } else { $logged_provider_list = $this->providerManager->getLoggedProviderList(); $master_provider = $this->providerManager->getMasterProvider(); $slave_provider = $this->providerManager->getSlaveProvider(); } $config = $this->config; // $logged_provider_list에서 xe 제외 if ($logged_provider_list[0] == 'xe') { array_shift($logged_provider_list); } // 데이터 준비 $comment->content = $args->content; $comment->content_link = $args->content_link; $comment->hashtag = $config->hashtag; $comment->content_title = $args->content_title; $comment->content_thumbnail = $args->content_thumbnail; // 대댓글이면 부모 댓글의 정보를 준비 if ($args->parent_srl) { $output = $oSocialxeModel->getSocialByCommentSrl($args->parent_srl); $comment->parent = $output->data; } // 내용을 분석해서 각 소셜 서비스의 리플 형식이 들어있는지 확인 $reply_provider_list = $this->providerManager->getReplyProviderList($comment->content); // 보낼 필요가 있는지 확인 if (count($reply_provider_list) == 0) { // 대댓글이면 if ($args->parent_srl) { // 부모 댓글에 소셜 정보가 없으면 리턴~ if (!$comment->parent->provider || $comment->parent->provider == 'xe') { return new Object(); } } else { // 로그인한 소셜 서비스가 없으면 리턴~ if (!count($logged_provider_list)) { return new Object(); } } } $args->url = $this->_getCommentUrl($comment->content_link, $comment->parent->comment_srl); if ($config->use_short_url != 'N') { // 생성된 짧은 주소가 있는지 확인한다. $output = executeQuery('socialxe.getBitlyByUrl', $args); $comment->short_link = $output->data->short_url; // 생성된 짧은 주소가 없으며 생성 if ($this->config->bitly_username && $this->config->bitly_api_key && !$comment->short_link) { // bit.ly 라이브러리 로드 if (!class_exists("bitly_SocialXE")) { require_once _XE_PATH_ . 'modules/socialxe/bitly.php'; } // 링크 생성 $bitly = new bitly_SocialXE($this->config->bitly_username, $this->config->bitly_api_key); $content_link = $bitly->shorten(urlencode($this->_getCommentUrl($comment->content_link, $comment->parent->comment_srl))); if ($content_link) { $comment->short_link = $content_link; } } } else { $comment->short_link = $args->url; } // API 요청 준비 $data = array('client' => $config->client_token, 'comment' => $comment, 'logged_provider_list' => $logged_provider_list, 'reply_provider_list' => $reply_provider_list, 'master_provider' => $master_provider, 'uselang' => Context::getLangType()); // 소셜 서비스 액세스 정보 준비 if ($manual_data) { $accesses = $manual_data->access; } else { $accesses = $this->providerManager->getAccesses(); } foreach ($accesses as $provider => $access) { $data[$provider] = serialize($access); } // URL 생성 $url = $this->getURL('send', $data); // 요청 $content = $this->httpRequest($url, 'POST'); //debug :@kakikaki debugPrint('$url : ' . $url); debugPrint('$content : ' . $content); //end if (!$content) { $result->setError(-1); $result->setMessage('msg_request_error'); //여기서 에러 발생 (댓글 작성 : XE-1.7.4) return $result; } // JSON 디코딩 $json = new Services_JSON_SocialXE(); $output = $json->decode($content); if (!$output) { return new Object(-1, $content); } // 오류 체크 if ($output->error) { $result->setError(-1); $result->setMessage($output->message); return $result; } // 전송 결과를 체크 $msg = array(); $lang_provider = Context::getLang('provider'); foreach ($this->providerManager->getProviderList() as $provider) { if ($output->result->{$provider}->error) { $msg[] = sprintf(Context::getLang('msg_send_failed'), $lang_provider[$provider], $output->result->{$provider}->error); } } if (count($msg)) { $msg = implode("\n", $msg); $result->add('msg', $msg); } if ($config->use_short_url != 'N') { // bit.ly 결과를 저장한다. if ($bitly) { $bitly_result = $bitly->getRawResults(); $args->hash = $bitly_result['userHash']; $args->title = $comment->content_title; $args->short_url = $comment->short_link; $args->url = $this->_getCommentUrl($comment->content_link, $comment->parent->comment_srl); executeQuery('socialxe.insertBitly', $args); } } // 대표 계정의 댓글 번호를 세팅한다. if ($master_provider == 'xe' && $slave_provider) { $comment_id = $output->result->{$slave_provider}->id; } else { if ($master_provider) { $comment_id = $output->result->{$master_provider}->id; } } $result->add('comment_id', $comment_id); return $result; }