1
Changeset 269 – MultiMag

Changeset 269


Ignore:
Timestamp:
Oct 7, 2011, 6:31:50 PM (6 years ago)
Author:
blacklight
Message:
  • Исправлена ошибка определения столбца в анализаторе прайсов
  • Завершено построение структуры базы данных
  • Строка поиска анализатора расширена возможностью использовать логические операции AND и OR - #230
  • Карта сайта теперь доступна и в XML формате - #226
  • После оформления заказа, покупателю теперь сообщается его номер - #228
  • Решена проблема с привилегиями при создании одних документов на основе других - #172
Location:
trunk
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/cli/price_an.php

    r259 r269  
    163163        }
    164164
     165        $str_array=preg_split("/( OR | AND )/",$nxt[1],-1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
     166        $i=1;
     167        $sql_add='';
     168        $conn='';
     169        foreach($str_array as $str_l)
     170        {
     171                if($i)  $sql_add.=" $conn (`price`.`name` LIKE '%$str_l%' OR `price`.`art` LIKE '%$str_l%')";
     172                else    $conn=$str_l;
     173                $i=1-$i;
     174        }
     175
    165176        $costar=array();
    166177        $rs=mysql_query("SELECT `price`.`id`, `price`.`name`, `price`.`cost`, `price`.`firm`, `price`.`nal`, `firm_info`.`coeff`, `currency`.`coeff`, `price`.`art` FROM `price`
    167178        LEFT JOIN `firm_info` ON `firm_info`.`id`=`price`.`firm`
    168179        LEFT JOIN `currency` ON `currency`.`id`=`firm_info`.`currency`
    169         WHERE `price`.`name` LIKE '%$nxt[1]%' OR `price`.`art` LIKE '%$nxt[1]%'");
     180        WHERE $sql_add");
    170181        echo mysql_error();
    171182        while($nx=mysql_fetch_row($rs))
  • trunk/web/.htaccess

    r1 r269  
    11ErrorDocument 404 "/e404.php"
    22
    3 #
    4 #  /abc/def/.htaccess -- per-dir config file for directory /abc/def
    5 #  Помните: /abc/def это физический путь /xyz, т.е., у сервера есть
    6 #            директива 'Alias /xyz /abc/def' к примеру
    7 #
    8 
     3# Если установлен mod_revrite
     4<IfModule mod_rewrite.c>
    95RewriteEngine On
    10 
    116#  даем серверу знать что мы работаем через /xyz а не
    127#  через префикс физического пути /abc/def
     
    1611RewriteRule ^wiki(.*)$ wiki.php [L,QSA]
    1712RewriteRule ^vitrina(.*)$ vitrina.php [L,QSA]
     13RewriteRule ^sitemap.xml$ sitemap.php?mode=xml [L,QSA]
     14</IfModule>
     15
     16# gzip сжатие.
     17<IfModule mod_deflate.c>
     18# html, txt, css, js, json, xml, htc:
     19AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
     20AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript
     21AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
     22
     23# веб-шрифты и svg:
     24<FilesMatch "\.(ttf|otf|eot|svg)$" >
     25    SetOutputFilter DEFLATE
     26</FilesMatch>
     27</IfModule>
    1828
    1929#php_flag zlib.output_compression On
    2030#php_value zlib.output_compression_level 3
     31
     32<IfModule mod_expires.c>
     33Header set Cache-Control "public"
     34ExpiresActive on
     35# устанавливаем значения кэширования по умолчанию
     36ExpiresDefault                          "access plus 1 month"
     37# cache.manifest требует доп. запросов в FF 3.6
     38ExpiresByType text/cache-manifest       "access plus 0 seconds"
     39# html
     40ExpiresByType text/html                 "access plus 0 seconds"
     41# данные
     42ExpiresByType text/xml                  "access plus 0 seconds"
     43ExpiresByType application/xml           "access plus 0 seconds"
     44ExpiresByType application/json          "access plus 0 seconds"
     45# rss поток
     46ExpiresByType application/rss+xml       "access plus 1 hour"
     47# фавикон (переименовывать нельзя)
     48ExpiresByType image/vnd.microsoft.icon  "access plus 1 week"
     49# медиа: картинки, видео, аудио
     50ExpiresByType image/gif                 "access plus 1 month"
     51ExpiresByType image/png                 "access plus 1 month"
     52ExpiresByType image/jpg                 "access plus 1 month"
     53ExpiresByType image/jpeg                "access plus 1 month"
     54ExpiresByType video/ogg                 "access plus 1 month"
     55ExpiresByType audio/ogg                 "access plus 1 month"
     56ExpiresByType video/mp4                 "access plus 1 month"
     57ExpiresByType video/webm                "access plus 1 month"
     58# веб-шрифты
     59ExpiresByType font/truetype             "access plus 1 month"
     60ExpiresByType font/opentype             "access plus 1 month"
     61ExpiresByType font/woff                 "access plus 1 month"
     62ExpiresByType image/svg+xml             "access plus 1 month"
     63ExpiresByType application/vnd.ms-fontobject "access plus 1 month"     
     64# css и javascript
     65ExpiresByType text/css                  "access plus 1 month"
     66ExpiresByType application/javascript    "access plus 1 month"
     67ExpiresByType text/javascript           "access plus 1 month"
     68</IfModule>
  • trunk/web/core.php

    r265 r269  
    1717//      along with this program.  If not, see <http://www.gnu.org/licenses/>.
    1818//
    19 define("MULTIMAG_VERSION", "0.0.1r265");
     19define("MULTIMAG_REV", "269");
     20define("MULTIMAG_VERSION", "0.0.1r".MULTIMAG_REV);
    2021header("X-Powered-By: MultiMag ".MULTIMAG_VERSION);
    2122
  • trunk/web/include/doc.postuplenie.php

    r264 r269  
    313313                else if($target_type==7)
    314314                {
     315                        if(!isAccess('doc_rko','create'))       throw new AccessException("");
    315316                        $sum=DocSumUpdate($doc);
    316317                        mysql_query("START TRANSACTION");
  • trunk/web/include/doc.predlojenie.php

    r253 r269  
    9494                else if($target_type==1)
    9595                {
     96                        if(!isAccess('doc_zayavka','create'))   throw new AccessException("");
    9697                        mysql_query("START TRANSACTION");
    9798                        $base=$this->Postup($doc);
     
    110111                else if($target_type==12)
    111112                {
     113                        if(!isAccess('doc_vputi','create'))     throw new AccessException("");
    112114                        mysql_query("START TRANSACTION");
    113115                        $base=$this->Vputi($doc);
  • trunk/web/include/doc.realizaciya.php

    r264 r269  
    268268                else if($target_type==6)
    269269                {
     270                        if(!isAccess('doc_pko','create'))       throw new AccessException("");
    270271                        $sum=DocSumUpdate($this->doc);
    271272                        mysql_query("START TRANSACTION");
     
    291292                else if($target_type==4)
    292293                {
     294                        if(!isAccess('doc_pbank','create'))     throw new AccessException("");
    293295                        $sum=DocSumUpdate($this->doc);
    294296                        mysql_query("START TRANSACTION");
  • trunk/web/include/doc.s.price_an.php

    r224 r269  
    152152                        {
    153153                                $costar=array();
     154                               
     155                                $str_array=preg_split("/( OR | AND )/",$str,-1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
     156                                $i=1;
     157                                $sql_add='';
     158                                $conn='';
     159                                foreach($str_array as $str_l)
     160                                {
     161                                        if($i)  $sql_add.=" $conn (`price`.`name` LIKE '%$str_l%' OR `price`.`art` LIKE '%$str_l%')";
     162                                        else    $conn=$str_l;
     163                                        $i=1-$i;
     164                                }
     165
    154166                                $res=@mysql_query("SELECT `price`.`id`, `price`.`name`, `firm_info`.`name`, `price`.`cost`, `price`.`art` FROM `price`
    155167                                LEFT JOIN `firm_info` ON `firm_info`.`id`=`price`.`firm`
    156                                 WHERE `price`.`name` LIKE '%$str%' OR `price`.`art` LIKE '%$str%'");
     168                                WHERE $sql_add");
    157169                                $cnt=mysql_num_rows($res);
    158170                                echo mysql_error();
  • trunk/web/include/doc.v_puti.php

    r253 r269  
    166166                else if($target_type==1)
    167167                {
     168                        if(!isAccess('doc_zayavka','create'))   throw new AccessException("");
    168169                        mysql_query("START TRANSACTION");
    169170                        $base=$this->Postup($doc);
  • trunk/web/include/doc.zayavka.php

    r263 r269  
    165165                else if($target_type==2)
    166166                {
     167                        if(!isAccess('doc_realizaciya','create'))       throw new AccessException("");
    167168                        mysql_query("START TRANSACTION");
    168169                        $base=$this->Otgruzka($target_type);
     
    188189                else if($target_type==6)
    189190                {
     191                        if(!isAccess('doc_pko','create'))       throw new AccessException("");
    190192                        $sum=DocSumUpdate($this->doc);
    191193                        mysql_query("START TRANSACTION");
     
    220222                else if($target_type==4)
    221223                {
     224                        if(!isAccess('doc_pbank','create'))     throw new AccessException("");
    222225                        $sum=DocSumUpdate($this->doc);
    223226                        mysql_query("START TRANSACTION");
  • trunk/web/include/price_analyze.inc.php

    r259 r269  
    183183                                        mysql_query("INSERT INTO `price`
    184184                                        (`name`,`cost`,`firm`,`art`,`date`, `nal`) VALUES
    185                                         ('$name', '$cost', '{$this->firm_id}', '$name', NOW(), '$name' )");
     185                                        ('$name', '$cost', '{$this->firm_id}', '$art', NOW(), '$nal' )");
    186186                                        if(mysql_errno())       throw new MysqlException("Не удалось вставить строку прайса в базу!");
    187187                                }
  • trunk/web/priceload.php

    r268 r269  
    8080        {
    8181                $res=mysql_query("SELECT `id`, `name`, `signature`, `currency`, `coeff`, `type` FROM `firm_info` WHERE `id`='$id'");
     82                if(mysql_errno())       throw new MysqlException("Не удалось выбрать данные фирмы");
    8283                $nxt=mysql_fetch_row($res);
    8384        }
     
    699700                $i=0;
    700701                $tmpl->AddText("
     702                <script type='text/javascript'>
     703               
     704                function SelAll(flag)
     705                {
     706                        var elems = document.getElementsByName('p[]');
     707                        var l = elems.length;
     708                        for(var i=0; i<l; i++)
     709                        {
     710                                elems[i].checked=flag;
     711                                if(flag)        elems[i].disabled = false;
     712                        }
     713                }
     714               
     715                </script>
    701716                <form action='' method='get'>
    702717                <input type='hidden' name='mode' value='r_noparsed'>
     
    707722                <form action='' method='post'>
    708723                <input type='hidden' name='mode' value='adding'>
     724                <div class='selmenu'><a onclick='SelAll(true)'>Выбрать всё<a> | <a onclick='SelAll(false)'>Снять всё</a></div>
    709725                <table width='100%'><tr><th>ID<th>Код произв.<th>Наименование<th>Фирма");
    710726                while($nxt=mysql_fetch_row($res))
  • trunk/web/sitemap.php

    r230 r269  
    2222$tmpl->SetTitle("Карта сайта");
    2323
    24 function GetGroupLink($group, $page=0)
     24class SiteMap
     25{
     26        private $maptype;
     27        private $buf='';
     28
     29function __construct($maptype='html')
     30{
     31        $this->maptype=$maptype;
     32}
     33
     34function getGroupLink($group, $page=0)
    2535{
    2636        global $CONFIG;
    27         if($CONFIG['site']['recode_enable'])    return "/vitrina/ig/$page/$group.html";
    28         else                                    return "/vitrina.php?mode=group&amp;g=$group".($page?"&amp;p=$page":'');
     37        if($CONFIG['site']['recode_enable'])    return "vitrina/ig/$page/$group.html";
     38        else                                    return "vitrina.php?mode=group&amp;g=$group".($page?"&amp;p=$page":'');
    2939}
    3040
    31 function GroupList($group)
     41function addPriceGroup($group)
    3242{
    3343        global $CONFIG;
     
    3747        if(mysql_num_rows($res))
    3848        {
    39                 $ret.="<ul>";
     49                $this->startGroup();
    4050                while($nxt=mysql_fetch_row($res))
    4151                {
    42                         $ret.="<li><a href='".GetGroupLink($nxt[0])."'>$nxt[1]</a>";
    43                         $ret.=GroupList($nxt[0]);
    44                         $ret.="</li>";
     52                        $this->AddLink($this->getGroupLink($nxt[0]), $nxt[1], '0.8');
     53                        $this->addPriceGroup($nxt[0]);
    4554                }
    46                 $ret.="</ul>";
     55                $this->endGroup();
    4756        }
    4857        return $ret;
    4958}
    5059
    51 $tmpl->SetText("<h1 id='page-title'>Карта сайта</h1>
    52 <ul>
    53 <li><a href='/index.php'>Главная</a></li>
    54 <li><a href='/price.php'>Прайсы</a></li>
    55 <li><a href='/vitrina.php'>Витрина</a>".GroupList(0)."</li>
    56 <li><a href='/wiki.php'>Статьи</a>
    57 <ul>");
     60function startMap()
     61{
     62        if($this->maptype=='html')      $this->buf.="<ul>";
     63        else if($this->maptype=='xml')  $this->buf.='<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
     64}
    5865
    59 $res=mysql_query("SELECT * FROM `wiki` ORDER BY `name`");
    60 if(mysql_errno())       throw new MysqlException('Не удалось выбрать список статей');
    61 while($nxt=mysql_fetch_row($res))
     66function endMap()
    6267{
    63         $wikiparser->parse(html_entity_decode($nxt[5],ENT_QUOTES,"UTF-8"));
    64         $h=$wikiparser->title;
    65         $tmpl->AddText("<li><a class='wiki' href='/wiki/$nxt[0].html'>$h</a></li>");
     68        if($this->maptype=='html')      $this->buf.="</ul>";
     69        else if($this->maptype=='xml')  $this->buf.='</urlset>';
    6670}
    67 $tmpl->AddText("</ul>");
     71
     72function AddLink($link, $text, $prio='0.5', $changefreq='always', $lastmod='')
     73{
     74        if($lastmod=='')        $lastmod=date("Y-m-d");
     75        $host=$_SERVER['HTTP_HOST'];
     76        $finds=array('"', '&', '>', '<', '\'');
     77        $replaces=array('&quot;', '&amp;', '&gt;', '&lt;', '&apos;');
     78        $link=str_replace($finds, $replaces, $link);
     79        $text=str_replace($finds, $replaces, $text);
     80        if($this->maptype=='html')      $this->buf.="<li><a href='/$link'>$text</a></li>";
     81        else if($this->maptype=='xml')  $this->buf.="<url><loc>http://$host/$link</loc><lastmod>$lastmod</lastmod><changefreq>$changefreq</changefreq><priority>$prio</priority></url>\n";
     82}
     83
     84function startGroup()
     85{
     86        if($this->maptype=='html')      $this->buf.="<ul>";
     87}
     88
     89function endGroup()
     90{
     91        if($this->maptype=='html')      $this->buf.="</ul>";
     92}
    6893
    6994
    70 $tmpl->AddText("</ul></li>
    71 <li><a href='/golos.php'>Голосования</a></li>
    72 <li><a href='/news.php'>Новости</a></li>
    73 <li><a href='/photogalery.php'>Фотогалерея</a></li>
    74 <li><a href='/message.php'>Отправить сообщение</a></li>
    75 </ul>");
     95function getMap()
     96{
     97        global $wikiparser;
     98        $this->buf='';
     99        $this->startMap();
     100        $this->AddLink('index.php','Главная','1.0');
     101        $this->AddLink('price.php','Прайсы','0.2');
     102        $this->AddLink('vitrina.php','Витрина','0.8');
     103        $this->addPriceGroup(0);
     104        $this->AddLink('wiki.php','Статьи','0.1','weekly');
     105        $this->startGroup();
     106        $res=mysql_query("SELECT * FROM `wiki` ORDER BY `name`");
     107        if(mysql_errno())       throw new MysqlException('Не удалось выбрать список статей');
     108        while($nxt=mysql_fetch_row($res))
     109        {
     110                @$wikiparser->parse(html_entity_decode($nxt[5],ENT_QUOTES,"UTF-8"));
     111                $h=$wikiparser->title;
     112                $this->AddLink("wiki/$nxt[0].html",$h,'0.4','weekly',$nxt[1]);
     113        }
     114        $this->endGroup();
     115        $this->AddLink('wiki.php','Статьи');
     116        $this->AddLink('news.php','Новости');
     117        $this->AddLink('photogalery.php','Фотогалерея');
     118        $this->AddLink('message.php','Отправить сообщение');
     119        $this->AddLink('sitemap.xml','XML Sitemap','0.0');
     120        $this->endMap();
     121        return $this->buf;
     122}
    76123
     124}
     125if($mode=='xml')
     126{
     127        $tmpl->ajax=1;
     128        header("Content-type: text/xml");
     129        $map=new SiteMap('xml');
     130        $tmpl->SetText('');
     131        $tmpl->AddText($map->getMap());
     132}
     133else
     134{
     135        $tmpl->SetText("<h1 id='page-title'>Карта сайта</h1>");
     136        $map=new SiteMap();
     137        $tmpl->AddText($map->getMap());
     138       
     139}
    77140$tmpl->write();
    78 
    79141?>
  • trunk/web/vitrina.php

    r264 r269  
    719719                        $email=$user_data['email'];
    720720                }
    721                 else $user_msg="Доброго времени суток, $rname!\nКто-то (возможно, вы) при оформлении заказа на сайте {$CONFIG['site']['name']}, указал Ваш адрес электронной почты.\nЕсли Вы не оформляли заказ, просто проигнорируйте это письмо.\nЗаказ на сумму $zakaz_sum рублей\nЗаказано:\n";
     721                else $user_msg="Доброго времени суток, $rname!\nКто-то (возможно, вы) при оформлении заказа на сайте {$CONFIG['site']['name']}, указал Ваш адрес электронной почты.\nЕсли Вы не оформляли заказ, просто проигнорируйте это письмо.\n Номер заказа: $doc/$altnum\nЗаказ на сумму $zakaz_sum рублей\nЗаказано:\n";
    722722                $user_msg.="--------------------------------------\n$zakaz_items\n--------------------------------------\n";
    723723                $user_msg.="\n\n\nСообщение отправлено роботом. Не отвечайте на это письмо.";
     
    730730                if($soplat=='bn')
    731731                {
    732                         $tmpl->msg("Ваш заказ оформлен! Теперь Вам необходимо <a href='/vitrina.php?mode=print_schet'>выписать счёт</a>, и оплатить его. После оплаты счёта Ваш заказ поступит в обработку.");
     732                        $tmpl->msg("Ваш заказ оформлен! Номер заказа: $doc/$altnum. Теперь Вам необходимо <a href='/vitrina.php?mode=print_schet'>выписать счёт</a>, и оплатить его. После оплаты счёта Ваш заказ поступит в обработку.");
    733733                        $tmpl->AddText("<a href='?mode=print_schet'>выписать счёт</a>");
    734734                }
    735                 else $tmpl->msg("Ваш заказ оформлен! Вам перезвонят в ближайшее время для уточнения деталей!");
     735                else $tmpl->msg("Ваш заказ оформлен! Номер заказа: $doc/$altnum. Запомните или запишите его. Вам перезвонят в ближайшее время для уточнения деталей!");
    736736        }
    737737        else $tmpl->msg("Ваша корзина пуста! Вы не можете оформить заказ! Быть может, Вы его уже оформили?","err");
Note: See TracChangeset for help on using the changeset viewer.