def create_recipient():
    conn, cur = get_sql()
    if request.method == "POST":
        lid = request.form.get("list_id")
        first_name = request.form["new_first_name"]
        last_name = request.form["new_last_name"]
        email = request.form["new_email"]
        cur.execute(
            """SELECT *
                        FROM recipients
                        WHERE email = '%s'"""
            % email
        )
        res = cur.fetchall()
        if not res:
            try:
                cur.execute(
                    """INSERT INTO recipients(first_name,
                            last_name, email, list_ids)
                            VALUES (%s,%s,%s,%s)
                            """,
                    (first_name, last_name, email, lid + ","),
                )
                conn.commit()
            except Exception, e:
                print(e)
                conn.rollback()
def remove():
    conn, cur = get_sql()
    if request.method == "POST":
        lid = request.form.get("list_id")
        cur.execute(
            """SELECT id, list_ids
                        FROM recipients
                        WHERE email = '%s'"""
            % email
        )
        res = cur.fetchall()
        for i in res:
            recip_id = i[0]
            new_list_ids = [_id.encode("utf8") for _id in i[1].split(",") if _id != lid]
        if len(new_list_ids) > 0:
            new_list_ids = ",".join(["%s"] * len(new_list_ids))
        else:
            new_list_ids = "0"
        try:
            cur.execute(
                """UPDATE recipients
                            SET list_ids=%s
                            WHERE id = %s""",
                (new_list_ids, recip_id),
            )
            conn.commit()
        except Exception, e:
            print(e)
            conn.rollback()
def remove():
    conn, cur = get_sql()
    if request.method == 'POST':
        lid = request.form.get('list_id')
        cur.execute("""SELECT id, list_ids
                        FROM recipients
                        WHERE email = '%s'""" % email)
        res = cur.fetchall()
        for i in res:
            recip_id = i[0]
            new_list_ids = [_id.encode('utf8')
                            for _id in i[1].split(',') if _id != lid]
        if len(new_list_ids) > 0:
            new_list_ids = ','.join(['%s'] * len(new_list_ids))
        else:
            new_list_ids = '0'
        try:
            cur.execute("""UPDATE recipients
                            SET list_ids=%s
                            WHERE id = %s""",
                        (new_list_ids, recip_id))
            conn.commit()
        except Exception, e:
            print(e)
            conn.rollback()
def add_to_campaign():
    conn, cur = get_sql()
    if request.method == "GET":
        nid = request.args.get("id")
        lid = request.args.get("lid")
        if nid:
            newsletter = Newsletter(conn, cur, nid)
            current_lists = newsletter.list_ids
            if current_lists[0] == "0":
                new_lists = lid
            elif len(current_lists) == 1:
                new_lists = "%s,%s" % (current_lists[0], lid)
                print new_lists
            else:
                print current_lists
                current_lists = ",".join(current_lists)

                new_lists = ",".join((current_lists, lid))

            try:
                cur.execute(
                    """UPDATE newsletters
                               SET list_ids=%s
                               WHERE id = %s
                            """,
                    (new_lists, nid),
                )
                conn.commit()
            except Exception as e:
                print (e)
                conn.rollback()
        return redirect(url_for("lists.index", nid=nid))
    return redirect(url_for("lists.index"))
def create_recipient():
    conn, cur = get_sql()
    if request.method == 'POST':
        lid = request.form.get('list_id')
        first_name = request.form['new_first_name']
        last_name = request.form['new_last_name']
        email = request.form['new_email']
        cur.execute("""SELECT *
                        FROM recipients
                        WHERE email = '%s'""" % email)
        res = cur.fetchall()
        if not res:
            try:
                cur.execute("""INSERT INTO recipients(first_name,
                            last_name, email, list_ids)
                            VALUES (%s,%s,%s,%s)
                            """, (
                            first_name,
                            last_name,
                            email,
                            lid + ','
                            )
                            )
                conn.commit()
            except Exception, e:
                print(e)
                conn.rollback()
def edit(page=0):
    conn, cur = get_sql()
    if request.method == "GET":
        nid = request.args.get("nid")
        lid = request.args.get("lid")
        lst = List(conn, cur, lid).record
        recips = get_recip_index(page=page, list_id=lid)
        return render_template("lists/details.html", nid=nid, lid=lid, lst=lst, recips=recips, page=page)

    if request.method == "POST":
        try:
            cur.execute(
                """UPDATE lists
                           SET name=%s, description=%s
                           WHERE id = %s
                        """,
                (request.form["name"], request.form["description"], _id),
            )
            conn.commit()
        except Exception as e:
            print (e)
            conn.rollback()
        return redirect(url_for("lists.index"))
    lst = List(conn, cur, _id)
    recips = lst.get_recips()
def remove_from_campaign():
    conn, cur = get_sql()
    if request.method == "GET":
        nid = request.args.get("id")
        lid = request.args.get("lid")
        newsletter = Newsletter(conn, cur, nid)
        current_lists = newsletter.list_ids
        if len(current_lists) == 1:
            new_lists = "0"
        else:
            new_lists = current_lists.remove(lid)
            new_lists = ",".join(current_lists)
        try:
            cur.execute(
                """UPDATE newsletters
                           SET list_ids=%s
                           WHERE id = %s
                        """,
                (new_lists, nid),
            )
            conn.commit()
        except Exception as e:
            print (e)
            conn.rollback()
        return redirect(url_for("lists.index", nid=nid))
    return redirect(url_for("lists.index"))
def create():
    form_errors = None
    conn, cur = get_sql()
    if request.method == 'POST':
        for k,v in request.form.iteritems():
            print k,v
        form_errors = collect_form_errors(request.form)
        if not len(form_errors) > 1:
            form_items = {}
            for k, v in request.form.iteritems():
                print "key = {} value = {}".format(k,v)
                if (k == 'editor1'):
                    form_items['html'] = request.form[k]
                elif (k == 'file'):
                    form_items['preview'] = request.form[k]
                elif (v != ''):
                    form_items[k] = v

            form_items['author'] = session.get('current_user')
            form_items['date_added'] = int(time())
            tid = insert_row('template', form_items, conn, cur)
            if not tid:
                return render_template('server_error.html')
            return redirect(url_for('templates.edit', tid=tid))
    return render_template('templates/details.html', form_errors=form_errors)
def delete():
    if request.method == 'GET':
        nid = request.args.get('nid')
        conn, cur = get_sql()
        cur.execute('DELETE FROM newsletter WHERE newsletter_id = %s' % nid)
        conn.commit()
        return redirect(url_for('index'))

# @mod.route('/search_campigns/')
# @login_required
# def search():
#     conn, cur = get_sql()
#     if request.method == 'POST':
#         for k, v in request.form.iteritems():
#             print k, v
#     return render_template('newsletters/search.html')
def create():
    form_errors = None
    conn, cur = get_sql()
    if request.method == "POST":
        form_errors = collect_form_errors(request.form)
        if not form_errors:
            form_items = {}
            for k, v in request.form.iteritems():
                if v != "":
                    form_items[k] = v
            form_items["author"] = session.get("current_user")
            form_items["date_added"] = int(time())
            lid = insert_row("list", form_items, conn, cur)
            if not lid:
                return render_template("server_error.html")
            return redirect(url_for("lists.edit", lid=lid))
    return render_template("lists/details.html", form_errors=form_errors, editing=False)
def delete(tid):
    if request.method == 'GET':

        conn, cur = get_sql()
        cur.execute('DELETE FROM template WHERE template_id = %s' % tid)
        conn.commit()
        return redirect(url_for('templates.index'))

# @mod.route('/create_template', methods=['GET', 'POST'])
# @login_required
# def create_template():
#     '''Create a new template'''
#     errors = None
#     conn, cur = get_sql()
#     if request_method == 'POST':
#         errors = collect_form_errors(request.form, 'campaigns')
#         if not errors:
#             try:
#                 cur.execute("""INSERT INTO newsletters(code, name, author,
#                             company, from_name, from_email, replyto_email,
#                             date_added, date_sent, priority, unsub)
#                             VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
#                             """, (
#                             request.form.get('code'),
#                             request.form.get('subject'),
#                             session.get('current_user'),
#                             request.form.get('company'),
#                             request.form.get('from_name'),
#                             request.form.get('from_email'),
#                             request.form.get('replyto_email'),
#                             int(time.time()),
#                             0,
#                             request.form.get('priority'),
#                             request.form.get('unsub', 0),
#                             )
#                             )
#                 conn.commit()
#                 cur.execute('SELECT last_insert_id()')
#                 nid = cur.fetchall()[0][0]
#             except Exception, err:
#                 conn.rollback()
#                 return render_template('error.html', error=err)
#             return redirect(url_for('subscribers.index', nid=nid))

#     return render_template('campaigns/details.html', companies=companies,
#                            staff=staff, errors=errors, editing=False)
def create():
    form_errors = None
    conn, cur = get_sql()
    companies = get_companies(conn, cur)
    staff = get_staff(conn, cur)
    if request.method == 'POST':    
        form_errors = collect_form_errors(request.form)
        if not form_errors:
            form_items = {}
            for k, v in request.form.iteritems():
                if (v != '' and k[len(k) - 3:] != 'sel'):
                    form_items[k] = v
            form_items['author'] = session.get('current_user')
            form_items['date_added'] = int(time())
            nid = insert_row('newsletter', form_items, conn, cur)
            if not nid:
                return render_template('server_error.html')
            return redirect(url_for('lists.index', nid=nid))
    return render_template('newsletters/details.html', companies=companies,
                           staff=staff, form_errors=form_errors)
def edit():
    form_errors = None
    conn, cur = get_sql()
    companies = get_companies(conn, cur)
    staff = get_staff(conn, cur)
    # for k,v in request.args.iteritems():
    #     print k,v
    if request.method == 'GET':
        nid = request.args.get('nid')
        cur.execute('SELECT * FROM `newsletter` WHERE newsletter_id = %d' % int(nid))
        res = cur.fetchone()
        if res:
            cols = tuple([d[0].decode('utf8') for d in cur.description])
            newsletter = dict(zip(cols, res))
            company_name = cur.execute("""SELECT name 
                                          FROM company 
                                          WHERE company_id = %d""" % int(newsletter['company']))
            comp_name = cur.fetchone()[0]
            newsletter['company'] = (newsletter['company'], comp_name)
            return render_template('newsletters/details.html', newsletter=newsletter,
                                   staff=staff, companies=companies, nid=nid)
        return render_template('404.html')
    if request.method == 'POST':    
        nid = request.args.get('nid')
        form_errors = collect_form_errors(request.form)
        if not form_errors:
            form_items = {}
            for k, v in request.form.iteritems():
                if (v != '' and k[len(k) - 3:] != 'sel'):
                    form_items[k] = v
            form_items['date_added'] = int(time())
            nid = update_row('newsletter', form_items, conn, cur, nid)
            if not nid:
                return render_template('server_error.html')
            return redirect(url_for('lists.index', nid=nid))
        return render_template('newsletters/details.html', newsletter=newsletter,
                                staff=staff, companies=companies, nid=nid, 
                                form_errors=form_errors)
def delete(lid):
    if request.method == "GET":
        conn, cur = get_sql()
        cur.execute("DELETE FROM list WHERE list_id = %s" % lid)
        conn.commit()
        return redirect(url_for("lists.index"))
def edit():
    conn, cur = get_sql()
    if request.method == 'GET':
        tid = request.args.get('tid')
        tmplt = Template(conn, cur, tid).record
        return render_template('templates/details.html', tid=tid, tmplt=tmplt)