[%# 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:
  # release: a hash containing data about new releases, if any.
  #%]

[% PROCESS global/header.html.tmpl
   title = "$terms.Bugzilla Main Page"
   header = "Main Page" 
   header_addl_info = "version $constants.BUGZILLA_VERSION"
%]

[% IF release %]
  <div id="new_release">
    [% IF release.data %]
      [% IF release.deprecated %]
        <p>Bugzilla [%+ release.deprecated FILTER html %] is no longer
        supported. You are highly encouraged to upgrade in order to keep your
        system secure.</p>
      [% END %]

      <p>A new Bugzilla version ([% release.data.latest_ver FILTER html %])
      is available at
      <a href="[% release.data.url FILTER html %]">[% release.data.url FILTER html %]</a>.<br>
      Release date: [% release.data.date FILTER html %]</p>

      <p class="notice">This message is only shown to logged in users with admin privs.
      You can configure this notification from the
      <a href="editparams.cgi?section=general#upgrade_notification_desc">Parameters</a> page.</p>
    [% ELSIF release.error == "cannot_download" %]
      <p>The remote file <a href="[% constants.REMOTE_FILE FILTER html %]">
      [%~ constants.REMOTE_FILE FILTER html %]</a> cannot be downloaded
      (reason: [% release.reason FILTER html %]).<br>
      Either the remote server is temporarily unavailable, or your web server cannot access
      the web. If you are behind a proxy, set the
      <a href="editparams.cgi?section=advanced#proxy_url_desc">proxy_url</a> parameter correctly.</p>
    [% ELSIF release.error == "no_write" %]
      <p>The local XML file '[% constants.LOCAL_FILE FILTER html %]' cannot be created
      (reason: [% release.reason FILTER html %]).<br>
      Please make sure the web server can write into this directory.
    [% ELSIF release.error == "no_update" %]
      <p>The local XML file '[% constants.LOCAL_FILE FILTER html %]' cannot be updated.
      Please make sure the web server can edit this file.</p>
    [% ELSIF release.error == "no_access" %]
      <p>The local XML file '[% constants.LOCAL_FILE FILTER html %]' cannot be read.
      Please make sure this file has the correct rights set on it.</p>
    [% ELSIF release.error == "corrupted" %]
      <p>The local XML file '[% constants.LOCAL_FILE FILTER html %]' has an invalid XML format.
      Please delete it and try accessing this page again.</p>
    [% ELSIF release.error == "unknown_parameter" %]
      <p>'[% Param("upgrade_notification") FILTER html %]' is not a valid notification
      parameter. Please check this parameter in the
      <a href="editparams.cgi?section=general#upgrade_notification_desc">Parameters</a> page.</p>
    [% END %]
  </div>
[% END %]

<div id="page-index">
  <h1 id="welcome"> Welcome to [% terms.Bugzilla %]</h1>
  <div class="intro">[% Hook.process('intro') %]</div>

  <div class="bz_common_actions">
    <ul>
      <li>
        <a id="enter_bug" href="enter_bug.cgi"><span>File [% terms.aBug %]</span></a>
      </li>
      <li>
        <a id="query" href="query.cgi"><span>Search</span></a>
      </li>
      <li>
        <a id="account"
          [% IF user.id %]
            href="userprefs.cgi"><span>User Preferences</span></a>
          [% ELSIF Param('createemailregexp') && user.authorizer.user_can_create_account %]
            href="createaccount.cgi"><span>Open a New Account</span></a>
          [% ELSE %]
            href="?GoAheadAndLogIn=1"><span>Log In</span></a>
          [% END %]
      </li>
      <li>
        <a id="help" href="[% docs_urlbase FILTER html %]using/index.html"><span>Documentation</span></a>
      </li>
    </ul>
  </div>

  <div>
    <form id="quicksearchForm" name="quicksearchForm" action="buglist.cgi">
      <input id="quicksearch_main" name="quicksearch" title="Quick Search"
             placeholder="Enter [% terms.abug %] # or some search terms"
             autofocus required>
      <input id="find" type="submit" value="Quick Search">
      <a href="page.cgi?id=quicksearch.html" title="Quick Search help">[?]</a>
    </form>

    <ul class="additional_links">
      [% Hook.process('additional_links') %]
    </ul>
  </div>

  <div id="common_queries">
    <h4>Common Queries:</h4>
    <ul>
      [% IF user.id %]
        <li>
          [% title = BLOCK %]Open [% terms.bugs %] assigned to me[% END %]
          <a href="buglist.cgi?f1=assigned_to&amp;o1=equals&amp;v1=%25user%25&amp;resolution=---">
            [% title FILTER html %]</a> ([% assignee_count FILTER html %])
          <a href="buglist.cgi?f1=assigned_to&amp;o1=equals&amp;v1=%25user%25&amp;resolution=---&amp;ctype=atom&amp;title=[% title FILTER uri %]"
             class="rss">&nbsp;</a>
        </li>
        <li>
          [% title = BLOCK %]Open [% terms.bugs %] reported by me[% END %]
          <a href="buglist.cgi?f1=reporter&amp;o1=equals&amp;v1=%25user%25&amp;resolution=---">
            [% title FILTER html %]</a> ([% reporter_count FILTER html %])
          <a href="buglist.cgi?f1=reporter&amp;o1=equals&amp;v1=%25user%25&amp;resolution=---&amp;ctype=atom&amp;title=[% title FILTER uri %]"
             class="rss">&nbsp;</a>
        </li>
        [% IF Bugzilla.has_flags %]
          <li>
            [% title = BLOCK %]Requests addressed to me[% END %]
            <a href="request.cgi?action=queue&amp;requestee=[% user.login FILTER uri %]&amp;group=type&amp;do_union=0">
              [% title FILTER html %]</a> ([% requestee_count FILTER html %])
            <a href="buglist.cgi?f1=requestees.login_name&amp;o1=equals&amp;v1=%25user%25&amp;ctype=atom&amp;title=[% title FILTER uri %]"
               class="rss">&nbsp;</a>
          </li>
        [% END %]
      [% END %]

      <li>
        [% terms.Bugs %] reported in the
        <a href="buglist.cgi?chfield=%5BBug%20creation%5D&amp;chfieldfrom=24h">last 24 hours</a>
        [% title = BLOCK %][% terms.Bugs %] reported in the last 24 hours[% END %]
        <a href="buglist.cgi?chfield=%5BBug%20creation%5D&amp;chfieldfrom=24h&amp;ctype=atom&amp;title=[% title FILTER uri %]"
           class="rss">&nbsp;</a>
        | <a href="buglist.cgi?chfield=%5BBug%20creation%5D&amp;chfieldfrom=7d">last 7 days</a>
        [% title = BLOCK %][% terms.Bugs %] reported in the last 7 days[% END %]
        <a href="buglist.cgi?chfield=%5BBug%20creation%5D&amp;chfieldfrom=7d&amp;ctype=atom&amp;title=[% title FILTER uri %]"
           class="rss">&nbsp;</a>
      </li>
      <li>
        [% terms.Bugs %] changed in the
        <a href="buglist.cgi?chfieldfrom=24h">last 24 hours</a>
        [% title = BLOCK %][% terms.Bugs %] changed in the last 24 hours[% END %]
        <a href="buglist.cgi?chfieldfrom=24h&amp;ctype=atom&amp;title=[% title FILTER uri %]"
           class="rss">&nbsp;</a>
        | <a href="buglist.cgi?chfieldfrom=7d">last 7 days</a>
        [% title = BLOCK %][% terms.Bugs %] changed in the last 7 days[% END %]
        <a href="buglist.cgi?chfieldfrom=7d&amp;ctype=atom&amp;title=[% title FILTER uri %]"
           class="rss">&nbsp;</a>
      </li>
    </ul>
  </div>

  <div class="outro">[% Hook.process('outro') %]</div>
</div>

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