<?php

require_once dirname(__FILE__) . '/../api/const.php';
require_once dirname(__FILE__) . '/../api/utils.php';
include dirname(__FILE__) . '/../api/dbconfig.php';

$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);

$dbh->query('BEGIN');

$sql0 = "SELECT u.member_id,ftp.dir,IFNULL(q.files,0) as f,IFNULL(q.size,0) as s,q.modified as m, q.last_update as t FROM ftp INNER JOIN userdata as u ON u.id=ftp.id LEFT OUTER JOIN ftpquota as q ON q.id=u.member_id WHERE ftp.del_flg='0'";
$stmt0 = $dbh->prepare($sql0);

$sql1 = "INSERT IGNORE INTO ftpquota (id,files,size,modified,ins_log,ins_date) values (:id,:f,:s,:m,'check_quota.php',NOW())";
$stmt1 = $dbh->prepare($sql1);

$sql2 = "UPDATE ftpquota SET files=:f,size=:s,modified=:m,upd_log='check_quota.php',upd_date=NOW() WHERE id=:id";
$stmt2 = $dbh->prepare($sql2);

$stmt0->execute();
while(($row=$stmt0->fetch(PDO::FETCH_ASSOC)) !== false) {
	$id = $row['member_id'];
	$f  = $row['f'];
	$s  = $row['s'];
        $m  = $row['m'];
	$file = $row['dir'] . '/.ftpquota';
	$params = array(':id' => $id, ':f' => 0, ':s' => 0, ':m' => NULL);
	if (file_exists($file)) {
		$d = file_get_contents($file);
		$cols = explode(' ',trim($d));
		$params[':f'] = $cols[0];
		$params[':s'] = $cols[1];
		$params[':m'] = date('Y-m-d H:i:s',filemtime($file));
	}
	if (!($f == $params[':f'] && $s == $params[':s'] && $m == $params[':m'])) {
		$stmt1->execute($params);
		$stmt2->execute($params);
	}
}

$sql3 = <<<EOF
UPDATE
  userdata as u
INNER JOIN
  ftpquota as f
ON
  f.id = u.member_id
INNER JOIN
  capacity_master as c
ON
  c.id=u.capacity
AND
  c.del_flg='0'
SET
  u.ftp_lastupdate = CASE
    WHEN u.use_data < c.capacity THEN f.last_update
    ELSE u.ftp_lastupdate
    END,
  u.file = f.files,
  u.use_data = f.size,
  u.upd_log = 'check_quota.php',
  u.upd_date = NOW()
WHERE
  NOT (u.file = f.files AND u.use_data = f.size AND u.ftp_lastupdate = f.last_update);
EOF;

$stmt3 = $dbh->prepare($sql3);
$stmt3->execute();

$dbh->query('COMMIT');
