[%# This Source Code Form is subject to the terms of the Mozilla Public
  # License, v. 2.0. If a copy of the MPL was not distributed with this
  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
  #
  # This Source Code Form is "Incompatible With Secondary Licenses", as
  # defined by the Mozilla Public License, v. 2.0.
  #%]

[%# INTERFACE:
  # tabs: List of hashes. May not be empty. Each hash has three members:
  #   name: string. Name of the tab (used internally.)
  #   description: string. Description of the tab (used in tab title).
  #   saveable: boolean. True if tab has a form which can be submitted.
  #               True if user is not receiving self-generated mail.
  # Note: For each tab name, a template "prefs/${tab.name}.tmpl" must exist, 
  # and its interface must be fulfilled.
  # current_tab: A direct reference to one of the hashes in the tabs list.
  #              This tab will be displayed.
  # changes_saved: boolean/string. True if the CGI processed form data before 
  #                displaying anything, and can contain an optional custom
  #                message if required (which Perl still evaluates as True).
  # dont_show_button: boolean. Prevent the display of the "Submit Changes" button.
  #%]

[% filtered_login = user.login FILTER html %]

[% tabs = [{ name => "settings", label => "General Preferences",
              link => "userprefs.cgi?tab=settings", saveable => "1",
              doc_section => "using/preferences.html#general-preferences" },
            { name => "email", label => "Email Preferences",
              link => "userprefs.cgi?tab=email", saveable => "1",
              doc_section => "using/preferences.html#email-preferences" },
            { name => "saved-searches", label => "Saved Searches",
              link => "userprefs.cgi?tab=saved-searches", saveable => "1",
              doc_section => "using/preferences.html#saved-searches" },
            { name => "account", label => "Account Information",
              link => "userprefs.cgi?tab=account", saveable => "1",
              doc_section => "using/preferences.html#account-information" },
            { name => "apikey", label => "API Keys",
              link => "userprefs.cgi?tab=apikey", saveable => "1",
              doc_section => "using/preferences.html#api-keys" },
            { name => "permissions", label => "Permissions",
              link => "userprefs.cgi?tab=permissions", saveable => "0",
              doc_section => "using/preferences.html#permissions" } ] %]

[% Hook.process('tabs') %]

[% FOREACH tab IN tabs %]
  [% IF tab.name == current_tab_name %]
    [% current_tab = tab %]
    [% LAST %]
  [% END %]
[% END %]

[% PROCESS global/header.html.tmpl
   title = current_tab.label
   subheader = filtered_login
   generate_api_token = 1
   style_urls = ['skins/standard/admin.css']
   javascript_urls = ['js/util.js', 'js/field.js', 'js/TUI.js']
   doc_section = current_tab.doc_section
   yui = ['autocomplete']
 %]

[% WRAPPER global/tabs.html.tmpl
   tabs        = tabs
   current_tab = current_tab
%]

[% IF changes_saved %]
  <div id="message">
    The changes to your [% current_tab.label FILTER lower %] have been saved.

    [% IF email_changes_saved %]
      <p>
        In order to confirm your request, we have sent an email to your
        new email address. As a precaution, an email has also been sent
        to your old address allowing you to cancel this change if needed.
        If you don't receive the email, you can
        <a href="token.cgi?t=[% email_token FILTER uri %]&amp;a=cxlem">
        cancel the email address change</a> from here if you wish (especially
        if you mistyped the new email address).
      </p>
    [% END %]
  </div>
[% END %]

<h3>[% current_tab.label %]</h3>

[% IF current_tab.saveable %]
  <form name="userprefsform" method="post" action="userprefs.cgi">
    <input type="hidden" name="tab" value="[% current_tab.name %]">
    <input type="hidden" name="token" value="[% token FILTER html %]">
[% END %]

[% PROCESS "account/prefs/${current_tab.name}.html.tmpl" 
                                     IF current_tab.name.defined %]

[% IF current_tab.saveable %]
    <input type="hidden" name="dosave" value="1">
    [% UNLESS dont_show_button %]
      <p>
        <input type="submit" id="update" value="Submit Changes">
      </p>
    [% END %]
  </form>
[% END %]

[% END %]

[% PROCESS global/footer.html.tmpl %]
