lib/actions/add.py
author fabien@tzone.org
Wed, 31 Dec 2008 01:53:22 -0500
changeset 73 c078d8a04d76
parent 72 34fcc8b2c1f5
permissions -rw-r--r--
Now only add unique keywords, either they are selected or write down.

from templates import Template
from bkmark import Bookmark
from webutils import load_index
from templates import Template
from keywords import add_unique_keywords
import os

def get_bk_from_form(form):
        bk = Bookmark()
        bk.id = int(form['id'].value)
        bk.url = form['url'].value
        if form.has_key('name'):
                bk.name = form['name'].value
        if form.has_key('desc'):
                bk.desc = form['desc'].value
        return bk

def get_kw_from_form(form):
        kw = form.getvalue("kw")
        if not isinstance(kw, type([])):
                if kw:
                        kw = [kw]
                else:
                        kw = []
        kw = map(int, kw)
        return kw

def get_new_kw_from_form(form, sep =','):
        if form.has_key('newkw'):
                kw= map(lambda e: e.strip(),
                        form['newkw'].value.split(','))
                return filter(lambda x: x != '', kw)
        else:
                return []

def get_unique_keywords(form, db):
      kw = get_kw_from_form(form)
      kw = set(map(db.get_keyword, kw))
      return list(kw.union(get_new_kw_from_form(form)))

def edit(db, prefs, form, id):
    name = url = ""
    if form.has_key("ctitle"):
        name = form["ctitle"].value
    if form.has_key("curl"):
        url = form["curl"].value
    kw = db.get_all_keywords()[1:]
    kw.sort(lambda l,r: cmp(l[1],r[1]))
    kw = map(lambda elem: {
         'id' : elem[0],
         'keyword' : elem[1],
         'checked' : 0 }, kw)
    print_edit(id, kw, name, url, prefs)

def confirm(step, bk, kw, prefs):
    tmpl = Template("add_confirm.tmpl", prefs)
    confirmation = "Unknown!"
    if (step == 'delete'):
    	confirmation = "Delete" 
    elif (step == 'update'):
    	confirmation = "Update"
    tmpl.set("confirmation", confirmation)
    tmpl.set("step", step)
    tmpl.set("id", bk.id)
    tmpl.set("name", bk.name)
    tmpl.set("url", bk.url)
    tmpl.set("Keywords", map(lambda x: {'keyword': x }, kw))
    tmpl.set("desc", bk.desc)
    print tmpl.process()

def print_edit(id, keywords, title, url, prefs):
    tmpl = Template("add_bk.tmpl", prefs)
    tmpl.set('ctitle', title)
    tmpl.set('curl', url)
    tmpl.set('desc', '')
    tmpl.set('bkid', id)
    tmpl.set('Keywords', keywords)
    print tmpl.process()

def update_bookmark(db, form):
	bk = get_bk_from_form(form)
	id = bk.id
	if (bk.id == -1):
		id = db.add_bookmark(bk)
	else:
		db.update_bookmark(bk)
	kw = add_unique_keywords(db, get_unique_keywords(form, db))
	db.update_keywords(id, kw.values())

def do_it(action, db, prefs, form):
        if form.has_key('id'):
                id = int(form['id'].value)
        else:
                id = -1;
        if form.has_key('step'):
                step = form['step'].value
        else:
                step = 'edit'
        if step == 'edit':
                edit(db, prefs, form, id)
	elif step == 'confirm':
		update_bookmark(db, form)
                load_index(db, prefs, form, "result", "Bookmark update")
        elif step == 'cancel' or (action == 'delete' and id == -1):
                load_index(db, prefs, form, "err", "Operation cancel")
        else:
                if step == 'update':
                        bk = get_bk_from_form(form)
                        kw = get_unique_keywords(form, db)
                else:
                        bk = db.get_bookmarks([id])[0]
                        (ids, kw) = apply(zip,db.get_keywords([id]))
                        kw = kw[1:]
                confirm(step, bk, kw, prefs)