<!--
 NextCloudPi Web Backups Panel

 Copyleft 2019 by Ignacio Nunez Hernanz <nacho _a_t_ ownyourbits _d_o_t_ com>
 GPL licensed (see end of file) * Use at your own risk!

 More at https://nextcloudpi.com
-->
<?php

$bkp_cfg      = file_get_contents('/usr/local/etc/ncp-config.d/nc-backup.cfg')      or exit('backup config not found');
$bkp_auto_cfg = file_get_contents('/usr/local/etc/ncp-config.d/nc-backup-auto.cfg') or exit('backup config not found');

$bkp_json      = json_decode($bkp_cfg     , true) or exit('invalid format');
$bkp_auto_json = json_decode($bkp_auto_cfg, true) or exit('invalid format');

$bkp_dir      = $bkp_json['params'][0]['value'];
$bkp_auto_dir = $bkp_auto_json['params'][1]['value'];

$bkps = array();
$bkps_auto = array();

function filesize_compat($file)
{
  if(PHP_INT_SIZE === 4) # workaround for 32-bit architectures
    return trim(shell_exec("stat -c%s " . escapeshellarg($file)));
  else
    return filesize($file);
}

if (file_exists($bkp_dir))
{
  $bkps = array_diff(scandir($bkp_dir), array('.', '..'));
  $bkps = preg_filter('/^/', $bkp_dir. '/', $bkps);
}

if (file_exists($bkp_auto_dir))
{
  $bkps_auto = array_diff(scandir($bkp_auto_dir), array('.', '..'));
  $bkps_auto = preg_filter('/^/', $bkp_auto_dir . '/', $bkps_auto);
}

$bkps = array_unique(array_merge($bkps, $bkps_auto));

if (!empty($bkps))
{
echo <<<HTML
  <div id="backups-table">
  <table class="dashtable backuptable">
  <th>Date</th><th>Size</th><th>Compressed</th><th>Data</th><th></th>
HTML;

  $cache_file = '/var/www/ncp-web/backup-info-cache.cfg';
  if (file_exists($cache_file)) {
    $cache_str = file_get_contents($cache_file)
      or exit("error opening ${cache_file}");

    $cache = json_decode($cache_str, true) or [];
  } else {
    $cache = [];
  }
  foreach ($bkps as $bkp) {
    $extension = pathinfo($bkp, PATHINFO_EXTENSION);
    if ($extension === "tar" || $extension === "gz")
    {
      $compressed = "";
      if ($extension === "gz")
        $compressed = '✓';

      $date = date("Y M d  @ H:i", filemtime($bkp));
      $size = round(filesize_compat($bkp)/1024/1024) . " MiB";

      $has_data = '';
      $ret = null;

      if (array_key_exists($bkp, $cache)) {
        $ret = $cache[$bkp];
        $cache_new[$bkp] = $ret;
      }

      if ($ret === null)
      {
        exec("sudo /home/www/ncp-backup-launcher.sh bkp " . escapeshellarg($bkp) . " \"$compressed\"", $output, $ret);
        $cache_new[$bkp] = $ret;
      }
      if ($ret == 0)
        $has_data = '✓';

      echo <<<HTML
      <tr id="$bkp">
        <td class="long-field" title="$bkp">$date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
        <td class="val-field">$size</td>
        <td class="ok-field align-center">$compressed</td>
        <td class="ok-field align-center">$has_data</td>
        <td>
            <img class="hidden-btn default-btn download-bkp" title="download" src="../img/download.svg">
            <img class="hidden-btn default-btn delete-bkp"   title="delete"   src="../img/delete.svg">
            <img class="hidden-btn default-btn restore-bkp"  title="restore"  src="../img/defaults.svg">
        </td>
      </tr>
HTML;
      echo '<input type="hidden" name="csrf-token" value="' . getCSRFToken() . '"/>';
    }
  }
  $cache_str = json_encode($cache_new)
    or exit('internal error');

  file_put_contents($cache_file, $cache_str)
    or exit("error writing ${cache_file}");
echo <<<HTML
    </table>
  </div>
HTML;
} else {
  echo "<div>No backups found.</div>";
}
?>

</br></br>
<h2 class="text-title">Restore from file</h2>
<form action="upload.php" method="POST" enctype="multipart/form-data">
  <div class="restore-upload-btn-wrapper">
      <input type="file" name="backup" id="restore-upload" accept=".tar,.tar.gz"/>
      <input id="restore-upload-btn" type="submit" value="Restore"/>
  </div>
</form>
</br></br>

<h2 class="text-title"><?php echo $l->__("Snapshots"); ?></h2>

<?php

include( '/var/www/nextcloud/config/config.php' );

$snap_dir = realpath($CONFIG['datadirectory'] . '/../ncp-snapshots');
$snaps = array();
if (file_exists($snap_dir))
{
  $snaps = array_diff(scandir($snap_dir), array('.', '..'));
  $snaps = preg_filter('/^/', $snap_dir . '/', $snaps);
}

if (!empty($snaps))
{
echo <<<HTML
  <div id="snapshots-table">
  <table class="dashtable backuptable">
HTML;
  foreach ($snaps as $snap)
  {
    exec("sudo /home/www/ncp-backup-launcher.sh chksnp " . escapeshellarg($snap), $out, $ret);
    if ($ret == 0)
    {
      $snap_name = basename($snap);
      echo <<<HTML
      <tr id="$snap">
        <td class="text-align-left" title="$snap">$snap_name</td>
        <td>
            <img class="hidden-btn default-btn delete-snap"   title="delete"   src="../img/delete.svg">
            <img class="hidden-btn default-btn restore-snap"  title="restore"  src="../img/defaults.svg">
        </td>
      </tr>
HTML;
    }
  }
echo <<<HTML
    </table>
  </div>
HTML;
} else {
  echo "<div>No snapshots found.</div>";
}
?>

<!--
 License

 This script is free software; you can redistribute it and/or modify it
 under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.

 This script is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this script; if not, write to the
 Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 Boston, MA  02111-1307  USA
-->
