Index: openacs-4/packages/acs-object-management/catalog/acs-object-management.en_US.ISO-8859-1.xml =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/catalog/acs-object-management.en_US.ISO-8859-1.xml,v diff -u -r1.4 -r1.5 --- openacs-4/packages/acs-object-management/catalog/acs-object-management.en_US.ISO-8859-1.xml 29 Nov 2009 16:22:31 -0000 1.4 +++ openacs-4/packages/acs-object-management/catalog/acs-object-management.en_US.ISO-8859-1.xml 22 Dec 2009 19:59:15 -0000 1.5 @@ -40,6 +40,7 @@ <msg key="edit_widget_params">Edit widget parameters</msg> <msg key="element_name_help">Chose the attrbiute for this widget.</msg> <msg key="elements">Form elements</msg> + <msg key="error_previewing_widget">There was an error previewing your widget: %errmsg%. Click back to fix the problem.</msg> <msg key="export">Export</msg> <msg key="form">Form</msg> <msg key="form_elements">Form Elements</msg> @@ -50,13 +51,15 @@ <msg key="help_text">Help Text</msg> <msg key="inherited_attributes">Inherited Attributes</msg> <msg key="is_required">Is Required</msg> + <msg key="literal">Literal</msg> <msg key="manage_form">Manage Form</msg> <msg key="move_down_attribute">move down</msg> <msg key="move_up_attribute">move up</msg> <msg key="must_supply_either_multirow_or_indexed_array">you must supply either -multirow or -indexed_array</msg> <msg key="No">No</msg> <msg key="node_element_must_have">node 'element' must have either a 'name' attribute or an 'attribute' attribute.</msg> <msg key="object_type">Object Type</msg> + <msg key="object_view">Object View</msg> <msg key="param_name">Parameter</msg> <msg key="param_one">Parameter "%param%"</msg> <msg key="param_source">Source</msg> @@ -77,7 +80,9 @@ <msg key="remove_element">Remove Element from Form</msg> <msg key="remove_widget">remove widget</msg> <msg key="required_p">Required?</msg> + <msg key="source">source</msg> <msg key="supertype">Supertype</msg> + <msg key="tcl_proc">Tcl Proc</msg> <msg key="types">Types</msg> <msg key="unable_to_retrieve_param">unable to retrieve widget parameter %name% for attribute %attribute_id% - returning "" as parameter value</msg> <msg key="view">View</msg> @@ -87,5 +92,6 @@ <msg key="widget_add_edt">Widget Add/Edit</msg> <msg key="widget_default">-- Default Widget --</msg> <msg key="widget_help">Choose widget type</msg> + <msg key="widget_parameters">Widget Parameters</msg> <msg key="Yes">Yes</msg> </message_catalog> Index: openacs-4/packages/acs-object-management/sql/postgresql/acs-templating-changes-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/sql/postgresql/acs-templating-changes-create.sql,v diff -u -r1.2 -r1.3 --- openacs-4/packages/acs-object-management/sql/postgresql/acs-templating-changes-create.sql 10 Dec 2009 22:24:27 -0000 1.2 +++ openacs-4/packages/acs-object-management/sql/postgresql/acs-templating-changes-create.sql 22 Dec 2009 19:59:15 -0000 1.3 @@ -3,23 +3,41 @@ create table acs_form_widgets ( widget text constraint acs_form_widgets_pk - primary key + primary key ); +comment on table acs_form_widgets is ' + Canonical list of all template form widgets defined in the system. +'; + create table acs_form_default_widgets ( widget text constraint acs_form_default_widgets_fk - references acs_form_widgets, + references acs_form_widgets, datatype text constraint acs_form_default_widgets_datatype_fk references acs_datatypes (datatype), primary key (widget, datatype) ); comment on table acs_form_widgets is ' - Canonical list of all template form widgets defined in the system. + List of all default template form widgets for each datatype. '; +create table acs_form_allowable_widgets ( + widget text + constraint acs_form_allowable_widgets_fk + references acs_form_widgets, + datatype text + constraint acs_form_allowable_widgets_datatype_fk + references acs_datatypes (datatype), + primary key (widget, datatype) +); + +comment on table acs_form_allowable_widgets is ' + List of all template form widgets mapped to possible datatypes. +'; + create sequence acs_form_widget_param_seq; create table acs_form_widget_params ( @@ -39,6 +57,9 @@ html_p boolean constraint acs_form_widget_params_html_p_nn not null, + tcl_allowed_p boolean + constraint acs_form_widget_params_tcl_allowed_p_nn + not null, default_value text ); @@ -92,7 +113,7 @@ not null constraint acs_view_attr_widg_params_param_src_ck check (param_source in ('literal', 'query', 'eval')), - value text, + value text, constraint acs_view_attr_widg_params_attr_fk foreign key (object_view, attribute_id) @@ -115,155 +136,198 @@ insert into acs_form_widgets (widget) values ('text'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (10, 'text', 'size', 'f', 't', '30'); + (10, 'text', 'size', 'f', 't', 'f', '30'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (11, 'text', 'maxlength', 'f', 't', null); + (11, 'text', 'maxlength', 'f', 't', 'f', null); + insert into acs_form_widget_params + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) + values + (12, 'text', 'value', 'f', 'f', 't', null); + -- textarea widget insert into acs_form_widgets (widget) values ('textarea'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (20, 'textarea', 'rows', 'f', 't', '6'); + (20, 'textarea', 'rows', 'f', 't', 'f', '6'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (30, 'textarea', 'cols', 'f', 't', '60'); + (30, 'textarea', 'cols', 'f', 't', 'f', '60'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (31, 'textarea', 'wrap', 'f', 't', 'physical'); + (31, 'textarea', 'wrap', 'f', 't', 'f', 'physical'); + insert into acs_form_widget_params + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) + values + (32, 'textarea', 'value', 'f', 'f', 't', null); + -- radio widget insert into acs_form_widgets (widget) values ('radio'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (40, 'radio', 'options', 't', 'f', null); + (40, 'radio', 'options', 't', 'f', 't', null); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (41, 'radio', 'values', 'f', 'f', null); + (41, 'radio', 'values', 'f', 'f', 't', null); -- checkbox widget insert into acs_form_widgets (widget) values ('checkbox'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (50, 'checkbox', 'options', 't', 'f', null); + (50, 'checkbox', 'options', 't', 'f', 't', null); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (51, 'checkbox', 'values', 'f', 'f', null); + (51, 'checkbox', 'values', 'f', 'f', 't', null); -- select widget insert into acs_form_widgets (widget) values ('select'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (60, 'select', 'options', 't', 'f', '{ -- {} }'); + (60, 'select', 'options', 't', 'f', 't', '{ -- {} }'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (61, 'select', 'values', 'f', 'f', '{}'); + (61, 'select', 'values', 'f', 'f', 't', '{}'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (70, 'select', 'size', 'f', 't', null); + (70, 'select', 'size', 'f', 't', 'f', null); -- multiselect widget insert into acs_form_widgets (widget) values ('multiselect'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (80, 'multiselect', 'options', 't', 'f', null); + (80, 'multiselect', 'options', 't', 'f', 't', null); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (90, 'multiselect', 'size', 'f', 't', null); + (90, 'multiselect', 'size', 'f', 't', 'f', null); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (91, 'multiselect', 'values', 'f', 'f', null); + (91, 'multiselect', 'values', 'f', 'f', 't', null); -- timestamp widget insert into acs_form_widgets (widget) values ('timestamp'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (92, 'timestamp', 'format', 'f', 'f', null); + (92, 'timestamp', 'format', 'f', 'f', 't', null); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (93, 'timestamp', 'year_interval', 'f', 'f', null); + (93, 'timestamp', 'year_interval', 'f', 'f', 'f', null); -- date widget insert into acs_form_widgets (widget) values ('date'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (100, 'date', 'format', 'f', 'f', null); + (100, 'date', 'format', 'f', 'f', 't', null); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (110, 'date', 'year_interval', 'f', 'f', null); + (110, 'date', 'year_interval', 'f', 'f', 'f', null); + insert into acs_form_widget_params + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) + values + (111, 'date', 'value', 'f', 'f', 't', null); + -- richtext widget insert into acs_form_widgets (widget) values ('richtext'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (200, 'richtext', 'rows', 'f', 't', '20'); + (200, 'richtext', 'rows', 'f', 't', 'f', '20'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (230, 'richtext', 'cols', 'f', 't', '80'); + (230, 'richtext', 'cols', 'f', 't', 'f', '80'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (231, 'richtext', 'wrap', 'f', 't', 'physical'); + (231, 'richtext', 'wrap', 'f', 't', 'f', 'physical'); + insert into acs_form_widget_params + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) + values + (232, 'richtext', 'value', 'f', 'f', 't', null); + -- search widget insert into acs_form_widgets (widget) values ('search'); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (120, 'search', 'search_query', 't', 'f', null); + (120, 'search', 'search_query', 't', 'f', 'f', null); insert into acs_form_widget_params - (param_id, widget, param, required_p, html_p, default_value) + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) values - (121, 'search', 'result_datatype', 'f', 'f', 'search'); + (121, 'search', 'result_datatype', 'f', 'f', 't', 'search'); -- currency widget insert into acs_form_widgets (widget) values ('currency'); + insert into acs_form_widget_params + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) + values + (240, 'currency', 'format', 'f', 'f', 't', null); + + -- file widget + insert into acs_form_widgets (widget) values ('file'); + + insert into acs_form_widget_params + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) + values + (250, 'file', 'format', 'f', 'f', 't', null); + + insert into acs_form_widget_params + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) + values + (251, 'file', 'size', 'f', 't', 'f', null); + + insert into acs_form_widget_params + (param_id, widget, param, required_p, html_p, tcl_allowed_p, default_value) + values + (252, 'file', 'maxlength', 'f', 't', 'f', null); + end; -- default widgets for datatypes @@ -359,5 +423,245 @@ (datatype, widget) values ('naturalnum', 'text'); - + end; + + +begin; + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('url', 'text'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('richtext', 'richtext'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('text', 'text'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('string', 'text'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('boolean', 'text'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('number', 'text'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('integer', 'text'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('currency', 'currency'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('currency', 'select'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('currency', 'multiselect'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('currency', 'radio'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('currency', 'checkbox'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('enumeration', 'text'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('email', 'text'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('file', 'text'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('keyword', 'text'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('date', 'date'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('timestamp', 'timestamp'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('time_of_day', 'timestamp'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('filename', 'text'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('float', 'text'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('naturalnum', 'text'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('file', 'file'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('text','textarea'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('string','textarea'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('richtext','textarea'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('text','radio'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('boolean','radio'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('integer','radio'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('naturalnum','radio'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('float','radio'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('text','checkbox'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('boolean','checkbox'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('integer','checkbox'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('naturalnum','checkbox'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('float','checkbox'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('text','select'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('keyword','select'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('integer','select'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('naturalnum','select'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('float','select'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('text','multiselect'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('keyword','multiselect'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('integer','multiselect'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('naturalnum','multiselect'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('float','multiselect'); + + insert into acs_form_allowable_widgets + (datatype, widget) + values + ('text','search'); + +end; \ No newline at end of file Index: openacs-4/packages/acs-object-management/tcl/form-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/tcl/form-procs.xql,v diff -u -r1.2 -r1.3 --- openacs-4/packages/acs-object-management/tcl/form-procs.xql 11 Dec 2009 00:19:09 -0000 1.2 +++ openacs-4/packages/acs-object-management/tcl/form-procs.xql 22 Dec 2009 19:59:15 -0000 1.3 @@ -16,14 +16,14 @@ <fullquery name="form::element.get_params"> <querytext> - select afwp.param, afwp.html_p, aovawp.value + select afwp.param, afwp.html_p, aovawp.value, aovawp.param_source from acs_form_widget_params afwp, acs_view_attribute_widget_params aovawp, acs_view_attribute_widgets avaw where avaw.object_view = :object_view and aovawp.attribute_id = :attribute_id and afwp.param_id = aovawp.param_id union - select afwp2.param, afwp2.html_p, afwp2.default_value as value + select afwp2.param, afwp2.html_p, afwp2.default_value as value, '' as param_source from acs_form_widget_params afwp2 where not exists (select 1 from acs_view_attribute_widgets Index: openacs-4/packages/acs-object-management/tcl/widget-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/tcl/widget-procs.tcl,v diff -u -r1.1 -r1.2 --- openacs-4/packages/acs-object-management/tcl/widget-procs.tcl 27 Nov 2009 00:38:50 -0000 1.1 +++ openacs-4/packages/acs-object-management/tcl/widget-procs.tcl 22 Dec 2009 19:59:15 -0000 1.2 @@ -79,10 +79,20 @@ db_dml delete {} } +ad_proc object_view::attribute::widget::param::delete_all { + -object_view:required + -attribute_id:required +} { +} { + db_dml delete_all {} +} + ad_proc object_view::attribute::widget::param::set { -object_view:required -attribute_id:required -param_id:required + {-param_type "onevalue"} + {-param_source "literal"} -value:required } { } { Index: openacs-4/packages/acs-object-management/tcl/widget-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/tcl/widget-procs.xql,v diff -u -r1.1 -r1.2 --- openacs-4/packages/acs-object-management/tcl/widget-procs.xql 27 Nov 2009 00:38:50 -0000 1.1 +++ openacs-4/packages/acs-object-management/tcl/widget-procs.xql 22 Dec 2009 19:59:15 -0000 1.2 @@ -67,6 +67,14 @@ </querytext> </fullquery> + <fullquery name="object_view::attribute::widget::param::delete_all.delete_all"> + <querytext> + delete from acs_view_attribute_widget_params + where object_view = :object_view + and attribute_id = :attribute_id + </querytext> + </fullquery> + <fullquery name="object_view::attribute::widget::param::set.param_exists"> <querytext> select 1 @@ -80,7 +88,9 @@ <fullquery name="object_view::attribute::widget::param::set.update_value"> <querytext> update acs_view_attribute_widget_params - set value = :value + set param_type = :param_type, + param_source = :param_source, + value = :value where object_view = :object_view and attribute_id = :attribute_id and param_id = :param_id @@ -90,9 +100,9 @@ <fullquery name="object_view::attribute::widget::param::set.insert_param"> <querytext> insert into acs_view_attribute_widget_params - (object_view, attribute_id, param_id, value) + (object_view, attribute_id, param_id, param_type, param_source, value) values - (:object_view, :attribute_id, :param_id, :value) + (:object_view, :attribute_id, :param_id, :param_type, :param_source, :value) </querytext> </fullquery> Index: openacs-4/packages/acs-object-management/www/admin/widget-add-edit-1.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/www/admin/widget-add-edit-1.tcl,v diff -u -r1.1 -r1.2 --- openacs-4/packages/acs-object-management/www/admin/widget-add-edit-1.tcl 27 Nov 2009 00:38:50 -0000 1.1 +++ openacs-4/packages/acs-object-management/www/admin/widget-add-edit-1.tcl 22 Dec 2009 19:59:15 -0000 1.2 @@ -51,6 +51,9 @@ } -on_submit { db_transaction { if { [db_0or1row get_reg_widget {}] && $registered_widget ne $widget } { + object_view::attribute::widget::param::delete_all \ + -object_view $object_view \ + -attribute_id $attribute_id object_view::attribute::widget::unregister \ -object_view $object_view \ -attribute_id $attribute_id Index: openacs-4/packages/acs-object-management/www/admin/widget-add-edit-1.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/www/admin/widget-add-edit-1.xql,v diff -u -r1.1 -r1.2 --- openacs-4/packages/acs-object-management/www/admin/widget-add-edit-1.xql 27 Nov 2009 00:38:50 -0000 1.1 +++ openacs-4/packages/acs-object-management/www/admin/widget-add-edit-1.xql 22 Dec 2009 19:59:15 -0000 1.2 @@ -4,7 +4,10 @@ <fullquery name="get_form_widgets"> <querytext> select widget, widget - from acs_form_widgets + from acs_form_allowable_widgets + where datatype = (select datatype + from acs_attributes + where attribute_id = :attribute_id) </querytext> </fullquery> Index: openacs-4/packages/acs-object-management/www/admin/widget-add-edit-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/www/admin/widget-add-edit-2.tcl,v diff -u -r1.1 -r1.2 --- openacs-4/packages/acs-object-management/www/admin/widget-add-edit-2.tcl 27 Nov 2009 00:38:50 -0000 1.1 +++ openacs-4/packages/acs-object-management/www/admin/widget-add-edit-2.tcl 22 Dec 2009 19:59:15 -0000 1.2 @@ -10,31 +10,48 @@ ad_form -name widget_register -export {attribute_id object_view} -form { {object_view_pretty:text(inform) - {label "Object View"} + {label #acs-object-management.object_view#} } {attribute_name_pretty:text(inform) - {label "Attribute"} + {label #acs-object-management.attribute#} } {widget:keyword(inform) - {label "Widget"} + {label #acs-object-management.widget#} } - {-section "Widget Parameters" {legendtext "Widget Parameters"}} + {-section "Widget Parameters" {legendtext #acs-object-management.widget_parameters#}} } -db_multirow params get_params {} { +db_multirow -unclobber params get_params {} { + if {$param_source eq "literal"} { + # reverse transform any escaped characters when we submitted + set value [string map {\\$ $ \\[ [ \\] ] \\\\ \\} $value] + } set optional_flag [expr { $required_p ? "" : ",optional" }] set param [lang::util::localize $param] - ad_form -extend -name widget_register -form { - {${param}:text(textarea)$optional_flag} + if { $tcl_allowed_p } { + set param_source_options {{#acs-object-management.literal# literal} {#acs-object-management.tcl_proc# eval}} + } else { + set param_source_options {{#acs-object-management.literal# literal}} } + if {[lsearch -exact {value values options} $param] > -1} { + ad_form -extend -name widget_register -form { + {${param}_source:text(radio) + {label {$param #acs-object-management.source#}} + {options $param_source_options} + {value $param_source} + } + } + } + ad_form -extend -name widget_register -form { + {${param}:text(textarea)$optional_flag {html {rows 6 cols 50}}} + } } ad_form -extend -name widget_register -on_request { db_1row get_attr_info "" set object_view_pretty [lang::util::localize $object_view_pretty] set attribute_name_pretty [lang::util::localize $attribute_name_pretty] ad_set_form_values object_view_pretty attribute_name_pretty widget - for { set i 1 } { $i <= [template::multirow size params] } { incr i } { ad_set_element_value -element [template::multirow get params $i param] \ [template::multirow get params $i value] @@ -43,8 +60,17 @@ wizard submit widget_register -buttons { back next } } -on_submit { for { set i 1 } { $i <= [template::multirow size params] } { incr i } { + set param [template::multirow get params $i param] set value [template::element::get_value widget_register [template::multirow get params $i param]] set param_id [template::multirow get params $i param_id] + set param_source literal + if {[lsearch -exact {value values options} $param] > -1} { + set param_source [template::element::get_value widget_register ${param}_source] + } + if {$param_source eq "literal"} { + # escape malicious characters + set value [string map {$ \\$ [ \\[ ] \\] \\ \\\\} $value] + } if { $value eq "" } { object_view::attribute::widget::param::delete \ -object_view $object_view \ @@ -55,6 +81,7 @@ -object_view $object_view \ -attribute_id $attribute_id \ -param_id $param_id \ + -param_source $param_source \ -value $value } } Index: openacs-4/packages/acs-object-management/www/admin/widget-add-edit-2.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/www/admin/widget-add-edit-2.xql,v diff -u -r1.1 -r1.2 --- openacs-4/packages/acs-object-management/www/admin/widget-add-edit-2.xql 27 Nov 2009 00:38:50 -0000 1.1 +++ openacs-4/packages/acs-object-management/www/admin/widget-add-edit-2.xql 22 Dec 2009 19:59:15 -0000 1.2 @@ -15,7 +15,8 @@ <fullquery name="get_params"> <querytext> select - afwp.param_id, afwp.param, afwp.required_p, afwp.html_p, + afwp.param_id, afwp.param, afwp.required_p, afwp.html_p, + afwp.tcl_allowed_p, coalesce(aovawp.value, afwp.default_value) as value, coalesce(aovawp.param_source,'literal') as param_source from Index: openacs-4/packages/acs-object-management/www/admin/widget-add-edit-3.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/www/admin/widget-add-edit-3.tcl,v diff -u -r1.1 -r1.2 --- openacs-4/packages/acs-object-management/www/admin/widget-add-edit-3.tcl 27 Nov 2009 00:38:50 -0000 1.1 +++ openacs-4/packages/acs-object-management/www/admin/widget-add-edit-3.tcl 22 Dec 2009 19:59:15 -0000 1.2 @@ -11,10 +11,15 @@ set last_step [expr $step-1] set back_url [wizard get_forward_url $last_step] -ad_form -name widget_preview -has_submit 1 -form \ - [list [form::element \ - -object_view $object_view \ - -attribute_id $attribute_id]] +if {[catch { + ad_form -name widget_preview -has_submit 1 -form \ + [list [form::element \ + -object_view $object_view \ + -attribute_id $attribute_id]] +} errmsg] } { + ad_return_error "[_ acs-subsite.Error]" "[_ acs-object-management.error_previewing_widget]" + ad_script_abort +} ad_form -name widget_buttons -form { } -on_request {