".$this->T("链接位置")."
",$replacement); $replacement = preg_replace_callback("/(```|`)([^`]*)(?1)/U", function($matches){ $rep = preg_replace('/-@>/','->',$matches[0]); $rep = preg_replace('/<@-/','<-',$rep); $rep = preg_replace('/=@>/','=>',$rep); $rep = preg_replace('/<@=/','<=',$rep); $rep = preg_replace('/\R@([+]{3,})\R/',PHP_EOL.'$1'.PHP_EOL,$rep); $rep = preg_replace('/\[@-/','[-',$rep); $rep = preg_replace('/\{@/','{',$rep); $rep = preg_replace('/(en|zh|any)@\|(en|zh|any)/','$1|$2',$rep); return $rep; }, $replacement); $replacement = preg_replace_callback("/(\!\[.*?\]\(\s*images\/([0-9]{14,}\.(jpg|jpeg|png|gif))\))(\R*(\R.+){1,})/u", function($matches) use (&$post_for_it_is_here){ $rep = preg_replace("/(-|\*)\s+here\s*:\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s+images\/([0-9]{14,}\.(jpg|jpeg|png|gif))/u","", $matches[4]); return $matches[1].$rep; }, $replacement); return $replacement; } function CanShowPost(&$p){ if(!isset($p) || isset($p['comment_to'])) return false; $is_mark_exp = (isset($p['tid'])&&isset($p['tid']['exp'])&&$p['tid']['exp']) || (isset($p['mark_value'])&&$p['mark_value']==6); $is_mark_slf = (isset($p['tid'])&&isset($p['tid']['slf'])&&$p['tid']['slf']) || (isset($p['mark_value'])&&$p['mark_value']==7); if($is_mark_slf && !$this->LoggedIn){ return false; } if(isset($this->WayBack)){ if(isset($p['version'])) { if ($p['version']>$this->WayBack) return false; } else if ($p['id']>$this->WayBack) return false; } if(!$this->InExperimentalMode){ if(!$this->LoggedIn){ if($is_mark_exp) return false; return true; } return true; }else{ if($is_mark_exp) return true; return false; } } function SkipProduct(&$p){ if($this->LoggedIn) return false; return (isset($p['mark_value']) && $p['mark_value']==5); } function GetRedirect($args=NULL){ $str = 'index.php?'; if(isset($args['post'])) $str.='&post='.$args['post']; else if(isset($_GET['post'])) $str.='&post='.$_GET['post']; if(isset($args['gallery'])) $str.='&gallery='.$args['gallery']; else if(isset($_GET['gallery'])) $str.='&gallery='.$_GET['gallery']; if(isset($args['pic'])) $str.='&pic='.$args['pic']; else if(isset($_GET['pic'])) $str.='&pic='.$_GET['pic']; if(isset($args['settings'])) $str.='&settings='.$args['settings']; else if(isset($_GET['settings'])) $str.='&settings='.$_GET['settings']; if(isset($args['extras'])) $str.='&extras='.$args['extras']; else if(isset($_GET['extras'])) $str.='&extras='.$_GET['extras']; if(isset($args['category'])) $str.='&category='.$args['category']; else if(isset($_GET['category'])) $str.='&category='.$_GET['category']; if(isset($args['history'])) $str.='&history='.$args['history']; else if(isset($_GET['history'])) $str.='&history='.$_GET['history']; if(isset($args['version'])) $str.='&version='.$args['version']; else if(isset($_GET['version'])) $str.='&version='.$_GET['version']; if(isset($args['search'])) $str.='&search='.$args['search']; else if(isset($_GET['search'])) $str.='&search='.$_GET['search']; if(isset($args['here'])) $str.='&here='.$args['here']; else if(isset($_GET['here'])) $str.='&here='.$_GET['here']; return $str; } function WriteAsNecessary(){ if(!$this->LoggedIn || isset($this->WayBack)){return;} if($this->NeedWritePosts){ $this->CachePostLinks(); $this->WritePosts(); } if($this->NeedWriteImages){ $this->WriteImages(); } if($this->NeedWriteArchive){ $this->WriteArchive(); } } function APubEnsureWebfinger($name, $host){ if(!is_dir('.well-known')) mkdir('.well-known'); if(!is_dir('.well-known/webfinger')) mkdir('.well-known/webfinger'); $f = fopen('.well-known/webfinger/index.php',"w"); $without_protocol = parse_url($host, PHP_URL_HOST); $finger = ["subject"=>"acct:".$name.'@'.$without_protocol, "links"=>[["rel"=>"self", "type"=>"application/activity+json", "href"=>$host."?apub_actor=1"]]]; fwrite($f, ""); fclose($f); if(!file_exists('.well-known/apub_public_key.pem') || !file_exists('.well-known/apub_private_key.php')){ $res = openssl_pkey_new(); $this->APubPublicKey = openssl_pkey_get_details($res)['key']; openssl_pkey_export($res, $this->APubPrivateKey); $f = fopen('.well-known/apub_public_key.pem',"w"); fwrite($f, $this->APubPublicKey); fclose($f); $f = fopen('.well-known/apub_private_key.php',"w"); fwrite($f, "".PHP_EOL.PHP_EOL.$this->APubPrivateKey); fclose($f); } } function APubInit(){ $kf = file_get_contents('.well-known/apub_private_key.php'); if($kf===false) return; preg_match("/(-----BEGIN PRIVATE KEY-----[\s\S]*)/",$kf,$ma); $this->APubPrivateKey=$ma[1]; } function APubEnsureInfo(){ if(!isset($this->APubID) || !isset($this->HostURL)) return; if(!file_exists('.well-known/apub_public_key.pem')){$this->APubEnsureWebfinger($this->APubID, $this->HostURL);} $pk = file_get_contents('.well-known/apub_public_key.pem'); //$pk = preg_replace('/\n/u','\\n',$pk); $actor = ["@context"=>["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1"], "id"=> $this->HostURL."?apub_actor=1", "type"=> "Person", "name"=> $this->DisplayName, "url"=> $this->HostURL, "summary"=> "Lazy... No summary", "preferredUsername"=> $this->APubID, "inbox"=> $this->HostURL."?apub_inbox=1", "outbox"=> $this->HostURL."?apub_outbox=1", "publicKey"=> ["id"=> $this->HostURL."?apub_actor=1#main-key", "owner"=> $this->HostURL."?apub_actor=1", "publicKeyPem"=>$pk]]; $this->APubActor = json_encode($actor, JSON_UNESCAPED_SLASHES); } function APubMakeOutbox(){ $this->ReadPosts();$this->ReadImages(); $obj = ["@context"=>"https://www.w3.org/ns/activitystreams", "id"=>$this->HostURL."?apub_outbox=1", "type"=>"OrderedCollection"]; $items=[]; $i=0; foreach(array_reverse($this->Posts) as &$p){ $this->ConvertPost($p); $text = strip_tags(preg_replace('/<\/(p|blockquote|h[0-9])>/u',"\n\n",$p['html'])); $time = DateTime::createFromFormat('YmdHis', $p['id'], new DateTimeZone('+0800')); $ob = ["@context"=>"https://www.w3.org/ns/activitystreams", "type"=> "Create", "id"=> $this->HostURL."?post=".$p['id']."?apub_object=1", "published"=> $time->format('Y-m-d\TH:i:s\Z'), //"to"=> ["https://chatty.example/ben/"], "actor"=> $this->HostURL."?apub_actor=1", "to"=> ["https://www.w3.org/ns/activitystreams#Public"], "object"=> ["type"=> "Note", "id"=> $this->HostURL."?post=".$p['id'], "published"=> $time->format('Y-m-d\TH:i:s\Z'), "attributedTo"=> $this->HostURL."?apub_actor=1", "to"=> ["https://www.w3.org/ns/activitystreams#Public"], "content"=> $text]]; $items[] = $ob; $i++; if($i>20) break; } $obj['orderedItems'] = $items; $obj["totalItems"] = sizeof($items); return json_encode($obj, JSON_UNESCAPED_SLASHES); } function APubDeliver($body,$target){ $head_digest = base64_encode(hash("sha256",$body,true)); $body_digest = "SHA-256=".$head_digest; // rfc standards require the timezone be declared as GMT and PHP's built-in formats all say UTC // so we gotta do it manually $d = new DateTimeImmutable("now", new DateTimeZone('Asia/Shanghai')); $d=$d->setTimezone(new DateTimeZone('UTC')); $date=$d->format("D, d M Y H:i:s")." GMT"; $data = "(request-target): post ".parse_url($target,PHP_URL_PATH) ."\nhost: ".parse_url($target,PHP_URL_HOST) ."\ndate: $date" ."\ndigest: $body_digest"; if (openssl_sign($data, $signature, $this->APubPrivateKey, OPENSSL_ALGO_SHA256) === FALSE) { http_response_code(500); die('unable to sign'); } $signature = base64_encode($signature); $keyid = 'keyId="'.$this->HostURL.'?apub_actor=1#main-key"'; $algo = 'algorithm="rsa-sha256"'; $headers = 'headers="(request-target) host date digest"'; $signature = "signature=\"$signature\""; $h = array( 'Content-Type: application/activity+json', 'Accept: application/activity+json', //"Content-Length: ".strlen($body), "Host: ". parse_url($target,PHP_URL_HOST), "Date: $date", "Digest: $body_digest", "Signature: $keyid,$algo,$headers,$signature" ); $ch = curl_init($target); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $body); curl_setopt($ch, CURLOPT_HTTPHEADER, $h); curl_setopt($ch, CURLOPT_USERAGENT, "laMDWiki APub"); $result = curl_exec($ch); curl_close($ch); echo ""; print_r($body); echo "\n\n".$target."\n\n"; print_r($result); echo "\n\n"; print_r($h); echo "\n\n"; print_r(curl_getinfo($ch)); echo ""; exit; return $result; } function APubTestDeliver(){ $this->APubInit(); $obj=[]; $obj['published']=gmdate("Y-m-d\TH:i:s\Z"); $obj['id']=""; //<------------------- $obj['url']=$this->HostURL.""; //<------------------- $obj['type']='Note'; $obj['attributedTo']=$this->HostURL."?apub_actor=1"; $tag=[]; $tag['type']='Mention'; $tag['name']="@chengdulittlea"; $tag['href']="https://mastodon.art/users/chengdulittlea"; $obj['tag']=[$tag]; // must have cc to have notification in mastodon. $obj['cc']=["https://mastodon.art/users/chengdulittlea"]; $obj['content']="
@chengdulittlea Hello activitypub from laMDWiki!
"; $obj['to']="https://www.w3.org/ns/activitystreams#Public"; $obj['inReplyTo']=""; //<------------------- $arr=[]; $arr['@context']="https://www.w3.org/ns/activitystreams"; $arr['id']=""; //<------------------- $arr['actor']=$this->HostURL."?apub_actor=1"; $arr['type']="Create"; $arr['to']="https://www.w3.org/ns/activitystreams#Public"; $arr['object']=$obj; $this->APubDeliver(json_encode($arr),"https://mastodon.example/inbox"); //<------------------- } function APubProcessInbox(){ $r = file_get_contents('php://input'); file_put_contents('postdump.txt',$r); } function MakeRSS(){ $this->ReadPosts();$this->ReadImages(); $posts = []; if(isset($this->UsePosts[0])){ $posts = array_reverse($this->UsePosts); $last_updated = $this->StandardTime($posts[0]['id']); }else{ $last_updated= $this->StandardTime("20000101000000"); } $author = "\s*\@.*?<\/p>/mu","",$html); $html = preg_replace("/\{\s*(REVERSED|INTERESTING|HEADER|FOOTER)\s+(.*?)\}/imu","",$html); $html = preg_replace("/\{\s*(NO_TIME|NO_TITLE)\s*\}/imu","",$html); $html = preg_replace("/\{\s*WIDE\s*\}/imu","",$html,-1,$rep_count); if($rep_count){$print_wide=true;} $images = []; $images_noclick = []; $images_orig_src_list = []; $html = preg_replace_callback( "/(
\s*|\s*)?( \s*<\/p>/u',"", $html); if($html==""){$html=" \s*<\/p>/u',"", $html);
if (preg_match('/ ".$post['product']['title']." ".$post['product']['short']." ".$post['product']['price']." \s*\{read_more\}\s*<\/p>[\s\S]*/u'," [".$this->T("阅读更多")."] \s*\{read_more\}\s*<\/p>/u',"", $ht);
}
if ($strip_tags){
$ht = strip_tags($ht,' \s*<\/p>/u',"", $ht);
$ht = " ".$this->T("已关闭评论")." =$this->T('话题')?> &history=1'>=$this->GetPostTitle($mver)?> =$this->T('并入这里')?>
".$name.":".$mail." =$this->T('分类')?> | ".($c=='none'?$this->T('未分类'):$this->T($c))." "; } ?> =$this->T('引用')?>: =$this->T('分类')?> | ".($c=='none'?$this->T('未分类'):$this->T($c))." "; } ?> =$this->T('选择、粘贴或者拖动到页面以上传图片。')?> =$this->T('ActivityPub 测试:')?>]*)src=[\'\"])(images\/([0-9]{14,}\.(jpg|png|jpeg|gif|mp4)))([\'\"][^>]*)\/>(\s*<\/p>)?/u",
function($m) use (&$images,&$images_noclick,&$images_orig_src_list) {
if(isset($m[1])&&$m[1]&&$m[1][1]=='a'){ $height="";
if(preg_match("/([0-9]{1,2})em/u",$m[0],$hm)){$height=' style="height:'.$hm[1].'em;"';}
return "FindImage($m[5]))!=NULL && isset($im['thumb'])){
$src = $im['thumb']; $orig_src=$im['file'];
}if($im == NULL){ $im = &$this->NULL_IMAGE_DUMMY; }
$media_start = $m[2];
$media_end = $m[7];
$dataset = " data-imgsrc='".$m[5]."'".
(isset($im['product'])?" data-product='".$im['product']."'":"").
(isset($im['parent'])?" data-parent='".$im['parent']."'":"").
(isset($im['align'])?' data-align="'.$im["align"].'" style="object-position:'.$im['align'].';"':"").
($original?" class='original_img'":"");
if(isset($im['video']) && isset($im['video'])!=''){
$media_start = "InHereMode){
$click = "";
$ret=""; if($keep) { $ret = $click; }
else { $images[] = $click; }
return $ret;
}else{
$click ="";
$images_noclick[]=$media_start.$src.$media_end.">"; $images_orig_src_list[]=$orig_src;
$ret = "";
if($keep) { $ret = $click; }
else { $images[] = $click; }
if(isset($m[1])&&isset($m[8])&&$m[1]&&$m[8]) return $ret;
else return ((isset($m[1])&&$m[1]?$m[1]:"").$ret.(isset($m[8])&&$m[8]?$m[8]:""));
}
},$html,-1,$count);
$html = preg_replace('/
GetPost($m[1], false, true);
$s="
');
$ht = preg_replace('/
";
foreach($post['images'] as $im){
$ht.="
".$title."
=$this->T('评论')?>
CommentEnabled){
echo "
"; } ?>
=isset($search_term)?$this->T('搜索'):
(isset($category)?("".$this->T('分类')." ".
($category=='none'?$this->T('未分类'):$this->T($category))):($this->T('最近')).
" ")?>
T('搜索')?>
LoggedIn){ ?>
SpecialPinned) && ($p = &$this->GetPost($this->SpecialPinned))!=NULL && !$this->CurrentOffset) &&
$this->CanShowPost($p)){
$this->MakeSinglePost($p, true, false, false, false, true, false, false, false, true, false);
}
$i = 0; $last_end_wide = true;
if(isset($this->UsePosts[0])) foreach(array_reverse($this->UsePosts) as &$p){
if(!$this->CanShowPost($p) || $this->SkipProduct($p)) continue;
if(isset($p['tid'])){ /* Should always be set. */
$th = &$p['tid']; if($p['tid']['count']==0) continue;
if(!isset($search_term)) { $p = &$th['last']; }
}
if(isset($search_term)){
if ($search_term=='' || !preg_match("/".preg_quote($search_term)."/iu", $p['content'])) continue;
}else if(isset($category)){
$cat = isset($p['tid'])?(isset($p['tid']['categories'])?($p['tid']['categories']):[]):
(isset($p['categories'])?($p['categories']):[]);
if ($category=='none') { if($cat!=[]) continue; }
else{ if ($category=='' || !in_array($category, $cat)) continue; }
if(isset($p['tid'])){ if(isset($p['tid']['displayed'])) continue; $p['tid']['displayed'] = True; }
}else{
if(in_array($p['id'],
[$this->SpecialPinned,$this->SpecialFooter,$this->SpecialFooter2,$this->SpecialNavigation,$this->SpecialSidebar])) continue;
if(isset($p['tid'])){ if(isset($p['tid']['displayed'])) continue; $p['tid']['displayed'] = True; }
}
if($i < $this->PostsPerPage * $this->CurrentOffset) {$i++; continue;}
if($last_end_wide){$use_class="last_wide";}else{$use_class="";}
$this->MakeSinglePost($p, true, false, $use_class, false, !isset($search_term), false, false, false, false, isset($search_term));
$i++;
if($i >= $this->PostsPerPage * (1+$this->CurrentOffset)) {break;}
$last_end_wide = sizeof($p['tid']['arr'])==1 && isset($p['end_wide']) && $p['end_wide'];
}?>
GetPost($pr);
if(!$this->CanShowPost($po)){ continue; } $count++;
$this->MakeSinglePost($po, false, true, "post_preview invert_a", true, false, false, false, true, false, false);
}
?>
InExperimentalMode){ ?>
>=$this->T('链接')?>
=$this->T('没有历史记录')?>
=$this->T('帖子')?> '>=$title?>
=$this->T('历史记录')?>
=$this->T('帖子')?> '>=$title?>
GetArchiveHandle($from); if(!isset($fromah)) continue;
$ver = &$fromah['list'][sizeof($fromah['list'])-1];?>
GetArchiveHandle($pm);
$mver = &$this->GetPost($pm); if(!isset($mver) && isset($mah)) $mver = &$mah['list'][sizeof($mah['list'])-1]; ?>
GetArchiveHandle($from); if(!isset($fromah)) continue;
$ver = &$fromah['list'][sizeof($fromah['list'])-1];?>
=$this->T('版本不存在')?>
=$this->T('差异')?>
GetArchiveHandle($pm);
$mver = &$this->GetPost($pm); if(!isset($mver) && isset($mah)) $mver = &$mah['list'][sizeof($mah['list'])-1]; ?>
=sizeof($this_ver['merged_thread'][0]);?> =$this->T('个帖子')?>
=$this->T('没有更旧的版本')?>
=$this->T('上一个版本')?>
=$this->ReadableTime($last_ver['version'])?>=$this->T('选择的版本')?>
=$this->ReadableTime($this_ver['version'])?>=isset($last_ver)?$last_ver['content']:""?>
=$this_ver['content']?>
&set_wayback==isset($this_ver['version'])?$this_ver['version']:$this_ver['id']?>'>=$this->T('前往该版本时间')?> ←
GetArchiveHandle($this->CurrentPostID);
$p = &$post; if(!isset($post)){ $p=&$ah['list'][0]; }
$show_latest = isset($ah)?(!isset($ah['list'][sizeof($ah['list'])-1]['merged_into'])):true;
?>
=$this->T('评论')?> (=$comment_count;?>)
";
foreach($to_post['comments'] as $p){
$ht = $this->GenerateSinglePost($p, false, false, false, false, false);
$name = isset($p['link'])?("".$p['name']."↗"):$p['name'];
$mail = $this->LoggedIn?(" "):"";
echo "=$this->T('有趣')?>
'>→
GetPost($ref);
if(isset($post['mark_value']) && $post['mark_value']==5){ $count_product++; continue; }
if(!$this->CanShowPost($po)){ continue; }
echo "
LoggedIn && (!$this->InHereMode)){ ?>
MakePostingFields($th['last']['id'], true);?>
ConvertPost($p);
$mark_value = isset($p['mark_value'])?$this->Markers[$p['mark_value']]:-1;
$ref_count = isset($p['refs'])?sizeof($p['refs']):0;
$is_current = $p['id']==$this->CurrentPostID;
$is_deleted = (isset($p['mark_delete'])&&$p['mark_delete']); ?>
=$this->T($header);?>
' =$is_deleted?"data-mark-delete='true'":""?>
onDblClick='ClickImage(this)'>
0){ ?>
GetPost($ref);
if(isset($post['mark_value']) && $post['mark_value']==5){ $count_product++; continue; }
if(!$this->CanShowPost($po)){ continue; }
echo "
MakeCommentSection($th['first']); ?>
GenerateSinglePost($p, false, false, false, false); }?>
=$this->T('工具')?>
[Google Translate]
1;
$is_wide = (isset($post['wide'])&&$post['wide']) || ($is_thread && isset($post['tid']['wide']) && $post['tid']['wide']);
if($is_thread){ $th = $post['tid'];?> =$this->T('话题')?> =$this->T('详细')?>
MakePostTools();
if($cat){ ?>
IsReversedThread($th);
foreach($use_arr as &$p){$use_class="";if($p==$post){$use_class.=" active_post";}
if($last_end_wide){$use_class.=" last_wide";}
$make_title = ($p == $post);
if(isset($p['restart'])){ ?>
=$p['restart']?>
MakeSinglePost($post,true, false,"active_post",false, false, false, true, false, false);
?>
=$this->ReadableTime(isset($post['tid']['last']['version'])?
$post['tid']['last']['version']:$post['tid']['last']['id']);?>
MakePostingFields($is_thread?$th['last']['id']:$post['id'], true);?>
IsReversedThread($th); $hinted=false;
foreach($use_arr as &$p){
$this->MakeSinglePostExp($p);
if($p == $th['first']){?>
=$this->T('该话题最新帖子在前')?>
MakeHereButtons($im, false); ?>
=$this->T('点击图片以插入:')?>
=(isset($name) && ($gal=$this->GetGallery($name))!=NULL)?
("".$this->T('相册').":".$this->T($name)):
($_GET['gallery']=='trash'?$this->T('垃圾桶'):$this->T('画廊'))?>
=$this->T('设置')?>
LoggedIn){ ?>
LoggedIn){ ?>
' />
' />
=$this->T('选项')?> =$this->T('值')?> =$this->T('网站标题')?>
=$this->T('短标题')?>
=$this->T('显示名称')?>
=$this->T('电子邮件')?>
=$this->T('导航栏')?>
=isset($this->SpecialNavigation)?"→":""?>
=$this->T('侧边栏')?>
=isset($this->SpecialSidebar)?"→":""?>
=$this->T('脚注')?> 1=isset($this->SpecialFooter)?"→":""?>
=$this->T('脚注')?> 2=isset($this->SpecialFooter2)?"→":""?>
=$this->T('置顶文')?>=isset($this->SpecialPinned)?"→":""?>
=$this->T('默认相册')?>
=$this->T('相册单步')?>
=$this->T('SelfAuth 路径')?>
=$this->T('启用评论')?>
CommentEnabled?"checked":""?>/> =$this->T('附加操作')?> =$this->T('进入')?> =$this->T('长毛象')?> =$this->T('长毛象实例')?>
=$this->T('长毛象令牌')?>
=$this->T('偏好语言')?>
=$this->T('本站地址')?>
=$this->T('Activity Pub')?> =$this->T('用户名')?>
=$this->T('这里访问')?> =$this->T('主机')?>
=$this->T('网站标题')?>
=$this->T('短标题')?>
=$this->T('相册')?>
=$this->T('导航栏')?>
=isset($this->HereNavigation)?"→":""?>
=$this->T('脚注')?>=isset($this->HereFooter)?"→":""?>
=$this->T('实验访问')?> =$this->T('主机')?>
=$this->T('网站标题')?>
=$this->T('短标题')?>
=$this->T('首次提示')?>=isset($this->ExpCaution)?"→":""?>
=$this->T('相册')?>
=$this->T('导航栏')?>
=isset($this->ExpNavigation)?"→":""?>
=$this->T('脚注')?>=isset($this->ExpFooter)?"→":""?>
=$this->T('允许选择语言')?>
AllowLanguageChoices?"checked":""?>/> =$this->T('管理员')?>
=$this->T('登出')?> =$this->T('帐号')?>
=$this->T('新密码')?>
=$this->T('再次输入')?>
=$this->T('旧密码')?>
=$this->T('请登录')?> =$this->T('帐号')?>
=$this->T('密码')?>
=$this->T('附加操作')?>
=$this->T('返回一般设置')?>
=$this->T('自动重定向')?>
=$this->T('P为帖子跳转,匹配REQUEST_URI跳到目标文章;S为站点跳转,可以重定向来源域名,例子:')?>
P discount:20001001010101;
' />
S old_domain:www.new_domain.com:20001001010101;=$this->T('自定义翻译')?>
=$this->T('填写格式:')?>
- 语言 | Language
' />
Posts) as $p){ if(!isset($p['comment_to'])) continue; if($i < $this->CommentsPerPage * $this->CurrentOffset) {$i++; continue;} $ht = $this->GenerateSinglePost($p, false, false, false, false, false); $name = isset($p['link'])?("".$p['name']."↗"):$p['name']; $post_to = $this->GetPost($p['comment_to']); $post_title = $this->GetPostTitle($post_to); if(!$post_to) $post_title = "?"; $mail = " ". "@ ". (isset($p['ip'])?$p['ip']:"?")." ";
$i++;
}
?>
". "(".$post_title.")"; echo "
".$name.":".$mail."
".$ht."