示例#1
0
    def create_project(request):

        form = ProjectCreationForm(request.POST)
        # TODO: Form validation
        project = Project.objects.create(
            project_creator=get_request_contributor(request),
            project_name=form.data.get('project_name'),
            project_short_description=form.data.get(
                'project_short_description'),
            project_date_created=timezone.now(),
            project_url='',
            project_description='',
            project_location='',
            is_created=False)
        project = Project.objects.get(id=project.id)

        # Tag fields operate like ManyToMany fields, and so cannot
        # be added until after the object is created.
        Tag.merge_tags_field(project.project_issue_area,
                             form.data.get('project_issue_area'))
        merge_single_file(project, form, FileCategory.THUMBNAIL,
                          'project_thumbnail_location')

        project.save()
        return project
    def edit_group(request, group_id):
        group = Group.objects.get(id=group_id)

        if not is_co_owner_or_staff(request.user, group):
            raise PermissionDenied()

        form = GroupCreationForm(request.POST)
        is_created_original = group.is_created
        read_form_field_boolean(group, form, 'is_created')

        read_form_field_string(group, form, 'group_description')
        read_form_field_string(group, form, 'group_short_description')
        read_form_field_string(group, form, 'group_location')
        read_form_field_string(group, form, 'group_name')

        if not request.user.is_staff:
            group.group_date_modified = timezone.now()

        group.save()

        merge_json_changes(ProjectLink, group, form, 'group_links')
        merge_json_changes(ProjectFile, group, form, 'group_files')

        merge_single_file(group, form, FileCategory.THUMBNAIL, 'group_thumbnail_location')

        # TODO
        #if is_created_original != group.is_created:
            #print('notifying group creation')
            #send_project_creation_notification(group)

        return group
    def edit_event(request, event_id):
        event = Event.objects.get(id=event_id)

        if not is_co_owner_or_staff(request.user, event):
            raise PermissionDenied()
    
        form = ProjectCreationForm(request.POST)
    
        read_form_field_string(event, form, 'event_agenda')
        read_form_field_string(event, form, 'event_description')
        read_form_field_string(event, form, 'event_short_description')
        read_form_field_string(event, form, 'event_name')
        read_form_field_string(event, form, 'event_location')
        read_form_field_string(event, form, 'event_rsvp_url')
        read_form_field_string(event, form, 'event_live_id')

        read_form_field_datetime(event, form, 'event_date_start')
        read_form_field_datetime(event, form, 'event_date_end')

        read_form_field_boolean(event, form, 'is_searchable')
        read_form_field_boolean(event, form, 'is_created')

        read_form_field_tags(event, form, 'event_legacy_organization')
    
        event.event_date_modified = timezone.now()

        merge_single_file(event, form, FileCategory.THUMBNAIL, 'event_thumbnail_location')

        event.save()
    
        return event
    def create_or_edit_project(request, project_id):
        form = ProjectCreationForm(request.POST)
        if project_id is not None:
            project = Project.objects.get(id=project_id)
        else:
            project = Project.objects.create(
                project_creator=get_request_contributor(request),
                project_name=form.data.get('project_name'),
                project_date_created=timezone.now(),
                is_created=False
            )

        if not is_co_owner_or_staff(request.user, project):
            raise PermissionDenied()

        is_created_original = project.is_created
        read_form_field_boolean(project, form, 'is_created')

        read_form_field_string(project, form, 'project_description')
        read_form_field_string(project, form, 'project_description_solution')
        read_form_field_string(project, form, 'project_description_actions')
        read_form_field_string(project, form, 'project_short_description')
        read_form_field_string(project, form, 'project_location')
        read_form_field_string(project, form, 'project_country')
        read_form_field_string(project, form, 'project_state')
        read_form_field_string(project, form, 'project_city')
        read_form_field_string(project, form, 'project_name')
        read_form_field_string(project, form, 'project_url')

        read_form_fields_point(project, form, 'project_location_coords', 'project_latitude', 'project_longitude')

        read_form_field_tags(project, form, 'project_issue_area')
        read_form_field_tags(project, form, 'project_stage')
        read_form_field_tags(project, form, 'project_technologies')
        read_form_field_tags(project, form, 'project_organization')
        read_form_field_tags(project, form, 'project_organization_type')

        if not request.user.is_staff:
            project.project_date_modified = timezone.now()

        project.save()

        merge_json_changes(ProjectLink, project, form, 'project_links')
        merge_json_changes(ProjectFile, project, form, 'project_files')
        merge_json_changes(ProjectPosition, project, form, 'project_positions')

        merge_single_file(project, form, FileCategory.THUMBNAIL, 'project_thumbnail_location')

        if is_created_original != project.is_created:
            print('notifying project creation')
            send_project_creation_notification(project)

        return project
示例#5
0
    def create_or_edit_group(request, group_id):
        form = GroupCreationForm(request.POST)
        if group_id is not None:
            group = Group.objects.get(id=group_id)
        else:
            group = Group.objects.create(
                group_creator=get_request_contributor(request),
                group_date_created=timezone.now(),
                group_name=form.data.get('group_name'),
                group_short_description=form.data.get(
                    'group_short_description'),
                group_description=form.data.get('group_description'),
                is_created=False)

        if not is_co_owner_or_staff(request.user, group):
            raise PermissionDenied()

        is_created_original = group.is_created
        read_form_field_boolean(group, form, 'is_created')

        project_fields_changed = False
        read_form_field_string(group, form, 'group_description')
        read_form_field_string(group, form, 'group_short_description')
        read_form_field_string(group, form, 'group_country')
        read_form_field_string(group, form, 'group_location')
        read_form_field_string(group, form, 'group_state')
        read_form_field_string(group, form, 'group_city')
        project_fields_changed |= read_form_field_string(
            group, form, 'group_name')
        read_form_field_string(group, form, 'group_url')

        read_form_fields_point(group, form, 'group_location_coords',
                               'group_latitude', 'group_longitude')

        if not request.user.is_staff:
            group.group_date_modified = timezone.now()

        group.save()

        merge_json_changes(ProjectLink, group, form, 'group_links')
        merge_json_changes(ProjectFile, group, form, 'group_files')

        project_fields_changed |= merge_single_file(
            group, form, FileCategory.THUMBNAIL, 'group_thumbnail_location')

        if project_fields_changed:
            group.update_linked_items()

        if is_created_original != group.is_created:
            send_group_creation_notification(group)

        return group
    def create_event(request):

        form = EventCreationForm(request.POST)
        # TODO: Form validation
        event = Event.objects.create(
            event_creator=get_request_contributor(request),
            event_date_created=timezone.now(),
            event_name=form.data.get('event_name'),
            event_location=form.data.get('event_location'),
            event_rsvp_url=form.data.get('event_rsvp_url'),
            event_date_start=parse(form.data.get('event_date_start'), fuzzy=True),
            event_date_end=parse(form.data.get('event_date_end'), fuzzy=True),
            event_short_description=form.data.get('event_short_description'),
            is_created=True,
            is_searchable=True
        )
        event = Event.objects.get(id=event.id)

        merge_single_file(event, form, FileCategory.THUMBNAIL, 'event_thumbnail_location')

        event.save()
        return event
示例#7
0
    def edit_project(request, project_id):
        project = Project.objects.get(id=project_id)

        if not is_co_owner_or_staff(request.user, project):
            raise PermissionDenied()

        form = ProjectCreationForm(request.POST)
        is_created_original = project.is_created
        read_form_field_boolean(project, form, 'is_created')

        read_form_field_string(project, form, 'project_description')
        read_form_field_string(project, form, 'project_short_description')
        read_form_field_string(project, form, 'project_location')
        read_form_field_string(project, form, 'project_name')
        read_form_field_string(project, form, 'project_url')

        read_form_field_tags(project, form, 'project_issue_area')
        read_form_field_tags(project, form, 'project_stage')
        read_form_field_tags(project, form, 'project_technologies')
        read_form_field_tags(project, form, 'project_organization')

        if not request.user.is_staff:
            project.project_date_modified = timezone.now()

        project.save()

        merge_json_changes(ProjectLink, project, form, 'project_links')
        merge_json_changes(ProjectFile, project, form, 'project_files')
        merge_json_changes(ProjectPosition, project, form, 'project_positions')

        merge_single_file(project, form, FileCategory.THUMBNAIL,
                          'project_thumbnail_location')

        if is_created_original != project.is_created:
            print('notifying project creation')
            send_project_creation_notification(project)

        return project
    def create_group(request):

        if not request.user.is_staff:
            raise PermissionDenied()

        form = GroupCreationForm(request.POST)
        # TODO: Form validation
        group = Group.objects.create(
            group_creator=get_request_contributor(request),
            group_date_created=timezone.now(),
            group_name=form.data.get('group_name'),
            group_short_description=form.data.get('group_short_description'),
            group_description=form.data.get('group_description'),
            group_location=form.data.get('group_location'),
            is_created=False
        )
        group = Group.objects.get(id=group.id)

        # TODO: confirm    
        merge_single_file(group, form, FileCategory.THUMBNAIL, 'group_thumbnail_location')

        group.save()
        return group
示例#9
0
    def create_or_edit_event(request, event_id):
        form = EventCreationForm(request.POST)
        if event_id is not None:
            event = Event.objects.get(id=event_id)
        else:
            event = Event.objects.create(
                event_creator=get_request_contributor(request),
                event_date_created=timezone.now(),
                event_name=form.data.get('event_name'),
                event_date_start=parse_front_end_datetime(
                    form.data.get('event_date_start')),
                event_date_end=parse_front_end_datetime(
                    form.data.get('event_date_end')),
                is_created=False,
                is_searchable=False)

        if not is_co_owner_or_staff(request.user, event):
            raise PermissionDenied()

        is_created_original = event.is_created
        fields_changed = False
        project_fields_changed = False
        fields_changed |= read_form_field_string(event, form, 'event_agenda')
        fields_changed |= read_form_field_string(event, form,
                                                 'event_description')
        fields_changed |= read_form_field_string(event, form,
                                                 'event_short_description')
        project_fields_changed |= read_form_field_string(
            event, form, 'event_name')
        project_fields_changed |= read_form_field_string(
            event, form, 'event_location')
        fields_changed |= read_form_field_string(event, form, 'event_rsvp_url')
        fields_changed |= read_form_field_string(event, form, 'event_live_id')
        project_fields_changed |= read_form_field_string(
            event, form, 'event_organizers_text')

        project_fields_changed |= read_form_field_datetime(
            event, form, 'event_date_start')
        project_fields_changed |= read_form_field_datetime(
            event, form, 'event_date_end')

        fields_changed |= read_form_field_boolean(event, form, 'is_searchable')
        fields_changed |= read_form_field_boolean(event, form, 'is_created')
        project_fields_changed |= read_form_field_boolean(
            event, form, 'is_private')

        slug = form.data.get('event_slug')
        if slug is not None:
            slug = slug.lower()
            slug_event = Event.get_by_id_or_slug(slug)
            if slug_event and slug_event.id != event.id:
                print(
                    'Could not change event {event} slug to {slug} because another event already has that slug: {existing_event}'
                    .format(event=event.__str__(),
                            slug=slug,
                            existing_event=slug_event.__str__()))
            else:
                slug_changed = read_form_field_string(event, form,
                                                      'event_slug',
                                                      lambda str: str.lower())
                if slug_changed:
                    project_fields_changed = True
                    name_record = NameRecord.objects.create(event=event,
                                                            name=slug)
                    name_record.save()

        pre_change_projects = event.get_linked_projects()
        pre_change_projects = pre_change_projects and list(
            pre_change_projects.all())
        org_changed = read_form_field_tags(event, form,
                                           'event_legacy_organization')
        project_fields_changed |= org_changed

        event.event_date_modified = timezone.now()

        project_fields_changed |= merge_single_file(
            event, form, FileCategory.THUMBNAIL, 'event_thumbnail_location')

        event.save()

        if is_created_original != event.is_created:
            send_event_creation_notification(event)

        if fields_changed or project_fields_changed:
            event.recache()
        if project_fields_changed:
            change_projects = []
            if pre_change_projects:
                change_projects += pre_change_projects
            post_change_projects = event.get_linked_projects()
            if post_change_projects:
                change_projects += post_change_projects.all()
            change_projects = list(set(change_projects))
            if change_projects:
                for project in change_projects:
                    project.recache(recache_linked=False)

        return event