<?php
/**
* Тази функция "обхожда" цялото дърво от директории
* Връща масив: 'nav' навигационната система и 'tree' карта на дървото
*/
function map_dirs($path, $level = 0)
{
$node = '';
$text = '';
global $text, $node, $tree;
$dir = $node;
if (is_dir($path))
{
if ($contents = opendir($path))// "Отваряме" директорията
{
while (($node = readdir($contents)) !== false)
{
if ($node != "." && $node != ".." && strtolower($node) != "images")
//Exclude some DIRs from the list
{
if (is_dir($path . "/" . $node)) //Взима само директориите
{
while (@!chdir($node))
// Подсигуряваме се, че сме в директорията отговаряща на $node
chdir('..');
if ($level == 0)// Добавяме някой красоти :) за да създадем просто меню
{
$img = '<img xsrc="images/star.gif" alt="">';
$node_txt = strtoupper($node);
}
else
{
$img = '<img xsrc="images/halfstar.gif" alt="">';
$node_txt = ucfirst($node);
}
for ($i = 0; $i < $level; $i++)
$text .= " ";
$text .= "nt" . '<span class="category">' . $img . '<a xhref="index.php?dir=' .
base64_encode(getcwd()) . '&mode=show">' . $node_txt . '</a></span><br>';
$tree[] = getcwd();
}
map_dirs("$path/$node", $level + 1);// За да обходим дървото изцяло имаме нужда от рекурсивна функция именно затова тази фунция вика сама себе си
}
}
}
}
$result['nav'] = $text;
$result['tree'] = $tree;
return $result;
}
/**
* Зарежда извлечения XML документ в таблица
* Връща стринг
*/
function show_deteils($deteils)
{
................
}
/**
* Въвежда книги в база данни
* Параметъра трябва да бъде масив с индекси 'BOOK0','BOOK1' и т.н....
* Echo успех или грешка
*/
function add_query($data)
{
global $db_colons;
$colons = $db_colons;
$output = '';
$id = '';
if (!is_array($data)) //Проверка
{
echo "<p><b>Невалиден ресурс! Параметъра трябва да бъде масив</b></p>";
return false;
}
for ($i = 0; $i < count($data); $i++)
{
//clear the query string
$add = '';
$add_array = '';
if (!check_array($data['BOOK' . $i]))
return false;
foreach ($data['BOOK' . $i] as $key => $value)
//Премахва всички елемнти, които не са нужни на БД
{
if (in_array(strtolower($key), $colons))
{
$add_array[] .= '`' . strtolower($key) . '` = "' . addslashes($value) . '"';
}
else
$warning = 1;
}
$num = count($add_array);
for ($y = 0; $y < $num; $y++) //Изгражда заявката за БД
{
$z = $y;
$z++;
if ($z < $num)
$add .= $add_array[$y] . ',';
else
$add .= $add_array[$y];
}
open_connection();//Отваряме връзка към БД и въвеждаме данните
$add_query = 'INSERT INTO `books` SET ' . $add;
$add_result = mysql_query($add_query) or die('There was an error: ' .
mysql_error());
$id .= mysql_insert_id() . ', ';//Изграждаме стринг с въведените ИД за информация
}
$num = count(explode(',', $id)) - 1;//Общия брой на всички въведени редове
if ($warning)
$output .= "nt" . 'Внимание: Имаше неразпознати елементи в XML файла<br>';
$output .= "nt" . 'Бяха въведени следните ID: ' . $id . ' общо ' . $num .
' rows.<br>';
return $output;
//$xml->show_xml();
}
/**
* Проверява дали XML файла има всички задължителни елемнти и че няма празни такива
* Параметър: масив
* Връща true при успех и false с предупреждение при неуспех
*/
function check_array($array)
{
global $oblig_obj;
$oblig_str = $oblig_obj;
if (!is_array($oblig_str))
return false;
foreach ($array as $key => $value)
{
$value = trim($value);
if (empty($array[$key])) //Проверка дали елемента е празен
{
echo "<p><b>Празен елемент '$key'. Проверете XML файла.</b></p>";
return false;
}
}
for ($i = 0; $i < count($oblig_str); $i++)
{
if (!array_key_exists($oblig_str[$i], $array))
//Проверява за съществуването на задължителните полета, които са указани в config.php
{
echo "<p><b>Грешка в XML файла: Парсърът откри липсващ елемент '$oblig_str[$i]'.</b></p>";
return false;
}
}
return true;
}
/**
* Отваря връзка към ДБ
*/
function open_connection()
{
................
}
/**
* Зарежда всички XMLфайлове, които са налични в дървото от директории
* Parameters: масива генериран от map_dirs() и името на файла
* Return: стринг със съдържанието на всички XMl файлове
*/
function load_all($nav, $filename)
{
for ($i = 0; $i < count($nav['tree']); $i++)
// събира всички XML файлове в един стринг
{
if (@!($string .= file_get_contents($nav['tree'][$i] . '/' . $filename)))
echo '<p>Внимание има директория без XML <b>' . $filename . '</b>!';
}
$tok = strtok($string, "nt");// Раздробява получения стринг по нови редове
while ($tok !== false)
{
$add[] = $tok;
$tok = strtok(" nt");
}
//Ще премахнем някой елемнти от стринга за да избегнем повторение
$replace = array('<?xml version="1.0" encoding="UTF-8"?>',
'<?xml version="2.0" encoding="UTF-8"?>', '<bookContainer>', '</bookContainer>');
for ($i = 0; $i < count($replace); $i++)
$string = str_ireplace($replace[$i], '', $string);
$string = $add[0] . $add[1] . $string . $add[count($add) - 1];//задаваме начало и край н ановополучения XML файл
return $string;
}
?>