diff --git a/.htaccess b/.htaccess index 68a5d3209..4211d80b3 100644 --- a/.htaccess +++ b/.htaccess @@ -22,7 +22,9 @@ RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/(rss|atom|api)$ ./index.php?vid=$1& # trackback RewriteRule ^([0-9]+)/(.+)/trackback$ ./index.php?document_srl=$1&key=$2&act=trackback [L] +RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?mid=$1&document_srl=$2&key=$3&act=trackback [L] RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?vid=$1&document_srl=$2&key=$3&act=trackback [L] +RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?vid=$1&mid=$2&document_srl=$3&key=$4&act=trackback [L] # administrator page RewriteRule ^admin/?$ ./index.php?module=admin [L] diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 0c08c8e16..9b090458e 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -1125,7 +1125,9 @@ class Context { 'act.mid' =>$is_feed?"$mid/$act":'', 'act.mid.vid'=>$is_feed?"$vid/$mid/$act":'', 'act.document_srl.key' =>($act=='trackback')?"$srl/$key/$act":'', - 'act.document_srl.key.vid'=>($act=='trackback')?"$vid/$srl/$key/$act":'' + 'act.document_srl.key.mid'=>($act=='trackback')?"$mid/$srl/$key/$act":'', + 'act.document_srl.key.vid'=>($act=='trackback')?"$vid/$srl/$key/$act":'', + 'act.document_srl.key.mid.vid'=>($act=='trackback')?"$vid/$mid/$srl/$key/$act":'' ); $query = $target_map[$target]; diff --git a/modules/trackback/lang/lang.xml b/modules/trackback/lang/lang.xml index aff0a2870..ed0fe6ead 100644 --- a/modules/trackback/lang/lang.xml +++ b/modules/trackback/lang/lang.xml @@ -200,4 +200,8 @@ - \ No newline at end of file + + + + + diff --git a/modules/trackback/trackback.controller.php b/modules/trackback/trackback.controller.php index 1075109c0..8a08d0c3e 100644 --- a/modules/trackback/trackback.controller.php +++ b/modules/trackback/trackback.controller.php @@ -97,7 +97,7 @@ $document_srl = Context::get('target_srl'); $oDocumentModel = &getModel('document'); $oDocument = $oDocumentModel->getDocument($document_srl); - if(!$oDocument->isExists() || !$oDocument->getSummary()) return new Object(); + if(!$oDocument->isExists()) return new Object(); if($oDocument->getMemberSrl() != $logged_info->member_srl) return new Object(); // Add a link sent yeokingeul $oDocumentController = &getController('document'); @@ -278,22 +278,22 @@ */ function sendTrackback($oDocument, $trackback_url, $charset) { $oModuleController = &getController('module'); + // Information sent by $http = parse_url($trackback_url); + $obj->blog_name = str_replace(array('<','>','&','"'), array('<','>','&','"'), Context::getBrowserTitle()); $oModuleController->replaceDefinedLangCode($obj->blog_name); $obj->title = $oDocument->getTitleText(); $obj->excerpt = $oDocument->getSummary(200); $obj->url = getFullUrl('','document_srl',$oDocument->document_srl); + // blog_name, title, excerpt, url charset of the string to the requested change if($charset && function_exists('iconv')) { foreach($obj as $key=>$val) { $obj->{$key} = iconv('UTF-8',$charset,$val); } } - // written information sent to socket - if($http['query']) $http['query'].="&"; - if(!$http['port']) $http['port'] = 80; $content = sprintf( @@ -306,42 +306,27 @@ urlencode($obj->blog_name), urlencode($obj->excerpt) ); - if($http['query']) $content .= '&'.$http['query']; - $content_length = strlen($content); - // header by - $header = - sprintf( - "POST %s HTTP/1.1\r\n". - "Host: %s\r\n". - "Content-Type: %s\r\n". - "Content-Length: %s\r\n\r\n". - "%s\r\n", - $http['path'], - $http['host'], - "application/x-www-form-urlencoded", - $content_length, - $content - ); - if(!$http['host']||!$http['port']) return new Object(-1,'msg_trackback_url_is_invalid'); - // Opens a socket on the target server you want to send - $fp = @fsockopen($http['host'], $http['port'], $errno, $errstr, 5); - if(!$fp) return new Object(-1,'msg_trackback_url_is_invalid'); - // Header information sent by - fputs($fp, $header); - // Waiting for the results (in particular the server may not be falling EOF - while(!feof($fp)) { - $line = trim(fgets($fp, 4096)); - if(preg_match("/^/i",$line)){ - $error = preg_replace('/[^0-9]/','',$line); - break; - } - } - // Close socket - fclose($fp); - if($error == "0") return new Object(0, 'msg_trackback_send_success'); - - return new Object(-1, 'msg_trackback_send_failed'); + $buff = FileHandler::getRemoteResource($trackback_url, $content, 3, 'POST', 'application/x-www-form-urlencoded'); + + $oXmlParser = new XmlParser(); + $xmlDoc = $oXmlParser->parse($buff); + + if($xmlDoc->response->error->body == '0') + { + return new Object(0, 'msg_trackback_send_success'); + } + else + { + if($xmlDoc->response->message->body) + { + return new Object(-1, sprintf('%s: %s', Context::getLang('msg_trackback_send_failed'), $xmlDoc->response->message->body)); + } + else + { + return new Object(-1, 'msg_trackback_send_failed'); + } + } } /** diff --git a/modules/trackback/trackback.model.php b/modules/trackback/trackback.model.php index d644c0251..211da4abd 100644 --- a/modules/trackback/trackback.model.php +++ b/modules/trackback/trackback.model.php @@ -158,8 +158,8 @@ * @param int $document_srl * @return string */ - function getTrackbackUrl($document_srl) { - $url = getFullUrl('','document_srl',$document_srl,'act','trackback','key',$this->getTrackbackKey($document_srl)); + function getTrackbackUrl($document_srl, $mid = NULL) { + $url = getFullUrl('', 'mid', $mid, 'document_srl',$document_srl,'act','trackback','key',$this->getTrackbackKey($document_srl)); return $url; }