Beispiel #1
0
 def patch(self):
     resource = self.shared.entry_get(self.request.matchdict['object_id'])
     schema = EntryCreateSchema(context={
         'request': self.request,
         'modified_obj': resource
     })
     data = schema.load(self.request.unsafe_json_body, partial=True).data
     # we need to ensure we are not overwriting the values
     # before move_to_position is invoked
     position = data.pop('ordering', None) or noop
     parent_id = data.pop('parent_id', None) or noop
     self.shared.populate_instance(resource,
                                   data,
                                   exclude_keys=['ordering', 'parent_id'])
     into_new_parent = parent_id != resource.parent_id and \
                       parent_id is not noop
     if position is not noop or into_new_parent:
         if not position and into_new_parent:
             position = tree_service.count_children(
                 parent_id, db_session=self.request.dbsession) + 1
         tree_service.move_to_position(resource_id=resource.resource_id,
                                       new_parent_id=parent_id,
                                       to_position=position,
                                       db_session=self.request.dbsession)
     return schema.dump(resource).data
Beispiel #2
0
 def patch(self):
     resource = self.shared.entry_get(self.request.matchdict["object_id"])
     schema = EntryCreateSchema(
         context={"request": self.request, "modified_obj": resource}
     )
     data = schema.load(self.request.unsafe_json_body, partial=True).data
     # we need to ensure we are not overwriting the values
     # before move_to_position is invoked
     position = data.pop("ordering", None) or noop
     parent_id = data.pop("parent_id", None) or noop
     self.shared.populate_instance(
         resource, data, exclude_keys=["ordering", "parent_id"]
     )
     into_new_parent = parent_id != resource.parent_id and parent_id is not noop
     if position is not noop or into_new_parent:
         if not position and into_new_parent:
             position = (
                 tree_service.count_children(
                     parent_id, db_session=self.request.dbsession
                 )
                 + 1
             )
         tree_service.move_to_position(
             resource_id=resource.resource_id,
             new_parent_id=parent_id,
             to_position=position,
             db_session=self.request.dbsession,
         )
     return schema.dump(resource).data
Beispiel #3
0
 def post(self):
     schema = EntryCreateSchema(context={"request": self.request})
     data = schema.load(self.request.unsafe_json_body).data
     resource = Entry()
     self.shared.populate_instance(resource, data)
     self.request.user.resources.append(resource)
     resource.persist(flush=True, db_session=self.request.dbsession)
     position = data.get("ordering") or noop
     if position is not noop:
         tree_service.set_position(
             resource_id=resource.resource_id,
             to_position=position,
             db_session=self.request.dbsession,
         )
     else:
         # this accounts for the newly inserted row so the total_children
         # will be max+1 position for new row
         total_children = tree_service.count_children(
             resource.parent_id, db_session=self.request.dbsession
         )
         tree_service.set_position(
             resource_id=resource.resource_id,
             to_position=total_children,
             db_session=self.request.dbsession,
         )
     return schema.dump(resource).data
Beispiel #4
0
    def post(self):
        request = self.request
        resource_form = EntryCreateForm(request.POST, context={"request": request})
        choices = get_possible_parents(self.request)
        resource_form.parent_id.choices = choices

        if request.method == "POST" and resource_form.validate():
            resource = Entry()
            position = resource_form.data.get("ordering")
            self.shared.populate_instance(
                resource, resource_form.data, exclude_keys=["ordering"]
            )
            request.user.resources.append(resource)
            resource.persist(flush=True, db_session=request.dbsession)

            if position is not None:
                tree_service.set_position(
                    resource_id=resource.resource_id,
                    to_position=position,
                    db_session=self.request.dbsession,
                )
            else:
                # this accounts for the newly inserted row so the total_children
                # will be max+1 position for new row
                total_children = tree_service.count_children(
                    resource.parent_id, db_session=self.request.dbsession
                )
                tree_service.set_position(
                    resource_id=resource.resource_id,
                    to_position=total_children,
                    db_session=self.request.dbsession,
                )

            log.info(
                "entries_post",
                extra={
                    "type": "entry",
                    "resource_id": resource.resource_id,
                    "resource_name": resource.resource_name,
                },
            )
            request.session.flash(
                {"msg": self.translate(_("Entry created.")), "level": "success"}
            )
            location = request.route_url("admin_objects", object="entries", verb="GET")
            return httpexceptions.HTTPFound(location=location)

        return {"resource_form": resource_form}
Beispiel #5
0
    def post(self):
        request = self.request
        resource_form = EntryCreateForm(request.POST,
                                        context={'request': request})
        choices = get_possible_parents(self.request)
        resource_form.parent_id.choices = choices

        if request.method == "POST" and resource_form.validate():
            resource = Entry()
            position = resource_form.data.get('ordering')
            self.shared.populate_instance(resource,
                                          resource_form.data,
                                          exclude_keys=['ordering'])
            request.user.resources.append(resource)
            resource.persist(flush=True, db_session=request.dbsession)

            if position is not None:
                tree_service.set_position(resource_id=resource.resource_id,
                                          to_position=position,
                                          db_session=self.request.dbsession)
            else:
                # this accounts for the newly inserted row so the total_children
                # will be max+1 position for new row
                total_children = tree_service.count_children(
                    resource.parent_id, db_session=self.request.dbsession)
                tree_service.set_position(resource_id=resource.resource_id,
                                          to_position=total_children,
                                          db_session=self.request.dbsession)

            log.info('entries_post',
                     extra={
                         'type': 'entry',
                         'resource_id': resource.resource_id,
                         'resource_name': resource.resource_name
                     })
            request.session.flash({
                'msg': self.translate(_('Entry created.')),
                'level': 'success'
            })
            location = request.route_url('admin_objects',
                                         object='entries',
                                         verb='GET')
            return pyramid.httpexceptions.HTTPFound(location=location)

        return {"resource_form": resource_form}
Beispiel #6
0
 def post(self):
     schema = EntryCreateSchema(context={'request': self.request})
     data = schema.load(self.request.unsafe_json_body).data
     resource = Entry()
     self.shared.populate_instance(resource, data)
     self.request.user.resources.append(resource)
     resource.persist(flush=True, db_session=self.request.dbsession)
     position = data.get('ordering') or noop
     if position is not noop:
         tree_service.set_position(resource_id=resource.resource_id,
                                   to_position=position,
                                   db_session=self.request.dbsession)
     else:
         # this accounts for the newly inserted row so the total_children
         # will be max+1 position for new row
         total_children = tree_service.count_children(
             resource.parent_id, db_session=self.request.dbsession)
         tree_service.set_position(resource_id=resource.resource_id,
                                   to_position=total_children,
                                   db_session=self.request.dbsession)
     return schema.dump(resource).data
Beispiel #7
0
    def get_patch(self):
        request = self.request
        resource = self.request.context.resource

        breadcrumbs = tree_service.path_upper(
            resource.resource_id, db_session=self.request.dbsession
        )

        user_permission_form = UserResourcePermissionForm(
            request.POST, context={"request": request}
        )

        group_permission_form = GroupResourcePermissionForm(
            request.POST, context={"request": request}
        )
        groups = GroupService.base_query(db_session=request.dbsession)
        group_permission_form.group_id.choices = [(g.id, g.group_name) for g in groups]

        choices = [(p, p) for p in resource.__possible_permissions__]
        user_permission_form.perm_name.choices = choices
        group_permission_form.perm_name.choices = choices

        permissions = ResourceService.users_for_perm(
            resource, perm_name=ANY_PERMISSION, limit_group_permissions=True
        )
        user_permissions = sorted(
            [p for p in permissions if p.type == "user"], key=lambda x: x.user.user_name
        )
        group_permissions = sorted(
            [p for p in permissions if p.type == "group"],
            key=lambda x: x.group.group_name,
        )

        user_permissions_grid = ResourceUserPermissionsGrid(
            user_permissions, request=request
        )
        group_permissions_grid = ResourceGroupPermissionsGrid(
            group_permissions, request=request
        )

        parent_id_choices = get_possible_parents(self.request)
        resource_form = EntryUpdateForm(
            request.POST,
            obj=resource,
            context={"request": request, "modified_obj": resource},
        )
        resource_form.parent_id.choices = parent_id_choices

        if request.method == "POST" and resource_form.validate():
            parent_id = resource_form.data.get("parent_id", noop)
            position = resource_form.data.get("ordering", noop)
            # we need to not change_parent_id or order of element
            # to not confuse tree manager
            self.shared.populate_instance(
                resource, resource_form.data, exclude_keys=["parent_id", "ordering"]
            )
            into_new_parent = parent_id != resource.parent_id and parent_id is not noop
            if position is not noop or into_new_parent:
                if not position and into_new_parent:
                    position = (
                        tree_service.count_children(
                            parent_id, db_session=self.request.dbsession
                        )
                        + 1
                    )
                tree_service.move_to_position(
                    resource_id=resource.resource_id,
                    new_parent_id=parent_id,
                    to_position=position,
                    db_session=self.request.dbsession,
                )

        return {
            "breadcrumbs": breadcrumbs,
            "resource": resource,
            "resource_form": resource_form,
            "user_permission_form": user_permission_form,
            "group_permission_form": group_permission_form,
            "group_permissions_grid": group_permissions_grid,
            "user_permissions_grid": user_permissions_grid,
        }
Beispiel #8
0
    def get_patch(self):
        request = self.request
        resource = self.request.context.resource

        breadcrumbs = tree_service.path_upper(
            resource.resource_id, db_session=self.request.dbsession)

        user_permission_form = UserResourcePermissionForm(
            request.POST, context={'request': request})

        group_permission_form = GroupResourcePermissionForm(
            request.POST, context={'request': request})
        groups = GroupService.base_query(db_session=request.dbsession)
        group_permission_form.group_id.choices = [(g.id, g.group_name)
                                                  for g in groups]

        choices = [(p, p) for p in resource.__possible_permissions__]
        user_permission_form.perm_name.choices = choices
        group_permission_form.perm_name.choices = choices

        permissions = ResourceService.users_for_perm(
            resource, perm_name=ANY_PERMISSION, limit_group_permissions=True)
        user_permissions = sorted([p for p in permissions if p.type == 'user'],
                                  key=lambda x: x.user.user_name)
        group_permissions = sorted(
            [p for p in permissions if p.type == 'group'],
            key=lambda x: x.group.group_name)

        user_permissions_grid = ResourceUserPermissionsGrid(user_permissions,
                                                            request=request)
        group_permissions_grid = ResourceGroupPermissionsGrid(
            group_permissions, request=request)

        parent_id_choices = get_possible_parents(self.request)
        resource_form = EntryCreateForm(request.POST,
                                        obj=resource,
                                        context={
                                            'request': request,
                                            'modified_obj': resource
                                        })
        resource_form.parent_id.choices = parent_id_choices

        if request.method == "POST" and resource_form.validate():
            parent_id = resource_form.data.get('parent_id', noop)
            position = resource_form.data.get('ordering', noop)
            # we need to not change_parent_id or order of element
            # to not confuse tree manager
            self.shared.populate_instance(
                resource,
                resource_form.data,
                exclude_keys=['parent_id', 'ordering'])
            into_new_parent = parent_id != resource.parent_id and \
                              parent_id is not noop
            if position is not noop or into_new_parent:
                if not position and into_new_parent:
                    position = tree_service.count_children(
                        parent_id, db_session=self.request.dbsession) + 1
                tree_service.move_to_position(
                    resource_id=resource.resource_id,
                    new_parent_id=parent_id,
                    to_position=position,
                    db_session=self.request.dbsession)

        return {
            'breadcrumbs': breadcrumbs,
            'resource': resource,
            'resource_form': resource_form,
            'user_permission_form': user_permission_form,
            'group_permission_form': group_permission_form,
            'group_permissions_grid': group_permissions_grid,
            'user_permissions_grid': user_permissions_grid
        }