示例#1
0
    def merge_workspaces(self, from_ws, to_ws, user):
        meta = from_ws._meta
        table_name = meta.object_name

        # Registering mapping between tuple and cloning tuple!
        self.mapping.add_mapping(table_name, from_ws.id, to_ws.id)

        self.final_tables = list(self.final_tables)
        self.extra_models["Variable"] = (("platform", "variablevalue", "variable", {"user": from_ws.creator}),)
        self.fields_to_overwrite["VariableValue"] = {"user": user}

        # Continue iterating over data-model structure
        extra_models = self.extra_models.get(table_name, [])
        for model in extra_models:
            related_tuples = get_related_tuples(
                model[0], model[1], model[2], from_ws.id  # app_label  # module_name  # field.name
            )
            for related_tuple in related_tuples:
                self.clone_tuple(related_tuple)

        from wirecloud.platform.get_data import _invalidate_cached_variable_values

        _invalidate_cached_variable_values(to_ws)

        return to_ws
示例#2
0
    def delete(self, request, workspace_id):

        workspace = get_object_or_404(Workspace, pk=workspace_id)
        if not workspace.users.filter(pk=request.user.pk).exists():
            return HttpResponseForbidden()

        user_workspace = UserWorkspace.objects.get(user=request.user, workspace=workspace)
        # Check if the user does not have any other workspace
        if user_workspace.manager != '' or UserWorkspace.objects.filter(user=request.user).count() == 0:
            msg = _("workspace cannot be deleted")

            return build_error_response(request, 403, msg)

        user_workspace.delete()
        if workspace.users.count() == 0:

            # Remove the workspace
            iwidgets = IWidget.objects.filter(tab__workspace=workspace)
            for iwidget in iwidgets:
                deleteIWidget(iwidget, request.user)
            workspace.delete()

            from wirecloud.platform.get_data import _invalidate_cached_variable_values
            _invalidate_cached_variable_values(workspace)

        return HttpResponse(status=204)
示例#3
0
def update_workspace_preferences(workspace, preferences_json):
    _currentPreferences = WorkspacePreference.objects.filter(workspace=workspace)
    currentPreferences = {}
    for currentPreference in _currentPreferences:
        currentPreferences[currentPreference.name] = currentPreference

    for name in preferences_json.keys():
        preference_data = preferences_json[name]

        if name in currentPreferences:
            preference = currentPreferences[name]
        else:
            preference = WorkspacePreference(workspace=workspace, name=name)

        if 'value' in preference_data:
            preference.value = unicode(preference_data['value'])

        if 'inherit' in preference_data:
            preference.inherit = preference_data['inherit']

        preference.save()

    cache_key = make_workspace_preferences_cache_key(workspace.id)
    cache.delete(cache_key)

    from wirecloud.platform.get_data import _invalidate_cached_variable_values
    _invalidate_cached_variable_values(workspace)
示例#4
0
文件: views.py 项目: ciniguez/FIREWA
    def delete(self, request, workspace_id):

        user_workspaces = UserWorkspace.objects.select_related('workspace')
        try:
            user_workspace = user_workspaces.get(user__id=request.user.id, workspace__id=workspace_id)
        except UserWorkspace.DoesNotExist:
            raise Http404

        workspace = user_workspace.workspace
        if workspace.creator != request.user or user_workspace.manager != '':
            return HttpResponseForbidden()

        # Check if the user does not have any other workspace
        workspaces = Workspace.objects.filter(users__id=request.user.id).exclude(pk=workspace_id)

        if workspaces.count() == 0:
            msg = _("workspace cannot be deleted")

            return build_error_response(request, 403, msg)

        # Remove the workspace
        PublishedWorkspace.objects.filter(workspace=workspace).update(workspace=None)
        iwidgets = IWidget.objects.filter(tab__workspace=workspace)
        for iwidget in iwidgets:
            deleteIWidget(iwidget, request.user)
        workspace.delete()

        from wirecloud.platform.get_data import _invalidate_cached_variable_values
        _invalidate_cached_variable_values(workspace)

        # Set a new active workspace (first workspace by default)
        activeWorkspace = workspaces[0]
        setActiveWorkspace(request.user, activeWorkspace)

        return HttpResponse(status=204)
示例#5
0
    def save(self, *args, **kwargs):

        if self.public != self.__original_public:
            from wirecloud.platform.preferences.views import update_workspace_preferences
            update_workspace_preferences(self, {'public': {'value': self.public}})
            self.__original_public = self.public

        super(Workspace, self).save(*args, **kwargs)

        from wirecloud.platform.get_data import _invalidate_cached_variable_values
        _invalidate_cached_variable_values(self)
示例#6
0
文件: utils.py 项目: ciniguez/FIREWA
def SaveIWidget(iwidget, user, tab, initial_variable_values):

    widget_uri = iwidget.get("widget")

    (widget_vendor, widget_name, widget_version) = widget_uri.split("/")
    resource = CatalogueResource.objects.select_related("widget").get(
        vendor=widget_vendor, short_name=widget_name, version=widget_version
    )
    if not resource.is_available_for(user):
        raise Http403

    iwidget_name = iwidget.get("name", resource.display_name)
    width = iwidget.get("width", 0)
    height = iwidget.get("height", 0)
    top = iwidget.get("top", 0)
    left = iwidget.get("left", 0)
    icon_top = iwidget.get("icon_top", 0)
    icon_left = iwidget.get("icon_left", 0)
    zIndex = iwidget.get("zIndex", 0)
    layout = iwidget.get("layout", 0)

    # Creates IWidget position
    position = Position(
        posX=left, posY=top, posZ=zIndex, height=height, width=width, minimized=False, fulldragboard=False
    )
    position.save()

    # Creates IWidget icon position
    icon_position = Position(posX=icon_left, posY=icon_top)
    icon_position.save()

    new_iwidget = IWidget(
        name=iwidget_name,
        widget=resource.widget,
        tab=tab,
        layout=layout,
        position=position,
        icon_position=icon_position,
    )
    new_iwidget.save()

    variableDefs = VariableDef.objects.filter(widget=resource.widget)
    for varDef in variableDefs:
        if initial_variable_values and varDef.name in initial_variable_values:
            initial_value = initial_variable_values[varDef.name]
        else:
            initial_value = None
        addIWidgetVariable(new_iwidget, varDef, initial_value)

    from wirecloud.platform.get_data import _invalidate_cached_variable_values

    _invalidate_cached_variable_values(new_iwidget.tab.workspace)

    return new_iwidget
示例#7
0
    def delete(self, request, workspace_id):

        workspace = get_object_or_404(Workspace, pk=workspace_id)
        if not workspace.users.filter(pk=request.user.pk).exists():
            return build_error_response(request, 403, _('You are not allowed to delete this workspace'))

        UserWorkspace.objects.filter(user=request.user, workspace=workspace).delete()
        if workspace.users.count() == 0:

            # Remove the workspace
            iwidgets = IWidget.objects.filter(tab__workspace=workspace)
            for iwidget in iwidgets:
                iwidget.delete()
            workspace.delete()

            from wirecloud.platform.get_data import _invalidate_cached_variable_values
            _invalidate_cached_variable_values(workspace)

        return HttpResponse(status=204)
示例#8
0
    def update(self, request, workspace_id):

        wiring_status_string = request.body
        try:
            wiring_status = json.loads(wiring_status_string)
        except ValueError as e:
            msg = _("malformed json data: %s") % unicode(e)
            return build_error_response(request, 400, msg)

        workspace = get_object_or_404(Workspace, id=workspace_id)
        if not request.user.is_superuser and workspace.creator != request.user:
            return build_error_response(request, 403, _('You are not allowed to update this workspace'))

        old_wiring_status = json.loads(workspace.wiringStatus)
        old_read_only_connections = []
        for connection in old_wiring_status['connections']:
            if connection.get('readOnly', False):
                old_read_only_connections.append(connection)

        read_only_connections = []
        for connection in wiring_status['connections']:
            if connection.get('readOnly', False):
                read_only_connections.append(connection)

        if len(old_read_only_connections) > len(read_only_connections):
            return build_error_response(request, 403, _('You are not allowed to remove read only connections'))

        for connection in old_read_only_connections:
            if connection not in read_only_connections:
                return build_error_response(request, 403, _('You are not allowed to remove read only connections'))

        workspace.wiringStatus = wiring_status_string
        workspace.save()

        _invalidate_cached_variable_values(workspace)

        return HttpResponse(status=204)
示例#9
0
def update_tab_preferences(tab, preferences_json):
    _currentPreferences = TabPreference.objects.filter(tab=tab)
    currentPreferences = {}
    for currentPreference in _currentPreferences:
        currentPreferences[currentPreference.name] = currentPreference

    for name in preferences_json.keys():
        preference_data = preferences_json[name]

        if name in currentPreferences:
            preference = currentPreferences[name]
        else:
            preference = TabPreference(tab=tab, name=name)

        if 'value' in preference_data:
            preference.value = unicode(preference_data['value'])

        if 'inherit' in preference_data:
            preference.inherit = preference_data['inherit']

        preference.save()

    from wirecloud.platform.get_data import _invalidate_cached_variable_values
    _invalidate_cached_variable_values(tab.workspace)
示例#10
0
    def save(self, *args, **kwargs):

        super(Variable, self).save(*args, **kwargs)

        from wirecloud.platform.get_data import _invalidate_cached_variable_values
        _invalidate_cached_variable_values(self.iwidget.tab.workspace)
示例#11
0
def UpdateIWidget(iwidget, user, tab):

    iwidget_pk = iwidget.get('id')

    # Checks
    ig = get_object_or_404(IWidget, tab=tab, pk=iwidget_pk)

    if 'name' in iwidget:
        name = iwidget['name']
        ig.name = name

    if 'tab' in iwidget:
        newtab_id = iwidget['tab']
        if newtab_id < 0:
            raise Exception(_('Malformed iWidget JSON'))

        if newtab_id != tab.id:
            newtab = Tab.objects.get(workspace__users__id=user.id, workspace__pk=tab.workspace_id, pk=newtab_id)
            ig.tab = newtab

    if 'layout' in iwidget:
        layout = iwidget['layout']
        ig.layout = layout

    if 'icon_top' in iwidget and 'icon_left' in iwidget:
        icon_position = ig.icon_position
        if icon_position:
            icon_position.posX = iwidget["icon_left"]
            icon_position.posY = iwidget["icon_top"]
        else:  # backward compatibility (old widgets without icon position)
            icon_position = Position(posX=iwidget["icon_left"], posY=iwidget["icon_top"])
        icon_position.save()
        ig.icon_position = icon_position

    if 'refused_version' in iwidget:
        refused_version = iwidget['refused_version']
        ig.refused_version = refused_version

    ig.save()

    # get IWidget's position
    position = ig.position

    # update the requested attributes
    if 'width' in iwidget:
        width = iwidget['width']
        if width <= 0:
            raise Exception(_('Malformed iWidget JSON'))
        position.width = width

    if 'height' in iwidget:
        height = iwidget['height']
        if height <= 0:
            raise Exception(_('Malformed iWidget JSON'))
        position.height = height

    if 'top' in iwidget:
        top = iwidget['top']
        if top < 0:
            raise Exception(_('Malformed iWidget JSON'))
        position.posY = top

    if 'left' in iwidget:
        left = iwidget['left']
        if left < 0:
            raise Exception(_('Malformed iWidget JSON'))
        position.posX = left

    if 'zIndex' in iwidget:
        zIndex = iwidget['zIndex']
        if not isinstance(zIndex, int):
            raise Exception(_('Malformed iWidget JSON'))
        position.posZ = zIndex

    if 'minimized' in iwidget:
        minimized = iwidget['minimized']
        if not isinstance(minimized, bool) and not isinstance(minimized, int):
            raise Exception(_('Malformed iWidget JSON'))
        position.minimized = minimized

    if 'fulldragboard' in iwidget:
        fulldragboard = iwidget['fulldragboard']
        if not isinstance(fulldragboard, bool) and not isinstance(fulldragboard, int):
            raise Exception(_('Malformed iWidget JSON'))
        position.fulldragboard = fulldragboard

    # save the changes
    position.save()

    from wirecloud.platform.get_data import _invalidate_cached_variable_values
    _invalidate_cached_variable_values(ig.tab.workspace)