PageRenderTime 48ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/plugins/akismet/src/Handler.cfc

http://mangoblog-extensions.googlecode.com/
ColdFusion CFScript | 141 lines | 111 code | 30 blank | 0 comment | 3 complexity | c700fc3b6ed34b123885b438a2c01e24 MD5 | raw file
Possible License(s): Apache-2.0, GPL-3.0
  1. <cfcomponent extends="org.mangoblog.plugins.BasePlugin">
  2. <cfset variables.package = "com/asfusion/mango/plugins/akismet"/>
  3. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  4. <cffunction name="init" access="public" output="false" returntype="any">
  5. <cfargument name="mainManager" type="any" required="true" />
  6. <cfargument name="preferences" type="any" required="true" />
  7. <cfset super.init(argumentCollection=arguments) />
  8. <cfset initSettings(apiKey='YOUR_AKISMET_API_KEY', mode='moderate') />
  9. <cfreturn this/>
  10. </cffunction>
  11. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  12. <cffunction name="setup" hint="This is run when a plugin is activated" access="public" output="false" returntype="any">
  13. <cfreturn "Akismet plugin activated. <br />You can now <a href='generic_settings.cfm?event=showAkismetSettings&amp;owner=askimet&amp;selected=showAkismetSettings'>Configure it</a>" />
  14. </cffunction>
  15. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  16. <cffunction name="upgrade" hint="This is run when a plugin is upgraded" access="public" output="false" returntype="any">
  17. <cfargument name="fromVersion" type="string" />
  18. <cfset var blogid = getManager().getBlog().getId() />
  19. <cfset var path = blogid & "/" & variables.package />
  20. <cfif arguments.fromVersion EQ "1.1">
  21. <cfset setSettings(apiKey=getPreferencesManager().get(path,"apiKey","YOUR_AKISMET_API_KEY"),
  22. mode=getPreferencesManager().get(path,"mode","moderate")) />
  23. <cfset persistSettings() />
  24. <cfset getPreferencesManager().removeNode(path) />
  25. <cfset initSettings(apiKey='YOUR_AKISMET_API_KEY', mode='moderate') />
  26. </cfif>
  27. <cfreturn "Akismet upgraded" />
  28. </cffunction>
  29. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  30. <cffunction name="processEvent" hint="Synchronous event handling" access="public" output="false" returntype="any">
  31. <cfargument name="event" type="any" required="true" />
  32. <cfset var outputData = "" />
  33. <cfset var link = "" />
  34. <cfset var page = "" />
  35. <cfset var data = ""/>
  36. <cfset var verificationArgs = structnew() />
  37. <cfset var eventName = arguments.event.name />
  38. <cfset var comment = "" />
  39. <cfset var isSpam = false>
  40. <cfset var entry = "">
  41. <cfset var manager = getManager() />
  42. <cfif eventName EQ "beforeCommentAdd">
  43. <cfset comment = arguments.event.getNewItem() />
  44. <cfif NOT len(comment.getAuthorId())>
  45. <!--- check for spam only if non-author --->
  46. <!--- test for spam --->
  47. <cfif NOT structkeyexists(variables, 'cfakismet')>
  48. <cfset initAskimet() />
  49. </cfif>
  50. <cfif variables.cfakismet.verifyKey()>
  51. <cftry>
  52. <cftry>
  53. <cfset entry = manager.getPostsmanager().getPostById(comment.getEntryId())>
  54. <cfcatch type="any">
  55. <cfset entry = manager.getPagesManager().getPageById(comment.getEntryId()) />
  56. </cfcatch>
  57. </cftry>
  58. <cfset verificationArgs.CommentAuthor = comment.getCreatorName() />
  59. <cfset verificationArgs.CommentAuthorEmail = comment.getCreatorEmail() />
  60. <cfset verificationArgs.CommentAuthorURL = comment.getCreatorUrl() />
  61. <cfset verificationArgs.CommentContent = comment.getContent() />
  62. <cfset verificationArgs.Permalink = manager.getBlog().getUrl() & entry.getUrl() />
  63. <cfset isSpam = variables.cfakismet.isCommentSpam(argumentCollection= verificationArgs) />
  64. <cfcatch type="any"></cfcatch>
  65. </cftry>
  66. <cfif isSpam and getSetting('mode') EQ "moderate">
  67. <cfset comment.setApproved(0) />
  68. <cfset comment.setRating(-1) />
  69. <cfelseif isSpam and getSetting('mode') EQ "reject">
  70. <cfset arguments.event.message.status = "error" />
  71. <cfset arguments.event.message.text = "Comment was marked as spam and could not be submitted" />
  72. <cfset arguments.event.continueProcess = false />
  73. </cfif>
  74. </cfif>
  75. </cfif>
  76. <!--- admin nav event --->
  77. <cfelseif eventName EQ "settingsNav" AND manager.isCurrentUserLoggedIn()>
  78. <cfset link = structnew() />
  79. <cfset link.owner = "askimet">
  80. <cfset link.page = "settings" />
  81. <cfset link.title = "Akismet" />
  82. <cfset link.eventName = "showAkismetSettings" />
  83. <cfset arguments.event.addLink(link)>
  84. <!--- admin event, make sure user is logged in --->
  85. <cfelseif eventName EQ "showAkismetSettings" AND manager.isCurrentUserLoggedIn()>
  86. <cfset data = arguments.event.getData() />
  87. <cfif structkeyexists(data.externaldata,"apply")>
  88. <cfset setSettings(apiKey=data.externaldata.apiKey, mode=data.externaldata.mode)>
  89. <cfset persistSettings() />
  90. <cfset data.message.setstatus("success") />
  91. <cfset data.message.setType("settings") />
  92. <cfset data.message.settext("Settings updated")/>
  93. </cfif>
  94. <cfsavecontent variable="page">
  95. <cfinclude template="admin/settingsForm.cfm">
  96. </cfsavecontent>
  97. <!--- change message --->
  98. <cfset data.message.setTitle("Akismet settings") />
  99. <cfset data.message.setData(page) />
  100. </cfif>
  101. <cfreturn arguments.event />
  102. </cffunction>
  103. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  104. <cffunction name="initAskimet" access="private">
  105. <cfset var manager = getManager() />
  106. <cfset variables.cfakismet = createObject("component","CFAkismet").init() />
  107. <cfset variables.cfakismet.setBlogURL(manager.getBlog().getUrl()) />
  108. <cfset variables.cfakismet.setKey(getSetting('apiKey')) />
  109. <cfset variables.cfakismet.setApplicationName("Mango " & manager.getVersion()) />
  110. </cffunction>
  111. </cfcomponent>