def addupdate(self): key = self.form_result['key'] if self.form_result['objectid'] == "0": rid = self.form_result['rid'] key2 = '%s%s' % (rid and (rid + '/') or '',key) parent,key2 = find_folder_or_create(key2,self.form_result['parentid']) item = Cmsitem(c.site_id, self.form_result['title'], self.form_result['content']) item.item_type = self.form_result['item_type'] parent.addChild(item) parent.save() else: id = self.form_result['objectid'] item = meta.DBSession.query(Cmsitem).filter_by(id=id,site_id=c.site_id).first() item.title = self.form_result['title'] item.content = self.form_result['content'] parent = item.parents[0].parent item.rid = '%s%s' % (parent.rid and (parent.rid + '/') or '',key) item.key = key item.tags = self.form_result['tags'] item.url = self.form_result['url'] item.content2 = self.form_result['content2'] item.save() h.add_alert('updated item') c.cmsitems = [item] if 'returnurl' in request.params: redirect_to(request.params['returnurl']) return self.view() return item.id
def find_folder_or_create(key,parentid): """ for requested folder path/key/context, see if they already exist. else if we know parentid, then use that instead since we know we aren't creating """ keys = key.split('/') # if they knew the parent id, handle here if parentid and int(parentid): parent = meta.DBSession.query(Cmsitem).filter_by(site_id=c.site_id, id=parentid).first() if parent and parent.id > 0: return parent,key # didn't know, maybe using text based folders not id's root = meta.DBSession.query(Cmsitem).filter_by(site_id=c.site_id, item_type='root').first() nextparent = root # find folder/context path from text matches if keys and len(keys) > 1: # in a folder for k in keys[:len(keys)-1]: if k == '': pass # /afolder/waslikethis with leading / elif k == 'root': pass else: f = meta.DBSession.query(Cmsitem).filter(and_(Cmsitem.item_type=='folder', Cmsitem.site_id==c.site_id, Cmsitem.key==k)).first() if f == None and k != 'root': newf = Cmsitem(c.site_id, k,k) newf.key = k newf.rid = '%s%s' % (nextparent.rid and (nextparent.rid + '/') or '',k) newf.item_type = 'folder' nextparent.addChild(newf) nextparent = newf elif f == None: pass else: root = f nextparent = f root.save() return nextparent,keys[len(keys)-1]