change-locale-include.tcl

Change user preferred locale

Location:
/packages/acs-lang/www/change-locale-include.tcl
Authors:
Peter Marklund <peter@collaboraid.biz>
Christian Hvid
Guenter Ernst <guenter.ernst@wu.ac.at>

Related Files

[ hide source ] | [ make this the default ]

File Contents

ad_include_contract {
    Change user preferred locale

    @author Peter Marklund (peter@collaboraid.biz)
    @author Christian Hvid
    @author Guenter Ernst (guenter.ernst@wu.ac.at)
} {
    {return_url:localurl "[util::get_referrer -relative]"}
    {package_id:naturalnum "[ad_conn package_id]"}
}

# check for package level locale support
set package_level_locales_p [expr {[lang::system::use_package_level_locales_p] && $package_id ne "" && [ad_conn user_id] != 0}]
# check for timezone setting support
set use_timezone_p [expr {[ad_conn user_id] != 0}]

# Create a list of lists containing the possible locale choiches
set list_of_locales [list]

db_foreach locale_loop {
   select label, locale from enabled_locales
} {
   if { [lang::message::message_exists_p $locale acs-lang.this-language] } {
       set label "[lang::message::lookup $locale  acs-lang.this-language]"
   }
   lappend list_of_locales [list ${label} $locale]
}

set list_of_locales [lsort -dictionary -index 0 $list_of_locales]
set list_of_package_locales [linsert $list_of_locales 0 [list (default) ""]]

# setup form
ad_form \
    -name locale \
    -mode edit \
    -form {
        {package_id:naturalnum(hidden)
            {value $package_id}
        }
        {return_url:text(hidden)
            {value $return_url}
        }
        {site_wide_locale:oneof(select),multiple,optional
            {label "[_ acs-lang.Your_Preferred_Locale]"}
            {options $list_of_locales}
            {values "[ad_conn locale]"}
            {help_text "[_ acs-lang.Your_locale_site_wide]"}
        }
    }


# add form element for package level locale selection (if needed)
if { $package_level_locales_p } {
    set package_name [apm_instance_name_from_id $package_id]
    ad_form \
        -extend \
        -name locale \
        -form {
            {package_level_locale:oneof(select),optional
                {label "[_ acs-lang.Locale_for]"}
                {options $list_of_package_locales}
                {help_text "[_ acs-lang.Your_locale_for_package]"}
            }
        }
}

# add form element for timezone selection (if needed)
if { $use_timezone_p } {
   set timezone_options [db_list_of_lists dbqd...all_timezones {
      select tz || ' ' || gmt_offset as tz, tz from timezones
   }]

   ad_form \
       -extend \
       -name locale \
       -form {
           {timezone:oneof(select),optional
               {label "[_ acs-lang.Your_timezone]"}
               {options $timezone_options}
           }
       }
}

# Setup of form elements done, now add the action blocks
ad_form \
   -extend \
   -name locale \
   -on_request {
       if { $package_level_locales_p } {
          set package_level_locale [lang::user::package_level_locale $package_id]
       }

       set site_wide_locale [lang::user::site_wide_locale]
       if { $site_wide_locale eq "" } {
          set site_wide_locale [lang::system::site_wide_locale]
       }

       if { $use_timezone_p } {
           set timezone [lang::user::timezone]
           if { $timezone eq "" } {
              set timezone [lang::system::timezone]
           }
       }
   } \
   -on_submit {
       lang::user::set_locale $site_wide_locale

       if { $package_level_locales_p } {
           lang::user::set_locale -package_id $package_id $package_level_locale
       }

       if { $use_timezone_p } {
           lang::user::set_timezone $timezone
       }

       ad_returnredirect $return_url
       ad_script_abort
   }

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