Index: openacs-4/packages/acs-lang/www/admin/batch-editor.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-lang/www/admin/batch-editor.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/acs-lang/www/admin/batch-editor.tcl 8 Aug 2003 12:21:28 -0000 1.3 +++ openacs-4/packages/acs-lang/www/admin/batch-editor.tcl 14 Aug 2003 16:06:20 -0000 1.4 @@ -5,83 +5,246 @@ } { locale package_key + {show "all"} {page_start 0} - {page_end 10} -} -properties { } -if { ![info exists locale] } { - set current_locale [ad_conn locale] -} else { - set current_locale $locale +# We rename to avoid conflict in queries +set current_locale $locale +set default_locale en_US + +set locale_label [ad_locale_get_label $current_locale] +set default_locale_label [ad_locale_get_label $default_locale] + +set page_title "Batch edit messages" +set context [list [list "package-list?[export_vars { locale }]" $locale_label] \ + [list "message-list?[export_vars { locale package_key show }]" $package_key] \ + $page_title] + + + + + +# TODO: PG + + + + +##### +# +# Handle filtering +# +##### + +# LARS: The reason I implemented this overly complex way of doing it is that I was just about to +# merge this page with messages-search ... + +set where_clauses [list] +set keys_where_clauses [list] + +switch -exact $show { + translated { + lappend where_clauses {lm2.message is not null} + lappend keys_where_clauses {exists (select 1 + from lang_messages lm + where lm.package_key = lmk.package_key + and lm.message_key = lmk.message_key + and lm.locale = :current_locale)} + } + untranslated { + lappend where_clauses {lm2.message is null} + lappend keys_where_clauses {not exists (select 1 + from lang_messages lm + where lm.package_key = lmk.package_key + and lm.message_key = lmk.message_key + and lm.locale = :current_locale)} + } } +set where_clause {} +set keys_where_clause {} -db_1row select_locale_lable { - select label as locale_label from ad_locales where locale = :current_locale +if { [llength $where_clauses] > 0 } { + set where_clause "and [join $where_clauses "\n and "]" } +if { [llength $keys_where_clauses] > 0 } { + set keys_where_clause "and [join $keys_where_clauses "\n and "]" +} -set tab [ns_urlencode "localized-messages"] -set return_url "display-grouped-messages?tab=$tab&locale=$locale" -set context_bar [ad_context_bar [list $return_url Listing] "Batch Editor - $package_key"] -form create batch_editor -# export variables +##### +# +# Counting messages +# +##### -element create batch_editor locale -widget hidden -datatype text -value $locale -element create batch_editor package_key -widget hidden -datatype text -value $package_key -element create batch_editor page_start -widget hidden -datatype text -value $page_start -element create batch_editor page_end -widget hidden -datatype text -value $page_end +db_1row counts { + select (select count(*) from lang_messages where package_key = :package_key and locale = :locale) as num_translated, + (select count(*) from lang_message_keys where package_key = :package_key) as num_messages + from dual +} +set num_untranslated [expr $num_messages - $num_translated] -# use a counter for pagination etc. -# this works with both oracle and postgresql +set num_messages_pretty [lc_numeric $num_messages] +set num_translated_pretty [lc_numeric $num_translated] +set num_untranslated_pretty [lc_numeric $num_untranslated] -set count 0 -set keys [list] -set displayed_keys [list] -set default_locale en_US -set default_locale_label [ad_locale_get_label $default_locale] -set keys [util_memoize [list db_list get_keys "select message_key from lang_message_keys where package_key = '[db_quote $package_key]' order by upper(message_key)"]] -set keys [db_list get_keys "select message_key from lang_message_keys where package_key = '[db_quote $package_key]' order by upper(message_key)"] + +##### +# +# Initialize pagination +# +##### + + +set keys [db_list get_keys " + select lmk.message_key + from lang_message_keys lmk + where lmk.package_key = :package_key + $keys_where_clause + order by upper(lmk.message_key), lmk.message_key +"] + set total [llength $keys] +set page_end [expr $page_start + 10] -# TODO: Oracle + + + + +##### +# +# Build the form +# +##### + +set edit_buttons [list] + +if { ![string equal $show "untranslated"] && $page_start > 0 } { + lappend edit_buttons { "< Update and back" "prev" } +} + +lappend edit_buttons { "Update" "ok" } + +if { ![string equal $show "untranslated"] && $page_end < [expr $total-10] } { + lappend edit_buttons { "Update and next >" "next" } +} + +ad_form -name batch_editor -edit_buttons $edit_buttons -form { + {locale:text(hidden) {value $locale}} + {package_key:text(hidden) {value $package_key}} + {page_start:integer(hidden),optional} + {show:text(hidden),optional} +} + +# Each message has the following fields: +# +# message_key_x:text(hidden) +# message_key_pretty_x:text(inform) +# description_x:text(inform) +# default_locale_message_x:text(textarea) +# message_x:text(textarea) +# org_message_x:text(hidden) + + +set count $page_start db_foreach get_messages {} { - lappend displayed_keys $message_key - element create batch_editor "message_key_$count" -widget hidden -datatype text + ad_form -extend -name batch_editor -form \ + [list [list "message_key_$count:text(hidden)" {value $message_key}]] - element create batch_editor "message_key_info_$count" -widget inform -datatype text -label "Key" + set message_url "edit-localized-message?[export_vars { locale package_key message_key show }]" + + ad_form -extend -name batch_editor -form \ + [list [list "message_key_pretty_$count:text(inform)" \ + {label "Message Key"} \ + {value "$package_key.$message_key"} \ + {section "$package_key.$message_key"}]] - element create batch_editor "en_us_message_$count" -widget inform -datatype text -label $default_locale_label + if { ![empty_string_p $description] } { + set description_edit_url "edit-description?[export_vars { locale package_key message_key show }]" + set description "[ad_text_to_html -- $description] [subst { (edit)}]" + + ad_form -extend -name batch_editor -form \ + [list [list "description_$count:text(inform),optional" \ + {label "Description"} \ + {value $description}]] + } + + if { ![string equal $current_locale $default_locale] } { + ad_form -extend -name batch_editor -form \ + [list [list "default_locale_message_$count:text(inform),optional" \ + {label $default_locale_label} \ + {value {[ad_quotehtml $default_message]}}]] + } - if { [string length $translated_message] > 150 } { + if { [string length $translated_message] > 80 } { set html { cols 80 rows 15 } } else { - set html { cols 60 rows 4 } + set html { cols 60 rows 2 } } - element create batch_editor "message_$count" -widget textarea -datatype text -label $locale_label -html $html + + ad_form -extend -name batch_editor -form \ + [list [list "org_message_$count:text(hidden),optional"]] + + ad_form -extend -name batch_editor -form \ + [list [list "message_$count:text(textarea),optional" {label $locale_label} {html $html}]] + + # We set this as a local variable, so that ad_form's normal system works + set message_$count $translated_message - element set_value batch_editor "message_key_$count" $message_key - - element set_value batch_editor "message_key_info_$count" "$message_key" - - element set_properties batch_editor "en_us_message_$count" -value "[ad_quotehtml $default_message]" - - if { [form is_request batch_editor] } { - element set_properties batch_editor "message_$count" -value [ad_decode $translated_message "" "TRANSLATION MISSING" $translated_message] - } - incr count } +ad_form -extend -name batch_editor -on_request { + # Set from local vars +} -on_submit { -# create pagination multiple + for { set i $page_start } { $i < $page_end && $i < $total } { incr i } { + + if { ![string equal [set org_message_$i] [set message_$i]] } { + lang::message::register $current_locale $package_key \ + [set message_key_$i] \ + [set message_$i] + } + } + set button [form::get_button batch_editor] + + if { ![string equal $button "ok"] } { + switch $button { + prev { + set page_start [expr $page_start - 10] + if { $page_start < 0 } { + set page_start 0 + } + } + next { + set page_start [expr $page_start + 10] + if { $page_start > $total } { + set page_start [expr $total - ($total % 10)] + } + } + } + } + + ad_returnredirect "[ad_conn url]?[export_vars { locale package_key show page_start }]" + ad_script_abort +} + + + +##### +# +# Slider for pagination +# +##### + multirow create pagination text hint url selected group + for {set count 0} {$count < $total} {incr count 10 } { set end_page [expr $count + 9] if { $end_page > [expr $total-1] } { @@ -102,19 +265,38 @@ append text [string range [lindex $keys $end_page] 0 2] } - multirow append pagination $text "[lindex $keys $count] - [lindex $keys $end_page]" "batch-editor?page_start=$count&page_end=[expr $count+10]&locale=$locale&package_key=$package_key" [expr $count == $page_start] [expr $count / 100] + multirow append pagination \ + $text \ + "[lindex $keys $count] - [lindex $keys $end_page]" \ + "batch-editor?[export_vars { { page_start $count } locale package_key show }]" \ + [expr $count == $page_start] \ + [expr $count / 100] } -# is this a valid submit? then register the messages -if { [form is_valid batch_editor] } { - for {set count $page_start} {($count < $page_end) && ($count < $total)} {incr count} { - # Register message via acs-lang - set message_key [element get_value batch_editor "message_key_$count"] - set message [element get_value batch_editor "message_$count"] - if { $message != "TRANSLATION MISSING" } { - lang::message::register $locale $package_key $message_key $message - } + + +##### +# +# Slider for 'show' options +# +##### + +multirow create show_opts value label count + +multirow append show_opts "all" "All" $num_messages_pretty +multirow append show_opts "translated" "Translated" $num_translated_pretty +multirow append show_opts "untranslated" "Untranslated" $num_untranslated_pretty + +multirow extend show_opts url selected_p + +multirow foreach show_opts { + set selected_p [string equal $show $value] + if { [string equal $value "all"] } { + set url "[ad_conn url]?[export_vars { locale package_key }]" + } else { + set url "[ad_conn url]?[export_vars { locale package_key {show $value} }]" } } +