Guest User

Untitled

a guest
Mar 16th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.55 KB | None | 0 0
  1. class WidgetService < Appcelerator::Service
  2. include ActionView::Helpers::TextHelper
  3. include ActionController::UrlWriter
  4.  
  5. Service 'articles.fetch.request', :fetch_articles, 'articles.fetch.response'
  6. Service 'login.request', :login, 'login.response'
  7. Service 'logout.request', :logout, 'logout.response'
  8. Service 'registration.request', :registeruser, 'registration.response'
  9. Service 'suggestion.submit.request', :makesuggestion, 'suggestion.submit.response'
  10. Service 'suggestion.vote.request', :vote, 'suggestion.vote.response'
  11.  
  12. def fetch_articles(request,message)
  13. session = request['session']
  14. blog_code = message['blogid']
  15. blog = Blog.find_by_blog_code(blog_code)
  16.  
  17. user = nil
  18. if logged_in? session
  19. user = current_user(session)
  20. end
  21. loggedin = logged_in?(session)
  22. if !blog.nil?
  23. result = []
  24. suggestions = blog.suggestions.blog_list
  25. suggestions[0,5].each do |suggestion|
  26. entry = {}
  27. entry['suggestion_id'] = suggestion.id
  28. entry['title'] = text(suggestion.title,29)
  29. entry['link'] = '/suggestions/' + suggestion.id.to_s
  30. entry['blogid'] = blog_code
  31.  
  32. entry['voted'] = loggedin ? user.voted_for?(suggestion) : false
  33.  
  34. if suggestion.user.nil? || suggestion.user.is_anonymous?
  35. entry['submitter'] = 'anonymous'
  36. else
  37. entry['submitter'] = h(suggestion.user.login)
  38. end
  39. result.push(entry)
  40. end
  41.  
  42. response = {
  43. 'success' => true,
  44. 'suggestions' => result,
  45. 'profile_url' => blog_url(blog, :host => request['orig_request'].host, :port => request['orig_request'].port),
  46. 'total_suggestions' => blog.suggestions.pending_count,
  47. 'header_text' => blog.widget_style.header_text_html,
  48. 'allow_anonymous' => blog.allow_anonymous }
  49.  
  50. if anonymous?(session)
  51. response.merge!('loggedin' => loggedin, 'name' => 'Anonymous')
  52. else
  53. response.merge!('loggedin' => true, 'name' => h(current_user(session).login))
  54. end
  55. else
  56. {'suggestions' => nil, 'success'=> false, 'message'=>'bad blog id' }
  57. end
  58. end
  59.  
  60. def login(request,message)
  61. username = message['username']
  62. password = message['password']
  63. u = User.authenticate(username, password)
  64. if !u.nil?
  65. request['session'][:user] = u.id
  66. {'success' => true, 'username' => h(u.login)}
  67. else
  68. {'success' => false, 'message' => 'invalid username/password'}
  69. end
  70. end
  71.  
  72. def logout(request,message)
  73. session = request['session']
  74. session[:user]=nil
  75. request['session'].delete
  76. {'success' => true}
  77. end
  78.  
  79. def registeruser(request,message)
  80. session = request['session']
  81. name = h(message['fullname'])
  82. username = h(message['username'])
  83. password = h(message['password'])
  84. email = h(message['email'])
  85.  
  86. sanity_email = User.find_by_email(email)
  87. sanity_username = User.find_by_login(username)
  88.  
  89. if !sanity_email.nil?
  90. return {'success' => false,'message' => 'user with this email already exists'}
  91. end
  92. if !sanity_username.nil?
  93. return {'success' => false,'message' => 'user with this username already exists'}
  94. end
  95. user = nil
  96. if logged_in? session
  97. user = current_user(session)
  98. else
  99. user = User.new
  100. end
  101. user.name = name
  102. user.login = username
  103. user.password = password
  104. user.password_confirmation = password
  105. user.email = email
  106. user.is_anonymous = false
  107. user.save!
  108. session[:user] = user.id
  109. puts "Create new user: #{user}"
  110. {'success' => true, 'username' => h(user.login)}
  111. end
  112.  
  113. def anonymous_user(session)
  114. user = User.create_anonymous
  115. puts "created anon user with id: #{user.id}"
  116. session[:user] = user.id
  117. return user
  118. end
  119.  
  120. def makesuggestion(request,message)
  121. session = request['session']
  122. title = message['title']
  123. blog_code = message['blogid']
  124.  
  125. user = nil
  126. newuser = false
  127. if anonymous?(session) && !blog.allow_anonymous
  128. return {'success' => false,'message' => 'this blog does not allow anonymous posts, please log in'}
  129. end
  130. if !logged_in?(session)
  131. puts "calling create anon"
  132. user = anonymous_user(session)
  133. newuser = true
  134. else
  135. user = current_user(session)
  136. end
  137.  
  138. blog = Blog.find_by_blog_code(blog_code)
  139. newsuggestion = Suggestion.create(:blog => blog, :title => title, :current_vote_total => 0, :user => user)
  140.  
  141. if blog.user.notify_on_new_suggestion?
  142. orig_request = request['orig_request']
  143. SuggestionMailer.deliver_new_suggestion_received(orig_request.host, orig_request.port, newsuggestion)
  144. end
  145.  
  146. result = []
  147.  
  148. suggestions = blog.suggestions.blog_list
  149. suggestions[0,4].each do |suggestion|
  150. if suggestion.id != newsuggestion.id
  151. entry = {}
  152. entry['suggestion_id'] = suggestion.id
  153. entry['title'] = text(suggestion.title,29)
  154. entry['link'] = '/suggestions/' + suggestion.id.to_s
  155. entry['blogid'] = blog_code
  156. if logged_in? session
  157. vote = user.votes.for_suggestion suggestion
  158. puts "voted= #{!vote.empty?} for userid #{user.id} and suggestionid #{suggestion.id}"
  159. entry['voted'] = !vote.empty?
  160. else
  161. entry['voted'] = false
  162. end
  163. if suggestion.user.is_anonymous?
  164. entry['submitter'] = 'anonymous'
  165. else
  166. entry['submitter'] = (suggestion.user.login)
  167. end
  168. result.push(entry)
  169. end
  170. end
  171.  
  172. new_entry = {}
  173. new_entry['submitter'] = user_name(request['session'])
  174. new_entry['suggestion_id'] = newsuggestion.id
  175. new_entry['title'] = text(newsuggestion.title,29)
  176. new_entry['link'] = '/suggestions/' + newsuggestion.id.to_s
  177. new_entry['voted'] = true
  178.  
  179. result.insert(0, new_entry)
  180. {'success' => true, 'suggestions' => result, 'newuser'=>newuser}
  181. end
  182.  
  183. def user_name (session)
  184. if logged_in?(session)
  185. return current_user(session).login
  186. else
  187. return 'Anonymous'
  188. end
  189. end
  190.  
  191. def anonymous? (session)
  192. if !logged_in?(session)
  193. return true
  194. else
  195. user = current_user(session)
  196. return user.is_anonymous?
  197. end
  198. end
  199. def current_user(session)
  200. session[:user] ? User.find(session[:user]) : nil
  201. end
  202. def logged_in? (session)
  203. user = current_user(session)
  204. if user.nil?
  205. puts "not logged in"
  206. return false
  207. else
  208. puts "logged in as #{user.login} with userid #{user.id}"
  209. return true
  210. end
  211. end
  212.  
  213. def vote(request,message)
  214. suggestion = Suggestion.find message['suggestion_id']
  215.  
  216. session = request['session']
  217. if !logged_in?(session)
  218. user =anonymous_user(session)
  219. user.vote_for(suggestion)
  220. {
  221. 'success' => true,
  222. 'suggestion_id' => suggestion.id,
  223. 'votes' => suggestion.current_vote_total,
  224. 'newuser' => true
  225. }
  226. else
  227. user = current_user(session)
  228. unless user.voted_for?(suggestion)
  229. user.vote_for(suggestion)
  230. {
  231. 'success' => true,
  232. 'suggestion_id' => suggestion.id,
  233. 'votes' => suggestion.current_vote_total,
  234. 'newuser'=>false
  235. }
  236. else
  237. {'success' => false,'message' => 'you have already voted for this suggestion','newuser'=>false}
  238. end
  239. end
  240. end
  241.  
  242. protected
  243. # escape html
  244. def h(s)
  245. CGI.escapeHTML(s)
  246. end
  247.  
  248. def text(s, len)
  249. h((s =~ / /) ? s : truncate(s,len))
  250. end
  251. end
Add Comment
Please, Sign In to add comment