<?php
/**
* Что делает скрипт?
* База данных:
* - Есть таблица с кредиторами и дебеторами (organizations)
* - Есть таблица с суммами и датами кредитов/займов (operations)
*
* Скрипт умеет управлять операциями
* - добавлять кредит или займ (баланс предприятия при этом минусуется и плюсуется, соответственно)
* - соединяет списки операций с кредиторами-дебеторами (чтобы в единой таблице видеть куда ушли деньги)
*/
// Подключение шаблона
include 'template/index.html';
function center() {
switch ($_GET['action']) {
case 'showTransactions' : // Список транзакций
echo getTransactions();
break;
case 'addTransaction' : // Проведение транзакции
echo addTransaction();
break;
case 'addOrganization': // Добавление организаии
echo addOrganization();
break;
case 'deleteTransaction':
echo deleteTransaction();
break;
case 'updateOrganization':
echo updateOrganization();
break;
default : // Показ списка действий
echo getTransactions();
break;
}
}
function executeQuery($queryString) {
/**
* Переменная инициализируется только один раз
* при последующих вызовах она сохраняет своё значение
* несмотря ни на что.
*/
static $dbLink = null;
/**
* Если переменная пуста - присиваиваем ей значение,
* соответствующее открытому соединению
* к базе данных MySQL
*/
if(is_null($dbLink)) {
$dbLink = mysql_connect('localhost', 'root', null);
mysql_select_db('task');
}
/**
* Возвращаем идентификатор результата запроса
*/
// echo 'Query: '.$queryString;
$r = mysql_query($queryString) or die(mysql_error());
return $r;
}
function getTransactions() {
/**
* Генерируем запрос на получение данных
* если присутствует GET-параметр organization - вставляем его в запрос
*/
$queryString = 'SELECT *
FROM operations OPS
JOIN organizations ORGS
ON OPS.id_organization = ORGS.id_organization ';
if(isset($_GET['organization'])) {
// Принудительно приводим $_GET['organization'] к целому типу данных
$queryString .= ' WHERE OPS.id_organization = '. (int) $_GET['organization'];
}
// Исполняем запрос
$result = executeQuery($queryString);
// Инициализируем строку, которую будем отдавать
$outputHTML = '<a href="?action=addTransaction">Добавить операцию</a><hr /><br />';
// Инициализируем каунтер баланса
$totalSumm = 0;
// Если нет записей - возвращаем текст о том, что нет таких операций
if(!$result) {
return $outputHTML .= 'Нет доступных операций';
}
// Поскольку есть результат - будем выводить таблицу
$outputHTML .= '<table>
<tr>
<td style="width: 25px;">#</td>
<td style="width: 65px;">Удаление</td>
<td style="width: 250px;">Организация</td>
<td style="width: 150px;">Сумма</td>
<td style="width: 150px;">Дата</td>
</tr>';
while ($row = mysql_fetch_assoc($result)) {
$outputHTML .= sprintf('<tr>
<td>%d </td>
<td><a href="?action=deleteTransaction&id=%d">[del]</a></td>
<td>
<a href="?action=showTransactions&organization=%d">%s</a>
<a href="?action=updateOrganization&id=%d">[edit]</a>
</td>
<td>%s</td>
<td>%s</td>
</tr>',
$row['id_operation'],
$row['id_operation'],
$row['id_organization'],
$row['name'],
$row['id_organization'],
($row['summ'] < 0 ? '<span style="color:red;">'.$row['summ'].'</span>' : $row['summ']),
date('Y-m-d H:i', $row['date'])
);
$totalSumm += $row['summ'];
}
return $outputHTML . ' <tr>
<td> </td>
<td> </td>
<td> </td>
<td>Баланс: '.$totalSumm.'</td>
<td> </td>
</tr>
</table>';
}
function getActions() {
echo '<ul>
<li><a href="#">Главная страница</a></li>
<li><a href="?action=addOrganization">Добавить организацию</a></li>
<li><a href="?action=showTransactions">Список операций</a></li>
</ul>';
}
function addTransaction() {
if(sizeof($_POST)) {
/**
* Если данные переданы - заносим в базу
*/
if(!$_POST['date']) {
$_POST['date'] = time();
}
/**
* Проверка на ноль суммы
*/
if(! (int) $_POST['summ']) {
return '<b style="color:red;">Ошибка!</b> Сумма не может быть равна нулю (либо введен тип данных, неидентичный типу int)<br />
<a href="?action=showTransactions">Вернитесь к списку транзакций.</a>';
}
$queryString = 'INSERT INTO operations (`id_organization`, `summ`, `date`)
VALUES ("'.$_POST['id_organization'].'", "'.$_POST['summ'].'", "'.$_POST['date'].'")';
if(executeQuery($queryString)) {
return 'Запись успешно добавлена.<br />
<a href="?action=showTransactions">Вернитесь к списку транзакций.</a>';
}
}
return '<form action="?action=addTransaction" method="POST">
<table>
<tr>
<td>Сумма транзакции</td>
<td><input type="text" name="summ" /></td>
</tr>
<tr>
<td>Организация</td>
<td>'.getOrganizationsSelect().'</td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Создать операцию"/></td>
</tr>
</table>
</form>';
}
function addOrganization() {
if(sizeof($_POST)) {
$queryString = 'INSERT INTO organizations (`name`) VALUES ("'.htmlspecialchars($_POST['name']).'")';
if(executeQuery($queryString)) {
return 'Организация успешно добавлена!<br />
Вернитесь к <a href="?action=showTransactions">списку транзакций</a> или <a href="?action=addOrganization">добавьте еще одну организацию</a>';
}
}
return '<form action="?action=addOrganization" method="POST">
<table>
<tr>
<td>Имя организации</td>
<td><input type="text" name="name" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Добавить" /></td>
</tr>
</table>
</form>';
}
function getOrganizationsSelect() {
$select = '<select name="id_organization">';
foreach (getOrganizations() as $id => $orgDetails) {
$select .= sprintf('<option value="%s">%s</option>',
$id,
$orgDetails['name']
);
}
return '</select>' . $select;
}
function getOrganizations() {
$queryString = 'SELECT * FROM organizations';
$orgs = array();
$result = executeQuery($queryString);
while($row = mysql_fetch_assoc($result)) {
$orgs[$row['id_organization']] = $row;
}
return $orgs;
}
function deleteTransaction() {
if(executeQuery('DELETE FROM operations WHERE id_operation = '. (int) $_GET['id'])) {
return 'Запись успешно удалена!<br />
Вернитесь к <a href="?action=showTransactions">списку транзакций</a>';
} else {
return 'Ошибка удаления транзакции!<br />
Вернитесь к <a href="?action=showTransactions">списку транзакций</a>';
}
}
function updateOrganization() {
if(sizeof($_POST)) {
if(executeQuery('UPDATE organizations SET `name`="'.$_POST['name'].'" WHERE id_organization = '. (int) $_GET['id'])) {
return 'Имя организации успешно обновлено!<br />
Вернитесь к <a href="?action=showTransactions">списку транзакций</a>';
} else {
return 'Ошибка обновления!<br />
Вернитесь к <a href="?action=showTransactions">списку транзакций</a>';
}
} else {
$result = executeQuery('SELECT * FROM organizations WHERE id_organization = '. (int) $_GET['id']);
$org = mysql_fetch_assoc($result);
return '<form action="?action=updateOrganization&id='.(int) $_GET['id'].'" method="POST">
<table>
<tr>
<td>Имя организации</td>
<td><input type="text" name="name" value="'.htmlspecialchars($org['name']).'"/></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Обновить" /></td>
</tr>
</table>
</form>';
}
}