def post(self):
    self.response.headers['Content-Type'] = 'text/json'

    phone = Phone.normalize_number(self.request.get('phone'))
    message = self.request.get('message')

    if not (message and phone):
      result = { 'result': 'error',
                 'message': 'missing phone and/or message' }
      self.response.out.write(json.dumps(result))
      return

    sms_message = SmsMessage(phone_number=phone, 
                         message=message, 
                         direction='incoming',
                         status='unclaimed')
    objects = [ sms_message ]

    phone_entity = Phone.all().filter('number =', phone).get()

    if not phone_entity:
      db.put(objects)
      self.response.out.write(json.dumps({'result': 'ok'}))
      return

    post = Post.fromText(message)
    post.unique_id = Post.gen_unique_key()
    post.user = phone_entity.user
    objects.append(post)
    sms_message.status = 'queued'

    db.put(objects)

    imok_user = ImokUser.all().filter('account =', phone_entity.user).get()
    email_query = RegisteredEmail.all().filter('userName ='******'emailAddress')

    for email in email_query:
      template_data = {
        'message': post.message,
        'link': post.permalink(self.request.host_url),
        'unsubscribe_link': email.permalink(self.request.host_url),
        'user': imok_user
        }
      body = template.render(s.template_path('email.txt'), template_data)
      mail.send_mail(sender='*****@*****.**',
                     to=email.emailAddress,
                     subject="I'm OK",
                     body=body)

    sms_message.status = 'processed'

    response_sms = SmsMessage(phone_number=phone,
                              message="I'm OK: Message received. %d contact(s) notified." % email_query.count(),
                              direction="outgoing",
                              status="queued")

    db.put([ response_sms, sms_message ])

    #self.response.out.write(message)
    self.response.out.write(json.dumps({'result': 'ok'}))
def getProfile(createIfNeeded=False):
    # Annoying that we can't use django get_or_create() idiom here.  the
    # appengine equivalent get_or_insert() seems to allow querying by
    # key only.  I also ran into problems trying to wrap this in a
    # transaction.
    user = users.get_current_user()
    profiles = ImokUser.all().filter('account =', user).fetch(1)
    if profiles:
        profile = profiles[0]
    else:
        if createIfNeeded:
            profile = ImokUser(account=user)
        else:
            profile = None
    return profile
Beispiel #3
0
  def post(self):
    self.response.headers['Content-Type'] = 'text/json'

    phone = Phone.normalize_number(self.request.get('phone'))
    message = self.request.get('message')

    if not (message and phone):
      result = { 'result': 'error',
                 'message': 'missing phone and/or message' }
      self.response.out.write(json.dumps(result))
      return

    sms_message = SmsMessage(phone_number=phone, 
                         message=message, 
                         direction='incoming',
                         status='unclaimed')
    objects = [ sms_message ]

    phone_entity = Phone.all().filter('number =', phone).get()

    if not phone_entity:
      db.put(objects)
      self.response.out.write(json.dumps({'result': 'ok'}))
      return

    post = Post.fromText(message)
    post.unique_id = Post.gen_unique_key()
    post.user = phone_entity.user
    objects.append(post)
    sms_message.status = 'queued'

    db.put(objects)

    imok_user = ImokUser.all().filter('account =', phone_entity.user).get()
    email_query = RegisteredEmail.all().filter('userName ='******'emailAddress')

    for email in email_query:
      template_data = {
        'message': post.message,
        'link': post.permalink(self.request.host_url),
        'unsubscribe_link': email.permalink(self.request.host_url),
        'user': imok_user
        }
      body = template.render(s.template_path('email.txt'), template_data)
      mail.send_mail(sender=s.MAILER_EMAIL,
                     to=email.emailAddress,
                     subject="IMOk status",
                     body=body)

    sms_message.status = 'processed'

#     Response_sms = SmsMessage(phone_number=phone,
#                               message="IMOk: Message received, %d contact(s) notified." % email_query.count(),
#                               direction="outgoing",
#                               status="queued")

    sendSms(phone=phone_entity, message="IMOk: Message received, %d contact(s) notified." % email_query.count())
#    db.put([ response_sms, sms_message ])
    db.put([sms_message])
    
    #self.response.out.write(message)
    self.response.out.write(json.dumps({'result': 'ok'}))