Index: openacs-4/packages/static-portlet/www/element.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/static-portlet/www/element.tcl,v diff -u -r1.10.2.1.4.4 -r1.10.2.1.4.5 --- openacs-4/packages/static-portlet/www/element.tcl 11 Aug 2004 19:35:44 -0000 1.10.2.1.4.4 +++ openacs-4/packages/static-portlet/www/element.tcl 11 Aug 2004 23:34:59 -0000 1.10.2.1.4.5 @@ -52,7 +52,7 @@ ad_form -name static_element -form { element_content_id:key {pretty_name:text(text) {label "[_ static-portlet.Name]"} {html {size 60}}} - {content:text(textarea) {label "[_ static-portlet.Content]"} {html {rows 15 cols 80 wrap soft}}} + {content:richtext(richtext) {label "[_ static-portlet.Content]"} {html {rows 15 cols 80 wrap soft}} {htmlarea_p 1}} } if {[lsearch $templates $type] >= 0} { @@ -150,7 +150,10 @@ switch $type { - user { set query "select portal_id as target_portal_id from dotlrn_users" } + user { + set query "select portal_id as target_portal_id from dotlrn_users" + set community_id $package_id + } dotlrn_class_instance { set query "select portal_id as target_portal_id, community_id from dotlrn_class_instances_full" } dotlrn_club { set query "select portal_id as target_portal_id, community_id from dotlrn_clubs_full" } dotlrn_community { set query "select portal_id as target_portal_id, community_id from dotlrn_communities_full" } @@ -159,26 +162,55 @@ ad_script_abort } } - + db_foreach dotlrn_type_portals "$query" { - if {$type != "user" } { - set element_content_id [db_string get_content_id { - select content_id - from static_portal_content - where package_id = :community_id - and pretty_name = :pretty_name - }] - } + if { ($type != "user") } { + catch { + set element_content_id [db_string get_content_id { + select content_id + from static_portal_content + where package_id = :community_id + and pretty_name = :pretty_name + }] + } errmsg2 + } + set no_portlet [catch {set element_id [portal::get_element_id_from_unique_param -portal_id $target_portal_id -key content_id -value $element_content_id]} errmsg] - static_portal_content::update \ - -portal_id $target_portal_id \ - -content_id $element_content_id \ - -pretty_name $pretty_name \ - -content $content + if { $no_portlet } { - set element_id [portal::get_element_id_from_unique_param -portal_id $target_portal_id -key content_id -value $element_content_id] + # if we are here, means that the portlet do not exists + # for given portal_id, then intead of update, we'll + # create it + + if {$type != "user" } { + # clone the template's content + set element_content_id [static_portal_content::new \ + -package_id $community_id \ + -content $content \ + -pretty_name $pretty_name ] + } + + set new_element_id [ static_portal_content::add_to_portal \ + -portal_id $target_portal_id \ + -package_id $community_id \ + -content_id $element_content_id] + + portal::set_element_param $new_element_id "package_id" $community_id + portal::set_element_param $new_element_id "content_id" $element_content_id + set element_id $element_content_id + + + } else { + + static_portal_content::update \ + -portal_id $target_portal_id \ + -content_id $element_content_id \ + -pretty_name $pretty_name \ + -content $content + } + if {$enforce_portlet == 0} { db_dml hide_portlet { update portal_element_map set state = 'hidden' where element_id = :element_id } } else { @@ -205,7 +237,7 @@ set elements [list \ [list {enforce_portlet:text(select)} [list label [_ static-portlet.lt_Enforce_this_applet_t]] \ [list help_text [_ static-portlet.lt_Enforce_True_means_th]] \ - [list options [list [_ static-portlet.True] 1] [list [_ static-portlet.False_0]]] \ + [list options [list [list [_ static-portlet.True] 1] [list [_ static-portlet.False_0] 0]]] \ [list value 0]]] ad_form -extend -name static_file -form $elements } @@ -315,7 +347,10 @@ } switch $type { - user { set query "select portal_id as target_portal_id from dotlrn_users" } + user { + set query "select portal_id as target_portal_id from dotlrn_users" + set community_id $package_id + } dotlrn_class_instance { set query "select portal_id as target_portal_id, community_id from dotlrn_class_instances_full" } dotlrn_club { set query "select portal_id as target_portal_id, community_id from dotlrn_clubs_full" } dotlrn_community { set query "select portal_id as target_portal_id, community_id from dotlrn_communities_full" } @@ -328,29 +363,59 @@ db_foreach dotlrn_type_portals "$query" { if {$type != "user" } { - set file_content_id [db_string get_content_id { - select content_id - from static_portal_content - where package_id = :community_id - and pretty_name = :pretty_name - }] + catch { + set file_content_id [db_string get_content_id { + select content_id + from static_portal_content + where package_id = :community_id + and pretty_name = :pretty_name + }] + } errmsg2 } - static_portal_content::update \ - -portal_id $target_portal_id \ - -content_id $file_content_id \ - -pretty_name $pretty_name \ - -content $content + set no_portlet [catch {set element_id [portal::get_element_id_from_unique_param -portal_id $target_portal_id -key content_id -value $file_content_id]} errmsg] - set element_id [portal::get_element_id_from_unique_param -portal_id $target_portal_id -key content_id -value $file_content_id] + if { $no_portlet } { + + # if we are here, means that the portlet do not exists + # for given portal_id, then intead of update, we'll + # create it + + if {$type != "user" } { + # clone the template's content + set file_content_id [static_portal_content::new \ + -package_id $community_id \ + -content $content \ + -pretty_name $pretty_name ] + } + + set new_element_id [ static_portal_content::add_to_portal \ + -portal_id $target_portal_id \ + -package_id $community_id \ + -content_id $file_content_id] + + portal::set_element_param $new_element_id "package_id" $community_id + portal::set_element_param $new_element_id "content_id" $file_content_id + set element_id $file_content_id + + + } else { + + static_portal_content::update \ + -portal_id $target_portal_id \ + -content_id $file_content_id \ + -pretty_name $pretty_name \ + -content $content + } + if {$enforce_portlet == 0} { db_dml hide_portlet { update portal_element_map set state = 'hidden' where element_id = :element_id } } else { db_dml hide_portlet { update portal_element_map set state = 'full' where element_id = :element_id } } - } + } # redirect and abort ad_returnredirect $referer