%@ CODEPAGE=65001 %>
<%
'///////////////////////////////////////////////////////////////////////////////
'// Z-Blog
'// 作 者: 朱煊(zx.asd)
'// 版权所有: RainbowSoft Studio
'// 技术支持: rainbowsoft@163.com
'// 程序名称:
'// 程序版本:
'// 单元名称: XML-RPC/index.asp
'// 开始时间: 2005.09.30
'// 最后修改:
'// 备 注: XML-RPC主文件
'///////////////////////////////////////////////////////////////////////////////
%>
<% Option Explicit %>
<% On Error Resume Next %>
<% Response.Charset="UTF-8" %>
<% Response.Buffer=True %>
<%
'/////////////////////////////////////////////////////////////////////////////////////////
'*********************************************************
' 目的:
'*********************************************************
Function ParseDateForRFC3339(dtmDate)
Dim dtmDay, dtmWeekDay, dtmMonth, dtmYear
Dim dtmHours, dtmMinutes, dtmSeconds
Dim strTimeZone
dtmYear = Year(dtmDate)
dtmMonth = Right("00" & Month(dtmDate),2)
dtmDay = Right("00" & Day(dtmDate),2)
dtmHours = Right("00" & Hour(dtmDate),2)
dtmMinutes = Right("00" & Minute(dtmDate),2)
dtmSeconds = Right("00" & Second(dtmDate),2)
strTimeZone=Left(ZC_TIME_ZONE,3) & ":" & Right(ZC_TIME_ZONE,2)
ParseDateForRFC3339 = dtmYear & "-" & dtmMonth & "-" & dtmDay & "T" & dtmHours & ":" & dtmMinutes & ":" & dtmSeconds & strTimeZone
End Function
'*********************************************************
'*********************************************************
' 目的:
'*********************************************************
Function CheckUserAndRights(userName,userPassWord,strAction)
Set BlogUser=Nothing
Set BlogUser=New TUser
BlogUser.LoginType="Self"
BlogUser.Name=userName
BlogUser.PassWord=BlogUser.GetPasswordByOriginal(userPassWord)
If BlogUser.Verify() Then
If Not CheckRights(strAction) Then Call RespondError(6,ZVA_ErrorMsg(6))
CheckUserAndRights=True
Else
Call RespondError(7,ZVA_ErrorMsg(7))
End If
End Function
'*********************************************************
'*********************************************************
' 目的:
'*********************************************************
Function this_getUsersBlogs()
Dim strXML
strXML="url$%#1#%$blogid$%#2#%$blogName$%#3#%$"
strXML=Replace(strXML,"$%#1#%$",TransferHTML(BlogHost,"[html-format]"))
strXML=Replace(strXML,"$%#2#%$",TransferHTML(ZC_BLOG_CLSID,"[html-format]"))
strXML=Replace(strXML,"$%#3#%$",TransferHTML(ZC_BLOG_NAME,"[html-format]"))
Response.Write strXML
End Function
'*********************************************************
'*********************************************************
' 目的:
'*********************************************************
Function this_getCategories()
Dim strXML
Dim strCategoryInfo
strXML="$%#1#%$"
strCategoryInfo="description$%#1#%$httpUrl$%#2#%$rssUrl$%#3#%$title$%#4#%$categoryid$%#5#%$"
Dim Cate
Dim s
Dim strCategories
For Each Cate in Categorys
If IsObject(Cate) Then
s=strCategoryInfo
s=Replace(s,"$%#1#%$",TransferHTML(Cate.Name,"[html-format]"))
s=Replace(s,"$%#2#%$",TransferHTML(Cate.Url,"[html-format]"))
s=Replace(s,"$%#3#%$",TransferHTML(Cate.Url,"[html-format]"))
s=Replace(s,"$%#4#%$",TransferHTML(Cate.Name,"[html-format]"))
s=Replace(s,"$%#5#%$",TransferHTML(Cate.ID,"[html-format]"))
strCategories=strCategories & s
End If
Next
strXML=Replace(strXML,"$%#1#%$",strCategories)
Response.Write strXML
End Function
'*********************************************************
'*********************************************************
' 目的:
'*********************************************************
Function this_getRecentPosts(numberOfPosts)
Dim strXML
Dim strPost
Dim strRecentPosts
strXML="$%#1#%$"
strPost="title$%#1#%$description$%#2#%$dateCreated$%#3#%$categories$%#4#%$postid$%#5#%$userid$%#6#%$link$%#7#%$"
Dim s
Dim i
Dim objRS
Dim strSQL
Dim strPage
Dim objArticle
Set objRS=Server.CreateObject("ADODB.Recordset")
objRS.CursorType = adOpenKeyset
objRS.LockType = adLockReadOnly
objRS.ActiveConnection=objConn
objRS.Source=""
strSQL="WHERE ([log_Type]=0)"
If CheckRights("Root")=False And CheckRights("ArticleAll")=False Then strSQL=strSQL & " AND ([log_AuthorID]=" & BlogUser.ID & ")"
objRS.Open("SELECT [log_ID] FROM [blog_Article] "& strSQL &" ORDER BY [log_PostTime] DESC")
objRS.PageSize=numberOfPosts
If objRS.PageCount>0 Then objRS.AbsolutePage = 1
If (Not objRS.bof) And (Not objRS.eof) Then
For i=1 to objRS.PageSize
Set objArticle=New TArticle
If objArticle.LoadInfoByID(objRS("log_ID")) Then
s=strPost
s=Replace(s,"$%#1#%$",TransferHTML(objArticle.Title,"[html-format]"))
s=Replace(s,"$%#2#%$",TransferHTML(objArticle.Content,"[html-format]"))
s=Replace(s,"$%#3#%$",TransferHTML(ParseDateForRFC3339(objArticle.PostTime),"[html-format]"))
s=Replace(s,"$%#4#%$",TransferHTML(Categorys(objArticle.CateID).Name,"[html-format]"))
s=Replace(s,"$%#5#%$",TransferHTML(objArticle.ID,"[html-format]"))
s=Replace(s,"$%#6#%$",TransferHTML(objArticle.AuthorID,"[html-format]"))
s=Replace(s,"$%#7#%$",TransferHTML(objArticle.Url,"[html-format]"))
strRecentPosts=strRecentPosts & s
End If
objRS.MoveNext
If objRS.eof Then Exit For
Set objArticle=Nothing
Next
End If
strXML=Replace(strXML,"$%#1#%$",strRecentPosts)
Response.Write strXML
End Function
'*********************************************************
'*********************************************************
' 目的:
'*********************************************************
Function this_newPost(structPost,bolPublish)
On Error Resume Next
Dim i,j,s,t
Dim objXmlFile
Set objXmlFile = Server.CreateObject("Microsoft.XMLDOM")
objXmlFile.loadXML(structPost)
Dim strXML
strXML="$%#1#%$"
Dim objArticle
Set objArticle=New TArticle
objArticle.ID=0
objArticle.AuthorID=BlogUser.ID
If bolPublish=True Then
objArticle.Level=4
Else
objArticle.Level=1
End If
objArticle.PostTime=Now()
objArticle.Title=objXmlFile.documentElement.selectSingleNode("member[name=""title""]/value/string").text
objArticle.Tag=""
objArticle.Alias=""
Dim strCate
strCate=objXmlFile.documentElement.selectSingleNode("member[name=""categories""]/value/array/data/value[0]/string").text
Dim Cate
For i=UBound(Categorys) To 1 Step -1
If IsObject(Categorys(i)) Then
'objArticle.CateID=Categorys(i).ID
If strCate=Categorys(i).Name Then
objArticle.CateID=Categorys(i).ID
Exit For
End If
End If
Next
objArticle.Content=objXmlFile.documentElement.selectSingleNode("member[name=""description""]/value/string").text
If objArticle.FType=ZC_POST_TYPE_ARTICLE Then
If InStr(objArticle.Content,"
")>0 Then
s=objArticle.Content
i=InStr(s,"
")
s=Left(s,i-1)
objArticle.Intro=s
objArticle.Content=Replace(objArticle.Content,"
","",1,1)
ElseIf InStr(objArticle.Content,"
")>0 Then
s=objArticle.Content
i=InStr(s,"
")
s=Left(s,i-1)
objArticle.Intro=s
objArticle.Content=Replace(objArticle.Content,"
","",1,1)
End If
objArticle.Intro=""
If objArticle.Intro="" Then
s=objArticle.Content
For i =0 To UBound(Split(s,""))
If Trim(Split(s,"")(i))<>"" Then
t=t & Split(s,"")(i) & ""
End If
If Len(t)>ZC_TB_EXCERPT_MAX Then Exit for
Next
objArticle.Intro=t
End If
End If
'接口
Call Filter_Plugin_PostArticle_Core(objArticle)
If objArticle.Post=True Then
Call Filter_Plugin_PostArticle_Succeed(objArticle)
Call BuildArticle(objArticle.ID,true,true)
Call MakeBlogReBuild_Core()
Response.Clear
strXML=Replace(strXML,"$%#1#%$",objArticle.ID)
Response.Write strXML
Else
Call RespondError(11,ZVA_ErrorMsg(11))
End If
Err.Clear
End Function
'*********************************************************
'*********************************************************
' 目的:
'*********************************************************
Function this_editPost(intPostID,structPost,bolPublish)
On Error Resume Next
Dim i,j,s,t
Dim objXmlFile
Set objXmlFile = Server.CreateObject("Microsoft.XMLDOM")
objXmlFile.loadXML(structPost)
Dim strXML
strXML="$%#1#%$"
Dim objArticle
Set objArticle=New TArticle
If objArticle.LoadInfoByID(intPostID) Then
If Not((objArticle.AuthorID=BlogUser.ID) Or (CheckRights("Root")=True) Or (CheckRights("ArticleAll")=True)) Then Call RespondError(6,ZVA_ErrorMsg(6))
Else
Call RespondError(9,ZVA_ErrorMsg(9))
End If
objArticle.Title=objXmlFile.documentElement.selectSingleNode("member[name=""title""]/value/string").text
If bolPublish=True Then
objArticle.Level=4
Else
objArticle.Level=1
End If
Dim strCate
strCate=objXmlFile.documentElement.selectSingleNode("member[name=""categories""]/value/array/data/value[0]/string").text
If strCate<>"" Then
Dim Cate
For i=UBound(Categorys) To 1 Step -1
If IsObject(Categorys(i)) Then
'objArticle.CateID=Categorys(i).ID
If strCate=Categorys(i).Name Then
objArticle.CateID=Categorys(i).ID
Exit For
End If
End If
Next
End If
objArticle.Content=objXmlFile.documentElement.selectSingleNode("member[name=""description""]/value/string").text
If objArticle.FType=ZC_POST_TYPE_ARTICLE Then
If InStr(objArticle.Content,"
")>0 Then
s=objArticle.Content
i=InStr(s,"
")
s=Left(s,i-1)
objArticle.Intro=s
objArticle.Content=Replace(objArticle.Content,"
","",1,1)
ElseIf InStr(objArticle.Content,"
")>0 Then
s=objArticle.Content
i=InStr(s,"
")
s=Left(s,i-1)
objArticle.Intro=s
objArticle.Content=Replace(objArticle.Content,"
","",1,1)
End If
objArticle.Intro=""
If objArticle.Intro="" Then
s=objArticle.Content
For i =0 To UBound(Split(s,""))
If Trim(Split(s,"")(i))<>"" Then
t=t & Split(s,"")(i) & ""
End If
If Len(t)>ZC_TB_EXCERPT_MAX Then Exit for
Next
objArticle.Intro=t
End If
End If
'接口
Call Filter_Plugin_PostArticle_Core(objArticle)
If objArticle.Post=True Then
Call Filter_Plugin_PostArticle_Succeed(objArticle)
Call BuildArticle(objArticle.ID,true,true)
Call MakeBlogReBuild_Core()
Response.Clear
strXML=Replace(strXML,"$%#1#%$",1)
Response.Write strXML
Else
Call RespondError(11,ZVA_ErrorMsg(11))
End If
Err.Clear
End Function
'*********************************************************
'*********************************************************
' 目的:
'*********************************************************
Function this_getPost(intPostID)
Dim strXML
Dim strPost
Dim strRecentPosts
Dim s
strXML="$%#1#%$"
strPost="title$%#1#%$description$%#2#%$dateCreated$%#3#%$categories$%#4#%$postid$%#5#%$userid$%#6#%$link$%#7#%$"
Dim objArticle
Set objArticle=New TArticle
If objArticle.LoadInfoByID(intPostID) Then
If Not((objArticle.AuthorID=BlogUser.ID) Or (CheckRights("Root")=True)) Then Call RespondError(6,ZVA_ErrorMsg(6))
Else
Call RespondError(9,ZVA_ErrorMsg(9))
End If
s=strPost
s=Replace(s,"$%#1#%$",TransferHTML(objArticle.Title,"[html-japan][html-format]"))
s=Replace(s,"$%#2#%$",TransferHTML(objArticle.Content,"[html-japan][html-format]"))
s=Replace(s,"$%#3#%$",TransferHTML(ParseDateForRFC3339(objArticle.PostTime),"[html-format]"))
s=Replace(s,"$%#4#%$",TransferHTML(Categorys(objArticle.CateID).Name,"[html-format]"))
s=Replace(s,"$%#5#%$",TransferHTML(objArticle.ID,"[html-format]"))
s=Replace(s,"$%#6#%$",TransferHTML(objArticle.AuthorID,"[html-format]"))
s=Replace(s,"$%#7#%$",TransferHTML(objArticle.Url,"[html-format]"))
strRecentPosts=strRecentPosts & s
strXML=Replace(strXML,"$%#1#%$",strRecentPosts)
Response.Write strXML
End Function
'*********************************************************
'*********************************************************
' 目的:
'*********************************************************
Function this_newMediaObject(strFileName,strFileType,strFileBits)
'On Error Resume Next
Dim objXmlFile
Set objXmlFile = Server.CreateObject("Microsoft.XMLDOM")
Dim strXML
strXML="url$%#1#%$"
Dim objUpLoadFile
Set objUpLoadFile=New TUpLoadFile
objUpLoadFile.AuthorID=BlogUser.ID
objUpLoadFile.FileName=strFileName
objUpLoadFile.IsManual=True
If Not CheckRegExp(LCase(strFileName),"\.("& ZC_UPLOAD_FILETYPE &")$") Then Call RespondError(26,ZVA_ErrorMsg(26))
Dim xmlnode
Set xmlnode = objXmlFile.createElement("file")
xmlnode.datatype = "bin.base64"
xmlnode.text = strFileBits
Dim objStreamUp
Set objStreamUp = Server.CreateObject("ADODB.Stream")
With objStreamUp
.Type = adTypeBinary
.Mode = adModeReadWrite
.Open
.Position = 0
.Write xmlnode.nodeTypedvalue
If .Size>ZC_UPLOAD_FILESIZE Then Call RespondError(27,ZVA_ErrorMsg(27))
Dim objRS
strFileName=FilterSQL(strFileName)
'If Not objConn.Execute("SELECT * FROM [blog_UpLoad] WHERE [ul_FileName] = '" & strFileName & "'").EOF Then Call RespondError(28,ZVA_ErrorMsg(28))
.Position = 0
objUpLoadFile.Stream=.Read
.Close
End With
objUpLoadFile.FileSize=LenB(objUpLoadFile.Stream)
If objUpLoadFile.UpLoad Then
Call objUpLoadFile.SaveFile()
strXML=Replace(strXML,"$%#1#%$",TransferHTML(objUpLoadFile.FullUrl,"[html-format]"))
Response.Write strXML
End If
End Function
'*********************************************************
'*********************************************************
' 目的:
'*********************************************************
Function this_deletePost(intPostID)
Dim strXML
strXML="$%#1#%$"
Dim objArticle
Set objArticle=New TArticle
If objArticle.LoadInfoByID(intPostID) Then
If Not((objArticle.AuthorID=BlogUser.ID) Or (CheckRights("Root")=True) Or (CheckRights("ArticleAll")=True)) Then Call RespondError(6,ZVA_ErrorMsg(6))
Else
Call RespondError(9,ZVA_ErrorMsg(9))
End If
If objArticle.Del Then
Call MakeBlogReBuild_Core()
Response.Clear
strXML=Replace(strXML,"$%#1#%$",1)
Response.Write strXML
Else
Call RespondError(11,ZVA_ErrorMsg(11))
End If
End Function
'*********************************************************
'/////////////////////////////////////////////////////////////////////////////////////////
Call System_Initialize()
Dim strXmlCall
Dim objXmlFile
'plugin node
For Each sAction_Plugin_XMLRPC_Begin in Action_Plugin_XMLRPC_Begin
If Not IsEmpty(sAction_Plugin_XMLRPC_Begin) Then Call Execute(sAction_Plugin_XMLRPC_Begin)
Next
Response.ContentType = "text/xml"
If strXmlCall="" Then
strXmlCall=Request.BinaryRead(Request.TotalBytes)
End If
Set objXmlFile = Server.CreateObject("Microsoft.XMLDOM")
objXmlFile.load(strXmlCall)
If objXmlFile.readyState=4 Then
If objXmlFile.parseError.errorCode <> 0 Then
Call RespondError(0,ZVA_ErrorMsg(0))
Else
Dim objRootNode
Set objRootNode=objXmlFile.documentElement
Dim strAction
strAction=objRootNode.selectSingleNode("methodName").text
Dim strUserName
Dim strUserPassWord
Dim intNumberOfPosts
Dim strPost
Dim intPostID
Dim strFileName
Dim strFileType
Dim strFileBits
Dim bolPublish
Select Case strAction
Case "blogger.getUsersBlogs":
strUserName=objRootNode.selectSingleNode("params/param[1]/value/string").text
strUserPassWord=objRootNode.selectSingleNode("params/param[2]/value/string").text
If CheckUserAndRights(strUserName,strUserPassWord,"admin") Then Call this_getUsersBlogs()
Case "metaWeblog.getCategories":
strUserName=objRootNode.selectSingleNode("params/param[1]/value/string").text
strUserPassWord=objRootNode.selectSingleNode("params/param[2]/value/string").text
If CheckUserAndRights(strUserName,strUserPassWord,"admin") Then Call this_getCategories()
Case "metaWeblog.getRecentPosts":
strUserName=objRootNode.selectSingleNode("params/param[1]/value/string").text
strUserPassWord=objRootNode.selectSingleNode("params/param[2]/value/string").text
intNumberOfPosts=objRootNode.selectSingleNode("params/param[3]/value/int").text
If CheckUserAndRights(strUserName,strUserPassWord,"ArticleMng") Then Call this_getRecentPosts(intNumberOfPosts)
Case "metaWeblog.newPost":
strUserName=objRootNode.selectSingleNode("params/param[1]/value/string").text
strUserPassWord=objRootNode.selectSingleNode("params/param[2]/value/string").text
strPost=objRootNode.selectSingleNode("params/param[3]/value/struct").xml
bolPublish=CBool(objRootNode.selectSingleNode("params/param[4]/value/boolean").text)
If CheckUserAndRights(strUserName,strUserPassWord,"ArticleEdt") Then Call this_newPost(strPost,bolPublish)
Case "metaWeblog.editPost":
intPostID=objRootNode.selectSingleNode("params/param[0]/value/string").text
strUserName=objRootNode.selectSingleNode("params/param[1]/value/string").text
strUserPassWord=objRootNode.selectSingleNode("params/param[2]/value/string").text
strPost=objRootNode.selectSingleNode("params/param[3]/value/struct").xml
bolPublish=CBool(objRootNode.selectSingleNode("params/param[4]/value/boolean").text)
If CheckUserAndRights(strUserName,strUserPassWord,"ArticleEdt") Then Call this_editPost(intPostID,strPost,bolPublish)
Case "metaWeblog.getPost":
intPostID=objRootNode.selectSingleNode("params/param[0]/value/string").text
strUserName=objRootNode.selectSingleNode("params/param[1]/value/string").text
strUserPassWord=objRootNode.selectSingleNode("params/param[2]/value/string").text
If CheckUserAndRights(strUserName,strUserPassWord,"ArticleMng") Then Call this_getPost(intPostID)
Case "metaWeblog.newMediaObject":
strUserName=objRootNode.selectSingleNode("params/param[1]/value/string").text
strUserPassWord=objRootNode.selectSingleNode("params/param[2]/value/string").text
strFileName=objRootNode.selectSingleNode("params/param[3]/value/struct/member[name=""name""]/value/string").text
strFileType=objRootNode.selectSingleNode("params/param[3]/value/struct/member[name=""type""]/value/string").text
strFileBits=objRootNode.selectSingleNode("params/param[3]/value/struct/member[name=""bits""]/value/base64").text
If CheckUserAndRights(strUserName,strUserPassWord,"FileUpload") Then Call this_newMediaObject(strFileName,strFileType,strFileBits)
Case "blogger.deletePost":
intPostID=objRootNode.selectSingleNode("params/param[1]/value/string").text
strUserName=objRootNode.selectSingleNode("params/param[2]/value/string").text
strUserPassWord=objRootNode.selectSingleNode("params/param[3]/value/string").text
If CheckUserAndRights(strUserName,strUserPassWord,"ArticleDel") Then Call this_deletePost(intPostID)
Case Else
Call RespondError(1,ZVA_ErrorMsg(1))
End Select
End If
End If
Call ClearGlobeCache
Call LoadGlobeCache
'plugin node
For Each sAction_Plugin_XMLRPC_End in Action_Plugin_XMLRPC_End
If Not IsEmpty(sAction_Plugin_XMLRPC_End) Then Call Execute(sAction_Plugin_XMLRPC_End)
Next
Call System_Terminate()
If Err.Number<>0 then
Call RespondError(0,ZVA_ErrorMsg(0))
End If
%>