Написан скрипт бронирования мест для работающих на нашем движке сайтов туристических агентств. Скрипт рассчитан на одновременную работу с ним нескольких менеджеров из нескольких офисов, расположенных в различных городах. Гарантируется корректное разрешение коллизий, возникающих при попытках одновременного бронирования одного и того же места разными менеджерами.
Live Demo бронирования мест предусматривает 3 различных уровня доступа:
Скрипт изначально писался под CMS LiveTree, поэтому для запуска в качестве отдельного ПО его придётся несколько переработать.
Возможна установка скрипта "Бронирование мест" на Ваш сайт вместе с CMS LiveTree в качестве раздела Вашего сайта с полным копированием Вашего дизайна. Пример такой работы (по заказу турагентства "Регион-Тур") можно посмотреть здесь, стоимость работ составит 6 тысяч рублей, заказать установку?
Ниже исходный код скрипта публикуется as is.
<?php /* Файл /script/mesto.php*/
chdir("..");
require_once("functions.php");
require_once("core.php");
chdir("script");
$ret=param("ret");
if($ret){ //if скрипт был вызван отдельно $locked=false; $parent=param("parent"); $parentIn=getName(getParent($parent)); $parentInType=getObjType(getParent($parent));if($parentInType=="Менеджер") $locked=$parentIn;
if(!$locked) $locked=locked($parent);
if($locked) {
?><META http-equiv=Content-Type content="text/html; charset=windows-1251">
Забронировать места невозможно потому, что автобус <? echo getName($parent); ?> сейчас редактируется пользователем "<?=$locked?>"<br />
Чтобы не потерять набранные данные, дождитесь, когда "<?=$locked?>" закончит редактирование,<br />
затем нажмите клавишу "F5" на клавиатуре и ответьте утвердительно на запрос системы о повторной отправке данных.
<?
exit;
} // if locked
$thisName=param("thisName");
$alsoName=param("alsoName");
if( !isFree($parent, $thisName) || !isFree($parent, $alsoName) ) { ?><META http-equiv=Content-Type content="text/html; charset=windows-1251"> Увы! Как минимум одно из запрошенных Вами мест уже забронировано.<br /> <a href="<? echo getHref($parent) ?>">Вернуться к бронированию мест в автобусе "<? echo getName($parent); ?>"?</a> <? exit; } // if автобус заблокирован
// иначе:
occupy($parent, $thisName);
if($alsoName!="") occupy($parent, $alsoName);
ob_end_clean(); header("Location: ".$ret); exit;
} //if скрипт был вызван отдельно и надо вернуться в точку вызова// $ID определяется в processTemplate
$parent=param("id");
$mesto=param("mesto");
if($mesto=="") {echo "Ошибка в вызове скрипта mesto.php: не указан параметр "mesto" (т.е., собственно номер места)."; exit;}
if( isFree($parent, $mesto) ) { if( !isOwner($parent) || locked($parent) ) { ?> <font color="#00a0b0">Место № <b><? echo $mesto; ?></b> свободно.</font> <? }
else { ?> <form action="script/mesto.php" method="POST"> <input type="hidden" value="<?=$parent?>" name="parent" /> <input type="hidden" value="/bus/id<?=$parent?>.htm" name="ret" /> <input type="hidden" value="<?=$mesto?>" name="thisName" /> Бронировать место <font color="#00a0b0"><b><? echo $mesto; ?></b></font><br /> <textarea name="desc" class="subminput" style="width:94%;height:40px;"></textarea><br /> а также <input type="text" name="alsoName" class="subminput" style="WIDTH: 20px; COLOR: #00a0b0;"> <input class="subminput" style="WIDTH: 30px; COLOR: #ffffff; BACKGROUND-COLOR: #00a0b0; border:0;" type="submit" value="Ok" /> </form> <? } // else владелец может забронировать
} //if свободно
else { $thisID=db1("ID", CATEGORIES, "parent=".$parent." AND name='".$mesto."'"); $desc=db1("description", CATEGORIES, "parent=".$parent." AND name='".$mesto."'"); if(!isOwner($thisID)) { ?><font color="#FF3333">Забронировано</font><? }
else { ?> <b><a href="edit.php?id=<?=$thisID?>&ref=<? echo getHref($parent); ?>" title="Редактировать информацию"><b><?=$mesto?></b></a></b> <i>(<? echo db1("owner", CATEGORIES, "parent=".$parent." AND name='".$mesto."'"); ?>)</i> [<a href="del.php?id=<?=$thisID?>" title="РАЗБРОНИРОВАТЬ МЕСТО" style="text-decoration:none;"><font color="#FF0000">X</font></a>]<br /> <? echo $desc; } // else владелец видит информацию
} //else занято
?>