<?php
/*******************************************************************************
 * Copyright (c) 2015, 2016 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Eric Poirier (Eclipse Foundation) - initial API and implementation
 *    Christopher Guindon (Eclipse Foundation)
 *******************************************************************************/
if(!is_a($this, 'Firewall') || !$this->Friend->checkUserIsWebmaster()){
  exit();
}
$recent_blocks = $this->getRecentBlocks();
$search_results = $this->getSearchResults();
?>
<div class="container padding-top-25 padding-bottom-25">
  <div id="maincontent">
    <div id="midcolumn">
      <h1><?php print $pageTitle; ?></h1>
      <!-- Nav tabs -->
      <ul class="nav nav-tabs" role="tablist">
        <li role="presentation" class="active">
          <a href="#firewall-recent-block" aria-controls="firewall-recent-block" role="tab" data-toggle="tab">Recent Blocks</a>
        </li>
        <li role="presentation">
          <a href="#firewall-insert-block" aria-controls="firewall-insert-block" role="tab" data-toggle="tab">Insert a Block</a>
        </li>
        <li role="presentation">
          <a href="#firewall-search-block" aria-controls="firewall-search-block" role="tab" data-toggle="tab">Search</a>
        </li>
      </ul>

      <!-- Tab panes -->
      <div class="tab-content">
        <div role="tabpanel" class="tab-pane active" id="firewall-recent-block">
          <p><strong>Show last:</strong></p>
          <form action="<?php print $this->getFormActionUrl();?>#firewall-recent-block" method="POST">
            <input type="hidden" name="form_name" value="webmaster-firewall">

            <div class="form-group">
              <label class="radio-inline">
                <input type="radio" name="period" value="12"> 12 hours
              </label>
              <label class="radio-inline">
                <input type="radio" name="period" value="24"> 24 hours
              </label>
              <label class="radio-inline">
                <input type="radio" name="period" value="48"> 48 hours
              </label>
              <label class="radio-inline">
                <input type="radio" name="period" value="72"> 72 hours
              </label>
            </div>
            <input type="hidden" name="state" value="change_recent_blocks_period">
            <input type="submit" class="btn btn-primary" value="Change">
          </form>
          <?php if (!empty($recent_blocks)):?>
            <hr>
            <?php if (is_array($recent_blocks)): ?>
            <table class="table table-stripped">
              <thead>
                <tr>
                  <th>Subnet</th>
                  <th>Port</th>
                  <th>UserID</th>
                  <th>Reporting Node</th>
                  <th>Inserted</th>
                  <th>Expires</th>
                  <th>Delete</th>
                </tr>
              </thead>
              <tbody>

                <?php foreach ($recent_blocks as $recent_block): ?>
                <tr>
                  <td><?php print $recent_block['Subnet']; ?></td>
                  <td><?php print $recent_block['Port']; ?></td>
                  <td><?php print $recent_block['UserID']; ?></td>
                  <td><?php print $recent_block['VictimNode']; ?></td>
                  <td><?php print $recent_block['AttackDateTime']; ?></td>
                  <td><?php print $recent_block['ExpiryDateTime']; ?></td>
                  <td>
                    <form action="<?php print $this->getFormActionUrl();?>" method="POST">
                      <input type="hidden" name="form_name" value="webmaster-firewall">
                      <input type="hidden" name="state" value="delete_block">
                      <input type="hidden" name="subnet_to_delete" value="<?php print $recent_block['Subnet']; ?>">
                      <input type="submit" class="btn btn-default btn-xs" value="DELETE">
                    </form>
                  </td>
                </tr>
                <?php endforeach; ?>
              </tbody>
            </table>
            <?php else: ?>
              <tr>
                <td colspan="7"><?php print $recent_blocks; ?></td>
              </tr>
            <?php endif; ?>
          <?php endif; ?>
        </div>

        <div role="tabpanel" class="tab-pane" id="firewall-insert-block">
          <form class="form-horizontal" method="POST" action="<?php print $this->getFormActionUrl();?>#firewall-insert-block">
            <input type="hidden" name="form_name" value="webmaster-firewall">
            <div class="form-group">
              <label for="inputEmail3" class="col-sm-2 control-label">IP:<span class="required">*</span></label>
              <div class="col-sm-10">
                <input type="text" class="form-control" name="insert_block_ip" placeholder="IP Address">
              </div>
            </div>
            <div class="form-group">
              <label for="inputPassword3" class="col-sm-2 control-label">Port:</label>
              <div class="col-sm-10">
                <input type="text" class="form-control" name="insert_block_port" placeholder="Port">
              </div>
            </div>
            <div class="form-group">
              <div class="col-sm-offset-2 col-sm-10">
                <div class="radio">
                  <label><input type="radio" name="insert_block_time" value="1_day"> Block for 24 hours</label><br>
                  <label><input type="radio" name="insert_block_time" value="6_month"> Block for 6 months</label><br>
                  <label><input type="radio" name="insert_block_time" value="1_year"> Block for 1 year</label>
                </div>
              </div>
            </div>
            <div class="form-group">
              <div class="col-sm-offset-2 col-sm-10">
                <input type="hidden" name="state" value="insert_block">
                <button type="submit" class="btn btn-primary">Block</button>
              </div>
            </div>
          </form>
        </div>

        <div role="tabpanel" class="tab-pane" id="firewall-search-block">
          <form method="POST" action="<?php print $this->getFormActionUrl();?>#firewall-search-block">
            <input type="hidden" name="form_name" value="webmaster-firewall">
            <div class="form-group">
              <input type="search" placeholder="Search for IP/Subnet" name="search_block_ip" class="form-control">
            </div>
            <input type="hidden" name="state" value="search_block">
            <input type="submit" class="btn btn-primary">
          </form>
          <?php if (!empty($search_results)): ?>
            <hr>
            <h3>Search Results</h3>
            <table class="table">
              <thead>
                <tr>
                  <th>Subnet</th>
                  <th>Port</th>
                  <th>UserID</th>
                  <th>VictimNode</th>
                  <th>AttackDateTime</th>
                  <th>ExpiryDateTime</th>
                </tr>
              </thead>
              <tbody>
                <?php foreach ($search_results as $result): ?>
                  <tr>
                    <?php if (!empty($result['no_results'])): ?>
                      <td colspan="5"><?php print $result['no_results']; ?></td>
                    <?php else: ?>
                      <td><?php print $result['Subnet']; ?></td>
                      <td><?php print $result['Port']; ?></td>
                      <td><?php print $result['UserID']; ?></td>
                      <td><?php print $result['VictimNode']; ?></td>
                      <td><?php print $result['AttackDateTime']; ?></td>
                      <td><?php print $result['ExpiryDateTime']; ?></td>
                    <?php endif; ?>
                  </tr>
                <?php endforeach; ?>
              </tbody>
            </table>
          <?php endif; ?>
        </div>
      </div>
    </div>
    <div id="rightcolumn">
      <?php include "sidebar.tpl.php" ?>
    </div>
  </div>
</div>