示例#1
0
 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;
 }