Пример #1
0
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]
Пример #2
0
    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