示例#1
0
文件: forms.py 项目: alejo8591/maker
 def save(self, *args, **kwargs):
     "Form processor"
     
     profile = None
     
     if self.invitation:
         # Create DjangoUser
         django_user = django_auth.User(username=self.cleaned_data['username'], password='')
         django_user.set_password(self.cleaned_data['password'])
         django_user.save()
         
         # Crate profile
         try:
             profile = django_user.get_profile()
         except:
             profile = User()
             profile.user = django_user
         
         profile.name = django_user.username
         profile.default_group = self.invitation.default_group
         profile.save()
         
         # Create contact
         try:    
             contact_type = ContactType.objects.get(Q(name='Person') | Q(slug='person'))
         except:
             contact_type = ContactType.objects.all()[0]
         
         try:
             # Check if contact has already been created (e.g. by a signals
             contact = profile.get_contact()
             if not contact:
                 contact = Contact()
         except:
             contact = Contact()
             
         contact.name         = self.cleaned_data['name']
         contact.contact_type = contact_type
         contact.related_user = profile
         contact.save()
         
         # Set email
         try:
             emailfield = contact_type.fields.filter(field_type='email')[0]
             email = ContactValue(value=self.invitation.email, field=emailfield, contact=contact)
             email.save()
         except:
             pass
         
         # Add quick start widget
         widget = Widget(user=profile,
                         perspective=profile.get_perspective(),
                         module_name='maker.core',
                         widget_name='widget_welcome')
         widget.save()
     
     return profile
示例#2
0
文件: forms.py 项目: alejo8591/maker
 def save(self, request, contact_type=None):
     "Process form and create DB objects as required"
     if self.instance:
         contact = self.instance
     else:
         contact = Contact()
         contact.contact_type = contact_type
     
     contact.name = unicode(self.cleaned_data['name'])
     
     if 'parent' in self.cleaned_data:
         contact.parent = self.cleaned_data['parent']
     
     if 'related_user' in self.cleaned_data:
         contact.related_user = self.cleaned_data['related_user']
     
     contact.save()
     
     if self.instance:
         contact.contactvalue_set.all().delete()
     for field in contact.contact_type.fields.all():
         for form_name in self.cleaned_data:
             if re.match(str("^"+field.name+"___\d+$"), form_name):
                 if isinstance(self.fields[form_name], forms.FileField):
                     value = ContactValue(field=field, contact=contact,
                                          value=self._handle_uploaded_file(form_name))
                     if isinstance(self.fields[form_name], forms.ImageField):
                         self._image_resize(value.value)
                 else:
                     if field.field_type == 'picture' and isinstance(self.fields[form_name],
                                                                     forms.ChoiceField):
                         if self.cleaned_data[form_name] != 'delete':
                             value = ContactValue(field=field, contact=contact,
                                                  value=self.cleaned_data[form_name])
                     else:
                         value = ContactValue(field=field, contact=contact,
                                              value=self.cleaned_data[form_name])
                 value.save()       
     return contact
示例#3
0
文件: csvapi.py 项目: alejo8591/maker
    def parse_contacts(self, contacts):
        "Break down CSV file into fields"
        
        for row in contacts:
            
            #Tidy up keys (iterkeys strip())
            
            try:
                type = row['type']
            except Exception:
                pass #Set type to default type

            try:
                name = row['name']
            except Exception:
                try:
                    firstname = row['firstname']
                    surname = row['surname']
                    name = firstname + " " + surname
                except Exception:
                    continue    
                
            contact_type = ContactType.objects.filter(name=type)
            if contact_type:
                contact_type = contact_type[0]
                
            # Create a new contact if it doesn't exist
            contact_exists = Contact.objects.filter(name=name, contact_type__name=type, trash=False)
            
            #TODO: If one does exist then append the data on that contact
            
            if not contact_exists:
                                
                contact = Contact()
                contact.name = name
                contact.contact_type = contact_type
                contact.auto_notify = False
                contact.save()
            
                fields = contact_type.fields.filter(trash=False)
                           
                for field in fields:
                    if field.name in row:
                        x = row[field.name]
                        if field.field_type == 'email':
                            x = self.verify_email(x)
                        if field.field_type == 'url':
                            x = self.verify_url(x)
                        if x:
                            contact_value = ContactValue()
                            contact_value.field = field
                            contact_value.contact = contact
                            contact_value.value = x
                            contact_value.save()                       
示例#4
0
def _do_sync(data, user):
    "Run updates"
    
    resource_id = data.info.application.id.raw
    
    contact_type = _get_contact_type(user)
    
    for item in data.result:
        item_id = None
        if 'id' in item.raw:
            item_id = item.id.raw
        dups = _find_duplicates(resource_id, item, user)
        if dups:
            for contact in dups:
                transaction.commit()
                try:
                    fields = contact.contact_type.fields
                    contact.add_nuvius_resource(resource_id, item_id)
                    if item.name.raw:
                        contact.name = item.name.raw
                    if item.email:
                        fs = fields.filter(field_type='email')
                        if fs:
                            for iemail in item.email:
                                values = contact.contactvalue_set.filter(field__in=fs, value=iemail.raw)
                                if not values:
                                    value = ContactValue(contact=contact, field=fs[0], value=iemail.raw)
                                    value.save()
                    if item.phone:
                        fs = fields.filter(field_type='phone')
                        if fs:
                            for iphone in item.phone:
                                values = contact.contactvalue_set.filter(field__in=fs, value=iphone.raw)
                                if not values:
                                    value = ContactValue(contact=contact, field=fs[0], value=iphone.raw)
                                    value.save()
                                
                    if item.address:
                        fs = fields.filter(name='address')
                        if fs:
                            for iaddress in item.address:
                                values = contact.contactvalue_set.filter(field__in=fs, value__icontains=iaddress.raw)
                                if not values:
                                    value = ContactValue(contact=contact, field=fs[0], value=iaddress.raw)
                                    value.save()
                    if item.website:
                        fs = fields.filter(name='website')
                        if fs:
                            for iwebsite in item.website:
                                values = contact.contactvalue_set.filter(field__in=fs, value__icontains=iwebsite.raw)
                                if not values:
                                    value = ContactValue(contact=contact, field=fs[0], value=iwebsite.raw)
                                    value.save()
                    contact.auto_notify = False
                    contact.save()
                    transaction.commit()
                except KeyboardInterrupt:
                    transaction.rollback()
                    break
                except:
                    transaction.rollback()
        else:
            if contact_type and item.name.raw:
                transaction.commit()
                try:
                    contact = Contact(contact_type=contact_type)
                    contact.add_nuvius_resource(resource_id, item_id)
                    contact.name = item.name.raw
                    contact.auto_notify = False
                    contact.set_user(user)
                    contact.save()
                    fields = contact_type.fields
                    if item.email:
                        fs = fields.filter(field_type='email')
                        if fs:
                            for iemail in item.email:
                                value = ContactValue(contact=contact, field=fs[0], value=iemail.raw)
                                value.save()
                    if item.phone:
                        fs = fields.filter(field_type='phone')
                        if fs:
                            for iphone in item.phone:
                                value = ContactValue(contact=contact, field=fs[0], value=iphone.raw)
                                value.save()
                    if item.address:
                        fs = fields.filter(name='address')
                        if fs:
                            for iaddress in item.address:
                                value = ContactValue(contact=contact, field=fs[0], value=iaddress.raw)
                                value.save()
                    if item.website:
                        fs = fields.filter(name='website')
                        if fs:
                            for iwebsite in item.website:
                                value = ContactValue(contact=contact, field=fs[0], value=iwebsite.raw)
                                value.save()
                    transaction.commit()
                except KeyboardInterrupt:
                    transaction.rollback()
                    break
                except:
                    transaction.rollback()
            
    _clean_missing(resource_id, data.result, user)