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 + + + +