/from_1.1-1.2/plugins/user/akismet/Handler.cfc

https://bitbucket.org/asfusion/mango-updates · ColdFusion CFScript · 179 lines · 148 code · 31 blank · 0 comment · 3 complexity · 2e56ac5016f10dde9c982e6a8dfd12ca MD5 · raw file

  1. <cfcomponent>
  2. <cfset variables.name = "Akismet">
  3. <cfset variables.id = "com.asfusion.mango.plugins.akismet">
  4. <cfset variables.package = "com/asfusion/mango/plugins/akismet"/>
  5. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  6. <cffunction name="init" access="public" output="false" returntype="any">
  7. <cfargument name="mainManager" type="any" required="true" />
  8. <cfargument name="preferences" type="any" required="true" />
  9. <cfset var blogid = arguments.mainManager.getBlog().getId() />
  10. <cfset var path = blogid & "/" & variables.package />
  11. <cfset variables.preferencesManager = arguments.preferences />
  12. <cfset variables.manager = arguments.mainManager />
  13. <cfset variables.apiKey = variables.preferencesManager.get(path,"apiKey","YOUR_AKISMET_API_KEY") />
  14. <cfset variables.mode = variables.preferencesManager.get(path,"mode","moderate") />
  15. <cfreturn this/>
  16. </cffunction>
  17. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  18. <cffunction name="getName" access="public" output="false" returntype="string">
  19. <cfreturn variables.name />
  20. </cffunction>
  21. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  22. <cffunction name="setName" access="public" output="false" returntype="void">
  23. <cfargument name="name" type="string" required="true" />
  24. <cfset variables.name = arguments.name />
  25. <cfreturn />
  26. </cffunction>
  27. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  28. <cffunction name="getId" access="public" output="false" returntype="any">
  29. <cfreturn variables.id />
  30. </cffunction>
  31. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  32. <cffunction name="setId" access="public" output="false" returntype="void">
  33. <cfargument name="id" type="any" required="true" />
  34. <cfset variables.id = arguments.id />
  35. <cfreturn />
  36. </cffunction>
  37. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  38. <cffunction name="setup" hint="This is run when a plugin is activated" access="public" output="false" returntype="any">
  39. <cfset var path = variables.manager.getBlog().getId() & "/" & variables.package />
  40. <cfif NOT len(variables.preferencesManager.get(path,"apiKey",""))>
  41. <cfset variables.preferencesManager.put(path,"apiKey","YOUR_AKISMET_API_KEY") />
  42. </cfif>
  43. <cfif NOT len(variables.preferencesManager.get(path,"mode",""))>
  44. <cfset variables.preferencesManager.put(path,"mode","moderate") />
  45. </cfif>
  46. <cfreturn "Akismet plugin activated. <br />You can now <a href='generic_settings.cfm?event=showAkismetSettings&amp;owner=askimet&amp;selected=showAkismetSettings'>Configure it</a>" />
  47. </cffunction>
  48. <cffunction name="unsetup" hint="This is run when a plugin is de-activated" access="public" output="false" returntype="any">
  49. <!--- TODO: Implement Method --->
  50. <cfreturn />
  51. </cffunction>
  52. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  53. <cffunction name="handleEvent" hint="Asynchronous event handling" access="public" output="false" returntype="any">
  54. <cfargument name="event" type="any" required="true" />
  55. <cfreturn />
  56. </cffunction>
  57. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  58. <cffunction name="processEvent" hint="Synchronous event handling" access="public" output="false" returntype="any">
  59. <cfargument name="event" type="any" required="true" />
  60. <cfset var js = "" />
  61. <cfset var outputData = "" />
  62. <cfset var link = "" />
  63. <cfset var page = "" />
  64. <cfset var data = ""/>
  65. <cfset var path = "" />
  66. <cfset var admin = "" />
  67. <cfset var verificationArgs = structnew() />
  68. <cfset var eventName = arguments.event.name />
  69. <cfset var comment = "" />
  70. <cfset var isSpam = false>
  71. <cfset var entry = "">
  72. <cfif eventName EQ "beforeCommentAdd">
  73. <cfset comment = arguments.event.getNewItem() />
  74. <cfif NOT len(comment.getAuthorId())>
  75. <!--- check for spam only if non-author --->
  76. <!--- test for spam --->
  77. <cfif NOT structkeyexists(variables, 'cfakismet')>
  78. <cfset initAskimet() />
  79. </cfif>
  80. <cfif variables.cfakismet.verifyKey()>
  81. <cftry>
  82. <cftry>
  83. <cfset entry = variables.manager.getPostsmanager().getPostById(comment.getEntryId())>
  84. <cfcatch type="any">
  85. <cfset entry = variables.manager.getPagesManager().getPageById(comment.getEntryId()) />
  86. </cfcatch>
  87. </cftry>
  88. <cfset verificationArgs.CommentAuthor = comment.getCreatorName() />
  89. <cfset verificationArgs.CommentAuthorEmail = comment.getCreatorEmail() />
  90. <cfset verificationArgs.CommentAuthorURL = comment.getCreatorUrl() />
  91. <cfset verificationArgs.CommentContent = comment.getContent() />
  92. <cfset verificationArgs.Permalink = variables.manager.getBlog().getUrl() & entry.getUrl() />
  93. <cfset isSpam = variables.cfakismet.isCommentSpam(argumentCollection= verificationArgs) />
  94. <cfcatch type="any"></cfcatch>
  95. </cftry>
  96. <cfif isSpam and variables.mode EQ "moderate">
  97. <cfset comment.setApproved(0) />
  98. <cfset comment.setRating(-1) />
  99. <cfelseif isSpam and variables.mode EQ "reject">
  100. <cfset arguments.event.message.status = "error" />
  101. <cfset arguments.event.message.text = "Comment was marked as spam and could not be submitted" />
  102. <cfset arguments.event.continueProcess = false />
  103. </cfif>
  104. </cfif>
  105. </cfif>
  106. <!--- admin nav event --->
  107. <cfelseif eventName EQ "settingsNav">
  108. <cfset link = structnew() />
  109. <cfset link.owner = "askimet">
  110. <cfset link.page = "settings" />
  111. <cfset link.title = "Akismet" />
  112. <cfset link.eventName = "showAkismetSettings" />
  113. <cfset arguments.event.addLink(link)>
  114. <!--- admin event, make sure user is logged in --->
  115. <cfelseif eventName EQ "showAkismetSettings" AND variables.manager.isCurrentUserLoggedIn()>
  116. <cfset data = arguments.event.getData() />
  117. <cfif structkeyexists(data.externaldata,"apply")>
  118. <cfset variables.apiKey = data.externaldata.apiKey />
  119. <cfset variables.mode = data.externaldata.mode />
  120. <cfset path = variables.manager.getBlog().getId() & "/" & variables.package />
  121. <cfset variables.preferencesManager.put(path,"apiKey",variables.apiKey) />
  122. <cfset variables.preferencesManager.put(path,"mode",variables.mode) />
  123. <cftry>
  124. <cfset variables.manager.getAdministrator().pluginUpdated(
  125. variables.id, variables.id, variables.manager.getCurrentUser()) />
  126. <cfcatch type="any"></cfcatch>
  127. </cftry>
  128. <cfset data.message.setstatus("success") />
  129. <cfset data.message.setType("settings") />
  130. <cfset data.message.settext("Settings updated")/>
  131. </cfif>
  132. <cfsavecontent variable="page">
  133. <cfinclude template="admin/settingsForm.cfm">
  134. </cfsavecontent>
  135. <!--- change message --->
  136. <cfset data.message.setTitle("Akismet settings") />
  137. <cfset data.message.setData(page) />
  138. </cfif>
  139. <cfreturn arguments.event />
  140. </cffunction>
  141. <!--- :::::::::::::::::::::::::::::::::::::::::::::::::::: --->
  142. <cffunction name="initAskimet" access="private">
  143. <cfset variables.cfakismet = createObject("component","CFAkismet").init()>
  144. <cfset variables.cfakismet.setBlogURL(variables.manager.getBlog().getUrl())>
  145. <cfset variables.cfakismet.setKey(variables.apiKey)>
  146. <cfset variables.cfakismet.setApplicationName("Mango " & variables.manager.getVersion())>
  147. </cffunction>
  148. </cfcomponent>