Example #1
0
 def fetch_contacts(self, user_id, filters=None, limit=20, offset=0):
     
     def append_filters(query):
         for ft in filters:
             for (key, value) in ft.items():
                 for nr in CONTACTRESOLVERS:
                     nrinst = nr(key, value)
                     query.extend(nrinst)
                     
     query = Contact.all(alias="a")
     for key in Contact.get_properties(persistent=True).keys():
         query.what("a.%s" % key, alias=key)
     query.select("DISTINCT")
     group_ids = self.fetch_my_groups(user_id, onlyrtnids=True)
     if len(group_ids) > 0:
         query.model(ContactGroup.get_modelname(), alias="b", join="left", on="a.uid = b.contact_id")
         query.filter("b.group_id in", group_ids, parenthesis="(")
         query.filter("a.creator_id =", user_id, logic="or", parenthesis=")")
     else:
         query.filter("a.creator_id =", user_id)
     query.order("-a.uid")
     
     if filters != None:
         append_filters(query)
     
     if not query.has_filter("a.is_trashed"):
         query = query.filter("a.is_trashed =", False)
         
     def contact_proc(contact):
         contact.contactLeaves = self.fetch_contactleaves(contact.key())          
     return query.fetch(limit, offset, paging=True, model_proc=contact_proc)
Example #2
0
 def get_myself(self, user_id):
     query = Contact.all()
     query.filter("bind_user_id =", user_id)
     query.filter("creator_id =", user_id)
     if query.count() > 0:
         contact = query.get()
     else:
         contact = None
     return contact
Example #3
0
 def update_contact(self, contact, modifier_id):
     ct = Contact.get_by_key(contact.uid)
     if ct.is_trashed : 
         raise Error("cont_error_trashedupdate")
     if ct.creator_id != modifier_id:
         raise Error("cont_error_updatesharedcontact")
     contact = self.link_contact_to_user(contact, contact.bind_user_account)        
     contact.put(modifier_id)
     self.create_contactgroups(contact.key(), contact.group_ids, modifier_id)
     return contact
Example #4
0
 def fetch_contacts_created_by(self, user_id):
     query = Contact.all()
     query.what("uid")
     query.what("creator_id")
     query.what("contact_name")
     query.filter("creator_id =", user_id)
     query.order("-uid")
     query = query.filter("is_trashed =", False)
     def contact_proc(contact):
         """"""
     return query.fetch(model_proc=contact_proc)
Example #5
0
 def get_contactcount(self, is_trashed, user_id, group_id=None):
     query = Contact.all(alias="a")
     query.filter("a.is_trashed =", is_trashed)
     
     if group_id is not None and group_id != model.EMPTY_UID:
         query.model(ContactGroup.get_modelname(), alias="b", join="inner", on="a.uid = b.contact_id")
         query.filter("b.group_id =", group_id)
     else:
         query.filter("a.creator_id =", user_id)
         query.filter("a.uid not in", "(select contact_id from %s)" % ContactGroup.get_modelname(), wrapper=False)
     
     return query.count()
Example #6
0
 def fetch_contacts_by_group(self, group_id):
     query = Contact.all(alias="a")
     query.select("DISTINCT")
     query.what("a.uid")
     query.what("a.creator_id")
     query.what("a.contact_name")
     query.model(ContactGroup.get_modelname(), alias="b", join="left", on="a.uid = b.contact_id")      
     query.filter("b.group_id =", group_id)
     query.order("-uid")
     query = query.filter("is_trashed =", False)
     def contact_proc(contact):
         """"""
     return query.fetch(model_proc=contact_proc)
Example #7
0
 def delete_contact(self, contact_id, modifier_id):
     contact = Contact.get_by_key(int(contact_id))
     if contact.is_trashed:
         contact.delete(modifier_id)
         self.delete_contactgroups(modifier_id, contact_id=contact_id)
     else:
         if contact.creator_id != modifier_id:
             raise Error("cont_error_deletesharedcontact")
         
         query = Task.all()
         query.filter("assignee_id =", contact_id)
         query.filter("is_trashed =", False)
         if query.count() > 0:
             raise Error('cont_error_assignedtasks')
         else:
             self.trash_contacts([contact.uid], True, modifier_id)
     return True
Example #8
0
 def fetch_groups(self, user_id, is_shared=None, sharetome=None, withcontactcount=True):
     query = Group.all("a")
     if is_shared != None:
         query.filter("is_shared =", is_shared)
     if sharetome:
         query.model(ContactGroup.get_modelname(), alias="b", join="inner", on="a.uid=b.group_id")
         query.model(Contact.get_modelname(), alias="c", join="inner", on="c.uid=b.contact_id")
         query.filter("c.bind_user_id =", user_id)
         query.filter("a.is_shared =", True)
     else:
         query.filter("creator_id =", int(user_id))
     
     def group_proc(group):
         if withcontactcount:
             group.contactcount = self.get_contactcount(False, user_id, group_id=group.key())
         
     groups = query.fetch(model_proc=group_proc)
     return groups
Example #9
0
 def link_contact_to_user(self, contact, bind_user_account):
     if strutil.is_empty(bind_user_account):
         contact.bind_user_id = model.EMPTY_UID
         return contact
     query = Contact.all()
     usermo = user.get_user(u_account=bind_user_account)
     if usermo is None:
         raise Error("cont_error_linkusernotfound", account=bind_user_account)
     
     query.filter("bind_user_id =", usermo.key())
     query.filter("creator_id =", contact.creator_id)
     if contact.key() != None:
         query.filter("uid !=", contact.key())
     if query.count() > 0:
         raise Error("cont_error_linkuserexisted", account=bind_user_account, contactName=query.get().contact_name)
     
     contact.bind_user_id = usermo.key()
     return contact
Example #10
0
 def fetch_my_contacts(self, user_id):
     query = Contact.all(alias="a")
     query.select("DISTINCT")
     query.what("a.uid", alias="uid")
     query.what("a.contact_name", alias="contact_name")
     query.what("a.creator_id", alias="creator_id")
     group_ids = self.fetch_my_groups(user_id, onlyrtnids=True)
     if len(group_ids) > 0:
         query.model(ContactGroup.get_modelname(), alias="b", join="left", on="a.uid = b.contact_id")
         query.filter("b.group_id in", group_ids, parenthesis="(")
         query.filter("a.creator_id =", user_id, logic="or", parenthesis=")")
     else:
         query.filter("a.creator_id =", user_id)
     query.order("-a.uid")
     
     query = query.filter("a.is_trashed =", False)
     def contact_proc(contact):
         """"""
     return query.fetch(model_proc=contact_proc)
Example #11
0
 def empty_trash(self, user_id, modifier_id):
     query = Contact.all()
     query.filter("is_trashed =", True)
     query.filter("creator_id =", user_id)
     status = query.delete(modifier_id)
     return status
Example #12
0
 def trash_contacts(self, contact_ids, is_trashed, modifier_id):
     for contact_id in contact_ids:
         contact = Contact.get_by_key(contact_id)
         contact.is_trashed = is_trashed
         contact.put(modifier_id)
     return True
Example #13
0
 def get_contact(self, contact_id):
     contact = Contact.get_by_key(contact_id)
     return contact
Example #14
0
 def recover_contact(self, contact_id, modifier_id):
     ct = Contact.get_by_key(contact_id)
     ct.is_trashed = False
     ct.put(modifier_id)
     return ct