locale-edit.tcl

Edits a locale

Location:
/packages/acs-lang/www/admin/locale-edit.tcl
Author:
Bruno Mattarollo Modified by Christian Hvid
Created:
19 march 2002

Related Files

[ hide source ] | [ make this the default ]

File Contents

ad_page_contract {

    Edits a locale

    @author Bruno Mattarollo <bruno.mattarollo@ams.greenpeace.org>

    Modified by Christian Hvid

    @creation-date 19 march 2002
} {
    locale:word
}

# Get the locale for the user so that we 'spit' the content back in the
# proper locale

set locale_user [ad_conn locale]

#  AS - doesn't work
#  set encoding_charset [ad_locale charset $locale_user]
#  ns_setformencoding $encoding_charset
#  ns_set put [ns_conn outputheaders] "content-type" "text/html; charset=$encoding_charset"

set doc(title) "Edit Locale"
set context [list $doc(title)]

form create locale_editing

# It's a request, not a submission of the form

#
# LARS:
# Hm.. this is Oracle-specific. Need to figure out what to do with this for PostgreSQL.
#

# The v$nls_valid_values view contains all the valid NLS values
# for the oracle instance. It is up to the user to select the correct
# values (combinations of language, territories and character sets. More
# information on this view can be found in the docs at http://tahiti.oracle.com/
# look for the PDF file of Oracle 8i "national language support guide"

catch {
    set nls_values_list [db_list_of_lists select_nls_values {select parameter, value
    from v$nls_valid_values order by parameter, value}]

    foreach nls_value $nls_values_list {
        set value [lindex $nls_value 1]
        switch [lindex $nls_value 0] {
            LANGUAGE {
                lappend list_nls_language "\"$value\" \"$value\""
            }
            TERRITORY {
                lappend list_nls_territory "\"$value\" \"$value\""
            }
            CHARACTERSET {
                lappend list_nls_charset "\"$value\" \"$value\""
            }
        }
    }
}


# Greenpeace had a table of countries and languages and their two-digit ISO-code
# but not so in ACS-LANG - here you must provide the two-digit ISO-code

element create locale_editing locale -label "Locale" \
    -datatype text -widget inform

element create locale_editing label -label "Label" -datatype text -widget inform

element create locale_editing country -label "Country" \
        -datatype text -widget inform

element create locale_editing language -label "Language" \
        -datatype text -widget inform

if { [info exists list_nls_language] } {
    element create locale_editing nls_language -label "NLS Language" \
            -datatype text -widget select -options $list_nls_language

    element create locale_editing nls_territory -label "NLS Territory" \
            -datatype text -widget select -options $list_nls_territory

    element create locale_editing nls_charset -label "NLS Charset" \
            -datatype text -widget select -options $list_nls_charset
} else {
    element create locale_editing nls_language -label "NLS Language" \
            -datatype text -widget text

    element create locale_editing nls_territory -label "NLS Territory" \
            -datatype text -widget text

    element create locale_editing nls_charset -label "NLS Charset" \
            -datatype text -widget text
}

element create locale_editing mime_charset \
    -label "MIME Charset" -datatype text

element create locale_editing default_p -label "Default" \
    -datatype text -widget hidden

if { [form is_request locale_editing] } {

    # Finish building the form to present to the user
    db_1row select_details_locale "select locale as locale_locale,
            language as locale_language, country as locale_country,
            label as locale_label, nls_language as locale_nls_language,
            nls_territory as locale_nls_territory, nls_charset as locale_nls_charset,
            mime_charset as locale_mime_charset, default_p as locale_default_p
        from ad_locales
        where locale = :locale"

    set locale_language [string trim $locale_language]

    element set_properties locale_editing locale -value $locale_locale
    element set_properties locale_editing label -value $locale_label
    element set_properties locale_editing nls_language -value $locale_nls_language
    element set_properties locale_editing nls_territory -value $locale_nls_territory
    element set_properties locale_editing nls_charset -value $locale_nls_charset
    element set_properties locale_editing mime_charset -value $locale_mime_charset
    element set_properties locale_editing default_p -value $locale_default_p

    set lang_query "select label from language_639_2_codes"

    if { [string length $locale_language] == 3 } {
        append lang_query " where iso_639_2 = :locale_language"
    } else {
        append lang_query " where iso_639_1 = :locale_language"
    }

    element set_properties locale_editing language \
        -value [db_string get_lang_label $lang_query -default $locale_language]

    element set_properties locale_editing country \
        -value [db_string get_country_name {
            select default_name from countries where iso = :locale_country
        } -default $locale_country]

} else {

    # If we are not building a request form, we are processing a submission.
    # Get the values from the form and validate them

    form get_values locale_editing

    set locale_label [lang::util::get_label $locale]

    if { $label eq "" } {
        element set_error locale_editing label "Label is required"
    }
    if { $mime_charset eq "" } {
        element set_error locale_editing mime_charset "Mime charset is required"
    }

}

if { [form is_valid locale_editing] } {

    # We are receiving a valid submission
    form get_values locale_editing

    db_transaction {

        db_dml update_locale "update ad_locales set
            nls_language = :nls_language, nls_territory = :nls_territory,
            nls_charset = :nls_charset, mime_charset = :mime_charset,
            default_p = :default_p
            where locale = :locale"

    }
    db_flush_cache -cache_key_pattern ad_lang_mime_charset_$locale
    forward "index?tab=locales"

}

# Local variables:
#    mode: tcl
#    tcl-indent-level: 4
#    indent-tabs-mode: nil
# End: