Search in sources :

Example 6 with View

use of db.View in project common by zenlunatics.

the class MailLists method _newViewDef.

// --------------------------------------------------------------------------
// @AdminTask
// public static void
// moveAllMessagesToDisk(Request request)
// {
// try {
// List<String> lists = request.db.readValues(new Select("name").from("mail_lists").where("NOT store_on_disk"));
// for (String list : lists) {
// request.writer.write("writing " + list + "<br />");
// System.out.println("writing " + list);
// new MailList(list, request.site, request.db).moveMessagesToDisk(request);
// }
// } catch (IOException e) {
// request.abort(e);
// }
// }
// --------------------------------------------------------------------------
// @AdminTask({"list name"})
// public static void
// moveMessagesToDisk(String list_name, Request request)
// {
// try {
// new MailList(list_name, request.site, request.db).moveMessagesToDisk(request);
// } catch (IOException e) {
// request.abort(e);
// }
// }
// --------------------------------------------------------------------------
@Override
public ViewDef _newViewDef(String name, Site site) {
    if (name.equals("additional_emails"))
        return new ViewDef(name).setDefaultOrderBy("email").setDialogModes(View.Mode.ADD_FORM, View.Mode.EDIT_FORM, View.Mode.READ_ONLY_FORM).setRecordName("Additional email");
    if (name.equals("mail_lists"))
        return new ViewDef(name) {

            @Override
            public boolean beforeUpdate(int id, NameValuePairs name_value_pairs, Map<String, Object> previous_values, Request request) {
                if (!name_value_pairs.getBoolean("active") && request.db.lookupBoolean(new Select("active").from("mail_lists").whereIdEquals(id)))
                    request.db.delete("mail_lists_people", "mail_lists_id=" + id);
                return super.beforeUpdate(id, name_value_pairs, previous_values, request);
            }
        }.addDeleteHook(this).addInsertHook(this).addUpdateHook(this).setDefaultOrderBy("name").setRecordName("Mail List").setColumnNamesForm(new String[] { "name", "send_to", "active", "announce_only", "archive", "archives_public", "footer", "allow_from_outside", "allow_from_outside_subscribers", "subscribers", "username", "host", "password", "store_on_disk" }).setColumnNamesFormTable(new String[] { "name" }).setColumnNamesTable(new String[] { "name", "send_to", "active" }).setColumn(new Column("allow_from_outside").setDisplayName("accept posts from outside non-subscribers (i.e. anyone)")).setColumn(new Column("allow_from_outside_subscribers").setDisplayName("accept posts from outside subscribers")).setColumn(new Column("announce_only").setTitle("If this is checked, replies to posts from this list will be ignored.")).setColumn(new Column("footer").setTitle("Optional text that will be added to the bottom of every post to this list")).setColumn(new Column("host").setIsHidden(true)).setColumn(new Column("name").setPostText("@" + site.getDomain()).setDisplayName("address").setIsRequired(true)).setColumn(new Column("password").setDefaultToUUID().setIsHidden(true)).setColumn(new Column("send_to") {

            @Override
            protected void writeInput(Mode mode, String default_value, View view, Form form, Request request) throws IOException {
                String value = null;
                if (mode == Mode.EDIT_FORM)
                    value = view.data().getString("send_to");
                HTMLWriter writer = request.writer;
                writer.write("<select name=\"send_to\"><option value=\"Subscribers\">Subscribers</options>");
                for (MailHandlerFactory mail_handler_factory : m_mail_handler_factories) mail_handler_factory.writeSendToOptions(value, request.db, writer);
                writer.write("</select>");
            }

            @Override
            public boolean writeValue(View view, Map<String, Object> data, Request request) throws IOException {
                String send_to = view.data().getString("send_to");
                if ("Subscribers".equals(send_to))
                    request.writer.write(send_to);
                else {
                    MailHandler mail_handler = getMailHandler(view.data().getString("name"), request.db);
                    if (mail_handler != null)
                        request.writer.write(mail_handler.getDisplayName());
                }
                return true;
            }
        }).setColumn(new Column("store_on_disk").setIsHidden(true)).setColumn(new Column("username").setIsHidden(true)).addRelationshipDef(new ManyToMany("people", "mail_lists_people", "first,last").setViewRole("administrator")).addRelationshipDef(new OneToMany("subscribers").setSpanFormCols(false));
    if (name.equals("mail_lists_people"))
        return new ViewDef(name).setDialogModes(View.Mode.ADD_FORM, View.Mode.EDIT_FORM).setColumn(new LookupColumn("mail_lists_id", "mail_lists", "name", new Select("id,name,send_to,active").from("mail_lists").orderBy("name"), "name").setFilter(new Filter() {

            @Override
            public boolean accept(ResultSet rs, Request request) {
                try {
                    return rs.getBoolean("active") && "Subscribers".equals(rs.getString("send_to"));
                } catch (SQLException e) {
                    request.abort(e);
                }
                return false;
            }
        }).setDisplayName("mail list")).setColumn(new LookupColumn("people_id", "people", "first,last").setFilter(site.getPeopleFilter()));
    if (name.startsWith("ml_"))
        return new ViewDef(name).setAccessPolicy(new RoleAccessPolicy("admin").delete()).setDefaultOrderBy("arrived DESC").setRecordName("Message").setRowWindowSize(0).setShowFilterLink(false).setShowHead(false).setColumnNamesTable(new String[] { "arrived", "sender", "subject" }).setColumn(new Column("subject") {

            @Override
            public boolean writeValue(View view, Map<String, Object> data, Request request) throws IOException {
                String subject = view.data().getString("subject");
                if (subject == null || subject.length() == 0)
                    subject = "(no subject)";
                request.writer.aOnClick(subject, "new Dialog({url:context+'/MailLists?list=" + view.getViewDef().getName() + "&cmd=get_message&db_key_value=" + view.data().getString("id") + "',title:'" + HTMLWriter.escapeJSString(subject) + "'});");
                return true;
            }
        });
    if (name.equals("people mail_lists"))
        return new ViewDef(name).setAccessPolicy(new AccessPolicy().add().delete()).setAddButtonText("subscribe").setDeleteButtonText("unsubscribe").setDialogModes(View.Mode.ADD_FORM, View.Mode.EDIT_FORM).setFrom("mail_lists").setRecordName("Mail List").setColumnNamesTable(new String[] { "name" });
    if (name.equals("subscribers"))
        return new ViewDef(name).setDefaultOrderBy("email").setDialogModes(View.Mode.ADD_FORM, View.Mode.EDIT_FORM).setRecordName("Outside Subscriber");
    return null;
}
Also used : Form(db.Form) SQLException(java.sql.SQLException) ViewDef(db.ViewDef) AccessPolicy(db.access.AccessPolicy) RoleAccessPolicy(db.access.RoleAccessPolicy) JDBCColumn(db.JDBCColumn) LookupColumn(db.column.LookupColumn) Column(db.column.Column) ResultSet(java.sql.ResultSet) RoleAccessPolicy(db.access.RoleAccessPolicy) HTMLWriter(web.HTMLWriter) NameValuePairs(db.NameValuePairs) Mode(db.View.Mode) Request(app.Request) ManyToMany(db.ManyToMany) OneToMany(db.OneToMany) View(db.View) LookupColumn(db.column.LookupColumn) Filter(db.Filter) FileFilter(java.io.FileFilter) Select(db.Select) DBObject(db.DBObject) Map(java.util.Map) HashMap(java.util.HashMap)

Example 7 with View

use of db.View in project common by zenlunatics.

the class Survey method writeAnswers.

// ----------------------------------------------------------------------
public void writeAnswers(Request request) throws IOException {
    NumberFormat nf = NumberFormat.getInstance();
    nf.setMaximumFractionDigits(2);
    HTMLWriter writer = request.writer;
    try {
        ResultSet rs = request.db.select(new Select("title,show_names,number_questions").from("surveys").whereIdEquals(m_id));
        rs.next();
        writer.h3(rs.getString(1));
        String answers_table = "survey_answers" + m_id;
        boolean show_names = (rs.getBoolean(2) || request.userIsAdministrator()) && request.db.getTable(answers_table).getColumn("_owner_") != null;
        boolean number_questions = rs.getBoolean(3);
        rs.getStatement().close();
        int num_participants = request.db.countRows(answers_table, "surveys_id=" + m_id);
        writer.write(num_participants);
        writer.write(" participant");
        if (num_participants != 1)
            writer.write('s');
        ResultSet questions = request.db.select("SELECT id,question,answer_type,type_data FROM survey_questions WHERE surveys_id=" + m_id + " ORDER BY _order_");
        View answers = request.site.newView(answers_table, request);
        answers.setWhere("surveys_id=" + m_id);
        int question_num = 0;
        while (questions.next()) {
            String type = questions.getString(3);
            if (type.equals("Divider") || type.equals("HTML") || type.equals("Page Break"))
                continue;
            String question_id = questions.getString(1);
            String answer_column = "a" + question_id;
            int from = 0;
            int[] ratings = null;
            if (type.equals("Rating")) {
                String[] td = questions.getString(4).split("\\|");
                from = Integer.parseInt(td[0]);
                int to = Integer.parseInt(td[1]);
                ratings = new int[to - from + 1];
            }
            Map<String, Integer> choices = null;
            if (type.equals("Choices"))
                choices = new TreeMap<String, Integer>();
            writer.write("<p><div class=\"survey_block\"><div class=\"survey_title\">");
            if (number_questions) {
                writer.write(++question_num);
                writer.write(". ");
            }
            writer.write(questions.getString(2));
            writer.write("</div>");
            if (show_names)
                answers.setSelectColumns(answer_column + ",_owner_");
            else
                answers.setSelectColumns(answer_column);
            answers.select();
            int num_answers = 0;
            while (answers.next()) {
                String answer = answers.getColumnHTML(answer_column);
                if (type.equals("Choices")) {
                    if (!answers.data().wasNull()) {
                        Integer i = choices.get(answer);
                        if (i == null)
                            choices.put(answer, new Integer(1));
                        else
                            choices.put(answer, new Integer(i.intValue() + 1));
                        ++num_answers;
                    }
                } else if (type.equals("Rating")) {
                    if (!answers.data().wasNull()) {
                        ratings[Integer.parseInt(answer) - from]++;
                        ++num_answers;
                    }
                } else if (show_names || answer.length() > 0) {
                    if (num_answers > 0)
                        writer.hr();
                    writer.write("<div style=\"padding:2px\">");
                    if (answer.length() > 0)
                        writer.write(answer);
                    if (show_names) {
                        writer.write("<br /><span style=\"font-weight:bold\">");
                        answers.writeColumnHTML("_owner_");
                        writer.write("</span>");
                    }
                    writer.write("</div>");
                    ++num_answers;
                }
            }
            if (type.equals("Choices")) {
                writer.write("totals: ");
                Iterator<String> i = choices.keySet().iterator();
                boolean first = true;
                while (i.hasNext()) {
                    if (first)
                        first = false;
                    else
                        writer.write(", ");
                    String key = i.next();
                    writer.write(key);
                    writer.write(": ");
                    writer.write(choices.get(key).intValue());
                }
            } else if (type.equals("Rating")) {
                int total = 0;
                writer.write("totals: ");
                for (int i = 0; i < ratings.length; i++) {
                    if (i > 0)
                        writer.write(", ");
                    writer.write(i + from);
                    writer.write(": ");
                    writer.write(ratings[i]);
                    total += ratings[i] * (i + 1);
                }
                writer.write(". average: ");
                writer.write(nf.format((double) total / num_answers + from));
            }
            writer.write("</div>");
        }
        questions.getStatement().close();
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
}
Also used : HTMLWriter(web.HTMLWriter) SQLException(java.sql.SQLException) TreeMap(java.util.TreeMap) View(db.View) ResultSet(java.sql.ResultSet) Select(db.Select) NumberFormat(java.text.NumberFormat)

Example 8 with View

use of db.View in project common by zenlunatics.

the class Survey method formOpen.

// ----------------------------------------------------------------------
private void formOpen(Request request) throws IOException {
    String answer_table = "survey_answers" + m_id;
    View answers = request.site.newView(answer_table, request);
    ViewState.setShowReturnLink(answer_table, false, request);
    HTMLWriter writer = request.writer;
    if (getPageNum(request) == 0) {
        writer.write("<table align=\"center\" style=\"width:600px\"><tr><td>");
        if (m_show_title) {
            writer.tag("h3", m_title);
            writer.write("<p style=\"width:600px\">");
            if (m_description != null)
                writer.write(m_description);
            writer.write("</p>");
            if (m_write_settings_text) {
                writer.write("<p style=\"width:600px\">");
                if (m_one_answer)
                    writer.write("After you save your answers you may edit them again later. ");
                if (!m_show_answers)
                    writer.write("Your answers will not be viewable by others. ");
                else {
                    writer.write("Your answers will be viewable by others. ");
                    if (m_show_names)
                        writer.write("Your name will be shown with your answers, you do not need to type it. ");
                    else
                        writer.write("Your answers are anonymous, your name will not be shown with your answers. You may type your name at the end of each answer if you want to sign them. ");
                }
                writer.write("</p>");
            }
        }
        writer.write("</td></tr><tr><td id=\"survey_page\" survey_id=\"").write(m_id).write("\">");
    }
    Integer id = (Integer) request.getSessionAttribute("survey" + m_id + "_id");
    if (id != null) {
        answers.setWhere("id=" + id);
        answers.select();
        answers.next();
        m_form = answers.newEditForm();
        m_form.open();
    } else if (request.db.getTable(answer_table).getColumn("_owner_") != null) {
        answers.setWhere("surveys_id=" + m_id + " AND _owner_=" + request.getUser().getId());
        answers.select();
        if (answers.next()) {
            m_form = answers.newEditForm();
            m_form.open();
        } else {
            m_form = answers.newAddForm();
            m_form.open();
            writer.hiddenInput("surveys_id", Integer.toString(m_id));
            writer.hiddenInput("_owner_", Integer.toString(request.getUser().getId()));
        }
    } else {
        m_form = answers.newAddForm();
        m_form.open();
        writer.hiddenInput("surveys_id", Integer.toString(m_id));
    }
    writer.setAttribute("style", "padding:0 10px");
    writer.tagOpen("div");
    try {
        m_questions = request.db.select(new Select("*").from("survey_questions").whereEquals("surveys_id", m_id).orderBy("_order_"));
        if (!m_questions.isBeforeFirst()) {
            m_questions.getStatement().close();
            throw new RuntimeException("no questions defined");
        }
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
}
Also used : HTMLWriter(web.HTMLWriter) SQLException(java.sql.SQLException) Select(db.Select) View(db.View)

Example 9 with View

use of db.View in project common by zenlunatics.

the class ToDos method _newViewDef.

// --------------------------------------------------------------------------
@Override
public ViewDef _newViewDef(String name, Site site) {
    if (name.equals("todos")) {
        ViewDef view_def = new ViewDef(name);
        view_def.setDefaultOrderBy("task");
        view_def.setRecordName("Task");
        ArrayList<String> column_names_form = new ArrayList<String>();
        column_names_form.add("task");
        column_names_form.add("notes");
        if (m_group_by_project) {
            column_names_form.add("project");
            view_def.setColumn(new Column("project").setPostText("(optional)"));
            view_def.setSectionDef(new SectionDef("project", Type.SEPARATOR_ROWS, new OrderBy("project")));
        }
        if (m_prioritize) {
            view_def.setDefaultOrderBy("priority");
            column_names_form.add("priority");
            view_def.setColumn(new Column("priority").setInputRenderer(new SelectRenderer(new String[] { "1 - high", "2 - medium", "3 - low" })));
        }
        if (m_assign_tasks) {
            column_names_form.add("assigned_to");
            view_def.setColumn(new LookupColumn("assigned_to", "people", "first,last").setFilter(this).setDefaultToUserId());
        }
        if (m_one_table != null) {
            column_names_form.add(m_one_table + "_id");
            view_def.setColumn(new Column(m_one_table + "_id").setDefaultToSessionAttribute().setIsHidden(true));
        }
        view_def.setColumnNamesForm(column_names_form.toArray(new String[column_names_form.size()]));
        view_def.setColumnNamesTable(new String[] { "task" });
        view_def.setColumn(new Column("task") {

            @Override
            public boolean writeValue(View view, Map<String, Object> data, Request p) throws IOException {
                String notes = view.data().getString("notes");
                if (notes.length() > 0)
                    p.writer.write("<div onmouseover=\"if(!this.f){var e=$(this.lastChild);this.f=new Fx.Slide(e,{link:'cancel'});this.f.hide();e.setStyle('display','');$(this).addEvent('mouseout',function(e){if(!this.isAncestor(e.relatedTarget))this.f.slideOut()}.bind(this))}this.f.slideIn()\">");
                p.writer.write(view.data().getString("task"));
                if (notes.length() > 0) {
                    p.writer.write("<div style=\"background-color:white;padding:5px;font-size:smaller;display:none\">");
                    view.writeColumnHTML("notes");
                    p.writer.write("</div></div>");
                }
                return true;
            }
        });
        return view_def;
    }
    return null;
}
Also used : OrderBy(db.OrderBy) ArrayList(java.util.ArrayList) Request(app.Request) ViewDef(db.ViewDef) IOException(java.io.IOException) View(db.View) LookupColumn(db.column.LookupColumn) SectionDef(db.SectionDef) LookupColumn(db.column.LookupColumn) Column(db.column.Column) SelectRenderer(db.SelectRenderer)

Example 10 with View

use of db.View in project common by zenlunatics.

the class PicturesView method writeFiles.

// --------------------------------------------------------------------------
private ArrayList<String> writeFiles() throws IOException {
    ArrayList<String> ids = new ArrayList<String>();
    ArrayList<String> files = new ArrayList<String>();
    ArrayList<String> titles = new ArrayList<String>();
    select();
    String table = m_view_def.getFrom();
    String tags_table = table + "_tags";
    View tags_view = m_request.site.newView(tags_table, m_request).setSelectColumns("tag," + tags_table + ".id").setSelectRelationships(true);
    tags_view.addRelationship(new ManyToMany(tags_table, table + "_" + tags_table, null));
    while (next()) {
        String id = m_data.getString("id");
        ids.add(id);
        files.add(m_data.getString("file"));
        titles.add(Pictures.buildTitle(id, m_data.getString("caption"), getColumnHTML("_owner_"), tags_view));
    }
    m_writer.write("Gallery.setFiles(");
    m_writer.jsArray(files);
    m_writer.write(',');
    m_writer.jsArray(ids);
    m_writer.write(',');
    m_writer.jsArray(titles);
    m_writer.write(");");
    return ids;
}
Also used : ArrayList(java.util.ArrayList) ManyToMany(db.ManyToMany) View(db.View)

Aggregations

View (db.View)15 Column (db.column.Column)7 LookupColumn (db.column.LookupColumn)7 Request (app.Request)5 Select (db.Select)5 ViewDef (db.ViewDef)5 HTMLWriter (web.HTMLWriter)5 OneToMany (db.OneToMany)4 SQLException (java.sql.SQLException)4 ArrayList (java.util.ArrayList)4 JDBCColumn (db.JDBCColumn)3 RecordOwnerAccessPolicy (db.access.RecordOwnerAccessPolicy)3 IOException (java.io.IOException)3 ResultSet (java.sql.ResultSet)3 Form (db.Form)2 FormHook (db.FormHook)2 LinkValueRenderer (db.LinkValueRenderer)2 ManyToMany (db.ManyToMany)2 NameValuePairs (db.NameValuePairs)2 SelectRenderer (db.SelectRenderer)2