1
Changeset 8b0a77c – MultiMag

Changeset 8b0a77c


Ignore:
Timestamp:
Jan 10, 2013, 4:09:24 PM (10 years ago)
Author:
VitalPro <VitalPro@…>
Branches:
master
Children:
2b1249e
Parents:
6d11690
Message:

Ticket #276

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • common/XMPPHP/XMLStream.php

    r6d11690 r8b0a77c  
    44 * Copyright (C) 2008  Nathanael C. Fritz
    55 * This file is part of SleekXMPP.
    6  * 
     6 *
    77 * XMPPHP is free software; you can redistribute it and/or modify
    88 * it under the terms of the GNU General Public License as published by
    99 * the Free Software Foundation; either version 2 of the License, or
    1010 * (at your option) any later version.
    11  * 
     11 *
    1212 * XMPPHP is distributed in the hope that it will be useful,
    1313 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    1414 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    1515 * GNU General Public License for more details.
    16  * 
     16 *
    1717 * You should have received a copy of the GNU General Public License
    1818 * along with XMPPHP; if not, write to the Free Software
    1919 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    2020 *
    21  * @category   xmpphp 
     21 * @category   xmpphp
    2222 * @package     XMPPHP
    2323 * @author       Nathanael C. Fritz <JID: fritzy@netflint.net>
     
    3434
    3535/** XMPPHP_Log */
    36 require_once 'Log.php';
     36
     37require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Log.php'; // BUG: по относительному пути не подключает файл и не бросает ошибку
    3738
    3839/**
    3940 * XMPPHP XML Stream
    40  * 
    41  * @category   xmpphp 
     41 *
     42 * @category   xmpphp
    4243 * @package     XMPPHP
    4344 * @author       Nathanael C. Fritz <JID: fritzy@netflint.net>
     
    196197                }
    197198        }
    198        
     199
    199200        /**
    200201         * Return the log instance
     
    205206                return $this->log;
    206207        }
    207        
     208
    208209        /**
    209210         * Get next ID
     
    296297                $this->sent_disconnect = false;
    297298                $starttime = time();
    298                
     299
    299300                do {
    300301                        $this->disconnected = false;
     
    320321                        }
    321322                } while (!$this->socket && (time() - $starttime) < $timeout);
    322                
     323
    323324                if ($this->socket) {
    324325                        stream_set_blocking($this->socket, 1);
     
    344345                $this->reconnectTimeout = $timeout;
    345346        }
    346        
     347
    347348        /**
    348349         * Disconnect from XMPP Host
     
    373374         * 0 -> only read if data is immediately ready
    374375         * NULL -> wait forever and ever
    375          * integer -> process for this amount of time 
    376          */
    377        
     376         * integer -> process for this amount of time
     377         */
     378
    378379        private function __process($maximum=0) {
    379                
     380
    380381                $remaining = $maximum;
    381                
     382
    382383                do {
    383384                        $starttime = (microtime(true) * 1000000);
     
    397398                        $updated = @stream_select($read, $write, $except, $secs, $usecs);
    398399                        if ($updated === false) {
    399                                 $this->log->log("Error on stream_select()",  XMPPHP_Log::LEVEL_VERBOSE);                               
     400                                $this->log->log("Error on stream_select()",  XMPPHP_Log::LEVEL_VERBOSE);
    400401                                if ($this->reconnect) {
    401402                                        $this->doReconnect();
     
    408409                                # XXX: Is this big enough?
    409410                                $buff = @fread($this->socket, 4096);
    410                                 if(!$buff) { 
     411                                if(!$buff) {
    411412                                        if($this->reconnect) {
    412413                                                $this->doReconnect();
     
    428429                return true;
    429430        }
    430        
     431
    431432        /**
    432433         * Process
     
    491492        /**
    492493         * XML start callback
    493          * 
     494         *
    494495         * @see xml_set_element_handler
    495496         *
     
    532533        /**
    533534         * XML end callback
    534          * 
     535         *
    535536         * @see xml_set_element_handler
    536537         *
     
    663664        public function read() {
    664665                $buff = @fread($this->socket, 1024);
    665                 if(!$buff) { 
     666                if(!$buff) {
    666667                        if($this->reconnect) {
    667668                                $this->doReconnect();
     
    693694                        $secs = floor(($maximum - $usecs) / 1000000);
    694695                }
    695                
     696
    696697                $read = array();
    697698                $write = array($this->socket);
    698699                $except = array();
    699                
     700
    700701                $select = @stream_select($read, $write, $except, $secs, $usecs);
    701                
     702
    702703                if($select === False) {
    703704                        $this->log->log("ERROR sending message; reconnecting.");
     
    711712                        return false;
    712713                }
    713                
     714
    714715                $sentbytes = @fwrite($this->socket, $msg);
    715716                $this->log->log("SENT: " . mb_substr($msg, 0, $sentbytes, '8bit'), XMPPHP_Log::LEVEL_VERBOSE);
  • web/.htaccess

    r6d11690 r8b0a77c  
     1ErrorDocument 404 "/e404.php"
     2Options -MultiViews -Indexes +FollowSymLinks +Includes
    13
    2 ErrorDocument 404 "/e404.php"
    3 Options -MultiViews
     4DirectoryIndex index.php index.shtml index.php3 index.html index.htm
     5
     6AddDefaultCharset UTF-8
     7
     8php_value display_errors 0
     9php_value display_startup_errors 0
     10php_flag short_open_tag On
     11php_value max_execution_time 600
    412
    513# Если установлен mod_revrite
  • web/core.php

    r6d11690 r8b0a77c  
    3636mb_internal_encoding("UTF-8");
    3737
    38 $c=explode('/',__FILE__);$base_path='';
    39 for($i=0;$i<(count($c)-2);$i++) $base_path.=$c[$i].'/';
     38define('__ROOT__', dirname(dirname(__FILE__)));
     39$base_path = __ROOT__;
    4040
    4141if(! include_once("$base_path/config_site.php"))
     
    792792$wikiparser->image_uri          = "/share/var/wikiphoto/";
    793793$wikiparser->ignore_images      = false;
    794 
    795 ?>
  • web/search.php

    r6d11690 r8b0a77c  
    119119                $ret="<div class='searchblock'><h1>Поиск по сайту</h1>
    120120                <form action='/search.php' method='get'>
    121                 <input type='text' name='s' value='{$this->search_str}' class='sp'> <input type='submit' value='Найти'><br>
     121                <input type='search' name='s' placeholder='Искать..' value='{$this->search_str}' class='sp' require> <input type='submit' value='Найти'><br>
    122122                <a href='/adv_search.php?s={$this->search_str}'>Расширенный поиск продукции</a>
    123123                </form>
  • web/skins/default/style.tpl

    r6d11690 r8b0a77c  
    1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    2    "http://www.w3.org/TR/html4/loose.dtd">
     1<!DOCTYPE html>
    32<html lang="ru">
    43<head>
    5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    6 <meta name="keywords" content="<!--site-meta_keywords-->">
    7 <meta name="description" content="<!--site-meta_description-->">
    8 <title><!--site-title--></title>
    9 <link rel='stylesheet' type='text/css' href='/css/global.css'>
     4        <meta charset="UTF-8">
     5        <meta name="keywords" content="<!--site-meta_keywords-->">
     6        <meta name="description" content="<!--site-meta_description-->">
     7        <title><!--site-title--></title>
    108
    11 <script type='text/javascript' src='/css/comm.js'></script>
    12 <script type='text/javascript' src='/css/core.js'></script>
    13 <script type="text/javascript" src="/css/jquery/jquery.js"></script>
    14 <script src="/css/jquery/jquery.prettyPhoto.js" type="text/javascript"></script>
    15 <link rel="stylesheet" type="text/css" href="/css/jquery/prettyPhoto.css">
    16 <link rel='stylesheet' type='text/css' href='/css/calendar.css'>
    17 <script type='text/javascript' src='/css/00000000.js'></script>
    18 <script type='text/javascript' src='/css/core0000.js'></script>
    19 <script type='text/javascript' src='/css/calendar.js'></script>
    20 <script type='text/javascript' src='/css/DateTime.js'></script>
     9        <link rel='stylesheet' href='/css/global.css'>
    2110
    22 <link rel='stylesheet' type='text/css' href='/skins/default/basic.css'>
    23 <link rel='stylesheet' type='text/css' href='/skins/default/layout.css'>
    24 <link rel='stylesheet' type='text/css' href='/skins/default/user.css'>
    25 <style type='text/css'>
    26 <!--
    27 <!--site-stylesheet-->
    28 -->
    29 </style>
    30 <link rel='icon' type='image/png' href='/favicon.ico'>
    31 <link rel='shortcut icon' type='image/png' href='/favicon.ico'>
     11        <script src='/css/comm.js'></script>
     12        <script src='/css/core.js'></script>
     13        <script src="/css/jquery/jquery.js"></script>
     14        <script src="/css/jquery/jquery.prettyPhoto.js"></script>
     15        <link rel="stylesheet" href="/css/jquery/prettyPhoto.css">
     16        <link rel='stylesheet' href='/css/calendar.css'>
     17        <script src='/css/00000000.js'></script>
     18        <script src='/css/core0000.js'></script>
     19        <script src='/css/calendar.js'></script>
     20        <script src='/css/DateTime.js'></script>
    3221
    33 <meta name='robots' content='index,follow'>
     22        <link rel='stylesheet' href='/skins/default/basic.css'>
     23        <link rel='stylesheet' href='/skins/default/layout.css'>
     24        <link rel='stylesheet' href='/skins/default/user.css'>
     25        <style>
     26        <!--
     27        <!--site-stylesheet-->
     28        -->
     29        </style>
     30        <link rel='icon' href='/favicon.ico'>
     31
     32        <meta name='robots' content='index,follow'>
    3433</head>
    3534
    36 <body><div id='wiki-wrap' class='wiki-wrap'>
     35<body>
     36
     37<div id='wiki-wrap' class='wiki-wrap'>
    3738
    3839<div id='wiki-top' class='wiki-top'>
     
    4445<h1><!--site-name--></h1>
    4546<form  action='/search.php' method='get'>
    46 <input type=hidden name=mode value='s'>Поиск: <input type='text' name='s' value='' size='17'>
     47<input type=hidden name=mode value='s'>Поиск: <input type='search' name='s' placeholder='Искать..' value='' size='17' require>
    4748<input type='submit' value='&gt;&gt;' size='7'><input type='hidden' name='action' value='search'>
    4849</form>
     
    7677
    7778
    78 </div></body>
     79</div>
     80
     81</body>
    7982</html>
    8083
  • web/vitrina.php

    r6d11690 r8b0a77c  
    11<?php
     2
    23//      MultiMag v0.1 - Complex sales system
    34//
     
    1819//
    1920
    20 include_once("core.php");
    21 include_once("include/doc.core.php");
    22 include_once("include/imgresizer.php");
     21include_once ("core.php");
     22include_once ("include/doc.core.php");
     23include_once ("include/imgresizer.php");
    2324
    2425/// Класс витрины интернет-магазина
    25 class Vitrina
    26 {
    27 var $cost_id;
    28 function __construct()
    29 {
    30         global $tmpl;
    31         if(@$_SESSION['uid'])   $res=mysql_query("SELECT `id` FROM `doc_cost` WHERE `vid`='-1'");
    32         else                    $res=mysql_query("SELECT `id` FROM `doc_cost` WHERE `vid`='1'");
    33         if(mysql_errno())       throw new MysqlException('Не удалось выбрать цену для пользователя');
    34         $this->cost_id=         mysql_result($res,0,0);
    35         if(!$this->cost_id)     $this->cost_id=1;
    36         $tmpl->SetTitle("Интернет - витрина");
    37 }
    38 /// Проверка и исполнение recode-запроса
    39 function ProbeRecode()
    40 {
    41         global $tmpl, $CONFIG;
    42         /// Обрабатывает запросы-ссылки  вида http://example.com/vitrina/ig/5.html
    43         /// Возвращает false в случае неудачи.
    44         $arr = explode( '/' , $_SERVER['REQUEST_URI'] );
    45         if(!is_array($arr))     return false;
    46         if(count($arr)<4)       return false;
    47         $block = @explode( '.' , $arr[3]);
    48         $query = @explode( '.' , $arr[4]);
    49         if(is_array($block))    $block=$block[0];
    50         else                    $block=$arr[3];
    51         if(is_array($query))    $query=$query[0];
    52         else                    $query=$arr[4];
    53         if($arr[2]=='ig')       // Индекс группы
    54         {
    55                 $this->ViewGroup($query, $block);
    56                 return true;
    57         }
    58         else if($arr[2]=='ip')  // Индекс позиции
    59         {
    60                 $this->ProductCard($block);
    61                 return true;
    62         }
    63         else if($arr[2]=='block')// Заданный блок
    64         {
    65                 $this->ViewBlock($block);
    66                 return true;
    67         }       
    68         else if($arr[2]=='ng')  // Наименование группы
    69         {
    70 
    71         }
    72         else if($arr[2]=='np') // Наименование позиции
    73         {
    74 
    75         }
    76         return false;
    77 }
    78 
    79 ///Исполнение заданной функции
    80 function ExecMode($mode)
    81 {
    82         global $tmpl, $CONFIG;
    83         $p=intval(@$_REQUEST['p']);
    84         $g=intval(@$_REQUEST['g']);
    85         if($mode=='')   // Верхний уровень. Никакая группа не выбрана.
    86         {
    87                 $this->TopGroup();
    88         }
    89         else if($mode=='group')
    90         {
    91                 $this->ViewGroup($g, $p);
    92         }
    93         else if($mode=='product')
    94         {
    95                 $this->ProductCard($p);
    96         }
    97         else if($mode=='basket')
    98         {
    99                 $this->Basket();
    100         }
    101         else if($mode=='block')
    102         {
    103                 $this->ViewBlock($_REQUEST['type']);
    104         }
    105         else if($mode=='korz_add')
    106         {
    107                 $cnt=intval(@$_REQUEST['cnt']);
    108                 if($p)
    109                 {
    110                         @$_SESSION['basket']['cnt'][$p]+=$cnt;
    111                         $tmpl->ajax=1;
    112                         if(isset($_REQUEST['j']))
     26class Vitrina {
     27        var $cost_id;
     28        function __construct() {
     29                global $tmpl;
     30                if (@ $_SESSION['uid'])
     31                        $res = mysql_query("SELECT `id` FROM `doc_cost` WHERE `vid`='-1'");
     32                else
     33                        $res = mysql_query("SELECT `id` FROM `doc_cost` WHERE `vid`='1'");
     34                if (mysql_errno())
     35                        throw new MysqlException('Не удалось выбрать цену для пользователя');
     36                $this->cost_id = mysql_result($res, 0, 0);
     37                if (!$this->cost_id)
     38                        $this->cost_id = 1;
     39                $tmpl->SetTitle("Интернет - витрина");
     40        }
     41        /// Проверка и исполнение recode-запроса
     42        function ProbeRecode() {
     43                global $tmpl, $CONFIG;
     44                /// Обрабатывает запросы-ссылки  вида http://example.com/vitrina/ig/5.html
     45                /// Возвращает false в случае неудачи.
     46                $arr = explode('/', $_SERVER['REQUEST_URI']);
     47                if (!is_array($arr))
     48                        return false;
     49                if (count($arr) < 4)
     50                        return false;
     51                $block = @ explode('.', $arr[3]);
     52                $query = @ explode('.', $arr[4]);
     53                if (is_array($block))
     54                        $block = $block[0];
     55                else
     56                        $block = $arr[3];
     57                if (is_array($query))
     58                        $query = $query[0];
     59                else
     60                        $query = $arr[4];
     61                if ($arr[2] == 'ig') // Индекс группы
    11362                        {
    114                                 $korz_cnt=count(@$_SESSION['basket']['cnt']);
    115                                 $sum=0;
    116                                 if(@$_SESSION['uid'])
    117                                         $res=mysql_query("SELECT `id` FROM `doc_cost` WHERE `vid`='-1'");
    118                                 else
    119                                         $res=mysql_query("SELECT `id` FROM `doc_cost` WHERE `vid`='1'");
    120                                 $c_cena_id=@mysql_result($res,0,0);
    121                                 if(!$c_cena_id) $c_cena_id=1;
    122                                 if(is_array($_SESSION['basket']['cnt']))
    123                                 foreach(@$_SESSION['basket']['cnt'] as $item => $cnt)
     63                        $this->ViewGroup($query, $block);
     64                        return true;
     65                } else
     66                        if ($arr[2] == 'ip') // Индекс позиции
    12467                                {
    125                                         $res=mysql_query("SELECT `id`, `name`, `cost` FROM `doc_base` WHERE `id`='$item'");
    126                                         $nx=mysql_fetch_row($res);
    127                                         $cena=GetCostPos($nx[0], 1);
    128                                         $sum+=$cena*$cnt;
    129                                 }
    130                                 echo "Товаров: $korz_cnt на $sum руб.";
    131                         }
    132                         else
     68                                $this->ProductCard($block);
     69                                return true;
     70                        } else
     71                                if ($arr[2] == 'block') // Заданный блок
     72                                        {
     73                                        $this->ViewBlock($block);
     74                                        return true;
     75                                } else
     76                                        if ($arr[2] == 'ng') // Наименование группы
     77                                                {
     78
     79                                        } else
     80                                                if ($arr[2] == 'np') // Наименование позиции
     81                                                        {
     82
     83                                                }
     84                return false;
     85        }
     86
     87        ///Исполнение заданной функции
     88        function ExecMode($mode) {
     89                global $tmpl, $CONFIG;
     90                $p = intval(@ $_REQUEST['p']);
     91                $g = intval(@ $_REQUEST['g']);
     92                if ($mode == '') // Верхний уровень. Никакая группа не выбрана.
    13393                        {
    134                                 if(getenv("HTTP_REFERER"))      header('Location: '.getenv("HTTP_REFERER"));
    135                                 $tmpl->msg("Товар добавлен в корзину!","info","<a class='urllink' href='/vitrina.php?mode=basket'>Ваша корзина</a>");
    136                         }
    137                 }
    138                 else
    139                 {
     94                        $this->TopGroup();
     95                } else
     96                        if ($mode == 'group') {
     97                                $this->ViewGroup($g, $p);
     98                        } else
     99                                if ($mode == 'product') {
     100                                        $this->ProductCard($p);
     101                                } else
     102                                        if ($mode == 'basket') {
     103                                                $this->Basket();
     104                                        } else
     105                                                if ($mode == 'block') {
     106                                                        $this->ViewBlock($_REQUEST['type']);
     107                                                } else
     108                                                        if ($mode == 'korz_add') {
     109                                                                $cnt = intval(@ $_REQUEST['cnt']);
     110                                                                if ($p) {
     111                                                                        @ $_SESSION['basket']['cnt'][$p] += $cnt;
     112                                                                        $tmpl->ajax = 1;
     113                                                                        if (isset ($_REQUEST['j'])) {
     114                                                                                $korz_cnt = count(@ $_SESSION['basket']['cnt']);
     115                                                                                $sum = 0;
     116                                                                                if (@ $_SESSION['uid'])
     117                                                                                        $res = mysql_query("SELECT `id` FROM `doc_cost` WHERE `vid`='-1'");
     118                                                                                else
     119                                                                                        $res = mysql_query("SELECT `id` FROM `doc_cost` WHERE `vid`='1'");
     120                                                                                $c_cena_id = @ mysql_result($res, 0, 0);
     121                                                                                if (!$c_cena_id)
     122                                                                                        $c_cena_id = 1;
     123                                                                                if (is_array($_SESSION['basket']['cnt']))
     124                                                                                        foreach (@ $_SESSION['basket']['cnt'] as $item => $cnt) {
     125                                                                                                $res = mysql_query("SELECT `id`, `name`, `cost` FROM `doc_base` WHERE `id`='$item'");
     126                                                                                                $nx = mysql_fetch_row($res);
     127                                                                                                $cena = GetCostPos($nx[0], 1);
     128                                                                                                $sum += $cena * $cnt;
     129                                                                                        }
     130                                                                                echo "Товаров: $korz_cnt на $sum руб.";
     131                                                                        } else {
     132                                                                                if (getenv("HTTP_REFERER"))
     133                                                                                        header('Location: ' . getenv("HTTP_REFERER"));
     134                                                                                $tmpl->msg("Товар добавлен в корзину!", "info", "<a class='urllink' href='/vitrina.php?mode=basket'>Ваша корзина</a>");
     135                                                                        }
     136                                                                } else {
     137                                                                        header('HTTP/1.0 404 Not Found');
     138                                                                        header('Status: 404 Not Found');
     139                                                                        $tmpl->msg("Номер товара не задан!", "err", "<a class='urllink' href='/vitrina.php?mode=basket'>Ваша корзина</a>");
     140                                                                }
     141                                                        } else
     142                                                                if ($mode == 'korz_adj') {
     143                                                                        $tmpl->ajax = 1;
     144                                                                        $cnt = intval(@ $_REQUEST['cnt']);
     145                                                                        if ($p) {
     146                                                                                @ $_SESSION['basket']['cnt'][$p] += $cnt;
     147                                                                                $tmpl->AddText("Товар добавлен в корзину!<br><a class='urllink' href='/vitrina.php?mode=basket'>Ваша корзина</a>");
     148                                                                        } else {
     149                                                                                header('HTTP/1.0 404 Not Found');
     150                                                                                header('Status: 404 Not Found');
     151                                                                                $tmpl->AddText("Номер товара не задан!");
     152                                                                        }
     153                                                                } else
     154                                                                        if ($mode == 'korz_del') {
     155                                                                                unset ($_SESSION['basket']['cnt'][$p]);
     156                                                                                $tmpl->msg("Товар убран из корзины!", "info", "<a class='urllink' href='/vitrina.php?mode=basket'>Ваша корзина</a>");
     157                                                                        } else
     158                                                                                if ($mode == 'korz_clear') {
     159                                                                                        unset ($_SESSION['basket']['cnt']);
     160                                                                                        $tmpl->msg("Корзина очищена!", "info", "<a class='urllink' href='/vitrina.php'>Вернутьcя на витрину</a>");
     161                                                                                } else
     162                                                                                        if ($mode == 'basket_submit') {
     163                                                                                                $tmpl->ajax = 1;
     164                                                                                                if (isset ($_SESSION['basket']['cnt']))
     165                                                                                                        if (is_array($_SESSION['basket']['cnt']))
     166                                                                                                                foreach ($_SESSION['basket']['cnt'] as $item => $cnt) {
     167                                                                                                                        $ncnt = @ $_REQUEST['cnt' . $item];
     168                                                                                                                        if ($ncnt <= 0)
     169                                                                                                                                unset ($_SESSION['basket']['cnt'][$item]);
     170                                                                                                                        else
     171                                                                                                                                $_SESSION['basket']['cnt'][$item] = round($ncnt, 3);
     172                                                                                                                        $_SESSION['basket']['comments'][$item] = @ $_REQUEST['comm' . $item];
     173                                                                                                                }
     174                                                                                                if (@ $_REQUEST['button'] == 'recalc') {
     175                                                                                                        if (getenv("HTTP_REFERER"))
     176                                                                                                                header('Location: ' . getenv("HTTP_REFERER"));
     177                                                                                                        else
     178                                                                                                                header('Location: /vitrina.php?mode=basket');
     179                                                                                                } else
     180                                                                                                        header('Location: /vitrina.php?mode=buy');
     181                                                                                        } else
     182                                                                                                if ($mode == 'buy')
     183                                                                                                        $this->Buy();
     184                                                                                                else
     185                                                                                                        if ($mode == 'makebuy')
     186                                                                                                                $this->MakeBuy();
     187                                                                                                        else
     188                                                                                                                if ($mode == 'pay')
     189                                                                                                                        $this->Payment();
     190                                                                                                                else
     191                                                                                                                        if ($mode == 'print_schet') {
     192                                                                                                                                include_once ("include/doc.nulltype.php");
     193                                                                                                                                $doc = $_SESSION['order_id'];
     194                                                                                                                                if ($doc) {
     195                                                                                                                                        $document = AutoDocument($doc);
     196                                                                                                                                        $document->PrintForm($doc, 'schet_pdf');
     197                                                                                                                                } else
     198                                                                                                                                        $tmpl->msg("Вы ещё не оформили заказ! Вернитесь и оформите!");
     199                                                                                                                        } else
     200                                                                                                                                if ($mode == 'comm_add') {
     201                                                                                                                                        require_once ("include/comments.inc.php");
     202                                                                                                                                        if (!@ $_SESSION['uid']) {
     203                                                                                                                                                if ((strtoupper($_SESSION['captcha_keystring']) != strtoupper(@ $_REQUEST['img'])) || ($_SESSION['captcha_keystring'] == '')) {
     204                                                                                                                                                        unset ($_SESSION['captcha_keystring']);
     205                                                                                                                                                        throw new Exception("Защитный код введён неверно!");
     206                                                                                                                                                }
     207                                                                                                                                                unset ($_SESSION['captcha_keystring']);
     208                                                                                                                                                $cd = new CommentDispatcher('product', $p);
     209                                                                                                                                                $cd->WriteComment(@ $_REQUEST['text'], @ $_REQUEST['rate'], @ $_REQUEST['autor_name'], @ $_REQUEST['autor_email']);
     210                                                                                                                                        } else {
     211                                                                                                                                                $cd = new CommentDispatcher('product', $p);
     212                                                                                                                                                $cd->WriteComment(@ $_REQUEST['text'], @ $_REQUEST['rate']);
     213                                                                                                                                        }
     214                                                                                                                                        $tmpl->msg("Коментарий добавлен!", "ok");
     215                                                                                                                                } else {
     216                                                                                                                                        header('HTTP/1.0 404 Not Found');
     217                                                                                                                                        header('Status: 404 Not Found');
     218                                                                                                                                        throw new Exception("Неверная опция. Возможно, вам дали неверную ссылку, или же это ошибка сайта. Во втором случае, сообщите администратору о возникшей проблеме.");
     219                                                                                                                                }
     220        }
     221
     222        // ======== Приватные функции ========================
     223        // -------- Основные функции -------------------------
     224        /// Корень каталога
     225        protected function TopGroup() {
     226                global $tmpl, $CONFIG;
     227                $tmpl->AddText("<h1 id='page-title'>Витрина</h1>");
     228                if ($CONFIG['site']['vitrina_glstyle'] == 'item')
     229                        $this->GroupList_ItemStyle(0);
     230                else
     231                        $this->GroupList_ImageStyle(0);
     232        }
     233
     234        /// Список групп / подгрупп
     235        protected function ViewGroup($group, $page) {
     236                global $tmpl, $CONFIG, $wikiparser;
     237                settype($group, 'int');
     238                settype($page, 'int');
     239                $res = mysql_query("SELECT `name`, `pid`, `desc`, `title_tag`, `meta_keywords`, `meta_description` FROM `doc_group` WHERE `id`='$group' AND `hidelevel`='0'");
     240                if (mysql_errno())
     241                        throw new MysqlException('Не удалось выбрать информацию о группе');
     242                $nxt = mysql_fetch_row($res);
     243                if (!$nxt) {
    140244                        header('HTTP/1.0 404 Not Found');
    141245                        header('Status: 404 Not Found');
    142                         $tmpl->msg("Номер товара не задан!","err","<a class='urllink' href='/vitrina.php?mode=basket'>Ваша корзина</a>");
    143                 }
    144         }
    145         else if($mode=='korz_adj')
    146         {
    147                 $tmpl->ajax=1;
    148                 $cnt=intval(@$_REQUEST['cnt']);
    149                 if($p)
    150                 {
    151                         @$_SESSION['basket']['cnt'][$p]+=$cnt;
    152                         $tmpl->AddText("Товар добавлен в корзину!<br><a class='urllink' href='/vitrina.php?mode=basket'>Ваша корзина</a>");
    153                 }
    154                 else
    155                 {
     246                        throw new Exception('Группа не найдена! Воспользуйтесь каталогом.');
     247                }
     248                if (file_exists("{$CONFIG['site']['var_data_fs']}/category/$group.jpg"))
     249                        $tmpl->AddText("<div style='float: right; margin: 35px 35px 20px 20px;'><img src='{$CONFIG['site']['var_data_web']}/category/$group.jpg' alt='$nxt[0]'></div>");
     250
     251                if ($nxt[3])
     252                        $title = $nxt[3];
     253                else
     254                        $title = $nxt[0] . ', цены, купить';
     255                if ($page > 1)
     256                        $title .= " - стр.$page";
     257                $tmpl->SetTitle($title);
     258                if ($nxt[4])
     259                        $tmpl->SetMetaKeywords($nxt[4]);
     260                else {
     261                        $k1 = array (
     262                                'купить цены',
     263                                'продажа цены',
     264                                'отзывы купить',
     265                                'продажа отзывы',
     266                                'купить недорого'
     267                        );
     268                        $meta_key = $nxt[0] . ' ' . $k1[rand(0, count($k1) - 1)] . ' интернет-магазин ' . $CONFIG['site']['display_name'];
     269                        $tmpl->SetMetaKeywords($meta_key);
     270                }
     271
     272                if ($nxt[5])
     273                        $tmpl->SetMetaDescription($nxt[5]);
     274                else {
     275                        $d1 = array (
     276                                'купить',
     277                                'заказать',
     278                                'продажа',
     279                                'приобрести'
     280                        );
     281                        $d2 = array (
     282                                'доступной',
     283                                'отличной',
     284                                'хорошей',
     285                                'разумной',
     286                                'выгодной'
     287                        );
     288                        $d3 = array (
     289                                'цене',
     290                                'стоимости'
     291                        );
     292                        $d4 = array (
     293                                'Большой',
     294                                'Широкий',
     295                                'Огромный'
     296                        );
     297                        $d5 = array (
     298                                'выбор',
     299                                'каталог',
     300                                'ассортимент'
     301                        );
     302                        $d6 = array (
     303                                'товаров',
     304                                'продукции'
     305                        );
     306                        $d7 = array (
     307                                'Доставка',
     308                                'Экспресс-доставка',
     309                                'Доставка курьером',
     310                                'Почтовая доставка'
     311                        );
     312                        $d8 = array (
     313                                'по всей России',
     314                                'в любой город России',
     315                                'по РФ',
     316                                'в любой регион России'
     317                        );
     318                        $meta_desc = $nxt[0] . ' - ' . $d1[rand(0, count($d1) - 1)] . ' в интернет-магазине ' . $CONFIG['site']['display_name'] . ' по ' . $d2[rand(0, count($d2) - 1)] . ' ' . $d3[rand(0, count($d3) - 1)] . '. ' . $d4[rand(0, count($d4) - 1)] . ' ' . $d5[rand(0, count($d5) - 1)] . ' ' . $d6[rand(0, count($d6) - 1)] . '. ' . $d7[rand(0, count($d7) - 1)] . ' ' . $d8[rand(0, count($d8) - 1)] . '.';
     319                        $tmpl->SetMetaDescription($meta_desc);
     320                }
     321
     322                $h1 = $nxt[0];
     323                if ($page > 1)
     324                        $h1 .= " - стр.$page";
     325                $tmpl->AddText("<h1 id='page-title'>$h1</h1>");
     326                $tmpl->AddText("<div class='breadcrumb'>" . $this->GetVitPath($nxt[1]) . "</div>");
     327                if ($nxt[2]) {
     328                        $text = $wikiparser->parse(html_entity_decode($nxt[2], ENT_QUOTES, "UTF-8"));
     329                        $tmpl->AddText("<div class='group-description'>$text</div><br>");
     330                }
     331                $tmpl->AddText("<div style='clear: right'></div>");
     332                if ($CONFIG['site']['vitrina_glstyle'] == 'item')
     333                        $this->GroupList_ItemStyle($group);
     334                else
     335                        $this->GroupList_ImageStyle($group);
     336                /// TODO: сделать возможность выбора вида отображения списка товаров посетителем
     337                $this->ProductList($group, $page);
     338        }
     339
     340        /// Список товаров в группе
     341        protected function ProductList($group, $page) {
     342                global $tmpl, $CONFIG;
     343                if (isset ($_GET['op']))
     344                        $_SESSION['vit_photo_only'] = $_GET['op'] ? 1 : 0;
     345
     346                if (isset ($_REQUEST['order']))
     347                        $order = $_REQUEST['order'];
     348                else
     349                        if (isset ($_SESSION['vitrina_order']))
     350                                $order = @ $_SESSION['vitrina_order'];
     351                        else
     352                                $order = '';
     353                if (!$order)
     354                        $order = @ $CONFIG['site']['vitrina_order'];
     355
     356                switch ($order) {
     357                        case 'n' :
     358                                $sql_order = '`doc_base`.`name`';
     359                                break;
     360                        case 'nd' :
     361                                $sql_order = '`doc_base`.`name` DESC';
     362                                break;
     363                        case 'vc' :
     364                                $sql_order = '`doc_base`.`vc`';
     365                                break;
     366                        case 'vcd' :
     367                                $sql_order = '`doc_base`.`vc` DESC';
     368                                break;
     369                        case 'c' :
     370                                $sql_order = '`doc_base`.`cost`';
     371                                break;
     372                        case 'cd' :
     373                                $sql_order = '`doc_base`.`cost` DESC';
     374                                break;
     375                        case 's' :
     376                                $sql_order = '`count`';
     377                                break;
     378                        case 'sd' :
     379                                $sql_order = '`count` DESC';
     380                                break;
     381                        default :
     382                                $sql_order = '`doc_base`.`name`';
     383                                $order = 'n';
     384                }
     385                $_SESSION['vitrina_order'] = $order;
     386
     387                if (isset ($_REQUEST['view']))
     388                        $view = $_REQUEST['view'];
     389                else
     390                        if (isset ($_SESSION['vitrina_view']))
     391                                $view = @ $_SESSION['vitrina_view'];
     392                        else
     393                                $view = '';
     394                if ($view != 'i' && $view != 'l' && $view != 't') {
     395                        if ($CONFIG['site']['vitrina_plstyle'] == 'imagelist')
     396                                $view = 'i';
     397                        else
     398                                if ($CONFIG['site']['vitrina_plstyle'] == 'extable')
     399                                        $view = 't';
     400                                else
     401                                        $view = 'l';
     402                }
     403                $_SESSION['vitrina_view'] = $view;
     404
     405                $sql_photo_only = @ $_SESSION['vit_photo_only'] ? "AND `img_id` IS NOT NULL" : "";
     406                $cnt_where = @ $CONFIG['site']['vitrina_sklad'] ? (" AND `doc_base_cnt`.`sklad`=" . intval($CONFIG['site']['vitrina_sklad']) . " ") : '';
     407                $sql = "SELECT `doc_base`.`id`, `doc_base`.`group`, `doc_base`.`name`, `doc_base`.`desc`, `doc_base`.`cost_date`, `doc_base`.`cost`,
     408                                        ( SELECT SUM(`doc_base_cnt`.`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` $cnt_where GROUP BY `doc_base`.`id`) AS `count`,
     409                                        `doc_base`.`transit_cnt`, `doc_base_dop`.`d_int`, `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`, `doc_base`.`proizv`, `doc_img`.`id` AS `img_id`, `doc_img`.`type` AS `img_type`, `class_unit`.`rus_name1` AS `units`, `doc_base`.`vc`
     410                                        FROM `doc_base`
     411                                        LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
     412                                        LEFT JOIN `doc_base_img` ON `doc_base_img`.`pos_id`=`doc_base`.`id` AND `doc_base_img`.`default`='1'
     413                                        LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
     414                                        LEFT JOIN `class_unit` ON `doc_base`.`unit`=`class_unit`.`id`
     415                                        WHERE `doc_base`.`group`='$group' AND `doc_base`.`hidden`='0' $sql_photo_only
     416                                        ORDER BY $sql_order";
     417                $res = mysql_query($sql);
     418                if (mysql_errno())
     419                        throw new MysqlException("Не удалось получить список товаров!");
     420                $lim = $CONFIG['site']['vitrina_limit'];
     421                if ($lim == 0)
     422                        $lim = 100;
     423                $rows = mysql_num_rows($res);
     424                if ($rows) {
     425                        $this->OrderAndViewBar($group, $page, $order, $view);
     426
     427                        $this->PageBar($group, $rows, $lim, $page);
     428                        if (($lim < $rows) && $page)
     429                                mysql_data_seek($res, $lim * ($page -1));
     430                        if ($view == 'i')
     431                                $this->TovList_ImageList($res, $lim);
     432                        else
     433                                if ($view == 't')
     434                                        $this->TovList_ExTable($res, $lim);
     435                                else
     436                                        $this->TovList_SimpleTable($res, $lim);
     437                        $this->PageBar($group, $rows, $lim, $page);
     438                        $tmpl->AddText("<span style='color:#888'>Серая цена</span> требует уточнения<br>");
     439                }
     440        }
     441
     442        /// Блок товаров, выбранных по признаку, основанному на типе блока
     443        protected function ViewBlock($block) {
     444                global $tmpl, $CONFIG;
     445                $cnt_where = @ $CONFIG['site']['vitrina_sklad'] ? (" AND `doc_base_cnt`.`sklad`=" . intval($CONFIG['site']['vitrina_sklad']) . " ") : '';
     446                /// Определение типа блока
     447                if ($block == 'stock') {
     448                        $sql = "SELECT `doc_base`.`id`, `doc_base`.`group`, `doc_base`.`name`, `doc_base`.`desc`, `doc_base`.`cost_date`, `doc_base`.`cost`,
     449                                                                ( SELECT SUM(`doc_base_cnt`.`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` $cnt_where GROUP BY `doc_base`.`id`) AS `count`,
     450                                                                `doc_base`.`transit_cnt`, `doc_base_dop`.`d_int`, `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`, `doc_base`.`proizv`, `doc_img`.`id` AS `img_id`, `doc_img`.`type` AS `img_type`, `class_unit`.`rus_name1` AS `units`, `doc_base`.`vc`
     451                                                                FROM `doc_base`
     452                                                                LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
     453                                                                LEFT JOIN `doc_base_img` ON `doc_base_img`.`pos_id`=`doc_base`.`id` AND `doc_base_img`.`default`='1'
     454                                                                LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
     455                                                                LEFT JOIN `class_unit` ON `doc_base`.`unit`=`class_unit`.`id`
     456                                                                WHERE `doc_base`.`hidden`='0' AND `doc_base`.`stock`!='0'
     457                                                                ORDER BY `doc_base`.`likvid` ASC";
     458                        $tmpl->AddText("<h1>Распродажа</h1>");
     459                } else
     460                        if ($block == 'popular') {
     461                                $sql = "SELECT `doc_base`.`id`, `doc_base`.`group`, `doc_base`.`name`, `doc_base`.`desc`, `doc_base`.`cost_date`, `doc_base`.`cost`,
     462                                                                                ( SELECT SUM(`doc_base_cnt`.`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` $cnt_where GROUP BY `doc_base`.`id`) AS `count`,
     463                                                                                `doc_base`.`transit_cnt`, `doc_base_dop`.`d_int`, `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`, `doc_base`.`proizv`, `doc_img`.`id` AS `img_id`, `doc_img`.`type` AS `img_type`, `class_unit`.`rus_name1` AS `units`, `doc_base`.`vc`
     464                                                                                FROM `doc_base`
     465                                                                                INNER JOIN `doc_group` ON `doc_group`.`id`= `doc_base`.`group` AND `doc_group`.`hidelevel`='0'
     466                                                                                LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
     467                                                                                LEFT JOIN `doc_base_img` ON `doc_base_img`.`pos_id`=`doc_base`.`id` AND `doc_base_img`.`default`='1'
     468                                                                                LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
     469                                                                                LEFT JOIN `class_unit` ON `doc_base`.`unit`=`class_unit`.`id`
     470                                                                                WHERE `doc_base`.`hidden`='0'
     471                                                                                ORDER BY `doc_base`.`likvid` DESC
     472                                                                                LIMIT 48";
     473                                $tmpl->AddText("<h1>Популярные товары</h1>");
     474                        } else
     475                                if ($block == 'new') {
     476                                        if ($CONFIG['site']['vitrina_newtime'])
     477                                                $new_time = date("Y-m-d H:i:s", time() - 60 * 60 * 24 * $CONFIG['site']['vitrina_newtime']);
     478                                        else
     479                                                $new_time = date("Y-m-d H:i:s", time() - 60 * 60 * 24 * 180);
     480                                        $sql = "SELECT `doc_base`.`id`, `doc_base`.`group`, `doc_base`.`name`, `doc_base`.`desc`, `doc_base`.`cost_date`, `doc_base`.`cost`,
     481                                                                                                ( SELECT SUM(`doc_base_cnt`.`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` $cnt_where GROUP BY `doc_base`.`id`) AS `count`,
     482                                                                                                `doc_base`.`transit_cnt`, `doc_base_dop`.`d_int`, `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`, `doc_base`.`proizv`, `doc_img`.`id` AS `img_id`, `doc_img`.`type` AS `img_type`, `class_unit`.`rus_name1` AS `units`, `doc_base`.`vc`
     483                                                                                                FROM `doc_base`
     484                                                                                                INNER JOIN `doc_group` ON `doc_group`.`id`= `doc_base`.`group` AND `doc_group`.`hidelevel`='0'
     485                                                                                                LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
     486                                                                                                LEFT JOIN `doc_base_img` ON `doc_base_img`.`pos_id`=`doc_base`.`id` AND `doc_base_img`.`default`='1'
     487                                                                                                LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
     488                                                                                                LEFT JOIN `class_unit` ON `doc_base`.`unit`=`class_unit`.`id`
     489                                                                                                WHERE `doc_base`.`hidden`='0' AND (`doc_base`.`create_time`>='$new_time' OR `doc_base`.`buy_time`>='$new_time')
     490                                                                                                ORDER BY `doc_base`.`buy_time` DESC
     491                                                                                                LIMIT 24";
     492                                        $tmpl->AddText("<h1>Новинки</h1>");
     493                                } else
     494                                        if ($block == 'transit') {
     495                                                $sql = "SELECT `doc_base`.`id`, `doc_base`.`group`, `doc_base`.`name`, `doc_base`.`desc`, `doc_base`.`cost_date`, `doc_base`.`cost`,
     496                                                                                                                ( SELECT SUM(`doc_base_cnt`.`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` $cnt_where GROUP BY `doc_base`.`id`) AS `count`,
     497                                                                                                                `doc_base`.`transit_cnt`, `doc_base_dop`.`d_int`, `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`, `doc_base`.`proizv`, `doc_img`.`id` AS `img_id`, `doc_img`.`type` AS `img_type`, `class_unit`.`rus_name1` AS `units`, `doc_base`.`vc`
     498                                                                                                                FROM `doc_base`
     499                                                                                                                INNER JOIN `doc_group` ON `doc_group`.`id`= `doc_base`.`group` AND `doc_group`.`hidelevel`='0'
     500                                                                                                                LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
     501                                                                                                                LEFT JOIN `doc_base_img` ON `doc_base_img`.`pos_id`=`doc_base`.`id` AND `doc_base_img`.`default`='1'
     502                                                                                                                LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
     503                                                                                                                LEFT JOIN `class_unit` ON `doc_base`.`unit`=`class_unit`.`id`
     504                                                                                                                WHERE `doc_base`.`hidden`='0' AND `doc_base`.`transit_cnt`>0
     505                                                                                                                ORDER BY `doc_base`.`name`";
     506                                                $tmpl->AddText("<h1>Товар в пути</h1>");
     507                                        } else {
     508                                                header('HTTP/1.0 404 Not Found');
     509                                                header('Status: 404 Not Found');
     510                                                throw new Exception('Блок не найден!');
     511                                        }
     512
     513                $res = mysql_query($sql);
     514                if (mysql_errno())
     515                        throw new MysqlException("Не удалось получить список товаров!");
     516                $lim = 1000;
     517                $rows = mysql_num_rows($res);
     518                if ($rows) {
     519                        if ($CONFIG['site']['vitrina_plstyle'] == 'imagelist')
     520                                $view = 'i';
     521                        else
     522                                if ($CONFIG['site']['vitrina_plstyle'] == 'extable')
     523                                        $view = 't';
     524                                else
     525                                        $view = 'l';
     526
     527                        if ($view == 'i')
     528                                $this->TovList_ImageList($res, $lim);
     529                        else
     530                                if ($view == 't')
     531                                        $this->TovList_ExTable($res, $lim);
     532                                else
     533                                        $this->TovList_SimpleTable($res, $lim);
     534
     535                        $tmpl->AddText("<span style='color:#888'>Серая цена</span> требует уточнения<br>");
     536                } else
     537                        $tmpl->msg("Товары в данной категории отсутствуют");
     538        }
     539
     540        /// Блок ссылок смены вида отображения и сортировки
     541        protected function OrderAndViewBar($group, $page, $order, $view) {
     542                global $tmpl;
     543                $tmpl->AddText("<div class='orderviewbar'>");
     544                $tmpl->AddText("<div class='orderbar'>Показывать: ");
     545                if ($view == 'i')
     546                        $tmpl->AddText("<span class='selected'>Картинками</span> ");
     547                else
     548                        $tmpl->AddText("<span><a href='" . $this->GetGroupLink($group, $page, 'view=i') . "'>Картинками</a></span> ");
     549                if ($view == 't')
     550                        $tmpl->AddText("<span class='selected'>Таблицей</span> ");
     551                else
     552                        $tmpl->AddText("<span><a href='" . $this->GetGroupLink($group, $page, 'view=t') . "'>Таблицей</a></span> ");
     553                if ($view == 'l')
     554                        $tmpl->AddText("<span class='selected'>Списком</span> ");
     555                else
     556                        $tmpl->AddText("<span><a href='" . $this->GetGroupLink($group, $page, 'view=l') . "'>Списком</a></span> ");
     557                if (@ $_SESSION['vit_photo_only'])
     558                        $tmpl->AddText("<span class='selected'><a class='down'  href='" . $this->GetGroupLink($group, $page, 'op=0') . "'>Только с фото</a></span> ");
     559                else
     560                        $tmpl->AddText("<span><a href='" . $this->GetGroupLink($group, $page, 'op=1') . "'>Только с фото</a></span> ");
     561                $tmpl->AddText("</div>");
     562                $tmpl->AddText("<div class='viewbar'>Сортировать по: ");
     563                if ($order == 'n')
     564                        $tmpl->AddText("<span class='selected'><a href='" . $this->GetGroupLink($group, $page, 'order=nd') . "'>Названию</a></span> ");
     565                else
     566                        if ($order == 'nd')
     567                                $tmpl->AddText("<span class='selected'><a class='down' href='" . $this->GetGroupLink($group, $page, 'order=n') . "'>Названию</a></span> ");
     568                        else
     569                                $tmpl->AddText("<span><a href='" . $this->GetGroupLink($group, $page, 'order=n') . "'>Названию</a></span> ");
     570
     571                if ($order == 'vc')
     572                        $tmpl->AddText("<span class='selected'><a href='" . $this->GetGroupLink($group, $page, 'order=vcd') . "'>Коду</a></span> ");
     573                else
     574                        if ($order == 'vcd')
     575                                $tmpl->AddText("<span class='selected'><a href='" . $this->GetGroupLink($group, $page, 'order=vc') . "'>Коду</a></span> ");
     576                        else
     577                                $tmpl->AddText("<span><a class='down' href='" . $this->GetGroupLink($group, $page, 'order=vc') . "'>Коду</a></span> ");
     578
     579                if ($order == 'c')
     580                        $tmpl->AddText("<span class='selected'><a href='" . $this->GetGroupLink($group, $page, 'order=cd') . "'>Цене</a></span> ");
     581                else
     582                        if ($order == 'cd')
     583                                $tmpl->AddText("<span class='selected'><a class='down' href='" . $this->GetGroupLink($group, $page, 'order=c') . "'>Цене</a></span> ");
     584                        else
     585                                $tmpl->AddText("<span><a href='" . $this->GetGroupLink($group, $page, 'order=c') . "'>Цене</a></span> ");
     586
     587                if ($order == 's')
     588                        $tmpl->AddText("<span class='selected'><a href='" . $this->GetGroupLink($group, $page, 'order=sd') . "'>Наличию</a></span> ");
     589                else
     590                        if ($order == 'sd')
     591                                $tmpl->AddText("<span class='selected'><a class='down' href='" . $this->GetGroupLink($group, $page, 'order=s') . "'>Наличию</a></span> ");
     592                        else
     593                                $tmpl->AddText("<span><a href='" . $this->GetGroupLink($group, $page, 'order=s') . "'>Наличию</a></span> ");
     594                $tmpl->AddText("</div><div class='clear'></div>");
     595                $tmpl->AddText("</div>");
     596        }
     597
     598        /// Карточка товара
     599        protected function ProductCard($product) {
     600                global $tmpl, $CONFIG, $wikiparser;
     601                settype($product, 'int');
     602                $cnt_where = @ $CONFIG['site']['vitrina_sklad'] ? (" AND `doc_base_cnt`.`sklad`=" . intval($CONFIG['site']['vitrina_sklad']) . " ") : '';
     603                $res = mysql_query("SELECT `doc_base`.`id`, `doc_base`.`name`, `doc_base`.`desc`, `doc_base`.`group`, `doc_base`.`cost`,
     604                                        `doc_base`.`proizv`, `doc_base_dop`.`d_int`, `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`,
     605                                        `doc_base_dop`.`mass`, `doc_base_dop`.`analog`, ( SELECT SUM(`doc_base_cnt`.`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` $cnt_where), `doc_img`.`id` AS `img_id`, `doc_img`.`type` AS `img_type`, `doc_base_dop_type`.`name` AS `dop_name`, `class_unit`.`name` AS `units`, `doc_group`.`printname` AS `group_printname`, `doc_base`.`vc`, `doc_base`.`title_tag`, `doc_base`.`meta_description`, `doc_base`.`meta_keywords`
     606                                        FROM `doc_base`
     607                                        INNER JOIN `doc_group` ON `doc_base`.`group`=`doc_group`.`id`
     608                                        LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
     609                                        LEFT JOIN `doc_base_dop_type` ON `doc_base_dop_type`.`id`=`doc_base_dop`.`type`
     610                                        LEFT JOIN `doc_base_img` ON `doc_base_img`.`pos_id`=`doc_base`.`id` AND `doc_base_img`.`default`='1'
     611                                        LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
     612                                        LEFT JOIN `class_unit` ON `doc_base`.`unit`=`class_unit`.`id`
     613                                        WHERE `doc_base`.`id`='$product'
     614                                        ORDER BY `doc_base`.`name` ASC LIMIT 1");
     615                if (mysql_errno())
     616                        throw new MysqlException('Не удалось получить карточку товара!');
     617                $i = 0;
     618                if ($nxt = mysql_fetch_array($res)) {
     619                        if ($nxt['title_tag'])
     620                                $title = $nxt['title_tag'];
     621                        else
     622                                $title = "{$nxt['group_printname']} {$nxt['name']}, цены и характеристики, купить";
     623                        $tmpl->SetTitle($title);
     624                        $base = abs(crc32($nxt['name'] . $nxt['group'] . $nxt['proizv'] . $nxt['vc'] . $nxt['desc']));
     625                        if ($nxt['meta_keywords'])
     626                                $tmpl->SetMetaKeywords($nxt['meta_keywords']);
     627                        else {
     628                                $k1 = array (
     629                                        'купить',
     630                                        'цены',
     631                                        'характеристики',
     632                                        'фото',
     633                                        'выбор',
     634                                        'каталог',
     635                                        'описания',
     636                                        'отзывы',
     637                                        'продажа',
     638                                        'описание'
     639                                );
     640                                $l = count($k1);
     641                                $i1 = $base % $l;
     642                                $base = floor($base / $l);
     643                                $i2 = $base % $l;
     644                                $base = floor($base / $l);
     645                                $meta_key = $nxt['group_printname'] . ' ' . $nxt['name'] . ' ' . $k1[$i1] . ' ' . $k1[$i2];
     646                                $tmpl->SetMetaKeywords($meta_key);
     647                        }
     648
     649                        if ($nxt['meta_description'])
     650                                $tmpl->SetMetaDescription($nxt['meta_description']);
     651                        else {
     652                                $d = array ();
     653                                $d[0] = array (
     654                                        $nxt['group_printname'] . ' ' . $nxt['name'] . ' ' . $nxt['proizv'] . ' - '
     655                                );
     656                                $d[1] = array (
     657                                        'купить',
     658                                        'заказать',
     659                                        'продажа',
     660                                        'приобрести'
     661                                );
     662                                $d[2] = array (
     663                                        ' в интернет-магазине ' . $CONFIG['site']['display_name'] . ' по '
     664                                );
     665                                $d[3] = array (
     666                                        'доступной',
     667                                        'отличной',
     668                                        'хорошей',
     669                                        'разумной',
     670                                        'выгодной'
     671                                );
     672                                $d[4] = array (
     673                                        'цене.',
     674                                        'стоимости.'
     675                                );
     676                                $d[5] = array (
     677                                        'Большой',
     678                                        'Широкий',
     679                                        'Огромный'
     680                                );
     681                                $d[6] = array (
     682                                        'выбор',
     683                                        'каталог',
     684                                        'ассортимент'
     685                                );
     686                                $d[7] = array (
     687                                        'товаров.',
     688                                        'продукции.'
     689                                );
     690                                $d[8] = array (
     691                                        'Доставка',
     692                                        'Экспресс-доставка',
     693                                        'Доставка курьером',
     694                                        'Почтовая доставка'
     695                                );
     696                                $d[9] = array (
     697                                        'по всей России.',
     698                                        'в любой город России.',
     699                                        'по РФ.',
     700                                        'в любой регион России.'
     701                                );
     702                                $str = '';
     703                                foreach ($d as $id => $item) {
     704                                        $l = count($item);
     705                                        $i = $base % $l;
     706                                        $base = floor($base / $l);
     707                                        $str .= $item[$i] . ' ';
     708                                }
     709                                $tmpl->SetMetaDescription($str);
     710                        }
     711
     712                        $tmpl->AddText("<h1 id='page-title'>{$nxt['group_printname']} {$nxt['name']}</h1>");
     713                        $tmpl->AddText("<div class='breadcrumb'>" . $this->GetVitPath($nxt['group']) . "</div>");
     714                        $appends = $img_mini = "";
     715                        if ($nxt['img_id']) {
     716                                $miniimg = new ImageProductor($nxt['img_id'], 'p', $nxt['img_type']);
     717                                $miniimg->SetY(220);
     718                                $miniimg->SetX(200);
     719                                $fullimg = new ImageProductor($nxt['img_id'], 'p', $nxt['img_type']);
     720                                $img = "<img src='" . $miniimg->GetURI() . "' alt='{$nxt['name']}' onload='$(this).fadeTo(500,1);' style='opacity: 1' id='midiphoto'>";
     721                                $res = mysql_query("SELECT `doc_img`.`id` AS `img_id`, `doc_base_img`.`default`, `doc_img`.`name`, `doc_img`.`type` AS `img_type` FROM `doc_base_img`
     722                                                                                        LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
     723                                                                                        WHERE `doc_base_img`.`pos_id`='{$nxt['id']}'");
     724                                if (mysql_errno())
     725                                        throw new MysqlException('Не удалось выбрать информацию о изображениях');
     726
     727                                while ($img_data = mysql_fetch_assoc($res)) {
     728                                        $miniimg = new ImageProductor($img_data['img_id'], 'p', $img_data['img_type']);
     729                                        $miniimg->SetX(40);
     730                                        $miniimg->SetY(40);
     731                                        $midiimg = new ImageProductor($img_data['img_id'], 'p', $img_data['img_type']);
     732                                        $midiimg->SetX(200);
     733                                        $midiimg->SetY(220);
     734                                        $fullimg = new ImageProductor($img_data['img_id'], 'p', $img_data['img_type']);
     735                                        //$fullimg->SetY(300);
     736                                        if (mysql_num_rows($res) > 1)
     737                                                $img_mini .= "<a href='" .
     738                                                $midiimg->GetURI() . "' onclick=\"return setPhoto({$img_data['img_id']});\"><img src='" . $miniimg->GetURI() . "' alt='{$img_data['name']}'></a>";
     739                                        $appends .= "midiphoto.appendImage({$img_data['img_id']},'" . html_entity_decode($midiimg->GetURI(), ENT_COMPAT, 'UTF-8') . "', '" . html_entity_decode($fullimg->GetURI(), ENT_COMPAT, 'UTF-8') . "');\n";
     740
     741                                }
     742                        } else
     743                                $img = "<img src='/skins/{$CONFIG['site']['skin']}/images/no_photo.png' alt='no photo'>";
     744
     745                        $tmpl->AddText("<table class='product-card'>
     746                                                                <tr valign='top'><td rowspan='15' width='150'>
     747                                                                <div class='image'><div class='one load'>$img</div><div class='list'>$img_mini</div></div>
     748                                                                <script>
     749                                                                var midiphoto=tripleView('midiphoto')
     750                                                                $appends
     751                                                                function setPhoto(id)
     752                                                                {
     753                                                                        return midiphoto.setPhoto(id)
     754                                                                }
     755                                                                </script>");
     756
     757                        $tmpl->AddText("<td class='field'>Наименование:<td>{$nxt['name']}");
     758                        if ($nxt['vc'])
     759                                $tmpl->AddText("<tr><td class='field'>Код производителя:<td>{$nxt['vc']}<br>");
     760                        if ($nxt[2]) {
     761                                $text = $wikiparser->parse(html_entity_decode($nxt[2], ENT_QUOTES, "UTF-8"));
     762                                $tmpl->AddText("<tr><td valign='top' class='field'>Описание:<td>$text");
     763                        }
     764                        if ($nxt[14])
     765                                $tmpl->AddText("<tr><td class='field'>Тип:<td>$nxt[14]");
     766                        $cena = GetCostPos($nxt[0], $this->cost_id);
     767                        $tmpl->AddText("<tr><td class='field'>Цена:<td>$cena<br>");
     768                        $tmpl->AddText("<tr><td class='field'>Единица измерения:<td>$nxt[15]<br>");
     769                        if ($nxt[11])
     770                                $tmpl->AddText("<tr><td class='field'>Наличие: <td><b>ЕСТЬ</b><br>");
     771                        else
     772                                $tmpl->AddText("<tr><td class='field'>Наличие:<td>Под заказ<br>");
     773                        if ($nxt[6])
     774                                $tmpl->AddText("<tr><td class='field'>Внутренний диаметр: <td>$nxt[6] мм.<br>");
     775                        if ($nxt[7])
     776                                $tmpl->AddText("<tr><td class='field'>Внешний диаметр: <td>$nxt[7] мм.<br>");
     777                        if ($nxt[8])
     778                                $tmpl->AddText("<tr><td class='field'>Высота: <td>$nxt[8] мм.<br>");
     779                        if ($nxt[9])
     780                                $tmpl->AddText("<tr><td class='field'>Масса: <td>$nxt[9] кг.<br>");
     781                        if ($nxt[10])
     782                                $tmpl->AddText("<tr><td class='field'>Аналог: <td>$nxt[10]<br>");
     783                        if ($nxt[5])
     784                                $tmpl->AddText("<tr><td class='field'>Производитель: <td>$nxt[5]<br>");
     785
     786                        $param_res = mysql_query("SELECT `doc_base_params`.`param`, `doc_base_values`.`value` FROM `doc_base_values`
     787                                                                LEFT JOIN `doc_base_params` ON `doc_base_params`.`id`=`doc_base_values`.`param_id`
     788                                                                WHERE `doc_base_values`.`id`='{$nxt['id']}' AND `doc_base_params`.`pgroup_id`='0' AND `doc_base_params`.`system`='0'");
     789                        if (mysql_errno())
     790                                throw new MysqlException("Не удалось получить список свойств!");
     791                        while ($params = mysql_fetch_row($param_res)) {
     792                                $tmpl->AddText("<tr><td class='field'>$params[0]:<td>$params[1]</tr>");
     793                        }
     794
     795                        $resg = mysql_query("SELECT `id`, `name` FROM `doc_base_gparams`");
     796                        if (mysql_errno())
     797                                throw new MysqlException("Не удалось параметры групп складской номенклатуры");
     798                        while ($nxtg = mysql_fetch_row($resg)) {
     799                                $f = 0;
     800                                $param_res = mysql_query("SELECT `doc_base_params`.`param`, `doc_base_values`.`value` FROM `doc_base_values`
     801                                                                                        LEFT JOIN `doc_base_params` ON `doc_base_params`.`id`=`doc_base_values`.`param_id`
     802                                                                                        WHERE `doc_base_values`.`id`='{$nxt['id']}' AND `doc_base_params`.`pgroup_id`='$nxtg[0]' AND `doc_base_params`.`system`='0'");
     803                                if (mysql_errno())
     804                                        throw new MysqlException("Не удалось получить список свойств!");
     805                                while ($params = mysql_fetch_row($param_res)) {
     806                                        if (!$f) {
     807                                                $f = 1;
     808                                                $tmpl->AddText("<tr><th colspan='2'>$nxtg[1]</th></tr>");
     809                                        }
     810                                        $tmpl->AddText("<tr><td class='field'>$params[0]:<td>$params[1]</tr>");
     811                                }
     812                        }
     813
     814                        $att_res = mysql_query("SELECT `doc_base_attachments`.`attachment_id`, `attachments`.`original_filename`, `attachments`.`comment`
     815                                                                FROM `doc_base_attachments`
     816                                                                LEFT JOIN `attachments` ON `attachments`.`id`=`doc_base_attachments`.`attachment_id`
     817                                                                WHERE `doc_base_attachments`.`pos_id`='$product'");
     818                        if (mysql_errno())
     819                                throw new MysqlException("Не удалось получить список прикреплённых файлов");
     820                        if (mysql_num_rows($att_res) > 0) {
     821                                $tmpl->AddText("<tr><th colspan='3'>Прикреплённые файлы</th></tr>");
     822                                while ($anxt = @ mysql_fetch_row($att_res)) {
     823                                        if ($CONFIG['site']['recode_enable'])
     824                                                $link = "/attachments/{$anxt[0]}/$anxt[1]";
     825                                        else
     826                                                $link = "/attachments.php?att_id={$anxt[0]}";
     827                                        $tmpl->AddText("<tr><td><a href='$link'>$anxt[1]</a></td><td>$anxt[2]</td></tr>");
     828                                }
     829                        }
     830
     831                        $tmpl->AddText("<tr><td colspan='3'>
     832                                                                <form action='/vitrina.php'>
     833                                                                <input type='hidden' name='mode' value='korz_add'>
     834                                                                <input type='hidden' name='p' value='$product'>
     835                                                                <div>
     836                                                                Добавить
     837                                                                <input type='text' name='cnt' value='1' class='mini'> штук <button type='submit'>В корзину!</button>
     838                                                                </div>
     839                                                                </form>
     840                                                                </td></tr></table>");
     841                        $d = array ();
     842                        $d[] = array (
     843                                'В нашем'
     844                        );
     845                        $d[] = array (
     846                                'магазине',
     847                                'интернет-магазине',
     848                                'каталоге',
     849                                'прайс-листе'
     850                        );
     851                        $d[] = array (
     852                                'Вы можете'
     853                        );
     854                        $d[] = array (
     855                                'купить',
     856                                'заказать',
     857                                'приобрести'
     858                        );
     859                        $d[] = array (
     860                                $nxt['group_printname'] . ' ' . $nxt['name'] . ' ' . $nxt['proizv'] . ' по '
     861                        );
     862                        $d[] = array (
     863                                'доступной',
     864                                'отличной',
     865                                'хорошей',
     866                                'разумной',
     867                                'выгодной'
     868                        );
     869                        $d[] = array (
     870                                'цене за',
     871                                'стоимости за'
     872                        );
     873                        $d[] = array (
     874                                'наличный расчёт.',
     875                                'безналичный расчёт.',
     876                                'webmoney.'
     877                        );
     878                        $d[] = array (
     879                                'Так же можно'
     880                        );
     881                        $d[] = array (
     882                                'заказать',
     883                                'запросить',
     884                                'осуществить'
     885                        );
     886                        $d[] = array (
     887                                'доставку',
     888                                'экспресс-доставку',
     889                                'доставку транспортной компанией',
     890                                'почтовую доставку',
     891                                'доставку курьером'
     892                        );
     893                        $d[] = array (
     894                                'этого товара',
     895                                'выбранной продукции'
     896                        );
     897                        $d[] = array (
     898                                'по всей России.',
     899                                'в любой город России.',
     900                                'по РФ.',
     901                                'в любой регион России.'
     902                        );
     903                        $str = '';
     904                        $base = abs(crc32($nxt['name'] . $nxt['group'] . $nxt['proizv'] . $nxt['vc'] . $nxt['desc']));
     905                        foreach ($d as $id => $item) {
     906                                $l = count($item);
     907                                $i = $base % $l;
     908                                $base = floor($base / $l);
     909                                $str .= $item[$i] . ' ';
     910                        }
     911                        $tmpl->AddText("<div class='description'>$str</div>");
     912                        $tmpl->AddText("<script type='text/javascript' charset='utf-8'>
     913                                                                $(document).ready(function(){
     914                                                                $(\"a[rel^='prettyPhoto']\").prettyPhoto({theme:'dark_rounded'});
     915                                                                });
     916                                                                </script>");
     917                        $i++;
     918                }
     919
     920                if ($i == 0) {
     921                        $tmpl->AddText("<h1 id='page-title'>Информация о товаре</h1>");
    156922                        header('HTTP/1.0 404 Not Found');
    157923                        header('Status: 404 Not Found');
    158                         $tmpl->AddText("Номер товара не задан!");
    159                 }
    160         }
    161         else if($mode=='korz_del')
    162         {
    163                 unset($_SESSION['basket']['cnt'][$p]);
    164                 $tmpl->msg("Товар убран из корзины!","info","<a class='urllink' href='/vitrina.php?mode=basket'>Ваша корзина</a>");
    165         }
    166         else if($mode=='korz_clear')
    167         {
    168                 unset($_SESSION['basket']['cnt']);
    169                 $tmpl->msg("Корзина очищена!","info","<a class='urllink' href='/vitrina.php'>Вернутья на витрину</a>");
    170         }
    171         else if($mode=='basket_submit')
    172         {
    173                 $tmpl->ajax=1;
    174                 if(isset($_SESSION['basket']['cnt']))
    175                         if(is_array($_SESSION['basket']['cnt']))
    176                                 foreach($_SESSION['basket']['cnt'] as $item => $cnt)
    177                                 {
    178                                         $ncnt=@$_REQUEST['cnt'.$item];
    179                                         if($ncnt<=0) unset($_SESSION['basket']['cnt'][$item]);
    180                                         else $_SESSION['basket']['cnt'][$item]=round($ncnt,3);
    181                                         $_SESSION['basket']['comments'][$item]=@$_REQUEST['comm'.$item];
     924                        $tmpl->msg("К сожалению, товар не найден. Возможно, Вы пришли по неверной ссылке.");
     925                }
     926        }
     927        /// Просмотр корзины
     928        protected function Basket() {
     929                global $tmpl, $CONFIG;
     930
     931                $text = '';
     932                $cc = 0;
     933                $sum = 0;
     934                $exist = 0;
     935                $i = 1;
     936                if (isset ($_SESSION['basket']['cnt'])) {
     937                        foreach ($_SESSION['basket']['cnt'] as $item => $cnt) {
     938                                $res = mysql_query("SELECT `id`, `name`, `cost` FROM `doc_base` WHERE `id`='$item'");
     939                                if (mysql_errno())
     940                                        throw new MysqlException("Не удалось получить список товаров!");
     941                                $nx = mysql_fetch_row($res);
     942                                $cena = GetCostPos($nx[0], $this->cost_id);
     943                                $sm = $cena * $cnt;
     944                                $sum += $sm;
     945                                $sm = sprintf("%0.2f", $sm);
     946                                if (isset ($_SESSION['basket']['comments'][$item]))
     947                                        $comm = $_SESSION['basket']['comments'][$item];
     948                                else
     949                                        $comm = '';
     950                                $text .= "<tr id='korz_ajax_item_$item' class='lin$cc'><td class='right'>$i <span id='korz_item_clear_url'><a href='#' onClick='korz_item_clear($item)'><img src='/img/i_del.png' alt='Убрать'></a></span><td><a href='/vitrina.php?mode=product&amp;p=$nx[0]'>$nx[1]</a><td class='right'>$cena<td class='right'><span class='sum'>$sm</span><td><input type='number' name='cnt$item' value='$cnt' class='mini'><td><input type='text' name='comm$item' style='width: 90%' value='$comm' maxlength='100'>";
     951                                $cc = 1 - $cc;
     952                                $exist = 1;
     953                                $i++;
     954                        }
     955                }
     956
     957                if (!$exist) {
     958                        $tmpl->msg("Ваша корзина пуста! Выберите, пожалуйста интересующие Вас товары!", "info");
     959                } else {
     960                        $tmpl->AddText("
     961                                                                        <span id='korz_ajax'>
     962                                                                        <h1 id='page-title'>Ваша корзина</h1>
     963                                                                        В поле *коментарий* вы можете высказать пожелания по конкретному товару (не более 100 символов).<br>
     964                                                                        <form action='' method='post'>
     965                                                                        <input type='hidden' name='mode' value='basket_submit'>
     966                                                                        <table id='korz_table' width='100%' class='list'>
     967                                                                        <tr class='title'><th>N</th><th>Наименование<th>Цена, руб<th>Сумма, руб<th>Количество, шт<th>Коментарии</tr>
     968                                                                        $text
     969                                                                        <tr class='total'><td>&nbsp;</td><td colspan='2'>Итого:</td><td colspan='3'><span class='sums'>$sum</span> рублей</td></tr>
     970                                                                        </table>
     971                                                                        <br>
     972
     973                                                                        <script>
     974                                                                        function korz_clear() {
     975                                                                        $.ajax({
     976                                                                        url: '/vitrina.php?mode=korz_clear',
     977                                                                        beforeSend: function() { $('#korz_clear_url').html('<img src=/img/ajax-loader.gif alt=обработка..>'); },
     978                                                                        success: function() { $('#korz_ajax').html('Корзина очищена'); }
     979                                                                        })}
     980
     981                                                                        function korz_item_clear(id) {
     982                                                                        $.ajax({
     983                                                                        url: '/vitrina.php?mode=korz_del&p='+id,
     984                                                                        async: false,
     985                                                                        beforeSend: function() { $('#korz_item_clear_url').html('<img src=/img/ajax-loader.gif alt=обработка..>'); },
     986                                                                        success: function() { $('#korz_ajax_item_'+id).remove(); },
     987                                                                        complete: function() {
     988                                                                        sum = 0;
     989                                                                        $('span .sum').each(function() {
     990                                                                        var num = parseInt($(this).text());
     991                                                                        if (num) sum += num;
     992                                                                        });
     993                                                                        $('span .sums').html(sum);
     994                                                                        }
     995                                                                        })}
     996                                                                        </script>
     997
     998                                                                        <center><button name='button' value='recalc' type='submit'>Пересчитать</button>
     999                                                                        <button name='button' value='buy' type='submit'>Оформить заказ</button></center><br>
     1000                                                                        <center><span id='korz_clear_url'><a href='#' onClick='korz_clear()'><b>Очистить корзину!</b></a></span></center><br>
     1001                                                                        </form>
     1002                                                                        </center>
     1003                                                                        </span>");
     1004
     1005                        $_SESSION['korz_sum'] = $sum;
     1006                        //if( ($_SESSION['korz_sum']>20000) )   $tmpl->msg("Ваш заказ на сумму более 20'000, вам будет предоставлена удвоенная скидка!");
     1007                        //else $tmpl->msg("Цены указаны со скидкой 3%. А при оформлении заказа на сумму более 20'000 рублей предоставляется скидка 6%","info");
     1008                }
     1009        }
     1010        /// Оформление покупки
     1011        protected function Buy() {
     1012                global $tmpl;
     1013                $step = intval(@ $_REQUEST['step']);
     1014                $tmpl->SetText("<h1 id='page-title'>Оформление заказа</h1>");
     1015                if ((!@ $_SESSION['uid']) && ($step != 1)) {
     1016                        if ($step == 2) {
     1017                                $_SESSION['last_page'] = "/vitrina.php?mode=buy";
     1018                                header("Location: /login.php?mode=reg");
     1019                        }
     1020                        if ($step == 3) {
     1021                                $_SESSION['last_page'] = "/vitrina.php?mode=buy";
     1022                                header("Location: /login.php");
     1023                        } else {
     1024                                $_SESSION['last_page'] = "/vitrina.php?mode=buy";
     1025                                $this->BuyAuthForm();
     1026                        }
     1027                } else
     1028                        $this->BuyMakeForm($step);
     1029        }
     1030        // -------- Вспомогательные функции ------------------
     1031        /// Поэлементный список подгрупп
     1032        protected function GroupList_ItemStyle($group) {
     1033                global $tmpl, $CONFIG;
     1034
     1035                $res = mysql_query("SELECT `id`, `name` FROM `doc_group` WHERE `hidelevel`='0' AND `pid`='$group' ORDER BY `id`");
     1036                if (mysql_errno())
     1037                        throw new MysqlException('Не удалось выбрать список групп');
     1038                $tmpl->AddStyle(".vitem { width: 250px; float: left; font-size: 14px; } .vitem:before{content: '\\203A \\0020' ; } hr.clear{border: 0 none; margin: 0;}");
     1039                while ($nxt = mysql_fetch_row($res)) {
     1040                        $tmpl->AddText("<div class='vitem'><a href='" . $this->GetGroupLink($nxt[0]) . "'>$nxt[1]</a></div>");
     1041                }
     1042                $tmpl->AddText("<hr class='clear'>");
     1043        }
     1044        /// Список групп с изображениями
     1045        protected function GroupList_ImageStyle($group) {
     1046                global $tmpl, $CONFIG;
     1047
     1048                $res = mysql_query("SELECT * FROM `doc_group` WHERE `hidelevel`='0' AND `pid`='$group'  ORDER BY `id`");
     1049                if (mysql_errno())
     1050                        throw new MysqlException('Не удалось выбрать список групп');
     1051                $tmpl->AddStyle(".vitem { width: 360px; float: left; font-size: 14px; margin: 10px;} .vitem img {float: left; padding-right: 8px;} hr.clear{border: 0 none; margin: 0;}");
     1052                while ($nxt = mysql_fetch_row($res)) {
     1053                        $link = $this->GetGroupLink($nxt[0]);
     1054                        $tmpl->AddText("<div class='vitem'><a href='$link'>");
     1055                        if (file_exists("{$CONFIG['site']['var_data_fs']}/category/$nxt[0].jpg"))
     1056                                $tmpl->AddText("<img src='{$CONFIG['site']['var_data_web']}/category/$nxt[0].jpg' alt='$nxt[1]'>");
     1057                        else {
     1058                                if (file_exists($CONFIG['site']['location'] . '/skins/' . $CONFIG['site']['skin'] . '/no_photo.png'))
     1059                                        $img_url = '/skins/' .
     1060                                        $CONFIG['site']['skin'] . '/no_photo.png';
     1061                                else
     1062                                        $img_url = '/img/no_photo.png';
     1063                                $tmpl->AddText("<img src='$img_url' alt='Изображение не доступно'>");
     1064                        }
     1065                        $tmpl->AddText("</a><div><a href='$link'><b>$nxt[1]</b></a><br>");
     1066                        if ($nxt[2]) {
     1067                                $desc = split('\.', $nxt[2], 2);
     1068                                if ($desc[0])
     1069                                        $tmpl->AddText($desc[0]);
     1070                                else
     1071                                        $tmpl->AddText($nxt[2]);
     1072                        }
     1073                        $tmpl->AddText("</div></div>");
     1074                }
     1075                $tmpl->AddText("<hr class='clear'>");
     1076        }
     1077
     1078        /// Простая таблица товаров
     1079        protected function TovList_SimpleTable($res, $lim) {
     1080                global $tmpl, $CONFIG;
     1081                $tmpl->AddText("<table width='100%' cellspacing='0' border='0' class='list'><tr class='title'><th>Наименование<th>Производитель<th>Наличие<th>Розничная цена<th>Купить</tr>");
     1082                $cc = $i = 0;
     1083                $cl = "lin0";
     1084                $basket_img = "/skins/" . $CONFIG['site']['skin'] . "/basket16.png";
     1085                while ($nxt = mysql_fetch_assoc($res)) {
     1086                        $nal = $this->GetCountInfo($nxt['count'], @ $nxt['tranit']);
     1087                        $link = $this->GetProductLink($nxt['id'], $nxt['name']);
     1088                        $cce = '';
     1089                        $dcc = strtotime($nxt['cost_date']);
     1090                        if ($dcc < (time() - 60 * 60 * 24 * 30 * 6))
     1091                                $cce = "style='color:#888'";
     1092                        $cost = GetCostPos($nxt['id'], $this->cost_id);
     1093                        @ $tmpl->AddText("<tr class='lin$cc'><td><a href='$link'>{$nxt['name']}</a>
     1094                                                                        <td>{$nxt['proizv']}<td>$nal<td $cce>$cost
     1095                                                                        <td><a href='/vitrina.php?mode=korz_add&amp;p={$nxt['id']}&amp;cnt=1' onclick=\"return ShowPopupWin('/vitrina.php?mode=korz_adj&amp;p={$nxt['id']}&amp;cnt=1','popwin');\" rel='nofollow'>
     1096                                                                        <img src='$basket_img' alt='В корзину!'></a></tr>");
     1097                        $i++;
     1098                        $cc = 1 - $cc;
     1099                        if ($i >= $lim)
     1100                                break;
     1101                }
     1102                $tmpl->AddText("</table>");
     1103        }
     1104
     1105        /// Список товаров в виде изображений
     1106        protected function TovList_ImageList($res, $lim) {
     1107                global $tmpl, $CONFIG;
     1108                $cc = $i = 0;
     1109                $cl = "lin0";
     1110
     1111                $tmpl->AddStyle(".pitem {
     1112                                                        float:                  left;
     1113                                                        width:                  330px;
     1114                                                        height:                 180px;
     1115                                                        border:                 1px solid #ccc;
     1116                                                        background:             #fafafa;
     1117                                                        margin:                 10px;
     1118                                                        padding:                5px;
     1119                                                        border-radius:          10px;
     1120                                                        -moz-border-radius:     10px;
     1121                                                }");
     1122
     1123                while ($nxt = mysql_fetch_assoc($res)) {
     1124                        $nal = $this->GetCountInfo($nxt['count'], $nxt['transit_cnt']);
     1125                        $link = $this->GetProductLink($nxt['id'], $nxt['name']);
     1126                        $cce = '';
     1127                        $dcc = strtotime($nxt['cost_date']);
     1128                        if ($dcc < (time() - 60 * 60 * 24 * 30 * 6))
     1129                                $cce = "style='color:#888'";
     1130                        $cost = GetCostPos($nxt['id'], $this->cost_id);
     1131                        if ($nxt['img_id']) {
     1132                                $miniimg = new ImageProductor($nxt['img_id'], 'p', $nxt['img_type']);
     1133                                $miniimg->SetX(135);
     1134                                $miniimg->SetY(180);
     1135                                $img = "<img src='" . $miniimg->GetURI() . "' style='float: left; margin-right: 10px;' alt='{$nxt['name']}'>";
     1136                        } else {
     1137                                if (file_exists($CONFIG['site']['location'] . '/skins/' . $CONFIG['site']['skin'] . '/no_photo.png'))
     1138                                        $img_url = '/skins/' .
     1139                                        $CONFIG['site']['skin'] . '/no_photo.png';
     1140                                else
     1141                                        $img_url = '/img/no_photo.png';
     1142                                $img = "<img src='$img_url' alt='no photo' style='float: left; margin-right: 10px; width: 135px;' alt='no photo'>";
     1143                        }
     1144                        $desc = $nxt['desc'];
     1145                        if (strpos($desc, '.') !== false) {
     1146                                $desc = explode('.', $desc, 2);
     1147                                $desc = $desc[0];
     1148                        }
     1149
     1150                        $tmpl->AddText("<div class='pitem'>
     1151                                                                        <a href='$link'>$img</a>
     1152                                                                        <a href='$link'>{$nxt['name']}</a><br>
     1153                                                                        <b>Код:</b> {$nxt['vc']}<br>
     1154                                                                        <b>Цена:</b> $cost руб. / {$nxt['units']}<br>
     1155                                                                        <b>Производитель:</b> {$nxt['proizv']}<br>
     1156                                                                        <b>Кол-во:</b> $nal<br>
     1157                                                                        <a href='/vitrina.php?mode=korz_add&amp;p={$nxt['id']}&amp;cnt=1' onclick=\"return ShowPopupWin('/vitrina.php?mode=korz_adj&amp;p={$nxt['id']}&amp;cnt=1','popwin');\" rel='nofollow'>В корзину!</a>
     1158                                                                        </div>");
     1159
     1160                        $i++;
     1161                        $cc = 1 - $cc;
     1162                        if ($i >= $lim)
     1163                                break;
     1164                }
     1165                $tmpl->AddText("<div class='clear'></div>");
     1166        }
     1167        /// Подробная таблица товаров
     1168        protected function TovList_ExTable($res, $lim) {
     1169                global $tmpl, $CONFIG, $c_cena_id;
     1170                $tmpl->AddText("<table width='100%' cellspacing='0' border='0' class='list'><tr class='title'><th>Наименование<th>Производитель<th>Наличие<th>Розничная цена <th>d, мм<th>D, мм<th>B, мм<th>m, кг<th>Купить</tr>");
     1171                $cc = 0;
     1172                $cl = "lin0";
     1173                $basket_img = "/skins/" . $CONFIG['site']['skin'] . "/basket16.png";
     1174                while ($nxt = mysql_fetch_array($res)) {
     1175                        $nal = $this->GetCountInfo($nxt['count'], $nxt['transit_cnt']);
     1176                        $link = $this->GetProductLink($nxt['id'], $nxt['name']);
     1177                        $cce = '';
     1178                        $dcc = strtotime($nxt['cost_date']);
     1179                        if ($dcc < (time() - 60 * 60 * 24 * 30 * 6))
     1180                                $cce = "style='color:#888'";
     1181                        $cost = GetCostPos($nxt['id'], $this->cost_id);
     1182                        $tmpl->AddText("<tr class='lin$cc'><td><a href='$link'>{$nxt['name']}</a><td>{$nxt['proizv']}<td>$nal
     1183                                                                        <td $cce>$cost<td>{$nxt['d_int']}<td>{$nxt['d_ext']}<td>{$nxt['size']}<td>{$nxt['mass']}<td>
     1184                                                                        <a href='/vitrina.php?mode=korz_add&amp;p={$nxt['id']}&amp;cnt=1' onclick=\"return ShowPopupWin('/vitrina.php?mode=korz_adj&amp;p={$nxt['id']}&amp;cnt=1','popwin');\" rel='nofollow'><img src='$basket_img' alt='В корзину!'></a>");
     1185                        $cc = 1 - $cc;
     1186                }
     1187                $tmpl->AddText("</table>");
     1188        }
     1189        /// Форма аутентификации при покупке. Выдаётся, только если посетитель не вошёл на сайт
     1190        protected function BuyAuthForm() {
     1191                global $tmpl, $CONFIG;
     1192                $tmpl->SetTitle("Оформление зкакза");
     1193                $tmpl->AddText("<p id='text'>Для использования всех возможностей этого сайта необходимо пройти процедуру регистрации. Регистрация не сложная, и займёт всего несколько минут.
     1194                                                Кроме того, все зарегистрированные пользователи получают возможность приобретать товары по специальным ценам.</p>
     1195                                                <form action='' method='post'>
     1196                                                <input type='hidden' name='mode' value='buy'>
     1197                                                <label><input type='radio' name='step' value='1'>Оформить заказ без регистрации</label><br>
     1198                                                <label><input type='radio' name='step' value='2'>Зарегистрироваться как новый покупатель</label><br>
     1199                                                <label><input type='radio' name='step' value='3'>Войти как уже зарегистрированный покупатель</label><br>
     1200                                                <button type='submit'>Далее</button>
     1201                                                </form>");
     1202        }
     1203        /// Заключительная форма оформления покупки
     1204        protected function BuyMakeForm() {
     1205                global $tmpl, $CONFIG;
     1206                $users_data = array ();
     1207                if (@ $_SESSION['uid']) {
     1208                        $res = mysql_query("SELECT `name`, `reg_email`, `reg_date`, `reg_email_subscribe`, `real_name`, `reg_phone`, `real_address` FROM `users` WHERE `id`='{$_SESSION['uid']}'");
     1209                        if (mysql_errno())
     1210                                throw new MysqlException("Не удалось получить основные данные пользователя!");
     1211                        $user_data = mysql_fetch_assoc($res);
     1212                        $rr = mysql_query("SELECT `param`,`value` FROM `users_data` WHERE `uid`='" . $_SESSION['uid'] . "'");
     1213                        if (mysql_errno())
     1214                                throw new MysqlException("Не удалось получить дополнительные данные пользователя!");
     1215                        while ($nn = mysql_fetch_row($rr)) {
     1216                                $user_dopdata["$nn[0]"] = $nn[1];
     1217                        }
     1218                        $str = 'Товар будет зарезервирован для Вас на 3 рабочих дня.';
     1219                        $email_field = '';
     1220                } else {
     1221                        $str = '<b>Для незарегистрированных пользователей наличие товара на складе не гарантируется.</b>';
     1222                        $email_field = "e-mail:<br>
     1223                                                                        <input type='text' name='email' value=''><br>
     1224                                                                        Необходимо заполнить телефон или e-mail<br><br>";
     1225                }
     1226
     1227                if (isset ($_REQUEST['cwarn']))
     1228                        $tmpl->msg("Необходимо заполнить e-mail или контактный телефон!", "err");
     1229
     1230                if (@ $user_data['reg_phone']) {
     1231                        $phone = substr($user_data['reg_phone'], 2);
     1232                } else {
     1233                        $phone = '';
     1234                }
     1235
     1236                $tmpl->AddText("
     1237                                                <h4>Для оформления заказа требуется следующая информация</h4>
     1238                                                <form action='/vitrina.php' method='post'>
     1239                                                <input type='hidden' name='mode' value='makebuy'>
     1240                                                <div>
     1241                                                Фамилия И.О.<br>
     1242                                                <input type='text' name='rname' value='" . @ $user_data['real_name'] . "'><br>
     1243                                                Мобильный телефон: <span id='phone_num'></span><br>
     1244                                                <small>Российский, 10 цифр, без +7 или 8</small>
     1245                                                <br>
     1246                                                +7<input type='text' name='phone' value='$phone' maxlength='10' placeholder='Номер' id='phone'><br>
     1247                                                <br>
     1248
     1249                                                $email_field");
     1250                if (is_array($CONFIG['payments']['types'])) {
     1251                        $tmpl->AddText("<br>Способ оплаты:<br>");
     1252                        foreach ($CONFIG['payments']['types'] as $type => $val) {
     1253                                if (!$val)
     1254                                        continue;
     1255                                if ($type == @ $CONFIG['payments']['default'])
     1256                                        $checked = ' checked';
     1257                                else
     1258                                        $checked = '';
     1259                                switch ($type) {
     1260                                        case 'cash' :
     1261                                                $s = "<label><input type='radio' name='pay_type' value='$type' id='soplat_nal'$checked>Наличный расчет.
     1262                                                                                                                                        <b>Только самовывоз</b>, расчет при отгрузке. $str</label><br>";
     1263                                                break;
     1264                                        case 'bank' :
     1265                                                $s = "<label><input type='radio' name='pay_type' value='$type'$checked>Безналичный банкосвкий перевод.
     1266                                                                                                                                        <b>Дольше</b> предыдущего - обработка заказа начнётся <b>только после поступления денег</b> на наш счёт (занимает 1-2 дня). После оформления заказа Вы сможете распечатать счёт для оплаты.</label><br>";
     1267                                                break;
     1268                                        case 'wmr' :
     1269                                                $s = "<label><input type='radio' name='pay_type' value='$type'$checked>Webmoney WMR.
     1270                                                                                                                                                        <b>Cамый быстрый</b> способ получить Ваш заказ. <b>Заказ поступит в обработку сразу</b> после оплаты.</b></label><br>";
     1271                                                break;
     1272                                        case 'card_o' :
     1273                                                $s = "<label><input type='radio' name='pay_type' value='$type'$checked>Платёжной картой
     1274                                                                                                                                                        <b>VISA, MasterCard</b> на сайте. Обработка заказа начнётся после подтверждения оплаты банком (обычно сразу после оплаты).</label><br>";
     1275                                                break;
     1276                                        case 'card_t' :
     1277                                                $s = "<label><input type='radio' name='pay_type' value='$type'$checked>Платёжной картой
     1278                                                                                                                                                        <b>VISA, MasterCard</b> при получении товара. С вами свяжутся и обсудят условия.</label><br>";
     1279                                                break;
     1280                                        case 'credit_brs' :
     1281                                                $s = "<label><input type='radio' name='pay_type' value='$type'$checked>Онлайн-кредит в банке &quot;Русский стандарт&quot; за 5 минут</label><br>";
     1282                                                break;
     1283                                        default :
     1284                                                $s = '';
    1821285                                }
    183                 if(@$_REQUEST['button']=='recalc')
    184                 {
    185                         if(getenv("HTTP_REFERER"))      header('Location: '.getenv("HTTP_REFERER"));
    186                         else    header('Location: /vitrina.php?mode=basket');
    187                 }
    188                 else    header('Location: /vitrina.php?mode=buy');
    189         }
    190         else if($mode=='buy')           $this->Buy();
    191         else if($mode=='makebuy')       $this->MakeBuy();
    192         else if($mode=='pay')           $this->Payment();
    193         else if($mode=='print_schet')
    194         {
    195                 include_once("include/doc.nulltype.php");
    196                 $doc=$_SESSION['order_id'];
    197                 if($doc)
    198                 {
    199                         $document=AutoDocument($doc);
    200                         $document->PrintForm($doc, 'schet_pdf');
    201                 }
    202                 else $tmpl->msg("Вы ещё не оформили заказ! Вернитесь и оформите!");
    203         }
    204         else if($mode=='comm_add')
    205         {
    206                 require_once("include/comments.inc.php");
    207                 if(!@$_SESSION['uid'])
    208                 {
    209                         if( (strtoupper($_SESSION['captcha_keystring'])!=strtoupper(@$_REQUEST['img'])) || ($_SESSION['captcha_keystring']=='') )
    210                         {
    211                                 unset($_SESSION['captcha_keystring']);
    212                                 throw new Exception("Защитный код введён неверно!");
    213                         }
    214                         unset($_SESSION['captcha_keystring']);
    215                         $cd=new CommentDispatcher('product',$p);
    216                         $cd->WriteComment(@$_REQUEST['text'], @$_REQUEST['rate'], @$_REQUEST['autor_name'], @$_REQUEST['autor_email']);
    217                 }
    218                 else
    219                 {
    220                         $cd=new CommentDispatcher('product',$p);
    221                         $cd->WriteComment(@$_REQUEST['text'], @$_REQUEST['rate']);
    222                 }
    223                 $tmpl->msg("Коментарий добавлен!","ok");
    224         }
    225         else
    226         {
    227                 header('HTTP/1.0 404 Not Found');
    228                 header('Status: 404 Not Found');
    229                 throw new Exception("Неверная опция. Возможно, вам дали неверную ссылку, или же это ошибка сайта. Во втором случае, сообщите администратору о возникшей проблеме.");
    230         }
    231 }
    232 
    233 // ======== Приватные функции ========================
    234 // -------- Основные функции -------------------------
    235 /// Корень каталога
    236 protected function TopGroup()
    237 {
    238         global $tmpl, $CONFIG;
    239         $tmpl->AddText("<h1 id='page-title'>Витрина</h1>");
    240         if($CONFIG['site']['vitrina_glstyle']=='item')  $this->GroupList_ItemStyle(0);
    241         else                                            $this->GroupList_ImageStyle(0);
    242 }
    243 
    244 /// Список групп / подгрупп
    245 protected function ViewGroup($group, $page)
    246 {
    247         global $tmpl, $CONFIG, $wikiparser;
    248         settype($group,'int');
    249         settype($page,'int');
    250         $res=mysql_query("SELECT `name`, `pid`, `desc`, `title_tag`, `meta_keywords`, `meta_description` FROM `doc_group` WHERE `id`='$group' AND `hidelevel`='0'");
    251         if(mysql_errno())       throw new MysqlException('Не удалось выбрать информацию о группе');
    252         $nxt=mysql_fetch_row($res);
    253         if(!$nxt)
    254         {
    255                 header('HTTP/1.0 404 Not Found');
    256                 header('Status: 404 Not Found');
    257                 throw new Exception('Группа не найдена! Воспользуйтесь каталогом.');
    258         }
    259         if(file_exists("{$CONFIG['site']['var_data_fs']}/category/$group.jpg"))
    260                 $tmpl->AddText("<div style='float: right; margin: 35px 35px 20px 20px;'><img src='{$CONFIG['site']['var_data_web']}/category/$group.jpg' alt='$nxt[0]'></div>");
    261 
    262         if($nxt[3])     $title=$nxt[3];
    263         else            $title=$nxt[0].', цены, купить';
    264         if($page>1)     $title.=" - стр.$page";
    265         $tmpl->SetTitle($title);
    266         if($nxt[4])     $tmpl->SetMetaKeywords($nxt[4]);
    267         else
    268         {
    269                 $k1=array('купить цены','продажа цены','отзывы купить','продажа отзывы','купить недорого');
    270                 $meta_key=$nxt[0].' '.$k1[rand(0,count($k1)-1)].' интернет-магазин '.$CONFIG['site']['display_name'];
    271                 $tmpl->SetMetaKeywords($meta_key);
    272         }
    273 
    274         if($nxt[5])     $tmpl->SetMetaDescription($nxt[5]);
    275         else
    276         {
    277                 $d1=array('купить','заказать','продажа','приобрести');
    278                 $d2=array('доступной','отличной','хорошей','разумной','выгодной');
    279                 $d3=array('цене','стоимости');
    280                 $d4=array('Большой','Широкий','Огромный');
    281                 $d5=array('выбор','каталог','ассортимент');
    282                 $d6=array('товаров','продукции');
    283                 $d7=array('Доставка','Экспресс-доставка','Доставка курьером','Почтовая доставка');
    284                 $d8=array('по всей России','в любой город России','по РФ','в любой регион России');
    285                 $meta_desc=$nxt[0].' - '.$d1[rand(0,count($d1)-1)].' в интернет-магазине '.$CONFIG['site']['display_name'].' по '.$d2[rand(0,count($d2)-1)].' '.$d3[rand(0,count($d3)-1)].'. '.$d4[rand(0,count($d4)-1)].' '.$d5[rand(0,count($d5)-1)].' '.$d6[rand(0,count($d6)-1)].'. '.$d7[rand(0,count($d7)-1)].' '.$d8[rand(0,count($d8)-1)].'.';
    286                 $tmpl->SetMetaDescription($meta_desc);
    287         }
    288 
    289         $h1=$nxt[0];
    290         if($page>1)     $h1.=" - стр.$page";
    291         $tmpl->AddText("<h1 id='page-title'>$h1</h1>");
    292         $tmpl->AddText("<div class='breadcrumb'>".$this->GetVitPath($nxt[1])."</div>");
    293         if($nxt[2])
    294         {
    295                 $text=$wikiparser->parse(html_entity_decode($nxt[2],ENT_QUOTES,"UTF-8"));
    296                 $tmpl->AddText("<div class='group-description'>$text</div><br>");
    297         }
    298         $tmpl->AddText("<div style='clear: right'></div>");
    299         if($CONFIG['site']['vitrina_glstyle']=='item')  $this->GroupList_ItemStyle($group);
    300         else                                            $this->GroupList_ImageStyle($group);
    301         /// TODO: сделать возможность выбора вида отображения списка товаров посетителем
    302         $this->ProductList($group, $page);
    303 }
    304 
    305 /// Список товаров в группе
    306 protected function ProductList($group, $page)
    307 {
    308         global $tmpl, $CONFIG;
    309         if(isset($_GET['op']))
    310                 $_SESSION['vit_photo_only']=$_GET['op']?1:0;
    311 
    312         if(isset($_REQUEST['order']))                   $order=$_REQUEST['order'];
    313         else if(isset($_SESSION['vitrina_order']))      $order=@$_SESSION['vitrina_order'];
    314         else $order='';
    315         if(!$order)     $order=@$CONFIG['site']['vitrina_order'];
    316 
    317         switch($order)
    318         {
    319                 case 'n':       $sql_order='`doc_base`.`name`';         break;
    320                 case 'nd':      $sql_order='`doc_base`.`name` DESC';    break;
    321                 case 'vc':      $sql_order='`doc_base`.`vc`';           break;
    322                 case 'vcd':     $sql_order='`doc_base`.`vc` DESC';      break;
    323                 case 'c':       $sql_order='`doc_base`.`cost`';         break;
    324                 case 'cd':      $sql_order='`doc_base`.`cost` DESC';    break;
    325                 case 's':       $sql_order='`count`';                   break;
    326                 case 'sd':      $sql_order='`count` DESC';              break;
    327                 default:        $sql_order='`doc_base`.`name`';
    328                                 $order='n';
    329         }
    330         $_SESSION['vitrina_order']=$order;
    331 
    332         if(isset($_REQUEST['view']))                    $view=$_REQUEST['view'];
    333         else if(isset($_SESSION['vitrina_view']))       $view=@$_SESSION['vitrina_view'];
    334         else $view='';
    335         if($view!='i' && $view!='l' && $view!='t')
    336         {
    337                 if($CONFIG['site']['vitrina_plstyle']=='imagelist')             $view='i';
    338                 else if($CONFIG['site']['vitrina_plstyle']=='extable')          $view='t';
    339                 else                                                            $view='l';
    340         }
    341         $_SESSION['vitrina_view']=$view;
    342 
    343         $sql_photo_only=@$_SESSION['vit_photo_only']?"AND `img_id` IS NOT NULL":"";
    344         $cnt_where=@$CONFIG['site']['vitrina_sklad']?(" AND `doc_base_cnt`.`sklad`=".intval($CONFIG['site']['vitrina_sklad'])." "):'';
    345         $sql="SELECT `doc_base`.`id`, `doc_base`.`group`, `doc_base`.`name`, `doc_base`.`desc`, `doc_base`.`cost_date`, `doc_base`.`cost`,
    346         ( SELECT SUM(`doc_base_cnt`.`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` $cnt_where GROUP BY `doc_base`.`id`) AS `count`,
    347         `doc_base`.`transit_cnt`, `doc_base_dop`.`d_int`, `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`, `doc_base`.`proizv`, `doc_img`.`id` AS `img_id`, `doc_img`.`type` AS `img_type`, `class_unit`.`rus_name1` AS `units`, `doc_base`.`vc`
    348         FROM `doc_base`
    349         LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
    350         LEFT JOIN `doc_base_img` ON `doc_base_img`.`pos_id`=`doc_base`.`id` AND `doc_base_img`.`default`='1'
    351         LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
    352         LEFT JOIN `class_unit` ON `doc_base`.`unit`=`class_unit`.`id`
    353         WHERE `doc_base`.`group`='$group' AND `doc_base`.`hidden`='0' $sql_photo_only
    354         ORDER BY $sql_order";
    355         $res=mysql_query($sql);
    356         if(mysql_errno())       throw new MysqlException("Не удалось получить список товаров!");
    357         $lim=$CONFIG['site']['vitrina_limit'];
    358         if($lim==0)     $lim=100;
    359         $rows=mysql_num_rows($res);
    360         if($rows)
    361         {
    362                 $this->OrderAndViewBar($group,$page,$order,$view);
    363 
    364                 $this->PageBar($group, $rows, $lim, $page);
    365                 if(($lim<$rows) && $page )      mysql_data_seek($res, $lim*($page-1));
    366                 if($view=='i')                  $this->TovList_ImageList($res, $lim);
    367                 else if($view=='t')             $this->TovList_ExTable($res, $lim);
    368                 else                            $this->TovList_SimpleTable($res, $lim);
    369                 $this->PageBar($group, $rows, $lim, $page);
    370                 $tmpl->AddText("<span style='color:#888'>Серая цена</span> требует уточнения<br>");
    371         }
    372 }
    373 
    374 /// Блок товаров, выбранных по признаку, основанному на типе блока
    375 protected function ViewBlock($block)
    376 {
    377         global $tmpl, $CONFIG;
    378         $cnt_where=@$CONFIG['site']['vitrina_sklad']?(" AND `doc_base_cnt`.`sklad`=".intval($CONFIG['site']['vitrina_sklad'])." "):'';
    379         /// Определение типа блока
    380         if($block=='stock')
    381         {
    382                 $sql="SELECT `doc_base`.`id`, `doc_base`.`group`, `doc_base`.`name`, `doc_base`.`desc`, `doc_base`.`cost_date`, `doc_base`.`cost`,
    383                 ( SELECT SUM(`doc_base_cnt`.`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` $cnt_where GROUP BY `doc_base`.`id`) AS `count`,
    384                 `doc_base`.`transit_cnt`, `doc_base_dop`.`d_int`, `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`, `doc_base`.`proizv`, `doc_img`.`id` AS `img_id`, `doc_img`.`type` AS `img_type`, `class_unit`.`rus_name1` AS `units`, `doc_base`.`vc`
    385                 FROM `doc_base`
    386                 LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
    387                 LEFT JOIN `doc_base_img` ON `doc_base_img`.`pos_id`=`doc_base`.`id` AND `doc_base_img`.`default`='1'
    388                 LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
    389                 LEFT JOIN `class_unit` ON `doc_base`.`unit`=`class_unit`.`id`
    390                 WHERE `doc_base`.`hidden`='0' AND `doc_base`.`stock`!='0'
    391                 ORDER BY `doc_base`.`likvid` ASC";
    392                 $tmpl->AddText("<h1>Распродажа</h1>");
    393         }
    394         else if($block=='popular')
    395         {
    396                 $sql="SELECT `doc_base`.`id`, `doc_base`.`group`, `doc_base`.`name`, `doc_base`.`desc`, `doc_base`.`cost_date`, `doc_base`.`cost`,
    397                 ( SELECT SUM(`doc_base_cnt`.`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` $cnt_where GROUP BY `doc_base`.`id`) AS `count`,
    398                 `doc_base`.`transit_cnt`, `doc_base_dop`.`d_int`, `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`, `doc_base`.`proizv`, `doc_img`.`id` AS `img_id`, `doc_img`.`type` AS `img_type`, `class_unit`.`rus_name1` AS `units`, `doc_base`.`vc`
    399                 FROM `doc_base`
    400                 INNER JOIN `doc_group` ON `doc_group`.`id`= `doc_base`.`group` AND `doc_group`.`hidelevel`='0'
    401                 LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
    402                 LEFT JOIN `doc_base_img` ON `doc_base_img`.`pos_id`=`doc_base`.`id` AND `doc_base_img`.`default`='1'
    403                 LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
    404                 LEFT JOIN `class_unit` ON `doc_base`.`unit`=`class_unit`.`id`
    405                 WHERE `doc_base`.`hidden`='0'
    406                 ORDER BY `doc_base`.`likvid` DESC
    407                 LIMIT 48";
    408                 $tmpl->AddText("<h1>Популярные товары</h1>");
    409         }
    410         else if($block=='new')
    411         {
    412                 if($CONFIG['site']['vitrina_newtime'])  $new_time=date("Y-m-d H:i:s",time()-60*60*24*$CONFIG['site']['vitrina_newtime']);
    413                 else                                    $new_time=date("Y-m-d H:i:s",time()-60*60*24*180);
    414                 $sql="SELECT `doc_base`.`id`, `doc_base`.`group`, `doc_base`.`name`, `doc_base`.`desc`, `doc_base`.`cost_date`, `doc_base`.`cost`,
    415                 ( SELECT SUM(`doc_base_cnt`.`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` $cnt_where GROUP BY `doc_base`.`id`) AS `count`,
    416                 `doc_base`.`transit_cnt`, `doc_base_dop`.`d_int`, `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`, `doc_base`.`proizv`, `doc_img`.`id` AS `img_id`, `doc_img`.`type` AS `img_type`, `class_unit`.`rus_name1` AS `units`, `doc_base`.`vc`
    417                 FROM `doc_base`
    418                 INNER JOIN `doc_group` ON `doc_group`.`id`= `doc_base`.`group` AND `doc_group`.`hidelevel`='0'
    419                 LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
    420                 LEFT JOIN `doc_base_img` ON `doc_base_img`.`pos_id`=`doc_base`.`id` AND `doc_base_img`.`default`='1'
    421                 LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
    422                 LEFT JOIN `class_unit` ON `doc_base`.`unit`=`class_unit`.`id`
    423                 WHERE `doc_base`.`hidden`='0' AND (`doc_base`.`create_time`>='$new_time' OR `doc_base`.`buy_time`>='$new_time')
    424                 ORDER BY `doc_base`.`buy_time` DESC
    425                 LIMIT 24";
    426                 $tmpl->AddText("<h1>Новинки</h1>");
    427         }
    428         else if($block=='transit')
    429         {
    430                 $sql="SELECT `doc_base`.`id`, `doc_base`.`group`, `doc_base`.`name`, `doc_base`.`desc`, `doc_base`.`cost_date`, `doc_base`.`cost`,
    431                 ( SELECT SUM(`doc_base_cnt`.`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` $cnt_where GROUP BY `doc_base`.`id`) AS `count`,
    432                 `doc_base`.`transit_cnt`, `doc_base_dop`.`d_int`, `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`, `doc_base`.`proizv`, `doc_img`.`id` AS `img_id`, `doc_img`.`type` AS `img_type`, `class_unit`.`rus_name1` AS `units`, `doc_base`.`vc`
    433                 FROM `doc_base`
    434                 INNER JOIN `doc_group` ON `doc_group`.`id`= `doc_base`.`group` AND `doc_group`.`hidelevel`='0'
    435                 LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
    436                 LEFT JOIN `doc_base_img` ON `doc_base_img`.`pos_id`=`doc_base`.`id` AND `doc_base_img`.`default`='1'
    437                 LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
    438                 LEFT JOIN `class_unit` ON `doc_base`.`unit`=`class_unit`.`id`
    439                 WHERE `doc_base`.`hidden`='0' AND `doc_base`.`transit_cnt`>0
    440                 ORDER BY `doc_base`.`name`";
    441                 $tmpl->AddText("<h1>Товар в пути</h1>");
    442         }
    443         else
    444         {
    445                 header('HTTP/1.0 404 Not Found');
    446                 header('Status: 404 Not Found');
    447                 throw new Exception('Блок не найден!');
    448         }
    449 
    450         $res=mysql_query($sql);
    451         if(mysql_errno())       throw new MysqlException("Не удалось получить список товаров!");
    452         $lim=1000;
    453         $rows=mysql_num_rows($res);
    454         if($rows)
    455         {
    456                 if($CONFIG['site']['vitrina_plstyle']=='imagelist')             $view='i';
    457                 else if($CONFIG['site']['vitrina_plstyle']=='extable')          $view='t';
    458                 else                                                            $view='l';
    459 
    460                 if($view=='i')                  $this->TovList_ImageList($res, $lim);
    461                 else if($view=='t')             $this->TovList_ExTable($res, $lim);
    462                 else                            $this->TovList_SimpleTable($res, $lim);
    463 
    464                 $tmpl->AddText("<span style='color:#888'>Серая цена</span> требует уточнения<br>");
    465         }
    466         else $tmpl->msg("Товары в данной категории отсутствуют");
    467 }
    468 
    469 /// Блок ссылок смены вида отображения и сортировки
    470 protected function OrderAndViewBar($group,$page,$order,$view)
    471 {
    472         global $tmpl;
    473         $tmpl->AddText("<div class='orderviewbar'>");
    474         $tmpl->AddText("<div class='orderbar'>Показывать: ");
    475         if($view=='i')  $tmpl->AddText("<span class='selected'>Картинками</span> ");
    476         else            $tmpl->AddText("<span><a href='".$this->GetGroupLink($group, $page, 'view=i')."'>Картинками</a></span> ");
    477         if($view=='t')  $tmpl->AddText("<span class='selected'>Таблицей</span> ");
    478         else            $tmpl->AddText("<span><a href='".$this->GetGroupLink($group, $page, 'view=t')."'>Таблицей</a></span> ");
    479         if($view=='l')  $tmpl->AddText("<span class='selected'>Списком</span> ");
    480         else            $tmpl->AddText("<span><a href='".$this->GetGroupLink($group, $page, 'view=l')."'>Списком</a></span> ");
    481         if(@$_SESSION['vit_photo_only'])        $tmpl->AddText("<span class='selected'><a class='down'  href='".$this->GetGroupLink($group, $page, 'op=0')."'>Только с фото</a></span> ");
    482         else                                    $tmpl->AddText("<span><a href='".$this->GetGroupLink($group, $page, 'op=1')."'>Только с фото</a></span> ");
    483         $tmpl->AddText("</div>");
    484         $tmpl->AddText("<div class='viewbar'>Сортировать по: ");
    485         if($order=='n')         $tmpl->AddText("<span class='selected'><a href='".$this->GetGroupLink($group, $page, 'order=nd')."'>Названию</a></span> ");
    486         else if($order=='nd')   $tmpl->AddText("<span class='selected'><a class='down' href='".$this->GetGroupLink($group, $page, 'order=n')."'>Названию</a></span> ");
    487         else                    $tmpl->AddText("<span><a href='".$this->GetGroupLink($group, $page, 'order=n')."'>Названию</a></span> ");
    488 
    489         if($order=='vc')        $tmpl->AddText("<span class='selected'><a href='".$this->GetGroupLink($group, $page, 'order=vcd')."'>Коду</a></span> ");
    490         else if($order=='vcd')  $tmpl->AddText("<span class='selected'><a href='".$this->GetGroupLink($group, $page, 'order=vc')."'>Коду</a></span> ");
    491         else                    $tmpl->AddText("<span><a class='down' href='".$this->GetGroupLink($group, $page, 'order=vc')."'>Коду</a></span> ");
    492 
    493         if($order=='c')         $tmpl->AddText("<span class='selected'><a href='".$this->GetGroupLink($group, $page, 'order=cd')."'>Цене</a></span> ");
    494         else if($order=='cd')   $tmpl->AddText("<span class='selected'><a class='down' href='".$this->GetGroupLink($group, $page, 'order=c')."'>Цене</a></span> ");
    495         else            $tmpl->AddText("<span><a href='".$this->GetGroupLink($group, $page, 'order=c')."'>Цене</a></span> ");
    496 
    497         if($order=='s')         $tmpl->AddText("<span class='selected'><a href='".$this->GetGroupLink($group, $page, 'order=sd')."'>Наличию</a></span> ");
    498         else if($order=='sd')   $tmpl->AddText("<span class='selected'><a class='down' href='".$this->GetGroupLink($group, $page, 'order=s')."'>Наличию</a></span> ");
    499         else                    $tmpl->AddText("<span><a href='".$this->GetGroupLink($group, $page, 'order=s')."'>Наличию</a></span> ");
    500         $tmpl->AddText("</div><div class='clear'></div>");
    501         $tmpl->AddText("</div>");
    502 }
    503 
    504 /// Карточка товара
    505 protected function ProductCard($product)
    506 {
    507         global $tmpl, $CONFIG, $wikiparser;
    508         settype($product,'int');
    509         $cnt_where=@$CONFIG['site']['vitrina_sklad']?(" AND `doc_base_cnt`.`sklad`=".intval($CONFIG['site']['vitrina_sklad'])." "):'';
    510         $res=mysql_query("SELECT `doc_base`.`id`, `doc_base`.`name`, `doc_base`.`desc`, `doc_base`.`group`, `doc_base`.`cost`,
    511         `doc_base`.`proizv`, `doc_base_dop`.`d_int`, `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`,
    512         `doc_base_dop`.`mass`, `doc_base_dop`.`analog`, ( SELECT SUM(`doc_base_cnt`.`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` $cnt_where), `doc_img`.`id` AS `img_id`, `doc_img`.`type` AS `img_type`, `doc_base_dop_type`.`name` AS `dop_name`, `class_unit`.`name` AS `units`, `doc_group`.`printname` AS `group_printname`, `doc_base`.`vc`, `doc_base`.`title_tag`, `doc_base`.`meta_description`, `doc_base`.`meta_keywords`
    513         FROM `doc_base`
    514         INNER JOIN `doc_group` ON `doc_base`.`group`=`doc_group`.`id`
    515         LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
    516         LEFT JOIN `doc_base_dop_type` ON `doc_base_dop_type`.`id`=`doc_base_dop`.`type`
    517         LEFT JOIN `doc_base_img` ON `doc_base_img`.`pos_id`=`doc_base`.`id` AND `doc_base_img`.`default`='1'
    518         LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
    519         LEFT JOIN `class_unit` ON `doc_base`.`unit`=`class_unit`.`id`
    520         WHERE `doc_base`.`id`='$product'
    521         ORDER BY `doc_base`.`name` ASC LIMIT 1");
    522         if(mysql_errno())       throw new MysqlException('Не удалось получить карточку товара!');
    523         $i=0;
    524         if($nxt=mysql_fetch_array($res))
    525         {
    526                 if($nxt['title_tag'])   $title=$nxt['title_tag'];
    527                 else                    $title="{$nxt['group_printname']} {$nxt['name']}, цены и характеристики, купить";
    528                 $tmpl->SetTitle($title);
    529                 $base=abs(crc32($nxt['name'].$nxt['group'].$nxt['proizv'].$nxt['vc'].$nxt['desc']));
    530                 if($nxt['meta_keywords'])       $tmpl->SetMetaKeywords($nxt['meta_keywords']);
    531                 else
    532                 {
    533                         $k1=array('купить','цены','характеристики','фото','выбор','каталог','описания','отзывы','продажа','описание');
    534                         $l=count($k1);
    535                         $i1=$base%$l;
    536                         $base=floor($base/$l);
    537                         $i2=$base%$l;
    538                         $base=floor($base/$l);
    539                         $meta_key=$nxt['group_printname'].' '.$nxt['name'].' '.$k1[$i1].' '.$k1[$i2];
    540                         $tmpl->SetMetaKeywords($meta_key);
    541                 }
    542 
    543                 if($nxt['meta_description'])    $tmpl->SetMetaDescription($nxt['meta_description']);
    544                 else
    545                 {
    546                         $d=array();
    547                         $d[0]=array($nxt['group_printname'].' '.$nxt['name'].' '.$nxt['proizv'].' - ');
    548                         $d[1]=array('купить','заказать','продажа','приобрести');
    549                         $d[2]=array(' в интернет-магазине '.$CONFIG['site']['display_name'].' по ');
    550                         $d[3]=array('доступной','отличной','хорошей','разумной','выгодной');
    551                         $d[4]=array('цене.','стоимости.');
    552                         $d[5]=array('Большой','Широкий','Огромный');
    553                         $d[6]=array('выбор','каталог','ассортимент');
    554                         $d[7]=array('товаров.','продукции.');
    555                         $d[8]=array('Доставка','Экспресс-доставка','Доставка курьером','Почтовая доставка');
    556                         $d[9]=array('по всей России.','в любой город России.','по РФ.','в любой регион России.');
    557                         $str='';
    558                         foreach($d as $id => $item)
    559                         {
    560                                 $l=count($item);
    561                                 $i=$base%$l;
    562                                 $base=floor($base/$l);
    563                                 $str.=$item[$i].' ';
    564                         }
    565                         $tmpl->SetMetaDescription($str);
    566                 }
    567 
    568 
    569                 $tmpl->AddText("<h1 id='page-title'>{$nxt['group_printname']} {$nxt['name']}</h1>");
    570                 $tmpl->AddText("<div class='breadcrumb'>".$this->GetVitPath($nxt['group'])."</div>");
    571                 $appends=$img_mini="";
    572                 if($nxt['img_id'])
    573                 {
    574                         $miniimg=new ImageProductor($nxt['img_id'],'p', $nxt['img_type']);
    575                         $miniimg->SetY(220);
    576                         $miniimg->SetX(200);
    577                         $fullimg=new ImageProductor($nxt['img_id'],'p', $nxt['img_type']);
    578                         $img="<img src='".$miniimg->GetURI()."' alt='{$nxt['name']}' onload='$(this).fadeTo(500,1);' style='opacity: 1' id='midiphoto'>";
    579                         $res=mysql_query("SELECT `doc_img`.`id` AS `img_id`, `doc_base_img`.`default`, `doc_img`.`name`, `doc_img`.`type` AS `img_type` FROM `doc_base_img`
    580                         LEFT JOIN `doc_img` ON `doc_img`.`id`=`doc_base_img`.`img_id`
    581                         WHERE `doc_base_img`.`pos_id`='{$nxt['id']}'");
    582                         if(mysql_errno())       throw new MysqlException('Не удалось выбрать информацию о изображениях');
    583 
    584                         while($img_data=mysql_fetch_assoc($res))
    585                         {
    586                                 $miniimg=new ImageProductor($img_data['img_id'],'p', $img_data['img_type']);
    587                                 $miniimg->SetX(40);
    588                                 $miniimg->SetY(40);
    589                                 $midiimg=new ImageProductor($img_data['img_id'],'p', $img_data['img_type']);
    590                                 $midiimg->SetX(200);
    591                                 $midiimg->SetY(220);
    592                                 $fullimg=new ImageProductor($img_data['img_id'],'p', $img_data['img_type']);
    593                                 //$fullimg->SetY(300);
    594                                 if(mysql_num_rows($res)>1)
    595                                         $img_mini.="<a href='".$midiimg->GetURI()."' onclick=\"return setPhoto({$img_data['img_id']});\"><img src='".$miniimg->GetURI()."' alt='{$img_data['name']}'></a>";
    596                                 $appends.="midiphoto.appendImage({$img_data['img_id']},'".html_entity_decode($midiimg->GetURI(), ENT_COMPAT, 'UTF-8')."', '".html_entity_decode($fullimg->GetURI(), ENT_COMPAT, 'UTF-8')."');\n";
    597 
    598                         }
    599                 }
    600                 else $img="<img src='/skins/{$CONFIG['site']['skin']}/images/no_photo.png' alt='no photo'>";
    601 
    602                 $tmpl->AddText("<table class='product-card'>
    603                 <tr valign='top'><td rowspan='15' width='150'>
    604                 <div class='image'><div class='one load'>$img</div><div class='list'>$img_mini</div></div>
    605                 <script>
    606                 var midiphoto=tripleView('midiphoto')
    607                 $appends
    608                 function setPhoto(id)
    609                 {
    610                         return midiphoto.setPhoto(id)
    611                 }
    612                 </script>");
    613 
    614                 $tmpl->AddText("<td class='field'>Наименование:<td>{$nxt['name']}");
    615                 if($nxt['vc']) $tmpl->AddText("<tr><td class='field'>Код производителя:<td>{$nxt['vc']}<br>");
    616                 if($nxt[2])
    617                 {
    618                         $text=$wikiparser->parse(html_entity_decode($nxt[2],ENT_QUOTES,"UTF-8"));
    619                         $tmpl->AddText("<tr><td valign='top' class='field'>Описание:<td>$text");
    620                 }
    621                 if($nxt[14]) $tmpl->AddText("<tr><td class='field'>Тип:<td>$nxt[14]");
    622                 $cena=GetCostPos($nxt[0], $this->cost_id);
    623                 $tmpl->AddText("<tr><td class='field'>Цена:<td>$cena<br>");
    624                 $tmpl->AddText("<tr><td class='field'>Единица измерения:<td>$nxt[15]<br>");
    625                 if($nxt[11]) $tmpl->AddText("<tr><td class='field'>Наличие: <td><b>ЕСТЬ</b><br>");
    626                 else $tmpl->AddText("<tr><td class='field'>Наличие:<td>Под заказ<br>");
    627                 if($nxt[6]) $tmpl->AddText("<tr><td class='field'>Внутренний диаметр: <td>$nxt[6] мм.<br>");
    628                 if($nxt[7]) $tmpl->AddText("<tr><td class='field'>Внешний диаметр: <td>$nxt[7] мм.<br>");
    629                 if($nxt[8]) $tmpl->AddText("<tr><td class='field'>Высота: <td>$nxt[8] мм.<br>");
    630                 if($nxt[9]) $tmpl->AddText("<tr><td class='field'>Масса: <td>$nxt[9] кг.<br>");
    631                 if($nxt[10]) $tmpl->AddText("<tr><td class='field'>Аналог: <td>$nxt[10]<br>");
    632                 if($nxt[5]) $tmpl->AddText("<tr><td class='field'>Производитель: <td>$nxt[5]<br>");
    633 
    634                 $param_res=mysql_query("SELECT `doc_base_params`.`param`, `doc_base_values`.`value` FROM `doc_base_values`
    635                 LEFT JOIN `doc_base_params` ON `doc_base_params`.`id`=`doc_base_values`.`param_id`
    636                 WHERE `doc_base_values`.`id`='{$nxt['id']}' AND `doc_base_params`.`pgroup_id`='0' AND `doc_base_params`.`system`='0'");
    637                 if(mysql_errno())       throw new MysqlException("Не удалось получить список свойств!");
    638                 while($params=mysql_fetch_row($param_res))
    639                 {
    640                         $tmpl->AddText("<tr><td class='field'>$params[0]:<td>$params[1]</tr>");
    641                 }
    642 
    643                 $resg=mysql_query("SELECT `id`, `name` FROM `doc_base_gparams`");
    644                 if(mysql_errno())       throw new MysqlException("Не удалось параметры групп складской номенклатуры");
    645                 while($nxtg=mysql_fetch_row($resg))
    646                 {
    647                         $f=0;
    648                         $param_res=mysql_query("SELECT `doc_base_params`.`param`, `doc_base_values`.`value` FROM `doc_base_values`
    649                         LEFT JOIN `doc_base_params` ON `doc_base_params`.`id`=`doc_base_values`.`param_id`
    650                         WHERE `doc_base_values`.`id`='{$nxt['id']}' AND `doc_base_params`.`pgroup_id`='$nxtg[0]' AND `doc_base_params`.`system`='0'");
    651                         if(mysql_errno())       throw new MysqlException("Не удалось получить список свойств!");
    652                         while($params=mysql_fetch_row($param_res))
    653                         {
    654                                 if(!$f)
    655                                 {
    656                                         $f=1;
    657                                         $tmpl->AddText("<tr><th colspan='2'>$nxtg[1]</th></tr>");
     1286
     1287                                $tmpl->AddText($s);
     1288                        }
     1289                }
     1290
     1291                $tmpl->AddText("<label><input type='checkbox' name='delivery' id='delivery' value='1'>Нужна доставка</label><br>
     1292                                                <div id='delivery_fields'>
     1293                                                Желаемые дата и время доставки:<br>
     1294                                                <input type='text' name='delivery_date'><br>
     1295                                                <br>Адрес доставки:<br>
     1296                                                <textarea name='adres' rows='5' cols='80'>" . @ $user_data['real_address'] . "</textarea><br>
     1297                                                </div>
     1298
     1299
     1300
     1301                                                Другая информация:<br>
     1302                                                <textarea name='dop' rows='5' cols='80'>" . @ $user_dopdata['dop_info'] . "</textarea><br>
     1303                                                <button type='submit'>Оформить заказ</button>
     1304                                                </div>
     1305                                                </form>
     1306                                                <script>
     1307
     1308                                                var delivery=document.getElementById('delivery')
     1309                                                var delivery_fields=document.getElementById('delivery_fields')
     1310                                                function deliveryCheck()
     1311                                                {
     1312                                                        if(delivery.checked)
     1313                                                                delivery_fields.style.display='block';
     1314                                                        else    delivery_fields.style.display='none';
     1315                                                }
     1316                                                delivery.onclick=deliveryCheck;
     1317                                                deliveryCheck();
     1318
     1319                                                </script>
     1320                                                ");
     1321        }
     1322
     1323        /// Сделать покупку
     1324        protected function MakeBuy() {
     1325                global $tmpl, $CONFIG, $uid, $xmppclient;
     1326                $pay_type = @ $_REQUEST['pay_type'];
     1327                switch ($pay_type) {
     1328                        case 'bank' :
     1329                        case 'cash' :
     1330                        case 'card_o' :
     1331                        case 'card_t' :
     1332                        case 'credit_brs' :
     1333                        case 'wmr' :
     1334                                break;
     1335                        default :
     1336                                $pay_type = '';
     1337                }
     1338                $rname = @ $_REQUEST['rname'];
     1339                $rname_sql = mysql_real_escape_string($rname);
     1340                $adres = @ $_REQUEST['adres'];
     1341                $adres_sql = mysql_real_escape_string($adres);
     1342                $email = @ $_REQUEST['email'];
     1343                $email_sql = mysql_real_escape_string($email);
     1344                $delivery = intval(@ $_REQUEST['delivery']);
     1345                $delivery_date = mysql_real_escape_string(@ $_REQUEST['delivery_date']);
     1346                $comment = @ $_REQUEST['dop'];
     1347                $comment_sql = mysql_real_escape_string($comment);
     1348
     1349                if (@ $_REQUEST['phone']) {
     1350                        $tel = '+7' . intval(@ $_REQUEST['phone']);
     1351                } else
     1352                        $tel = '';
     1353
     1354                if (@ $_SESSION['uid']) {
     1355                        mysql_query("UPDATE `users` SET `real_name`='$rname_sql', `real_address`='$adres_sql' WHERE `id`='$uid'");
     1356                        if (mysql_errno())
     1357                                throw new MysqlException("Не удалось обновить основные данные пользователя!");
     1358                        mysql_query("REPLACE `users_data` (`uid`, `param`, `value`) VALUES ('$uid', 'dop_info', '$comment_sql') ");
     1359                        if (mysql_errno())
     1360                                throw new MysqlException("Не удалось обновить дополнительные данные пользователя!");
     1361                } else
     1362                        if (!$tel && !$email) {
     1363                                header("Location: /vitrina.php?mode=buy&step=1&cwarn=1");
     1364                                return;
     1365                        }
     1366
     1367                if ($_SESSION['basket']['cnt']) {
     1368                        if (!isset ($CONFIG['site']['vitrina_subtype']))
     1369                                $subtype = "site";
     1370                        else
     1371                                $subtype = $CONFIG['site']['vitrina_subtype'];
     1372                        $agent = 1;
     1373                        //if($_SESSION['uid'])  $agent=$_SESSION['uid'];        // ?????????????????????????/
     1374                        $tm = time();
     1375                        $altnum = GetNextAltNum(3, $subtype, 0, date('Y-m-d'), $CONFIG['site']['default_firm']);
     1376                        $ip = getenv("REMOTE_ADDR");
     1377                        $res = mysql_query("SELECT `num` FROM `doc_kassa` WHERE `ids`='bank' AND `firm_id`='{$CONFIG['site']['default_firm']}'");
     1378                        if (mysql_errno())
     1379                                throw new MysqlException("Не удалось определить банк");
     1380                        if (mysql_num_rows($res) < 1)
     1381                                throw new Exception("Не найден банк выбранной организации");
     1382                        $bank = mysql_result($res, 0, 0);
     1383
     1384                        $res = mysql_query("INSERT INTO doc_list (`type`,`agent`,`date`,`sklad`,`user`,`nds`,`altnum`,`subtype`,`comment`,`firm_id`,`bank`)
     1385                                                                        VALUES ('3','$agent','$tm','1','$uid','1','$altnum','$subtype','$comment_sql','{$CONFIG['site']['default_firm']}','$bank')");
     1386
     1387                        if (mysql_errno())
     1388                                throw new MysqlException("Не удалось создать документ заявки");
     1389                        $doc = mysql_insert_id();
     1390                        mysql_query("REPLACE INTO `doc_dopdata` (`doc`, `param`, `value`) VALUES ('$doc', 'cena', '{$this->cost_id}'), ('$doc', 'ishop', '1'),  ('$doc', 'buyer_email', '$email_sql'), ('$doc', 'buyer_phone', '$tel'), ('$doc', 'buyer_rname', '$rname_sql'), ('$doc', 'buyer_ip', '$ip'), ('$doc', 'delivery', '$delivery'), ('$doc', 'delivery_date', '$delivery_date'), ('$doc', 'delivery_address', '$adres_sql'), ('$doc', 'pay_type', '$pay_type') ");
     1391                        if (mysql_errno())
     1392                                throw new MysqlException("Не удалось установить цену документа");
     1393                        $zakaz_items = $admin_items = '';
     1394                        foreach ($_SESSION['basket']['cnt'] as $item => $cnt) {
     1395                                $cena = GetCostPos($item, $this->cost_id);
     1396                                if (isset ($_SESSION['basket']['comments'][$item]))
     1397                                        $comm = mysql_real_escape_string($_SESSION['basket']['comments'][$item]);
     1398                                else
     1399                                        $comm = '';
     1400                                mysql_query("INSERT INTO `doc_list_pos` (`doc`,`tovar`,`cnt`,`cost`,`comm`) VALUES ('$doc','$item','$cnt','$cena','$comm')");
     1401                                if (mysql_errno())
     1402                                        throw new MysqlException("Не удалось добавить товар в заказ");
     1403                                $res = mysql_query("SELECT `doc_base`.`id`, `doc_group`.`printname`, `doc_base`.`name`, `doc_base`.`proizv`, `doc_base`.`vc`, `doc_base`.`cost`, `class_unit`.`rus_name1` FROM `doc_base`
     1404                                                                                                LEFT JOIN `doc_group` ON `doc_group`.`id`=`doc_base`.`group`
     1405                                                                                                LEFT JOIN `class_unit` ON `class_unit`.`id`=`doc_base`.`unit`
     1406                                                                                                WHERE `doc_base`.`id`='$item'");
     1407                                if (mysql_errno())
     1408                                        throw new MysqlException("Не удалось получить информацию о товаре");
     1409                                $tov_info = mysql_fetch_row($res);
     1410                                $zakaz_items .= "$tov_info[1] $tov_info[2]/$tov_info[3] ($tov_info[4]), $cnt $tov_info[6] - $cena руб.\n";
     1411                                $admin_items .= "$tov_info[1] $tov_info[2]/$tov_info[3] ($tov_info[4]), $cnt $tov_info[6] - $cena руб. (базовая - $tov_info[5]р.)\n";
     1412                        }
     1413                        $zakaz_sum = DocSumUpdate($doc);
     1414                        $_SESSION['order_id'] = $doc;
     1415
     1416                        $text = "На сайте {$CONFIG['site']['name']} оформлен новый заказ.\n";
     1417                        $text .= "Посмотреть можно по ссылке: http://{$CONFIG['site']['name']}/doc.php?mode=body&doc=$doc\nIP отправителя: " . getenv("REMOTE_ADDR") . "\nSESSION ID:" . session_id();
     1418                        if (@ $_SESSION['name'])
     1419                                $text .= "\nLogin отправителя: " . $_SESSION['name'];
     1420                        $text .= "----------------------------------\n" . $admin_items;
     1421
     1422                        if ($CONFIG['site']['doc_adm_jid']) {
     1423                                try {
     1424                                        $xmppclient->connect();
     1425                                        $xmppclient->processUntil('session_start');
     1426                                        $xmppclient->presence();
     1427                                        $xmppclient->message($CONFIG['site']['doc_adm_jid'], $text);
     1428                                        $xmppclient->disconnect();
     1429                                } catch (XMPPHP_Exception $e) {
     1430                                        $tmpl->logger("Невозможно отправить сообщение XMPP!", "err");
    6581431                                }
    659                                 $tmpl->AddText("<tr><td class='field'>$params[0]:<td>$params[1]</tr>");
    660                         }
    661                 }
    662 
    663                 $att_res=mysql_query("SELECT `doc_base_attachments`.`attachment_id`, `attachments`.`original_filename`, `attachments`.`comment`
    664                 FROM `doc_base_attachments`
    665                 LEFT JOIN `attachments` ON `attachments`.`id`=`doc_base_attachments`.`attachment_id`
    666                 WHERE `doc_base_attachments`.`pos_id`='$product'");
    667                 if(mysql_errno())       throw new MysqlException("Не удалось получить список прикреплённых файлов");
    668                 if(mysql_num_rows($att_res)>0)
    669                 {
    670                         $tmpl->AddText("<tr><th colspan='3'>Прикреплённые файлы</th></tr>");
    671                         while($anxt=@mysql_fetch_row($att_res))
    672                         {
    673                                 if($CONFIG['site']['recode_enable'])    $link="/attachments/{$anxt[0]}/$anxt[1]";
    674                                 else                                    $link="/attachments.php?att_id={$anxt[0]}";
    675                                 $tmpl->AddText("<tr><td><a href='$link'>$anxt[1]</a></td><td>$anxt[2]</td></tr>");
    676                         }
    677                 }
    678 
    679                 $tmpl->AddText("<tr><td colspan='3'>
    680                 <form action='/vitrina.php'>
    681                 <input type='hidden' name='mode' value='korz_add'>
    682                 <input type='hidden' name='p' value='$product'>
    683                 <div>
    684                 Добавить
    685                 <input type='text' name='cnt' value='1' class='mini'> штук <button type='submit'>В корзину!</button>
    686                 </div>
    687                 </form>
    688                 </td></tr></table>");
    689                 $d=array();
    690                 $d[]=array('В нашем');
    691                 $d[]=array('магазине','интернет-магазине','каталоге','прайс-листе');
    692                 $d[]=array('Вы можете');
    693                 $d[]=array('купить','заказать','приобрести');
    694                 $d[]=array($nxt['group_printname'].' '.$nxt['name'].' '.$nxt['proizv'].' по ');
    695                 $d[]=array('доступной','отличной','хорошей','разумной','выгодной');
    696                 $d[]=array('цене за','стоимости за');
    697                 $d[]=array('наличный расчёт.','безналичный расчёт.','webmoney.');
    698                 $d[]=array('Так же можно');
    699                 $d[]=array('заказать','запросить','осуществить');
    700                 $d[]=array('доставку','экспресс-доставку','доставку транспортной компанией','почтовую доставку','доставку курьером');
    701                 $d[]=array('этого товара','выбранной продукции');
    702                 $d[]=array('по всей России.','в любой город России.','по РФ.','в любой регион России.');
    703                 $str='';
    704                 $base=abs(crc32($nxt['name'].$nxt['group'].$nxt['proizv'].$nxt['vc'].$nxt['desc']));
    705                 foreach($d as $id => $item)
    706                 {
    707                         $l=count($item);
    708                         $i=$base%$l;
    709                         $base=floor($base/$l);
    710                         $str.=$item[$i].' ';
    711                 }
    712                 $tmpl->AddText("<div class='description'>$str</div>");
    713                 $tmpl->AddText("<script type='text/javascript' charset='utf-8'>
    714                 $(document).ready(function(){
    715                 $(\"a[rel^='prettyPhoto']\").prettyPhoto({theme:'dark_rounded'});
    716                 });
    717                 </script>");
    718                 $i++;
    719         }
    720 
    721         if($i==0)
    722         {
    723                 $tmpl->AddText("<h1 id='page-title'>Информация о товаре</h1>");
    724                 header('HTTP/1.0 404 Not Found');
    725                 header('Status: 404 Not Found');
    726                 $tmpl->msg("К сожалению, товар не найден. Возможно, Вы пришли по неверной ссылке.");
    727         }
    728 }
    729 /// Просмотр корзины
    730 protected function Basket()
    731 {
    732         global $tmpl, $CONFIG;
    733         $s='';
    734         $cc=0;
    735         $sum=0;
    736         $exist=0;
    737         $i=1;
    738         if(isset($_SESSION['basket']['cnt']))
    739         foreach($_SESSION['basket']['cnt'] as $item => $cnt)
    740         {
    741                 $res=mysql_query("SELECT `id`, `name`, `cost` FROM `doc_base` WHERE `id`='$item'");
    742                 if(mysql_errno())       throw new MysqlException("Не удалось получить список товаров!");
    743                 $nx=mysql_fetch_row($res);
    744                 $cena=GetCostPos($nx[0], $this->cost_id);
    745                 $sm=$cena*$cnt;
    746                 $sum+=$sm;
    747                 $sm=sprintf("%0.2f",$sm);
    748                 if(isset($_SESSION['basket']['comments'][$item]))       $comm=$_SESSION['basket']['comments'][$item];
    749                 else    $comm='';
    750                 $s.="<tr class='lin$cc'><td class='right'>$i <a href='?mode=korz_del&amp;p=$item'><img src='/img/i_del.png' alt='Убрать'></a><td><a href='/vitrina.php?mode=product&amp;p=$nx[0]'>$nx[1]</a><td class='right'>$cena<td class='right'>$sm<td><input type='number' name='cnt$item' value='$cnt' class='mini'><td><input type='text' name='comm$item' style='width: 90%' value='$comm' maxlength='100'>";
    751                 $cc=1-$cc;
    752                 $exist=1;
    753                 $i++;
    754         }
    755         if(!$exist) $tmpl->msg("Ваша корзина пуста! Выберите, пожалуйста интересующие Вас товары!","info");
    756         else
    757         {
    758                 $tmpl->AddText("
    759                 <h1 id='page-title'>Ваша корзина</h1>
    760                 В поле *коментарий* вы можете высказать пожелания по конкретному товару (не более 100 символов).<br>
    761                 <form action='' method='post'>
    762                 <input type='hidden' name='mode' value='basket_submit'>
    763                 <table width='100%' class='list'>
    764                 <tr class='title'><th>N</th><th>Наименование<th>Цена, руб<th>Сумма, руб<th>Количество, шт<th>Коментарии</tr>
    765                 $s
    766                 <tr class='total'><td>&nbsp;</td><td colspan='2'>Итого:</td><td colspan='3'>$sum рублей</td></tr>
    767                 </table>
    768                 <br>
    769                 <center><button name='button' value='recalc' type='submit'>Пересчитать</button>
    770                 <button name='button' value='buy' type='submit'>Оформить заказ</button></center><br>
    771                 <center><a href='/vitrina.php?mode=korz_clear'><b>Очистить корзину!</b></a></center><br>
    772                 </form>
    773                 </center><br><br>");
    774 
    775                 $_SESSION['korz_sum']=$sum;
    776                 //if( ($_SESSION['korz_sum']>20000) )   $tmpl->msg("Ваш заказ на сумму более 20'000, вам будет предоставлена удвоенная скидка!");
    777                 //else $tmpl->msg("Цены указаны со скидкой 3%. А при оформлении заказа на сумму более 20'000 рублей предоставляется скидка 6%","info");
    778         }
    779 }
    780 /// Оформление покупки
    781 protected function Buy()
    782 {
    783         global $tmpl;
    784         $step=intval(@$_REQUEST['step']);
    785         $tmpl->SetText("<h1 id='page-title'>Оформление заказа</h1>");
    786         if((!@$_SESSION['uid'])&&($step!=1))
    787         {
    788                 if($step==2)
    789                 {
    790                         $_SESSION['last_page']="/vitrina.php?mode=buy";
    791                         header("Location: /login.php?mode=reg");
    792                 }
    793                 if($step==3)
    794                 {
    795                         $_SESSION['last_page']="/vitrina.php?mode=buy";
    796                         header("Location: /login.php");
    797                 }
    798                 else
    799                 {
    800                         $_SESSION['last_page']="/vitrina.php?mode=buy";
    801                         $this->BuyAuthForm();
    802                 }
    803         }
    804         else    $this->BuyMakeForm($step);
    805 }
    806 // -------- Вспомогательные функции ------------------
    807 /// Поэлементный список подгрупп
    808 protected function GroupList_ItemStyle($group)
    809 {
    810         global $tmpl, $CONFIG;
    811 
    812         $res=mysql_query("SELECT `id`, `name` FROM `doc_group` WHERE `hidelevel`='0' AND `pid`='$group' ORDER BY `id`");
    813         if(mysql_errno())       throw new MysqlException('Не удалось выбрать список групп');
    814         $tmpl->AddStyle(".vitem { width: 250px; float: left; font-size: 14px; } .vitem:before{content: '\\203A \\0020' ; } hr.clear{border: 0 none; margin: 0;}");
    815         while($nxt=mysql_fetch_row($res))
    816         {
    817                 $tmpl->AddText("<div class='vitem'><a href='".$this->GetGroupLink($nxt[0])."'>$nxt[1]</a></div>");
    818         }
    819         $tmpl->AddText("<hr class='clear'>");
    820 }
    821 /// Список групп с изображениями
    822 protected function GroupList_ImageStyle($group)
    823 {
    824         global $tmpl, $CONFIG;
    825 
    826         $res=mysql_query("SELECT * FROM `doc_group` WHERE `hidelevel`='0' AND `pid`='$group'  ORDER BY `id`");
    827         if(mysql_errno())       throw new MysqlException('Не удалось выбрать список групп');
    828         $tmpl->AddStyle(".vitem { width: 360px; float: left; font-size: 14px; margin: 10px;} .vitem img {float: left; padding-right: 8px;} hr.clear{border: 0 none; margin: 0;}");
    829         while($nxt=mysql_fetch_row($res))
    830         {
    831                 $link=$this->GetGroupLink($nxt[0]);
    832                 $tmpl->AddText("<div class='vitem'><a href='$link'>");
    833                 if(file_exists("{$CONFIG['site']['var_data_fs']}/category/$nxt[0].jpg"))
    834                                 $tmpl->AddText("<img src='{$CONFIG['site']['var_data_web']}/category/$nxt[0].jpg' alt='$nxt[1]'>");
    835                 else
    836                 {
    837                         if(file_exists($CONFIG['site']['location'].'/skins/'.$CONFIG['site']['skin'].'/no_photo.png'))
    838                                 $img_url='/skins/'.$CONFIG['site']['skin'].'/no_photo.png';
    839                         else    $img_url='/img/no_photo.png';
    840                         $tmpl->AddText("<img src='$img_url' alt='Изображение не доступно'>");
    841                 }
    842                 $tmpl->AddText("</a><div><a href='$link'><b>$nxt[1]</b></a><br>");
    843                 if($nxt[2])
    844                 {
    845                         $desc=split('\.',$nxt[2],2);
    846                         if($desc[0])    $tmpl->AddText($desc[0]);
    847                         else            $tmpl->AddText($nxt[2]);
    848                 }
    849                 $tmpl->AddText("</div></div>");
    850         }
    851         $tmpl->AddText("<hr class='clear'>");
    852 }
    853 
    854 /// Простая таблица товаров
    855 protected function TovList_SimpleTable($res, $lim)
    856 {
    857         global $tmpl, $CONFIG;
    858         $tmpl->AddText("<table width='100%' cellspacing='0' border='0' class='list'><tr class='title'><th>Наименование<th>Производитель<th>Наличие<th>Розничная цена<th>Купить</tr>");
    859         $cc=$i=0;
    860         $cl="lin0";
    861         $basket_img="/skins/".$CONFIG['site']['skin']."/basket16.png";
    862         while($nxt=mysql_fetch_assoc($res))
    863         {
    864                 $nal=$this->GetCountInfo($nxt['count'], @$nxt['tranit']);
    865                 $link=$this->GetProductLink($nxt['id'], $nxt['name']);
    866                 $cce='';
    867                 $dcc=strtotime($nxt['cost_date']);
    868                 if($dcc<(time()-60*60*24*30*6)) $cce="style='color:#888'";
    869                 $cost=GetCostPos($nxt['id'], $this->cost_id);
    870                 @$tmpl->AddText("<tr class='lin$cc'><td><a href='$link'>{$nxt['name']}</a>
    871                 <td>{$nxt['proizv']}<td>$nal<td $cce>$cost
    872                 <td><a href='/vitrina.php?mode=korz_add&amp;p={$nxt['id']}&amp;cnt=1' onclick=\"return ShowPopupWin('/vitrina.php?mode=korz_adj&amp;p={$nxt['id']}&amp;cnt=1','popwin');\" rel='nofollow'>
    873                 <img src='$basket_img' alt='В корзину!'></a></tr>");
    874                 $i++;
    875                 $cc=1-$cc;
    876                 if($i>=$lim)    break;
    877         }
    878         $tmpl->AddText("</table>");
    879 }
    880 
    881 /// Список товаров в виде изображений
    882 protected function TovList_ImageList($res, $lim)
    883 {
    884         global $tmpl, $CONFIG;
    885         $cc=$i=0;
    886         $cl="lin0";
    887 
    888         $tmpl->AddStyle(".pitem {
    889                 float:                  left;
    890                 width:                  330px;
    891                 height:                 180px;
    892                 border:                 1px solid #ccc;
    893                 background:             #fafafa;
    894                 margin:                 10px;
    895                 padding:                5px;
    896                 border-radius:          10px;
    897                 -moz-border-radius:     10px;
    898         }");
    899 
    900         while($nxt=mysql_fetch_assoc($res))
    901         {
    902                 $nal=$this->GetCountInfo($nxt['count'], $nxt['transit_cnt']);
    903                 $link=$this->GetProductLink($nxt['id'], $nxt['name']);
    904                 $cce='';
    905                 $dcc=strtotime($nxt['cost_date']);
    906                 if($dcc<(time()-60*60*24*30*6)) $cce="style='color:#888'";
    907                 $cost=GetCostPos($nxt['id'], $this->cost_id);
    908                 if($nxt['img_id'])
    909                 {
    910                         $miniimg=new ImageProductor($nxt['img_id'],'p', $nxt['img_type']);
    911                         $miniimg->SetX(135);
    912                         $miniimg->SetY(180);
    913                         $img="<img src='".$miniimg->GetURI()."' style='float: left; margin-right: 10px;' alt='{$nxt['name']}'>";
    914                 }
    915                 else
    916                 {
    917                         if(file_exists($CONFIG['site']['location'].'/skins/'.$CONFIG['site']['skin'].'/no_photo.png'))
    918                                 $img_url='/skins/'.$CONFIG['site']['skin'].'/no_photo.png';
    919                         else    $img_url='/img/no_photo.png';
    920                         $img="<img src='$img_url' alt='no photo' style='float: left; margin-right: 10px; width: 135px;' alt='no photo'>";
    921                 }
    922                 $desc=$nxt['desc'];
    923                 if(strpos($desc,'.')!==false)
    924                 {
    925                         $desc=explode('.',$desc,2);
    926                         $desc=$desc[0];
    927                 }
    928 
    929                 $tmpl->AddText("<div class='pitem'>
    930                 <a href='$link'>$img</a>
    931                 <a href='$link'>{$nxt['name']}</a><br>
    932                 <b>Код:</b> {$nxt['vc']}<br>
    933                 <b>Цена:</b> $cost руб. / {$nxt['units']}<br>
    934                 <b>Производитель:</b> {$nxt['proizv']}<br>
    935                 <b>Кол-во:</b> $nal<br>
    936                 <a href='/vitrina.php?mode=korz_add&amp;p={$nxt['id']}&amp;cnt=1' onclick=\"return ShowPopupWin('/vitrina.php?mode=korz_adj&amp;p={$nxt['id']}&amp;cnt=1','popwin');\" rel='nofollow'>В корзину!</a>
    937                 </div>");
    938 
    939                 $i++;
    940                 $cc=1-$cc;
    941                 if($i>=$lim)    break;
    942         }
    943         $tmpl->AddText("<div class='clear'></div>");
    944 }
    945 /// Подробная таблица товаров
    946 protected function TovList_ExTable($res, $lim)
    947 {
    948         global $tmpl, $CONFIG, $c_cena_id;
    949         $tmpl->AddText("<table width='100%' cellspacing='0' border='0' class='list'><tr class='title'><th>Наименование<th>Производитель<th>Наличие<th>Розничная цена <th>d, мм<th>D, мм<th>B, мм<th>m, кг<th>Купить</tr>");
    950         $cc=0;
    951         $cl="lin0";
    952         $basket_img="/skins/".$CONFIG['site']['skin']."/basket16.png";
    953         while($nxt=mysql_fetch_array($res))
    954         {
    955                 $nal=$this->GetCountInfo($nxt['count'], $nxt['transit_cnt']);
    956                 $link=$this->GetProductLink($nxt['id'], $nxt['name']);
    957                 $cce='';
    958                 $dcc=strtotime($nxt['cost_date']);
    959                 if($dcc<(time()-60*60*24*30*6)) $cce="style='color:#888'";
    960                 $cost=GetCostPos($nxt['id'], $this->cost_id);
    961                 $tmpl->AddText("<tr class='lin$cc'><td><a href='$link'>{$nxt['name']}</a><td>{$nxt['proizv']}<td>$nal
    962                 <td $cce>$cost<td>{$nxt['d_int']}<td>{$nxt['d_ext']}<td>{$nxt['size']}<td>{$nxt['mass']}<td>
    963                 <a href='/vitrina.php?mode=korz_add&amp;p={$nxt['id']}&amp;cnt=1' onclick=\"return ShowPopupWin('/vitrina.php?mode=korz_adj&amp;p={$nxt['id']}&amp;cnt=1','popwin');\" rel='nofollow'><img src='$basket_img' alt='В корзину!'></a>");
    964                 $cc=1-$cc;
    965         }
    966         $tmpl->AddText("</table>");
    967 }
    968 /// Форма аутентификации при покупке. Выдаётся, только если посетитель не вошёл на сайт
    969 protected function BuyAuthForm()
    970 {
    971         global $tmpl, $CONFIG;
    972         $tmpl->SetTitle("Оформление зкакза");
    973         $tmpl->AddText("<p id='text'>Для использования всех возможностей этого сайта необходимо пройти процедуру регистрации. Регистрация не сложная, и займёт всего несколько минут.
    974         Кроме того, все зарегистрированные пользователи получают возможность приобретать товары по специальным ценам.</p>
    975         <form action='' method='post'>
    976         <input type='hidden' name='mode' value='buy'>
    977         <label><input type='radio' name='step' value='1'>Оформить заказ без регистрации</label><br>
    978         <label><input type='radio' name='step' value='2'>Зарегистрироваться как новый покупатель</label><br>
    979         <label><input type='radio' name='step' value='3'>Войти как уже зарегистрированный покупатель</label><br>
    980         <button type='submit'>Далее</button>
    981         </form>");
    982 }
    983 /// Заключительная форма оформления покупки
    984 protected function BuyMakeForm()
    985 {
    986         global $tmpl, $CONFIG;
    987         $users_data=array();
    988         if(@$_SESSION['uid'])
    989         {
    990                 $res=mysql_query("SELECT `name`, `reg_email`, `reg_date`, `reg_email_subscribe`, `real_name`, `reg_phone`, `real_address` FROM `users` WHERE `id`='{$_SESSION['uid']}'");
    991                 if(mysql_errno())       throw new MysqlException("Не удалось получить основные данные пользователя!");
    992                 $user_data=mysql_fetch_assoc($res);
    993                 $rr=mysql_query("SELECT `param`,`value` FROM `users_data` WHERE `uid`='".$_SESSION['uid']."'");
    994                 if(mysql_errno())       throw new MysqlException("Не удалось получить дополнительные данные пользователя!");
    995                 while($nn=mysql_fetch_row($rr))
    996                 {
    997                         $user_dopdata["$nn[0]"]=$nn[1];
    998                 }
    999                 $str='Товар будет зарезервирован для Вас на 3 рабочих дня.';
    1000                 $email_field='';
    1001         }
    1002         else
    1003         {
    1004                 $str='<b>Для незарегистрированных пользователей наличие товара на складе не гарантируется.</b>';
    1005                 $email_field="e-mail:<br>
    1006                 <input type='text' name='email' value=''><br>
    1007                 Необходимо заполнить телефон или e-mail<br><br>";
    1008         }
    1009 
    1010         if(isset($_REQUEST['cwarn']))   $tmpl->msg("Необходимо заполнить e-mail или контактный телефон!","err");
    1011 
    1012         if(@$user_data['reg_phone'])
    1013         {
    1014                 $phone=substr($user_data['reg_phone'],2);
    1015         }
    1016         else
    1017         {
    1018                 $phone='';
    1019         }
    1020 
    1021 
    1022         $tmpl->AddText("
    1023         <h4>Для оформления заказа требуется следующая информация</h4>
    1024         <form action='/vitrina.php' method='post'>
    1025         <input type='hidden' name='mode' value='makebuy'>
    1026         <div>
    1027         Фамилия И.О.<br>
    1028         <input type='text' name='rname' value='".@$user_data['real_name']."'><br>
    1029         Мобильный телефон: <span id='phone_num'></span><br>
    1030         <small>Российский, 10 цифр, без +7 или 8</small>
    1031         <br>
    1032         +7<input type='text' name='phone' value='$phone' maxlength='10' placeholder='Номер' id='phone'><br>
    1033         <br>
    1034 
    1035         $email_field");
    1036         if(is_array($CONFIG['payments']['types']))
    1037         {
    1038                 $tmpl->AddText("<br>Способ оплаты:<br>");
    1039                 foreach($CONFIG['payments']['types'] as $type => $val)
    1040                 {
    1041                         if(!$val)       continue;
    1042                         if($type==@$CONFIG['payments']['default'])      $checked=' checked';
    1043                         else                                            $checked='';
    1044                         switch($type)
    1045                         {
    1046                                 case 'cash':    $s="<label><input type='radio' name='pay_type' value='$type' id='soplat_nal'$checked>Наличный расчет.
    1047                                 <b>Только самовывоз</b>, расчет при отгрузке. $str</label><br>";
    1048                                                 break;
    1049                                 case 'bank':    $s="<label><input type='radio' name='pay_type' value='$type'$checked>Безналичный банкосвкий перевод.
    1050                                 <b>Дольше</b> предыдущего - обработка заказа начнётся <b>только после поступления денег</b> на наш счёт (занимает 1-2 дня). После оформления заказа Вы сможете распечатать счёт для оплаты.</label><br>";
    1051                                                 break;
    1052                                 case 'wmr':     $s="<label><input type='radio' name='pay_type' value='$type'$checked>Webmoney WMR.
    1053                                                 <b>Cамый быстрый</b> способ получить Ваш заказ. <b>Заказ поступит в обработку сразу</b> после оплаты.</b></label><br>";
    1054                                                 break;
    1055                                 case 'card_o':  $s="<label><input type='radio' name='pay_type' value='$type'$checked>Платёжной картой
    1056                                                 <b>VISA, MasterCard</b> на сайте. Обработка заказа начнётся после подтверждения оплаты банком (обычно сразу после оплаты).</label><br>";
    1057                                                 break;
    1058                                 case 'card_t':  $s="<label><input type='radio' name='pay_type' value='$type'$checked>Платёжной картой
    1059                                                 <b>VISA, MasterCard</b> при получении товара. С вами свяжутся и обсудят условия.</label><br>";
    1060                                                 break;
    1061                                 case 'credit_brs':      $s="<label><input type='radio' name='pay_type' value='$type'$checked>Онлайн-кредит в банке &quot;Русский стандарт&quot; за 5 минут</label><br>";
    1062                                                 break;
    1063                                 default:        $s='';
    1064                         }
    1065                
    1066                         $tmpl->AddText($s);
    1067                 }
    1068         }
    1069 
    1070         $tmpl->AddText("<label><input type='checkbox' name='delivery' id='delivery' value='1'>Нужна доставка</label><br>
    1071         <div id='delivery_fields'>
    1072         Желаемые дата и время доставки:<br>
    1073         <input type='text' name='delivery_date'><br>
    1074         <br>Адрес доставки:<br>
    1075         <textarea name='adres' rows='5' cols='80'>".@$user_data['real_address']."</textarea><br>
    1076         </div>
    1077 
    1078 
    1079 
    1080         Другая информация:<br>
    1081         <textarea name='dop' rows='5' cols='80'>".@$user_dopdata['dop_info']."</textarea><br>
    1082         <button type='submit'>Оформить заказ</button>
    1083         </div>
    1084         </form>
    1085         <script>
    1086 
    1087         var delivery=document.getElementById('delivery')
    1088         var delivery_fields=document.getElementById('delivery_fields')
    1089         function deliveryCheck()
    1090         {
    1091                 if(delivery.checked)
    1092                         delivery_fields.style.display='block';
    1093                 else    delivery_fields.style.display='none';
    1094         }
    1095         delivery.onclick=deliveryCheck;
    1096         deliveryCheck();
    1097 
    1098         </script>
    1099         ");
    1100 }
    1101 
    1102 /// Сделать покупку
    1103 protected function MakeBuy()
    1104 {
    1105         global $tmpl, $CONFIG, $uid, $xmppclient;
    1106         $pay_type=@$_REQUEST['pay_type'];
    1107         switch($pay_type)
    1108         {
    1109                 case 'bank':
    1110                 case 'cash':
    1111                 case 'card_o':
    1112                 case 'card_t':
    1113                 case 'credit_brs':
    1114                 case 'wmr':     break;
    1115                 default:        $pay_type='';
    1116         }
    1117         $rname=@$_REQUEST['rname'];
    1118         $rname_sql=mysql_real_escape_string($rname);
    1119         $adres=@$_REQUEST['adres'];
    1120         $adres_sql=mysql_real_escape_string($adres);
    1121         $email=@$_REQUEST['email'];
    1122         $email_sql=mysql_real_escape_string($email);
    1123         $delivery=intval(@$_REQUEST['delivery']);
    1124         $delivery_date=mysql_real_escape_string(@$_REQUEST['delivery_date']);
    1125         $comment=@$_REQUEST['dop'];
    1126         $comment_sql=mysql_real_escape_string($comment);
    1127 
    1128 
    1129         if(@$_REQUEST['phone'])
    1130         {
    1131                 $tel='+7'.intval(@$_REQUEST['phone']);
    1132         }
    1133         else    $tel='';
    1134        
    1135         if(@$_SESSION['uid'])
    1136         {
    1137                 mysql_query("UPDATE `users` SET `real_name`='$rname_sql', `real_address`='$adres_sql' WHERE `id`='$uid'");
    1138                 if(mysql_errno())       throw new MysqlException("Не удалось обновить основные данные пользователя!");
    1139                 mysql_query("REPLACE `users_data` (`uid`, `param`, `value`) VALUES ('$uid', 'dop_info', '$comment_sql') ");
    1140                 if(mysql_errno())       throw new MysqlException("Не удалось обновить дополнительные данные пользователя!");
    1141         }
    1142         else if(!$tel && !$email)
    1143         {
    1144                 header("Location: /vitrina.php?mode=buy&step=1&cwarn=1");
    1145                 return;
    1146         }
    1147 
    1148         if($_SESSION['basket']['cnt'])
    1149         {
    1150                 if(!isset($CONFIG['site']['vitrina_subtype']))          $subtype="site";
    1151                 else $subtype=$CONFIG['site']['vitrina_subtype'];
    1152                 $agent=1;
    1153                 //if($_SESSION['uid'])  $agent=$_SESSION['uid'];        // ?????????????????????????/
    1154                 $tm=time();
    1155                 $altnum=GetNextAltNum(3,$subtype,0,date('Y-m-d'),$CONFIG['site']['default_firm']);
    1156                 $ip=getenv("REMOTE_ADDR");
    1157                 $res=mysql_query("SELECT `num` FROM `doc_kassa` WHERE `ids`='bank' AND `firm_id`='{$CONFIG['site']['default_firm']}'");
    1158                 if(mysql_errno())       throw new MysqlException("Не удалось определить банк");
    1159                 if(mysql_num_rows($res)<1)      throw new Exception("Не найден банк выбранной организации");
    1160                 $bank=mysql_result($res,0,0);
    1161 
    1162                 $res=mysql_query("INSERT INTO doc_list (`type`,`agent`,`date`,`sklad`,`user`,`nds`,`altnum`,`subtype`,`comment`,`firm_id`,`bank`)
    1163                 VALUES ('3','$agent','$tm','1','$uid','1','$altnum','$subtype','$comment_sql','{$CONFIG['site']['default_firm']}','$bank')");
    1164 
    1165                 if(mysql_errno())       throw new MysqlException("Не удалось создать документ заявки");
    1166                 $doc=mysql_insert_id();
    1167                 mysql_query("REPLACE INTO `doc_dopdata` (`doc`, `param`, `value`) VALUES ('$doc', 'cena', '{$this->cost_id}'), ('$doc', 'ishop', '1'),  ('$doc', 'buyer_email', '$email_sql'), ('$doc', 'buyer_phone', '$tel'), ('$doc', 'buyer_rname', '$rname_sql'), ('$doc', 'buyer_ip', '$ip'), ('$doc', 'delivery', '$delivery'), ('$doc', 'delivery_date', '$delivery_date'), ('$doc', 'delivery_address', '$adres_sql'), ('$doc', 'pay_type', '$pay_type') ");
    1168                 if(mysql_errno())       throw new MysqlException("Не удалось установить цену документа");
    1169                 $zakaz_items=$admin_items='';
    1170                 foreach($_SESSION['basket']['cnt'] as $item => $cnt)
    1171                 {
    1172                         $cena=GetCostPos($item, $this->cost_id);
    1173                         if(isset($_SESSION['basket']['comments'][$item]))
    1174                                 $comm=mysql_real_escape_string($_SESSION['basket']['comments'][$item]); else $comm='';
    1175                         mysql_query("INSERT INTO `doc_list_pos` (`doc`,`tovar`,`cnt`,`cost`,`comm`) VALUES ('$doc','$item','$cnt','$cena','$comm')");
    1176                         if(mysql_errno())       throw new MysqlException("Не удалось добавить товар в заказ");
    1177                         $res=mysql_query("SELECT `doc_base`.`id`, `doc_group`.`printname`, `doc_base`.`name`, `doc_base`.`proizv`, `doc_base`.`vc`, `doc_base`.`cost`, `class_unit`.`rus_name1` FROM `doc_base`
    1178                         LEFT JOIN `doc_group` ON `doc_group`.`id`=`doc_base`.`group`
    1179                         LEFT JOIN `class_unit` ON `class_unit`.`id`=`doc_base`.`unit`
    1180                         WHERE `doc_base`.`id`='$item'");
    1181                         if(mysql_errno())       throw new MysqlException("Не удалось получить информацию о товаре");
    1182                         $tov_info=mysql_fetch_row($res);
    1183                         $zakaz_items.="$tov_info[1] $tov_info[2]/$tov_info[3] ($tov_info[4]), $cnt $tov_info[6] - $cena руб.\n";
    1184                         $admin_items.="$tov_info[1] $tov_info[2]/$tov_info[3] ($tov_info[4]), $cnt $tov_info[6] - $cena руб. (базовая - $tov_info[5]р.)\n";
    1185                 }
    1186                 $zakaz_sum=DocSumUpdate($doc);
    1187                 $_SESSION['order_id']=$doc;
    1188 
    1189                 $text="На сайте {$CONFIG['site']['name']} оформлен новый заказ.\n";
    1190                 $text.="Посмотреть можно по ссылке: http://{$CONFIG['site']['name']}/doc.php?mode=body&doc=$doc\nIP отправителя: ".getenv("REMOTE_ADDR")."\nSESSION ID:".session_id();
    1191                 if(@$_SESSION['name']) $text.="\nLogin отправителя: ".$_SESSION['name'];
    1192                 $text.="----------------------------------\n".$admin_items;
    1193 
    1194                 if($CONFIG['site']['doc_adm_jid'])
    1195                 {
    1196                         try
    1197                         {
    1198                                 $xmppclient->connect();
    1199                                 $xmppclient->processUntil('session_start');
    1200                                 $xmppclient->presence();
    1201                                 $xmppclient->message($CONFIG['site']['doc_adm_jid'], $text);
    1202                                 $xmppclient->disconnect();
    1203                         }
    1204                         catch(XMPPHP_Exception $e)
    1205                         {
    1206                                 $tmpl->logger("Невозможно отправить сообщение XMPP!","err");
    1207                         }
    1208                 }
    1209                 if($CONFIG['site']['doc_adm_email'])
    1210                         mailto($CONFIG['site']['doc_adm_email'],"Message from {$CONFIG['site']['name']}", $text);
    1211 
    1212                 if(@$_SESSION['uid'])
    1213                 {
    1214                         $res=mysql_query("SELECT `name`, `reg_email`, `reg_date`, `reg_email_subscribe`, `real_name`, `reg_phone`, `real_address` FROM `users` WHERE `id`='{$_SESSION['uid']}'");
    1215                         if(mysql_errno())       throw new MysqlException("Не удалось получить основные данные пользователя!");
    1216                         $user_data=mysql_fetch_assoc($res);
    1217                         $user_msg="Доброго времени суток, {$user_data['name']}!\nНа сайте {$CONFIG['site']['name']} на Ваше имя оформлен заказ на сумму $zakaz_sum рублей\nЗаказано:\n";
    1218                         $email=$user_data['reg_email'];
    1219                 }
    1220                 else $user_msg="Доброго времени суток, $rname!\nКто-то (возможно, вы) при оформлении заказа на сайте {$CONFIG['site']['name']}, указал Ваш адрес электронной почты.\nЕсли Вы не оформляли заказ, просто проигнорируйте это письмо.\n Номер заказа: $doc/$altnum\nЗаказ на сумму $zakaz_sum рублей\nЗаказано:\n";
    1221                 $user_msg.="--------------------------------------\n$zakaz_items\n--------------------------------------\n";
    1222                 $user_msg.="\n\n\nСообщение отправлено роботом. Не отвечайте на это письмо.";
    1223 
    1224                 if($email)
    1225                         mailto($email,"Message from {$CONFIG['site']['name']}", $user_msg);
    1226 
    1227                 $tmpl->SetText("<h1 id='page-title'>Заказ оформлен</h1>");
    1228                 if($pay_type=='bank')
    1229                 {
    1230                         $tmpl->msg("Ваш заказ оформлен! Номер заказа: $doc/$altnum. Теперь Вам необходимо <a href='/vitrina.php?mode=print_schet'>выписать счёт</a>, и оплатить его. После оплаты счёта Ваш заказ поступит в обработку.");
    1231                         $tmpl->AddText("<a href='?mode=print_schet'>выписать счёт</a>");
    1232                 }
    1233                 else if($pay_type=='card_o')
    1234                 {
    1235                         $tmpl->AddText("<p>Заказ оформлен. Теперь вы можете оплатить его! <a href='/vitrina.php?mode=pay'>Перейти к оплате</a></p>");
    1236                 }
    1237                 else if($pay_type=='credit_brs')
    1238                 {
    1239                         $this->Payment();
    1240                 }
    1241                 else $tmpl->msg("Ваш заказ оформлен! Номер заказа: $doc/$altnum. Запомните или запишите его. С вами свяжутся в ближайшее время для уточнения деталей!");
    1242                 unset($_SESSION['basket']);
    1243         }
    1244         else $tmpl->msg("Ваша корзина пуста! Вы не можете оформить заказ! Быть может, Вы его уже оформили?","err");
    1245 }
    1246 
    1247 protected function Payment()
    1248 {
    1249         global $tmpl, $CONFIG;
    1250         $order_id=$_SESSION['order_id'];
    1251         settype($order_id,'int');
    1252         $res=mysql_query("SELECT `doc_list`.`id` FROM `doc_list`
    1253         WHERE `doc_list`.`p_doc`='$order_id' AND (`doc_list`.`type`='4' OR `doc_list`.`type`='6')");
    1254         if(mysql_errno())       throw new MysqlException("Не удалось получить данные оплат");
    1255         if(mysql_num_rows($res))        $tmpl->msg("Этот заказ уже оплачен!");
    1256         else
    1257         {
    1258                 $res=mysql_query("SELECT `doc_list`.`id`, `dd_pt`.`value` AS `pay_type` FROM `doc_list`
    1259                 LEFT JOIN `doc_dopdata` AS `dd_pt` ON `dd_pt`.`doc`=`doc_list`.`id` AND `dd_pt`.`param`='pay_type'
    1260                 WHERE `doc_list`.`id`='$order_id' AND `doc_list`.`type`='3'");
    1261                 if(mysql_errno())       throw new MysqlException("Не удалось получить данные заказа"); 
    1262                
    1263                 $order_info=mysql_fetch_assoc($res);
    1264                 if($order_info['pay_type']=='card_o')
    1265                 {
    1266                         $init_url="https://test.pps.gazprombank.ru:443/payment/start.wsm?lang=ru&merch_id={$CONFIG['gpb']['merch_id']}&back_url_s=http://{$CONFIG['site']['name']}/gpb_pay_success.php&back_url_f=http://{$CONFIG['site']['name']}/gpb_pay_failed.php&o.order_id=$order_id";
    1267                         header("Location: $init_url");
    1268                         exit();
    1269                 }
    1270                 else if($order_info['pay_type']=='credit_brs')
    1271                 {
    1272                         $res=mysql_query("SELECT `doc_list_pos`.`tovar`, CONCAT(`doc_group`.`printname`, ' ', `doc_base`.`name`) AS `name`, `doc_list_pos`.`cnt`
    1273                         FROM `doc_list_pos`
    1274                         INNER JOIN `doc_base` ON `doc_base`.`id`=`doc_list_pos`.`tovar`
    1275                         INNER JOIN `doc_group` ON `doc_group`.`id`=`doc_base`.`group`
    1276                         WHERE `doc_list_pos`.`doc`=$order_id");
    1277                         if(mysql_errno())       throw new MysqlException("Не удалось получить список товаров");
    1278                         $pos_line='';
    1279                         $cnt=0;
    1280                         while($line=mysql_fetch_assoc($res))
    1281                         {
    1282                                 $cnt++;
    1283                                 $cena=GetCostPos($line['tovar'], $this->cost_id);
    1284                                 $pos_line.="&TC_$cnt={$line['cnt']}&TPr_$cnt=$cena&TName_$cnt=".urlencode($line['name']);
    1285                         }
    1286                         $url="{$CONFIG['credit_brs']['address']}?idTpl={$CONFIG['credit_brs']['id_tpl']}&TTName={$CONFIG['site']['name']}&Order=$order_id&TCount={$cnt}{$pos_line}";
    1287                         echo $url;
    1288                         header("Location: $url");
    1289                         exit();
    1290                 }
    1291                 else throw new Exception("Данный тип оплаты ({$order_info['pay_type']}) не поддерживается!");
    1292         }
    1293 }
    1294 
    1295 /// Отобразить панель страниц
    1296 protected function PageBar($group, $item_count, $per_page, $cur_page)
    1297 {
    1298         global $tmpl;
    1299         if($item_count>$per_page)
    1300         {
    1301                 $pages_count=ceil($item_count/$per_page);
    1302                 if($cur_page<1)                 $cur_page=1;
    1303                 if($cur_page>$pages_count)      $cur_page=$pages_count;
    1304                 $tmpl->AddText("<div class='pagebar'>");
    1305                 if($cur_page>1)
    1306                 {
    1307                         $i=$cur_page-1;
    1308                         $tmpl->AddText(" <a href='".$this->GetGroupLink($group, $i)."'>&lt;&lt;</a> ");
    1309                 }       else    $tmpl->AddText(" &lt;&lt; ");
    1310 
    1311                 for($i=1;$i<$pages_count+1;$i++)
    1312                 {
    1313                         if($i==$cur_page) $tmpl->AddText(" $i ");
    1314                         else $tmpl->AddText(" <a href='".$this->GetGroupLink($group, $i)."'>$i</a> ");
    1315                 }
    1316                 if($cur_page<$pages_count)
    1317                 {
    1318                         $i=$cur_page+1;
    1319                         $tmpl->AddText(" <a href='".$this->GetGroupLink($group, $i)."'>&gt;&gt;</a> ");
    1320                 }       else    $tmpl->AddText(" &gt;&gt; ");
    1321                 $tmpl->AddText("</div>");
    1322         }
    1323 }
    1324 /// *Хлебные крошки* витрины
    1325 protected function GetVitPath($group_id)
    1326 {
    1327         $res=mysql_query("SELECT `id`, `name`, `pid` FROM `doc_group` WHERE `id`='$group_id'");
    1328         if(mysql_errno())       throw new MysqlException("Не удалось выбрать группу при формировании пути!");
    1329         $nxt=mysql_fetch_row($res);
    1330         if(!$nxt)       return "<a href='/vitrina.php'>Витрина</a>";
    1331         return $this->GetVitPath($nxt[2])." / <a href='".$this->GetGroupLink($nxt[0])."'>$nxt[1]</a>";
    1332 }
    1333 /// Получить ссылку на группу с заданным ID
    1334 protected function GetGroupLink($group, $page=1, $alt_param='')
    1335 {
    1336         global $CONFIG;
    1337         if($CONFIG['site']['recode_enable'])    return "/vitrina/ig/$page/$group.html".($alt_param?"?$alt_param":'');
    1338         else                                    return "/vitrina.php?mode=group&amp;g=$group".($page?"&amp;p=$page":'').($alt_param?"&amp;$alt_param":'');
    1339 }
    1340 /// Получить ссылку на товар с заданным ID
    1341 protected function GetProductLink($product, $name, $alt_param='')
    1342 {
    1343         global $CONFIG;
    1344         if($CONFIG['site']['recode_enable'])    return "/vitrina/ip/$product.html".($alt_param?"?$alt_param":'');
    1345         else                                    return "/vitrina.php?mode=product&amp;p=$product".($alt_param?"&amp;$alt_param":'');
    1346 }
    1347 /// Получить информации о количестве товара. Формат информации - в конфигурационном файле
    1348 protected function GetCountInfo($count, $tranzit)
    1349 {
    1350         global $CONFIG;
    1351         if(!isset($CONFIG['site']['vitrina_pcnt_limit']))       $CONFIG['site']['vitrina_pcnt_limit']   = array(1,10,100);
    1352         if($CONFIG['site']['vitrina_pcnt']==1)
    1353         {
    1354                 if($count<=0)
    1355                 {
    1356                         if($tranzit) return 'в пути';
    1357                         else    return 'уточняйте';
    1358                 }
    1359                 else if($count<=$CONFIG['site']['vitrina_pcnt_limit'][0]) return '*';
    1360                 else if($count<=$CONFIG['site']['vitrina_pcnt_limit'][1]) return '**';
    1361                 else if($count<=$CONFIG['site']['vitrina_pcnt_limit'][2]) return '***';
    1362                 else return '****';
    1363         }
    1364         else if($CONFIG['site']['vitrina_pcnt']==2)
    1365         {
    1366                 if($count<=0)
    1367                 {
    1368                         if($tranzit) return 'в пути';
    1369                         else    return 'уточняйте';
    1370                 }
    1371                 else if($count<=$CONFIG['site']['vitrina_pcnt_limit'][0]) return 'мало';
    1372                 else if($count<=$CONFIG['site']['vitrina_pcnt_limit'][1]) return 'есть';
    1373                 else if($count<=$CONFIG['site']['vitrina_pcnt_limit'][2]) return 'много';
    1374                 else return 'оч.много';
    1375         }
    1376         else    return round($count).($tranzit?('('.$tranzit.')'):'');
    1377 }
     1432                        }
     1433                        if ($CONFIG['site']['doc_adm_email'])
     1434                                mailto($CONFIG['site']['doc_adm_email'], "Message from {$CONFIG['site']['name']}", $text);
     1435
     1436                        if (@ $_SESSION['uid']) {
     1437                                $res = mysql_query("SELECT `name`, `reg_email`, `reg_date`, `reg_email_subscribe`, `real_name`, `reg_phone`, `real_address` FROM `users` WHERE `id`='{$_SESSION['uid']}'");
     1438                                if (mysql_errno())
     1439                                        throw new MysqlException("Не удалось получить основные данные пользователя!");
     1440                                $user_data = mysql_fetch_assoc($res);
     1441                                $user_msg = "Доброго времени суток, {$user_data['name']}!\nНа сайте {$CONFIG['site']['name']} на Ваше имя оформлен заказ на сумму $zakaz_sum рублей\nЗаказано:\n";
     1442                                $email = $user_data['reg_email'];
     1443                        } else
     1444                                $user_msg = "Доброго времени суток, $rname!\nКто-то (возможно, вы) при оформлении заказа на сайте {$CONFIG['site']['name']}, указал Ваш адрес электронной почты.\nЕсли Вы не оформляли заказ, просто проигнорируйте это письмо.\n Номер заказа: $doc/$altnum\nЗаказ на сумму $zakaz_sum рублей\nЗаказано:\n";
     1445                        $user_msg .= "--------------------------------------\n$zakaz_items\n--------------------------------------\n";
     1446                        $user_msg .= "\n\n\nСообщение отправлено роботом. Не отвечайте на это письмо.";
     1447
     1448                        if ($email)
     1449                                mailto($email, "Message from {$CONFIG['site']['name']}", $user_msg);
     1450
     1451                        $tmpl->SetText("<h1 id='page-title'>Заказ оформлен</h1>");
     1452                        if ($pay_type == 'bank') {
     1453                                $tmpl->msg("Ваш заказ оформлен! Номер заказа: $doc/$altnum. Теперь Вам необходимо <a href='/vitrina.php?mode=print_schet'>выписать счёт</a>, и оплатить его. После оплаты счёта Ваш заказ поступит в обработку.");
     1454                                $tmpl->AddText("<a href='?mode=print_schet'>выписать счёт</a>");
     1455                        } else
     1456                                if ($pay_type == 'card_o') {
     1457                                        $tmpl->AddText("<p>Заказ оформлен. Теперь вы можете оплатить его! <a href='/vitrina.php?mode=pay'>Перейти к оплате</a></p>");
     1458                                } else
     1459                                        if ($pay_type == 'credit_brs') {
     1460                                                $this->Payment();
     1461                                        } else
     1462                                                $tmpl->msg("Ваш заказ оформлен! Номер заказа: $doc/$altnum. Запомните или запишите его. С вами свяжутся в ближайшее время для уточнения деталей!");
     1463                        unset ($_SESSION['basket']);
     1464                } else
     1465                        $tmpl->msg("Ваша корзина пуста! Вы не можете оформить заказ! Быть может, Вы его уже оформили?", "err");
     1466        }
     1467
     1468        protected function Payment() {
     1469                global $tmpl, $CONFIG;
     1470                $order_id = $_SESSION['order_id'];
     1471                settype($order_id, 'int');
     1472                $res = mysql_query("SELECT `doc_list`.`id` FROM `doc_list`
     1473                                                WHERE `doc_list`.`p_doc`='$order_id' AND (`doc_list`.`type`='4' OR `doc_list`.`type`='6')");
     1474                if (mysql_errno())
     1475                        throw new MysqlException("Не удалось получить данные оплат");
     1476                if (mysql_num_rows($res))
     1477                        $tmpl->msg("Этот заказ уже оплачен!");
     1478                else {
     1479                        $res = mysql_query("SELECT `doc_list`.`id`, `dd_pt`.`value` AS `pay_type` FROM `doc_list`
     1480                                                                        LEFT JOIN `doc_dopdata` AS `dd_pt` ON `dd_pt`.`doc`=`doc_list`.`id` AND `dd_pt`.`param`='pay_type'
     1481                                                                        WHERE `doc_list`.`id`='$order_id' AND `doc_list`.`type`='3'");
     1482                        if (mysql_errno())
     1483                                throw new MysqlException("Не удалось получить данные заказа");
     1484
     1485                        $order_info = mysql_fetch_assoc($res);
     1486                        if ($order_info['pay_type'] == 'card_o') {
     1487                                $init_url = "https://test.pps.gazprombank.ru:443/payment/start.wsm?lang=ru&merch_id={$CONFIG['gpb']['merch_id']}&back_url_s=http://{$CONFIG['site']['name']}/gpb_pay_success.php&back_url_f=http://{$CONFIG['site']['name']}/gpb_pay_failed.php&o.order_id=$order_id";
     1488                                header("Location: $init_url");
     1489                                exit ();
     1490                        } else
     1491                                if ($order_info['pay_type'] == 'credit_brs') {
     1492                                        $res = mysql_query("SELECT `doc_list_pos`.`tovar`, CONCAT(`doc_group`.`printname`, ' ', `doc_base`.`name`) AS `name`, `doc_list_pos`.`cnt`
     1493                                                                                                                FROM `doc_list_pos`
     1494                                                                                                                INNER JOIN `doc_base` ON `doc_base`.`id`=`doc_list_pos`.`tovar`
     1495                                                                                                                INNER JOIN `doc_group` ON `doc_group`.`id`=`doc_base`.`group`
     1496                                                                                                                WHERE `doc_list_pos`.`doc`=$order_id");
     1497                                        if (mysql_errno())
     1498                                                throw new MysqlException("Не удалось получить список товаров");
     1499                                        $pos_line = '';
     1500                                        $cnt = 0;
     1501                                        while ($line = mysql_fetch_assoc($res)) {
     1502                                                $cnt++;
     1503                                                $cena = GetCostPos($line['tovar'], $this->cost_id);
     1504                                                $pos_line .= "&TC_$cnt={$line['cnt']}&TPr_$cnt=$cena&TName_$cnt=" . urlencode($line['name']);
     1505                                        }
     1506                                        $url = "{$CONFIG['credit_brs']['address']}?idTpl={$CONFIG['credit_brs']['id_tpl']}&TTName={$CONFIG['site']['name']}&Order=$order_id&TCount={$cnt}{$pos_line}";
     1507                                        echo $url;
     1508                                        header("Location: $url");
     1509                                        exit ();
     1510                                } else
     1511                                        throw new Exception("Данный тип оплаты ({$order_info['pay_type']}) не поддерживается!");
     1512                }
     1513        }
     1514
     1515        /// Отобразить панель страниц
     1516        protected function PageBar($group, $item_count, $per_page, $cur_page) {
     1517                global $tmpl;
     1518                if ($item_count > $per_page) {
     1519                        $pages_count = ceil($item_count / $per_page);
     1520                        if ($cur_page < 1)
     1521                                $cur_page = 1;
     1522                        if ($cur_page > $pages_count)
     1523                                $cur_page = $pages_count;
     1524                        $tmpl->AddText("<div class='pagebar'>");
     1525                        if ($cur_page > 1) {
     1526                                $i = $cur_page -1;
     1527                                $tmpl->AddText(" <a href='" . $this->GetGroupLink($group, $i) . "'>&lt;&lt;</a> ");
     1528                        } else
     1529                                $tmpl->AddText(" &lt;&lt; ");
     1530
     1531                        for ($i = 1; $i < $pages_count +1; $i++) {
     1532                                if ($i == $cur_page)
     1533                                        $tmpl->AddText(" $i ");
     1534                                else
     1535                                        $tmpl->AddText(" <a href='" . $this->GetGroupLink($group, $i) . "'>$i</a> ");
     1536                        }
     1537                        if ($cur_page < $pages_count) {
     1538                                $i = $cur_page +1;
     1539                                $tmpl->AddText(" <a href='" . $this->GetGroupLink($group, $i) . "'>&gt;&gt;</a> ");
     1540                        } else
     1541                                $tmpl->AddText(" &gt;&gt; ");
     1542                        $tmpl->AddText("</div>");
     1543                }
     1544        }
     1545        /// *Хлебные крошки* витрины
     1546        protected function GetVitPath($group_id) {
     1547                $res = mysql_query("SELECT `id`, `name`, `pid` FROM `doc_group` WHERE `id`='$group_id'");
     1548                if (mysql_errno())
     1549                        throw new MysqlException("Не удалось выбрать группу при формировании пути!");
     1550                $nxt = mysql_fetch_row($res);
     1551                if (!$nxt)
     1552                        return "<a href='/vitrina.php'>Витрина</a>";
     1553                return $this->GetVitPath($nxt[2]) . " / <a href='" . $this->GetGroupLink($nxt[0]) . "'>$nxt[1]</a>";
     1554        }
     1555        /// Получить ссылку на группу с заданным ID
     1556        protected function GetGroupLink($group, $page = 1, $alt_param = '') {
     1557                global $CONFIG;
     1558                if ($CONFIG['site']['recode_enable'])
     1559                        return "/vitrina/ig/$page/$group.html" . ($alt_param ? "?$alt_param" : '');
     1560                else
     1561                        return "/vitrina.php?mode=group&amp;g=$group" . ($page ? "&amp;p=$page" : '') . ($alt_param ? "&amp;$alt_param" : '');
     1562        }
     1563        /// Получить ссылку на товар с заданным ID
     1564        protected function GetProductLink($product, $name, $alt_param = '') {
     1565                global $CONFIG;
     1566                if ($CONFIG['site']['recode_enable'])
     1567                        return "/vitrina/ip/$product.html" . ($alt_param ? "?$alt_param" : '');
     1568                else
     1569                        return "/vitrina.php?mode=product&amp;p=$product" . ($alt_param ? "&amp;$alt_param" : '');
     1570        }
     1571        /// Получить информации о количестве товара. Формат информации - в конфигурационном файле
     1572        protected function GetCountInfo($count, $tranzit) {
     1573                global $CONFIG;
     1574                if (!isset ($CONFIG['site']['vitrina_pcnt_limit']))
     1575                        $CONFIG['site']['vitrina_pcnt_limit'] = array (
     1576                                1,
     1577                                10,
     1578                                100
     1579                        );
     1580                if ($CONFIG['site']['vitrina_pcnt'] == 1) {
     1581                        if ($count <= 0) {
     1582                                if ($tranzit)
     1583                                        return 'в пути';
     1584                                else
     1585                                        return 'уточняйте';
     1586                        } else
     1587                                if ($count <= $CONFIG['site']['vitrina_pcnt_limit'][0])
     1588                                        return '*';
     1589                                else
     1590                                        if ($count <= $CONFIG['site']['vitrina_pcnt_limit'][1])
     1591                                                return '**';
     1592                                        else
     1593                                                if ($count <= $CONFIG['site']['vitrina_pcnt_limit'][2])
     1594                                                        return '***';
     1595                                                else
     1596                                                        return '****';
     1597                } else
     1598                        if ($CONFIG['site']['vitrina_pcnt'] == 2) {
     1599                                if ($count <= 0) {
     1600                                        if ($tranzit)
     1601                                                return 'в пути';
     1602                                        else
     1603                                                return 'уточняйте';
     1604                                } else
     1605                                        if ($count <= $CONFIG['site']['vitrina_pcnt_limit'][0])
     1606                                                return 'мало';
     1607                                        else
     1608                                                if ($count <= $CONFIG['site']['vitrina_pcnt_limit'][1])
     1609                                                        return 'есть';
     1610                                                else
     1611                                                        if ($count <= $CONFIG['site']['vitrina_pcnt_limit'][2])
     1612                                                                return 'много';
     1613                                                        else
     1614                                                                return 'оч.много';
     1615                        } else
     1616                                return round($count) . ($tranzit ? ('(' . $tranzit . ')') : '');
     1617        }
    13781618
    13791619};
     
    14011641// }
    14021642
    1403 try
    1404 {
     1643try {
    14051644        $tmpl->SetTitle("Интернет - витрина");
    14061645
    1407         if(file_exists( $CONFIG['site']['location'].'/skins/'.$CONFIG['site']['skin'].'/vitrina.tpl.php' ) )
    1408                 include_once($CONFIG['site']['location'].'/skins/'.$CONFIG['site']['skin'].'/vitrina.tpl.php');
    1409         if(!isset($vitrina))    $vitrina=new Vitrina();
    1410 
    1411         if(! $vitrina->ProbeRecode() )
    1412         $vitrina->ExecMode($mode);
    1413 }
    1414 catch(MysqlException $e)
    1415 {
     1646        if (file_exists($CONFIG['site']['location'] . '/skins/' . $CONFIG['site']['skin'] . '/vitrina.tpl.php'))
     1647                include_once ($CONFIG['site']['location'] .
     1648                '/skins/' . $CONFIG['site']['skin'] . '/vitrina.tpl.php');
     1649        if (!isset ($vitrina))
     1650                $vitrina = new Vitrina();
     1651
     1652        if (!$vitrina->ProbeRecode())
     1653                $vitrina->ExecMode($mode);
     1654} catch (MysqlException $e) {
    14161655        mysql_query("ROLLBACK");
    14171656        $tmpl->AddText("<br><br>");
    1418         $tmpl->msg($e->getMessage(),"err");
    1419 }
    1420 catch(Exception $e)
    1421 {
     1657        $tmpl->msg($e->getMessage(), "err");
     1658} catch (Exception $e) {
    14221659        mysql_query("ROLLBACK");
    14231660        $tmpl->AddText("<br><br>");
     
    14251662}
    14261663
    1427 
    1428 
    14291664$tmpl->write();
    1430 
    1431 
    1432 
    1433 ?>
    1434 
    1435 
Note: See TracChangeset for help on using the changeset viewer.