<?php
/**
 * @package tikiwiki
 */
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id: tiki-admin_credits.php 67127 2018-08-07 06:15:22Z chibaguy $

require_once 'tiki-setup.php';
$creditslib = TikiLib::lib('credits');
//get_strings tra('Admin credits')

if ($tiki_p_admin_users != 'y') {
	$smarty->assign('msg', tra('You do not have the permission that is needed to use this feature'));
	$smarty->display('error.tpl');
	die;
}

if (isset($_REQUEST['use_credit']) && $use_credit_userid = $tikilib->get_user_id($_POST['userfilter'])) {
	$creditslib->useCredits(
		$use_credit_userid,
		$_POST['use_credit_type'],
		$_POST['use_credit_amount']
	);

	header('Location: tiki-admin_credits.php?userfilter=' . urlencode($_REQUEST['userfilter']));
	exit;
}

if (isset($_REQUEST['restore_credit']) && $restore_credit_userid = $tikilib->get_user_id($_POST['userfilter'])) {
	$creditslib->restoreCredits(
		$restore_credit_userid,
		$_POST['restore_credit_type'],
		$_POST['restore_credit_amount']
	);

	header('Location: tiki-admin_credits.php?userfilter=' . urlencode($_REQUEST['userfilter']));
	exit;
}

if (isset($_REQUEST['purge_credits'])) {
	$creditslib->purgeCredits();
	header('Location: tiki-admin_credits.php');
	exit;
}

if (isset($_REQUEST['update_types'])) {
	foreach ($_POST['credit_types'] as $key => $values) {
		$creditslib->updateCreditType(
			$values['credit_type'],
			$values['display_text'],
			$values['unit_text'],
			$values['is_static_level'],
			$values['scaling_divisor']
		);
	}

	if (! empty($_POST['new_credit_type'])) {
		$creditslib->updateCreditType(
			$_POST['new_credit_type'],
			$_POST['display_text'],
			$_POST['unit_text'],
			$_POST['is_static_level'],
			$_POST['scaling_divisor']
		);
	}
}

$creditTypes = $creditslib->getCreditTypes();
$staticCreditTypes = $creditslib->getCreditTypes(true);
$smarty->assign('credit_types', $creditTypes);
$smarty->assign('static_credit_types', $staticCreditTypes);

if (isset($_REQUEST['userfilter'])) {
	$smarty->assign('userfilter', $_REQUEST['userfilter']);

	$editing = $userlib->get_user_info($_REQUEST['userfilter']);

	if ($editing) {
		$userPlans = [];
		foreach ($creditTypes as $ct => $v) {
			$userPlans[$ct]['nextbegin'] = $creditslib->getNextPlanBegin($editing['userId'], $ct);
			$userPlans[$ct]['currentbegin'] = $creditslib->getLatestPlanBegin($editing['userId'], $ct);
			$userPlans[$ct]['expiry'] = $creditslib->getPlanExpiry($editing['userId'], $ct);
		}
		$smarty->assign('userPlans', $userPlans);

		$credits = $creditslib->getRawCredits($editing['userId']);
		$smarty->assign('credits', $credits);
		$smarty->assign('editing', $editing);

		// Get usage information

		// date values
		if (isset($_REQUEST['startDate_Year']) || isset($_REQUEST['endDate_Year'])) {
			$smarty->assign(
				'startDate',
				$tikilib->make_time(0, 0, 0, $_REQUEST['startDate_Month'], $_REQUEST['startDate_Day'], $_REQUEST['startDate_Year'])
			);

			$smarty->assign(
				'endDate',
				$tikilib->make_time(23, 59, 59, $_REQUEST['endDate_Month'], $_REQUEST['endDate_Day'], $_REQUEST['endDate_Year'])
			);

			$start_date = $_REQUEST['startDate_Year'] . '-' . $_REQUEST['startDate_Month'] . '-' . $_REQUEST['startDate_Day'];
			$end_date = $_REQUEST['endDate_Year'] . '-' . $_REQUEST['endDate_Month'] . '-' . $_REQUEST['endDate_Day'] . ' 23:59:59';
		} else {
			$start_date = $tikilib->now - 3600 * 24 * 30;
			$smarty->assign('startDate', $start_date);
			$end_date = date('Y-m-d 23:59:59');
		}

		$req_type = $_REQUEST['action_type'];
		$smarty->assign('act_type', $req_type);

		$consumption_data = $creditslib->getCreditsUsage($editing['userId'], $req_type, $start_date, $end_date);
		$smarty->assign('consumption_data', $consumption_data);

		if (isset($_POST['save'], $_POST['credits'])) {
			foreach ($_POST['credits'] as $key => $values) {
				if (! isset($credits[$key])) {
					die('Mismatch');
				}

				$same = true;
				$current = $credits[$key];
				foreach ($current as $field => $value) {
					if ($field != 'creditId' && $value != $values[$field]) {
						$same = false;
						break;
					}
				}

				if (! $same) {
					$creditslib->replaceCredit(
						$key,
						$values['credit_type'],
						$values['used_amount'],
						$values['total_amount'],
						$values['creation_date'],
						$values['expiration_date']
					);
				}
			}

			if (! empty($_POST['credit_type'])
						&& ! empty($_POST['total_amount'])
						&& in_array($_POST['credit_type'], array_keys($creditTypes))
			) {
				$creditslib->addCredits(
					$editing['userId'],
					$_POST['credit_type'],
					$_POST['total_amount'],
					$_POST['expiration_date'],
					$_POST['creation_date']
				);
			}

			header('Location: tiki-admin_credits.php?userfilter=' . urlencode($_REQUEST['userfilter']));
			exit;
		}

		if (! empty($_POST['credit_type']) && ! empty($_POST['total_amount'])) {
			$creditslib->addCredits(
				$editing['userId'],
				$_POST['credit_type'],
				$_POST['total_amount'],
				$_POST['expiration_date'],
				$_POST['creation_date']
			);

			header('Location: tiki-admin_credits.php?userfilter=' . urlencode($_REQUEST['userfilter']));
			exit;
		}

		if (isset($_POST['confirm'], $_POST['delete'])) {
			foreach ($_POST['delete'] as $creditId) {
				if (isset($credits[$creditId])) {
					$creditslib->removeCreditBlock($creditId);
				}
			}

			header('Location: tiki-admin_credits.php?userfilter=' . urlencode($_REQUEST['userfilter']));
			exit;
		}
	}
}

$smarty->assign('mid', 'tiki-admin_credits.tpl');
$smarty->display('tiki.tpl');
