{#-
       Licensed to the Apache Software Foundation (ASF) under one
       or more contributor license agreements.  See the NOTICE file
       distributed with this work for additional information
       regarding copyright ownership.  The ASF licenses this file
       to you under the Apache License, Version 2.0 (the
       "License"); you may not use this file except in compliance
       with the License.  You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

       Unless required by applicable law or agreed to in writing,
       software distributed under the License is distributed on an
       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       KIND, either express or implied.  See the License for the
       specific language governing permissions and limitations
       under the License.
-#}
{% set hide_left_bar = True %}
{% extends "allura:templates/user_account_base.html" %}

{% block title %}{{c.user.username}} / Preferences{% endblock %}

{% block header %}User Preferences for {{c.user.username}}{% endblock %}

{% block content %}
  {{ super() }}
  <div style="clear:both" class="grid-20">
    <h2>Personal Information</h2>
    {{g.theme.personal_data_form.display(action="/auth/user_info/change_personal_data", user=c.user)}} 
  </div>

  <a name="Contacts"></a>
  <div style="clear:both" class="grid-20">
    <h2>Personal Contacts</h2>
    <p>
      If you want, you can set your contacts allowing other members to contact you or you can set your personal website allowing other members to introduce your self.
    </p>
    <ul><li><a href="contacts">Click here to check and change your contacts</a></li></ul>
  </div>

  <a name="Availability"></a>
  <div style="clear:both" class="grid-20">
    <h2>Availability</h2>
    <p>
      If you want, you can set the weekly timeslot during which you are usually available to support other users of the forge. (If you didn't set any timezone, your timeslots could be meaningless to other users, therefore they will be ignored!)
    </p>
    <ul><li><a href="availability">Click here to check and change your availability slots</a></li></ul>
  </div>

  <div class="grid-20">
    <h2>Skills list</h2>
    <ul><li><a href="skills">Click here to check and change your skills list</a></li></ul>
  </div>
{% endblock %}
