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} }]"
}
}
+