Index: openacs-4/packages/acs-object-management/lib/forms/generic-cr.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/lib/forms/generic-cr.adp,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-object-management/lib/forms/generic-cr.adp 5 Jun 2011 21:22:50 -0000 1.1
@@ -0,0 +1 @@
+
Index: openacs-4/packages/acs-object-management/lib/forms/generic-cr.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/lib/forms/generic-cr.tcl,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-object-management/lib/forms/generic-cr.tcl 5 Jun 2011 21:22:50 -0000 1.1
@@ -0,0 +1,48 @@
+ad_page_contract {
+
+ Includelet to handle generic add/edit operations for a content repository
+ object with item type content_item_view and revision type content_revision_view..
+
+ Adding a new object requires "create" on [ad_conn package_id].
+ Editing an existing object requires "write" on the object.
+
+} "
+ ${content_item_view}_id:naturalnum,optional
+"
+
+ad_form -name $content_revision_view -export {return_url} \
+ -form [content::form::form_part \
+ -content_item_view $content_item_view \
+ -content_revision_view $content_revision_view] \
+ -select_query_name select_values \
+ -on_request {
+ if { ![content::type::is_content_type -object_type \
+ [object_view::get_element -object_view $content_revision_view -element object_type]] } {
+ ad_return_complaint 1 [_ object_view_not_content_type]
+ ad_script_abort
+ }
+ if { [info exists ${content_item_view}_id] } {
+ permission::require_permission \
+ -party_id [ad_conn user_id] \
+ -object_id [set ${content_item_view}_id] \
+ -privilege write
+ } else {
+ permission::require_permission \
+ -party_id [ad_conn user_id] \
+ -object_id [ad_conn package_id] \
+ -privilege create
+ }
+} -new_data {
+ set item_id [content::form::new \
+ -content_item_view $content_item_view \
+ -content_revision_view $content_revision_view]
+} -edit_data {
+ set item_id [content::form::update \
+ -content_item_view $content_item_view \
+ -content_revision_view $content_revision_view]
+} -after_submit {
+ if { [info exists return_url] } {
+ ad_returnredirect $return_url
+ ad_script_abort
+ }
+}
Index: openacs-4/packages/acs-object-management/lib/forms/generic-cr.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/lib/forms/generic-cr.xql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-object-management/lib/forms/generic-cr.xql 5 Jun 2011 21:22:50 -0000 1.1
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+ select *
+ from ${cr_item_view}
+ where ${cr_item_view}_id = [set ${cr_item_view}_id]
+ union
+ select *
+ from ${object_view}
+ where ${object_view}_id = [set ${object_view}_id]
+
+
+
+
Index: openacs-4/packages/acs-object-management/sql/postgresql/upgrade/upgrade-0.0.2d1-0.0.2d2.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/sql/postgresql/upgrade/upgrade-0.0.2d1-0.0.2d2.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-object-management/sql/postgresql/upgrade/upgrade-0.0.2d1-0.0.2d2.sql 5 Jun 2011 21:22:50 -0000 1.1
@@ -0,0 +1,86 @@
+select define_function_args('acs_view__create_sql_view','object_view');
+
+create or replace function acs_view__create_sql_view (varchar)
+returns integer as '
+declare
+ p_view alias for $1;
+ v_cols varchar;
+ v_tabs varchar;
+ v_joins varchar;
+ v_first_p boolean;
+ v_join_rec record;
+ v_attr_rec record;
+ v_tree_sortkey_found_p boolean;
+begin
+
+ if length(p_view) > 64 then
+ raise exception ''View name "%" cannot be longer than 64 characters.'',p_type;
+ end if;
+
+ if not exists (select 1
+ from acs_views
+ where object_view = p_view) then
+ raise exception ''No object type named "%" exists'',p_view;
+ end if;
+
+ v_tabs := '''';
+ v_joins := '''';
+ v_first_p := ''t'';
+ v_tree_sortkey_found_p := ''f'';
+ v_cols := ''acs_objects.object_id as '' || p_view || ''_id'';
+
+ for v_join_rec in select ot2.object_type, ot2.table_name, ot2.id_column,
+ tree_level(ot2.tree_sortkey) as level
+ from acs_object_types ot1, acs_object_types ot2, acs_views ov
+ where ov.object_view = p_view
+ and ot1.object_type = ov.object_type
+ and ot1.tree_sortkey between ot2.tree_sortkey and tree_right(ot2.tree_sortkey)
+ order by ot2.tree_sortkey desc
+ loop
+ if v_join_rec.table_name is not null and table_exists(v_join_rec.table_name) then
+
+ if not v_tree_sortkey_found_p and column_exists(v_join_rec.table_name, ''tree_sortkey'') then
+ v_cols := v_cols || '','' || v_join_rec.table_name || ''.tree_sortkey'';
+ v_tree_sortkey_found_p := ''t'';
+ end if;
+
+ if not v_first_p then
+ v_tabs := v_tabs || '', '';
+ end if;
+ v_tabs := v_tabs || v_join_rec.table_name;
+
+
+ if v_join_rec.table_name <> ''acs_objects'' then
+ if not v_first_p then
+ v_joins := v_joins || '' and '';
+ end if;
+ v_joins := v_joins || '' acs_objects.object_id = '' || v_join_rec.table_name ||
+ ''.'' || v_join_rec.id_column;
+ end if;
+
+ v_first_p := ''f'';
+
+ end if;
+ end loop;
+
+ for v_attr_rec in select view_attribute, col_expr
+ from acs_view_attributes
+ where object_view = p_view
+ order by sort_order
+ loop
+ v_cols := v_cols || '','' || v_attr_rec.col_expr || '' as '' || v_attr_rec.view_attribute;
+ end loop;
+
+ if v_joins <> '''' then
+ v_joins := '' where '' || v_joins;
+ end if;
+
+ if table_exists(p_view) then
+ execute ''drop view '' || p_view;
+ end if;
+
+ execute ''create or replace view '' || p_view || '' as select '' ||
+ v_cols || '' from '' || v_tabs || v_joins;
+
+ return 0;
+end;' language 'plpgsql';
Index: openacs-4/packages/acs-object-management/tcl/content-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/tcl/content-procs.tcl,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-object-management/tcl/content-procs.tcl 5 Jun 2011 21:22:50 -0000 1.1
@@ -0,0 +1,155 @@
+ad_library {
+
+ Supporting procs for ACS Content Repository Objects. Unlike the object type and view
+ metadata procs, these don't cache at the moment.
+
+ @author Don Baccus (dhogaza@pacifier.com)
+ @creation-date March 27, 2011
+ @cvs-id $Id: content-procs.tcl,v 1.1 2011/06/05 21:22:50 donb Exp $
+
+}
+
+namespace eval content {}
+namespace eval content::form {}
+
+ad_proc content::form::form_part {
+ {-content_item_view:required content_item_v}
+ -content_revision_view:required
+ {-extend:boolean "f"}
+} {
+
+ Returns an ad_form snippet meant to be embedded in the "-form" part of the call.
+
+ @param content_item_view The content item view for the CR object, usually content_item.
+ @param content_reviwion_view The content revision view for the CR object, usually custom.
+ @param extend Extend an existing form.
+
+} {
+ set form_part [list]
+ if {!$extend_p} {
+ lappend form_part [list ${content_item_view}_id:key(acs_object_id_seq)]
+ }
+ lappend form_part [list content_item_view:text(hidden) [list value $content_item_view]]
+ lappend form_part [list content_revision_view:text(hidden) [list value $content_revision_view]]
+ foreach attribute_id [object_view::get_attribute_ids -object_view $content_item_view] {
+ lappend form_part [form::element \
+ -object_view $content_item_view \
+ -attribute_id $attribute_id]
+ }
+ foreach attribute_id [object_view::get_attribute_ids -object_view $content_revision_view] {
+ lappend form_part [form::element \
+ -object_view $content_revision_view \
+ -attribute_id $attribute_id]
+ }
+ns_log Notice "Huh? form_part: $form_part"
+ return $form_part
+}
+
+ad_proc content::form::new {
+ -content_item_view:required
+ -content_revision_view:required
+ -item_id
+ -parent_id
+ -form
+} {
+} {
+
+ if { ![info exists form] } {
+ set form $content_revision_view
+ }
+
+ if { ![info exists item_id] } {
+ set item_id [template::element::get_value $form \
+ [template::element::get_value $form __key]]
+ }
+
+ if { ![info exists parent_id] } {
+ db_1row get_root_folder_id {}
+ }
+
+ set content_item_type [object_view::get_element \
+ -object_view $content_item_view \
+ -element object_type]
+
+ set attributes(creation_user) [ad_conn user_id]
+ set attributes(creation_ip) [ad_conn peeraddr]
+ set attributes(object_type) $content_item_type
+
+ form::get_attributes \
+ -object_view $content_item_view \
+ -array attributes \
+ -form $content_revision_view
+
+ db_transaction {
+ object::new_inner \
+ -object_type $content_item_type \
+ -object_id $item_id \
+ -parent_id $parent_id \
+ -attributes [array get attributes]
+ }
+
+ array unset attributes
+
+ set content_revision_type [object_view::get_element \
+ -object_view $content_revision_view \
+ -element object_type]
+
+ set attributes(creation_user) [ad_conn user_id]
+ set attributes(creation_ip) [ad_conn peeraddr]
+ set attributes(object_type) $content_revision_type
+ set attributes(item_id) $item_id
+
+ form::get_attributes \
+ -object_view $content_revision_view \
+ -array attributes \
+ -form $content_revision_view
+
+ db_transaction {
+ set revision_id [object::new_inner \
+ -object_type $content_revision_type \
+ -object_id "" \
+ -item_id $item_id \
+ -attributes [array get attributes]]
+ }
+
+ db_dml update_item {}
+
+ return $item_id
+}
+
+ad_proc content::form::update {
+ -content_item_view:required
+ -content_revision_view:required
+ -item_id
+ -form
+} {
+} {
+# not done!
+ if { ![info exists form] } {
+ set form $object_view
+ }
+
+ if { ![info exists object_id] } {
+ set object_id [template::element::get_value $form \
+ [template::element::get_value $form __key]]
+ }
+
+ form::get_attributes \
+ -object_view $object_view \
+ -form $form \
+ -array attributes
+
+ set object_type [object_view::get_element \
+ -object_view $object_view \
+ -element object_type]
+
+ set attributes(modifying_user) "[ad_conn user_id]"
+ set attributes(modifying_ip) "[ad_conn peeraddr]"
+
+ db_transaction {
+ object::update_inner \
+ -object_id $object_id \
+ -object_type $object_type \
+ -attributes [array get attributes]
+ }
+}
Index: openacs-4/packages/acs-object-management/tcl/content-procs.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-object-management/tcl/content-procs.xql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-object-management/tcl/content-procs.xql 5 Jun 2011 21:22:50 -0000 1.1
@@ -0,0 +1,20 @@
+
+
+
+
+
+ select c_root_folder_id as parent_id
+ from content_item_globals
+
+
+
+
+
+ update cr_items
+ set live_revision = :revision_id,
+ latest_revision = :revision_id
+ where item_id = :item_id
+
+
+
+