Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 52.58 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\DB;
  7. use Illuminate\Support\Facades\Storage;
  8.  
  9. class AjaxController extends Controller
  10. {
  11.  
  12.     protected $uid;
  13.     protected $JWT;
  14.     protected $fName;
  15.     protected $sName;
  16.     protected $lName;
  17.     protected $avatar;
  18.     protected $nickname;
  19.     protected $user;
  20.     protected $countMsg;
  21.     protected $warnMsg;
  22.     protected $countNotify;
  23.     protected $warnNotify;
  24.  
  25.     private function unpackJWT($JWT)
  26.     {
  27.         $tmp = explode('.', $JWT);
  28.         $tmp[1] = base64_decode($tmp[1], true);
  29.         $payload = json_decode($tmp[1], true);
  30.         return $payload;
  31.     }
  32.  
  33.  
  34.     public function setUserData($JWT)
  35.     {
  36.         $payload = $this->unpackJWT($JWT);
  37.         $this->uid = $payload['userId'];
  38.         $usver = DB::table('users')->where('id', $this->uid)->first();
  39.         $this->user = $usver;
  40.         // $this->avatar=$admin->avatar;
  41.         $this->fName = $usver->firstName;
  42.         $this->sName = $usver->secondName;
  43.         $this->lName = $usver->lastName;
  44.         $this->nickname = 'Администратор ' . $this->fName;
  45.         /*if(!empty($this->sName))$this->nickname.=' '.$this->sName;
  46.         if(!empty($this->lName))$this->nickname.=' '.$this->lName;*/
  47.         return true;
  48.     }
  49.  
  50.     public function getResponse($form, $catName)
  51.     {
  52.         return "
  53.         <div class='box box-success'>
  54.             <div class='box-header with-border'>
  55.                 <div style='height:70px;line-height:70px;'>
  56.                     <h3 style='vertical-align:middle;display:inline-block;margin-left:10px;' class='box-title'>$catName</h3>
  57.                 </div>
  58.             </div>
  59.             $form
  60.         </div>\n\t";
  61.     }
  62.  
  63.     public function queryOnesS($request)
  64.     {
  65.         $ch = curl_init();
  66.         $url = env('ONESS_PATH', 'http://pestshop.morskoi.com') . $request;
  67.         curl_setopt($ch, CURLOPT_URL, $url);
  68.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  69.         curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
  70.         curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
  71.         curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
  72.         curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
  73.         curl_setopt($ch, CURLOPT_TIMEOUT, 33);
  74.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  75.         curl_setopt($ch, CURLOPT_FAILONERROR, 1);
  76.         curl_setopt($ch, CURLOPT_VERBOSE, 1);
  77.         curl_setopt($ch, CURLOPT_ENCODING, '');
  78.         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
  79.         $res = curl_exec($ch);
  80.         $info = curl_getinfo($ch);
  81.         // return $info;
  82.         if ($info['http_code'] != '200') return false;
  83.         $res = json_decode($res, true);
  84.         return $res;
  85.     }
  86.  
  87.     public function queryAS($request)
  88.     {
  89.         $ch = curl_init();
  90.         $url = env('JWT_RPATH', 'http://pestshop.morskoi.com') . $request;
  91.         // return $url;
  92.         curl_setopt($ch, CURLOPT_URL, $url);
  93.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  94.         curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
  95.         curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
  96.         curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
  97.         curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
  98.         curl_setopt($ch, CURLOPT_TIMEOUT, 33);
  99.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  100.         curl_setopt($ch, CURLOPT_FAILONERROR, 1);
  101.         curl_setopt($ch, CURLOPT_VERBOSE, 1);
  102.         curl_setopt($ch, CURLOPT_ENCODING, '');
  103.         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
  104.         $res = curl_exec($ch);
  105.         $info = curl_getinfo($ch);
  106.         if ($info['http_code'] != '200') return false;
  107.         $res = json_decode($res, true);
  108.         return $res;
  109.     }
  110.  
  111.  
  112.     public function userEditForm(Request $request, $JWT, $uid)
  113.     {
  114.         // return response($request->url());
  115.         $this->setUserData($JWT);
  116.         $user = DB::table('users')->where('users.id', $uid)->first();
  117.         if ($user) {
  118.             $action = "/pestshop_admin/$JWT/agents";
  119.             $perms = $this->queryAS("/user/$JWT/getpermissions/$uid");
  120.             $shops = DB::table('shops')->get();
  121.             $current = [];
  122.             if ($perms['status'] == 'ok') {
  123.                 $tmp = base64_decode($perms['perm']);
  124.                 $tmp = explode(',', $tmp);
  125.                 if (!empty($tmp))
  126.                     foreach ($tmp as $key => $val) {
  127.                         $current[$val] = 1;
  128.                     }
  129.             }
  130.             $permForm = view('admin.permissions', ['action' => "$action", 'shops' => $shops, 'current' => $current, 'uid' => $uid,]);
  131.             $form = "
  132.             <form role='form' action='$action' method='POST'>
  133.                 <div class='box-body'>
  134.                 <p class='help-block'>Имя</p>
  135.                 <div class='input-group'>
  136.                     <span class='input-group-addon'><i class='fa fa-user'></i></span>
  137.                     <input type='text' class='form-control' id='firstName1' name='firstName' placeholder='Укажите имя' value='{$user->firstName}'>
  138.                 </div>
  139.                 <p class='help-block'>Отчество</p>
  140.                 <div class='input-group'>
  141.                     <span class='input-group-addon'><i class='fa fa-user'></i></span>
  142.                     <input type='text' class='form-control' id='secondName1' name='secondName' placeholder='Укажите отчество' value='{$user->secondName}'>
  143.                 </div>
  144.                 <p class='help-block'>Фамилия</p>
  145.                 <div class='input-group'>
  146.                     <span class='input-group-addon'><i class='fa fa-user'></i></span>
  147.                     <input type='text' class='form-control' id='lastName1' name='lastName' placeholder='Укажите фамилию' value='{$user->lastName}'>
  148.                 </div>
  149.                 <p class='help-block'>Телефон</p>
  150.                 <div class='input-group'>
  151.                     <span class='input-group-addon'><i class='fa fa-phone'></i></span>
  152.                     <input type='phone' class='form-control' id='phone1' name='phone' placeholder='Телефон' value='{$user->phone}'>
  153.                 </div>
  154.                 <p class='help-block'>Email</p>
  155.                 <div class='input-group'>
  156.                     <span class='input-group-addon'><i class='fa fa-envelope'></i></span>
  157.                     <input type='email' class='form-control' id='email1' name='email' placeholder='Email' value='{$user->email}'>
  158.                 </div>
  159.                 <p class='help-block'>Введите новый пароль и его подтверждение для смены пароля. Если пароль менять не нужно, то оставьте поля пустыми</p>
  160.                 <div class='input-group'>
  161.                     <span class='input-group-addon'><i class='fa fa-key'></i></span>
  162.                     <input type='password' class='form-control' id='newpass1' name='newpass' placeholder='Новый пароль'>
  163.                 </div>
  164.                 <div class='input-group'>
  165.                     <span class='input-group-addon'><i class='fa fa-key'></i></span>
  166.                     <input type='password' class='form-control' id='newpass2' name='newpass2' placeholder='Подтверждение нового пароля'>
  167.                 </div>
  168.                 <input type='hidden' name='uid' value='$uid'>
  169.                 " . csrf_field() . "
  170.             </div>
  171.             <!-- /.box-body -->
  172.  
  173.             <div class='box-footer'>
  174.                 <div class='pull-right'>
  175.                     <button type='submit' class='btn btn-primary'>Сохранить</button>
  176.                 </div>
  177.             </div>
  178.             </form>
  179.             $permForm\n\t";
  180.         } else return response("<div class='bg-danger' style='padding-left:15px;'>Запись не найдена!</div>");
  181.         return $this->getResponse($form, 'Редактирование данных агента #' . $uid);
  182.     }
  183.  
  184.  
  185.     function changePermissions(Request $request, $JWT)
  186.     {
  187.         if (!empty($request->permissions)) {
  188.             $reqPerm = json_encode($request->permissions);
  189.             $change = base64_encode($reqPerm);
  190.             // echo $change;return response(21);
  191.             if (isset($request->uid)) {
  192.                 $perm = $this->queryAS("/user/$JWT/change/permissions/change/$change/{$request->uid}");
  193.                 if (isset($perm['status'])) {
  194.                     if ($perm['status'] == 'ok') {
  195.                         $out = '<div class="bg-success" style="padding:15px;">Изменения разрешений доступа сохранены</div>';
  196.                         DB::table('notifications')->where('uid', $request->uid)->whereNotIn('nShop', $request->permissions)->delete();
  197.                         $options = '{"sendEmail":"1","sendSMS":"1","sendPush":"1"}';
  198.                         // $options=stripslashes($options);
  199.                         foreach ($request->permissions as $val) {
  200.                             DB::insert(
  201.                                 "INSERT IGNORE INTO `notifications` (`uid`, `nShop`, `options`) VALUES (?, ?, ?)",
  202.                                 [$request->uid, $val, $options]
  203.                             );
  204.                         }
  205.                     } else $out = '<div class="bg-danger" style="padding:15px;">Не удалось сохранить изменения, ошибка: ' . $perm['status'] . '</div>';
  206.                 } else $out = '<div class="bg-danger" style="padding:15px;">Не удалось сохранить изменения, ошибка: unknown error</div>';
  207.             }
  208.         } else $out = '<div class="bg-danger" style="padding:15px;">Необходимо дать доступ хотя бы к одному магазину</div>';
  209.         return response($out);
  210.     }
  211.  
  212.  
  213.     public function shopEditForm(Request $request, $JWT, $shopid)
  214.     {
  215.         $currentBanner = '';
  216.         $shop = DB::table('shops')->where('shopID', $shopid)->first();
  217.         // return response("$JWT, $shopid");
  218.         if ($shop) {
  219.             $shopName = $shop->shopName;
  220.             if (!empty($shop->banner)) $currentBanner = "<img src='/storage/shopsbanner/{$shop->banner}' class='img-responsive' style='width:290px;margin:5px;'>";
  221.         }
  222.         $form = view('admin.shopform', [
  223.             'action' => "/pestshop_admin/$JWT/shops",
  224.             'catName' => 'Магазин ' . $shopName,
  225.             'shopName' => htmlentities($shopName),
  226.             'shopid' => $shop->id,
  227.             'currentBanner' => $currentBanner,
  228.             'JWT' => $JWT,
  229.             'countMsg' => $this->countMsg,
  230.             'warnMsg' => $this->warnMsg,
  231.             'nickname' => $this->nickname,
  232.             'avatar' => $this->avatar,
  233.         ]);
  234.         return $this->getResponse($form, 'Редактирование данных магазина #' . $shop->id);
  235.     }
  236.  
  237.  
  238.     public function storeEditForm(Request $request, $JWT, $shopid = 1, $sid)
  239.     {
  240.         $this->setUserData($JWT);
  241.         $login = '';
  242.         $shopSelect = '';
  243.         // return response($request->url());
  244.         $store = DB::table('stores')->where('storeID', $sid)->where('shop', $shopid)->first();
  245.         if ($store) {
  246.             $shops = DB::table('shops')->get();
  247.             foreach ($shops as $shop) {
  248.                 $selected = '';
  249.                 if ($shop->id == $shopid) $selected = 'selected';
  250.                 $shopSelect .= "<option value='{$shop->id}' $selected>{$shop->shopName}</option>\n\t";
  251.             }
  252.             if ($store->location && $store->location != '-') {
  253.                 $tmp = explode(', ', $store->location);
  254.                 $lat = $tmp[0];
  255.                 $lng = $tmp[1];
  256.             } else {
  257.                 $lat = '55.751849';
  258.                 $lng = '37.626515';
  259.             }
  260.             $login = 'pestshop_srvc' . $store->storeID;
  261.             $ONES_URL = env('ONES_URL', 'example.com');
  262.             $form = "
  263.             <form role='form' action='/pestshop_admin/$JWT/stores/$shopid/$sid' method='POST'>
  264.                 <div class='box-body'>
  265.                     <p class='help-block'>Магазин</p>
  266.                     <div class='input-group'>
  267.                         <span class='input-group-addon'><i class='fa fa-shopping-cart'></i></span>
  268.                         <select class='form-control' name='shop'>
  269.                             $shopSelect
  270.                         </select>
  271.                     </div>
  272.                     <p class='help-block'>Торговая точка (склад)</p>
  273.                     <div class='input-group'>
  274.                         <span class='input-group-addon'><i class='fa fa-truck'></i></span>
  275.                         <input type='text' class='form-control' id='storeName1' name='storeName' placeholder='Название торговой точки или склада' value='{$store->storeName}'>
  276.                     </div>
  277.                     <p class='help-block'>Адрес</p>
  278.                     <div class='input-group'>
  279.                         <span class='input-group-addon'><i class='fa fa-bus'></i></span>
  280.                         <input type='text' class='form-control' id='adress1' name='adress' placeholder='Адрес торговой точки или склада' value='{$store->adress}'>
  281.                     </div>
  282.                     <p class='help-block'>Режим работы</p>
  283.                     <div class='input-group'>
  284.                         <span class='input-group-addon'><i class='fa fa-list-alt'></i></span>
  285.                         <input type='text' class='form-control' id='mode1' name='mode' placeholder='Режим работы торговой точки (склада)' value='{$store->mode}'>
  286.                     </div>
  287.                     <p class='help-block'>Отметьте положение торговой точки или склада на карте</p>
  288.                     <input type='hidden' id='location2' name='location' value='$lat, $lng'>
  289.  
  290.                     <style>
  291.                         #mapid2{
  292.                             height: 270px;
  293.                         }
  294.                     </style>
  295.                     <div id='mapid2'></div>
  296.                     <script>
  297.                         var LatLng2=0;
  298.                         function onMapClick2(e){
  299.                             LatLng2=e.latlng.toString();
  300.                             LatLng2=LatLng2.replace('LatLng(','');
  301.                             LatLng2=LatLng2.replace(')','');
  302.                             $('#location2').val(LatLng2);
  303.                             var newPlace=LatLng2.split(', ');
  304.                             mymap2.removeLayer(marker2)
  305.                             marker2=L.marker(newPlace, {draggable: true}).addTo(mymap2);
  306.                             mymap2.on('click', onMapClick2);
  307.                             marker2.on('dragend', onmarkerDragged2);
  308.                         }
  309.  
  310.                         function onmarkerDragged2(e){
  311.                             LatLng2=marker2.getLatLng();
  312.                             LatLng2=LatLng2.toString();
  313.                             LatLng2=LatLng2.replace('LatLng(','');
  314.                             LatLng2=LatLng2.replace(')','');
  315.                             $('#location2').val(LatLng2);
  316.                         }
  317.  
  318.                         var mymap2 = L.map('mapid2').setView(['$lat', '$lng'], 13);
  319.                             L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png',{
  320.                                 attribution: '&copy; <a href=\"http://osm.org/copyright\">OpenStreetMap</a> contributors'
  321.                             }).addTo(mymap2);
  322.  
  323.                         var marker2 = L.marker(['$lat', '$lng'], {draggable: true}).addTo(mymap2);
  324.                         marker2.on('dragend', onmarkerDragged2);
  325.                         mymap2.on('click', onMapClick2);
  326.  
  327.                     </script>
  328.  
  329.                     <div class='box box-default'>
  330.                         <div class='box-header with-border'>
  331.                           Путь для сервиса синхронизации с 1С
  332.                         </div>
  333.                             <div class='box-body'>
  334.                                 <div class='input-group'>
  335.                                     <span class='input-group-addon'><i class='fa fa-keyboard-o'></i></span>
  336.                                     <input type='text' class='form-control' id='login1' name='path' placeholder='Тут должен быть путь...' value='$ONES_URL/onesservice/onesupload/$login/{$store->password}' readonly onclick='this.select();'>
  337.                                 </div>
  338.                             </div>
  339.                     </div>
  340.  
  341.                     " . csrf_field() . "
  342.                 </div>
  343.             <!-- /.box-body -->
  344.  
  345.                 <div class='box-footer'>
  346.                     <div class='pull-right'>
  347.                         <button type='submit' class='btn btn-primary'>Сохранить</button>
  348.                     </div>
  349.                 </div>
  350.             </form>\n\t";
  351.         } else return response("<div class='bg-danger' style='padding-left:15px;'>Запись не найдена!</div>");
  352.         return $this->getResponse($form, 'Редактирование данных торговой точки (склада) #' . $sid);
  353.     }
  354.  
  355.  
  356.     public function categoriesEditForm(Request $request, $JWT, $shopid = 1, $catid)
  357.     {
  358.         $this->setUserData($JWT);
  359.         // return response($request->url());
  360.         $category = DB::table('categories')->where('catID', $catid)->where('cShop', $shopid)->first();
  361.         if ($category)
  362.             $form = "
  363.             <form role='form' action='/pestshop_admin/$JWT/categories/$shopid/$catid' method='POST'>
  364.                 <div class='box-body'>
  365.                     " . csrf_field() . "
  366.                     <p class='help-block'>Категория товара</p>
  367.                     <div class='input-group'>
  368.                         <span class='input-group-addon'><i class='fa fa-list-alt'></i></span>
  369.                         <input type='text' class='form-control' name='newCat' value='{$category->catName}' required>
  370.                     </div>
  371.                 </div>
  372.                <div class='box-footer'>
  373.                     <div class='pull-right'>
  374.                         <button type='submit' class='btn btn-primary'>Сохранить</button>
  375.                     </div>
  376.                 </div>
  377.             </form>\n\t";
  378.         else return response("<div class='bg-danger' style='padding-left:15px;'>Запись не найдена!</div>");
  379.         return $this->getResponse($form, 'Редактирование товарной категории #' . $catid);
  380.     }
  381.  
  382.  
  383.     public function brandsEditForm(Request $request, $JWT, $brandid)
  384.     {
  385.         $this->setUserData($JWT);
  386.         // return response($request->url());
  387.         $brand = DB::table('brands')->where('brandID', $brandid)->first();
  388.         if ($brand)
  389.             $form = "
  390.             <form role='form' action='/pestshop_admin/$JWT/brands/$brandid' method='POST'>
  391.                 <div class='box-body'>
  392.                     " . csrf_field() . "
  393.                     <p class='help-block'>Наименование бренда</p>
  394.                     <div class='input-group'>
  395.                         <span class='input-group-addon'><i class='fa fa-list-alt'></i></span>
  396.                         <input type='text' class='form-control' name='newBrand' value='{$brand->brandName}' required>
  397.                     </div>
  398.                 </div>
  399.                <div class='box-footer'>
  400.                     <div class='pull-right'>
  401.                         <button type='submit' class='btn btn-primary'>Сохранить</button>
  402.                     </div>
  403.                 </div>
  404.             </form>\n\t";
  405.         else return response("<div class='bg-danger' style='padding-left:15px;'>Запись не найдена!</div>");
  406.         return $this->getResponse($form, 'Редактирование товарной категории #' . $brandid);
  407.     }
  408.  
  409.  
  410.     public function goodsEditForm(Request $request, $JWT, $shopid = 1, $goodsid)
  411.     {
  412.         $this->setUserData($JWT);
  413.         $i = 1;
  414.         $j = 0;
  415.         $action = "/pestshop_admin/$JWT/goods/$shopid/$goodsid?page=" . $request->page;
  416.         // return response($request->url());
  417.         $goods = DB::table('goods')->join('categories as c', 'goods.category', '=', 'c.catID')->join('brands as b', 'goods.brand', '=', 'b.brandID')->where('gShop', $shopid)->where('goodsID', $goodsid)->first();
  418.  
  419.         $currentPhoto = "\n\t<div class='box box-default' style='margin-top:15px;'>
  420.             <div class='box-header with-border'>
  421.               <h3 class='box-title'>Загруженные фотографии</h3>
  422.             </div>
  423.             <div class='box-body'>\n\t";
  424.         if (!empty($goods->photos)) {
  425.             $tmp = json_decode($goods->photos, true);
  426.             // print_r($tmp);
  427.             foreach ($tmp as $val) {
  428.                 if ($j == 0) $currentPhoto .= "<div class='row'>";
  429.                 $currentPhoto .= "\n\t<div class='pull-left'style='margin:5px;'><div class ='delIt' rel='$i' style='background-color:#edd;padding:5px;cursor:pointer;'><i class='fa fa-trash'></i>&nbsp;Удалить фотографию</div><img src='/storage/goodsphoto/$val' alt='$j' title='{$goods->name}, фото $i' class='img-responsive' style='width:170px;margin:5px;'></div>";
  430.                 if ($j == 2) $currentPhoto .= "</div>";
  431.                 $i++;
  432.                 $j++;
  433.                 if ($j > 2) $j = 0;
  434.             }
  435.         } else $currentPhoto .= "\n\t<p class='bg-warning' style='padding:15px;'>Для этого товара нет загруженных фотографий</p>\n\t";
  436.         $currentPhoto .= "\n\t
  437.             </div>
  438.             <div class='box-footer'>
  439.                 <p class='help-block'>Добавить фотографии</p>
  440.                 <div class='input-group'>
  441.                     <span class='input-group-addon'><i class='fa fa-list-alt'></i></span>
  442.                     <input type='file' class='form-control' name='photo[]' multiple accept='image/*,image/jpeg'>
  443.                 </div>
  444.             </div>
  445.         </div>\n\t";
  446.  
  447.         $cats = DB::table('categories')->orderBy('catName', 'asc')->get();
  448.         if ($cats) {
  449.             $categories = "\n\t<select class='form-control' name='category'>\n\t";
  450.             foreach ($cats as $cat) {
  451.                 $selected = '';
  452.                 if ($goods->category == $cat->catID) $selected = ' selected ';
  453.                 $categories .= "<option value='{$cat->catID}'$selected>{$cat->catName}</option>\n\t";
  454.             }
  455.             $categories .= '</select>';
  456.         } else $categories = "<input type='hidden' class='form-control' id='cat1' name='category' value='Список категорий пуст'>";
  457.  
  458.         $brnds = DB::table('brands')->orderBy('brandName', 'asc')->get();
  459.         if ($brnds) {
  460.             $brands = "\n\t<select class='form-control' name='brand'>\n\t";
  461.             foreach ($brnds as $brnd) {
  462.                 $selected = '';
  463.                 if ($goods->brand == $brnd->brandID) $selected = ' selected ';
  464.                 $brands .= "<option value='{$brnd->brandID}'$selected>{$brnd->brandName}</option>\n\t";
  465.             }
  466.             $brands .= '</select>';
  467.         } else $brands = "<input type='hidden' class='form-control' id='cat1' name='brand' value='Список брендов пуст'>";
  468.  
  469.         $currs = DB::table('currency')->orderBy('curID', 'asc')->get();
  470.         if ($currs) {
  471.             $currencies = "\n\t<select class='form-control' name='currency'>\n\t";
  472.             foreach ($currs as $curr) {
  473.                 $selected = '';
  474.                 if ($goods->currency == $curr->curName) $selected = ' selected ';
  475.                 $currencies .= "<option value='{$curr->curID}'$selected>{$curr->curName}</option>\n\t";
  476.             }
  477.             $currencies .= '</select>';
  478.         } else $currencies = "<input type='hidden' class='form-control' id='cat1' name='brand' value='Список валют пуст'>";
  479.  
  480.         if ($goods)
  481.             $form = "
  482.             <form role='form' action='$action' method='POST' enctype='multipart/form-data'>
  483.                 <div class='box-body'>
  484.                     <input type='hidden' class='form-control' id='gShop1' name='gShop' placeholder='Магазин' value='$shopid'>
  485.                     <h4 class='box-title'>Редактирование данных товара</h4>
  486.                     <p class='help-block'>Название товара</p>
  487.                     <div class='input-group'>
  488.                         <span class='input-group-addon'><i class='fa fa-list-alt'></i></span>
  489.                         <input type='text' class='form-control' id='name1' name='name' placeholder='Название товара' value='{$goods->name}'>
  490.                     </div>
  491.                     <p class='help-block'>Категория</p>
  492.                     <div class='input-group'>
  493.                         <span class='input-group-addon'><i class='fa fa-list-alt'></i></span>
  494.                         $categories
  495.                     </div>
  496.                     <p class='help-block'>Бренд</p>
  497.                     <div class='input-group'>
  498.                         <span class='input-group-addon'><i class='fa fa-list-alt'></i></span>
  499.                         $brands
  500.                     </div>
  501.  
  502.                     $currentPhoto
  503.  
  504.                     <p class='help-block'>Описание товара</p>
  505.                     <div class='form-group'>
  506.                         <textarea class='form-control' rows='3' placeholder='Описание товара' name='description'>{$goods->description}</textarea>
  507.                     </div>
  508.                     <p class='help-block'>Цена</p>
  509.                     <div class='input-group'>
  510.                         <span class='input-group-addon'><i class='fa fa-list-alt'></i></span>
  511.                         <input type='text' class='form-control' id='price1' name='price' placeholder='Цена' value='{$goods->price}'>
  512.                     </div>
  513.                     <p class='help-block'>Валюта</p>
  514.                     <div class='input-group'>
  515.                         <span class='input-group-addon'><i class='fa fa-money'></i></span>
  516.                         $currencies
  517.                     </div>
  518.                     <p class='help-block'>Единицы измерения</p>
  519.                     <div class='input-group'>
  520.                         <span class='input-group-addon'><i class='fa fa-list-alt'></i></span>
  521.                         <input type='text' class='form-control' id='unit1' name='unit' placeholder='Единица измерения' value='{$goods->unit}'>
  522.                     </div>
  523.  
  524.                     " . csrf_field() . "
  525.                 </div>
  526.             <!-- /.box-body -->
  527.  
  528.                 <div class='box-footer'>
  529.                     <div class='pull-right'>
  530.                         <button type='submit' class='btn btn-primary'>Сохранить</button>
  531.                     </div>
  532.                 </div>
  533.             </form>
  534.             <script>
  535.                 $(document).off('.delClass');
  536.                 $(document).on('click.delClass','.delIt',function(){
  537.                     var delURL='/pestshop_admin/$JWT/delgoodsphoto/$goodsid/'+$(this).attr('rel');
  538.                     // alert(delURL);return false;
  539.                     $.ajax({
  540.                         type: 'GET',
  541.                         url: delURL,
  542.                         success: function(data){
  543.                             $('#ajaxTarget').html(data).show(500);
  544.                             return false;
  545.                         },
  546.                         error:  function(xhr, str){
  547.                             alert('Возникла ошибка: '+xhr.responseCode);
  548.                         }
  549.  
  550.                     });
  551.                     return false;
  552.                 });
  553.            </script>
  554.             \n\t";
  555.         else return response("<div class='bg-danger' style='padding-left:15px;'>Запись не найдена!</div>");
  556.         return $this->getResponse($form, 'Редактирование товара #' . $goodsid);
  557.     }
  558.  
  559.  
  560.     public function delGoodsPhoto(Request $request, $JWT, $goodsid, $photo)
  561.     {
  562.         $photo--;
  563.         $goods = DB::table('goods')->where('gShop', 1)->where('goodsID', $goodsid)->first();
  564.         $photos = json_decode($goods->photos, true);
  565.         Storage::delete('public/goodsphoto/' . $photos[$photo]);
  566.         unset($photos[$photo]);
  567.         $photos = array_values($photos);
  568.         $photos = json_encode($photos);
  569.         $res = DB::table('goods')->where('gShop', 1)->where('goodsID', $goodsid)->update(['photos' => $photos]);
  570.         return $this->goodsEditForm($request, $JWT, $goodsid);
  571.     }
  572.  
  573.  
  574.     public function searchGoods(Request $request, $JWT)
  575.     {
  576.         $outText = '';
  577.         $html = '';
  578.         $addAction = '?page=' . $request->page;
  579.         $goodsCount = DB::table('goods as g')->join('brands as b', 'g.brand', '=', 'b.brandID')->join('categories as ctgr', 'g.category', '=', 'ctgr.catID')->where('gShop', $request->gShop)->where('name', 'like', "%{$request->name}%")->count();
  580.         if ($goodsCount) {
  581.             $goods = DB::table('goods as g')->join('brands as b', 'g.brand', '=', 'b.brandID')->join('categories as ctgr', 'g.category', '=', 'ctgr.catID')->where('gShop', $request->gShop)->where('name', 'like', "%{$request->name}%")->select('ctgr.catID as catID', 'g.name as name', 'b.brandName as brandName', 'ctgr.catName as catName', 'g.goodsID as goodsID')->orderBy('catName')->orderBy('name')->limit(10)->get();
  582.             foreach ($goods as $good) {
  583.                 $html .= "<tr>
  584.                     <td>{$good->goodsID}</td>
  585.                     <td>{$good->name}</td>
  586.                     <td>{$good->catName}</td>
  587.                     <td>{$good->brandName}</td>
  588.                     <td><div class='input-group'>
  589.                         <input type='number' class='form-control' id='ajnum{$good->goodsID}' name='ajnum{$good->goodsID}' placeholder='Количество товара' value=''></td>
  590.                         </div>
  591.                     <td>
  592.                         <div class='btn-group btn-group-sm'>
  593.                             <a href='#edit' class='btn btn-default btn-flat' id='editStoresGoods' rel='{$good->goodsID}'><i class='fa fa-plus text-light-blue'></i></a>
  594.                         </div>
  595.                     </td>
  596.                 </tr>";
  597.             }
  598.         } else $html .= "\n\t<tr>
  599.                     <td colspan='6'><div class='bg-danger' style='padding:15px;'>Ничего не найдено</div></td>
  600.                </tr>\n\t";
  601.  
  602.  
  603.         $outText = "\n\t" . '<div class="box-body table-responsive no-padding">
  604.             <table class="table table-hover">
  605.                 <tr>
  606.                     <th>ID</th>
  607.                     <th>Название</th>
  608.                     <th>Категория</th>
  609.                     <th>Бренд</th>
  610.                     <th>Количество</th>
  611.                     <th>Действие</th>
  612.                 </tr>
  613.             ' . $html . '
  614.             </table>
  615.             </div>
  616.        <script>
  617.             $(document).off(".delClass");
  618.             $(document).on("click.delClass","#editStoresGoods",function(){
  619.                 var rel=$(this).attr("rel");
  620.                 var ageURL="/pestshop_admin/' . $JWT . '/addcatalogues/' . $request->gShop . '/' . $request->storesid . '/' . $good->catID . '/"+rel+"/"+$("#ajnum"+rel).val()+"' . $addAction . '";
  621.                 // alert(ageURL);return false;
  622.                 $.ajax({
  623.                    type: "GET",
  624.                    url: ageURL,
  625.                    success: function(data){
  626.                        $("#ajaxTarget34").html(data).show(300);
  627.                        var getCatURL="/pestshop_admin/' . $JWT . '/getcatalogues/' . $request->gShop . '/' . $request->storesid . $addAction . '";
  628.                         // alert(data);
  629.                         if(data.indexOf("товар уже есть")==-1)
  630.                             setTimeout(function (){
  631.                                 $("#ajaxTarget").load(getCatURL).show(500);
  632.                             },1000);
  633.  
  634.                        return false;
  635.                    },
  636.                    error:  function(xhr, str){
  637.                        alert("Возникла ошибка: "+xhr.responseCode);
  638.                    }
  639.  
  640.                });
  641.                return false;
  642.            });
  643.        </script>
  644.        ' . "\n\t";
  645.  
  646.         return $outText;
  647.     }
  648.  
  649.  
  650.     public function promosEditForm(Request $request, $JWT, $shopid, $promosid)
  651.     {
  652.         $this->setUserData($JWT);
  653.         $action = "/pestshop_admin/$JWT/promos/$shopid/$promosid?page=" . $request->page;
  654.         // return response($request->url());
  655.         $promo = DB::table('promos')->where('pShop', $shopid)->where('promoID', $promosid)->first();
  656.         $currentBanner = "\n\t<div class='box box-default' style='margin-top:15px;'>
  657.             <div class='box-header with-border'>
  658.               <h3 class='box-title'>Загруженный баннер</h3>
  659.             </div>
  660.             <div class='box-body'>\n\t";
  661.         if (!empty($promo->banner)) {
  662.             $currentBanner .= "\n\t<div class='pull-left'style='margin:5px;'><div class ='delIt' rel='1' style='background-color:#edd;padding:5px;cursor:pointer;'><i class='fa fa-trash'></i>&nbsp;Удалить баннер</div><img src='/storage/promosbanner/{$promo->banner}' alt='Промобаннер' title='{$promo->title}' class='img-responsive' style='width:170px;margin:5px;'></div>";
  663.         } else $currentBanner .= "\n\t<p class='bg-warning' style='padding:15px;'>Для этой акции баннер не загружен</p>\n\t";
  664.         $currentBanner .= "\n\t
  665.             </div>
  666.             <div class='box-footer'>
  667.                 <p class='help-block'>Заменить баннер</p>
  668.                 <div class='input-group'>
  669.                     <span class='input-group-addon'><i class='fa fa-list-alt'></i></span>
  670.                     <input type='file' class='form-control' name='banner' accept='image/*,image/jpeg'>
  671.                 </div>
  672.             </div>
  673.         </div>\n\t";
  674.         if ($promo)
  675.             $form = "
  676.             <form role='form' name='promoEditForm' action='javascript:void(0)' method='POST' id='promoEditForm1' enctype='multipart/form-data' onsubmit='sendPEF();'>
  677.                 <div class='box-body'>
  678.                     <input type='hidden' class='form-control' id='gShop1' name='gShop' placeholder='Магазин' value='$shopid'>
  679.                     <p class='help-block'>Название акции</p>
  680.                     <div class='input-group'>
  681.                         <span class='input-group-addon'><i class='fa fa-list-alt'></i></span>
  682.                         <input type='text' class='form-control' id='name1' name='title' placeholder='Название акции' value='{$promo->title}' required>
  683.                     </div>
  684.  
  685.                     $currentBanner
  686.  
  687.                     <p class='help-block'>Краткое описание акции</p>
  688.                     <div class='form-group'>
  689.                         <textarea class='form-control' rows='3' placeholder='Краткое описание акции' name='shortDescription' required>{$promo->shortDescription}</textarea>
  690.                     </div>
  691.                      <p class='help-block'>Полное описание акции</p>
  692.                     <div class='form-group'>
  693.                         <textarea class='form-control' rows='3' placeholder='Полное описание акции' name='fullDescription' required>{$promo->fullDescription}</textarea>
  694.                     </div>
  695.  
  696.                     <p class='help-block'>Начало акции</p>
  697.                     <div class='form-group'>
  698.                        <div class='input-group date' id='ajdatetimepicker1'>
  699.                            <span class='input-group-addon'>
  700.                                <span class='glyphicon glyphicon-calendar'></span>
  701.                            </span>
  702.                            <input type='text' class='form-control' name='dayFrom' value='{$promo->from}' required readonly>
  703.                        </div>
  704.                    </div>
  705.                     <script type='text/javascript'>
  706.                        $(function () {
  707.                            $('#ajdatetimepicker1').datetimepicker({
  708.                                locale: 'ru',
  709.                                format: 'Y-MM-DD',
  710.                                ignoreReadonly: true
  711.                            });
  712.                        });
  713.                    </script>
  714.  
  715.                     <p class='help-block'>Окончание акции</p>
  716.                     <div class='form-group'>
  717.                        <div class='input-group date' id='ajdatetimepicker2'>
  718.                            <span class='input-group-addon'>
  719.                                <span class='glyphicon glyphicon-calendar'></span>
  720.                            </span>
  721.                            <input type='text' class='form-control' name='dayTo' value='{$promo->to}' required readonly>
  722.                        </div>
  723.                     </div>
  724.                     <script type='text/javascript'>
  725.                        $(function () {
  726.                            $('#ajdatetimepicker2').datetimepicker({
  727.                                locale: 'ru',
  728.                                format: 'Y-MM-DD',
  729.                                ignoreReadonly: true,
  730.                                useCurrent: false
  731.                            });
  732.                            $('#ajdatetimepicker1').on('dp.change', function (e) {
  733.                                $('#ajdatetimepicker2').data('DateTimePicker').minDate(e.date);
  734.                            });
  735.                        });
  736.                    </script>
  737.                     " . csrf_field() . "
  738.                 </div>
  739.             <!-- /.box-body -->
  740.  
  741.                 <div class='box-footer'>
  742.                     <div class='pull-right'>
  743.                         <button type='submit' class='btn btn-primary'>Сохранить</button>
  744.                     </div>
  745.                 </div>
  746.             </form>
  747.             <script>
  748.                 $(document).off('.delClass');
  749.                 $(document).on('click.delClass','.delIt',function(){
  750.                     var delURL='/pestshop_admin/$JWT/delpromosbanner/$shopid/$promosid/'+$(this).attr('rel');
  751.                     // alert(delURL);return false;
  752.                     $.ajax({
  753.                         type: 'GET',
  754.                         url: delURL,
  755.                         success: function(data){
  756.                             $('#ajaxTarget').html(data).show(500);
  757.                             return false;
  758.                         },
  759.                         error:  function(xhr, str){
  760.                             alert('Возникла ошибка: '+xhr.responseCode);
  761.                         }
  762.  
  763.                     });
  764.                     return false;
  765.                 });
  766.                 function sendPEF(){
  767.                     var formData= new FormData(document.forms.promoEditForm);
  768.                     var xhr= new XMLHttpRequest();
  769.                     xhr.open('POST', '$action');
  770.                     xhr.onreadystatechange=function(){
  771.                         if (xhr.readyState==4){
  772.                             if(xhr.status==200){
  773.                                 data=xhr.responseText;
  774.                                 if(data=='21'){
  775.                                     $(location).attr('href','$action');
  776.                                 }else{
  777.                                     $('#ajaxTarget').prepend(data);
  778.                                     $('#errMsg1').delay(2000).fadeOut(1500);
  779.                                     return false;
  780.                                 }
  781.                             }else{
  782.                                 alert('Возникла ошибка: '+xhr.responseCode);
  783.                                 return false;
  784.                             }
  785.                         }
  786.                     };
  787.                     xhr.send(formData);
  788.                     return false;
  789.                 }
  790.            </script>\n\t";
  791.         else return response("<div class='bg-danger' style='padding-left:15px;'>Запись не найдена!</div>");
  792.         return $this->getResponse($form, 'Редактирование промоакции #' . $promosid);
  793.     }
  794.  
  795.  
  796.     public function delPromosBanner(Request $request, $JWT, $shopid, $promosid, $banner)
  797.     {
  798.         $promos = DB::table('promos')->where('pShop', $shopid)->where('promoID', $promosid)->first();
  799.         Storage::delete('public/promosbanner/' . $promos->banner);
  800.         $res = DB::table('promos')->where('pShop', $shopid)->where('promoID', $promosid)->update(['banner' => ""]);
  801.         return $this->promosEditForm($request, $JWT, $shopid, $promosid);
  802.     }
  803.  
  804.  
  805.     public function getStoresCat(Request $request, $JWT, $shopid, $storesid, $msg = '')
  806.     {
  807.         $html = '';
  808.         $addAction = '';
  809.         $storesGoods = DB::table('catalogue as c')->join('goods as g', 'c.goodsID', '=', 'g.goodsID')->join('brands as b', 'g.brand', '=', 'b.brandID')->join('categories as ctgr', 'g.category', '=', 'ctgr.catID')->where('c.store', $storesid)->where('c.cShop', $shopid)->select('c.catID as catID', 'g.name as name', 'b.brandName as brandName', 'ctgr.catName as catName', 'c.num as num', 'g.unit as unit', 'c.id as cid')->orderBy('catName')->orderBy('name')->paginate(15);
  810.         // var_dump($storesGoods->items());return response(21);
  811.         if ($storesGoods && !empty($storesGoods->items())) {
  812.             $html .= '<span id="ajPaginate1">' . $storesGoods->links() . '</span>';
  813.             $addAction = '?page=' . $storesGoods->currentPage();
  814.             foreach ($storesGoods as $storesGood) {
  815.                 $html .= "<tr>
  816.                     <td>{$storesGood->cid}</td>
  817.                     <td>{$storesGood->name}</td>
  818.                     <td>{$storesGood->catName}</td>
  819.                     <td>{$storesGood->brandName}</td>
  820.                     <td>{$storesGood->num}</td>
  821.                     <td>{$storesGood->unit}</td>
  822.                     <td>
  823.                         <div class='btn-group btn-group-sm'>
  824.                             <a href='#edit' class='btn btn-default btn-flat' id='editStoresGoods' rel='{$storesGood->catID}'><i class='fa fa-trash text-light-blue'></i></a>
  825.                         </div>
  826.                     </td>
  827.                 </tr>";
  828.             }
  829.         } else $html .= "\n\t<tr>
  830.                     <td colspan='5'>Список товара пуст</td>
  831.                </tr>\n\t";
  832.  
  833.         $outText = "\n\t" . $msg . "\n\t" . '<div class="box-body table-responsive no-padding">
  834.             <table class="table table-hover">
  835.                 <tr>
  836.                     <th>ID</th>
  837.                     <th>Название</th>
  838.                     <th>Категория</th>
  839.                     <th>Бренд</th>
  840.                     <th>Количество</th>
  841.                     <th>Единицы</th>
  842.                     <th>Действие</th>
  843.                 </tr>
  844.             ' . $html . '
  845.             </table>
  846.             </div>
  847.        <script>
  848.             $(document).off(".delClass");
  849.  
  850.             $(document).on("click.delClass","#editStoresGoods",function(){
  851.                 if(!confirm("Вы действительно хотите удалить этот товар из каталога торговой точки?")) return false;
  852.                 var ageURL="/pestshop_admin/' . $JWT . '/delcatalogues/' . $shopid . '/' . $storesid . '/"+$(this).attr("rel")+"' . $addAction . '";
  853.                 // alert(ageURL);return false;
  854.                 $.ajax({
  855.                    type: "GET",
  856.                    url: ageURL,
  857.                    success: function(data){
  858.                        $("#ajaxTarget").html(data).show(500);
  859.                        return false;
  860.                    },
  861.                    error:  function(xhr, str){
  862.                        alert("Возникла ошибка: "+xhr.responseCode);
  863.                    }
  864.  
  865.                });
  866.                return false;
  867.            });
  868.  
  869.             $(document).on("click.delClass","span#ajPaginate1 .page-link",function(){
  870.                 var ageURL="/pestshop_admin/' . $JWT . '/getcatalogues/' . $shopid . '/' . $storesid . '?page="+$(this).html();
  871.                 // alert(ageURL);return false;
  872.                 $.ajax({
  873.                    type: "GET",
  874.                    url: ageURL,
  875.                    success: function(data){
  876.                        $("#ajaxTarget").html(data).show(500);
  877.                        return false;
  878.                    },
  879.                    error:  function(xhr, str){
  880.                        alert("Возникла ошибка: "+xhr.responseCode);
  881.                        return false;
  882.                    }
  883.  
  884.                });
  885.                return false;
  886.            });
  887.  
  888.            $(document).on("click.delClass","#loadOneSs1",function(){
  889.                 var ageURL="/pestshop_admin/' . $JWT . '/loadcatalogues/' . $shopid . '/' . $storesid . '"+"' . $addAction . '";
  890.                 // alert(ageURL);return false;
  891.                 $.ajax({
  892.                    type: "GET",
  893.                    url: ageURL,
  894.                    success: function(data){
  895.                         // alert(data);
  896.                        $("#ajaxTarget").html(data).show(500);
  897.                        return false;
  898.                    },
  899.                    error:  function(xhr, str){
  900.                        alert("Возникла ошибка: "+xhr.responseCode);
  901.                    }
  902.  
  903.                });
  904.                return false;
  905.            });
  906.        </script>
  907.        ' . "\n\t";
  908.         $outText .= view('admin.addstoregoodsform', ['JWT' => $JWT, 'storesid' => $storesid, 'shopid' => $shopid, 'page' => $request->page]);
  909.         return $this->getResponse($outText, 'Каталог товара торговой точки #' . $storesid);
  910.     }
  911.  
  912.  
  913.     public function addGoods(Request $request, $JWT, $shopid, $storesid, $catID, $goodsid, $num)
  914.     {
  915.         try {
  916.             $res = DB::table('catalogue')->insertGetId(['catID' => $catID, 'goodsID' => $goodsid, 'store' => $storesid, 'cShop' => $shopid, 'num' => $num]);
  917.         } catch (\Illuminate\Database\QueryException $e) {
  918.             //return response('query error: '.$e->errorInfo[2]]);
  919.             if (mb_stripos($e->errorInfo[2], 'duplicate entry') !== false) return response('<div class="bg-danger" style="padding:15px;">Этот товар уже есть в каталоге торговой точки</div>');
  920.             else return response('<div class="bg-danger" style="padding:15px;">Ошибка добавления</div>');
  921.         }
  922.         return response('<div class="bg-success" style="padding:15px;">Товар в каталог торговой точки добавлен</div>');
  923.     }
  924.  
  925.  
  926.     public function delGoodsItem(Request $request, $JWT, $shopid, $storesid, $catid)
  927.     {
  928.         $shopid = DB::table('catalogue')->where('cShop', $shopid)->where('store', $storesid)->where('catID', $catid)->value('cShop');
  929.         $res = DB::table('catalogue')->where('cShop', $shopid)->where('store', $storesid)->where('catID', $catid)->delete();
  930.         return $this->getStoresCat($request, $JWT, $shopid, $storesid);
  931.     }
  932.  
  933.  
  934.     public function loadCatalogue(Request $request, $JWT, $shopid, $storesid)
  935.     {
  936.         $this->setUserData($JWT);
  937.         $msg = "<div class='bg-success' style='padding:15px;'>Каталог товаров обновлен!</div>";
  938.         $num = DB::table('stores')->where('storeID', $storesid)->where('shop', $shopid)->count();
  939.         if (!$num) return $this->getStoresCat($request, $JWT, $shopid, $storesid, "<div class='bg-danger' style='padding:15px;'>Не удалось обновить каталог товаров, торговая точка не найдена!</div>");
  940.  
  941.         $response = $this->queryOnesS("/$JWT/getit/$shopid/$storesid");
  942.         // print_r($response);return (21);
  943.         if ($response && $response['status'] == 'ok') {
  944.             $data = $response['data'];
  945.  
  946.             $shopData = $data['shop'];
  947.             if (!empty($shopData)) {
  948.                 DB::table('shops')->where('id', $shopid)->update([
  949.                     'shopID' => $shopData['shopID'],
  950.                     'INN' => $shopData['INN'],
  951.                     'shopName' => $shopData['shopName'],
  952.                 ]);
  953.                 DB::table('stores')->where('storeID', $storesid)->update(['storeName' => $shopData['storeName']]);
  954.             }
  955.  
  956.             $categories = $data['categories'];
  957.             if (!empty($categories))
  958.                 // DB::table('categories')->where('cShop', $shopid)->delete();
  959.                 foreach ($categories as $category) {
  960.                     if ($category['shop'] != $shopid) return $this->getStoresCat($request, $JWT, $shopid, $storesid, "<div class='bg-danger' style='padding:15px;'>Не удалось обновить каталог товаров, сервис синхронизации предоставил некорректные данные!</div>");
  961.                     DB::insert(
  962.                         "INSERT INTO `categories` (`cShop`,`catOnesID`,`parent`,`catName`) VALUES (?,?,?,?) ON DUPLICATE KEY UPDATE `parent`=?, `catName`=?",
  963.                         [$shopid, $category['catID'], $category['parent'], $category['catName'], $category['parent'], $category['catName']]
  964.                     );
  965.                 }
  966.  
  967.             $brands = $data['brand'];
  968.             if (!empty($brands))
  969.                 foreach ($brands as $brand => $val) {
  970.                     DB::insert("INSERT IGNORE INTO `brands` (`brandName`) VALUES (?)", [$brand]);
  971.                 }
  972.  
  973.             $goods = $data['goods'];
  974.             if (!empty($goods)) {
  975.                 // DB::table('goods')->where('gShop', $shopid)->delete();
  976.                 foreach ($goods as $product) {
  977.                     if (!isset($cats[$product['catOnesID']])) $cats[$product['catOnesID']] = DB::table('categories')->where('catOnesID', $product['catOnesID'])->value('catID');
  978.                     $brandID = DB::table('brands')->where('brandName', $product['brand'])->value('brandID');
  979.                     DB::insert(
  980.                         "INSERT INTO `goods` (`gOnesID`,`gShop`,`name`,`category`,`brand`,`description`,`price`,`currency`,`unit`,`photos`) VALUES (?,?,?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE `name`=?,`category`=?,`brand`=?,`description`=?,`price`=?,`currency`=?,`unit`=?",
  981.                         [
  982.                             $product['gOnesID'], $shopid, $product['name'], $cats[$product['catOnesID']], $brandID,
  983.                             $product['description'], $product['price'], $product['currency'], $product['unit'], "",
  984.                             $product['name'], $cats[$product['catOnesID']], $brandID, $product['description'], $product['price'],
  985.                             $product['currency'], $product['unit']
  986.                         ]
  987.                     );
  988.                 }
  989.             }
  990.             $catalogue = $data['catalogue'];
  991.             // $i=1;
  992.             if (!empty($catalogue)) {
  993.                 DB::table('catalogue')->where('cShop', $shopid)->where('store', $storesid)->delete();
  994.                 foreach ($catalogue as $catRec) {
  995.                     if (!isset($cats[$catRec['catOnesID']])) $cats[$catRec['catOnesID']] = DB::table('categories')->where('catOnesID', $catRec['catOnesID'])->value('catID');
  996.                     if (!isset($gds[$catRec['gOnesID']])) $gds[$catRec['gOnesID']] = DB::table('goods')->where('gOnesID', $catRec['gOnesID'])->value('goodsID');
  997.  
  998.                     $insRes = DB::insert(
  999.                         "INSERT INTO `catalogue` (`catID`,`cShop`,`goodsID`,`store`,`num`) VALUES (?,?,?,?,?) ON DUPLICATE KEY UPDATE `catID`=?, `num`=?",
  1000.                         [$cats[$catRec['catOnesID']], $shopid, $gds[$catRec['gOnesID']], $storesid, $catRec['num'], $cats[$catRec['catOnesID']], $catRec['num']]
  1001.                     );
  1002.                     // print_r($catalogue);return
  1003.                     // echo $i++.". INSERT INTO `catalogue` (`catID`,`cShop`,`goodsID`,`store`,`num`) VALUES ('".$cats[$catRec['catOnesID']]."', '".$shopid."', '".$gds[$catRec['gOnesID']]."', '".$storesid."', '".$catRec['num']."') ON DUPLICATE KEY UPDATE `catID`='".$cats[$catRec['catOnesID']]."', `num`='".$catRec['num']."'\n";
  1004.                 }
  1005.             }
  1006.         } else {
  1007.             if ($response['status'] == 'not ready')
  1008.                 switch ($response['code']) {
  1009.                     case '-1':
  1010.                         $msg = ", данные для этой торговой точки или склада не выгружались";
  1011.                         break;
  1012.                     case '0':
  1013.                         $msg = ", нет новых данных";
  1014.                         break;
  1015.                     case '1':
  1016.                         $msg = ", данные обновляются, запросите данные позже";
  1017.                         break;
  1018.                     case '2':
  1019.                         $msg = ", вы вообще никогда не должны были увидеть это сообщение об ошибке, свяжитесь с разработчиками";
  1020.                         break;
  1021.  
  1022.                     default:
  1023.                         $msg = ", неизвестная ошибка, свяжитесь с разработчиками";
  1024.                 }
  1025.             if ($response['status'] == 'not found') $msg = ", текущие данные уже были загружены";
  1026.  
  1027.             $msg = "<div class='bg-danger' style='padding:15px;'>Не удалось обновить каталог товаров точки$msg</div>";
  1028.         }
  1029.         return $this->getStoresCat($request, $JWT, $shopid, $storesid, $msg);
  1030.     }
  1031.  
  1032.  
  1033.     function getAttachBlock($files)
  1034.     {
  1035.         $attach = '';
  1036.         if (!empty($files)) {
  1037.             $tmp = json_decode($files, true);
  1038.             foreach ($tmp as $val)
  1039.                 $attach .= "\n\t<li><a href='/storage/attachments/$val' style='margin:5px;' target='_blank'>$val</a></li>";
  1040.         } else $attach = "\n\t<li>вложений нет</li>\n\t";
  1041.         $attach = "
  1042.         <ul class='list-inline'>
  1043.             <li style='padding-top:5px;'><i class='fa fa-paperclip'></i><li>
  1044.             $attach
  1045.         </ul>\n\t";
  1046.         return $attach;
  1047.     }
  1048.  
  1049.     public function getMsg($JWT, $where, $mid)
  1050.     {
  1051.         $this->setUserData($JWT);
  1052.         $msg = DB::table('messages')->where('id', $mid)->first();
  1053.         $from = DB::table('users')->where('id', $msg->from)->first();
  1054.         $to = DB::table('users')->where('id', $msg->to)->first();
  1055.         if (!$msg->parent) $msg->parent = $mid;
  1056.         if (mb_stripos($msg->title, 'Re') !== false) $title = $msg->title;
  1057.         else $title = 'Re: ' . $msg->title;
  1058.         $where = $msg->status;
  1059.         if ($where == 'wait') $where = 'unread';
  1060.         // return response(344);
  1061.         if ($msg) {
  1062.             $attachments = $this->getAttachBlock($msg->files);
  1063.             $form = "
  1064.                 <div class='box-body'>
  1065.                     <div class='mailbox-read-info'>
  1066.                         <h3>Тема: {$msg->title}</h3>
  1067.                         <h5>От: {$from->firstName} {$from->secondName} {$from->lastName}
  1068.                             <span class='mailbox-read-time pull-right'>Отправлено: {$msg->sentDate}</span>
  1069.                         </h5>
  1070.                     </div>
  1071.                     <div class='mailbox-read-message'>
  1072.                         <h4>Сообщение:</h4>
  1073.                         <p>{$msg->message}</p>
  1074.                         $attachments
  1075.                     </div>
  1076.                 </div>
  1077.                 <div class='box-footer'>
  1078.                     <form role='form' action='/pestshop_admin/$JWT/msg/$where' method='POST' enctype='multipart/form-data'>
  1079.                         " . csrf_field() . "
  1080.                         <div class='form-group'>
  1081.                             <input type='hidden' name='replyID' value='$mid'>
  1082.                             <input type='hidden' name='to' value='{$msg->from}'>
  1083.                             <input type='hidden' name='title' value='{$title}'>
  1084.                             <input type='hidden' name='parent' value='{$msg->parent}'>
  1085.                             <input type='hidden' name='mShop' value='{$msg->mShop}'>
  1086.                             <label for='ta1'>Написать сообщение:</label>
  1087.                             <textarea class='form-control' name='answer' id='ta1' rows='5'required></textarea>
  1088.                             <p class='help-block'>Прикрепить файл(ы)</p>
  1089.                             <div class='input-group'>
  1090.                                 <span class='input-group-addon'><i class='fa fa-list-alt'></i></span>
  1091.                                 <input type='file' class='form-control' name='attach[]' multiple>
  1092.                             </div>
  1093.                         </div>
  1094.                         <div class='form-group'>
  1095.                             <button type='submit' class='btn btn-info btn-flat'>Отправить</button>
  1096.                         </div>
  1097.                     </form>
  1098.                 </div>\n\t";
  1099.         } else return response("<div class='bg-danger' style='padding-left:15px;'>Запись не найдена!</div>");
  1100.         return $this->getResponse($form, 'Сообщение #' . $mid);
  1101.     }
  1102.  
  1103.  
  1104.     public function getMsgThread($JWT, $where, $tid)
  1105.     {
  1106.         $this->setUserData($JWT);
  1107.         $tread = '';
  1108.         $root = '';
  1109.         $msg = DB::table('messages')->where('id', $tid)->first();
  1110.         $from = DB::table('users')->where('id', $msg->from)->first();
  1111.         if ($this->uid != $msg->from) $parentFrom = $msg->from;
  1112.         else $parentFrom = $msg->to;
  1113.         $to = DB::table('users')->where('id', $msg->to)->first();
  1114.         $userArray[$msg->from] = "{$from->firstName} {$from->secondName} {$from->lastName}";
  1115.         $userArray[$msg->to] = "{$to->firstName} {$to->secondName} {$to->lastName}";
  1116.         if (!$msg->parent) $msg->parent = $tid;
  1117.         if (mb_stripos($msg->title, 'Re') !== false) $title = $msg->title;
  1118.         else $title = 'Re: ' . $msg->title;
  1119.         $where = $msg->status;
  1120.         // return response($userArray);
  1121.         if ($msg) {
  1122.             $attachments = $this->getAttachBlock($msg->files);
  1123.             $root = "
  1124.                 <div class='mailbox-read-info'>
  1125.                     <h3>Тема: {$msg->title}</h3>
  1126.                     <h5>От: {$from->firstName} {$from->secondName} {$from->lastName}
  1127.                         <span class='mailbox-read-time pull-right'>Отправлено: {$msg->sentDate}</span>
  1128.                     </h5>
  1129.                 </div>
  1130.                 <div class='mailbox-read-message'>
  1131.                     <h4>Сообщение:</h4>
  1132.                     <p>{$msg->message}</p>
  1133.                     $attachments
  1134.                 </div>\n\t\t";
  1135.         } else return response("<div class='bg-danger' style='padding-left:15px;'>Запись не найдена!</div>");
  1136.         $msgs = DB::table('messages')->where('parent', $tid)->get();
  1137.         foreach ($msgs as $msg) {
  1138.             $attachments = $this->getAttachBlock($msg->files);
  1139.             $tread .= "
  1140.                 <div class='mailbox-read-info'>
  1141.                     <h3>Тема: {$msg->title}</h3>
  1142.                     <h5>От: {$userArray[$msg->from]}
  1143.                         <span class='mailbox-read-time pull-right'>Отправлено: {$msg->sentDate}</span>
  1144.                     </h5>
  1145.                 </div>
  1146.                 <div class='mailbox-read-message'>
  1147.                     <h4>Сообщение:</h4>
  1148.                     <p>{$msg->message}</p>
  1149.                     $attachments
  1150.                 </div>\n\t\t";
  1151.         }
  1152.         $form = "
  1153.                 <div class='box-body'>
  1154.                     $root
  1155.                     $tread
  1156.                 </div>
  1157.                 <div class='box-footer'>
  1158.                     <form role='form' action='/pestshop_admin/$JWT/msg/$where' method='POST' enctype='multipart/form-data'>
  1159.                         " . csrf_field() . "
  1160.                         <div class='form-group'>
  1161.                             <input type='hidden' name='replyID' value='$tid'>
  1162.                             <input type='hidden' name='to' value='{$parentFrom}'>
  1163.                             <input type='hidden' name='title' value='{$title}'>
  1164.                             <input type='hidden' name='parent' value='{$msg->parent}'>
  1165.                             <input type='hidden' name='mShop' value='{$msg->mShop}'>
  1166.                             <label for='ta1'>Написать сообщение:</label>
  1167.                             <textarea class='form-control' name='answer' id='ta1' rows='5' required></textarea>
  1168.                             <p class='help-block'>Прикрепить файл(ы)</p>
  1169.                             <div class='input-group'>
  1170.                                 <span class='input-group-addon'><i class='fa fa-list-alt'></i></span>
  1171.                                 <input type='file' class='form-control' name='attach[]' multiple>
  1172.                             </div>
  1173.                         </div>
  1174.                         <div class='form-group'>
  1175.                             <button type='submit' class='btn btn-info btn-flat'>Отправить</button>
  1176.                         </div>
  1177.                     </form>
  1178.                 </div>\n\t";
  1179.         return $this->getResponse($form, 'Нитка сообщений #' . $tid);
  1180.     }
  1181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement