def update_page_by_id(page_id, data): page = get_page_by_id(page_id) # Cannot change page type del data["type"] if page.is_system: # Cannot edit slug of the system page del data["slug"] # position can be changed, but not parent_id data.parent_id = page.parent_id data.path = page.path else: data.parent_id = int(data.parent_id) data.update(unique_path(data, page_id)) # if position specified and parent has not changed if data.position and data.parent_id == page.parent_id: data.position = int(data.position) else: data.position = get_last_position("pages", data.parent_id) data.update( description_cached=smarty(sanitize(data.description)), updated_at=web.SQLLiteral("CURRENT_TIMESTAMP"), ) # Set published_at to NOW if data.published_at is None: data.published_at = web.SQLLiteral("CURRENT_TIMESTAMP") with db.transaction(): # Transact changes to positions if (data.position != page.position or data.parent_id != page.parent_id): # Collapse positions for the removed page collapse_tree_siblings("pages", page) # Shift positions to free the space to insert page expand_tree_siblings("pages", data) db.update( "pages", where="id = $page_id", vars=locals(), **data) # TODO: expand this for tree if data.path != page.path: update_branch(page.id) page.update(data) return page
def update_document_by_id(document_id, data): document = get_document_by_id(document_id) # Cannot edit system files and folders if document.is_system: raise flash.error( _("Cannot edit or delete system files and folders.")) parent = get_document_by_id(data.parent_id) # TODO: custom input field that returns integer value data.update( ids=(parent.ids or "") + "," + str(parent.id), level=parent.level + 1, position=int(data.position), parent_id=parent.id, updated_at=web.SQLLiteral("CURRENT_TIMESTAMP"), ) with db.transaction(): # Transact changes to positions if (data.position != document.position or data.parent_id != document.parent_id): # Collapse positions for the removed document collapse_tree_siblings("documents", document) # Shift positions to free the space to insert document expand_tree_siblings("documents", data) # Cannot change documents type and upload del data["type"] del data["upload"] db.update( "documents", where="id = $document_id", vars=locals(), **data) # Update document with data # TODO: fix updated_at document.update(data) return document