<?php

include dirname(__FILE__) . '/session.php';
include dirname(__FILE__) . '/dbconfig.php';
include dirname(__FILE__) . '/utils.php';

function check() {
check_session();

$options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET CHARACTER SET 'utf8'");
$dbh = new PDO(DB_DSN, DB_USER, DB_PASSWORD, $options);

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "SELECT ftp.* FROM userdata as u INNER JOIN ftp ON ftp.id=u.id AND ftp.del_flg='0' WHERE u.id=? AND u.del_flg='0'";
$stmt = $dbh->prepare($sql);
$stmt->execute(array($_SESSION['usr_id']));

$account = $stmt->fetch(PDO::FETCH_ASSOC);

$top = $account['dir'];
if (empty($top)) {
  $top = '/var/www/html';
}

if (preg_match('/([0-9]*)\/(.*)$/',trim($_SERVER['PATH_INFO'],'/'),$m)){
  $inode = $m[1];
  $pname = trim($m[2],'/');
}
$dir   = $_SESSION['dir'];
if (!empty($dir)) {
  $dir = '/' . $dir;
}

$folder = '';
if (isset($_GET['folder'])){
    $folder = $_GET['folder'];
}

$req = array( 'cmd' => 'name', 'top' => $top, 'dir' => $dir, 'inode' => $inode, 'folder' => $folder );
$contents = call_api($req);

$result = json_decode($contents,true);

$path = $result['path'];
$name = basename($path);

if ($name != urldecode($pname)) {
  echo json_encode(array('error' => _('ファイルをダウンロードできません。リロードしてやりなおしてください')));
  exit(0);
}

include dirname(__FILE__) . '/nocache.php';

if (file_exists($path)) {
   $top = rtrim($top, '/');
   $st = stat($path);
   $inodes = array($st['ino']);
   $files  = array(str_replace($top,'',$path));
   $top .= '/';
   with_lock($top, $inodes, $files, '0', function() use($dbh, $path, $name, $top, $inodes) {
     $pass  = bin2hex(openssl_random_pseudo_bytes(8));

     $params = json_encode(array(
       'name'   => '"' . urlencode($name) . '"',
       'path'   => $path,
       'top'    => $top,
       'inodes' => $inodes,
       'pass'   => $pass
     ));

     $sql  = "INSERT INTO download (params) VALUES (?)";
     $stmt = $dbh->prepare($sql);
     $stmt->execute(array($params));
     $stmt = $dbh->prepare("SELECT LAST_INSERT_ID() as id");
     $stmt->execute();
     $row = $stmt->fetch(PDO::FETCH_ASSOC);
     $id  = $row['id'];

     setcookie('GRMONEDL', $pass, 0, '/');

     echo json_encode(array('url' => '/cgi-bin/download.cgi/' . $id . '/' . $name ));
   }, function() {
     echo json_encode(array('error' => _('アップロード中のためダウンロードできません。')));
   });
} else {
  echo json_encode(array('error' => _('ファイルをダウンロードできません。リロードしてやりなおしてください')));
}

}

wrap('check');

