Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class WidgetService < Appcelerator::Service
- include ActionView::Helpers::TextHelper
- include ActionController::UrlWriter
- Service 'articles.fetch.request', :fetch_articles, 'articles.fetch.response'
- Service 'login.request', :login, 'login.response'
- Service 'logout.request', :logout, 'logout.response'
- Service 'registration.request', :registeruser, 'registration.response'
- Service 'suggestion.submit.request', :makesuggestion, 'suggestion.submit.response'
- Service 'suggestion.vote.request', :vote, 'suggestion.vote.response'
- def fetch_articles(request,message)
- session = request['session']
- blog_code = message['blogid']
- blog = Blog.find_by_blog_code(blog_code)
- user = nil
- if logged_in? session
- user = current_user(session)
- end
- loggedin = logged_in?(session)
- if !blog.nil?
- result = []
- suggestions = blog.suggestions.blog_list
- suggestions[0,5].each do |suggestion|
- entry = {}
- entry['suggestion_id'] = suggestion.id
- entry['title'] = text(suggestion.title,29)
- entry['link'] = '/suggestions/' + suggestion.id.to_s
- entry['blogid'] = blog_code
- entry['voted'] = loggedin ? user.voted_for?(suggestion) : false
- if suggestion.user.nil? || suggestion.user.is_anonymous?
- entry['submitter'] = 'anonymous'
- else
- entry['submitter'] = h(suggestion.user.login)
- end
- result.push(entry)
- end
- response = {
- 'success' => true,
- 'suggestions' => result,
- 'profile_url' => blog_url(blog, :host => request['orig_request'].host, :port => request['orig_request'].port),
- 'total_suggestions' => blog.suggestions.pending_count,
- 'header_text' => blog.widget_style.header_text_html,
- 'allow_anonymous' => blog.allow_anonymous }
- if anonymous?(session)
- response.merge!('loggedin' => loggedin, 'name' => 'Anonymous')
- else
- response.merge!('loggedin' => true, 'name' => h(current_user(session).login))
- end
- else
- {'suggestions' => nil, 'success'=> false, 'message'=>'bad blog id' }
- end
- end
- def login(request,message)
- username = message['username']
- password = message['password']
- u = User.authenticate(username, password)
- if !u.nil?
- request['session'][:user] = u.id
- {'success' => true, 'username' => h(u.login)}
- else
- {'success' => false, 'message' => 'invalid username/password'}
- end
- end
- def logout(request,message)
- session = request['session']
- session[:user]=nil
- request['session'].delete
- {'success' => true}
- end
- def registeruser(request,message)
- session = request['session']
- name = h(message['fullname'])
- username = h(message['username'])
- password = h(message['password'])
- email = h(message['email'])
- sanity_email = User.find_by_email(email)
- sanity_username = User.find_by_login(username)
- if !sanity_email.nil?
- return {'success' => false,'message' => 'user with this email already exists'}
- end
- if !sanity_username.nil?
- return {'success' => false,'message' => 'user with this username already exists'}
- end
- user = nil
- if logged_in? session
- user = current_user(session)
- else
- user = User.new
- end
- user.name = name
- user.login = username
- user.password = password
- user.password_confirmation = password
- user.email = email
- user.is_anonymous = false
- user.save!
- session[:user] = user.id
- puts "Create new user: #{user}"
- {'success' => true, 'username' => h(user.login)}
- end
- def anonymous_user(session)
- user = User.create_anonymous
- puts "created anon user with id: #{user.id}"
- session[:user] = user.id
- return user
- end
- def makesuggestion(request,message)
- session = request['session']
- title = message['title']
- blog_code = message['blogid']
- user = nil
- newuser = false
- if anonymous?(session) && !blog.allow_anonymous
- return {'success' => false,'message' => 'this blog does not allow anonymous posts, please log in'}
- end
- if !logged_in?(session)
- puts "calling create anon"
- user = anonymous_user(session)
- newuser = true
- else
- user = current_user(session)
- end
- blog = Blog.find_by_blog_code(blog_code)
- newsuggestion = Suggestion.create(:blog => blog, :title => title, :current_vote_total => 0, :user => user)
- if blog.user.notify_on_new_suggestion?
- orig_request = request['orig_request']
- SuggestionMailer.deliver_new_suggestion_received(orig_request.host, orig_request.port, newsuggestion)
- end
- result = []
- suggestions = blog.suggestions.blog_list
- suggestions[0,4].each do |suggestion|
- if suggestion.id != newsuggestion.id
- entry = {}
- entry['suggestion_id'] = suggestion.id
- entry['title'] = text(suggestion.title,29)
- entry['link'] = '/suggestions/' + suggestion.id.to_s
- entry['blogid'] = blog_code
- if logged_in? session
- vote = user.votes.for_suggestion suggestion
- puts "voted= #{!vote.empty?} for userid #{user.id} and suggestionid #{suggestion.id}"
- entry['voted'] = !vote.empty?
- else
- entry['voted'] = false
- end
- if suggestion.user.is_anonymous?
- entry['submitter'] = 'anonymous'
- else
- entry['submitter'] = (suggestion.user.login)
- end
- result.push(entry)
- end
- end
- new_entry = {}
- new_entry['submitter'] = user_name(request['session'])
- new_entry['suggestion_id'] = newsuggestion.id
- new_entry['title'] = text(newsuggestion.title,29)
- new_entry['link'] = '/suggestions/' + newsuggestion.id.to_s
- new_entry['voted'] = true
- result.insert(0, new_entry)
- {'success' => true, 'suggestions' => result, 'newuser'=>newuser}
- end
- def user_name (session)
- if logged_in?(session)
- return current_user(session).login
- else
- return 'Anonymous'
- end
- end
- def anonymous? (session)
- if !logged_in?(session)
- return true
- else
- user = current_user(session)
- return user.is_anonymous?
- end
- end
- def current_user(session)
- session[:user] ? User.find(session[:user]) : nil
- end
- def logged_in? (session)
- user = current_user(session)
- if user.nil?
- puts "not logged in"
- return false
- else
- puts "logged in as #{user.login} with userid #{user.id}"
- return true
- end
- end
- def vote(request,message)
- suggestion = Suggestion.find message['suggestion_id']
- session = request['session']
- if !logged_in?(session)
- user =anonymous_user(session)
- user.vote_for(suggestion)
- {
- 'success' => true,
- 'suggestion_id' => suggestion.id,
- 'votes' => suggestion.current_vote_total,
- 'newuser' => true
- }
- else
- user = current_user(session)
- unless user.voted_for?(suggestion)
- user.vote_for(suggestion)
- {
- 'success' => true,
- 'suggestion_id' => suggestion.id,
- 'votes' => suggestion.current_vote_total,
- 'newuser'=>false
- }
- else
- {'success' => false,'message' => 'you have already voted for this suggestion','newuser'=>false}
- end
- end
- end
- protected
- # escape html
- def h(s)
- CGI.escapeHTML(s)
- end
- def text(s, len)
- h((s =~ / /) ? s : truncate(s,len))
- end
- end
Add Comment
Please, Sign In to add comment