<?php

error_reporting
(E_ERROR);

/**************************************************
 *               Н А С Т Р О Й К И                *
 **************************************************/

/* Хеш пользователя. */
$user_hash 'userhash';

/* Сервер базы данных. */
$db_host 'localhost';

/* Имя пользователя базы данных. */
$db_user 'root';

/* Пароль пользователя базы данных. */
$db_pass 'password';

/* Имя базы данных. */
$db_name 'dbname';

/*
 * Текст запроса к базе данных.
 *
 * Важно сохранить алиасы полей, так как они далее будут использоваться
 * в скрипте. Также запрос должен возвращать все поля, но значения этих
 * полей могут быть пустыми.
 *
 * Ниже приведен список необходимых полей и их значения.
 *
 * title            Название компонента.
 * category         Категория.
 * description      Описание компонента.
 * manufacture      Производитель (бренд).
 * price_opt        Оптовая цена (число).
 * price_opt_cur    Валюта оптовой цены ("rur", "usd" или "eur").
 * price_roz        Розничная цена (число).
 * price_roz_cur    Валюта розничной цены ("rur", "usd" или "eur").
 * mfgdate          Год производства (напр., 1997).
 * docs             Ссылка на документацию (напр., "http://mysite.ru/doc.pdf").
 * comp_url         Ссылка на страницу компонента (напр., "http://mysite.ru/comp.html").
 * stock            Если N=-1, то "скрыть склад";
 *                  если N>0, то это кол-во на складе;
 *                  если N=0, то позиция не складская.
 * delivery         Если N=-1, то "скрыть кол-во недель для поставки";
 *                  если N>0, то это кол-во недель для поставки;
 *                  если N=0, то позиция не на заказ.
 */
$query_string '
    SELECT
      tbl.title AS title,
      tbl.category AS category,
      tbl.text AS description,
      brand.title AS manufacture,
      tbl.price_opt AS price_opt,
      "rur" AS price_opt_cur,
      tbl.price AS price_roz,
      "rur" AS price_roz_cur,
      "" AS mfgdate,
      tbl.pdf_remote AS docs,
      "" AS comp_url,
      tbl.stock AS stock,
      -1 AS delivery
    FROM
      catalog_component AS tbl
      INNER JOIN catalog_brand AS brand ON tbl.brand_id = brand.id
'
;


// ****************************************************************************

/*
 * Проверка загруженности сервера
 */
sleep_overload(1.0);

/*
 * Подключение к базе данных
 */
$connection mysqli_connect($db_host$db_user$db_pass$db_name);

if (!
$connection)
{
    die(
'Ошибка подключения к базе данных: ' mysqli_connect_error());
}

mysqli_query($connection'SET NAMES utf8');


/*
 * Выполнение запроса к базе данных
 */
$query mysqli_real_query($connection$query_string);

if (!
$query)
{
    die(
'Ошибка запроса к базе данных: ' mysqli_error($connection));
}

$result mysqli_use_result($connection);


/*
 * Формирование заголовка XML файла
 */
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private'false);
header('Content-Type: text/xml');
header('Content-Disposition: attachment; filename=' $user_hash '.xml');

echo 
'<?xml version="1.0" encoding="utf-8" standalone="yes"?>';

?>

<price>
    <header>
        <hash><?php echo $user_hash?></hash>
        <action>sale</action>
        <status>all</status>
        <uploadtype>replace</uploadtype>
    </header>
    <data>
        <?php


        
/*
         * Обработка результатов запроса
         */
        
$_cnt 0;
        while (
$row mysqli_fetch_assoc($result))
        {
            
$_cnt++;
            if (
$_cnt 1000 == 0)
            {
                
sleep_overload(1.0);
            }
            
?>

            <item>
                <title><![CDATA[<?php echo $row['title']; ?>]]></title>
                <category><![CDATA[<?php echo $row['category']; ?>]]></category>
                <description><![CDATA[<?php echo $row['description']; ?>]]></description>
                <manufacture><![CDATA[<?php echo $row['manufacture']; ?>]]></manufacture>
                <price type="opt" currency="<?php echo $row['price_opt_cur']; ?>"><?php echo (float)$row['price_opt']; ?></price>
                <price type="roz" currency="<?php echo $row['price_roz_cur']; ?>"><?php echo (float)$row['price_roz']; ?></price>
                <mfgdate><?php echo $row['mfgdate']; ?></mfgdate>
                <docs><![CDATA[<?php echo $row['docs']; ?>]]></docs>
                <comp_url><![CDATA[<?php echo $row['comp_url']; ?>]]></comp_url>
                <stock><?php echo (int)$row['stock']; ?></stock>
                <delivery><?php echo (int)$row['delivery']; ?></delivery>
            </item>
        <?php
        
}


        
/*
         * Окончание файла
         */
        
?>

    </data>
</price>

<?php

function sleep_overload($max_load 1.0)
{
    while(
true)
    {
        
$load sys_getloadavg();

        if (
$load[0] >= $max_load)
        {
            
sleep(1);
        }
        else
        {
            break;
        }
    }

    return 
true;
}