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
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)
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)
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)
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)
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
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)
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)
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)
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)
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)