diff --git a/k2shop/k2shop/app/another/captcha.php b/k2shop/k2shop/app/another/captcha.php new file mode 100644 index 0000000..2cc240b --- /dev/null +++ b/k2shop/k2shop/app/another/captcha.php @@ -0,0 +1,394 @@ +")!==false) + { + if ($is_verbose) echo "server returned error: $result\n"; + return false; + } + else + { + $ex = explode("|", $result); + $captcha_id = $ex[1]; + if ($is_verbose) echo "captcha sent, got captcha ID $captcha_id\n"; + $waittime = 0; + if ($is_verbose) echo "waiting for $rtimeout seconds\n"; + sleep($rtimeout); + while(true) + { + $result = file_get_contents('http://rucaptcha.com/res.php?key='.$apikey.'&action=get&id='.$captcha_id); + if (strpos($result, 'ERROR')!==false) + { + if ($is_verbose) echo "server returned error: $result\n"; + return false; + } + if ($result=="CAPCHA_NOT_READY") + { + if ($is_verbose) echo "captcha is not ready yet\n"; + $waittime += $rtimeout; + if ($waittime>$mtimeout) + { + if ($is_verbose) echo "timelimit ($mtimeout) hit\n"; + break; + } + if ($is_verbose) echo "waiting for $rtimeout seconds\n"; + sleep($rtimeout); + } + else + { + $ex = explode('|', $result); + if (trim($ex[0])=='OK') return trim($ex[1]); + } + } + + return false; + } + } + + + + + + + // Загружает фотографию и передает информацию о ней + function get_file(){ + + global $k2; + + $rez=''; + + if (!((trim($k2->post('user'))=='fastunlock')and(trim($k2->post('password'))=='fast2015'))) + { + die('error user!'); + } + + + if (isset($_FILES)){ + if (file_exists($_FILES['filesend']['tmp_name'])){ + echo 'Found File: '.$_FILES['filesend']['tmp_name']."\n"; + }else{ + echo 'NOT FOUND file: '.$_FILES['filesend']['tmp_name']."\n"; + } + } + + + // проверяем isset файла из отправленной формы данных + if (isset($_FILES['filesend']['name'])) + { + + + //проверка расширения файла + $file_name = $_FILES['filesend']['name']; + $filetype = substr($file_name, strlen($file_name) - 3); + + + if ($filetype == "jpg" or + $filetype == "jpeg" or + $filetype == "gif" or + $filetype == "bmp" or + $filetype == "png") + { + + + // файл не должен быть пустым, + // или его размер должен быть <= 800 Кбайт + if($_FILES['filesend']['size'] != 0 + /*AND $_FILES['filesend']['size']<=819200*/ ) + { + + + //проверяем функцией is_uploaded_file + if(is_uploaded_file($_FILES['filesend']['tmp_name'])) + { + + + $dir=$k2->rootdir."/tmp/".$this->tmpimg; + + + @mkdir($dir, 0775); + $url=$dir.$GLOBALS['k2sys']->getGUID().'.'.$filetype; + + // проверяется перемещение файла + // в файловую систему хостинга + if (move_uploaded_file($_FILES['filesend']['tmp_name'], $url)) + { + // подсказываем + echo 'Файл '.basename($_FILES['filesend']['name']). + ' был успешно загружен в '.$url."\n"; + + $rez=$url; + } + } + } + } + } + + + return $rez; + + } + + + // Извлечение последней строки + // Последняя строка - это результат декодирования капчи + function getLastRow($strinp){ + $rez=''; + $arr=explode("\n", $strinp); + $cnt=count($arr); + + if ($cnt>0){ + $rez=$arr[$cnt-1]; + } + + return trim($rez); + } + + + // Поиск капчи в базе данных. + // Если не находит - выводит пустоту. + function searchCapcha($hashid){ + + global $k2; + + $sql = "SELECT k.hashid, k.decode_capcha FROM k2anticapcha k WHERE k.hashid='$hashid';"; + + $res=null; + + foreach ($k2->db->query($sql) as $row) { + $res=$row['decode_capcha']; + } + + return $res; + + } + + + // Вставляет капчу в базу данных + // $hashid - хеш изображения капчи в формате md5 + // $decode_capcha - декодированное значение капчи + function insCapcha($hashid, $decode_capcha){ + + global $k2; + + $hashid=trim($hashid); + $decode_capcha=trim($decode_capcha); + + $sql = "INSERT INTO k2anticapcha (hashid, decode_capcha) + VALUES ('$hashid', '$decode_capcha')"; + + $k2->db->exec($sql); + } + + + + function show(){ + + $acapcha=''; + + $this->imagefile=$this->get_file(); + + if (file_exists($this->imagefile)) { + + // Получаем хеш файла + $hash=hash_file('md5', $this->imagefile); + + echo "hash=$hash\n"; + + // Ищем капчу в базе данных + $decode_capcha=$this->searchCapcha($hash); + + if (trim($decode_capcha)==''){ + +/* $acapcha="connecting rucaptcha.com...OK + sending request 3506 bytes...OK + getting response...OK + captcha sent, got captcha ID 153511525 + waiting for 5 seconds + captcha is not ready yet + waiting for 5 seconds + captcha is not ready yet + waiting for 5 seconds + grayed";*/ + + $acapcha=$this->recognize($this->imagefile,$this->apikey,true, "rucaptcha.com"); + + $decode_capcha=$this->getLastRow($acapcha); + + $this->insCapcha($hash, $decode_capcha); + + } + + // Заглушка на время тестирования + echo "$acapcha\ncaptcha=$decode_capcha\n"; + + }else{ + echo 'FILE NOT FOUND: '.$this->imagefile."\n"; + } + + echo "Anticapcha End..."; + + } + + } + + +// $ant = new k2_anticaptcha(); +// $ant->show(); + + +?> \ No newline at end of file diff --git a/k2shop/k2shop/app/another/k2proxies.php b/k2shop/k2shop/app/another/k2proxies.php new file mode 100644 index 0000000..ae44b71 --- /dev/null +++ b/k2shop/k2shop/app/another/k2proxies.php @@ -0,0 +1,156 @@ + 'http://corp2.kiev.ua/testproxy.php', + 'value' => 'ProxyGood'); + + public $proxy_list=array(); // Formation of the proxy server list (Формирование списка прокси-серверов) + + public $proxy_src=array( // The sources of the lists of proxies (Источники списков прокси-серверов) + array('url' => 'http://www.prime-speed.ru/proxy/free-proxy-list/all-working-proxies.php', // URL where does the list (URL откуда берется список) + 'tag'=>array('from'=>'
','to'=>''), // Tags, between which there is content (Теги, между которыми находится контент) + 'clear_strings' => array( '0.0.0.0:80', 'format:', '<proxy_server_name> : <proxy_port_number>' ) // The words that are removed (Слова, которые убираются) + ) + ); + + + public $wget; + + + + // Obtaining a proxy server list (Получение списка прокси-серверов) + // format: + //
', '', $html, true); + + + // Remove unnecessary tags (Удаляем лишние теги) + foreach ($proxy['clear_strings'] as $value) { + $proxtmp=str_replace(trim($value), '', $proxtmp); + } + + // Remove the extra spaces (Удаляем лишние пробелы) + $proxtmp=trim($proxtmp); + + + $this->proxy_list=array(); + + // Retrieve each row (Извлекаем каждую строку) + $arr=explode("\n", $proxtmp); + foreach ($arr as $row) { + list($ip, $port)=explode(":", $row); + array_push($this->proxy_list, array('ip'=>$ip, 'port'=>$port, 'checked'=>false)); + } + + + return $this->proxy_list; + + } + + + // Receiving proxy list from internet (Получение списка прокси-серверов из интернет) + function get_proxy_inet(){ + + foreach ($this->proxy_src as $proxy) { + echo $proxy['url']."\n"; + $this->getProxy($proxy['url'], $proxy); + } + + echo "CheckProxyList\n"; + + // Testing proxy (Тестирование прокси) + $this->check_proxy_list(); + } + + // Writing the proxy server list in the database (Запись списка прокси-серверов в базу данных) + function save_proxy_db(){ + + } + + // Load the list of proxies from the database (Загрузка списка прокси-серверов из базы) + function load_proxy_db(){ + + } + + // Initialization wget (Инициализация wget) + function wgetini(){ + + global $k2; + + if (!isset($this->wget)){ + $this->wget=$k2->ins_comp('k2wget'); + } + + } + + // Check proxy server list (Проверка списка прокси-серверов) + function check_proxy_list(){ + $this->wgetini(); + + foreach ($this->proxy_list as $value) { + $proxy=$value['ip'].':'.$value['port']; + + echo "$proxy: "; + + $this->check_proxy($proxy); + + } + + } + + // Check the operation of the proxy server (Проверка работы прокси-сервера) + // $proxy - verifiable proxy address (адрес проверяемого прокси) + function check_proxy($proxy){ + $this->wgetini(); + + ob_start(); + + try{ + $rez=$this->wget->wget($this->test_proxy['url'], $proxy); + }catch(Exception $e) { + $this->test_proxy['checked']=false; + } + + ob_end_clean(); + + echo "Test Proxy: $proxy. Result: ".$rez."\n"; + + if ($rez=='ProxyGood'){ + $this->test_proxy['checked']=true; + }else{ + $this->test_proxy['checked']=false; + } + + + } + + // Returns a random proxy server (Возвращет случайный прокси-сервер) + function getRndProxy(){ + } + + + function content(){ + $rez=''; + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/another/k2wget.php b/k2shop/k2shop/app/another/k2wget.php new file mode 100644 index 0000000..69df062 --- /dev/null +++ b/k2shop/k2shop/app/another/k2wget.php @@ -0,0 +1,87 @@ +wget(); + function wget($url, $proxy=''){ + + $ctext_param = array( + 'http' => array( + 'proxy' => $proxy, + 'request_fulluri' => True, + 'timeout' => $this->timeout + ), + ); + + $hd_ctext = stream_context_create($ctext_param); + + + ob_start(); + + try{ + $html = file_get_contents($url, False, $hd_ctext); + }catch(Exception $e) { + } + + ob_end_clean(); + + return $html; + + } + + + // Getting the content through a proxy (Получение контента через прокси) + // Getting content using CURL (Получение контента с использованием CURL) + // Example of use (Пример использования): + // $proxy = '185.25.117.158:3128'; + // $content = $this->get_proxy('http://corp2.net',$proxy); + // echo $content; + function get_proxy($url, $proxy='') { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->timeout); + curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208'); + + + if ($proxy==''){ + curl_setopt($ch, CURLOPT_PROXY, "$proxy"); + } + + $ss=curl_exec($ch); + curl_close($ch); + return $ss; + } + + + // Returns the content without the admin part (Возвращает контент без админ-части) + function getContent($isshow=false){ + + } + + + // Returns content (Возвращает контент) + function content(){ + // We get content through CURL (Получаем контент через CURL) + $content = $this->get_proxy('http://2ip.ru','104.28.8.140:80'); + echo $content; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/cmd/auktion_progress.php b/k2shop/k2shop/app/cmd/auktion_progress.php new file mode 100644 index 0000000..772aa56 --- /dev/null +++ b/k2shop/k2shop/app/cmd/auktion_progress.php @@ -0,0 +1,274 @@ +check_connect(); + $k2->inc('k2mag','secur'); + } + + /** + * визначення кількості годин, що пройшло + * @param type $datecreate + * @return type + */ + function getProgrTime($datecreate) + { + $currentTime = time(); // теперішній часв мс + $datecreate = strtotime($datecreate)+600; //час створення в мс + 10 хвилин + + //$datecreate1 = date("Y-m-d H:i:s", $datecreate); + //$currentTime1 = date("Y-m-d H:i:s", $currentTime); + + $ms_passed = $currentTime - $datecreate; //пройшло мс + + //$ms_passed1 = date("H:i:s", $ms_passed); + + $weekday_create = date("w", $datecreate); + + $weekday_now = date("w", $currentTime); + + $night = 12*3600; + + $kolhours = $ms_passed/3600; + + if ($kolhours < 12) { + $numnight = 0; + } else { + $numnight = ceil(($ms_passed/3600)/24); // кількість ночей + } + + $hour = date("H", $currentTime); + $week = 24 * 3600; + + //если выпадает на ночь + if ($hour >= 20 || $hour <= 8 || $numnight>=1){ + $nights = $night*$numnight; //ночі в мс + + $aukdateMs = $ms_passed - $nights; + + //$aukdateMs2 = $aukdateMs/3600; + + //если пятница + if ($weekday_create > $weekday_now) { + $aukdateMs = $aukdateMs - $week; + } + + //$aukdateMs2 = $aukdateMs/3600; + + if ($hour >= 20 || $hour <= 8 ){ + $aukdateMs = $aukdateMs - $night; + } + + } else { + $aukdateMs = $ms_passed; + } + + + + //пройшло робочих годин + + if (($currentTime - $datecreate)<0) { + $time_passed = 0; + } else { + $time_passed = $aukdateMs; + } + + + + + return $time_passed; + + } + + /** + * вираховування прогрессу аукціону + * @global type $k2 + * @global type $mag + * @return string + */ + function setProgress ($i='') + { + global $k2, $mag; + + $mess = 'Початок Оновлення прогресу аукціонів. Дата: '.date("Y-m-d H:i"); + + $rez = ['rez'=>'', 'err'=>'']; + $r = $k2->sql->sel("SELECT datecreate, aukid, current_progress, trans_status, dateupdate, current_round, num_wait, datewait + FROM k2auktion + WHERE active=:active AND close=:close AND (trans_status=:trans_status OR trans_status=:wait_status) ", + ['active'=>1, 'close'=>0, 'trans_status'=>0, 'wait_status'=>2,] + ); + + + $rez['rez'] = $r['data']; + + foreach ($rez['rez'] as $value) { + + if ($value['trans_status'] == 2) { + + $ms_passed = $mag->getProgrTime("".$value['datewait'].""); + echo $ms_passed."\n"; + $mins_passed = $ms_passed/60; + echo $value['datewait']."\n"; + $num_wait = ceil($mins_passed/$this->wait_min); + + echo 'wait '.$mins_passed.'---раунд очікування '.$num_wait."\n"; + if ($num_wait <= $this->wait_rounds) { + if ($num_wait > $value['num_wait']) { + echo 'ok-wait'; + $rez = $mag->waitStatus($value['aukid'], $value['current_round'] - 1, $num_wait); + } + } else { + echo 'not-wait'; + $rez = $mag->changeStatus($value['aukid'], $value['current_round'], 0); + $k2->log->mess('Аукціон №'.$value['aukid'].' завершено без пропозицій', false); + } + + } else { + + + $hours_passed = $this->getProgrTime($value['datecreate'])/3600; + + if ($hours_passed > 0){ + + $step_time = $mag->step_time/60; + + + //номер раунду аукціону + $num_round = ceil($hours_passed/$step_time); + + //прогрес у поточному раунді + $cur_round_prg = round(($hours_passed/$step_time - $num_round + 1)*100); + + echo 'Аукцион '.$value['aukid'].'; раунд пропозицій №'.$num_round.'; погресс '.$cur_round_prg."\n"; + + $is_stavka = $mag->isRoundStavka($value['aukid'], $num_round); + + if($cur_round_prg < $value['current_progress']){ + + $is_stavka = $mag->isRoundStavka($value['aukid'], $num_round-1); + + if ($value['trans_status'] == 0) { + $err = $k2->sql->upd( + "UPDATE k2auktion + SET + current_progress=:current_progress + WHERE aukid =:aukid", + [ + 'current_progress'=>$cur_round_prg, + 'aukid' => $value['aukid'] + ] + ); + } + + //echo 'Аукціон №'.$value['aukid'].', завершено раунд:'.$num_round.', прогресс: '.$cur_round_prg.'%, кількість ставок: '.$is_stavka.' '; + if (trim($err['err'])<>''){ + $rez = 'Помилка оновлення прогресу аукціону. '.$err['err']; + $k2->log->err($err['err'], false); + return $rez; + } + + if ($is_stavka == 0) { + + //если прошел только 1 раунд то закрываем + if (($num_round - 1) == 1) { + $rez = $mag->changeStatus($value['aukid'], $num_round - 1, 0); + $k2->log->mess('Аукціон №'.$value['aukid'].' завершено без пропозицій', false); + } else { + echo 'wait21 '.$num_round."\n"; + $rez = $mag->waitStatus($value['aukid'], $num_round - 2, 1); + echo 'wait22 '.$num_round."\n"; + //$k2->log->mess('Аукціон №'.$value['aukid'].' завершено без пропозицій', false); + } + + } elseif ($is_stavka == 1) { + $rez = $mag->changeStatus($value['aukid'], $num_round - 1, 1); + $k2->log->mess('Аукціон №'.$value['aukid'].' завершено успішно', false); + } else { + $rez = $mag->calculateNextPrice($value['aukid']); + $k2->log->mess('Аукціон №'.$value['aukid'].' переведено на наступне коло', false); + } + + + } else { + $err = $k2->sql->upd( + "UPDATE k2auktion + SET + current_round=:current_round, + current_progress=:current_progress + WHERE aukid =:aukid", + [ + 'current_round'=>$num_round, + 'current_progress'=>$cur_round_prg, + 'aukid' => $value['aukid'] + ] + ); + + if (trim($err['err'])<>''){ + $rez = 'Помилка оновлення прогресу аукціону. '.$err['err']; + $k2->log->err($err['err'], false); + return $rez; + } + } + } + } + //echo 'Аукціон №'.$value['aukid'].', раунд:'.$num_round.', прогресс: '.$cur_round_prg.'%, кількість ставок: '.$is_stavka.' '; + //echo "\n"; + } + + $mess .= $i.'Кінець Оновлення прогресу аукціонів. Дата: '.date("Y-m-d H:i"); + + $rez .= $mess."\n"; + $k2->log->logcmd($mess, false); + return $rez; + } + + + function content(){ + $rez = ''; + + + $i = true; + while($i){ + sleep(3); + $hour = date("G"); + if ($hour >= $this->start_hour && $hour < $this->end_hour){ + $rez = $this->setProgress($i); + + } else { + $i = true; + } + $currentTime = date("Y-m-d H:i:s"); + echo $currentTime."\n"; + } + + return $rez; + + } + + +} + diff --git a/k2shop/k2shop/app/cmd/auto_bill.php b/k2shop/k2shop/app/cmd/auto_bill.php new file mode 100644 index 0000000..e3db81a --- /dev/null +++ b/k2shop/k2shop/app/cmd/auto_bill.php @@ -0,0 +1,34 @@ +check_connect(); + } + + function content(){ + $rez=''; + + echo 'Автоматическое выставление счетов'; + + return $rez; + } + + +} + diff --git a/k2shop/k2shop/app/cmd/check_shopscript.php b/k2shop/k2shop/app/cmd/check_shopscript.php new file mode 100644 index 0000000..31afdd0 --- /dev/null +++ b/k2shop/k2shop/app/cmd/check_shopscript.php @@ -0,0 +1,216 @@ +check_connect(); + } + + + // Расчитывает количество товаров в подкатегориях + function count_prod_subcat($catid){ + + global $k2; + + + $sql = "SELECT sum(count) as cnt + FROM shop_category s + WHERE s.parent_id=$catid"; + + $rez=0; + foreach ($k2->db->query($sql) as $row) { + $rez=$row['cnt']; + } + + return $rez; + } + + + + // Расчитывает количество продуктов в категори + function count_prod_cat($catid){ + + global $k2; + + $sql = "SELECT count(*) as cnt + FROM shop_category_products s + WHERE s.category_id=$catid"; + + $rez=0; + foreach ($k2->db->query($sql) as $row) { + $rez=$row['cnt']; + } + + return $rez; + } + + // Обновляет количество товаров в категориях + function update_count_cat($catid, $count){ + + global $k2; + + + $sql = "UPDATE shop_category + SET count=$count + WHERE (id=$catid)AND((count is null)or(count<>$count))"; + + //echo $sql."\n"; + + echo "Set Count: $count\n"; + echo "Updated Rows: ".$k2->db->exec($sql)."\n"; + + } + + // Устанавливает поле count в таблице категорий + // $catid - id категории + function set_count_cat($catid){ + $cnt_prod=$this->count_prod_cat($catid); + $cnt_subcat=$this->count_prod_subcat($catid); + $sum=$cnt_prod+$cnt_subcat; + + + $this->update_count_cat($catid, $sum); + } + + + + // Проверяет на корректность количество товаров, указанное в таблице категорий + function check_category(){ + + global $k2; + + $sql = 'SELECT s.id, s.depth, s.parent_id, s.count, s.name + FROM shop_category s + ORDER BY s.depth desc'; + + + foreach ($k2->db->query($sql) as $row) { + + $this->set_count_cat($row['id']); + + echo $row['id'].'|'.$row['name'].'|'.$row['count']."\n"; + + } + + } + + + // Подсчет совпадений URL + function get_cnt_url($url){ + + global $k2; + + $rez=0; + + $sql = "select count(*) as cnt + from shop_product s + where s.url='$url'"; + + + foreach ($k2->db->query($sql) as $row) { + $rez=$row['cnt']; + + } + + return $rez; + + } + + + // Добавляет id к url + function add_url_id($id){ + + global $k2; + + $sql = "update shop_product + set url=url+'-'+id + where id=$id"; + + + echo "Добавление id к url:".$k2->db->exec($sql)."\n"; + + } + + + // Проверяет URL в продуктах + function check_products_url(){ + + global $k2; + + $sql = 'select s.id, s.url + from shop_product s + order by s.id'; + + + foreach ($k2->db->query($sql) as $row) { + + $cnt=$this->get_cnt_url($row['url']); + + if ($cnt>1){ + echo "Найдено дубликатов: $cnt\n"; + $this->add_url_id($row['id']); + } + + } + + } + + + // Исправляет недочеты продукции + function check_products(){ + + global $k2; + + // Обновление даты создания товароshop_productв + $sql = "update shop_product + set create_datetime='NOW' + where create_datetime is null;"; + + echo "Обновление даты создания товаров:".$k2->db->exec($sql)."\n"; + + + // Обновление даты редактирования товаров + $sql = "update shop_product + set edit_datetime='NOW' + where edit_datetime is null;"; + + echo "Обновление даты редактирование товаров:".$k2->db->exec($sql)."\n"; + + + // Проверка URL в продукции + $this->check_products_url(); + + } + + + function content(){ + $rez=''; + $rez.=$this->check_category(); + $rez.=$this->check_products(); + + return $rez; + } + + + +} diff --git a/k2shop/k2shop/app/cmd/crm_billing.php b/k2shop/k2shop/app/cmd/crm_billing.php new file mode 100644 index 0000000..a53ad01 --- /dev/null +++ b/k2shop/k2shop/app/cmd/crm_billing.php @@ -0,0 +1,95 @@ + '86d8af39f7fade830c58fb2c780a1aee', + 'nametov'=>'Абонентська плата за {month}', + 'kol'=>1, + 'edizmid'=>'1', + 'cena'=>45.3 + ] + ]; // Назначение счета + public $doc_info=[ + 'typedocid'=>'2', // ID типа документа + 'docpref'=>'', // Префикс документа + 'docnmask'=>'{docn}' // Маска для формирования номера документа + ]; // Информация о документе + + public $myfirmid='dafed3fc95164f82562a297f3a8434c3'; + + + + // Инициализация. Класс переопределяется всегда + protected function init_obj(){ + global $k2; + $k2->check_connect(); + $k2->inc('k2edocs','secur'); + } + + + + // Расчет счетов + function calcSchets(){ + global $k2, $edoc; + + $ksql=$k2->ins_comp('k2sql'); + + // KTODO: Проход по данным, по которым нужно выставить счет. Скорректировать по наличию. + // Так же, выбирать нашу компанию по потребности. + + + $find=$ksql->sel("SELECT f.firmid, f.name_firm, f.email, f.typefirmid + FROM k2firms f + WHERE f.typefirmid<>'1'"); + + + foreach ($find['data'] as $val){ + $datedoc=date("Y").'.'.date('m').'.01'; + $myfirmid=$this->myfirmid; + + + + + $edoc->createDoc([ + 'typedocid'=>$this->doc_info['typedocid'], + 'docpref'=>$this->doc_info['docpref'], + 'docnmask'=>$this->doc_info['docnmask'], + 'docdate'=>$datedoc, + 'myfirmid'=>$myfirmid, + 'firmid'=>$val['firmid'], + 'dvig'=>$this->naznach_schet + ]); + } + + + } + + + + function content(){ + global $k2; + $this->calcSchets(); + return $rez; + } + + + +} + +?> \ No newline at end of file diff --git a/k2shop/k2shop/app/cmd/do_archdp2.php b/k2shop/k2shop/app/cmd/do_archdp2.php new file mode 100644 index 0000000..bd94207 --- /dev/null +++ b/k2shop/k2shop/app/cmd/do_archdp2.php @@ -0,0 +1,341 @@ +sql->sel('select typezajavid from dp2_typezajav where type IS NOT NULL'); + //var_dump($find_tzaj); + $find_month = $k2->sql->sel('select monthid from k2month'); + foreach ($find_tzaj['data'] as $key => $value) { + foreach ($this->year_arr as $y => $year) { + foreach ($find_month['data'] as $m => $v) { + //echo $value['typezajavid'].' '.$year.' '.$v['monthid'].date('n')."\n"; + if ($year == date('Y') && $v['monthid'] > date('n')) { + + } else { + $this->insArchStr($value['typezajavid'], $year, $v['monthid']); + } + } + } + } + } + + + //створення занису в таблицю архівів + function insArchStr($typezajavid, $year, $monthid) + { + global $k2; + $find_arch = $k2->sql->sel('select archiveid from dp2_archive + where typezajavid=:typezajavid and monthid=:monthid and year=:year', + ['typezajavid'=>$typezajavid, 'monthid'=>$monthid, 'year'=>$year]); + + if ($find_arch['data'] == []) { + $archiveid = $this->getID(); + $k2->sql->ins_arr(['table'=>'dp2_archive', + 'fields'=>[ + 'archiveid' => $archiveid, + 'typezajavid' => $typezajavid, + 'monthid' => $monthid, + 'year' => $year, + ] + ]); + } + + } + ################## Формування запису в таблиці ############################################### + + + + ################## Формування тимчасової папки, з записом в таблицю шляху ############################################### + + //пошук строки для створення тимчасової папки та формування файлів + function findNeedArch() + { + global $k2; + // $typezajavid = '249ef7a6ecde2b662da243eda9c16109'; + // $year = '2022'; + // $monthid = '7'; + $startTime = date("Y-m-d H:i:s"); + echo 'Старт створення тимчасової папки' . $startTime."\n"; + $find_arch = $k2->sql->sel('select * from dp2_archive + where active IS NULL ORDER BY year, monthid LIMIT 1', + []); + + //var_dump($find_arch); + + // $find_arch = $k2->sql->sel('select * from dp2_archive + // where typezajavid=:typezajavid and monthid=:monthid and year=:year and active IS NULL', + // ['typezajavid'=>$typezajavid, 'monthid'=>$monthid, 'year'=>$year]); + + foreach ($find_arch['data'] as $k => $val) { + echo 'Формуємо тимчасову папку за ' . $val['monthid']. '.'. $val['year'] . '-' . $val['typezajavid'] . $startTime. "\n"; + $rez_arr = $this->searchArchives($val['typezajavid'], $val['year'], $val['monthid'], $val['archiveid']); + } + $startTime = date("Y-m-d H:i:s"); + echo 'Завершено створення тимчасової папки' . $startTime."\n"; + } + + //формування массиву з ID заявок + function searchArchives($typezajavid, $year, $month, $archiveid) + { + global $k2; + $mainfolder = 'public/temparch/DocFiles/'; + $number = cal_days_in_month(CAL_GREGORIAN, $month, $year); + $monthid = $month; + if ($monthid < 10) { + $monthid = '0'.$monthid; + } + $datestart = $year.'-'.$monthid.'-01'; + $dateend = $year.'-'.$monthid.'-'.$number; + $find_fitered = $k2->sql->sel($this->sql .' WHERE z.typezajavid="'.$typezajavid.'" AND z.zajav_date >= "'.$datestart.'" AND z.zajav_date <= "'.$dateend.'" ', []); + $rez_arr = []; + foreach ($find_fitered['data'] as $key => $value) { + //if ($value['is_cert'] == 1) { + array_push($rez_arr, $value['zajavkid']); + //} + } + + $mainfolder = $mainfolder.$this->getFolderName($typezajavid, $year, $month); + //var_dump($rez_arr); + //echo $mainfolder; + //echo count($rez_arr); + $this->downloadFilteredArchStep2($rez_arr, $mainfolder); + + $comment = ''; + if ($rez_arr == []) { + $comment = 'за вказаний період заявок не знайдено'; + } + + $this->updateTempPath($archiveid, $mainfolder, $comment); + return $rez_arr; + } + + //оновлення шляху до тимчасової папки + function updateTempPath($archiveid, $mainfolder, $comment) + { + global $k2; + + $rez = $k2->sql->upd( + "UPDATE dp2_archive + SET + tempfolder=:tempfolder, + comment=:comment, + active=:active + WHERE archiveid =:archiveid ", + [ + 'tempfolder' => $mainfolder, + 'comment' => $comment, + 'archiveid' => $archiveid, + 'active' => 0 + ] + ); + } + + //формування тимчасової папки по масиву заявок + function downloadFilteredArchStep2($arr_zaj, $mainfolder) + { + global $k2; + + foreach ($arr_zaj as $key => $value) { + + $find_zaj = $k2->sql->sel('SELECT zajavn, zajav_date FROM dp2_zajavka_obsteg WHERE zajavkid=:zajavkid', ['zajavkid'=>$value]); + $find_files = $k2->sql->sel('SELECT f.filename, f.file_name, t.nametd FROM dp2_files f + LEFT JOIN k2typedoc t + ON t.typedocid = f.typedocid + + WHERE zajavkid=:zajavkid', + ['zajavkid'=>$value] + ); + // $datepath = date('Y/m/d/', strtotime($find_zaj['data'][0]['zajav_date'])); + + // $year_str = strtotime($find_zaj['data'][0]['zajav_date']); + // $year = date('Y', $year_str); + + $file_path = $mainfolder.'/'.$find_zaj['data'][0]['zajavn'].'/files/'; + $k2->sys->forceDir($file_path); + foreach ($find_files['data'] as $k => $val) { + if(file_exists($val['file_name'])){ + $path_parts = pathinfo($val['file_name']); + copy($val['file_name'], $file_path.$path_parts['filename'].'.'.$path_parts['extension']); + } + } + $j++; + } + + return $rez; + } + ################## Формування тимчасової папки, з записом в таблицю шляху ############################################### + + + + ################## Формування архіву, з записом в таблицю посилання ############################################### + + //отримання даних з таблиці по яким потрібно архівування + function getArchive() + { + global $k2; + $startTime = date("Y-m-d H:i:s"); + echo 'Старт архівування' . $startTime."\n"; + $find_arch = $k2->sql->sel('SELECT * FROM dp2_archive WHERE (tempfolder IS NOT NULL OR tempfolder <> "") and active = 0 LIMIT 1', []); + //var_dump($find_arch); + foreach ($find_arch['data'] as $key => $value) { + $folder = $this->getFolderName($value['typezajavid'], $value['year'], $value['monthid']); + + $is_arch = $this->callArch($value['tempfolder'], $folder, $value['archiveid']); + //var_dump($is_arch); + //if ($is_arch) { + + //} + } + $endTime = date("Y-m-d H:i:s"); + echo 'Кінець архівування' . $endTime."\n"; + //var_dump($find_arch); + } + + //оновлення таблиці архівів + function updateArchDate($archiveid, $archpath) + { + global $k2; + $datecreate = date('Y-m-d H:i:s'); + $rez = $k2->sql->upd( + "UPDATE dp2_archive + SET + archpath=:archpath, + datecreate=:datecreate, + active=:active + WHERE archiveid =:archiveid ", + [ + 'archpath' => $archpath, + //'tempfolder' => $mainfolder, + 'datecreate' => $datecreate, + 'archiveid' => $archiveid, + 'active' => 1 + ] + ); + + } + + // + function getFolderName($typezajavid, $year, $monthid) + { + global $k2; + $find_foldname = $k2->sql->sel('SELECT latname FROM dp2_typezajav WHERE typezajavid=:typezajavid', ['typezajavid'=>$typezajavid]); + if ($monthid < 10) { + $monthid = '0'.$monthid; + } + $rez = $find_foldname['data'][0]['latname'].'/'.$year.'/'.$monthid.'/'; + return $rez; + } + + function callArch($source = '', $folder = '', $archiveid = '') + { + global $k2; + //$source = 'public/temparch/21_56_19/DocFiles/'; + //$arch_path = 'public/archives/'.date('Y').'/'.date('m').'/'.date('d').'/'; + $arch_path = 'public/archives/'; + if ($folder) { + $arch_path = 'public/archives/'.$folder; + } + + //var_dump(is_dir($source)); + $name_f = str_replace('/', '_', $folder); + $k2->sys->forceDir($arch_path); + //$dest = $arch_path.date('H_i_s').'_'.$name_f.'_arch.tar.gz'; + $dest = $arch_path.$name_f.'arch.tar.gz'; + echo 'Архівування з тимчасової папки - '.$source.' в '.$dest; + $source = nslashe($k2->rootdir.'/'.$source); + + $destination = nslashe($k2->rootdir.'/'.$dest); + + //echo $source; + + $this->updateArchDate($archiveid, $dest); + + $command = 'cd '.$source.' && tar -czf '.$destination.' .'; + $output = array(); + $return_var = -1; + exec($command, $output, $return_var); + if ($return_var === 0) { + echo "The command executed successfully.\n"; + return $dest; + } else { + echo "The command failed with exit code $return_var. Error output:\n"; + foreach ($output as $line) { + echo "$line\n"; + } + return false; + } + } + + function defMark() + { + $rez = 'Оберіть подію для ахівування'; + //echo 'Оберіть подію для ахівування'; + return $rez; + } + + function routeArchive() + { + global $k2; + + //извлечение параметров из списка аргументов командной строки + $options = getopt("", array("event:","typezajavid:","year:","monthid:")); + + //var_dump($options); + + switch ($options['event']) + { + case "update": + $rez = $this->fillTypeZajavk(); + break; + case "tempfolder": + $rez = $this->findNeedArch(); + break; + case "archive": + $rez = $this->getArchive(); + break; + default: + $rez = $this->defMark(); + } + return $rez; + } + + + function content() + { + global $k2; + //echo $this->getID(); + $currentTime = date("Y-m-d H:i:s"); + echo $currentTime."\n"; + $rez = $this->routeArchive(); + return $rez; + } +} diff --git a/k2shop/k2shop/app/cmd/export_docs.php b/k2shop/k2shop/app/cmd/export_docs.php new file mode 100644 index 0000000..46a39fb --- /dev/null +++ b/k2shop/k2shop/app/cmd/export_docs.php @@ -0,0 +1,149 @@ +check_connect(); + } + + //получение списка документов + function getSchet(){ + + global $k2; + + //извлечение параметров из списка аргументов командной строки + $options = getopt("", array("typedocid:","datefrom:","dateto:","mydate:")); + + $typedocid=$options['typedocid']; + + $k2->addLog('Обработка типа документа: '.$typedocid, 'export_doc.log'); + + + $doc = ''; + + if ($typedocid==2) { + $docname='Rahunki'; + if(!isset($options['datefrom'])){ + //проверка на наличие конкретной даты + if (!isset($options['mydate'])) { + $myDate=date("Y-m-d", strtotime('-1 day'));//если нет то берется вчерашняя дата + }else{ + $myDate=$options['mydate']; + } + $sql = "SELECT docdate, docnum, username, name_firm, adress_firm, docsum, docpref, directorname, typefirmname, edrpou, ipn, svidnum, adress_firm, phone_firm, email, codfil + FROM k2docs + left join k2firms on k2docs.firmid = k2firms.firmid + left join k2typefirm on k2firms.typefirmid=k2typefirm.typefirmid + WHERE docdate ='".$myDate."' and typedocid ='".$typedocid."' GROUP BY docnum"; + }else{ + + $datefrom=$options['datefrom']; + $dateto=$options['dateto']; + $sql = "SELECT docdate, docnum, username, name_firm, adress_firm, docsum, docpref, directorname, typefirmname, edrpou, ipn, svidnum, adress_firm, phone_firm, email, codfil + FROM k2docs + left join k2firms on k2docs.firmid = k2firms.firmid + left join k2typefirm on k2firms.typefirmid=k2typefirm.typefirmid + WHERE docdate>='".$datefrom."' AND docdate<='".$dateto."' and typedocid ='".$typedocid."' GROUP BY docnum"; + } + foreach ($k2->db->query($sql) as $row) { + $date = explode("-", $row["docdate"]); + $doc.="++++++++++"."\r\n".$date[0].'|'.$date[1].'|'.$date[2].'|'.$row["docpref"].'-'.$row["docnum"].'|'.'|'.'|'.'|'.($row["docsum"]*1.2).'|'; + $doc.=$row["name_firm"].'|'.$row["typefirmname"].'|'.$row["edrpou"].'|'.$row["ipn"].'|'.$row["svidnum"].'|'.$row["adress_firm"].'|'.$row["phone_firm"].'|'.$row["email"].'|'.$row["codfil"]; + $doc.="\r\n"."##########"."\r\n"; + $sql1 = "SELECT tovname, k2dvig.kol, summa, k2dvig.cena + FROM k2docs + left join k2dvig on k2docs.docid=k2dvig.docid + left join k2tov on k2dvig.tovid=k2tov.tovid + WHERE docnum =".$row["docnum"]." and typedocid =".$typedocid." "; + foreach ($k2->db->query($sql1) as $row) { + $doc.=$row["tovname"].'|'.($row["cena"]*1.2).'|'.$row["kol"].'|'.($row["summa"]*1.2).'|'."\r\n"; + } + $doc.="----------"."\r\n"; + } + + $doc=iconv('UTF-8', 'windows-1251', $doc); + $file_name = $k2->rootdir.'/upload/'.$docname.'.csv'; // название файла + + $k2->addLog("Пишем в $file_name", 'export_doc.log'); + + file_put_contents ($file_name,$doc); + } else{ +// $docname='Nakladni'; +// if(!isset($options['datefrom'])){ +// //проверка на наличие конкретной даты +// if (!isset($options['mydate'])) { +// $myDate=date("Y-m-d", strtotime('-1 day'));//если нет то берется вчерашняя дата +// }else{ +// $myDate=$options['mydate']; +// } +// +// $sql = "SELECT docdate, docnum, username, name_firm, datecreate, adress_firm, docsum, docpref, directorname, typefirmname, edrpou, ipn, svidnum, adress_firm, phone_firm, email, codfil +// FROM k2docs +// left join k2firms on k2docs.firmid = k2firms.firmid +// left join k2typefirm on k2firms.typefirmid=k2typefirm.typefirmid +// WHERE docdate ='".$myDate."' and typedocid ='".$typedocid."' GROUP BY docnum"; +// }else{ +// +// $datefrom=$options['datefrom']; +// $dateto=$options['dateto']; +// //$i=0; +// $sql = "SELECT docdate, docnum, osndprnum, username, name_firm, datecreate, adress_firm, docsum, docpref, directorname, typefirmname, edrpou, ipn, svidnum, adress_firm, phone_firm, email, codfil +// FROM k2docs +// left join k2firms on k2docs.firmid = k2firms.firmid +// left join k2typefirm on k2firms.typefirmid=k2typefirm.typefirmid +// WHERE docdate>='".$datefrom."' AND docdate<='".$dateto."' and typedocid ='".$typedocid."' GROUP BY docnum"; +// } +// foreach ($k2->db->query($sql) as $row) { +// $date = explode("-", $row["docdate"]); +// $sql22="SELECT docnum from k2docs where docpref = 'dpr' and docsum=".$row['docsum']." and datecreate='".$row['datecreate']."' and username='".$row['username']."' LIMIT 1"; +// $doc.="++++++++++"."\r\n".$date[0].'|'.$date[1].'|'.$date[2].'|'.$row["docpref"].'-'.$row["docnum"].'|'.'dpr-'; +// $doc.=$row["osndprnum"]; +// $doc.='|'.'|'.'|'.'|'.($row["docsum"]*1.2).'|'; +// $doc.=$row["name_firm"].'|'.$row["typefirmname"].'|'.$row["edrpou"].'|'.$row["ipn"].'|'.$row["svidnum"].'|'.$row["adress_firm"].'|'.$row["phone_firm"].'|'.$row["email"].'|'.$row["codfil"]; +// $doc.="\r\n"."##########"."\r\n"; +// $sql1 = "SELECT tovname, k2dvig.kol, summa, k2dvig.cena +// FROM k2docs +// left join k2dvig on k2docs.docid=k2dvig.docid +// left join k2tov on k2dvig.tovid=k2tov.tovid +// WHERE docnum =".$row["docnum"]." and typedocid =".$typedocid." "; +// foreach ($k2->db->query($sql1) as $row) { +// $doc.=$row["tovname"].'|'.($row["cena"]*1.2).'|'.$row["kol"].'|'.($row["summa"]*1.2).'|'."\r\n"; +// } +// $doc.="----------"."\r\n"; +// } +// +// $doc=iconv('UTF-8', 'windows-1251', $doc); +// +// $file_name = $k2->rootdir.'/upload/'.$docname.'.csv'; // название файла +// +// $k2->addLog("Пишем в $file_name", 'export_doc.log'); +// +// file_put_contents ($file_name,$doc); + } + } + + function content(){ + global $k2; + + $k2->addLog('Запуск экспорта документов export_doc', 'export_doc.log'); + $rez=$this->getSchet(); + $k2->addLog('Конец экспорта документов export_doc', 'export_doc.log'); + + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/cmd/export_prom.php b/k2shop/k2shop/app/cmd/export_prom.php new file mode 100644 index 0000000..9f4a934 --- /dev/null +++ b/k2shop/k2shop/app/cmd/export_prom.php @@ -0,0 +1,565 @@ + '1', + 'xmlname' => 'prom.xml', + 'keywordid' => '1', + 'limit_size' => 0, + 'prom_format' => true + ), + + array('id' => '2', + 'xmlname' => 'allbiz.xml', + 'keywordid' => '2', + 'limit_size' => 0, + 'prom_format' => false + ), + + array('id' => '3', + 'xmlname' => 'zakupka.xml', + 'keywordid' => '3', + 'limit_size' => 0, + 'prom_format' => true + ), + + array('id' => '4', + 'xmlname' => 'priceua.xml', + 'keywordid' => '4', + 'limit_size' => 0, + 'prom_format' => false + ), + + array('id' => '5', + 'xmlname' => 'hotline.xml', + 'keywordid' => '5', + 'limit_size' => 0, + 'prom_format' => false + ), + + array('id' => '6', + 'xmlname' => 'yandex.xml', + 'keywordid' => '6', + 'limit_size' => 0, + 'prom_format' => false + ) + + + + + ); + + + public function __construct( ) { + global $k2; + $k2->check_connect(); + } + + + + function head_yandex(){ + + // + + $s= + ' +
На суму: ".$sum."грн
+'); + $endpos = strpos($data, ''); + $desc = substr($data, $startpos, $endpos-$startpos); + + $desc = trim($desc); + + return $desc; + + } + + + // Блокировать спец-символы + function blockSym($strinp){ + + $rez=trim(str_replace("'", "''", $strinp)); + + return $rez; + */ + } + + + function InsertGoods($a){ +/* + global $k2; + + // Генерируем следующий id + $sql='select max(id) as maxid from shop_product;'; + + $nextid=0; + + foreach ($k2->db->query($sql) as $row) { + $nextid=$row['maxid']+1; + } + + + // Вставка товара + $catid = $this->SearchCat($a->categoryId[0]); + + $url=$this->URL($a->url); + + if ($this->descript_from_xml){ + $description=$a->description; + }else{ + $description=$this->GetContentSoftkey($url); + } + + + $sql = "INSERT INTO shop_product (id, k2keyimport, name, meta_description, meta_title, price, k2type_import, category_id, url, status, currency, description, meta_keywords, image_filename, k2import_url) + VALUES ('$nextid', '".trim($a->attributes()['id'])."', '".$this->blockSym($a->name)."', '".$this->blockSym($a->name)."', '".$this->blockSym($a->name)."', '".trim($a->price)."', '".$this->import_label."','".trim($catid)."','".$k2->sys->chpu($this->blockSym($a->name), $nextid)."','1', 'UAH', '".$this->blockSym($description)."','".$this->blockSym($a->keywords)."', '1', '".$this->blockSym($a->url)."')"; + + echo "Insert Tov SQL $sql \n"; + echo "Insert Tov: $catid, ".$a->name." \n ".$k2->db->exec($sql)."\n"; + + + // Вставка группы товара + foreach ($a->categoryId as $c) { + $catid = $this->SearchCat($c); + $sql="INSERT INTO shop_category_products(product_id,category_id,sort,k2keyimport,k2type_import) + VALUES('$nextid','".$catid."','$nextid', '".trim($a->attributes()['id'])."', '".$this->import_label."')"; + + + try { + echo "Insert CatTov: $sql \n"; + echo "Insert CatTov: ".$k2->db->exec($sql)."\n"; + }catch (Exception $e) { + echo "Error SQL Insert GroupTov: $sql \n"; + echo "Error Insert GroupTov: ".$a->name." ".$nextid."\n".$e->getMessage()."\n"; + } + + + } + + + //Вставка наличия товаров + $sql="INSERT INTO shop_product_skus(product_id,sort,price,primary_price,purchase_price,compare_price,available,file_size,virtual,k2keyimport,k2type_import) + VALUES('$nextid','1','".trim($a->price)."','".trim($a->price)."','".trim($a->price)."','".$a->price."','1','0','0', '".trim($a->attributes()['id'])."', '".$this->import_label."')"; + + + try { + echo "Insert TovSkus: $sql \n"; + echo "Insert TovSkus: ".$k2->db->exec($sql)."\n"; + }catch (Exception $e) { + echo "Error SQL Insert Tov: $sql \n"; + echo "Error Insert Tov: ".$nextid."\n".$e->getMessage()."\n"; + } + + */ + } + + + function UpdateGoods($name, $price, $desc, $idupdate, $a){ + + global $k2; + /* + $sql = "UPDATE shop_product SET price='$price', compare_price='$price', min_price='$price', max_price='$price', name='".$this->blockSym($name)."', urlsrc='".trim($a->url)."', urlpic='".trim($a->picture)."' + WHERE (id='$idupdate');"; + + + echo "UpdatSQL: $sql\n"; + + echo "Update: ".$k2->db->exec($sql)."\n"; + + + // Вставка наличия товаров + $sql="UPDATE shop_product_skus SET price='$price', primary_price='$price', purchase_price='$price', compare_price='$price', available='1' + WHERE product_id='$idupdate';"; + + echo 'UpdateSQL: '.$sql."\n"; + + try { + echo "UPDATE Avaiable: ".$k2->db->exec($sql)."\n"; + }catch (Exception $e) { + echo "Error Update Avaiable : $name\n".$e->getMessage()."\n"; + } + +*/ + } + + + + // Граббинг изображений + function grabImage(){ + $rez=''; + return $rez; + } + + + + // Извлечение контента + function getURLContent($url){ +/* $content = file_get_contents($url); + + $url2=$this->GetUrl($content, $url); + $rez=$url=$this->addurl($url2); + return $rez; + + */ + } + + + // Получаем контент + function GetContentSoftkeyContent($url) { +/* + try { + $data = file_get_contents($url); + } + catch(PDOException $e) { + echo $e->getMessage()."\n"; + echo "url=$url\n"; + } + + + return $this->GetDesc($data); + + */ + } + + + + // Обновление описания + function setContent($id, $content){ + global $k2; +/* + if (trim($id)=='') exit; + + $sql = "update shop_product set description='".$this->blockSym($content)."', obrabot_grabber='1' where (id='$id')"; + + echo $content."\n id=$id \n"; + + try{ + echo "Update Content: ".$k2->db->exec($sql)."\n"; + }catch(PDOException $e) { + echo "Error Update Content: $sql\n"; + echo $e->getMessage(); + } + */ + + } + + + + // Граббинг контента + function gabContent(){ + global $k2; +/* + $rez=''; + $rez.="Граббинг контента..."; + + + $sql = "select id, urlsrc from shop_product where (trim(urlsrc)<>'')and(obrabot_grabber=0)"; + + + + + foreach ($k2->db->query($sql) as $value) { + + $url=$this->getURLContent($value['urlsrc']); + $description=$this->GetContentSoftkeyContent($url); + + $this->setContent($value['id'], $description); + + sleep(rand(1,5)); + } + + + return $rez; + + */ + } + + + + /////////////////////////////////////////////////////////////////////////// + // Серисные функции + /////////////////////////////////////////////////////////////////////////// + + + // Загрузка изображений из статического файла + function grabImageUpload(){ + + global $k2; +/* + // Обработка xml + try{ + $this->xml = simplexml_load_file($this->url_xml); + }catch(PDOException $e) { + echo "Error getData().simplexml_load_file().".$this->url_xml."/n"; + echo $e->getMessage(); + } + + + // Извлекаю xml + foreach($this->xml->shop->offers->offer as $a) { + + $pic=$a->picture; + + if (trim($pic)<>''){ + + $pic=str_replace('softkey.ua', 'softkey.ru', $pic); + + $fileto=$k2->rootdir."/img/sk_".$a->attributes()['id'].'.'.$this->new_ext; + + if (!file_exists($fileto)){ + $cmd="convert $pic $fileto"; + echo $cmd."\n"; + shell_exec($cmd); + + if ($this->pause){ + sleep(rand(1,3)); + } + } + + + } + + } + + */ + + } + + + + // Возвращает название файла Softkey, сохраненного у нас локально на диске + function getMySoftkeyImage($product_id, $isabsolute=true){ + global $k2; +/* $rez=''; + + if ($isabsolute){ + $rez=$k2->rootdir; + } + + $rez.="/img/sk_".$product_id.'.'.$this->new_ext; + + return $rez; + + */ + } + + + + + // Вставка изображения в базу данных + function insImageDB($product_id, $k2keyimport){ + global $k2; +/* $rez=''; + + $filename=$this->getMySoftkeyImage($k2keyimport); + + echo 'filename='.$filename."\n"; + + if (!file_exists($filename)){ + return ''; + } + + $size= filesize($filename); + $size_foto_px=getimagesize($filename); + + $width=$size_foto_px[0]; + $height=$size_foto_px[1]; + + $origfilename=$k2keyimport.'.'.$this->new_ext; + + $sql="INSERT INTO shop_product_images(product_id,upload_datetime,width,height,size,original_filename,ext) + VALUES('$product_id',now(),'$width','$height','$size','$origfilename','".$this->new_ext."')"; + + + try { + + echo $sql."\n"; + echo "Insert Image: ".$k2->db->exec($sql)."\n"; + $rez=$k2->db->lastInsertId(); + }catch (Exception $e) { + echo "Error Insert Image: $product_id \n".$e->getMessage()."\n"; + } + + + + return $rez;*/ + } + + + // Выполняет sql на позициях + function setProdductImage($product_id, $imageid){ + global $k2; + +/* $sql="UPDATE shop_product SET image_id=$imageid, ext='".$this->new_ext."', image_filename='' WHERE id=$product_id "; + + try { + echo "Update Product: ".$k2->db->exec($sql)."\n"; + }catch (Exception $e) { + echo "Error Update Product: $product_id \n".$e->getMessage()."\n"; + } + */ + + } + + + + // Добавлет изображение, если его нет + function addImageInfo($product_id, $imageid, $k2keyimport){ + global $k2; + +/* echo "addImageInfo($product_id, $imageid, $k2keyimport)\n"; + + if (trim($product_id)==''){ + echo "ID продукта пуст. Выходим из процедуры.\n"; + return ''; + } + + $id=trim($product_id); + + if (strlen($id)<4){ + $id2=str_pad(substr($id,1,2),2,'0',STR_PAD_LEFT); + }else{ + $id2=str_pad(substr(str_pad($id,"0",STR_PAD_LEFT),2,2),2,'0',STR_PAD_LEFT); + } + + $id1=str_pad(substr(str_pad($id,4,"0",STR_PAD_LEFT),0,2),2,'0',STR_PAD_LEFT); + + + //echo "Не найдено изображений в $product_id. Будем добавлять... \n"; + // /wa-data/protected/shop/products/70/29/22970/images/2721.png + + if ($imageid==''){ + $imageid=$this->insImageDB($product_id, $k2keyimport); + + if ($imageid=='') return ''; + } + + + $dir=$k2->rootdir."/wa-data/protected/shop/products/$id2/$id1/$id/images/"; + echo "makedir=$dir\n"; + $k2->sys->forceDir($dir); + + $filename_src=$this->getMySoftkeyImage($k2keyimport); + + if (!file_exists($filename_src)){ + return ''; + } + + + $filename_ds=$dir.$imageid.'.'.$this->new_ext; + + + echo 'filename='.$filename_ds."\n"; + + if (!file_exists($filename_src)){ + echo "Исходного файла нет, поэтому выходим: $filename_src\n"; + return ""; + } + + + + if (!file_exists($filename_ds)){ + echo "Копируем файл из $filename_src в $filename_ds \n"; + + if (!copy($filename_src, $filename_ds)) { + echo "Не удалось скопировать $filename_src...\n"; + }else{ + + } + } + + // Создаем уменьшенные копии + $dir2=$k2->rootdir."/wa-data/public/shop/products/$id2/$id1/$id/images/$imageid/"; + $k2->sys->forceDir($dir2); + + + //public $sizes=array('0x220','0x320','200','200x0','48x48','750','750x0','96x96','970'); + + + foreach ($this->sizes as $s) { + $size=explode('x', $s); + + if (count($size)==0){ + if (trim($s)==''){ + continue; + }else{ + $size[0]=$s; + } + } + + if (count($size)==1){ + $size[1]=$size[0]; + } + + $filename=$dir2."$imageid.$s".".".$this->new_ext; + + echo "Файл изображения: $filename\n"; + + if (!file_exists($filename)){ + echo "Создаем...\n"; + }else{ + echo "Есть в наличии. Перегенерируем.\n"; + } + + $this->resize->resizeto($filename_src, $filename, $size[0], $size[1]); + + } + + // Пометка в базе данных номенклатуры + $this->setProdductImage($product_id, $imageid); + + + //$k2->sys->forceDir($dir) + + */ + + + } + + + + + + + // Получает из базы информацию о изображении + function getImageInfo($product_id, $k2keyimport){ + global $k2; +/* $sql = "SELECT si.id as id, ext FROM shop_product_images si WHERE (not (si.product_id is null))and(si.product_id=$product_id)"; + + $rez=''; + $id=''; + foreach ($k2->db->query($sql) as $row) { + $id=trim($row['id']); + } + + echo "getImageInfo($product_id,$k2keyimport)\n"; + + //if (trim($id)==''){ + $this->addImageInfo($product_id, $id, $k2keyimport); + //} + + + return $rez; + */ + } + + + + + + + // Устанавивает картинки ShopScript + function setImageShopScript(){ + global $k2; +/* + $sql = 'SELECT p.id, p.name, p.url, p.price, p.description, p.category_id, p.ext, p.meta_keywords, p.k2type_import, p.k2keyimport + FROM shop_product p'; + + + foreach ($k2->db->query($sql) as $row) { + + + if (($row['k2type_import']==$this->import_label)and(trim($row['k2keyimport'])<>'')){ + + // Исходное изображение + $pic=$k2->rootdir."/img/sk_".$row['k2keyimport'].'.'.$this->new_ext; + + if (file_exists($pic)){ + + // \wa-data\protected\shop\products\06\03\306\images + // берем строку из shop_product_images (там кстати есть и оригинальные название фото) + // id: 1949 + // product_id: 1389 + // Идем в /wa-data/public/shop/products + // Ищем папку 89 + // В ней папку 13 + // Дальше видим папку 1389 + // в ней папка images + // и там фотки вида: 1949.размер.jpg + + // http://test.corp2.kiev.ua/wa-data/public/shop/products/70/29/22970/images/2721/2721.200x0.png + // /wa-data/protected/shop/products/70/29/22970/images/2721.png + // id product = 22970 + // id image = 2721 + + echo 'id='.$row['id']." | ".$row['name']." | ".$pic."\n"; + + $this->getImageInfo($row['id'], $row['k2keyimport']); + + //exit; + + } + + } + } + + echo "Процесс закончился\n"; + + */ + } + + + + function content(){ + + $grab_options = getopt("", array("g:")); + $rez=''; + + if (!isset($grab_options['g'])){ + $rez.=$this->getData(); + } + + + return $rez; + } + + + +} + +?> \ No newline at end of file diff --git a/k2shop/k2shop/app/cmd/import_nutrend.php b/k2shop/k2shop/app/cmd/import_nutrend.php new file mode 100644 index 0000000..7331252 --- /dev/null +++ b/k2shop/k2shop/app/cmd/import_nutrend.php @@ -0,0 +1,239 @@ +check_connect(); + } + + + // Получение дерева групп товаров + function getCategory() { + + global $k2; + + $sql = 'SELECT * FROM shop_category c'; + // Выводим заголовок структуры + print "c.id|"; + print "c.name|"; + print "c.parent_id|\n"; + + // Выводим строки + foreach ($k2->db->query($sql) as $row) { + print $row['id'] . "|"; + print $row['name'] . "|"; + print $row['parent_id'] . "|\n"; + } + + } + + + function getProduct() { + + global $k2; + + $sql = 'SELECT p.id, p.name, p.url FROM shop_product p'; + // Выводим заголовок структуры + print "p.id|"; + print "p.name|"; + print "p.url|\n"; + + // Выводим строки + foreach ($k2->db->query($sql) as $row) { + print $row['id'] . "|"; + print $row['name'] . "|"; + print $row['url'] . "|\n"; + } + } + + + // Получает файл с прай-листом Nutrend + function getContent($isshow=false) { + + global $k2; + $options = getopt("", array("discount:")); + //echo $k2->rootdir.'/k2shop/upload/nutrend_ext_2015-10-26.csv'."\n"; + + //echo 'path='.$k2->rootdir.'/k2shop/k2shop/upload/nutrend.csv'; + + $data = file_get_contents($k2->rootdir.'/k2shop/k2shop/upload/nutrend.csv'); + $data = iconv('windows-1251', 'UTF-8', $data); + + + $arrData=explode("|", $data); + + $this->kurs_eur=$arrData[1]; + if(isset($options['discount'])){ + $this->discount=$options['discount']; + } + + //echo ($arrDate[1]); + $arr=explode("\n", $arrData[2]); + foreach ($arr as $key) { + + if (trim($key)<>''){ + list($id, $name, $price, $presence)=explode(";", $key); + + $id=trim($id); + $name=trim($name); + + if (trim($name)=='') continue; + + $price=str_replace(',', '.', $price); // Заменяю дробную часть + + //echo '!!!!!!!!!price='.$price."\n"; + + $price=(trim($price)-(trim($price)*$this->discount/100))*$this->kurs_eur; + + $price= round($price, 2); + + $presence=trim($presence); + + + + $idupdate=$this->serch_product($id); + + //echo "idupdate=$idupdate\n"; + + if ($idupdate==null){ + $this->insert($id, $name, $price, $presence); + }else{ + $this->update($id, $name, $price, $presence, $idupdate); + } + + + } + } + } + + + + function serch_product($id){ + + global $k2; + + $sql = "SELECT s.id FROM shop_product s WHERE s.k2type_import='nutrend' and s.k2keyimport='$id';"; + + $res=null; + + foreach ($k2->db->query($sql) as $row) { + $res=$row['id']; + } + + return $res; + + } + + + + function insert ($id, $name, $price, $presence) { + + global $k2; + + // Генерируем следующий id + $sql='select max(id) as maxid from shop_product;'; + + $nextid=0; + + foreach ($k2->db->query($sql) as $row) { + $nextid=$row['maxid']+1; + } + + + echo "$nextid=".$nextid."\n"; + + + // Вставка товара + $sql = "INSERT INTO shop_product (id, k2keyimport, name, price, k2type_import, category_id, url,status, currency) + VALUES ($nextid, '$id', '$name', '$price', 'nutrend','".$this->catid."','".$k2->sys->chpu($name,$nextid)."',1, 'UAH')"; + + + + echo "Insert $id: ".$k2->db->exec($sql)."\n"; + + + // Вставка группы товара + $sql="INSERT INTO shop_category_products(product_id,category_id,sort) + VALUES('$nextid','".$this->catid."','$nextid')"; + + try { + echo "Insert Group $id: ".$k2->db->exec($sql)."\n"; + }catch (Exception $e) { + echo "Error Insert Group $id: ".$nextid."\n".$e->getMessage()."\n"; + } + + + // Вставка наличия товаров + $sql="INSERT INTO shop_product_skus(product_id,sort,price,primary_price,purchase_price,compare_price,available,file_size,virtual) + VALUES('$nextid','1','$price','$price','$price','$price','".$presence."','0','0')"; + + try { + echo "Insert Avaiable $id: ".$k2->db->exec($sql)."\n"; + }catch (Exception $e) { + echo "Error Insert Avaiable $id: ".$nextid."\n".$e->getMessage()."\n"; + } + + + + } + + function update ($id, $name, $price, $presence, $idupdate) { + + global $k2; + + //$sql = "UPDATE shop_product SET price='$price' + // WHERE (id='$idupdate');"; + + $sql = "UPDATE shop_product SET price='$price', compare_price='$price', min_price='$price', max_price='$price', name='$name' + WHERE (id='$idupdate');"; + + + + echo "Update $id: ".$k2->db->exec($sql)."\n"; + + + // Вставка наличия товаров + $sql="UPDATE shop_product_skus SET available='".$presence."', price='$price', primary_price='$price', purchase_price='$price', compare_price='$price' + WHERE (product_id='$idupdate');"; + + echo $sql."\n"; + + try { + echo "UPDATE Avaiable $id: ".$k2->db->exec($sql)."\n"; + }catch (Exception $e) { + echo "Error Update Avaiable id: $id\n".$e->getMessage()."\n"; + } + + + } + + + function content(){ + $rez=$this->getContent(); + return $rez; + } + + +} + diff --git a/k2shop/k2shop/app/cmd/import_privat.php b/k2shop/k2shop/app/cmd/import_privat.php new file mode 100644 index 0000000..8f8ea37 --- /dev/null +++ b/k2shop/k2shop/app/cmd/import_privat.php @@ -0,0 +1,160 @@ +check_connect(); + } + + + // Загрузка банковских выписок из CSV + // Формат CSV формирутеся из веб-интерфейса банка. Открывается Excel-файл и сохраняется в CSV. + // Далее, закидывается по пути, указанному в upload_filename + // Предполагается вот такой формат полученного файла: + // ;;;;;;;;;;; + // ;;;;;;;;;;; + // №;Дата проводки;Время проводки;Сумма;;Валюта;Назначение платежа;ЕГРПОУ;Наименование контрагента;Счет контрагента;МФО контрагента;Референс + // 320;18.05.2018;14:37:00;46672,00;;UAH;Залишкова оплата 50% за 3D-вiзуалiзацiю та моделювання екстер'єру виробн. комплексу зг. рах. № 1536 вiд 18.05.18 Без ПДВ.;40683062;"ТОВ ""Мегаполис""";26004010870;300647;HSKLI0518L24VG. + function loadFromCSV(){ + global $k2; + + $FileName=nslashe($k2->rootdir.$this->upload_filename); + echo "Загрузка файла: ".$FileName."\n"; + + $ksql=$k2->ins_comp('k2sql'); + + + $data = file_get_contents($FileName); + + $data = iconv('windows-1251', 'UTF-8', $data); + + $arr=explode("\n", $data); + + + $i=0; + foreach ($arr as $val) { + + if ($i>=$this->skip_row){ + + $row=str_getcsv($val, ';'); + + $datetmp=explode(".", $row[1]); + $date_rez=''; + if (!empty($datetmp)){ + $date_rez=$datetmp[2].'.'.$datetmp[1].'.'.$datetmp[0]; + } + + if (trim($row[0])<>'№' && trim($row[0])<>''){ + + + // Строчка закачивалась, если порядковый номер совпадает и референс платежа + $find=$ksql->sel('SELECT privatid FROM crmPrivatBank WHERE (num=:num)AND(referens=:referens);', ['num'=>trim($row[0]), 'referens'=>trim($row[11])]); + + //echo 'find='.trim($find['err'])."\n"; + //echo 'find='.trim($find['data']['privatid'])."\n"; + + if ($find['data']==[]){ + $ksql->ins_arr(['table'=>'crmPrivatBank', + 'fields'=>[ + 'privatid'=>'{id}', + 'num'=>trim($row[0]), + 'date_provodk'=>/*$row[1]*/$date_rez, + 'time_provodk'=>$row[2], + 'sum_prih'=>$row[3], + 'sum_rash'=>$row[4], + 'valuta'=>trim($row[5]), + 'name_plat'=>$row[6], + 'edrpou'=>trim($row[7]), + 'name_firm'=>trim($row[8]), + 'schet_firm'=>trim($row[9]), + 'mfo_firm'=>trim($row[10]), + 'referens'=>trim($row[11]) + ] + ]); + } + + } + + } + + $i++; + } + + + echo "Конец загрузки.\n"; + + + } + + + + // Получение данных из загруженного файла + function upload_decode(){ + global $k2; + + $this->loadFromCSV(); + + } + + + + function content(){ + $rez=''; + + $this->upload_decode(); + + //echo $this->getPlats(); + + return $rez; + } + + +} + diff --git a/k2shop/k2shop/app/cmd/import_shop.php b/k2shop/k2shop/app/cmd/import_shop.php new file mode 100644 index 0000000..03e3754 --- /dev/null +++ b/k2shop/k2shop/app/cmd/import_shop.php @@ -0,0 +1,922 @@ +resize = $k2->ins_comp('k2image_resize'); + $k2->check_connect(); + } + + /** + * Получение данных + * @global type $k2 + */ + function getData() { + + global $k2; + + + // Загрузка файла из интернет + try{ + $xml = file_get_contents($k2->rootdir.$this->url_xml); + }catch(PDOException $e) { + echo "Error getData().file_get_contents().".$this->url_xml."\n"; + echo $e->getMessage(); + } + + + + // Конвертируем в UTF-8 + //$xml = iconv('windows-1251', 'UTF-8', $xml); + + + // Сохраняем в файл на диске + try{ + $putfile=$k2->rootdir.'/k2shop/k2shop/upload/newshop.xml'; + file_put_contents($putfile,$xml); + }catch(PDOException $e) { + echo "Error getData().file_put_contents().".$putfile."\n"; + echo $e->getMessage(); + } + + + // Обработка xml + try{ + $this->xml = simplexml_load_file($putfile); + }catch(PDOException $e) { + echo "Error getData().simplexml_load_file().".$k2->rootdir.$this->url_xml."\n"; + echo $e->getMessage(); + } + + + $this->addCategories(); + $this->addGoods(); + + } + + + + /** + * Обрабатываются категории + */ + function addCategories(){ + + $this->xml; + foreach($this->xml->shop->categories->category as $b) { + + $idupdate=$this->SearchCategories($b->attributes()['id'], $b['0']); + + echo "idcat=$idupdate\n"; + + if ($idupdate==null){ + $this->InsertCategories($b->attributes()['id'], $b, $b->attributes()['parentId']); + } + } + + } + + /** + * Выбор категории + * @global type $k2 + * @param type $id + * @param type $name + * @return type + */ + function SearchCategories($id, $name){ + + global $k2; + + $sql = "SELECT s.category_id FROM k2shop_category s WHERE ((s.k2type_import='newshop') and (s.k2keyimport='$id'));"; + + $res=null; + + foreach ($k2->db->query($sql) as $row) { + $res=$row['category_id']; + } + + return $res; + + } + + /** + * Вставка категорий + * @global type $k2 + * @param type $id + * @param type $name + * @param type $parentid + */ + function InsertCategories($id, $name, $parentid){ + global $k2; + + // Генерируем следующий id + $sql='select max(category_id) as maxid from k2shop_category;'; + + $nextid=0; + + foreach ($k2->db->query($sql) as $row) { + $nextid=$row['maxid']+1; + } + + $myparentid='0'; + + + if ((trim($parentid)<>'')and(trim($parentid)<>'0')){ + + $sql2="SELECT s.category_id as id + FROM k2shop_category s + WHERE (s.k2keyimport='$parentid') + and(s.k2type_import='newshop')"; + + try { + + echo "search_sql=$sql2\n"; + + foreach ($k2->db->query($sql2) as $row2){ + $myparentid=$row2['category_id']; + + echo "\nmyparentid=$myparentid\n"; + + } + + }catch (Exception $e) { + echo "Error Select: ".$e->getMessage()."\n"; + } + + $depth=1+$this->depthroot; + + }else{ + $myparentid=$this->rootid; + $depth=0+$this->depthroot; + } + + + // Вставка категорий + $url=$k2->sys->chpu($name,$nextid); + + $sql = "INSERT INTO k2shop_category (category_id, k2keyimport, name, parent_id, k2type_import, url, full_url) + VALUES ($nextid, '$id', '$name', '$myparentid', 'newshop','$url','$url')"; + + + try{ + echo "Будет SQL: $sql \n"; + echo "Insert Category: myid=$nextid, newshopid=$id, name=$name\n sql=$sql \n".$k2->db->exec($sql)."\n"; + }catch(PDOException $e) { + echo "Error Insert Category: $sql\n"; + echo $e->getMessage(); + } + } + + + + /** + * Изменение категории + * @global type $k2 + * @param type $id + * @param type $name + * @param type $parentid + */ + function UpdateCategories($id, $name, $parentid){ + global $k2; + + + } + + + /** + * Обрабатываются товары + */ + function addGoods(){ + $this->xml; + + foreach($this->xml->shop->offers->offers->offer as $a) { + //echo $a->attributes()['id']."\n"; + //echo $a->attributes()['available']."\n"; + //echo $a->url."\n"; + //echo $a->price."\n"; + //echo $a->categoryId[0]."\n"; + //echo $a->categoryId[1]."\n"; + //echo $a->picture."\n"; + //echo $a->name."\n"; + //echo $a->description."\n"; + //echo $a->sales_notes."\n"; + + $idupdate=$this->SearchGoods($a->attributes()['id']); + + echo "idtov=$idupdate \n"; + + + if ($idupdate==null){ + $this->InsertGoods($a); + }else{ + $this->UpdateGoods($a->name, $a->price, $a->description, $idupdate, $a); + } + + //return ""; + + } + + } + + + /** + * поиск id в товарах по id партнера + * @global type $k2 + * @param type $id + * @return type + */ + function SearchGoods($id){ + + global $k2; + + $sql = "SELECT s.tovid FROM k2tov s WHERE s.k2type_import= 'newshop' and s.k2keyimport='$id';"; + + $res=null; + + foreach ($k2->db->query($sql) as $row) { + $res=$row['tovid']; + } + + return $res; + + + } + + + + /** + * поиск id в категориях по id партнера + * @global type $k2 + * @param type $id + * @return type + */ + function SearchCat($id) { + + global $k2; + + $sql ="SELECT s.category_id FROM k2shop_category s WHERE (s.k2keyimport='$id') and (s.k2type_import='newshop')"; + + $res=null; + + foreach ($k2->db->query($sql) as $row) { + $res=$row['category_id']; + } + + return $res; + + } + + /** + * Добавление url + * @param type $url + * @return type + */ + function addurl($url){ + return 'http://shop.corp2.net'.$url.'&progdesc=long&print=Y'; + } + + /** + * + * @param type $url + * @return string + */ + function URL($url){ + + return ''; + + /*$content = file_get_contents($url); + + $url2=$this->GetUrl($content, $url); + $rez=$url=$this->addurl($url2); + + return $rez;*/ + + } + + /** + * Подучение URL + * @param type $content + * @param type $url + * @param type $startpos + * @return type + */ + function GetUrl($content, $url, $startpos=0){ + + $pos = strpos($content, '#program', $startpos); + + if ($pos<>FALSE){ + + $i = $pos-1; + while ($content{$i}<>'"'){ + $i--; + + } + + $endpos = $pos-1; + + $url2 = substr($content, $i+1, $endpos-$i); + + $pos2=strpos($url2,'/catalog/program'); + + if (($pos2==FALSE)and(trim($url2)<>'')){ + $urltmp=$this->GetUrl($content, $url, ($pos+strlen('#program')+1)); + if (trim($urltmp)<>'') $url2=$urltmp; + } + + + return $url2; + + + }else{ + if ($startpos==0) { + echo 'Not Found: '.$id."\n"; + } + } + + } + function GetContentShop($url) { + + + return ''; + + /*try { + $data = file_get_contents($url); + } + catch(PDOException $e) { + echo $e->getMessage()."\n"; + echo "url=$url\n"; + } + + + return $this->GetDesc($data);*/ + } + + + + /** + * Поучение описания + * @param type $data + * @return type + */ + function GetDesc($data) { + + $startpos = strpos($data, '
'); + $endpos = strpos($data, ''); + $desc = substr($data, $startpos, $endpos-$startpos); + + $desc = trim($desc); + + return $desc; + + } + + + + /** + * Блокировать спец-символы + * @param type $strinp + * @return type + */ + function blockSym($strinp){ + + $rez=trim(str_replace("'", "''", $strinp)); + + return $rez; + + } + + /** + * Вставка товароов + * @global type $k2 + * @param type $a + */ + function InsertGoods($a){ + + global $k2; + + // Генерируем следующий id + $sql='select max(tovid) as maxid from k2tov;'; + + $nextid=0; + + foreach ($k2->db->query($sql) as $row) { + $nextid=$row['maxid']+1; + } + + + // Вставка товара + $catid = $this->SearchCat($a->categoryId[0]); + + $url=$this->URL($a->url); + + $description=$this->GetContentShop($url); + + + $sql = "INSERT INTO k2tov (tovid, k2keyimport, tovname, price, k2type_import, category_id, url, status, valid, description, image_filename, k2import_url) + VALUES ('$nextid', '".trim($a->attributes()['F'])."', '".$this->blockSym($a->name)."', '".trim($a->price)."', 'newshop','".trim($catid)."','".$k2->sys->chpu($this->blockSym($a->name), $nextid)."','1', '1', '".$this->blockSym($description)."', '1', '".$this->blockSym($a->url)."')"; + + echo "Insert Tov SQL $sql \n"; + echo "Insert Tov: $catid, ".$a->name." \n ".$k2->db->exec($sql)."\n"; + + + // Вставка группы товара + foreach ($a->categoryId as $c) { + $catid = $this->SearchCat($c); + $sql="INSERT INTO k2shop_category_products(cat_product_id,category_id,sort,k2keyimport,k2type_import) + VALUES('$nextid','".$catid."','$nextid', '".trim($a->attributes()['id'])."', 'newshop')"; + + + try { + echo "Insert CatTov: $sql \n"; + echo "Insert CatTov: ".$k2->db->exec($sql)."\n"; + }catch (Exception $e) { + echo "Error SQL Insert GroupTov: $sql \n"; + echo "Error Insert GroupTov: ".$a->name." ".$nextid."\n".$e->getMessage()."\n"; + } + + + } +// +// //Вставка наличия товаров +// $sql="INSERT INTO k2tov_skus(product_id,sort,price,primary_price,purchase_price,compare_price,available,file_size,virtual,k2keyimport,k2type_import) +// VALUES('$nextid','1','".trim($a->price)."','".trim($a->price)."','".trim($a->price)."','".$a->price."','1','0','0', '".trim($a->attributes()['id'])."', 'newshop')"; +// +// +// try { +// echo "Insert TovSkus: $sql \n"; +// echo "Insert TovSkus: ".$k2->db->exec($sql)."\n"; +// }catch (Exception $e) { +// echo "Error SQL Insert Tov: $sql \n"; +// echo "Error Insert Tov: ".$nextid."\n".$e->getMessage()."\n"; +// } + } + + /** + * Обновление товаров + * @global type $k2 + * @param type $name + * @param type $price + * @param type $desc + * @param type $idupdate + * @param type $a + */ + function UpdateGoods($name, $price, $desc, $idupdate, $a){ + + global $k2; + + $sql = "UPDATE k2tov SET price='$price', compare_price='$price', min_price='$price', max_price='$price', tovname='".$this->blockSym($name)."', urlsrc='".trim($a->url)."', urlpic='".trim($a->picture)."' + WHERE (id='$idupdate');"; + + + echo "UpdatSQL: $sql\n"; + + echo "Update: ".$k2->db->exec($sql)."\n"; + + +// // Вставка наличия товаров +// $sql="UPDATE k2tov_skus SET price='$price', primary_price='$price', purchase_price='$price', compare_price='$price', available='1' +// WHERE product_id='$idupdate';"; +// +// echo 'UpdateSQL: '.$sql."\n"; +// +// try { +// echo "UPDATE Avaiable: ".$k2->db->exec($sql)."\n"; +// }catch (Exception $e) { +// echo "Error Update Avaiable : $name\n".$e->getMessage()."\n"; +// } + + + } + + + + + /** + * Граббинг изображений + * @return string + */ + function grabImage(){ + $rez=''; + + $rez.="Будет граббинг изображений..."; + + return $rez; + } + + + // Получаем контент + function GetContentShopContent($url) { + + try { + $data = file_get_contents($url); + } + catch(PDOException $e) { + echo $e->getMessage()."\n"; + echo "url=$url\n"; + } + + + return $this->GetDesc($data); + } + + + + + /** + * Извлечение контента + * @param type $url + * @return type + */ + function getURLContent($url){ + $content = file_get_contents($url); + + $url2=$this->GetUrl($content, $url); + $rez=$url=$this->addurl($url2); + return $rez; + } + + + + + + /** + * Обновление контента + * @global type $k2 + * @param type $id + * @param type $content + */ + function setContent($id, $content){ + global $k2; + + if (trim($id)=='') exit; + + $sql = "update k2tov set description='".$this->blockSym($content)."', obrabot_grabber='1' where (id='$id')"; + + echo $content."\n id=$id \n"; + + try{ + echo "Update Content: ".$k2->db->exec($sql)."\n"; + }catch(PDOException $e) { + echo "Error Update Content: $sql\n"; + echo $e->getMessage(); + } + + + } + + + + + /** + * Граббинг контента + * @global type $k2 + * @return string + */ + function gabContent(){ + global $k2; + + $rez=''; + $rez.="Граббинг контента..."; + + + $sql = "select tovid, urlsrc from k2tov where (trim(urlsrc)<>'')and(obrabot_grabber=0)"; + + + + + foreach ($k2->db->query($sql) as $value) { + + $url=$this->getURLContent($value['urlsrc']); + $description=$this->GetContentShopContent($url); + + $this->setContent($value['tovid'], $description); + + sleep(rand(1,5)); + } + + + return $rez; + } + + + + /////////////////////////////////////////////////////////////////////////// + // Серисные функции + /////////////////////////////////////////////////////////////////////////// + + + + /** + * Загрузка изображений из статического файла + * @global type $k2 + */ + function grabImageUpload(){ + + global $k2; + + // Обработка xml + try{ + $this->xml = simplexml_load_file($this->url_xml); + }catch(PDOException $e) { + echo "Error getData().simplexml_load_file().".$this->url_xml."/n"; + echo $e->getMessage(); + } + + + // Извлекаю xml + foreach($this->xml->shop->offers->offer as $a) { + + $pic=$a->picture; + + if (trim($pic)<>''){ + + $pic=str_replace('newshop.ua', 'newshop.ru', $pic); + + $fileto=$k2->rootdir."/img/sk_".$a->attributes()['id'].'.png'; + + if (!file_exists($fileto)){ + $cmd="convert $pic $fileto"; + echo $cmd."\n"; + shell_exec($cmd); + + sleep(rand(1,3)); + } + + + } + + } + + } + + + + + /** + * Возвращает название файла, сохраненного у нас локально на диске + * @global type $k2 + * @param type $product_id + * @param type $isabsolute + * @return string + */ + function getMyShopImage($product_id, $isabsolute=true){ + global $k2; + $rez=''; + + if ($isabsolute){ + $rez=$k2->rootdir; + } + + $rez.="/img/sk_".$product_id.'.png'; + + return $rez; + } + + + + + + /** + * Вставка изображения в базу данных + * @global type $k2 + * @param type $product_id + * @param type $k2keyimport + * @return string + */ + function insImageDB($product_id, $k2keyimport){ + global $k2; + $rez=''; + + $filename=$this->getMyShopImage($k2keyimport); + + echo 'filename='.$filename."\n"; + + if (!file_exists($filename)){ + return ''; + } + + $size= filesize($filename); + $size_foto_px=getimagesize($filename); + + $width=$size_foto_px[0]; + $height=$size_foto_px[1]; + + $origfilename=$k2keyimport.'.png'; + + $sql="INSERT INTO k2tov_images(product_id,upload_datetime,width,height,size,original_filename,ext) + VALUES('$product_id',now(),'$width','$height','$size','$origfilename','png')"; + + + try { + + //echo $sql."\n"; + + echo "Insert Image: ".$k2->db->exec($sql)."\n"; + $rez=$k2->db->lastInsertId(); + }catch (Exception $e) { + echo "Error Insert Image: $product_id \n".$e->getMessage()."\n"; + } + + + + return $rez; + } + + + + /** + * Выполняет sql на позициях + * @global type $k2 + * @param type $product_id + * @param type $imageid + */ + function setProdductImage($product_id, $imageid){ + global $k2; + + $sql="UPDATE k2tov SET image_id=$imageid, ext='png', image_filename='' WHERE id=$product_id "; + + try { + echo "Update Product: ".$k2->db->exec($sql)."\n"; + }catch (Exception $e) { + echo "Error Update Product: $product_id \n".$e->getMessage()."\n"; + } + + + } + + + + + /** + * Добавлет изображение, если его нет + * @global type $k2 + * @param type $product_id + * @param type $imageid + * @param type $k2keyimport + * @return string + */ + function addImageInfo($product_id, $imageid, $k2keyimport){ + global $k2; + + + $id=trim($product_id); + + if (strlen($id)<4){ + $id2=str_pad(substr($id,1,2),2,'0',STR_PAD_LEFT); + }else{ + $id2=str_pad(substr(str_pad($id,"0",STR_PAD_LEFT),2,2),2,'0',STR_PAD_LEFT); + } + + $id1=str_pad(substr(str_pad($id,4,"0",STR_PAD_LEFT),0,2),2,'0',STR_PAD_LEFT); + + + //echo "Не найдено изображений в $product_id. Будем добавлять... \n"; + // /wa-data/protected/shop/products/70/29/22970/images/2721.png + + if ($imageid==''){ + $imageid=$this->insImageDB($product_id, $k2keyimport); + } + + + + $dir=$k2->rootdir."/wa-data/protected/shop/products/$id2/$id1/$id/images/"; + echo "makedir=$dir\n"; + $k2->sys->forceDir($dir); + + $filename_src=$this->getMyShopImage($k2keyimport); + $filename_ds=$dir.$imageid.'.png'; + + if (!file_exists($filename_src)){ + return ""; + } + + + + if (!file_exists($filename_ds)){ + echo "Копируем файл из $filename_src в $filename_ds \n"; + + if (!copy($filename_src, $filename_ds)) { + echo "Не удалось скопировать $filename_src...\n"; + } + } + + // Создаем уменьшенные копии + $dir2=$k2->rootdir."/wa-data/public/shop/products/$id2/$id1/$id/images/$imageid/"; + $k2->sys->forceDir($dir2); + + if (!file_exists($dir2."$imageid.0x220.png")){ + $this->resize->resizeto($filename_src, $dir2."$imageid.0x220.png", 0, 220); + $this->resize->resizeto($filename_src, $dir2."$imageid.0x320.png", 0, 320); + $this->resize->resizeto($filename_src, $dir2."$imageid.200.png", 200, 0); + $this->resize->resizeto($filename_src, $dir2."$imageid.200x0.png", 200, 200); + $this->resize->resizeto($filename_src, $dir2."$imageid.48x48.png", 48, 48); + $this->resize->resizeto($filename_src, $dir2."$imageid.750.png", 750, 0); + $this->resize->resizeto($filename_src, $dir2."$imageid.750x0.png", 750, 0); + $this->resize->resizeto($filename_src, $dir2."$imageid.96x96.png", 96, 96); + $this->resize->resizeto($filename_src, $dir2."$imageid.970.png", 970, 0); + + // Пометка в базе данных номенклатуры + $this->setProdductImage($product_id, $imageid); + + } + + $this->resize->resizeto($filename_src, $dir2."$imageid.220.png", 220, 0); + + + //$k2->sys->forceDir($dir) + + + + + } + + + + + + + + /** + * Получает из базы информацию о изображении + * @global type $k2 + * @param type $product_id + * @param type $k2keyimport + * @return string + */ + function getImageInfo($product_id, $k2keyimport){ + global $k2; + $sql = "SELECT si.tovid as id, ext FROM k2tov_images si WHERE si.product_id=$product_id"; + + $rez=''; + $id=''; + foreach ($k2->db->query($sql) as $row) { + $id=trim($row['tovid']); + } + + //if (trim($id)==''){ + $this->addImageInfo($product_id, $id, $k2keyimport); + //} + + + return $rez; + + } + + + + + + + + + + function content(){ + //$options = getopt("", array("c:","g:")); + //$grab_options = getopt("", array("g:")); + + $rez='34567'; + + if (!isset($grab_options['g'])){ + $rez.=$this->getData(); + }elseif(trim($grab_options['g'])=='image'){ // Граббинг изображений + $rez.=$this->grabImage(); + }elseif(trim($grab_options['g'])=='content'){ // Граббинг контента + $rez.=$this->gabContent(); + }elseif(trim($grab_options['g'])=='image_upload'){ // Граббинг изображений из загруженного файла xml + $rez.=$this->grabImageUpload(); + }elseif(trim($grab_options['g'])=='image_shopscript'){ // Размещает изображения картинок, как нужно для ShopScropt + $rez.=$this->setImageShopScript(); + } + + + return $rez; + } + + +} + +?> \ No newline at end of file diff --git a/k2shop/k2shop/app/cmd/import_softkey.php b/k2shop/k2shop/app/cmd/import_softkey.php new file mode 100644 index 0000000..7d09449 --- /dev/null +++ b/k2shop/k2shop/app/cmd/import_softkey.php @@ -0,0 +1,940 @@ +resize->resizeto($filename_src, $dir2."$imageid.0x220.png", 0, 220); + $this->resize->resizeto($filename_src, $dir2."$imageid.0x320.png", 0, 320); + $this->resize->resizeto($filename_src, $dir2."$imageid.200.png", 200, 0); + $this->resize->resizeto($filename_src, $dir2."$imageid.200x0.png", 200, 200); + $this->resize->resizeto($filename_src, $dir2."$imageid.48x48.png", 48, 48); + $this->resize->resizeto($filename_src, $dir2."$imageid.750.png", 750, 0); + $this->resize->resizeto($filename_src, $dir2."$imageid.750x0.png", 750, 0); + $this->resize->resizeto($filename_src, $dir2."$imageid.96x96.png", 96, 96); + $this->resize->resizeto($filename_src, $dir2."$imageid.970.png", 970, 0);*/ + + + public $resize; + + + // Инициализация. Класс переопределяется всегда + protected function init_obj(){ + global $k2; + $this->resize = $k2->ins_comp('k2image_resize'); + $k2->check_connect(); + } + + + function getData() { + + global $k2; + + + // Загрузка файла из интернет + try{ + $xml = file_get_contents($this->url_xml); + }catch(PDOException $e) { + echo "Error getData().file_get_contents().".$this->url_xml."\n"; + echo $e->getMessage(); + } + + + + // Конвертируем в UTF-8 + if ($this->is_convert){ + $xml = iconv('windows-1251', 'UTF-8', $xml); + } + + + //$xml= str_replace('', '', $xml); + + //$xml= str_replace('', $xml); + //$xml= str_replace(']]>', '', $xml); + + // Сохраняем в файл на диске + try{ + $putfile=$k2->rootdir.'/k2shop/k2shop/upload/softkey_market_ua.xml'; + + if ($this->is_debug){ + file_put_contents($putfile,$xml); + } + }catch(PDOException $e) { + echo "Error getData().file_put_contents().".$putfile."\n"; + echo $e->getMessage(); + } + + + // Обработка xml + try{ + $this->xml = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); + //simplexml_load_file(/*$this->url_xml*/$putfile); + }catch(PDOException $e) { + echo "Error getData().simplexml_load_file().".$this->url_xml."\n"; + echo $e->getMessage(); + } + + echo "savetofile=$putfile\n"; + + $this->addCategories(); + $this->addGoods(); + + } + + // Обрабатываются категории + function addCategories(){ + + $this->xml; + foreach($this->xml->shop->categories->category as $b) { + + $idupdate=$this->SearchCategories($b->attributes()['id'], $b['0']); + + echo "idcat=$idupdate\n"; + + if ($idupdate==null){ + $this->InsertCategories($b->attributes()['id'], $b, $b->attributes()['parentId']); + } + } + + } + + + function SearchCategories($id, $name){ + + global $k2; + + $sql = "SELECT s.id FROM shop_category s WHERE ((s.k2type_import='".$this->import_label."') and (s.k2keyimport='$id'));"; + + $res=null; + + foreach ($k2->db->query($sql) as $row) { + $res=$row['id']; + } + + return $res; + + } + + function InsertCategories($id, $name, $parentid){ + global $k2; + + // Генерируем следующий id + $sql='select max(id) as maxid from shop_category;'; + + $nextid=0; + + foreach ($k2->db->query($sql) as $row) { + $nextid=$row['maxid']+1; + } + + $myparentid='0'; + + + if ((trim($parentid)<>'')and(trim($parentid)<>'0')){ + + $sql2="SELECT s.id as id + FROM shop_category s + WHERE (s.k2keyimport='$parentid') + and(s.k2type_import='".$this->import_label."')"; + + try { + + echo "search_sql=$sql2\n"; + + foreach ($k2->db->query($sql2) as $row2){ + $myparentid=$row2['id']; + + echo "\nmyparentid=$myparentid\n"; + + } + + }catch (Exception $e) { + echo "Error Select: ".$e->getMessage()."\n"; + } + + $depth=1+$this->depthroot; + + }else{ + $myparentid=$this->rootid; + $depth=0+$this->depthroot; + } + + + // Вставка категорий + $url=$k2->sys->chpu($name,$nextid); + + $sql = "INSERT INTO shop_category (id, k2keyimport, name, parent_id, k2type_import, url, full_url, depth) + VALUES ($nextid, '$id', '$name', '$myparentid', '".$this->import_label."','$url','$url','$depth')"; + + + try{ + echo "Будет SQL: $sql \n"; + echo "Insert Category: myid=$nextid, softkeyid=$id, name=$name\n sql=$sql \n".$k2->db->exec($sql)."\n"; + }catch(PDOException $e) { + echo "Error Insert Category: $sql\n"; + echo $e->getMessage(); + } + + + + } + + + // Изменение категории + function UpdateCategories($id, $name, $parentid){ + global $k2; + + + } + + // Обрабатываются товары + function addGoods(){ + //$this->xml; + + //echo 'xml='.print_r($this->xml)."\n"; + + //echo print_r($this->xml->shop->offers->offer)."\n\n"; + + foreach($this->xml->shop->offers->offer as $a) { + //echo $a->attributes()['id']."\n"; + //echo $a->attributes()['available']."\n"; + //echo $a->url."\n"; + //echo $a->price."\n"; + //echo $a->categoryId[0]."\n"; + //echo $a->categoryId[1]."\n"; + //echo $a->picture."\n"; + //echo $a->name."\n"; + //echo $a->description."\n"; + //echo $a->sales_notes."\n"; + + //var_dump($a->description); + //print_r($a->description); + //print_r($a); + // break; + + $idupdate=$this->SearchGoods($a->attributes()['id']); + + echo "idtov=$idupdate \n"; + + + if ($idupdate==null){ + $this->InsertGoods($a); + }else{ + $this->UpdateGoods($a->name, $a->price, $a->description, $idupdate, $a); + } + + //return ""; + + } + + } + + //поиск id в товарах по id партнера + function SearchGoods($id){ + + global $k2; + + $sql = "SELECT s.id FROM shop_product s WHERE s.k2type_import= '".$this->import_label."' and s.k2keyimport='$id';"; + + $res=null; + + foreach ($k2->db->query($sql) as $row) { + $res=$row['id']; + } + + return $res; + + + } + + + //поиск id в категориях по id партнера + function SearchCat($id) { + + global $k2; + + $sql ="SELECT s.id FROM shop_category s WHERE (s.k2keyimport='$id') and (s.k2type_import='".$this->import_label."')"; + + $res=null; + + foreach ($k2->db->query($sql) as $row) { + $res=$row['id']; + } + + return $res; + + } + + + function addurl($url){ + return 'http://www.softkey.ua'.$url.'&progdesc=long&print=Y'; + } + + + function URL($url){ + + return ''; + + /*$content = file_get_contents($url); + + $url2=$this->GetUrl($content, $url); + $rez=$url=$this->addurl($url2); + + return $rez;*/ + + } + + function GetUrl($content, $url, $startpos=0){ + + $pos = strpos($content, '#program', $startpos); + + if ($pos<>FALSE){ + + $i = $pos-1; + while ($content{$i}<>'"'){ + $i--; + + } + + $endpos = $pos-1; + + $url2 = substr($content, $i+1, $endpos-$i); + + $pos2=strpos($url2,'/catalog/program'); + + if (($pos2==FALSE)and(trim($url2)<>'')){ + $urltmp=$this->GetUrl($content, $url, ($pos+strlen('#program')+1)); + if (trim($urltmp)<>'') $url2=$urltmp; + } + + + return $url2; + + + }else{ + if ($startpos==0) { + echo 'Not Found: '.$id."\n"; + } + } + + } + + + function GetContentSoftkey($url) { + return ''; + } + + + + function GetDesc($data) { + + $startpos = strpos($data, '
');
+ $endpos = strpos($data, '');
+ $desc = substr($data, $startpos, $endpos-$startpos);
+
+ $desc = trim($desc);
+
+ return $desc;
+
+ }
+
+
+ // Блокировать спец-символы
+ function blockSym($strinp){
+
+ $rez=trim(str_replace("'", "''", $strinp));
+
+ return $rez;
+
+ }
+
+
+ function InsertGoods($a){
+
+ global $k2;
+
+ // Генерируем следующий id
+ $sql='select max(id) as maxid from shop_product;';
+
+ $nextid=0;
+
+ foreach ($k2->db->query($sql) as $row) {
+ $nextid=$row['maxid']+1;
+ }
+
+
+ // Вставка товара
+ $catid = $this->SearchCat($a->categoryId[0]);
+
+ $url=$this->URL($a->url);
+
+ if ($this->descript_from_xml){
+ $description=$a->description;
+ }else{
+ $description=$this->GetContentSoftkey($url);
+ }
+
+
+ $sql = "INSERT INTO shop_product (id, k2keyimport, name, meta_description, meta_title, price, k2type_import, category_id, url, status, currency, description, meta_keywords, image_filename, k2import_url)
+ VALUES ('$nextid', '".trim($a->attributes()['id'])."', '".$this->blockSym($a->name)."', '".$this->blockSym($a->name)."', '".$this->blockSym($a->name)."', '".trim($a->price)."', '".$this->import_label."','".trim($catid)."','".$k2->sys->chpu($this->blockSym($a->name), $nextid)."','1', 'UAH', '".$this->blockSym($description)."','".$this->blockSym($a->keywords)."', '1', '".$this->blockSym($a->url)."')";
+
+ echo "Insert Tov SQL $sql \n";
+ echo "Insert Tov: $catid, ".$a->name." \n ".$k2->db->exec($sql)."\n";
+
+
+ // Вставка группы товара
+ foreach ($a->categoryId as $c) {
+ $catid = $this->SearchCat($c);
+ $sql="INSERT INTO shop_category_products(product_id,category_id,sort,k2keyimport,k2type_import)
+ VALUES('$nextid','".$catid."','$nextid', '".trim($a->attributes()['id'])."', '".$this->import_label."')";
+
+
+ try {
+ echo "Insert CatTov: $sql \n";
+ echo "Insert CatTov: ".$k2->db->exec($sql)."\n";
+ }catch (Exception $e) {
+ echo "Error SQL Insert GroupTov: $sql \n";
+ echo "Error Insert GroupTov: ".$a->name." ".$nextid."\n".$e->getMessage()."\n";
+ }
+
+
+ }
+
+
+ //Вставка наличия товаров
+ $sql="INSERT INTO shop_product_skus(product_id,sort,price,primary_price,purchase_price,compare_price,available,file_size,virtual,k2keyimport,k2type_import)
+ VALUES('$nextid','1','".trim($a->price)."','".trim($a->price)."','".trim($a->price)."','".$a->price."','1','0','0', '".trim($a->attributes()['id'])."', '".$this->import_label."')";
+
+
+ try {
+ echo "Insert TovSkus: $sql \n";
+ echo "Insert TovSkus: ".$k2->db->exec($sql)."\n";
+ }catch (Exception $e) {
+ echo "Error SQL Insert Tov: $sql \n";
+ echo "Error Insert Tov: ".$nextid."\n".$e->getMessage()."\n";
+ }
+ }
+
+
+ function UpdateGoods($name, $price, $desc, $idupdate, $a){
+
+ global $k2;
+
+ $sql = "UPDATE shop_product SET price='$price', compare_price='$price', min_price='$price', max_price='$price', name='".$this->blockSym($name)."', urlsrc='".trim($a->url)."', urlpic='".trim($a->picture)."'
+ WHERE (id='$idupdate');";
+
+
+ echo "UpdatSQL: $sql\n";
+
+ echo "Update: ".$k2->db->exec($sql)."\n";
+
+
+ // Вставка наличия товаров
+ $sql="UPDATE shop_product_skus SET price='$price', primary_price='$price', purchase_price='$price', compare_price='$price', available='1'
+ WHERE product_id='$idupdate';";
+
+ echo 'UpdateSQL: '.$sql."\n";
+
+ try {
+ echo "UPDATE Avaiable: ".$k2->db->exec($sql)."\n";
+ }catch (Exception $e) {
+ echo "Error Update Avaiable : $name\n".$e->getMessage()."\n";
+ }
+
+
+ }
+
+
+
+ // Граббинг изображений
+ function grabImage(){
+ $rez='';
+
+ $rez.="Будет граббинг изображений...";
+
+ return $rez;
+ }
+
+
+
+
+
+
+
+ // Извлечение контента
+ function getURLContent($url){
+ $content = file_get_contents($url);
+
+ $url2=$this->GetUrl($content, $url);
+ $rez=$url=$this->addurl($url2);
+ return $rez;
+ }
+
+
+ // Получаем контент
+ function GetContentSoftkeyContent($url) {
+
+ try {
+ $data = file_get_contents($url);
+ }
+ catch(PDOException $e) {
+ echo $e->getMessage()."\n";
+ echo "url=$url\n";
+ }
+
+
+ return $this->GetDesc($data);
+ }
+
+
+
+ // Обновление описания
+ function setContent($id, $content){
+ global $k2;
+
+ if (trim($id)=='') exit;
+
+ $sql = "update shop_product set description='".$this->blockSym($content)."', obrabot_grabber='1' where (id='$id')";
+
+ echo $content."\n id=$id \n";
+
+ try{
+ echo "Update Content: ".$k2->db->exec($sql)."\n";
+ }catch(PDOException $e) {
+ echo "Error Update Content: $sql\n";
+ echo $e->getMessage();
+ }
+
+
+ }
+
+
+
+ // Граббинг контента
+ function gabContent(){
+ global $k2;
+
+ $rez='';
+ $rez.="Граббинг контента...";
+
+
+ $sql = "select id, urlsrc from shop_product where (trim(urlsrc)<>'')and(obrabot_grabber=0)";
+
+
+
+
+ foreach ($k2->db->query($sql) as $value) {
+
+ $url=$this->getURLContent($value['urlsrc']);
+ $description=$this->GetContentSoftkeyContent($url);
+
+ $this->setContent($value['id'], $description);
+
+ sleep(rand(1,5));
+ }
+
+
+ return $rez;
+ }
+
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Серисные функции
+ ///////////////////////////////////////////////////////////////////////////
+
+
+ // Загрузка изображений из статического файла
+ function grabImageUpload(){
+
+ global $k2;
+
+ // Обработка xml
+ try{
+ $this->xml = simplexml_load_file($this->url_xml);
+ }catch(PDOException $e) {
+ echo "Error getData().simplexml_load_file().".$this->url_xml."/n";
+ echo $e->getMessage();
+ }
+
+
+ // Извлекаю xml
+ foreach($this->xml->shop->offers->offer as $a) {
+
+ $pic=$a->picture;
+
+ if (trim($pic)<>''){
+
+ $pic=str_replace('softkey.ua', 'softkey.ru', $pic);
+
+ $fileto=$k2->rootdir."/img/sk_".$a->attributes()['id']./*'.png'*/'.'.$this->new_ext;
+
+ if (!file_exists($fileto)){
+ $cmd="convert $pic $fileto";
+ echo $cmd."\n";
+ shell_exec($cmd);
+
+ if ($this->pause){
+ sleep(rand(1,3));
+ }
+ }
+
+
+ }
+
+ }
+
+ }
+
+
+
+ // Возвращает название файла Softkey, сохраненного у нас локально на диске
+ function getMySoftkeyImage($product_id, $isabsolute=true){
+ global $k2;
+ $rez='';
+
+ if ($isabsolute){
+ $rez=$k2->rootdir;
+ }
+
+ $rez.="/img/sk_".$product_id./*'.png'*/'.'.$this->new_ext;
+
+ return $rez;
+ }
+
+
+
+
+ // Вставка изображения в базу данных
+ function insImageDB($product_id, $k2keyimport){
+ global $k2;
+ $rez='';
+
+ $filename=$this->getMySoftkeyImage($k2keyimport);
+
+ echo 'filename='.$filename."\n";
+
+ if (!file_exists($filename)){
+ return '';
+ }
+
+ $size= filesize($filename);
+ $size_foto_px=getimagesize($filename);
+
+ $width=$size_foto_px[0];
+ $height=$size_foto_px[1];
+
+ $origfilename=$k2keyimport./*'.png'*/'.'.$this->new_ext;
+
+ $sql="INSERT INTO shop_product_images(product_id,upload_datetime,width,height,size,original_filename,ext)
+ VALUES('$product_id',now(),'$width','$height','$size','$origfilename','".$this->new_ext."')";
+
+
+ try {
+
+ echo $sql."\n";
+ echo "Insert Image: ".$k2->db->exec($sql)."\n";
+ $rez=$k2->db->lastInsertId();
+ }catch (Exception $e) {
+ echo "Error Insert Image: $product_id \n".$e->getMessage()."\n";
+ }
+
+
+
+ return $rez;
+ }
+
+
+ // Выполняет sql на позициях
+ function setProdductImage($product_id, $imageid){
+ global $k2;
+
+ $sql="UPDATE shop_product SET image_id=$imageid, ext='".$this->new_ext."', image_filename='' WHERE id=$product_id ";
+
+ try {
+ echo "Update Product: ".$k2->db->exec($sql)."\n";
+ }catch (Exception $e) {
+ echo "Error Update Product: $product_id \n".$e->getMessage()."\n";
+ }
+
+
+ }
+
+
+
+ // Добавлет изображение, если его нет
+ function addImageInfo($product_id, $imageid, $k2keyimport){
+ global $k2;
+
+ echo "addImageInfo($product_id, $imageid, $k2keyimport)\n";
+
+ if (trim($product_id)==''){
+ echo "ID продукта пуст. Выходим из процедуры.\n";
+ return '';
+ }
+
+ $id=trim($product_id);
+
+ if (strlen($id)<4){
+ $id2=str_pad(substr($id,1,2),2,'0',STR_PAD_LEFT);
+ }else{
+ $id2=str_pad(substr(str_pad($id,"0",STR_PAD_LEFT),2,2),2,'0',STR_PAD_LEFT);
+ }
+
+ $id1=str_pad(substr(str_pad($id,4,"0",STR_PAD_LEFT),0,2),2,'0',STR_PAD_LEFT);
+
+
+ //echo "Не найдено изображений в $product_id. Будем добавлять... \n";
+ // /wa-data/protected/shop/products/70/29/22970/images/2721.png
+
+ if ($imageid==''){
+ $imageid=$this->insImageDB($product_id, $k2keyimport);
+
+ if ($imageid=='') return '';
+ }
+
+
+ $dir=$k2->rootdir."/wa-data/protected/shop/products/$id2/$id1/$id/images/";
+ echo "makedir=$dir\n";
+ $k2->sys->forceDir($dir);
+
+ $filename_src=$this->getMySoftkeyImage($k2keyimport);
+
+ if (!file_exists($filename_src)){
+ return '';
+ }
+
+
+ $filename_ds=$dir.$imageid./*'.png'*/'.'.$this->new_ext;
+
+
+ echo 'filename='.$filename_ds."\n";
+
+ if (!file_exists($filename_src)){
+ echo "Исходного файла нет, поэтому выходим: $filename_src\n";
+ return "";
+ }
+
+
+
+ if (!file_exists($filename_ds)){
+ echo "Копируем файл из $filename_src в $filename_ds \n";
+
+ if (!copy($filename_src, $filename_ds)) {
+ echo "Не удалось скопировать $filename_src...\n";
+ }else{
+
+ }
+ }
+
+ // Создаем уменьшенные копии
+ $dir2=$k2->rootdir."/wa-data/public/shop/products/$id2/$id1/$id/images/$imageid/";
+ $k2->sys->forceDir($dir2);
+
+
+ //public $sizes=array('0x220','0x320','200','200x0','48x48','750','750x0','96x96','970');
+
+
+ foreach ($this->sizes as $s) {
+ $size=explode('x', $s);
+
+ if (count($size)==0){
+ if (trim($s)==''){
+ continue;
+ }else{
+ $size[0]=$s;
+ }
+ }
+
+ if (count($size)==1){
+ $size[1]=$size[0];
+ }
+
+ $filename=$dir2."$imageid.$s".".".$this->new_ext;
+
+ echo "Файл изображения: $filename\n";
+
+ if (!file_exists($filename)){
+ echo "Создаем...\n";
+ }else{
+ echo "Есть в наличии. Перегенерируем.\n";
+ }
+
+ $this->resize->resizeto($filename_src, $filename, $size[0], $size[1]);
+
+ }
+
+ // Пометка в базе данных номенклатуры
+ $this->setProdductImage($product_id, $imageid);
+
+
+ /*if (!file_exists($dir2."$imageid.0x220.png")){
+ $this->resize->resizeto($filename_src, $dir2."$imageid.0x220.png", 0, 220);
+ $this->resize->resizeto($filename_src, $dir2."$imageid.0x320.png", 0, 320);
+ $this->resize->resizeto($filename_src, $dir2."$imageid.200.png", 200, 0);
+ $this->resize->resizeto($filename_src, $dir2."$imageid.200x0.png", 200, 200);
+ $this->resize->resizeto($filename_src, $dir2."$imageid.48x48.png", 48, 48);
+ $this->resize->resizeto($filename_src, $dir2."$imageid.750.png", 750, 0);
+ $this->resize->resizeto($filename_src, $dir2."$imageid.750x0.png", 750, 0);
+ $this->resize->resizeto($filename_src, $dir2."$imageid.96x96.png", 96, 96);
+ $this->resize->resizeto($filename_src, $dir2."$imageid.970.png", 970, 0);
+
+ // Пометка в базе данных номенклатуры
+ $this->setProdductImage($product_id, $imageid);
+
+ }
+
+ $this->resize->resizeto($filename_src, $dir2."$imageid.220.png", 220, 0);*/
+
+
+ //$k2->sys->forceDir($dir)
+
+
+
+
+ }
+
+
+
+
+
+
+ // Получает из базы информацию о изображении
+ function getImageInfo($product_id, $k2keyimport){
+ global $k2;
+ $sql = "SELECT si.id as id, ext FROM shop_product_images si WHERE (not (si.product_id is null))and(si.product_id=$product_id)";
+
+ $rez='';
+ $id='';
+ foreach ($k2->db->query($sql) as $row) {
+ $id=trim($row['id']);
+ }
+
+ echo "getImageInfo($product_id,$k2keyimport)\n";
+
+ //if (trim($id)==''){
+ $this->addImageInfo($product_id, $id, $k2keyimport);
+ //}
+
+
+ return $rez;
+
+ }
+
+
+
+
+
+
+ // Устанавивает картинки ShopScript
+ function setImageShopScript(){
+ global $k2;
+
+ $sql = 'SELECT p.id, p.name, p.url, p.price, p.description, p.category_id, p.ext, p.meta_keywords, p.k2type_import, p.k2keyimport
+ FROM shop_product p';
+
+
+ foreach ($k2->db->query($sql) as $row) {
+
+
+ if (($row['k2type_import']==$this->import_label)and(trim($row['k2keyimport'])<>'')){
+
+ // Исходное изображение
+ $pic=$k2->rootdir."/img/sk_".$row['k2keyimport']./*'.png'*/'.'.$this->new_ext;
+
+ if (file_exists($pic)){
+
+ // \wa-data\protected\shop\products\06\03\306\images
+ // берем строку из shop_product_images (там кстати есть и оригинальные название фото)
+ // id: 1949
+ // product_id: 1389
+ // Идем в /wa-data/public/shop/products
+ // Ищем папку 89
+ // В ней папку 13
+ // Дальше видим папку 1389
+ // в ней папка images
+ // и там фотки вида: 1949.размер.jpg
+
+ // http://test.corp2.kiev.ua/wa-data/public/shop/products/70/29/22970/images/2721/2721.200x0.png
+ // /wa-data/protected/shop/products/70/29/22970/images/2721.png
+ // id product = 22970
+ // id image = 2721
+
+ echo 'id='.$row['id']." | ".$row['name']." | ".$pic."\n";
+
+ $this->getImageInfo($row['id'], $row['k2keyimport']);
+
+ //exit;
+
+ }
+
+ }
+ }
+
+ echo "Процесс закончился\n";
+ }
+
+
+
+ function content(){
+
+ $grab_options = getopt("", array("g:"));
+
+ $rez='';
+
+
+
+ if (!isset($grab_options['g'])){
+ //echo 'url='.$this->url_xml."\n";
+ //echo "getData...\n";
+ $rez.=$this->getData();
+ }elseif(trim($grab_options['g'])=='image'){ // Граббинг изображений
+ $rez.=$this->grabImage();
+ }elseif(trim($grab_options['g'])=='content'){ // Граббинг контента
+ $rez.=$this->gabContent();
+ }elseif(trim($grab_options['g'])=='image_upload'){ // Граббинг изображений из загруженного файла xml
+ $rez.=$this->grabImageUpload();
+ }elseif(trim($grab_options['g'])=='image_shopscript'){ // Размещает изображения картинок, как нужно для ShopScropt
+ $rez.=$this->setImageShopScript();
+ }
+
+
+ return $rez;
+ }
+
+
+}
+
+?>
\ No newline at end of file
diff --git a/k2shop/k2shop/app/cmd/import_wialon.php b/k2shop/k2shop/app/cmd/import_wialon.php
new file mode 100644
index 0000000..5aaab6c
--- /dev/null
+++ b/k2shop/k2shop/app/cmd/import_wialon.php
@@ -0,0 +1,567 @@
+ 'hst-api.wialon.com',
+ 'login' => 'kaplia',
+ 'password' => 'H4ogY80nbgtyv',
+ 'token' => '3af3ca234996bfa1707e2bc2c41a0e4c0F55E1F1C2C54710F079D9EFC2F1D1959F3CA546',
+ 'scheme' => 'https'
+ ],
+
+ /*['host' => 'local.overseer.ua',
+ 'login' => 'GPS24_agro',
+ 'password' => 'GPS24_agro',
+ 'token' => '016ab096bc683cc232a9e03cf663dc7045C06369EBA777F269B6616D32F511883871043D',
+ 'scheme' => 'http'
+ ]*/
+ ];
+
+
+ // Демо-пример Api
+ // Демо-сервер: https://kit-api.wialon.com
+ // Логин и пароль demo: kitdemo kitdemo
+ // Генерация Токена
+ // https://kit-api.wialon.com/login.html
+
+
+
+
+ // Информация о аккаунтах
+ function accInfo(Wialon $wialon_api){
+ // Получение информации о аккаунте
+ echo "\nИнформация о аккаунте:\n";
+ $accinfo=$wialon_api->call('core_get_account_data', '{"type":2}');
+ var_dump($accinfo);
+ echo "\n";
+ }
+
+
+ /**
+ * Информция по машинах на основании id
+ * @param Wialon $wialon_api
+ * @param type $id
+ */
+ function findIDParam(Wialon $wialon_api, $id)
+ {
+ echo "\nЗапрос по id на сервере:\n";
+ $accinfo=$wialon_api->call('core_search_item', '{
+ "id":'.$id.',
+ "flags":4611686018427387903
+ }');
+
+ $json = json_decode($accinfo, true);
+
+
+ //foreach ($json as $item){
+ // echo $json['item']['nm']." | ".$json['item']['id']."\n";
+ //}
+ //print_r($json['item']);
+
+
+ //echo "\n";
+
+ return $json['item'];
+ }
+
+ // Информаци о всех пользователях на сервере
+ function allUsersInfo(Wialon $wialon_api){
+ // Описание команд поиска:
+ // https://sdk.wialon.com/wiki/ru/kit/remoteapi/apiref/core/search_items
+ echo "\nЗапрос всех пользователей на сервере:\n";
+ $accinfo=$wialon_api->call('core_search_items', '{
+ "spec":{
+ "itemsType":"user",
+ "propName":"sys_name",
+ "propValueMask":"*",
+ "sortType":"sys_name"
+ },"force":1,
+ "flags":4611686018427387903,
+ "from":0,
+ "to":0
+ }');
+
+ $json = json_decode($accinfo, true);
+
+
+
+ //print_r($json['items']);
+
+
+ //echo "\n";
+
+ return $json['items'];
+ }
+
+
+
+ // Информаци о всех устройствах на сервере
+ function allDeviceInfo(Wialon $wialon_api){
+ // Описание команд поиска:
+ // https://sdk.wialon.com/wiki/ru/kit/remoteapi/apiref/core/search_items
+ echo "\nЗапрос всех пользователей на сервере:\n";
+ $accinfo=$wialon_api->call('core_search_items', '{
+ "spec":{
+ "itemsType":"avl_unit",
+ "propName":"unit_sensors",
+ "propValueMask":"*",
+ "sortType":"unit_sensors"
+ },"force":1,
+ "flags":1,
+ "from":0,
+ "to":0
+ }');
+
+ $json = json_decode($accinfo, true);
+
+ foreach ($json['items'] as $item){
+ //echo $item['nm']." | ".$item['id']." | ".$item['mu']." | ".$item['uacl']."\n";
+
+ //echo $item['id']."\n";
+ }
+
+ print_r($json['items']);
+
+
+ echo "\n";
+ }
+
+
+ // Импорт данных из одного аккаунта Wialon
+ function importWialonData($dostup_info){
+ global $k2, $em;
+
+ echo $dostup_info['host']."\n";
+ echo $dostup_info['login']."\n";
+ echo $dostup_info['password']."\n";
+ echo $dostup_info['token']."\n";
+ echo $dostup_info['scheme']."\n";
+
+ // $scheme = 'http', $host = 'hst-api.wialon.com'
+ $wialon_api = new Wialon($dostup_info['scheme'], $dostup_info['host']);
+
+ // old username and password login is deprecated, use token login
+ $token = $dostup_info['token'];
+ $result = $wialon_api->login($token);
+ $json = json_decode($result, true);
+
+ //var_dump($json);
+
+ if(!isset($json['error'])){
+
+ echo 'id session='.$wialon_api->get_sid()."\n";
+
+ //$this->accInfo($wialon_api);
+
+ //$this->findIDParam($wialon_api, 15199589);
+ /*Получение порции*/
+ $re = $k2->sql->sel("SELECT MAX(CAST(portion AS SIGNED))
+ FROM crmWialonAcc"
+ );
+
+ $portion=$re['data'][0][0]+1;
+
+ $userData = $this->allUsersInfo($wialon_api);
+
+ foreach ($userData as $item){
+ //echo $item['nm']." | ".$item['id']." | ".$item['mu']." | ".$item['uacl']."\n";
+
+ //строка с перечнем id машин
+ $str_id = $item['prp']['monu'];
+
+ //преобразуем в массив
+ $str_id = substr($str_id, 2, -2)."\n";
+ $arr_id = explode('","', $str_id);
+
+
+
+
+ //получае данные по машинам
+ foreach ($arr_id as $id){
+ $car_data = $this->findIDParam($wialon_api, trim($id));
+ $acc_wialon = trim($item['nm']);
+ $acc_car = trim($car_data['nm']);
+ $car_mileage = trim($car_data['cnm']);
+ $this->insAccData($acc_wialon, $acc_car, $car_mileage, $portion);
+ }
+
+ }
+
+ $wialon_api->logout();
+ } else {
+ echo WialonError::error($json['error']);
+ }
+
+
+ echo "Подключение завершено.\n";
+ }
+
+ /**
+ * вставка в таблицу аккаунтов Wialon
+ * @global type $k2
+ * @param type $acc_wialon
+ * @param type $acc_car
+ * @param type $car_mileage
+ */
+ function insAccData($acc_wialon='', $acc_car='', $car_mileage='', $portion)
+ {
+ global $k2;
+
+ $ksql=$k2->ins_comp('k2sql');
+
+ if (trim($acc_wialon)<>'' && $acc_car<>''){
+
+
+ // Строчка закачивалась, если совпадает название клиента и название машины
+ $find=$ksql->sel('SELECT accwialonid, car_new_mileage FROM crmWialonAcc WHERE (acc_wialon=:acc_wialon)AND(acc_car=:acc_car);', ['acc_wialon'=>$acc_wialon, 'acc_car'=>$acc_car]);
+ $a=$this->dostup;
+
+ //если данных нет то вставляем, если есть то обновляем
+ //print_r($find['data']);
+
+ if ($find['data']==[]){
+ $ksql->ins_arr(['table'=>'crmWialonAcc',
+ 'fields'=>[
+ 'accwialonid'=>'{id}',
+ 'portion'=>$portion,
+ 'acc_wialon'=>$acc_wialon,
+ 'acc_car'=>$acc_car,
+ 'car_mileage'=>$car_mileage,
+ 'datecreate'=>'{now}',
+ 'nameserver'=>$a[0]['host'],
+ 'car_new_mileage'=>$car_mileage
+ ]
+ ]);
+ } else {
+
+ $ksql->upd(
+ "UPDATE crmWialonAcc
+ SET
+ car_mileage=:car_mileage,
+ car_new_mileage=:car_new_mileage,
+ datecreate=:datecreate,
+ portion=:portion,
+ nameserver=:nameserver
+ WHERE (acc_wialon=:acc_wialon) AND (acc_car=:acc_car) ",
+ ['acc_wialon'=>$acc_wialon,
+ 'acc_car'=>$acc_car,
+ 'portion'=>$portion,
+ 'nameserver'=>$a[0]['host'],
+ 'datecreate'=>'{now}',
+ 'car_mileage'=>$find['data'][0]['car_new_mileage'],
+ 'car_new_mileage'=>$car_mileage
+ ]
+ );
+
+ }
+
+ }
+
+ echo "Конец вставки записи.\n";
+
+ }
+
+
+ // Импорт данных из Wialon
+ function importAllWialonData(){
+
+ foreach ($this->dostup as $d) {
+ $this->importWialonData($d);
+ echo "\n";
+ }
+
+ }
+
+
+
+ protected function init_obj(){
+ global $k2;
+ $k2->check_connect();
+ }
+
+ // Логин/логаут
+ // https://sdk.wialon.com/wiki/ru/pro/remoteapi/codesamples/login
+ function login(){
+ // {choose}";
+ print_r($records);
+ echo "
";
+
+
+ return $rez;
+ }
+
+
+
+ // Получаем перечень счетов
+ // https://github.com/cristianpontes/zoho-crm-client-php
+ function getInvoices(){
+ global $k2;
+ $rez='';
+
+ $client = new ZohoCRMClient('Invoices', $this->tocken);
+
+ $records = $client->getRecords()
+ /*->selectColumns('First Name', 'Last Name', 'Email')
+ ->sortBy('Last Name')->sortAsc()
+ ->since(date_create('last week'))*/
+ ->request();
+
+ // Just for debug
+ echo "";
+ print_r($records);
+ echo "
";
+
+
+ return $rez;
+ }
+
+
+
+ // Получаем заказы на продажу
+ function getSalesOrders(){
+ global $k2;
+ $rez='';
+
+ $client = new ZohoCRMClient('SalesOrders', $this->tocken);
+
+ $records = $client->getRecords()
+ /*->selectColumns('First Name', 'Last Name', 'Email')
+ ->sortBy('Last Name')->sortAsc()
+ ->since(date_create('last week'))*/
+ ->request();
+
+ // Just for debug
+ echo "";
+ print_r($records);
+ echo "
";
+
+
+ return $rez;
+ }
+
+
+ // Получаем Продукты
+ function getProducts(){
+ global $k2;
+ $rez='';
+
+ $client = new ZohoCRMClient('Products', $this->tocken);
+
+ $records = $client->getRecords()
+ /*->selectColumns('First Name', 'Last Name', 'Email')
+ ->sortBy('Last Name')->sortAsc()
+ ->since(date_create('last week'))*/
+ ->request();
+
+ // Just for debug
+ echo "";
+ print_r($records);
+ echo "
";
+
+
+ return $rez;
+ }
+
+
+ // Получаем звонки
+ function getCalls(){
+ global $k2;
+ $rez='';
+
+ $client = new ZohoCRMClient('Calls', $this->tocken);
+
+ $records = $client->getRecords()
+ /*->selectColumns('First Name', 'Last Name', 'Email')
+ ->sortBy('Last Name')->sortAsc()
+ ->since(date_create('last week'))*/
+ ->request();
+
+ // Just for debug
+ echo "";
+ print_r($records);
+ echo "
";
+
+
+ return $rez;
+ }
+
+
+
+
+ /////////////////////////////////////////////////////////////////////
+ // Функции из документации к Zoho
+ /////////////////////////////////////////////////////////////////////
+
+ // Fetch Records from the "Leads" Module
+ // https://www.zoho.eu/crm/help/api/examples.html#10._Generate_Auth_token_PHP
+ function fetch_leads(){
+ header("Content-type: application/xml");
+ $token=$this->tocken;
+ $url = "https://crm.zoho.eu/crm/private/xml/Leads/getRecords";
+ $param= "authtoken=".$token."&scope=crmapi";
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_TIMEOUT, 30);
+ curl_setopt($ch, CURLOPT_POST, 1);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
+ $result = curl_exec($ch);
+ curl_close($ch);
+ echo $result;
+ return $result;
+
+ }
+
+
+ // Generate Authentication Token using PHP
+ function generate_tocken(){
+ $username = $this->username;
+ $password = $this->password;
+ $param = "SCOPE=ZohoCRM/crmapi&EMAIL_ID=".$username."&PASSWORD=".$password;
+ $ch = curl_init("https://accounts.zoho.eu/apiauthtoken/nb/create");
+ curl_setopt($ch, CURLOPT_POST, true);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
+ $result = curl_exec($ch);
+
+ /*This part of the code below will separate the Authtoken from the result.
+ Remove this part if you just need only the result*/
+ $anArray = explode("\n",$result);
+ $authToken = explode("=",$anArray['2']);
+ $cmp = strcmp($authToken['0'],"AUTHTOKEN");
+ echo $anArray['2'].""; if ($cmp == 0)
+ {
+ echo "Created Authtoken is : ".$authToken['1'];
+ return $authToken['1'];
+ }
+ curl_close($ch);
+ }
+
+
+
+
+
+
+ // Creating Potential with an existing Account
+ // API Method: insertRecords
+ // XML Format:
+ // https://crm.zoho.eu/crm/private/xml/Leads/insertRecords?authtoken=AuthToken&scope=crmapi
+ function CreatePotentialAcc(){
+ // XML Data:
+ //
+ ';
+ public $emailBody='
+
+
+ ';
+ public $returnUrl='/?comp=k2transferzakaz&c=pay&group_transid={transid}';
+ public $letter_text = 'Нужно оплатить данный заказ';
+
+
+ // Инициализация. Класс переопределяется всегда
+ protected function init_obj(){
+ global $k2, $trans;
+ $k2->inc('k2transfermain');
+ }
+
+
+ /**
+ *
+ * @global type $k2
+ * @global type $trans
+ * @return type
+ */
+ function showForm(){
+ global $k2, $trans;
+ $rez='';
+ //отправка письма
+
+ $now_time = time()+3600;//время в секундах
+ $now_date = date('j'); //сегодняшний день
+ $vip_days = $trans->getVipDate();
+ $email_days = $vip_days[0]['email_day'];
+
+ $arr_email_days = explode(', ', $email_days);
+
+ foreach ($arr_email_days as $value) {
+
+ $email_day = $value;
+ if ($email_day == 0) {
+ $email_day = self::VIP_EMAIL_DAY;
+ }
+
+ if ($now_date == $email_day) {
+ $vip_email = $this->sendVipEmail();
+ $rez .= $vip_email;
+ }
+ }
+
+ $getAct = $trans->getActTr();
+
+ foreach ($getAct as $value) {
+ $start_time = strtotime($value['begin_service']);
+ $is_email = round(($start_time - $now_time)/3600);
+ $grp_tr = $value['group_transferid'];
+ $is_full_pay = $trans->isFullPay($grp_tr);
+ $email = $value['email'];
+ $is_vip = $value['partner_statusid'];
+ if (($is_email == self::EMAIL_TIME1)||($is_email == self::EMAIL_TIME2)){
+ if ($is_vip == 2) {
+ $rez .= $this->sendEmail($grp_tr, $email);
+ }
+ }
+ // $rez .= $is_email.'
+
+
+ ';
+ public $emailFooter='
+ {letter}
+ Оплатить
+
';
+ }
+
+
+
+
+ return $rez;
+ }
+
+ /**
+ *
+ * @global type $k2
+ * @global type $trans
+ * @param type $grp_tr
+ * @param type $email
+ * @return type
+ */
+ function sendEmail($grp_tr, $email) {
+ global $k2, $trans;
+ $rez = '';
+ $rez .= $this->emailHead;
+ $rez .= $this->emailBody;
+ $rez .= $this->emailFooter;
+ $rez = str_replace('{pagepay}', 'http://'.$k2->domain().$this->returnUrl, $rez);
+ $rez = str_replace('{transid}', $grp_tr, $rez);
+ $rez = str_replace('{letter}', $this->letter_text, $rez);
+ $to = "".$email."" ;
+
+ $subject = "ClickTransfert";
+
+ $message = "
+
+ ";
+ return $rez;
+ }
+
+
+ function content()
+ {
+ global $k2;
+
+ $event = $k2->get('event');
+
+ switch ($event)
+ {
+ case "search":
+ $searchTerm = $k2->post('keyword');
+ $my_sql = $k2->post('sql');
+ $alias = $k2->post('alias');
+ $linkname = $k2->post('linkname');
+ $relation = $k2->post('relation');
+ $rez = $this->searchAct($searchTerm, $my_sql, $alias, $linkname, $relation);
+ break;
+ default:
+ $rez = '';
+ }
+
+
+ return $rez;
+ }
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/components/k2browser.php b/k2shop/k2shop/app/components/k2browser.php
new file mode 100644
index 0000000..f825dc6
--- /dev/null
+++ b/k2shop/k2shop/app/components/k2browser.php
@@ -0,0 +1,74 @@
+'Internet Explorer',
+ 'ver'=>10
+ ],
+
+ ['name'=>'Firefox',
+ 'ver'=>20
+ ],
+
+ ['name'=>'Chrome',
+ 'ver'=>20
+ ],
+
+ ['name'=>'Opera',
+ 'ver'=>20
+ ]
+ ];
+
+ public $browser_name=''; // Название браузера
+ public $browser_ver=0; // Версия браузера
+
+ public $comp; // Компонента браузера
+
+
+ // Инициализация. Класс переопределяется всегда
+ protected function init_obj(){
+ global $k2;
+
+ $browse_file=nslashe($k2->rootdir.'\k2shop\k2shop\libs\browser\Browser.php');
+ //echo 'file='.$browse_file.'
';
+
+ require_once $browse_file;
+ $this->comp = new Browser();
+
+ $this->browser_name = $this->comp->getBrowser();
+ $this->browser_ver = $this->comp->getVersion();
+ }
+
+
+ // Блокирование доступа с браузера ниже версии, чем неоходимо
+ function blockBrowser(){
+ foreach ($this->browser_allows as $br){
+ if( $this->browser_name == $br['name'] && $this->browser_ver < $br['ver'] ) {
+ die('Необходим браузер '.$br['name'].' версии '.$br['ver'].' или выше');
+ }
+ }
+ }
+
+
+ function content()
+ {
+ global $k2;
+ $rez='Будет определяться версия браузера клиента...';
+ return $rez;
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/components/k2button.php b/k2shop/k2shop/app/components/k2button.php
new file mode 100644
index 0000000..b132af9
--- /dev/null
+++ b/k2shop/k2shop/app/components/k2button.php
@@ -0,0 +1,160 @@
+addToHead();
+ }
+
+
+ // Регистрирует необходимые библиотеки
+ public function addToHead(){
+ global $k2;
+
+ $k2->site->addCSS('jqx.base.css',"/k2shop/k2shop/libs/jqwidgets/jqwidgets/styles/jqx.base.css");
+ $k2->site->addJS('jqxcore.js',"/k2shop/k2shop/libs/jqwidgets/jqwidgets/jqxcore.js");
+ $k2->site->addJS('jqxbuttons.js',"/k2shop/k2shop/libs/jqwidgets/jqwidgets/jqxbuttons.js");
+ $k2->site->addJS('jqxcheckbox.js',"/k2shop/k2shop/libs/jqwidgets/jqwidgets/jqxcheckbox.js");
+ $k2->site->addJS('jqxradiobutton.js',"/k2shop/k2shop/libs/jqwidgets/jqwidgets/jqxradiobutton.js");
+ $k2->site->addJS('jqxswitchbutton.js',"/k2shop/k2shop/libs/jqwidgets/jqwidgets/jqxswitchbutton.js");
+ }
+
+ //устанавливаем параметры
+ public function setParam($arr)
+ {
+ foreach ($arr as $key => $value){
+ if (isset($value)){
+ $this->$key = $value;
+ }
+ }
+
+ if (!isset($arr['hint'])){
+ $this->hint = $this->btn_name;
+ }
+
+ }
+
+ // кнопка
+ public function simpleBtn($arr)
+ {
+ global $k2;
+ $this->setParam($arr);
+ $script = "
+ $(document).ready(function () {
+ $('#".$this->btn_id."').jqxButton({ width: '".$this->width."', height: '".$this->height."', template: '".$this->btn_tmp."', textImageRelation: 'imageBeforeText', textPosition: 'left', imgSrc: '".$this->img_src."', disabled: '".$this->disabled."' });
+ $('#".$this->btn_id."').on('click', function ()
+ {
+ ".$this->onclick."
+ });
+ });
+ ";
+ $k2->site->addJavaScript($this->btn_id, $script);
+ $rez = "";
+ return $rez;
+ }
+
+// public function radioBtn($arr)
+// {
+// global $k2;
+// $this->setParam($arr);
+// $script = "
+// $(document).ready(function () {
+// $('#radio').jqxRadioButton({ width: ".$this->width.", height: ".$this->height." });
+// $('#radio2').jqxRadioButton({ width: ".$this->width.", height: ".$this->height." });
+// });
+// ";
+// $k2->site->addJavaScript('k2radio', $script);
+// $rez = "Radio 1
+// Radio 2";
+// return $rez;
+// }
+//
+// public function switchBtn($arr)
+// {
+// global $k2;
+// $this->setParam($arr);
+// $script = "
+// $(document).ready(function () {
+// $('#".$this->btn_id."').jqxSwitchButton({ width: ".$this->width.", height: ".$this->height." });
+//
+// });
+// ";
+// $k2->site->addJavaScript('k2switch', $script);
+// $rez = "";
+//
+// return $rez;
+// }
+//
+ public function checkBox($arr)
+ {
+ global $k2;
+ $this->setParam($arr);
+ $script = "
+ $(document).ready(function () {
+ $('#".$this->btn_id."').jqxCheckBox({ width: ".$this->width.", height: ".$this->height." });
+
+ });
+ ";
+ $k2->site->addJavaScript($this->btn_id, $script);
+ $rez = "";
+
+ return $rez;
+ }
+//
+//
+// public function simpleButton ($arr)
+// {
+// $this->setParam($arr);
+// echo ''
+// . '';
+// }
+
+ function showBtn($arr = [])
+ {
+ global $k2;
+ $this->setParam($arr);
+ switch ($this->btn_type)
+ {
+ case 'simple':
+ $rez = $this->simpleBtn($arr);
+ break;
+ case 'checkBox':
+ $rez = $this->checkBox($arr);
+ break;
+ default :
+ $rez = $this->simpleBtn();
+ }
+
+ return $rez;
+ }
+
+ function content()
+ {
+ global $k2;
+
+ $rez = $this->showBtn();
+
+ return $rez;
+ }
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/components/k2chat.php b/k2shop/k2shop/app/components/k2chat.php
new file mode 100644
index 0000000..9ab9894
--- /dev/null
+++ b/k2shop/k2shop/app/components/k2chat.php
@@ -0,0 +1,426 @@
+
+ {chat_name}
+
+
Напишіть повідомлення×
+
+
';
+ $message .= 'Email: '.$mess_arr['email'].'
';
+ $message .= 'Телефон: '.$mess_arr['phone'].'
';
+ $message .= 'Курсы: '.$mess_arr['webcheck'].' '.$mess_arr['1ccheck'].' '.$mess_arr['crosscheck'].'
';
+ $message .= 'Сообщение: '.$mess_arr['message'].'
';
+
+
+ $k2->mail->sendMail($mailto, $subj, $message, $headers);
+ //$k2->mail->sendMail($mailto2, $subj, $message, $headers);
+
+
+ $this->saveEmails($mess_arr, $message);
+ }
+
+ return $rez;
+ }
+
+
+ function saveEmails($mess_arr, $message){
+ global $k2;
+ $rez = ['rez'=>'', 'err'=>''];
+ $emailid = $this->getID();
+ $created_at = date('Y-m-d H:i:s');
+ $r = $k2->sql->ins_arr(
+ ['table' => 'k2emails',
+ 'fields' => [
+ 'emailid'=>$emailid,
+ 'from_emeil'=>$mess_arr['email'],
+ 'created_at'=>$created_at,
+ 'message'=>$message,
+ ]
+ ]
+ );
+ if (trim($err['err'])<>''){
+ $rez['err']='Помилка. '.$r['err'];
+ $k2->log->err($rez['err'], false);
+ }
+ return $rez;
+ }
+
+
+ /**
+ * отправка письма
+ * @global type $k2
+ * @return type
+ */
+ function sendEmail()
+ {
+ global $k2;
+
+ if(trim($k2->post('feedtextemail'))<>''){
+ $mask_arr = [
+ '',
+ '',
+ $k2->post('feedname'),
+ $k2->post('feedemail'),
+ $k2->post('feedtextemail'),
+ $k2->proto.'://'.$k2->domain(),
+ $_SERVER['REQUEST_URI']
+ ];
+
+ $email_comp = $k2->ins_comp('k2setemail');
+ $mess = $email_comp->formEmail('mess_tpl_11', $mask_arr);
+
+ $headers = "Content-type: text/html; charset=utf-8 \r\n";
+ $headers .= "From: ikiss\r\n";
+ $headers .= "Bcc: noreply@ikiss.com.ua\r\n";
+ //$mailto = 'info@let-know.com';
+ $mailto2 = $k2->site->getRequisites('email');
+ $mailto = 'ae@corp2.net';
+ //$mailto3 = 'vasylyuk@corp2.net';
+ $rez=$mess;
+ $subj = 'Сообщение c сайта ikiss';
+ /*$mess = "Обратная связь от клиента.\n";
+ $mess .= "Имя: ".$k2->post('feedname')."\n"
+ . "Email: ".$k2->post('feedemail')."\n"
+ . "Сообщение: ".$k2->post('feedtextemail');*/
+
+ $k2->mail->sendMail($mailto, $subj, $mess, $headers);
+ $k2->mail->sendMail($mailto2, $subj, $mess, $headers);
+ //$k2->mail->sendMail($mailto3, $subj, $mess, $headers);
+ //$k2->mail->sendSMTPMail($mailto, $subj, $mess, $k2->post('feedemail'));
+ //$k2->mail->sendSMTPMail($mailto2, $subj, $mess, $k2->post('feedemail'));
+ //$k2->mail->sendSMTPMail($mailto3, $subj, $mess, $k2->post('feedemail'));
+ }
+
+ return $rez;
+ }
+
+ public function showModalBtn($arr = [])
+ {
+ global $k2;
+ $rez .= $this->renderJS();
+ $rez .= $this->link_tpl2;
+ $rez .= $this->modwindow;
+ return $rez;
+ }
+
+ // кнопка
+ public function showLink($arr = [])
+ {
+ global $k2;
+ //$this->setParam($arr);
+
+ $rez .= $this->renderJS();
+ $rez .= $this->link_tpl;
+
+ //всплывающее окно
+ $jqx = $k2->ins_comp('k2window');
+
+ $arr_win = [
+ 'main_div'=>'footer_feedback',
+ 'wnd_id'=>'feedback',
+ 'is_modal'=>true,
+ 'height'=>550,
+ 'width'=>450,
+ 'left'=>400,
+ 'top'=>0,
+ 'button'=>false,
+ 'wnd_body'=>'
+
+ '
+ ];
+ $rez .= $jqx->showWindow($arr_win);
+
+
+
+ return $rez;
+ }
+
+
+
+ function content()
+ {
+ global $k2;
+
+ $event = $k2->get('event');
+
+ switch ($event)
+ {
+ case "sendemail":
+ $rez = $this->sendEmail2();
+ break;
+ case "subscribe":
+ $rez = $this->addSubscribe();
+ break;
+ default:
+ $rez = $this->showLink();
+ }
+
+ return $rez;
+ }
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/components/k2form.php b/k2shop/k2shop/app/components/k2form.php
new file mode 100644
index 0000000..a784b94
--- /dev/null
+++ b/k2shop/k2shop/app/components/k2form.php
@@ -0,0 +1,2581 @@
+addToHead();
+ }
+
+
+ // Регистрирует необходимые библиотеки
+ public function addToHead(){
+ global $k2;
+
+ $k2->site->addJS('jquery.min.js',$this->phpgrid_path."js/jquery.min.js");
+ $k2->site->addCSS('select2.min.css', "/k2shop/k2shop/libs/select2/select2.min.css");
+ $k2->site->addJS('select2.min.js', "/k2shop/k2shop/libs/select2/select2.min.js");
+ $k2->site->addCSS('jqx.base.css',"/k2shop/k2shop/libs/jqwidgets/jqwidgets/styles/jqx.base.css");
+
+ $k2->site->addJS('jqxcore.js',"/k2shop/k2shop/libs/jqwidgets/jqwidgets/jqxcore.js");
+ //$k2->site->addJS('jqxloader.js',"/k2shop/k2shop/libs/jqwidgets/jqwidgets/jqxloader.js");
+ }
+
+ //устанавливаем параметры
+ public function setParam($arr)
+ {
+ foreach ($arr as $key => $value){
+ if (isset($value)){
+ $this->$key = $value;
+ }
+ }
+ }
+
+
+
+ /**
+ * Получение полей
+ * @global type $k2
+ * @param type $arr
+ * @return string
+ */
+ public function getFields($arr)
+ {
+ global $k2;
+ $rez = '';
+
+ $js_str = '';
+ $all_fields = 'allFields = $( [] )';
+
+ foreach ($arr['fields'] as $key => $value) {
+ if(trim($value['field']) !== ''){
+ $js_str .= $value['field']." = $( '#".$value['field']."'), ";
+ $all_fields .= ".add(".$value['field'].")";
+ }
+ }
+
+ $rez = $js_str.$all_fields.',';
+
+ return $rez;
+ }
+
+ /**
+ * Добавление данных в базу из формы
+ * @global type $k2
+ * @param type $add_json
+ * @return type
+ */
+ public function addData($add_json, $arr)
+ {
+ global $k2;
+
+ $rez = ['rez'=>'', 'err'=>''];
+
+ $arr_add = json_decode($add_json, true);
+
+ $arr = json_decode($arr, true);
+
+
+ $add = $arr['perm']['add'];
+
+ $k2->log->addDBLog($k2->getCurURL(), 'Додавання заявки', json_encode($arr_add, JSON_UNESCAPED_UNICODE));
+ //$is_ins = $this->permission['i'];
+
+ //генерация hash ID
+ if (!isset($arr['typeid'])||($arr['typeid'] == 1)){
+ $new_id = $this->getID();
+ $arr_keys = array_keys ($arr_add['fields']);
+ $id = $arr_keys[0];
+ $arr_add['fields'][$id] = $new_id;
+ }
+ $rez['id'] = $new_id;
+ if($add == false){
+
+ $k2->log->err('Помилка! Недостатньо прав для додавання записів'.$k2->auth->roleid);
+ $rez['err'] = 'Помилка! Недостатньо прав для додавання записів';
+ $rez = json_encode($rez);
+ return $rez;
+
+ } else {
+
+ eval($arr["before_ins"]);
+
+ $r = $k2->sql->ins_arr(
+ $arr_add
+ );
+
+ eval($arr["after_ins"]);
+
+
+ if($r['err']!==''){
+ $k2->log->err($r['err']);
+ $rez['err'] = $r['err'];
+ $rez = json_encode($rez);
+ return $rez;
+ }
+ }
+
+ $rez = json_encode($rez);
+ return $rez;
+ }
+
+ /**
+ * Проверка прав пользователя на внесение изменений
+ * @global type $k2
+ * @param type $arr
+ * @return boolean
+ */
+ function checkRights($arr)
+ {
+ global $k2;
+
+ $rez = true;
+
+ $compn = $arr['compn'];
+
+ $k2->secur->loadMenuPrav();
+
+ $arr_rights = $k2->secur->searchPrav("$compn");
+
+ if ($arr_rights['w'] !== '1'){
+ $rez=false;
+ }
+
+ if ($k2->auth->isSuperAdmin()){
+ $rez = true;
+ }
+
+ return $rez;
+ }
+
+
+ /**
+ * Проверка является ли запись редактируемой
+ */
+ function isReadOnlyField(&$arr, $fieldname)
+ {
+ $rez=true;
+
+ foreach ($arr['fields'] as $v){
+ //if ($v['field']==$fieldname or $v['alias']==$fieldname){
+ if (!isset($v['readonly'])||$v['readonly']!=true){
+ $rez=false;
+ }
+
+ //}
+ }
+
+ return $rez;
+ }
+
+
+
+ /**
+ * Редактирование данных в базе из формы
+ * @global type $k2
+ * @param type $add_json
+ * @return type
+ */
+ public function editData($edit_json, $arr)
+ {
+ global $k2;
+
+ $rez = ['rez'=>'', 'err'=>''];
+
+ $arr_edit = json_decode($edit_json, true);
+ $arr = json_decode($arr, true);
+ $set_str = '';
+
+ $qwe = $this->owner->owner->sets;
+
+ $total = count($arr_edit['fields']);
+ $counter = 0;
+
+ $edit = $arr['perm']['edit'];
+
+ //$is_wright = $this->permission['w'];
+
+ //$data = $k2->dump($arr['fields']);
+ //file_put_contents('D:\tmp\array.txt', $data);
+ $json_string = json_encode($arr_edit, JSON_UNESCAPED_UNICODE);
+ $json_string = str_replace("'", "`", $json_string);
+ $k2->log->addDBLog($k2->getCurURL(), 'Редагування заявки', $json_string);
+
+ $arr_edit2=[];
+
+ foreach ($arr_edit['fields'] as $key => $value) {
+ $counter++;
+
+ $isReaOnly=$this->isReadOnlyField($arr, $key);
+
+ if (!$isReaOnly){
+ if (trim($set_str)<>'') $set_str.=', ';
+ $set_str .= "$key=:$key";
+ /*if($counter !== $total){
+ $set_str .= ', ';
+ }*/
+
+ $arr_edit2[$key]=$value;
+ }
+ }
+
+
+
+
+ $arr_keys = array_keys ($arr_edit['fields']);
+
+ $val = $arr_edit['fields'][$arr_keys[0]];
+
+ $where = $arr_keys[0]."='".$val."'";
+
+
+ $keyId = $arr_edit['fields'][$arr_keys[0]];
+
+
+ $sql="UPDATE ".$arr_edit['table']."
+ SET $set_str
+ WHERE $where ";
+
+ if($edit == false){
+
+ $k2->log->err('Помилка! Недостатньо прав для редагування записів'.$k2->auth->roleid);
+ $rez['err'] = 'Помилка! Недостатньо прав для редагування записів';
+ $rez = json_encode($rez);
+ return $rez;
+
+ } else {
+
+ //проверка на наличие ключевого поля
+ if($keyId == '' || $keyId == NULL){
+ $k2->log->err('Помилка! Ключове поле не може бути порожнім '.$sql);
+ $rez = json_encode($rez);
+ return $rez;
+ } else {
+ $r = $k2->sql->upd(
+ $sql,
+ /*$arr_edit['fields']*/
+ $arr_edit2
+ );
+ eval($arr["on_edit"]);
+ }
+
+ //обработка ошибок
+ if($r['err']!==''){
+ $k2->log->err($r['err']);
+ $rez['err'] = $r['err'];
+ $rez = json_encode($rez);
+ return $rez;
+ }
+ }
+
+ $rez = json_encode($rez);
+
+ return $rez;
+ }
+
+ /**
+ * Вывод формы не привязанной к grid
+ * @global type $k2
+ * @param type $arr
+ * @return string
+ */
+ public function showForm($arr, $elsef = '')
+ {
+ global $k2;
+ $rez = '';
+
+ $grid=$k2->ins_comp2('k2phpgrid', $this);
+ $sess_hash = $this->getID();
+ $k2->site->addJS('jquery.min.js',$this->phpgrid_path."js/jquery.min.js");
+ $k2->site->addCSS('jquery-ui.custom.css',$this->phpgrid_path."js/themes/redmond/jquery-ui.custom.css");
+ $k2->site->addCSS('select2.min.css', "/k2shop/k2shop/libs/select2/select2.min.css");
+ $k2->site->addJS('select2.min.js', "/k2shop/k2shop/libs/select2/select2.min.js");
+ $k2->site->addCSS('jquery.timepicker.css', '//cdnjs.cloudflare.com/ajax/libs/jquery-timepicker/1.10.0/jquery.timepicker.css');
+ $k2->site->addJS('jquery.timepicker.js','//cdnjs.cloudflare.com/ajax/libs/jquery-timepicker/1.10.0/jquery.timepicker.js');
+ $k2->site->addJSEnd('jquery.datetimepicker.full.min.js', '/k2shop/k2shop/app/app/shop/k2mag/scripts/datapicker/jquery.datetimepicker.full.min.js');
+ $k2->site->addJSEnd('datapicker.js', '/k2shop/k2shop/app/app/shop/k2mag/scripts/datapicker.js');
+ $k2->site->addCSS('jqx.base.css',"/k2shop/k2shop/libs/jqwidgets/jqwidgets/styles/jqx.base.css");
+
+ $k2->site->addJS('jqxcore.js',"/k2shop/k2shop/libs/jqwidgets/jqwidgets/jqxcore.js");
+ //$k2->site->addJS('jqxloader.js',"/k2shop/k2shop/libs/jqwidgets/jqwidgets/jqxloader.js");
+ $k2->session[$sess_hash.'arr_sets'] = json_encode($arr);
+
+ if($arr['btn_hidd'] == true){
+ $btn_hidd = 'hidden';
+ }
+ $myaddscript = '';
+ if($arr['addscript']){
+ $myaddscript = $arr['addscript'];
+ }
+ $myeditscript = '';
+ if($arr['editscript']){
+ $myeditscript = $arr['editscript'];
+ }
+
+ $btn_text = '';
+ if($arr['btn_text']){
+ $btn_text = $arr['btn_text'];
+ }
+
+ $btn_class = '';
+ if($arr['btn_class']){
+ $btn_class = $arr['btn_class'];
+ }
+
+ $after_save_script = '';
+ if($arr['after_save_script']){
+ $after_save_script = $arr['after_save_script'];
+ }
+
+ $before_show_script = 'null';
+ if($arr['before_show_script']){
+ $before_show_script = $arr['before_show_script'];
+ }
+
+ $after_show_script = 'null';
+ if($arr['after_show_script']){
+ $after_show_script = $arr['after_show_script'];
+ }
+ /* $elsef='';
+ if($elsef<>''){
+ $elsef="elsef:'$elsef',";
+ }*/
+
+ $table = $arr['table'];
+ $rez .= "
+ ";
+ $rez.= "";
+ //$rez .= "";
+ //$rez.= "";
+ return $rez;
+ }
+
+
+ // форма
+ public function getForm($arr)
+ {
+ global $k2;
+ $sess = $k2->post('sess');
+ $grid = 1;
+ if($k2->get('event')=='data_add'){
+ $arr = json_decode($arr, true);
+ }
+ if (!$arr) {
+ $sess_data = $k2->session[$sess];
+ $grid = 0;
+ $arr = json_decode($sess_data, true);
+ }
+
+
+ $this->sets = $arr;
+
+ $this->setParam($arr);
+
+ $dec_arr = json_encode($arr);
+
+ $table = $arr['table'];
+
+ $after_save_script = '';
+ if($arr['after_save_script']){
+ $after_save_script = $arr['after_save_script'];
+ }
+
+ $before_show_script = 'null';
+ if($arr['before_show_script']){
+ $before_show_script = $arr['before_show_script'];
+ }
+ $after_show_script = 'null';
+ if($arr['after_show_script']){
+ $after_show_script = $arr['after_show_script'];
+ }
+ if ($k2->selfurl) {
+ $add_url = "'".$_SERVER['REQUEST_URI']."/temp/ajax/event/parent'";
+ } else {
+ $add_url = "'".$_SERVER['REQUEST_URI']."&temp=ajax&event=parent'";
+ }
+
+ $sel2 = '';
+ if ($k2->post('elsef') == '') {
+ $sel2 = " $(function(){
+ $('.select2').select2();
+ });";
+ }
+ $parent='';
+ $sq='';
+ if($arr['parent']<>''){
+ $parent = $arr['parent'];
+ $sq = $arr['sql'];
+ }
+
+
+
+ $load='Loading...';
+ $script = "
+
+ function uploadFileAjax$table(id){
+ var input = $('#'+id);
+ var fd = new FormData;
+
+ fd.append('f', input.prop('files')[0])
+ fd.append('input', id);
+ fd.append('path', input.attr('atr-path'));
+ //console.log(fd)
+ var file=$('.f'+id+':eq(1)').html()+'
не вдалось завантажити файл!!!';
+ $('.f'+id+':eq(1)').html('$load');
+
+ $.ajax({
+ url: '/?comp=k2form&temp=ajax&event=uploadfileajax&mode=admin',
+ type: 'post',
+ data: fd,
+ cache:false,
+ contentType: false,
+ processData: false,
+ success: function(rez){
+ rez = JSON.parse(rez)
+ if(rez.re==1){
+ $('#fileext').val(rez.fileext);
+ $('#md5_file').val(rez.md5_file);
+ $('#typefileid').val(rez.typefileid);
+ $('#datecreate').val(rez.datecreate);
+
+ $('.f'+id+':eq(1)').html(rez.input);
+ }else{
+ $('.f'+id+':eq(1)').html(file);
+ }
+
+ }
+ });
+ }
+
+ $sel2
+
+ $( function() {
+ var dialog$table, form,
+
+ ".$this->getFields($arr)."
+
+ tips = $( '.validateTips' );
+
+ function updateTips( t ) {
+ tips
+ .text( t )
+ .addClass( 'ui-state-highlight' );
+ setTimeout(function() {
+ tips.removeClass( 'ui-state-highlight', 1500 );
+ }, 500 );
+ }
+
+ function checkLength( o, n, min, max ) {
+
+ if ( o.val().length > max || o.val().length < min ) {
+ o.addClass( 'ui-state-error' );
+ updateTips( n );
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ function checkSelectLength( o, n) {
+ var id = o.attr('id');
+
+ var texts = $('#'+id+' :selected').html();
+
+ if ( o.val() === null || texts.indexOf('---------------') + 1 || texts == '' ) {
+ o.addClass( 'ui-state-error' );
+ updateTips( n );
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ function checkRegexp( o, regexp, n ) {
+ var regex = new RegExp(regexp);
+ if ( !( regex.test( o.val() ) ) ) {
+ o.addClass( 'ui-state-error' );
+ updateTips( n );
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ function reverse_date (str) {
+ return str.split('.').reverse().join('.');
+ }
+
+ function reverse_datetime (str1) {
+ var str = str1.split(' ');
+ var rez = reverse_date(str[0]);
+ var strsum = rez + ' ' + str[1];
+ return strsum;
+ }
+
+
+ function addData$table() {
+ var valid = true;
+ allFields.removeClass( 'ui-state-error' );
+
+ if ( valid ) {
+ add_data = {};
+
+ add_data.table = '$table';
+
+ add_data.fields = {};
+
+
+
+ $( 'div#$this->form_id$table input' ).each(function( index ) {
+
+
+ if($(this).prop('required')){
+ valid = valid && checkLength( $(this), 'Заповніть поле', 1, 150 );
+
+ }
+
+ var minlength = $(this).attr('minlength');
+ var maxlength = $(this).attr('maxlength');
+
+
+ if (typeof minlength !== typeof undefined && minlength !== false) {
+ valid = valid && checkLength( $(this), 'Довжина значення повинна бути від ' + minlength + ' до ' + maxlength + ' символів', minlength, maxlength);
+ }
+
+ if (typeof maxlength !== typeof undefined && maxlength !== false) {
+ valid = valid && checkLength( $(this), 'Довжина значення повинна бути від ' + minlength + ' до ' + maxlength + ' символів', minlength, maxlength);
+ }
+
+ var regexp = $(this).attr('regexp');
+ if (typeof regexp !== typeof undefined && regexp !== false) {
+ valid = valid && checkRegexp( $(this), regexp, 'Поле заповнене не вірно');
+ }
+
+ if( $( this ).hasClass('book')||$( this ).hasClass('select2-offscreen')||$( this ).hasClass('select2-input')||($( this ).is(':radio')&&(!$(this).is(':checked')))){
+
+ } else {
+ var key = $( this ).attr('id');
+ var value = $( this ).val();
+ if ( $( this ).hasClass('datepick') ) {
+ if($(this).prop('required')){
+ valid = valid && checkLength( $(this), 'Заповніть поле', 6, 150 );
+ }
+ var value = reverse_date(value);
+ //console.log(value);
+ }
+ if ( $( this ).hasClass('datepick') || $( this ).hasClass('timepick') || $( this ).hasClass('datetimepick') ) {
+ if(value == ''){
+ value = '0000-00-00';
+ } else {
+ if ( $( this ).hasClass('datetimepick') ) {
+ if($(this).prop('required')){
+ valid = valid && checkLength( $(this), 'Заповніть поле', 6, 150 );
+ }
+ var value = reverse_datetime(value);
+ //console.log(value);
+ }
+ }
+ }
+ if ($( this ).is(':radio')) {
+ //var val = '';
+ var key = $( this ).attr('name');
+ if( $(this).is(':checked') ){
+ var val = $(this).val();
+ console.log(key+val);
+ }
+ console.log(key+val);
+ }
+ var type = $( this ).attr('type');
+
+ if(type == 'checkbox'){
+ if ( $( this ).prop( 'checked' ) ){
+ var value = 1;
+ } else {
+ var value = 0;
+ }
+
+ }
+
+ add_data.fields[key] = value;
+
+ console.log(add_data);
+ }
+
+ });
+
+
+ $( 'div#$this->form_id$table textarea' ).each(function( index ) {
+ if($(this).prop('required')){
+ valid = valid && checkLength( $(this), 'Заповніть поле - Вид аналізування', 1, 1500 );
+ }
+ if( $( this ).hasClass('book')||$( this ).hasClass('select2-offscreen')||$( this ).hasClass('select2-input')){
+
+ } else {
+ var key = $( this ).attr('id');
+ var value = $( this ).val();
+
+ var type = $( this ).attr('type');
+
+
+ add_data.fields[key] = value;
+ }
+ });
+
+ $('div#$this->form_id$table select.select2').each(function( index ) {
+ if($(this).prop('required')){
+ valid = valid && checkSelectLength( $(this), 'Заповніть поле', 1, 1500 );
+ }
+ if( $( this ).hasClass('book')){
+
+ } else {
+ var key = $( this ).attr('id');
+ var value = $( this ).val();
+
+ if($( this ).hasClass('multi')){
+ // console.log('edit15');
+ // console.log(value);
+ //var value = JSON.stringify(value);
+ if(value){
+ var value = value.join(',');
+ }
+ }
+
+ add_data.fields[key] = value;
+ }
+
+ })
+
+ //console.log(valid);
+ //console.log(JSON.stringify(add_data));
+ if ( valid ) {
+ dialog$table.dialog( 'close' );
+ $.ajax({
+ url: '/?comp=k2form&temp=ajax&event=add&mode=admin',
+ type: 'POST',
+ data: { add_json: JSON.stringify(add_data), sess:'$sess' },
+ success: function(res){
+
+ try {
+
+ var result = JSON.parse(res);
+
+ } catch (error) {
+
+ $('#err').html(error);
+
+ alert_dialog$table.dialog( 'open' );
+ alert_dialog$table.dialog( {height:200, width:300} );
+
+ }
+ //console.log(result.id)
+ child = '$parent'
+ if(child!==''){
+ chForm( child, result.id, \" $sq \", 400)
+ }
+
+ if(result.err.indexOf('SQLSTATE') + 1) {
+ var err = result.err.substring(27,520);
+ }else{
+ var err = result.err;
+ }
+
+ if (err !== ''){
+ $('#err').html(err);
+
+ alert_dialog$table.dialog( 'open' );
+ alert_dialog$table.dialog( {height:200, width:300} );
+ }
+
+ //console.log(err);
+ //dialog$table.dialog( 'close' );
+ $('#$table').jqGrid().trigger('reloadGrid');
+
+ }
+ });
+ }
+
+
+ }
+
+
+ return valid;
+ }
+
+
+
+ function uploadFile$table(path){
+ var input = document.getElementById('actimg');
+
+ var formdata = false;
+ if (window.FormData) {
+ formdata = new FormData();
+ }
+ var i = 0, len = input.files.length, close, img, reader, file, text, total_size = 0;
+
+ file = input.files[0];
+ console.log(file);
+
+ var filename = file.name;
+
+ filearr = filename.split('.');
+ console.log(filearr);
+ var ext = filearr[1];
+ console.log(ext);
+ if ( (ext == 'png') || (ext == 'jpg') || (ext == 'jpeg') || (ext == 'PNG') || (ext == 'JPG') || (ext == 'JPEG') ) {
+ startUpload(file, len, path);
+ } else {
+
+ }
+
+ }
+
+
+
+ function startUpload$table(file, len, path){
+ console.log(file);
+ if ( window.FileReader ) {
+ if(len==1){
+ reader = new FileReader();
+ reader.onloadend = function (e) {
+ TransferCompleteCallback(e.target.result);
+ };
+ }
+ var formdata = false;
+ if (window.FormData) {
+ formdata = new FormData();
+ }
+ formdata.append('files[]', file);
+ formdata.append('path', path);
+
+ $.ajax({
+
+ url: '/?comp=k2form&temp=ajax&event=upload&mode=admin',
+ type: 'POST',
+ data: formdata,
+ processData: false,
+ contentType: false, // this is important!!!
+ success: function (res, xhr){
+ console.log(formdata);
+ }
+ });
+ }
+ }
+
+ function editData$table() {
+
+ var valid = true;
+ allFields.removeClass( 'ui-state-error' );
+
+ if ( valid ) {
+ add_data = {};
+
+ add_data.table = '$table';
+
+ add_data.fields = {};
+
+ $( 'div#$this->form_id$table input' ).each(function( index ) {
+
+// if($(this).prop('required')){
+// valid = valid && checkLength( $(this), this, 1, 150 );
+// }
+
+ var minlength = $(this).attr('minlength');
+ var maxlength = $(this).attr('maxlength');
+
+
+ if (typeof minlength !== typeof undefined && minlength !== false) {
+ valid = valid && checkLength( $(this), 'Довжина значення повинна бути від ' + minlength + ' до ' + maxlength + ' символів', minlength, maxlength);
+ }
+
+ if (typeof maxlength !== typeof undefined && maxlength !== false) {
+ valid = valid && checkLength( $(this), 'Довжина значення повинна бути від ' + minlength + ' до ' + maxlength + ' символів', minlength, maxlength);
+ }
+
+ var regexp = $(this).attr('regexp');
+ if (typeof regexp !== typeof undefined && regexp !== false) {
+ valid = valid && checkRegexp( $(this), regexp, 'Поле заповнене не вірно');
+ }
+
+ if( $( this ).hasClass('book')||$( this ).hasClass('select2-offscreen')||$( this ).hasClass('select2-input')||($( this ).is(':radio')&&(!$(this).is(':checked')))){
+
+ } else {
+ var key = $( this ).attr('id');
+ var value = $( this ).val();
+ if ( $( this ).hasClass('datepick') ) {
+// if($(this).prop('required')){
+// valid = valid && checkLength( $(this), 'Заповніть поле', 6, 150 );
+// }
+ var value = reverse_date(value);
+ }
+ if ( $( this ).hasClass('datepick') || $( this ).hasClass('timepick') || $( this ).hasClass('datetimepick') ) {
+ if(value == ''){
+ value = '0000-00-00';
+
+ } else {
+ if ( $( this ).hasClass('datetimepick') ) {
+// if($(this).prop('required')){
+// valid = valid && checkLength( $(this), 'Заповніть поле', 6, 150 );
+// }
+ var value = reverse_datetime(value);
+ //console.log(value);
+ }
+ }
+ }
+ var type = $( this ).attr('type');
+
+ if(type == 'file'){
+
+ if (this.files[0] === undefined || this.files[0] === null) {
+ console.log(this);
+ } else {
+ var upload_dir = $( this ).attr('atr-path');
+ var value = upload_dir + this.files[0].name;
+ uploadFile(upload_dir);
+ }
+ }
+ if(type == 'radio'){
+ var val = '';
+ var key = $( this ).attr('name');
+
+
+ if( $('input[name=\''+key+'\']').is(':checked') ){
+ var val = $('input[name=\''+key+'\']').val();
+
+ }
+ //console.log(val);
+ }
+ if(type == 'checkbox'){
+ if ( $( this ).prop( 'checked' ) ){
+ var value = 1;
+ } else {
+ var value = 0;
+ }
+ }
+ add_data.fields[key] = value;
+ }
+ });
+
+ $( 'div#$this->form_id$table textarea' ).each(function( index ) {
+ if($(this).prop('required')){
+ valid = valid && checkLength( $(this), 'Заповніть поле - Вид аналізування', 1, 1500 );
+
+ }
+ if( $( this ).hasClass('book')||$( this ).hasClass('select2-offscreen')||$( this ).hasClass('select2-input')){
+
+ } else {
+ var key = $( this ).attr('id');
+ var value = $( this ).val();
+
+ var type = $( this ).attr('type');
+
+
+ add_data.fields[key] = value;
+ }
+ });
+
+ $('div#$this->form_id$table select.select2').each(function( index ) {
+// if($(this).prop('required')){
+// valid = valid && checkSelectLength( $(this), 'Заповніть поле', 1, 1500 );
+// }
+ if( $( this ).hasClass('book')){
+
+ } else {
+ var key = $( this ).attr('id');
+ var imp = $( this ).attr('imp');
+ var value = $( this ).val();
+ if(imp == '1'){
+ var value = $( '#'+key+' :selected').html();
+
+ }
+
+ if($( this ).hasClass('multi')){
+ //console.log('edit14');
+ //console.log(value);
+ //var value = JSON.stringify(value);
+ if(value){
+ var value = value.join(',');
+ }
+ }
+ //console.log(key+value);
+ add_data.fields[key] = value;
+ }
+ })
+ console.log(add_data);
+
+ if ( valid ) {
+ dialog$table.dialog( 'close' );
+ $.ajax({
+ url: '/?comp=k2form&temp=ajax&event=edit&mode=admin',
+ type: 'POST',
+ data: { edit_json: JSON.stringify(add_data), sess:'$sess'},
+ success: function(res){
+ try {
+ var result = JSON.parse(res);
+
+ } catch (error) {
+ $('#err').html(error);
+ alert_dialog$table.dialog( 'open' );
+ alert_dialog$table.dialog( {height:200, width:300} );
+ }
+ if(result.err.indexOf('SQLSTATE') + 1) {
+ var err = result.err.substring(27,120);
+ }else{
+ var err = result.err;
+ }
+
+ if (err !== ''){
+ $('#err').html(err);
+
+ alert_dialog$table.dialog( 'open' );
+ alert_dialog$table.dialog( {height:200, width:300} );
+ }
+ //console.log(err);
+ //dialog$table.dialog( 'close' );
+ $('#$table').jqGrid().trigger('reloadGrid');
+ }
+ });
+ }
+ }
+ return valid;
+ }
+
+ $( '#dialog$table' ).dialog({
+ autoOpen: false,
+ height: '375',
+ width: '450',
+ //position: { my: 'center center', at: 'center center' },
+ show: {
+ effect: 'blind',
+ duration: 100
+ },
+ hide: {
+ effect: 'blind',
+ duration: 100
+ },
+ close: function() {
+ $( '#dialog$table' ).dialog( 'close' );
+ },
+ resize: function( event, ui ) {
+ //console.log(ui.size.width);
+ var inp_wdth = ui.size.width - 70;
+ $('.search').width(inp_wdth);
+ $('.search_ul').width(inp_wdth - 38);
+ $('.search_li').width(inp_wdth - 61);
+ }
+
+ });
+ $( '.opener' ).unbind().on( 'click', function() {
+ $( '#dialog$table' ).dialog( 'open' );
+ var pos = $( this ).offset();
+ //$( '#dialog$table' ).offset(pos);
+ //console.log($( this ).offset());
+
+ });
+
+ jQuery( '.datepick' ).datepicker({
+ showOtherMonths: true,
+ /*selectOtherMonths: true,*/
+ showAnim: 'clip',
+ dateFormat: 'dd.mm.yy',
+ /*minDate: 1,*/
+ maxDate: '31.12.2050',
+ /*changeMonth: true,*/
+ /*changeYear: true */
+ showOn: 'button',
+ inline: true,
+ language: 'ua',
+ changeYear: true,
+ changeMonth: true,
+ //buttonImage: 'images/calendar.gif',
+ //buttonImageOnly: true,
+ //buttonText: 'Оберіть дату'
+ });
+ $.datepicker.regional['ua'] = {
+ monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
+ 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'],
+ monthNamesShort: ['Січ.','Лют.','Бер.','Кві.','Тра.','Черв.',
+ 'Лип.','Серп.','Вер.','Жовт.','Лист.','Груд.'],
+ dayNames: ['Неділя','Понеділок','Вівторок','Середа','Четвер','П`ятниця','Субота'],
+ dayNamesShort: ['Нед.','Пон.','Вівт.','Сер.','Четв.','П`ятн.','Суб.'],
+ dayNamesMin: ['Н','П','В','С','Ч','П','С'],
+ firstDay: 1,
+ };
+ $.datepicker.setDefaults($.datepicker.regional['{lang}']);
+
+
+ jQuery( function() {
+ $('.timepick').timepicker({ 'timeFormat': 'H:m' });
+ } );
+
+ jQuery( function() {
+ $('.datetimepick').datetimepicker({
+ format:'Y.m.d H:i',
+ });
+ } );
+
+ dialog$table = $( '#$this->form_id$table' ).dialog({
+ autoOpen: false,
+ height: $this->form_height,
+ width: $this->form_width,
+ modal: $this->form_ismodal,
+
+ close: function() {
+ form[ 0 ].reset();
+ allFields.removeClass( 'ui-state-error' );
+ dialog$table.remove();
+ $( '#dialog$table' ).dialog( 'close' );
+ }
+ });
+
+ alert_dialog$table = $( '#alert_dialog$table' ).dialog({
+ autoOpen: false,
+ height: 75,
+ width: 250,
+ modal: $this->form_ismodal,
+ close: function() {
+ form[ 0 ].reset();
+ allFields.removeClass( 'ui-state-error' );
+ dialog$table.remove();
+ }
+ });
+
+ form = dialog$table.find( 'form' ).on( 'submit', function( event ) {
+ event.preventDefault();
+ });
+
+ $( '#$this->call_add_id$table' ).button().on( 'click', function() {
+ if ($('#$table').length > 0) {
+ var param = $('#$table').getGridParam();
+ //console.log('#$this->call_add_id$table')
+ //console.log(param);
+ if (param !== undefined) {
+ asd = param.url.split('&');
+ for (i = 0; i < asd.length; i++) {
+ var str = asd[i];
+ if(str.indexOf('rowid') + 1) {
+ var row = asd[i].split('=');
+ var rowid = row[1];
+ }
+
+ }
+ //console.log(rowid);
+ }
+
+ }
+
+
+ dialog$table.dialog( 'open' );
+ dialog$table.dialog(
+ {
+
+ 'buttons' :
+ {
+ 'save' : {
+ class: 'fm-button ui-state-default ui-corner-all save-btn',
+ icon: 'ui-icon-heart',
+ text: '{save}',
+ click: function() {
+ addData$table();
+ //dialog.dialog('destroy');
+ $after_save_script
+ },
+
+ },
+ 'cancel' : {
+ class: 'fm-button ui-state-default ui-corner-all',
+ text: '{cancel}',
+ click: function() {
+ dialog$table.dialog( 'close' );
+ },
+ },
+ }
+ });
+ $( '.tbl$table' ).each(function( index ) {
+ var col = $(this).attr('col');
+ var row = $(this).attr('row');
+
+ $('table#formtable$table tr:eq('+row+') td:eq('+col+')').html(this);
+
+ });
+
+ $( 'div#$this->form_id$table td' ).each(function( index ) {
+ var colspan = $(this).children().attr('colspan');
+ $(this).attr('colspan', colspan);
+ if ($(this).hasClass('brd_btm')) {
+ console.log($(this))
+ }
+ });
+ $( 'div.brd_btm' ).each(function( index ) {
+
+ $(this).closest('tr').addClass('brd_btmtr');
+
+ });
+
+ $('.masterid').val(rowid);
+ dialog$table.keypress(function(e) {
+ if (e.keyCode == $.ui.keyCode.ENTER) {
+ var el = $('.opener');
+ if (!el.is(':focus')){
+ $('.save-btn').click();
+ }
+ }
+ });
+ $after_show_script
+ });
+
+ //редактирование
+ $( '#$this->call_edit_id"."$table' ).button().on( 'click', function() {
+ var check = $before_show_script;
+ if (check == 0) {
+ console.log(check);
+ return;
+ }
+ var selr = $('#$table').jqGrid('getGridParam','selrow', 'activation');
+ var ret = $('#$table').jqGrid('getRowData', selr);
+ var param = $('#$table').getGridParam();
+ if (param !== undefined) {
+ asd = param.url.split('&');
+ for (i = 0; i < asd.length; i++) {
+ var str = asd[i];
+ if(str.indexOf('rowid') + 1) {
+ var row = asd[i].split('=');
+ var rowid = row[1];
+ }
+
+ }
+ //console.log(rowid);
+ }
+
+ if($.isEmptyObject(ret)){
+ alert_dialog$table.dialog( 'open' );
+ }else{
+ dialog$table.dialog( 'open' );
+ dialog$table.dialog({'buttons' :
+ {
+ 'save' : {
+ class: 'fm-button ui-state-default ui-corner-all save-btn',
+ text: '{save}',
+ click: function() {
+ editData$table();
+ $after_save_script
+ },
+ },
+ 'cancel' : {
+ class: 'fm-button ui-state-default ui-corner-all',
+ text: '{cancel}',
+ click: function() {
+ dialog$table.dialog( 'close' );
+ },
+ },
+ }
+ });
+ $( '.tbl$table' ).each(function( index ) {
+ var col = $(this).attr('col');
+ var row = $(this).attr('row');
+ $('table#formtable$table tr:eq('+row+') td:eq('+col+')').html(this);
+
+ });
+
+ $( 'div#$this->form_id$table td' ).each(function( index ) {
+ var colspan = $(this).children().attr('colspan');
+ $(this).attr('colspan', colspan);
+ });
+ $( 'div.brd_btm' ).each(function( index ) {
+
+ $(this).closest('tr').addClass('brd_btmtr');
+
+
+ });
+ $( 'div#$this->form_id$table input' ).each(function( index ) {
+ var key = $( this ).attr('id');
+ if( $( this ).hasClass('is_change') || $( this ).is(':file')){
+ //console.log(this);
+ } else {
+ $( this ).val(ret[key]);
+ }
+
+ //console.log(key+ret[key]);
+ });
+
+
+ $( 'div#$this->form_id$table textarea' ).each(function( index ) {
+ var key = $( this ).attr('id');
+ if( $( this ).hasClass('is_change')){
+
+ } else {
+ $( this ).val(ret[key]);
+ }
+
+ });
+
+ $( 'div#$this->form_id$table input[type=\'file\']' ).each(function( index ) {
+ //$( this ).val(123);
+ });
+ $( 'div#$this->form_id$table input[type=\'radio\']' ).each(function( index ) {
+ var key = $( this ).attr('name');
+ //console.log(ret[key]);
+ $('input[name=\''+key+'\'][value=\''+ret[key]+'\']').prop('checked',true);
+
+ });
+ $( 'div#$this->form_id$table input[type=\'checkbox\']' ).each(function( index ) {
+ var key = $( this ).attr('id');
+ var is_check = $( this ).val();
+ if (is_check == 1){
+ $( this ).attr('checked', true);
+ }
+ });
+ $('select.select2').each(function( index ) {
+ var key = $( this ).attr('id');
+ var elem = $('.'+key).val();
+ var arg = $( this ).attr('arg');
+ if(arg !== 'sel'){
+ $('#'+key+' :contains(\''+elem+'\')').first().attr('selected', 'selected');
+ $('#'+key+' [value=\''+ret[key]+'\']').attr('selected', 'selected');
+ if (ret[key] == undefined){
+ var vlue = $('#'+key+'').val();
+ //$('#'+key+'').trigger('change');
+ $('#'+key+'').select2('val', vlue);
+ if (elem == '') {
+ $('#'+key+'').select2('val', elem);
+ }
+ } else {
+ //$('#'+key+'').val(''+ret[key]+'').trigger('change');
+ $('#'+key+'').select2('val', ret[key]);
+ }
+
+ }
+ if($( this ).hasClass('multi')){
+ console.log('werwer12');
+ console.log(ret[key]);
+ selarr = ret[key].split(',');
+ console.log(selarr);
+ //var arr = $.map(ret[key], function(el) { return el });
+ //var selarr = JSON.parse(selarr);
+ //console.log(typeof selarr);
+ $( this ).select2('val', selarr).trigger('change');
+ }
+
+ });
+ $('.masterid').val(rowid);
+ dialog$table.keypress(function(e) {
+ if (e.keyCode == $.ui.keyCode.ENTER) {
+ var el = $('.opener');
+ if (!el.is(':focus')){
+ //$('.save-btn').click();
+ }
+ }
+ });
+ }
+ $after_show_script
+ });
+ });
+ function autocomplet(arg, ident, alias, rel, min_length = 0) {
+
+ var keyword = $('#from_id'+ident).val();
+ if(rel !== ''){
+ var relation = $('#'+rel).val();
+ var linkname = rel;
+ }
+ //console.log(arg+ident+alias+rel);
+ if (keyword.length > min_length) {
+ $.ajax({
+ url: '".$k2->domain()."'+'/?comp=k2autocomplite&temp=ajax&event=search&mode=admin',
+ type: 'POST',
+ data: {keyword:keyword, sql: arg, alias:alias, linkname:linkname, relation:relation},
+ success:function(data){
+ $('#search_id'+ident).show();
+ $('#search_id'+ident).html(data);
+ }
+ });
+ } else {
+ $('#search_id'+ident).hide();
+ }
+ var blocksPerRow = 1;
+
+ $('.book').unbind().on('keydown', function(e){
+
+ var thisIndex = $('.hovers').index();
+ var newIndex = 0;
+ if(e.keyCode === 38) {
+ // up
+ newIndex = thisIndex - blocksPerRow;
+ }
+ else if(e.keyCode === 40) {
+ // down
+ newIndex = thisIndex + blocksPerRow;
+ }
+ else if(e.keyCode === 13) {
+ $( '.hovers' ).click();
+ return false;
+ }
+ //newIndex = newIndex;
+ if(newIndex !== null) {
+ $('.cross').eq(newIndex).addClass('hovers').siblings().removeClass('hovers');
+ }
+ });
+
+ }
+
+ function showAll(checkid, from_id, sql, name, alias_name, relation){
+ if($('#'+checkid+'').is(':checked')){
+ $('#'+from_id+'').val('***');
+ autocomplet(sql, name, alias_name, relation);
+ $('#dialog$table').attr('');
+ } else {
+ $('#'+from_id+'').val('');
+ autocomplet(sql, name, alias_name, relation);
+ }
+
+ }
+
+ function set_item(item, id, ident, alias, name) {
+ if(alias !== ''){
+ ident = alias;
+ }
+ var funconchange = $('#'+name).attr('onchange');
+ eval(funconchange);
+ console.log(item+id+ident+alias+name);
+ $('#from_id'+ident).val(item);
+ $('#search_id'+ident).hide();
+ $('#search_id'+ident).html(' ');
+ //console.log(alias);
+ $('#'+ident+' [value=\''+id+'\']').attr('selected', 'selected');
+ $('#'+ident+' ').val(id);
+ $('.'+alias+'').val(item);
+ $('#from_id'+ident).val('');
+ $('#from_id'+ident).hide();
+ $( '#dialog$table' ).dialog( 'close' );
+ }
+
+
+ function chForm( child, id, sql, width){
+
+
+
+ $.ajax({
+ type: 'POST',
+ url: '/?comp=k2form&temp=ajax&event=form&mode=admin',
+ data: { child:child, sql:sql, id:id, width:width},
+ cache: false,
+ success: function(res){
+ $('div.'+child).html(res);
+
+ //console.log(item);
+ }
+ });
+
+ }
+
+ function chSel(parent, child, sql, width){
+ var id = $('select[name=\"'+parent+'\"]').val();
+
+ var child_arr = child.split(', ');
+ var sql_arr = sql.split('|');
+ child_arr.forEach(function(item, i, child_arr) {
+ if(child_arr.length==sql_arr.length){
+ sql=sql_arr[i]
+ }
+ if (id == '') {
+ var sql_full = sql.split(' where');
+ sql = sql_full[0];
+ }
+ $.ajax({
+ type: 'POST',
+ url: '/?comp=k2form&temp=ajax&event=select&mode=admin',
+ data: {parent:parent, child:item, sql:sql, id:id, width:width},
+ cache: false,
+ success: function(res){
+ $('div.'+item).html(res);
+ //console.log(item);
+ }
+ });
+
+ });
+
+
+ }
+
+ function chRadio(el, parent, child, sql, width){
+ var id = el.val();
+ var child_arr = child.split(', ');
+ var sql_arr = sql.split('|');
+ child_arr.forEach(function(item, i, child_arr) {
+ if(child_arr.length==sql_arr.length){
+ sql=sql_arr[i]
+ }
+ if (id == '') {
+ var sql_full = sql.split(' where');
+ sql = sql_full[0];
+ }
+ $.ajax({
+ type: 'POST',
+ url: '/?comp=k2form&temp=ajax&event=select&mode=admin',
+ data: {parent:parent, child:item, sql:sql, id:id, width:width},
+ cache: false,
+ success: function(res){
+ $('div.'+item).html(res);
+ //console.log(item);
+ }
+ });
+
+ });
+
+
+ }
+
+ function childField(parent, child, sql, width){
+ var id = $('select[name=\"'+parent+'\"]').val();
+
+ $.ajax({
+ type: 'POST',
+ url: '/?comp=k2form&temp=ajax&event=select&mode=admin',
+ data: {parent:parent, child:child, sql:sql, id:id, width:width},
+ cache: false,
+ success: function(res){
+
+ $('div.'+child).html(res);
+
+ }
+ });
+ }
+
+ function setChild(child){
+ var parents = $('#'+child).attr('parent-fields');
+
+ var arr_parents = parents.split(',');
+
+ var funcname = $('#'+child).attr('parent-funcname');
+ parents_obj = {};
+ for (var i = 0; i < arr_parents.length; i++) {
+ var key = arr_parents[i].trim();
+ var value = $('#'+key).val();
+ parents_obj[key] = value;
+ }
+ parentSet(parents_obj, child, funcname);
+ }
+
+ function parentSet(parents, child, funcname) {
+ //console.log(parents);
+ $.ajax({
+ url: $add_url,
+ type: 'POST',
+ data: {parents_json:JSON.stringify(parents), funcname:funcname},
+ success: function(res){
+ //console.log(res);
+ $('#'+child).val(res);
+ }
+ });
+ }
+
+
+ function beforeShowForm(fieldid, funcname) {
+ //console.log(parents);
+ $.ajax({
+ url: $add_url,
+ type: 'POST',
+ data: {fieldid:fieldid, funcname:funcname},
+ success: function(res){
+ //console.log(res);
+ $('#'+fieldid).val(res);
+ }
+ });
+ }
+
+ function checkDuble(viewel, selel){
+
+ var eq1 = $('#'+selel).val();
+ var eq2 = $('#'+viewel).val();
+ if(eq1 == eq2){
+ setTimeout(function(){ $('#'+selel).val(null).trigger('change'); }, 300);
+ }
+
+ }
+
+ function cleanBook (arg) {
+ $('.'+arg).val('');
+ $('#'+arg).val('');
+ }
+ function fillField(arg, elem){
+
+ let data = arg.select2('data');
+
+ selstr = '';
+ for (let i = 0; i < data.length; i++) {
+ console.log( data[i].text );
+ selstr = selstr + ' ' + data[i].text + ';';
+ }
+ $('#'+elem).val(selstr);
+ }
+
+ function initAutocomplete() {
+
+ //var input = document.getElementById('mesto');
+ //var searchBox = new google.maps.places.SearchBox(input);
+ autocomplete = new google.maps.places.Autocomplete(
+ /// @type {!HTMLInputElement}
+ (document.getElementById('mesto')),
+ {componentRestrictions: {country: 'ua'}}
+ );
+ autocomplete.addListener('place_changed', function() {
+ var place = autocomplete.getPlace();
+ // var latitude = place.geometry.location.lat();
+ // var longitude = place.geometry.location.lng();
+ // document.getElementById('lat').value = latitude;
+ // document.getElementById('lng').value = longitude;
+ });
+
+
+
+ }
+ ";
+ //$k2->site->addJavaScriptEnd($this->form_id, $script);
+ $rez = "';
+
+ for ($tr=1; $tr<=$rows; $tr++){
+ $rez .= '
';
+
+ $rez .= '';
+ for ($td=1; $td<=$cols; $td++){
+ $rez .= ' ';
+ }
+
+
+
+ $rez .= '';
+ }
+ $rez .= '
+ {pages}
+
+ '; // Шаблон для группы
+
+ public $temp_el='{caption}'; // Template for items (Шаблон для элементов)
+ public $temp_act='{caption}'; // The pattern of the active element (Шаблон активного элемента)
+ public $temp_empty='...'; // The pattern of the empty element (Шаблон пустого элемента)
+
+ public $mainurl=''; // Address, which is put in front page (Адрес, который ставится перед странице)
+
+ public $is_ajax = false;
+ public $setpage_func = '';
+
+ public $max_kol = 0; // Maximum number of items (Максимальное количество элементов)
+ public $kol_page = 21; // Number of items per page (Количество элементов на странице)
+
+ // Get the previous page (Получение предыдущей страницы)
+ function getPrior(){
+ global $k2;
+
+ $rez=$this->getCurPage();
+
+ if (($rez-1)>=1){
+ $rez=$rez-1;
+ }
+
+ return $rez;
+ }
+
+ // Preparation of the next page (Получение следующей страницы)
+ function getNext(){
+ global $k2;
+
+ $rez=$this->getCurPage();
+
+ if (($rez+1)<=$this->getMaxPages()){
+ $rez=$rez+1;
+ }
+
+ return $rez;
+
+ }
+ // Preparation of the first page (Получение первой страницы)
+ function getFirst(){
+ global $k2;
+ $rez=1;
+
+ return $rez;
+
+ }
+ // Preparation of the end page (Получение последней страницы)
+ function getEnd(){
+ global $k2;
+
+ $rez=$this->getMaxPages();
+
+ return $rez;
+
+ }
+
+ // Returns the current page (Возвращает текущую страницу)
+ function getCurPage(){
+ global $k2;
+
+ $rez=$k2->get('page');
+
+ if ($rez==''){
+ $rez=1;
+ }
+
+ return $rez;
+
+ }
+
+ // Returns the top of the page for the SQL query (Возвращает начало страницы для SQL запроса)
+ function getPos(){
+ return ($this->getCurPage()-1)*$this->kol_page;
+ }
+
+
+ // Calculation of the maximum number of pages (Подсчет максимального количества страниц)
+ function getMaxPages(){
+ global $k2;
+ return ceil(($this->max_kol/$this->kol_page));
+ }
+
+ // Output of bread crumbs (Вывод хлебной крошки)
+ function getPages(){
+ global $k2;
+ $rez=$this->temp_group;
+
+ // Fill the main tag (Заполняем главные теги)
+ $rez=str_replace('{prior}', $k2->surl->SefURL_FromURL($this->mainurl.'&page='.$this->getPrior()), $rez);
+ $rez=str_replace('{next}', $k2->surl->SefURL_FromURL($this->mainurl.'&page='.$this->getNext()), $rez);
+ $rez=str_replace('{first}', $k2->surl->SefURL_FromURL($this->mainurl.'&page='.$this->getFirst()), $rez);
+ $rez=str_replace('{endpage}', $k2->surl->SefURL_FromURL($this->mainurl.'&page='.$this->getEnd()), $rez);
+
+ $kolpages=$this->getMaxPages();
+
+ if ($kolpages<=1){
+ return '';
+ }
+
+ $pagestr='';
+ $cur=$this->getCurPage();
+ for ($i = 1; $i <= $kolpages; $i++) {
+ if($kolpages>5){
+ if ($i==$cur){
+ $el = $this->temp_act;
+ }else if($i==1 or $i==$kolpages or $i==$cur+1 or $i==$cur-1 or $i==2 or $i==$kolpages-1){
+ $el = $this->temp_el;
+ }else if( $i==$cur+2 or $i==$cur-2){
+ $el = $this->temp_empty;
+ }else{
+ $el ='';
+ }
+ //$el = $this->temp_empty;
+ if ($this->is_ajax){
+ $el = str_replace('{onclick}', $this->setpage_func.'('.$i.')', $el);
+ $el = str_replace('{url}', 'javascript:void(0)', $el);
+ } else {
+ $el = str_replace('{onclick}', '', $el);
+ $el = str_replace('{url}', $k2->surl->SefURL_FromURL($this->mainurl.'&page='.$i), $el);
+ }
+
+ $el = str_replace('{caption}', $i, $el);
+ }else{
+ if ($i==$cur){
+ $el = $this->temp_act;
+ }else{
+ $el = $this->temp_el;
+ }
+ if ($this->is_ajax){
+ $el = str_replace('{onclick}', $this->setpage_func.'('.$i.')', $el);
+ $el = str_replace('{url}', 'javascript:void(0)', $el);
+ } else {
+ $el = str_replace('{onclick}', '', $el);
+ $el = str_replace('{url}', $k2->surl->SefURL_FromURL($this->mainurl.'&page='.$i), $el);
+ }
+
+ $el = str_replace('{caption}', $i, $el);
+ }
+ $pagestr .= $el;
+
+ }
+
+ $rez = str_replace('{pages}', $pagestr, $rez);
+
+
+ return $rez;
+ }
+
+
+ // Returns content (Возвращает контент)
+ function content(){
+ $rez=$this->getPages();
+ return $rez;
+ }
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/components/k2phpgrid.php b/k2shop/k2shop/app/components/k2phpgrid.php
new file mode 100644
index 0000000..3d3e412
--- /dev/null
+++ b/k2shop/k2shop/app/components/k2phpgrid.php
@@ -0,0 +1,39 @@
+
+inc('phpgrid_obj');
+
+
+class k2phpgrid extends phpgrid_obj{
+
+ public $events = [];
+
+
+ // Displays table (Выводит таблицу)
+ function simpleTable($arr, $is_render=true){
+
+ $events = $this->events;
+
+ $rez=$this->render($arr, $is_render, $events);
+
+ return $rez;
+ }
+
+
+
+
+
+}
+
diff --git a/k2shop/k2shop/app/components/k2popup.php b/k2shop/k2shop/app/components/k2popup.php
new file mode 100644
index 0000000..815d5d8
--- /dev/null
+++ b/k2shop/k2shop/app/components/k2popup.php
@@ -0,0 +1,205 @@
+
+ /* Базовые стили слоя затемнения и модального окна */
+ .overlay {
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ /* фон затемнения */
+ background-color: rgba(0, 0, 0, 0.65);
+ position: fixed; /* фиксированное поцизионирование */
+ cursor: default; /* тип курсара */
+ }
+ /* активируем слой затемнения */
+ .overlay:target {
+ display: block;
+ }
+ /* стили модального окна */
+ .popup {
+ /*top: 5% !important;*/
+ right: 0;
+ left: 50%;
+ font-size: 14px;
+ z-index: 1940;
+ margin: 0;
+ /*width: 85%;*/
+ min-width: 220px;
+ max-width: 100%;
+ overflow: scroll;
+ max-height: 600px;
+
+ /* фиксированное позиционирование, окно стабильно при прокрутке */
+ position: fixed;
+ padding: 15px;
+ border: 1px solid #383838;
+ background: #fefefe;
+ /* скругление углов */
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ border-radius: 4px;
+ font: 14px/18px "Tahoma", Arial, sans-serif;
+ /* внешняя тень */
+ -webkit-box-shadow: 0 15px 20px rgba(0,0,0,.22),0 19px 60px rgba(0,0,0,.3);
+ -moz-box-shadow: 0 15px 20px rgba(0,0,0,.22),0 19px 60px rgba(0,0,0,.3);
+ -ms-box-shadow: 0 15px 20px rgba(0,0,0,.22),0 19px 60px rgba(0,0,0,.3);
+ box-shadow: 0 15px 20px rgba(0,0,0,.22),0 19px 60px rgba(0,0,0,.3);
+ -webkit-transform: translate(-50%, -500%);
+ -ms-transform: translate(-50%, -500%);
+ -o-transform: translate(-50%, -500%);
+ transform: translate(-50%, -500%);
+ -webkit-transition: -webkit-transform 0.6s ease-out;
+ -moz-transition: -moz-transform 0.6s ease-out;
+ -o-transition: -o-transform 0.6s ease-out;
+ transition: transform 0.6s ease-out;
+ }
+ /* активируем модальный блок */
+ .overlay:target+.popup {
+ -webkit-transform: translate(-50%, 0);
+ -ms-transform: translate(-50%, 0);
+ -o-transform: translate(-50%, 0);
+ transform: translate(-50%, 0);
+ top: 10%;
+ }
+ /* формируем кнопку закрытия */
+ .close1 {
+ opacity: 1;
+ top: 20px;
+ right: 20px;
+ width: 20px;
+ height: 20px;
+ position: absolute;
+ padding: 0;
+ border: 2px solid #ccc;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ -ms-border-radius: 15px;
+ -o-border-radius: 15px;
+ border-radius: 15px;
+ background-color: rgba(61, 61, 61, 0.8);
+ -webkit-box-shadow: 0px 0px 10px #000;
+ -moz-box-shadow: 0px 0px 10px #000;
+ box-shadow: 0px 0px 10px #000;
+ text-align: center;
+ text-decoration: none;
+ font-weight: bold;
+ font-size: 14px;
+ -webkit-transition: all ease .8s;
+ -moz-transition: all ease .8s;
+ -ms-transition: all ease .8s;
+ -o-transition: all ease .8s;
+ transition: all ease .8s;
+ }
+ .close1:before {
+ color: rgba(255, 255, 255, 0.9);
+ content: "X";
+ text-shadow: 0 -1px rgba(0, 0, 0, 0.9);
+ font-size: 14px;
+ }
+ .close1:hover {
+ background-color: rgba(252, 20, 0, 0.8);
+ opacity: 1;
+ }
+ /* изображения внутри окна */
+ .popup img {
+ width: 100%;
+ height: auto;
+ }
+ /* миниатюры слева/справа */
+ .pic-left,
+ .pic-right {
+ width: 25%;
+ height: auto;
+ }
+ .pic-left {
+ float: left;
+ margin: 5px 15px 5px 0;
+ }
+ .pic-right {
+ float: right;
+ margin: 5px 0 5px 15px;
+ }
+ .popup h2 { /* заголовок 2 */
+ margin: 0;
+ color: #008000;
+ padding: 5px 0px 10px;
+ text-align: left;
+ text-shadow: 1px 1px 3px #adadad;
+ font-weight: 500;
+ font-size: 1.4em;
+ font-family: "Tahoma", Arial, sans-serif;
+ line-height: 1.3;
+ }
+ /* параграфы */
+ .popup p {margin: 0; padding: 5px 0}
+
+
+
+
+ ';
+ /**
+ * Показывает всплывающее окно с указанным контентом
+ * @global type $k2
+ * @return type
+ */
+ function showPopup() {
+
+ global $k2;
+
+ // Выводим всплывающее окно
+ $rez = $this->popUp;
+
+ // Присваеваем ID
+ $rez=str_replace('{popupId}', $this->popUpID, $rez);
+
+ // Выводим в окне нужную форму
+ $rez=str_replace('{Form}', $this->popupContent, $rez);
+
+ return $rez;
+ }
+
+ function content() {
+
+ global $k2;
+
+ /*if (!$rez = $k2->auth->isAdmin()) {
+ die('У Вас нет прав редактировать данный текст!!!');
+
+ }*/
+
+ $rez = $this->showPopup();
+
+ return $rez;
+ }
+
+ function show() {
+ echo $this->content();
+ }
+
+}
diff --git a/k2shop/k2shop/app/components/k2popup_menu.php b/k2shop/k2shop/app/components/k2popup_menu.php
new file mode 100644
index 0000000..678d0ab
--- /dev/null
+++ b/k2shop/k2shop/app/components/k2popup_menu.php
@@ -0,0 +1,131 @@
+addToHead();
+ }
+
+
+ // Регистрирует необходимые библиотеки
+ public function addToHead(){
+ global $k2;
+
+ $k2->site->addJS('jquery.ui.position.min.js',"//cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.6.2/jquery.ui.position.min.js");
+ $k2->site->addJS('jquery.contextMenu.min.js',"//cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.6.2/jquery.contextMenu.min.js");
+
+ $k2->site->addCSS('jquery.contextMenu.css',"//cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.6.2/jquery.contextMenu.css");
+ }
+
+ //устанавливаем параметры
+ public function setParam($arr)
+ {
+ foreach ($arr as $key => $value){
+ if (isset($value)){
+ $this->$key = $value;
+ }
+ }
+ if (!empty($this->items)){
+ $this->item = '';
+ $cnt_sep = 1;
+ foreach ($this->items as $value) {
+
+ $sep = substr($value['command'], 0, 3);
+
+ if($sep == 'sep'){
+ $this->item .= $this->insSeparator($cnt_sep);
+ $cnt_sep++;
+ } else {
+ $this->item .= $this->insItem($value);
+ }
+ }
+ }
+ }
+
+ /**
+ * Вставка разделителя
+ * @param type $cnt_sep
+ * @return string
+ */
+ public function insSeparator($cnt_sep)
+ {
+ $rez = "'sep".$cnt_sep."': '---------', ";
+ return $rez;
+ }
+
+ /**
+ * Вставка пункта меню
+ * @param type $value
+ * @return type
+ */
+ public function insItem($value)
+ {
+ $rez = "
+ '".$value['command']."':{
+ name: '".$value['name']."',
+ icon: '".$value['icon']."',
+ callback: function(itemKey, opt, rootMenu, originalEvent) {".$value['callback']."},
+ disabled: ".$value['disabled']."
+ }, ";
+ //перевод
+ $rez=str_replace('{lnSaveSettings}', $this->Translate("{lnSaveSettings}"), $rez);
+ $rez=str_replace('{lnResetSettings}', $this->Translate("{lnResetSettings}"), $rez);
+ $rez=str_replace('{lnLookSql}', $this->Translate("{lnLookSql}"), $rez);
+ $rez=str_replace('{lnRefreshFilter}', $this->Translate("{lnRefreshFilter}"), $rez);
+ return $rez;
+ }
+
+
+ /**
+ *
+ * @global type $k2
+ * @param type $arr
+ * @return string
+ */
+ public function showContMenu($arr)
+ {
+ global $k2;
+ $this->setParam($arr);
+
+ $script = "
+ $(function(){
+ $this->script_before;
+ $.contextMenu({
+ selector: '$this->selector',
+ trigger: 'right',
+ callback: $this->callback_func,
+ items: {
+ $this->item
+ }
+ });
+ })
+ ";
+
+ $k2->site->addJavaScript($this->selector, $script);
+
+ $rez = "";
+ return $rez;
+ }
+
+ function content(){
+ global $k2;
+ $rez = $this->showContMenu();
+ return $rez;
+ }
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/components/k2portfolio.php b/k2shop/k2shop/app/components/k2portfolio.php
new file mode 100644
index 0000000..981740e
--- /dev/null
+++ b/k2shop/k2shop/app/components/k2portfolio.php
@@ -0,0 +1,419 @@
+{head}';
+
+ public $portf_desc = '".$this->caption."
+ +You can bet cash and RPs. All prizes will be instantly added to your account.
+ + +You can bet cash and RPs. All prizes will be instantly added to your account.
+ + +| Games | +Member | +N of plays | +Total Bets | +Payouts | +Portfolio Revenues | +
|---|---|---|---|---|---|
| ".$row['games_name']." | +".$row['player']." | +".$row['num_plays']." | +".$row['total_bets']." | +".$row['payouts']." | +".$revenue." | +
| Games | +Member | +N of plays | +Total Bets | +Payouts | +RP Issued/Consumed | +
|---|---|---|---|---|---|
| ".$row['games_name']." | +".$row['player']." | +".$row['num_plays']." | +".$row['total_bets']." | +".$row['payouts']." | +".$revenue." | +
8hC+MnBlcWbFXw+C+>PyfGd=qzD%BBD>gPzBsxz3l_ Заказ отправлен. Будет ввод информации о клиенте. На сайт {site} были добавлены новые вакансии@lM~~vqxn;F1rxaX?wS4z
z0sj6*&gLbd#A%(^SMrr09{h>5EXB%r>B7b-+*Tyb&vcA~Sh66b4Q$G(`>3<+;MB1o
zW6BD
";
+
+ foreach ($k2->db->query($sql) as $row) {
+ $val1->addItem($row["emoneyvalname"],$row["emoneyvalid"],array("image"=>$row["iconname"]),($selected_val1==$row["emoneyvalid"]));
+ }
+
+
+
+ // Валюту в которую обмениваем
+ $selected_val2 = null;
+ if($k2->post("val2_selectedValue")<>'')
+ {
+ $selected_val2 = $k2->post("val2_selectedValue");
+ }
+
+
+ $val2 = new KoolComboBox("val2");
+ $val2->scriptFolder = $k2->kool->KoolControlsFolder."/KoolComboBox";
+ $val2->styleFolder='default';
+ $val2->width = "220px";
+
+ $val2->itemTemplate = "{text}
";
+
+
+// if($selected_val2!=null)
+// {
+ foreach ($k2->db->query($sql) as $row) {
+ $val2->addItem($row["emoneyvalname"],$row["emoneyvalid"],array("image"=>$row["iconname"]),($selected_val2==$row["emoneyvalid"]));
+// }
+
+ }
+
+
+ // Переменные через Post
+ $ValNum1='';
+ $ValNum2='';
+ $ckCommision='';
+
+ if ($k2->post("ValNum1")<>'') {
+ $ValNum1 = $k2->post("ValNum1");
+ }
+
+ if ($k2->post("ValNum2")<>'') {
+ $ValNum2 = $k2->post("ValNum2");
+ }
+
+
+ if ($k2->post("ckCommision")<>'') {
+ $ckCommision = $k2->post("ckCommision");
+ }
+
+
+
+
+
+ $kurs_arr=array(
+ 'val1' => $selected_val1,
+ 'val2' => $selected_val2,
+ 'num1' => $ValNum1,
+ 'num2' => $ValNum2,
+ 'commision' => $ckCommision
+ );
+
+
+ $k=$this->calcKursVal($kurs_arr);
+
+ $kurs_label='';
+ if (isset($k)){
+ $sum1=$k['sumval1'];
+ $sum2=$k['sumval2'];
+
+ $kurs_label="Курс обмена: ".$sum1." ".$k['valname1']." = ".$sum2." ".$k['valname2'];
+
+ if (($sum1<>0)and($sum2<>0)){
+ $ValNum2=$ValNum1/$sum1*$sum2;
+ }
+
+ // Учитываю наценку
+ if ($ckCommision=='1' && $this->nacenk<>0){
+ $ValNum2=((100+$this->nacenk)/100)*$ValNum2;
+ }
+
+ $ValNum2=round($ValNum2, 2);
+
+ }
+
+
+
+
+ $myform_manager->Init();
+
+
+ ob_start();
+
+
+ ?>
+
+
+
+
+ show_val_table();
+ return $rez;
+ }
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/k2obmennik_val.php b/k2shop/k2shop/app/deleted/obmen/k2obmennik/k2obmennik_val.php
new file mode 100644
index 0000000..f1050d3
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/k2obmennik_val.php
@@ -0,0 +1,56 @@
+ins_comp('k2grid');
+
+ $arr = array(
+
+ 'select' => "select valid, valname, sokrname from k2_obmen_val",
+ 'update' => "update k2_obmen_val set valname='@valname', sokrname='@sokrname' where valid=@valid",
+ 'delete' => "delete from k2_obmen_val where valid=@valid",
+ 'insert' => "insert into k2_obmen_val (valname, sokrname) values ('@valname', '@sokrname')",
+ 'fields' => array(
+ array('field' => 'valname',
+ 'caption' => $this->Translate("{lnCurrencyName}")
+ ),
+ array('field' => 'sokrname',
+ 'caption' => $this->Translate("{lnAbbreviation}")
+ )
+ )
+
+ );
+
+ $rez = $grid->simpleTable($arr);
+
+
+ return $rez;
+ }
+
+
+ // Возвращаем контент
+ function content(){
+ $rez=$this->show_val_table();
+ return $rez;
+ }
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/k2obmennik_zak.php b/k2shop/k2shop/app/deleted/obmen/k2obmennik/k2obmennik_zak.php
new file mode 100644
index 0000000..2f617ae
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/k2obmennik_zak.php
@@ -0,0 +1,379 @@
+db->query($sql) as $value) {
+ $arr[$value['emoneyvalid']] = $value['emoneyvalname'];
+ }
+
+ return $arr;
+
+ }
+
+
+ // Заполняем массив статусов
+ function getStatus(){
+
+ global $k2;
+
+ $sql = "select s.k2statid, s.statname
+ from k2_status_zak s
+ order by s.k2statid";
+
+
+ $arr=array();
+
+ foreach ($k2->db->query($sql) as $value) {
+ $arr[$value['k2statid']] = $value['statname'];
+ }
+
+ return $arr;
+
+ }
+
+
+
+ // Вывод таблицы справочника валют
+ function show_val_table($isReadonly=false){
+
+ global $k2;
+
+ $platsys=$this->getPlatSys();
+
+
+ $grid=$k2->ins_comp('k2grid');
+
+ $arr = array(
+
+ 'filtering' => true,
+ 'scroll' => true,
+ 'width' => '1200px',
+
+ 'ReadOnly' => $isReadonly,
+
+ 'master_width' => '1000px',
+ 'master_height' => '600px',
+
+ 'column_number' => 2,
+ 'input_focus' => 'HideGrid',
+
+
+ 'select' => "select z.k2obmzak1, z.emoneyvalid1, z.emoneyvalid2, z.sumobmen, z.username, z.obmenna, z.datezak,
+ z.comment, z.fam, z.im, z.otch, z.schet_from, z.schet_to, z.commision, z.status, z.sumobmento, z.email, z.phone
+ from k2_obmen_zakaz z
+ ",
+
+ 'update' => "update k2_obmen_zakaz
+ set emoneyvalid1='@emoneyvalid1', emoneyvalid2='@emoneyvalid2', sumobmen='@sumobmen', username='@username', obmenna='@obmenna', comment='@comment',
+ fam='@fam', im='@im', otch='@otch', schet_from='@schet_from', schet_to='@schet_to', commision='@commision', status='@status', sumobmento='@sumobmento', datezak='@datezak',
+ email='@email', phone='@phone'
+ where k2obmzak1='@k2obmzak1'",
+
+ 'delete' => "delete from k2_obmen_zakaz where k2obmzak1='@k2obmzak1'",
+
+ 'insert' => "insert into k2_obmen_zakaz (emoneyvalid1, emoneyvalid2, sumobmen, username, obmenna, datezak, comment, fam, im, otch, schet_from, schet_to, commision, status, sumobmento, email, phone)
+ values ('@emoneyvalid1', '@emoneyvalid2', '@sumobmen', '@username', '@obmenna', '@datezak', '@comment', '@fam', '@im', '@otch', '@schet_from', '@schet_to',
+ '@commision', '@status', '@sumobmento', '@email', '@phone' );",
+
+ 'fields' => array(
+ array('field' => 'k2obmzak1',
+ 'caption' => 'ID',
+ 'width' => '50px',
+ 'readonly' => true
+ ),
+
+ array('field' => 'datezak',
+ 'caption' => $this->Translate("{lnDate}"),
+ 'type_field' => 'DateTime',
+ 'width' => '100px'
+ ),
+
+
+
+ array('field' => 'emoneyvalid1',
+ 'caption' => $this->Translate("{lnGive}"),
+ 'type_field' => 'DropDown',
+ 'width' => '90px',
+ 'values' => $platsys
+ ),
+
+
+
+
+ array('field' => 'sumobmen',
+ 'caption' => $this->Translate("{lnGive}"),
+ 'width' => '90px'
+ ),
+ array('field' => 'schet_from',
+ 'caption' => $this->Translate("{lnFromAccount}"),
+ 'width' => '90px'
+ ),
+
+
+
+ array('field' => 'emoneyvalid2',
+ 'caption' => $this->Translate("{lnPay}"),
+ 'type_field' => 'DropDown',
+ 'width' => '90px',
+ 'values' => $platsys
+ ),
+
+
+
+ array('field' => 'sumobmento',
+ 'caption' => $this->Translate("{lnGet}"),
+ 'width' => '90px'
+ ),
+ array('field' => 'schet_to',
+ 'caption' => $this->Translate("{lnOnAccount}"),
+ 'width' => '90px'
+ ),
+
+ array('field' => 'commision',
+ 'caption' => $this->Translate("{lnCommissionIncluded}"),
+ 'width' => '75px'
+ ),
+
+
+ array('field' => 'username',
+ 'caption' => $this->Translate("{lnUser}"),
+ 'width' => '120px',
+ 'readonly' => true
+ ),
+
+ array('field' => 'fam',
+ 'caption' => $this->Translate("{lnSurname}"),
+ 'width' => '100px'
+ ),
+ array('field' => 'im',
+ 'caption' => $this->Translate("{lnName}"),
+ 'width' => '100px'
+ ),
+
+ array('field' => 'otch',
+ 'caption' => $this->Translate("{lnMiddleName}"),
+ 'width' => '100px'
+ ),
+
+
+
+ array('field' => 'email',
+ 'caption' => 'E-mail',
+ 'width' => '100px'
+ ),
+
+
+ array('field' => 'phone',
+ 'caption' => $this->Translate("{lnPhone}"),
+ 'width' => '100px'
+ ),
+
+
+ array('field' => 'comment',
+ 'caption' => $this->Translate("{lnNote}"),
+ 'width' => '120px'
+ ),
+
+
+ array('field' => 'status',
+ 'caption' => $this->Translate("{lnStatus}"),
+ 'type_field' => 'DropDown',
+ 'width' => '75px',
+ 'values' => $this->getStatus()
+ )
+
+
+
+
+
+ )
+
+ );
+
+ $rez = $grid->simpleTable($arr);
+
+
+ return $rez;
+ }
+
+
+
+ // Вывод сайта в публичной части, в личном кабинете пользователя (с фильтрацией по заданному пользователю)
+ function show_public(){
+
+ global $k2;
+
+ $platsys=$this->getPlatSys();
+
+
+ $grid=$k2->ins_comp('k2grid');
+
+ $arr = array(
+
+ 'filtering' => false,
+ 'scroll' => true,
+ 'width' => '600px',
+
+ 'ReadOnly' => true,
+
+
+ 'master_width' => '600px',
+ 'master_height' => '400px',
+
+
+ 'select' => "select z.k2obmzak1, z.emoneyvalid1, z.emoneyvalid2, z.sumobmen, z.username, z.obmenna, z.datezak,
+ z.comment, z.fam, z.im, z.otch, z.schet_from, z.schet_to, z.commision, z.status, z.sumobmento, z.email, z.phone
+ from k2_obmen_zakaz z
+ where username='".$k2->auth->login."'
+ ",
+
+ 'update' => "",
+
+ 'delete' => "",
+
+ 'insert' => "",
+
+ 'fields' => array(
+
+ array('field' => 'status',
+ 'caption' => $this->Translate("{lnStatus}"),
+ 'type_field' => 'DropDown',
+ 'width' => '75px',
+ 'values' => $this->getStatus()
+ ),
+
+
+ array('field' => 'datezak',
+ 'caption' => $this->Translate("{lnDate}"),
+ 'type_field' => 'DateTime',
+ 'width' => '80px'
+ ),
+
+
+
+ array('field' => 'emoneyvalid1',
+ 'caption' => $this->Translate("{lnPaymentCurrency}"),
+ 'type_field' => 'DropDown',
+ 'width' => '90px',
+ 'values' => $platsys
+ ),
+
+
+
+
+ array('field' => 'sumobmen',
+ 'caption' => $this->Translate("{lnPaymentAmount}"),
+ 'width' => '90px'
+ ),
+ array('field' => 'schet_from',
+ 'caption' => 'Со счета',
+ 'width' => '90px'
+ ),
+
+
+
+ array('field' => 'emoneyvalid2',
+ 'caption' => $this->Translate("{lnReceptionCurrency}"),
+ 'type_field' => 'DropDown',
+ 'width' => '90px',
+ 'values' => $platsys
+ ),
+
+
+
+ array('field' => 'sumobmento',
+ 'caption' => $this->Translate("{lnReceptionAmount}"),
+ 'width' => '90px'
+ ),
+ array('field' => 'schet_to',
+ 'caption' => $this->Translate("{lnOnAccount}"),
+ 'width' => '90px'
+ ),
+
+ array('field' => 'commision',
+ 'caption' => $this->Translate("{lnCommissionIncluded}"),
+ 'width' => '75px'
+ ),
+
+
+
+ array('field' => 'fam',
+ 'caption' => $this->Translate("{lnSurname}"),
+ 'width' => '100px'
+ ),
+ array('field' => 'im',
+ 'caption' => $this->Translate("{lnName}"),
+ 'width' => '100px'
+ ),
+
+ array('field' => 'otch',
+ 'caption' => $this->Translate("{lnMiddleName}"),
+ 'width' => '100px'
+ ),
+
+
+
+ array('field' => 'email',
+ 'caption' => 'E-mail',
+ 'width' => '100px'
+ ),
+
+
+ array('field' => 'phone',
+ 'caption' => $this->Translate("{lnPhone}"),
+ 'width' => '100px'
+ ),
+
+
+ array('field' => 'comment',
+ 'caption' => $this->Translate("{lnNote}"),
+ 'width' => '120px'
+ )
+
+
+ )
+
+ );
+
+ $rez = $grid->simpleTable($arr);
+
+
+ return $rez;
+
+ }
+
+
+ // Возвращаем контент
+ function content(){
+ $rez=$this->show_val_table();
+ return $rez;
+ }
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik/en.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik/en.csv
new file mode 100644
index 0000000..e8befb5
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik/en.csv
@@ -0,0 +1,9 @@
+name| value
+lnPersonalArea| Personal Area
+lnMyAccount| My Account
+lnExchangerAdmin| Exchanger Admin
+lnOrders| Orders
+lnBonuses| Bonuses
+lnCurrencyExchange| Currency exchange
+lnPaymentSystems| Payment systems
+lnCurrency| Currency
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik/ru.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik/ru.csv
new file mode 100644
index 0000000..a8be28f
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik/ru.csv
@@ -0,0 +1,9 @@
+name|value
+lnPersonalArea| Личный кабинет
+lnMyAccount| Мои данные
+lnExchangerAdmin| Обменник Админ
+lnOrders| Заказы
+lnBonuses| Бонусы
+lnCurrencyExchange| Курсы обмена
+lnPaymentSystems| Платежные системы
+lnCurrency| Валюты
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik/ua.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik/ua.csv
new file mode 100644
index 0000000..70e584c
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik/ua.csv
@@ -0,0 +1,9 @@
+name| value
+lnPersonalArea| Особистий кабінет
+lnMyAccount| Мої дані
+lnExchangerAdmin| Обмінник Адмін
+lnOrders| Замовлення
+lnBonuses| Бонуси
+lnCurrencyExchange| Курси обміну
+lnPaymentSystems| Платіжні системи
+lnCurrency| Валюти
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_emoney/en.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_emoney/en.csv
new file mode 100644
index 0000000..ef867fe
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_emoney/en.csv
@@ -0,0 +1,10 @@
+name| value
+lnPaymentSystems| Payment systems
+lnPaymentSystem| Payment system
+lnIcon| Icon
+lnCurrency| Currency
+lnNameSystemCurrency| Name System/Currency
+lnUSDollar| U.S. dollar
+lnGrivna| Grivna
+lnRussianRuble| Russian ruble
+lnEuro| Euro
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_emoney/ru.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_emoney/ru.csv
new file mode 100644
index 0000000..48be523
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_emoney/ru.csv
@@ -0,0 +1,10 @@
+name|value
+lnPaymentSystems| Платежные системы
+lnPaymentSystem| Платежная система
+lnIcon| Иконка
+lnCurrency| Валюта
+lnNameSystemCurrency| Название система/валюта
+lnUSDollar| Доллар США
+lnGrivna| Гривна
+lnRussianRuble| Российский рубль
+lnEuro| Евро
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_emoney/ua.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_emoney/ua.csv
new file mode 100644
index 0000000..aeaec6e
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_emoney/ua.csv
@@ -0,0 +1,10 @@
+name| value
+lnPaymentSystems| Платіжні системи
+lnPaymentSystem| Платіжна система
+lnIcon| Іконка
+lnCurrency| Валюта
+lnNameSystemCurrency| Назва система / валюта
+lnUSDollar| Долар США
+lnGrivna| Гривня
+lnRussianRuble| Російський рубль
+lnEuro| Євро
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_kurs/en.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_kurs/en.csv
new file mode 100644
index 0000000..cc9a0ce
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_kurs/en.csv
@@ -0,0 +1,5 @@
+name| value
+lnCurrency1| Currency 1
+lnCurrency2| Currency 2
+lnCurrencyAmount1| Currency Amount 1
+lnCurrencyAmount2| Currency Amount 2
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_kurs/ru.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_kurs/ru.csv
new file mode 100644
index 0000000..5f2c006
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_kurs/ru.csv
@@ -0,0 +1,5 @@
+name|value
+lnCurrency1| Валюта 1
+lnCurrency2| Валюта 2
+lnCurrencyAmount1| Сумма валюты 1
+lnCurrencyAmount2| Сумма валюты 2
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_kurs/ua.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_kurs/ua.csv
new file mode 100644
index 0000000..9abe599
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_kurs/ua.csv
@@ -0,0 +1,5 @@
+name| value
+lnCurrency1| Валюта 1
+lnCurrency2| Валюта 2
+lnCurrencyAmount1| Сума валюти 1
+lnCurrencyAmount2| Сума валюти 2
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_pubkursobmen/en.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_pubkursobmen/en.csv
new file mode 100644
index 0000000..7cd6abd
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_pubkursobmen/en.csv
@@ -0,0 +1,5 @@
+name| value
+lnFromCurrency| From Currency
+lnInCurrency| In Currency
+lnRates1| Rates 1
+lnRates2| Rates 2
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_pubkursobmen/ru.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_pubkursobmen/ru.csv
new file mode 100644
index 0000000..b58cad7
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_pubkursobmen/ru.csv
@@ -0,0 +1,5 @@
+name|value
+lnFromCurrency| Из валюты
+lnInCurrency| В валюту
+lnRates1| Курс 1
+lnRates2| Курс 2
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_pubkursobmen/ua.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_pubkursobmen/ua.csv
new file mode 100644
index 0000000..d48a494
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_pubkursobmen/ua.csv
@@ -0,0 +1,5 @@
+name| value
+lnFromCurrency| Із валюти
+lnInCurrency| У валюту
+lnRates1| Курс 1
+lnRates2| Курс 2
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_val/en.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_val/en.csv
new file mode 100644
index 0000000..07aa426
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_val/en.csv
@@ -0,0 +1,3 @@
+name| value
+lnCurrencyName| Currency name
+lnAbbreviation| Abbreviation
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_val/ru.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_val/ru.csv
new file mode 100644
index 0000000..198d00a
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_val/ru.csv
@@ -0,0 +1,3 @@
+name|value
+lnCurrencyName| Название валюты
+lnAbbreviation| Сокращенное название
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_val/ua.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_val/ua.csv
new file mode 100644
index 0000000..17be8a9
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_val/ua.csv
@@ -0,0 +1,3 @@
+name| value
+lnCurrencyName| Назва валюти
+lnAbbreviation| Скорочена назва
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_zak/en.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_zak/en.csv
new file mode 100644
index 0000000..24317d5
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_zak/en.csv
@@ -0,0 +1,19 @@
+name| value
+lnDate| Date
+lnGive| Give
+lnFromAccount| From account
+lnPay| Pay
+lnGet| Get
+lnOnAccount| On account
+lnCommissionIncluded| Commission included
+lnUser| User
+lnSurname| Surname
+lnName| Name
+lnMiddleName| Middle name
+lnPhone| Phone
+lnNote| Note
+lnStatus| Status
+lnPaymentCurrency| Payment currency
+lnPaymentAmount| Payment amount
+lnReceptionCurrency| Reception currency
+lnReceptionAmount| Reception amount
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_zak/ru.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_zak/ru.csv
new file mode 100644
index 0000000..69cd21d
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_zak/ru.csv
@@ -0,0 +1,19 @@
+name|value
+lnDate| Дата
+lnGive| Отдают
+lnFromAccount| Со счета
+lnPay| Платят
+lnGet| Получают
+lnOnAccount| На счет
+lnCommissionIncluded| Коммисия включена
+lnUser| Пользователь
+lnSurname| Фамилия
+lnName| Имя
+lnMiddleName| Отчество
+lnPhone| Телефон
+lnNote| Примечание
+lnStatus| Статус
+lnPaymentCurrency| Валюта оплаты
+lnPaymentAmount| Сумма оплаты
+lnReceptionCurrency| Валюта получения
+lnReceptionAmount| Сумма получения
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_zak/ua.csv b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_zak/ua.csv
new file mode 100644
index 0000000..00a801d
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/obmen/k2obmennik/lng/k2obmennik_zak/ua.csv
@@ -0,0 +1,19 @@
+name| value
+lnDate| Дата
+lnGive| Віддають
+lnFromAccount| З рахунку
+lnPay| Платять
+lnGet| Отримують
+lnOnAccount| На рахунок
+lnCommissionIncluded| Комісія включена
+lnUser| Користувач
+lnSurname| Прізвище
+lnName| Ім'я
+lnMiddleName| По батькові
+lnPhone| Телефон
+lnNote| Примітка
+lnStatus| Статус
+lnPaymentCurrency| Валюта оплати
+lnPaymentAmount| Сума оплати
+lnReceptionCurrency| Валюта отримання
+lnReceptionAmount| Сума отримання
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/rcc/rcc/check.sql b/k2shop/k2shop/app/deleted/rcc/rcc/check.sql
new file mode 100644
index 0000000..5e9e00b
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/rcc/rcc/check.sql
@@ -0,0 +1,35 @@
+/********************************************************/
+/* Восстановление RP и балансов в таблице пользователей */
+/********************************************************/
+
+/* Поиск некорректностей */
+select FROM_UNIXTIME(max(date)), max(date), FROM_UNIXTIME(min(date)), min(date)
+from `balance-history`
+where amount=0 and type='RP' and balance<=1
+ and description = 'RP Transfer'
+ and date>=1472690000;
+
+
+
+/* Вьювер балансов на заданную дату */
+CREATE VIEW mybalance
+AS
+
+select u.id userid as userid, u.login, max(b.id) as max_balans_id,
+ (select balance from `balance-history` bh where bh.id=max(b.id) ) as mybalanse
+from users u
+
+ left join `balance-history` b
+ on u.id=b.USER
+
+where b.date<1472691762
+ and type='RP'
+group by u.id, u.login
+;
+
+
+
+/* Обновление балансов пользователей */
+update users
+set RP=RP+(select mybalanse from mybalance where userid=id);
+
diff --git a/k2shop/k2shop/app/deleted/rcc/rcc/rc_clear.php b/k2shop/k2shop/app/deleted/rcc/rcc/rc_clear.php
new file mode 100644
index 0000000..b282b4e
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/rcc/rcc/rc_clear.php
@@ -0,0 +1,272 @@
+check_connect();
+ }
+
+
+ // Initialize the main directory (Инициализация основных каталогов)
+ function iniMain(){
+ global $k2;
+ echo "Create backaup directory \n";
+ $this->run_cmd('mkdir /backup/');
+ }
+
+
+ // It performs the command line (Выполняет командную строку)
+ function run_cmd($cmd){
+ if ($this->debug==1){
+ echo $cmd."\n\n";
+ }else{
+ exec($cmd);
+ }
+ }
+
+ // The command creates the structure of a given file (Команда создает структуру заданного файла)
+ function saveStructure($tablename, $filename){
+ global $k2;
+
+ echo "Delete structure for $tablename \n";
+ $this->run_cmd( "rm /backup/".$tablename."_struct.sql" );
+
+ echo "Create structure for $tablename \n";
+ $this->run_cmd( "mysqldump --no-data --user=".$k2->user." --password=".$k2->pass." ".$k2->dbname." $tablename >$filename" );
+ }
+
+
+ // This command creates a backup of the specified table (Команда создает бекап заданной таблицы)
+ function backupTable($tablename, $filename){
+ global $k2;
+
+ echo "Create backup table for $tablename \n";
+ $this->run_cmd( "mysqldump --user=".$k2->user." --password=".$k2->pass." ".$k2->dbname." $tablename >$filename" );
+ }
+
+
+ // It executes the SQL script (Выполняет SQL скрипт)
+ function execScript($sql){
+ global $k2;
+
+ try{
+
+ if ($this->debug==1){
+ echo "sql: $sql\n\n";
+ }else{
+ echo "$sql\n".$k2->db->exec($sql)."\n";
+
+ }
+
+ }catch(PDOException $e) {
+ echo "Error Run Script: ".$e->getMessage()."\n";
+ }
+
+ }
+
+
+ // It executes the SQL script Select (Выполняет SQL скрипт с Select)
+ function selectScript($sql){
+ global $k2;
+
+ try{
+
+ if ($this->debug==1){
+ echo "sql: $sql\n\n";
+ }else{
+ echo "$sql\n".$k2->db->query($sql)."\n";
+
+ }
+
+ }catch(PDOException $e) {
+ echo "Error Run Select Script: ".$e->getMessage()."\n";
+ }
+
+ }
+
+
+ // This command deletes the table and restore from backup (Команда удаляет таблицу и восстанавливает из бекапа)
+ function dropAndRestoreTable($tablename, $filename){
+ global $k2;
+
+ // Deleting a table (Удаление таблицы)
+ echo "Drop table of $tablename\n";
+ $this->execScript('drop table '.$tablename);
+
+ echo "Restore table of $tablename\n";
+ $this->run_cmd( "mysql -u ".$k2->user." -p".$k2->pass." ".$k2->dbname." < $filename" );
+
+ }
+
+ // Returns the name of the structure file (Возвращает название файла со структурой)
+ function getStructFileName($tablename){
+ return "/backup/".$tablename."_struct.sql";
+ }
+
+ // Returns the name of the backup file (Возвращает название файла бакапа)
+ function getBackupFileName($tablename){
+ return "/backup/".$tablename."_".date("Y_m_d-H_m_s").".sql";
+ }
+
+
+ // Struture command creates the specified file, creates a backup of the specified table,
+ // table to delete the job and restores its backup satellite structure (Команда создает
+ // струтуру заданного файла, создает бекап заданной таблицы, удаляет заданую таблицу и восстанавливает её исз бекапа структуры)
+ function fullClearTable($tablename){
+ global $k2;
+
+ $structname=$this->getStructFileName($tablename);
+ $bacupname=$this->getBackupFileName($tablename);
+
+ echo "Name struct filename=$structname\n";
+ echo "Name backup filename=$bacupname\n";
+
+
+ $this->iniMain();
+ $this->saveStructure($tablename, $structname);
+ $this->backupTable($tablename, $bacupname);
+
+ // Удаляем таблицу и восстанавливаем - если сделались бекапы
+ if (file_exists($structname) && file_exists($bacupname)){
+ $this->dropAndRestoreTable($tablename, $structname);
+ }else{
+ echo "Not Found Backup or Structure!\n";
+ }
+ }
+
+
+
+ // Saving SQL-query in the file to a temporary directory (Сохранение SQL-запроса в файл во временный каталог)
+ function saveSQLToFile($sql){
+ $this->execScript($sql);
+ }
+
+
+ // Moves from the temporary directory to a backup directory (Перемещает из временного каталога в каталог бекапа)
+ function moveTmpToBackup($filename){
+ //$this->run_cmd("mv /tmp/$filename /backup/$filename");
+ }
+
+ // Returns the file name for the backup, depending on the current date and time (Возвращает название файла для бекапа, в зависимости от текущей даты и времени)
+ function getFileNameBackup($tablename){
+ return $tablename."_".date("Y_m_d-H_m_s").".txt";
+ }
+
+
+
+ // Collapse for a certain number of days (Свертывание за определенное количество дней)
+ // $tablename - table name (название таблицы)
+ // $fieldname - the name of the field over which the rotation (название поля, по которому производится ротация)
+ // $days - the number of days that remain (количество дней, которое остается)
+ // $isunixformat - Unix-date format (Unix-формат даты)
+ function rotateTable($tablename, $fieldname, $days=2, $isunixformat=true){
+ $filename=$this->getFileNameBackup($tablename);
+
+ echo "backup file: $filename \n";
+
+
+ // Saving data to a file (Сохранение данных в файл)
+ $sql="SELECT *
+ INTO OUTFILE \"/backup/".$filename."\"
+ FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
+ LINES TERMINATED BY \"\\n\"
+ FROM $tablename";
+
+ if ($isunixformat){
+
+ $d = strtotime("-$days day");
+ $datefrom=date("Y-n-j", $d).' 00:00:00';
+
+
+ $where=" WHERE (`$fieldname`<=UNIX_TIMESTAMP('".$datefrom."'))";
+ }else{
+
+ $where=" WHERE (`$fieldname`<=CURDATE()-$days)";
+
+ }
+
+ $sql.=$where.";";
+
+ $this->saveSQLToFile($sql);
+ $this->moveTmpToBackup($filename);
+
+
+ // Deleting information from a file (Удаление информации из файла)
+ if (file_exists("/backup/".$filename)){
+ $sql="DELETE FROM $tablename ".$where.";";
+ $this->execScript($sql);
+ }
+
+
+ }
+
+
+
+
+ // Will the database cleaning (Будет очистка базы данных)
+ function clearData(){
+ global $k2;
+
+ // Nowhere is not in use, so sent to the file archive (Нигде не используется, поэтому отправляется в файловый архив)
+ $this->fullClearTable('log_cron_events');
+ $this->fullClearTable('log_cache');
+ $this->fullClearTable('users_change_rp');
+
+ // Used only 1 day. Remove all less than 1 day (Используется только 1 день. Удалять все, что менее 1 дня)
+ $this->rotateTable('visitors', 'date', 2, true);
+ $this->rotateTable('rp_ads_viewed', 'date', 2, false);
+
+
+ // Tables where you have to do rotation (Таблицы, где нужно делать ротацию)
+ // allocated_ads
+ // balancehistory
+
+
+ // Used view_ads (Используется в view_ads)
+ // ad_actions
+
+
+ // Used statistic_ajax (Используется в statistic_ajax)
+ // allocated_logs
+
+ // It is also used in other scripts (Используется так же в других скриптах)
+ // ad_clicks
+
+ // Many used where (Много где используется)
+ // referral_commissions_log
+
+
+
+
+ echo "Clear And...\n";
+ }
+
+
+ function content(){
+ $rez=$this->clearData();
+ return $rez;
+ }
+
+
+}
+
diff --git a/k2shop/k2shop/app/deleted/rcc/rcc/rcc.php b/k2shop/k2shop/app/deleted/rcc/rcc/rcc.php
new file mode 100644
index 0000000..eb475f1
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/rcc/rcc/rcc.php
@@ -0,0 +1,61 @@
+get('comp');
+ $c=$k2->get('c');
+
+ $s=$k2->getComp($comm);
+ if ($s[0]<>'rcc'){
+ return;
+ }
+
+ $comp=$k2->ins_comp($s[0], $s[1], true);
+
+ if ($comp<>'')
+ $rez.=$comp->content();
+
+ return $rez;
+
+ }
+
+
+ // Возвращаем контент
+ function content(){
+
+ global $k2;
+
+ $rez='{text}
документу',
+ 'width' => '80',
+ 'readonly' => true,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'docdate',
+ 'caption' => 'Дата
документу',
+ 'width' => '105',
+ 'readonly' => true,
+ 'align' => 'left',
+ 'type_field' => 'datetime'
+ ],
+
+ ['field' => 'typedocid',
+ 'caption' => 'Тип
документу',
+ 'width' => '80',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select typedocid as k, typedocname as v from vdTypeDoc"
+ ],
+
+ ['field' => 'sumdoc',
+ 'caption' => 'Сума
документа',
+ 'width' => '100',
+ 'readonly' => true,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'typefileid',
+ 'caption' => 'Тип
файлу',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select typefileid as k, nametypefile as v from vdTypeFile"
+ ],
+
+
+ ['field' => 'treeid',
+ 'caption' => 'ID гілки',
+ 'width' => '200',
+
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select treeid as k, treename as v from vdTree"
+ ],
+
+ ['field' => 'kodf',
+ 'caption' => 'Контрагент',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select kodf as k, namefirm as v from vdFirm"
+ ],
+
+ ['field' => 'comment_file',
+ 'caption' => 'Примітки',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'ordnum',
+ 'caption' => 'Номер вставки в базу даних',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'filename',
+ 'caption' => 'Назва файлу',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'fileext',
+ 'caption' => 'Розширення файлу',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'usercreate',
+ 'caption' => 'Створив',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'datecreate',
+ 'caption' => 'Час створення',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => true,
+ 'align' => 'left',
+ 'type_field' => 'datetime'
+ ],
+
+ ['field' => 'userupdate',
+ 'caption' => 'Змінив',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => true,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'dateupdate',
+ 'caption' => 'Час змін',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => true,
+ 'align' => 'left',
+ 'type_field' => 'datetime'
+ ],
+
+ ['field' => 'size_file',
+ 'caption' => 'Розмір файлу, кб',
+ 'width' => '200',
+ 'hidden' => false,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'site_history',
+ 'caption' => 'Історія',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'working_user',
+ 'caption' => 'Зараз працює',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'date_working',
+ 'caption' => 'Дата взяття на роботу',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'del',
+ 'caption' => 'Видалення',
+ 'width' => '300',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ]
+ ];
+
+ //$rez .= $this->right_panel;
+ $rez .= '
документу',
+ 'width' => '80',
+ 'readonly' => true,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'docdate',
+ 'caption' => 'Дата
документу',
+ 'width' => '105',
+ 'readonly' => true,
+ 'align' => 'left',
+ 'type_field' => 'datetime'
+ ],
+
+ ['field' => 'typedocid',
+ 'caption' => 'Тип
документу',
+ 'width' => '80',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select typedocid as k, typedocname as v from vdTypeDoc"
+ ],
+
+ ['field' => 'sumdoc',
+ 'caption' => 'Сума
документа',
+ 'width' => '100',
+ 'readonly' => true,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'typefileid',
+ 'caption' => 'Тип
файлу',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select typefileid as k, nametypefile as v from vdTypeFile"
+ ],
+
+
+ ['field' => 'treeid',
+ 'caption' => 'ID гілки',
+ 'width' => '200',
+
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select treeid as k, treename as v from vdTree"
+ ],
+
+ ['field' => 'kodf',
+ 'caption' => 'Контрагент',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select kodf as k, namefirm as v from vdFirm"
+ ],
+
+ ['field' => 'comment_file',
+ 'caption' => 'Примітки',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'ordnum',
+ 'caption' => 'Номер вставки в базу даних',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'filename',
+ 'caption' => 'Назва файлу',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'fileext',
+ 'caption' => 'Розширення файлу',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'usercreate',
+ 'caption' => 'Створив',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'datecreate',
+ 'caption' => 'Час створення',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => true,
+ 'align' => 'left',
+ 'type_field' => 'datetime'
+ ],
+
+ ['field' => 'userupdate',
+ 'caption' => 'Змінив',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => true,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'dateupdate',
+ 'caption' => 'Час змін',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => true,
+ 'align' => 'left',
+ 'type_field' => 'datetime'
+ ],
+
+ ['field' => 'size_file',
+ 'caption' => 'Розмір файлу, кб',
+ 'width' => '200',
+ 'hidden' => false,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'site_history',
+ 'caption' => 'Історія',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'working_user',
+ 'caption' => 'Зараз працює',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'date_working',
+ 'caption' => 'Дата взяття на роботу',
+ 'width' => '200',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'del',
+ 'caption' => 'Видалення',
+ 'width' => '300',
+ 'hidden' => true,
+ 'readonly' => false,
+ 'align' => 'left'
+ ]
+
+ ]
+ ];
+
+ $grid = $k2->ins_comp2('k2phpgrid', $this);
+
+
+ $rez .= $grid->simpleTable($arr);
+ $grid2 = $k2->ins_comp2('k2phpgrid', $this);
+
+ $arr2 = [
+ 'select' => "select histid, fileid, ordnum, datecreate, usercreate from vdHistory where fileid={masterid} ",
+ 'table' => "vdHistory",
+ 'typeid'=>1,
+ 'getmaster' => true,
+ 'masterid' => 'fileid',
+ 'sortname' => 'histid',
+ 'sortorder' => 'asc',
+ 'caption' => 'Історія',
+ /*'is_edit' => true,*/
+ 'fields' => [
+ ['field' => 'histid',
+ 'caption' => 'ID Історіі',
+ 'width' => '80',
+ 'readonly' => false,
+ 'hidden' => true,
+ 'align' => 'center'
+ ],
+
+ ['field' => 'fileid',
+ 'caption' => 'ID файла',
+ 'width' => '150',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'ordnum',
+ 'caption' => 'Номер вставки в базу даних.',
+ 'width' => '150',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'datecreate',
+ 'caption' => 'Дата створення',
+ 'width' => '150',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'usercreate',
+ 'caption' => 'Користувач',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'left'
+ ]
+ ]
+ ];
+
+ //$rez .= $grid2->simpleTable($arr);
+
+ $rez .= "
+
+ ';
+// for(var x=0; x
';
+// $('#result').html('Files uploaded:'+buf);
+// } else {
+// $('#result').html(result.data);
+// }
+// // reset formdata
+// formdata = false;
+// formdata = new FormData();
+// }
+// });
+// }
+// return false;
+// });
+// });
+//var defFilter = '{"groupOp":"AND","rules":[{"field":"treeid","op":"eq","data":"28f9bb91b1169b58621b477f6c650b1f"}]}';
+// $('#vdFiles').jqGrid("getGridParam", "postData").filters = defFilter;
+function showHistory() {
+
+ var selr = jQuery('#vdFiles').jqGrid('getGridParam','selrow', 'activation');
+ var ret = jQuery('#vdFiles').jqGrid('getRowData', selr);
+ var fileid = ret.fileid;
+ if (fileid==undefined){
+ document.getElementById('undefined').style.display='block';
+ } else {
+ document.getElementById('history').style.display='block';
+ }
+
+
+
+
+ }
+
+function showModal(param) {
+ if ((param=='del')||(param=='move')){
+ var selr = jQuery('#vdFiles').jqGrid('getGridParam','selrow', 'activation');
+ var ret = jQuery('#vdFiles').jqGrid('getRowData', selr);
+ var fileid = ret.fileid;
+ if (fileid==undefined){
+ document.getElementById('undefined').style.display='block';
+ } else {
+ document.getElementById(param).style.display='block';
+ }
+ } else {
+ document.getElementById(param).style.display='block';
+ }
+
+
+ }
+function closeModal(param) {
+ document.getElementById(param).style.display='none'
+ }
+function getParam(param){
+ setTimeout(getParams, 0);
+ function getParams(){
+ var selr = jQuery('#vdFiles').jqGrid('getGridParam','selrow', 'activation');
+ var ret = jQuery('#vdFiles').jqGrid('getRowData', selr);
+ if (ret) {
+
+ var fileid = ret.fileid;
+ if (param == 'del') {
+ delFile(fileid);
+
+ var modal = document.getElementById("del");
+ modal.style.display = "none";
+ closeModal(param);
+ } else if (param == 'move'){
+
+ var treeid = $('#select2-chosen-4').html();
+
+ var fileid = ret.fileid;
+
+ moveFile(fileid, treeid);
+ var modal = document.getElementById("del");
+ modal.style.display = "none";
+ closeModal(param);
+ } else {
+
+ }
+
+ } else {
+
+ }
+ }
+ }
+
+
+function delFile(fileid) {
+
+ $.ajax({
+ url: "/?comp=k2vdocs&c=delFile&temp=ajax",
+ type: "POST",
+ data: {fileid:fileid},
+ success: function(result){
+ jQuery('#vdFiles').jqGrid().trigger('reloadGrid');
+
+ }});
+ }
+
+function moveFile(fileid, treeid) {
+ $.ajax({
+ url: "/?comp=k2vdocs&c=moveFile&temp=ajax",
+ type: "POST",
+ data: {fileid:fileid, treeid:treeid},
+ success: function(result){
+ jQuery('#vdFiles').jqGrid().trigger('reloadGrid');
+
+ }});
+ }
+
+// $('#vdFiles').jqGrid({
+// colModel: [
+//
+// { name: 'treeid', index: 'treeid', width: 200, formatter:'select', stype: 'select', //sorttype:'int',
+// searchoptions:{
+// sopt: ['eq'],
+// dataInit:function(el){
+// var defOption = $("option:contains("+defaultCategory+")",el);
+// defOption.attr("selected", "selected");
+// setTimeout(function(){
+// $(el).trigger('change');
+// },500);
+// }
+// },
+// sorttype: function(cell, obj) {
+// return categories[cell];
+// },
+// edittype:'select', editoptions: { value: categoriesStr }
+// },]
+// });
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/vdoc/vdocsadmin/k2vdocsadmin_files.php b/k2shop/k2shop/app/deleted/vdoc/vdocsadmin/k2vdocsadmin_files.php
new file mode 100644
index 0000000..f1a3365
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/vdoc/vdocsadmin/k2vdocsadmin_files.php
@@ -0,0 +1,303 @@
+ins_comp2('k2phpgrid', $this);
+
+ $arr = ['select' => "select fileid, treeid, ordnum, typefileid, filename, fileext, statid, docn, docdate, typedocid, kodf, sumdoc, comment_file, usercreate,"
+ . "datecreate, userupdate, dateupdate, size_file, site_history, working_user, date_working, del from vdFiles where del = 0",
+ 'table' => "vdFiles",
+ 'typeid'=>1,
+ 'sortname' => 'fileid',
+ 'sortorder' => 'asc',
+ 'caption' => 'Файли',
+ /*'is_edit' => true,*/
+ 'fields' => [
+ ['field' => 'fileid',
+ 'caption' => 'ID файлу',
+ 'width' => '120',
+ 'readonly' => true,
+ 'align' => 'center'
+ ],
+
+ ['field' => 'treeid',
+ 'caption' => 'ID гілки',
+ 'width' => '200',
+
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select treeid as k, treename as v from vdTree"
+ ],
+
+ ['field' => 'ordnum',
+ 'caption' => 'Номер вставки в базу даних',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'typefileid',
+ 'caption' => 'Тип
файлу',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select typefileid as k, nametypefile as v from vdTypeFile"
+ ],
+
+ ['field' => 'filename',
+ 'caption' => 'Назва файлу',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'fileext',
+ 'caption' => 'Розширення файлу',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'statid',
+ 'caption' => 'Статус',
+ 'width' => '120',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select statid as k, statname as v from vdStat"
+ ],
+
+ ['field' => 'docn',
+ 'caption' => '№ документу',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'docdate',
+ 'caption' => 'Дата документу',
+ 'width' => '200',
+ 'readonly' => true,
+ 'align' => 'left',
+ 'type_field' => 'datetime'
+ ],
+
+ ['field' => 'typedocid',
+ 'caption' => 'Тип
документу',
+ 'width' => '80',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select typedocid as k, typedocname as v from vdTypeDoc"
+ ],
+
+ ['field' => 'kodf',
+ 'caption' => 'Контрагент',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select kodf as k, namefirm as v from vdFirm"
+ ],
+
+ ['field' => 'sumdoc',
+ 'caption' => 'Сума документа',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'comment_file',
+ 'caption' => 'Примітки',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'usercreate',
+ 'caption' => 'Створив',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'datecreate',
+ 'caption' => 'Час створення',
+ 'width' => '200',
+ 'readonly' => true,
+ 'align' => 'left',
+ 'type_field' => 'datetime'
+ ],
+
+ ['field' => 'userupdate',
+ 'caption' => 'Змінив',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'dateupdate',
+ 'caption' => 'Час змін',
+ 'width' => '200',
+ 'readonly' => true,
+ 'align' => 'left',
+ 'type_field' => 'datetime'
+ ],
+
+ ['field' => 'size_file',
+ 'caption' => 'Розмір файлу, кб',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'site_history',
+ 'caption' => 'Історія',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'working_user',
+ 'caption' => 'Зараз працює',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'date_working',
+ 'caption' => 'Дата взяття на роботу',
+ 'width' => '200',
+ 'readonly' => true,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'del',
+ 'caption' => 'Видалення',
+ 'width' => '300',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ]
+ ];
+
+ $rez .= $grid->simpleTable($arr);
+
+ $butn2=$k2->ins_comp('k2button');
+
+ $arr_btn = [
+ 'caption'=>'Відкрити',
+ 'btn_id'=>'jqxToggleButton',
+ 'width'=>'150',
+ 'height'=>'30',
+ 'style'=>'',
+ 'img_src'=>'img/air.png',
+ 'btn_tmp'=>'success',
+ 'onclick'=>"
+ var selr = jQuery('#vdFiles').jqGrid('getGridParam','selrow', 'activation');
+ var ret = jQuery('#vdFiles').jqGrid('getRowData', selr);
+ var treeid = ret.treeid;
+ var filename = ret.filename;
+ var typefileid = ret.typefileid;
+ if (treeid==undefined){
+ alert('Ви не вибрали жодного файлу!!!');
+ } else {
+ $.ajax({
+ url: '/?comp=k2vdocs&c=getFilePath&temp=ajax',
+ type: 'GET',
+ data: {action:'file_path', treeid:treeid, filename:filename},
+ success: function(result){
+ startClient(result);
+ }});
+ }
+ function startClient(result){
+ var obj = JSON.parse(result);
+ var directory = obj[0]['path'];
+ var file = obj[0]['file'];
+ var pathfile = directory + file;
+ window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
+ window.requestFileSystem(window.TEMPORARY, 5*1024*1024, initFS, errorHandler);
+ function initFS(fs){
+ function createDir(rootDir, folders) {
+ rootDir.getDirectory(folders[0], {create: true}, function(dirEntry) {
+ if (folders.length) {
+ createDir(dirEntry, folders.slice(1));
+ }
+ }, errorHandler);
+ };
+ createDir(fs.root, directory.split('/'));
+ setTimeout(writeFile, 3000);
+ function writeFile(){
+ fs.root.getFile(pathfile, {create: true, exclusive: true}, function(fileEntry) {
+ fileEntry.createWriter(function(fileWriter) {
+ window.URL = window.URL || window.webkitURL;
+ var blob = new Blob(['Lorem Ipsum'], {type: 'text/plain'});
+ fileWriter.write(blob);
+ }, errorHandler);
+ }, errorHandler);
+ }
+ }
+ function errorHandler(){
+ console.log('An error occured');
+ }
+ }"
+ ];
+
+ $rez .= $butn2->simpleBtn($arr_btn);
+
+
+
+ $arr = [
+ ''
+ ];
+ $radio = $k2->ins_comp('k2button');
+ $rez .= $radio->radioBtn($arr);
+
+// $switch = $k2->ins_comp('k2button');
+// $rez .= $switch->switchBtn($arr);
+
+// $check = $k2->ins_comp('k2button');
+// $rez .= $check->checkBox($arr);
+ return $rez;
+ }
+
+
+
+
+
+ // Возвращаем контент
+ function content(){
+ $rez=$this->showAdminDesign();
+ return $rez;
+ }
+
+
+
+}
diff --git a/k2shop/k2shop/app/deleted/vdoc/vdocsadmin/k2vdocsadmin_tree.php b/k2shop/k2shop/app/deleted/vdoc/vdocsadmin/k2vdocsadmin_tree.php
new file mode 100644
index 0000000..b8a2418
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/vdoc/vdocsadmin/k2vdocsadmin_tree.php
@@ -0,0 +1,143 @@
+ins_comp2('k2phpgrid', $this);
+
+ $arr = [
+ 'select' => "select treeid, treename, parent_treeid, ccount, usercreate, datecreate, userupdate, dateupdate, tree_comment, projid, ordnum, del from vdTree",
+ 'table' => "vdTree",
+ 'typeid'=>1,
+ 'sortname' => 'treeid',
+ 'sortorder' => 'asc',
+ 'caption' => 'Дерево',
+ /*'is_edit' => true,*/
+ 'fields' => [
+ ['field' => 'treeid',
+ 'caption' => 'ID каталогу',
+ 'width' => '120',
+ 'readonly' => true,
+ 'align' => 'center'
+ ],
+
+ ['field' => 'treename',
+ 'caption' => 'Назва каталогу',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'parent_treeid',
+ 'caption' => 'ID гілки',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'ccount',
+ 'caption' => 'Кількість дочірніх елементів',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'usercreate',
+ 'caption' => 'Створив',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'datecreate',
+ 'caption' => 'Час створення',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'datetime'
+ ],
+
+ ['field' => 'userupdate',
+ 'caption' => 'Змінив',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'dateupdate',
+ 'caption' => 'Час змін',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'datetime'
+ ],
+
+ ['field' => 'tree_comment',
+ 'caption' => 'Примітки',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'projid',
+ 'caption' => 'ID проекту',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select projid as k, projname as v from vdProj"
+ ],
+
+ ['field' => 'ordnum',
+ 'caption' => 'Номер вставки в базу даних',
+ 'width' => '200',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'del',
+ 'caption' => 'Видалення',
+ 'width' => '300',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ]
+ ];
+
+ $rez .= $grid->simpleTable($arr);
+
+ return $rez;
+
+ }
+
+ // Возвращаем контент
+ function content(){
+ $rez=$this->showAdminDesign();
+ return $rez;
+ }
+
+
+
+
+}
diff --git a/k2shop/k2shop/app/deleted/work/work/work.php b/k2shop/k2shop/app/deleted/work/work/work.php
new file mode 100644
index 0000000..91ffd32
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/work/work/work.php
@@ -0,0 +1,59 @@
+get('comp');
+ $c=$k2->get('c');
+
+ $s=$k2->getComp($comm);
+ if ($s[0]<>'work'){
+ return;
+ }
+
+ $comp=$k2->ins_comp($s[0], $s[1], true);
+
+ if ($comp<>'')
+ $rez.=$comp->content();
+
+ return $rez;
+
+ }
+
+
+ // Возвращаем контент
+ function content(){
+ global $k2;
+ $rez='
показов',
+ 'width' => '75',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'balans',
+ 'caption' => 'Баланс',
+ 'width' => '75',
+ 'readonly' => true,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'comment_group',
+ 'caption' => 'Примечание',
+ 'width' => '150',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+
+ ['field' => 'client_email',
+ 'caption' => 'Email клиента',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'groups_adres',
+ 'caption' => 'Группы',
+ 'width' => '100',
+ 'readonly' => true,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'country_adress',
+ 'caption' => 'Страна',
+ 'width' => '150',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'countadr',
+ 'caption' => 'Кол.адресов',
+ 'width' => '100',
+ 'readonly' => true,
+ 'align' => 'left'
+ ]
+ ]
+ ];
+
+ $rez .= $grid->simpleTable($arr);
+
+
+
+
+ // Детальная информация
+ $grid=$k2->ins_comp2('k2phpgrid', $this);
+
+ $arr = [
+ 'select' => "select s.sendlogid, s.datesend, s.sendkol, s.k2sendgrid, s.grid, p.name_l1 from k2sended_logbalans as s left join position as p on s.grid=p.id ",
+
+ 'where'=>' where k2sendgrid={masterid} ',
+
+ 'getmaster' => true, // Указывает, что есть master-таблица
+ 'masterid' => 'k2sendgrid',
+
+ 'table' => "k2sended_logbalans",
+ 'sortname' => 'sendlogid',
+
+ 'height' => '200px',
+ 'rows' => '20',
+
+ 'footer'=>true,
+ 'sum'=>array('sendlogid'=>'count', 'sendkol'=>'sum'),
+
+ 'sortorder' => 'desc',
+ 'caption' => 'Отправки',
+ /*'is_edit' => false,*/
+ 'fields' => [
+ ['field' => 'sendlogid',
+ 'caption' => 'ID',
+ 'width' => '40',
+ 'readonly' => true,
+ 'align' => 'center'
+ ],
+
+ ['field' => 'datesend',
+ 'caption' => 'Дата отправки',
+ 'width' => '150',
+ 'readonly' => false,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'grid',
+ 'caption' => 'id группы',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'hidden' => false
+ ],
+
+ ['field' => 'name_l1',
+ 'caption' => 'Название должности',
+ 'width' => '150',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'hidden' => false
+ ],
+
+ ['field' => 'sendkol',
+ 'caption' => 'Количество',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'hidden' => false
+ ]
+ ]
+ ];
+
+ $rez .= $grid->simpleTable($arr);
+
+ return $rez;
+ }
+
+
+
+
+ // Возвращаем контент
+ function content(){
+ global $k2;
+ $rez=$this->showAdSend();
+ return $rez;
+ }
+
+
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/work/work/work_price.php b/k2shop/k2shop/app/deleted/work/work/work_price.php
new file mode 100644
index 0000000..ba60a1c
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/work/work/work_price.php
@@ -0,0 +1,110 @@
+ins_comp2('k2phpgrid', $this);
+
+ $arr = [
+ 'select' => "SELECT * FROM crPrice ",
+ 'table' => "crPrice",
+ 'thema' => 'ui-lightness',
+ 'lang' => 'ru',
+
+ /*'is_edit'=>true,
+ 'is_export'=>true,
+ 'is_del'=>true,
+ 'is_clone'=>true,
+ 'is_add'=>true,*/
+
+ 'footer'=>true,
+ 'sum'=> ['priceid'=>'count', 'kolweeks'=>'sum','cena'=>'sum'],
+
+ /*'height' => '100%',*/
+
+ 'sortname' => 'priceid',
+ 'sortorder' => 'desc',
+ 'caption' => 'Price',
+ /*'width' => '1000',
+ 'rows' => '20',*/
+ 'fields' => [
+ ['field' => 'priceid',
+ 'caption' => 'Id',
+ 'width' => '50',
+ 'readonly' => true,
+ 'align' => 'right'
+ ],
+
+ ['field' => 'valid',
+ 'caption' => 'Валюта',
+ 'width' => '75',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select valid as k, nameval as v from crVal order by nameval "
+ ],
+
+
+ ['field' => 'uslugid',
+ 'caption' => 'Услуга',
+ 'width' => '500',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select uslugid as k, nameusl as v from crUslug order by nameusl "
+ ],
+
+
+ ['field' => 'kolweeks',
+ 'caption' => 'Кол. недель',
+ 'width' => '120',
+ 'readonly' => true,
+ 'align' => 'right'
+ ],
+
+ ['field' => 'cena',
+ 'caption' => 'Цена',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'right'
+ ]
+ ]
+ ];
+
+ $rez .= $grid->simpleTable($arr);
+
+ return $rez;
+ }
+
+
+
+
+ // Возвращаем контент
+ function content(){
+ global $k2;
+ $rez=$this->showPrice();
+ return $rez;
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/work/work/work_send.php b/k2shop/k2shop/app/deleted/work/work/work_send.php
new file mode 100644
index 0000000..35de13b
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/work/work/work_send.php
@@ -0,0 +1,209 @@
+check_connect();
+ require_once ($k2->rootdir."/cms/modules/_mail.php");
+ }
+
+
+ // Отправка почтовых сообщений
+ function SendAll(){
+ global $k2;
+
+ /*function putLog($fp,$string)
+ {
+ fwrite($fp, $string);
+ }*/
+
+
+ /*
+
+ $users_in_one_send = 250; // default 5
+ $sec_to_wait = 0; // default 0
+
+
+ $query = " SELECT
+ psubscribe_emails.id,
+ psubscribe_emails.email,
+ psubscribe_emails.name,
+ psubscribe_emails.subscribe_id,
+ psubscribe_set.html,
+ psubscribe_set.title
+ FROM
+ psubscribe_emails
+ LEFT JOIN psubscribe_set ON psubscribe_set.id=psubscribe_emails.subscribe_id
+ ORDER BY psubscribe_emails.id
+ LIMIT $users_in_one_send";
+ $emails = query($query,"s");
+
+ if (!empty($emails))
+ {
+ $fp = fopen("/var/www/ukrcrewi/data/www/ukrcrewing.com.ua/userfiles/Tmp/psubscribe.txt","a+");
+
+ foreach ($emails as $temail)
+ {
+ putLog($fp, "\n\n".$temail['title']." [$users_in_one_send letters] ".date("d.m.Y H:i:s").": ");
+ $subscribe_id = $temail['subscribe_id'];
+
+ // инициализируем класс
+ $mailer = new extPHPMailer();
+
+ // Устанавливаем тему письма
+ $mailer->Subject = $temail['title'];
+ $mailer->Body = $mailHeader.$temail['html'].$mailFooter;
+
+ // start sending
+ $mailer->From = "mail@ukrcrewing.com.ua";
+ $mailer->FromName = "Ukrcrewing"; // Рассылка Ukrcrewing
+
+ $email = explode(",",trim($temail['email']));
+ $email = trim($email[0]);
+
+ @ $mailer->AddAddress($email,$temail['name']);
+ if(!$mailer->Send())
+ putLog($fp, " ERROR email ".$email);
+ else
+ putLog($fp, " sent ".$email);
+
+ $mailer->ClearAddresses();
+ $mailer->ClearAttachments();
+
+ if ($sec_to_wait>0)
+ sleep($sec_to_wait);
+
+ $query = " DELETE FROM psubscribe_emails WHERE id = '".$temail['id']."'";
+ query($query,"d");
+
+ $query = " SELECT COUNT(id) as total
+ FROM
+ psubscribe_emails
+ WHERE subscribe_id='$subscribe_id'";
+ $emailsLeft = query($query,"s");
+
+ if ($emailsLeft[0]['total']==0)
+ {
+ $query = " UPDATE psubscribe_set SET active='0', stop=NOW() WHERE id='$subscribe_id'";
+ query($query,"u");
+ }
+ }
+
+ putLog($fp, "\n ----------------- sent ".date("d.m.Y H:i:s"));
+ fclose ($fp);
+
+ }
+ */
+
+ }
+
+
+
+
+
+ // Отправка писем
+ function sendMail($subj='', $html='', $emails=''){
+ global $k2;
+ $rez='';
+
+ // инициализируем класс
+ $mailer = new extPHPMailer();
+
+ if (trim($subj)==''){
+ $subj=$this->subject;
+ }
+
+ if (trim($html)==''){
+ $html=$this->prepareMail();
+ }
+
+ if (trim($emails)==''){
+ $emails=$this->emails;
+ }
+
+
+ // Устанавливаем тему письма
+ $mailer->Subject = /*$temail['title']*/$subj;
+ $mailer->Body = $html;
+
+ // start sending
+ $mailer->From = "mail@ukrcrewing.com.ua";
+ $mailer->FromName = "Ukrcrewing"; // Рассылка Ukrcrewing
+
+ $email = explode(",",trim($emails)); // $temail['email']
+ $email = trim($email[0]);
+
+
+ $mailer->AddAddress($email,/*$temail['name']*/$subj);
+ if(!$mailer->Send())
+ //putLog($fp, " ERROR email ".$email);
+ echo " ERROR email ".$email."\n";
+ else
+ //putLog($fp, " sent ".$email);
+ echo " sent ".$email."\n";
+
+
+ return $rez;
+ }
+
+
+
+ // Подготовка письма
+ function prepareMail(){
+ global $k2;
+ $rez='';
+
+ $rez=$this->mail_body;
+ $rez=str_replace('{site}',$this->domain,$rez);
+ $rez=str_replace('{reklama}',$this->reklama,$rez);
+
+
+ return $rez;
+ }
+
+
+ // Возвращаем контент
+ function content(){
+ global $k2;
+
+ //$body=$this->prepareMail();
+ $rez=$this->sendMail('Тестирование рассылки...',$body,'rs@corp2.net');
+
+ return $rez;
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/work/work/work_sendsettings.php b/k2shop/k2shop/app/deleted/work/work/work_sendsettings.php
new file mode 100644
index 0000000..c6f86cd
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/work/work/work_sendsettings.php
@@ -0,0 +1,305 @@
+rootdir.'/cms/modules/ckeditor/ckeditor.php';
+
+ $k2->site->addJS('select2.css',"/cms/modules/ckeditor/ckeditor.js");
+ $k2->site->addJS('select2.min.js',"/cms/modules/ckeditor/adapters/jquery.js");
+
+ $k2->site->addCSS('select2.min.js',"/cms/cms_template/_style.css?v=20");
+ }
+
+
+
+ // Группы моряков
+ function listSeaGroup($gradress=''){
+ global $k2;
+ $rez='';
+ $rez.="
+ ";
+
+ return $rez;
+ }
+
+ // Группы моряков
+ function listCountries($coutryadr=''){
+ global $k2;
+ $rez='';
+ $rez.=" Моряки:
+
+
+
+
+
+ ";
+
+ return $rez;
+ }
+
+ // Вывод настройки
+ function showSetting(){
+ global $k2;
+
+ $data=$this->restoreDB();
+ $mess='';
+ if (isset($data['mess'])){
+ $mess=$data['mess'];
+ }
+
+ $gradress='';
+ if (isset($data['groups_adres'])){
+ $gradress=$data['groups_adres'];
+ }
+
+ $coutryadr='';
+ if (isset($data['country_adress'])){
+ $coutryadr=$data['country_adress'];
+ }
+
+ //var_dump($data);
+
+ $rez='Страны:
+
+
+
+
+
";
+ $rez.=PutFCKeditorContent('text', $mess, "Subscribe", "100%", "800");
+ $rez.='
';
+ $rez.='';
+ $rez.=$this->listSeaGroup($gradress);
+ $rez.=$this->listCountries($coutryadr);
+ $rez.='
\n";
+ }
+
+
+
+ //заполняем по должностям
+ $del="DELETE FROM k2sendgroup_position WHERE k2sendgrid='$sendgrid' ";
+ $k2->db->exec($del);
+
+
+ $grid=explode(',',$adreslist);
+ foreach ($grid as $gr) {
+ $query = "INSERT INTO k2sendgroup_position (positionid, k2sendgrid) VALUES ($gr, $sendgrid)";
+ try{
+ //echo $query.'
';
+ $k2->db->exec($query);
+ }catch(PDOException $e) {
+ echo "Error Insert group_country: $query\n";
+ echo $e->getMessage();
+ }
+ }
+
+
+ //заполняемпо странам
+ $del="DELETE FROM k2sendgroup_country WHERE k2sendgrid='$sendgrid' ";
+ $k2->db->exec($del);
+
+
+ $adr=explode(',',$countrylist);
+ foreach ($adr as $countryname) {
+ $query = "INSERT INTO k2sendgroup_country (countryname, k2sendgrid) VALUES ('$countryname', $sendgrid)";
+ try{
+ //echo $query.'
';
+ $k2->db->exec($query);
+ }catch(PDOException $e) {
+ echo "Error Insert group_country: $query\n";
+ echo $e->getMessage();
+ }
+ }
+
+
+ }
+
+
+ // Восстановление информации из базы данных
+ function restoreDB(){
+ global $k2;
+
+ $rez=array();
+ $sendgrid=$k2->get('sendgrid');
+
+ $sql = "SELECT s.groups_adres, s.country_adress, s.mess, s.k2sendgrid
+ FROM k2sendgroup s
+ WHERE s.k2sendgrid='$sendgrid'";
+
+ foreach ($k2->db->query($sql) as $value) {
+ $rez=$value;
+ }
+
+
+ return $rez;
+ }
+
+
+ // Возвращаем контент
+ function content(){
+ global $k2;
+ $rez='';
+
+ //var_dump($_POST);
+ //$rez.='AdressComa: '.$this->getAdressList();
+ //$rez.='Количество: '.$this->getKolAdress();
+
+ if (!empty($_POST)){
+ $this->saveDB();
+ }
+
+
+ $rez.=$this->showSetting();
+
+ return $rez;
+
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/work/work/work_stat.php b/k2shop/k2shop/app/deleted/work/work/work_stat.php
new file mode 100644
index 0000000..e49d1f1
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/work/work/work_stat.php
@@ -0,0 +1,228 @@
+get('datefrom')<>''){
+ $datefrom=$k2->get('datefrom');
+ }
+
+ $dateto='';
+ if ($k2->get('dateto')<>''){
+ $dateto=$k2->get('dateto');
+ }
+
+
+
+ $where="where (1=1)";
+
+ if (trim($datefrom)<>''){
+ list($day, $month, $year) = sscanf($datefrom, "%02d.%02d.%04d");
+ $dat="$year.$month.$day";
+ $where.="and(posted_date>='$dat')";
+ }
+
+
+ if (trim($dateto)<>''){
+ list($day, $month, $year) = sscanf($dateto, "%02d.%02d.%04d");
+ $dat="$year.$month.$day";
+ $where.="and(posted_date<='$dat')";
+ }
+
+
+
+ $grid=$k2->ins_comp2('k2phpgrid', $this);
+
+ $arr = [
+ 'select' => "SELECT v.*
+ FROM vakansystat as v ",
+ 'table' => "vakansystat",
+ 'thema' => 'ui-lightness',
+ 'lang' => 'en',
+
+ 'where' => $where,
+
+ /*'is_edit'=>false,
+ 'is_export'=>true,
+ 'is_del'=>false,
+ 'is_clone'=>false,
+ 'is_add'=>false,*/
+
+ 'footer'=>true,
+ 'sum'=>array('id'=>'count'/*,'summ'=>'sum'*/),
+
+ 'height' => '100%',
+
+ 'sortname' => 'id',
+ 'sortorder' => 'desc',
+ 'caption' => 'MARKET INVESTIGATION',
+ /*'width' => '100%',
+ 'rows' => '20',*/
+ 'fields' => [
+ ['field' => 'id',
+ 'caption' => 'Id',
+ 'width' => '50',
+ 'readonly' => true,
+ 'align' => 'right'
+ ],
+
+
+ ['field' => 'posted_date',
+ 'caption' => 'Date of publication',
+ 'width' => '140',
+ 'readonly' => true,
+ 'align' => 'center'
+ ],
+
+ ['field' => 'dolgn',
+ 'caption' => 'Rank',
+ 'width' => '100',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select name_l1 as k, name_l1 as v from position order by name_l1 "
+ ],
+
+ ['field' => 'salary',
+ 'caption' => 'Salary',
+ 'width' => '100',
+ 'readonly' => true,
+ 'align' => 'center'
+ ],
+
+ ['field' => 'contract_duration',
+ 'caption' => 'Duration',
+ 'width' => '90',
+ 'readonly' => true,
+ 'align' => 'center'
+ ],
+
+ ['field' => 'onboard_date',
+ 'caption' => 'Join date',
+ 'width' => '90',
+ 'readonly' => true,
+ 'align' => 'center'
+ ],
+
+ ['field' => 'fleet_type',
+ 'caption' => 'Flot',
+ 'width' => '150',
+ 'readonly' => true,
+ 'align' => 'left'
+ ],
+
+ ['field' => 'type_sudna',
+ 'caption' => 'Vessel type',
+ 'width' => '150',
+ 'readonly' => false,
+ 'align' => 'left',
+ 'type_field' => 'DropDown',
+ 'multy' => false,
+ 'sql' => "select name_l1 as k, name_l1 as v from vessel_type order by name_l1 "
+ ],
+
+ ['field' => 'dedweight',
+ 'caption' => 'DWT',
+ 'width' => '75',
+ 'readonly' => true,
+ 'align' => 'center'
+ ],
+
+ ['field' => 'power',
+ 'caption' => 'BHP',
+ 'width' => '100',
+ 'readonly' => true,
+ 'align' => 'center'
+ ],
+
+ ['field' => 'region',
+ 'caption' => 'Sailing area',
+ 'width' => '150',
+ 'readonly' => true,
+ 'align' => 'left'
+ ]
+ ]
+ ];
+
+ $comp=$k2->get('comp');
+ $c=$k2->get('c');
+
+
+ $rez="
+ ";
+
+
+ $rez.=" ";
+
+
+ $rez .= $grid->simpleTable($arr);
+
+
+
+ return $rez;
+ }
+
+
+
+
+ // Возвращаем контент
+ function content(){
+ global $k2;
+
+ $rez=$this->showUsers();
+
+ //$rez='RRRRR';
+
+ return $rez;
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/deleted/work/work/work_subscribe.php b/k2shop/k2shop/app/deleted/work/work/work_subscribe.php
new file mode 100644
index 0000000..679312d
--- /dev/null
+++ b/k2shop/k2shop/app/deleted/work/work/work_subscribe.php
@@ -0,0 +1,639 @@
+
+ .mya {font-family:Arial, Helvetica;text-decoration:none; color:#0099cc;}
+ .mya:hover {font-family:Arial, Helvetica;text-decoration:none; color:#632819;}
+ .mya.var:visited {font-family:Arial, Helvetica;text-decoration:none; color:#999;}
+ .gray {font-family:Arial, Helvetica;sans-serif;color:gray}
+ .myhr {font-family:Arial, Helvetica;display:block; height:1px; border:none; background:gray; margin:0px;}
+ .myh1 {font-family:Arial, Helvetica;color:black; font-size:21px; padding:0px; margin:0px 0px 10px 0px; font-weight:bold; line-height:23px;}
+ ";
+
+ //
+
+ public $head="
+
+ ";
+
+ public $rekl_label="РЕКЛАМА
{reklama}
"; + + public $end2="Для того, чтобы отписаться от рассылки, обратитесь в техническую поддержку support@ukrcrewing.com.ua
"; + + public $rowtemp="{cena}$ в месяц
+Посадка {datevakans}
+ + + +| Должность | +Дата посадки | +
|---|
| Должность | +Дата посадки | +
|---|
| Фамилия и имя (латинскими буквами) | + |
| Должность | {dolgn} | +
| E-mail: | + |
| Телефон: | + |
| Валюта оплаты: | {nameval} | +
| Услуга: | {uslug} | +
| Количество недель: | {week} | +
| + | |
| + + | |
4W&MO
z*y2EX=eLum+WReY`XF)4Cs|!;Ia<$Mo!ty+V6nHP-e0mGcX`8G-oei4yOF&*d0N&i
zp8h;feDvqpKl@wEcjw$uRqO<%!jLKvBUA#hNf73^=nAy-!bm=wu^E4+I4(YF)H=#z
zcSbVj+ib!{pX3VNX=8CzM)`9_dC=sk-=M`OInjJw4cXZ-Kbq8r&~J0#GC+ltE@dvB
z^Yj~e-i*z-!H#K82Zu(G;CN{BzBA^y1=_}F8s}Q7Ie-2d?d(DBdE*Co
+
+
+
+ ';
+
+ return $return ;
+ }
+
+ function echoStep2() {
+
+ $return = '
+
+
+
+
+
+
+ *
+
+
+
+
+
+
+
+
+
+ Email: '.$str[1].'
+
+
+
+
+ Предложения
+
+ Новости о системе
+
+
+ К Вам придет электронное сообщение по электронной почте с ссылкой на активацию аккаунта.
+
+
+
+ ";
+ }
+
+
+ // Кнопки для администрирования
+ function admButtons(&$html){
+
+ global $k2;
+
+ if ( ($k2->auth->isAdmin()) and ($k2->auth->isDesignMode()) ){
+ $btn=$this->editLinks();
+ } else {
+ $btn='';
+ }
+
+ $html=str_replace('{edit}', $btn, $html);
+
+ }
+
+
+
+ // Получает контент
+ function content(){
+
+ if ($this->isshow){
+ $cont=$this->getContent(false);
+ $rez=str_replace('{content}', $cont, $this->template);
+ $this->admButtons($rez);
+
+ return $rez;
+ }
+
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/depricate/k2pagecontent.php b/k2shop/k2shop/app/depricate/k2pagecontent.php
new file mode 100644
index 0000000..d3a8570
--- /dev/null
+++ b/k2shop/k2shop/app/depricate/k2pagecontent.php
@@ -0,0 +1,107 @@
+lng;
+ }
+
+ /**
+ * Получает и возвращает язык из строки запроса, если таковой указан
+ * @global type $k2
+ * @return boolean
+ */
+ public function getLang(){
+ global $k2;
+
+ if($k2->get('lang')){
+ return trim($k2->get('lang'));
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Возвращает нужный идентификатор языка для контента
+ * @return type string
+ */
+ public function getContentLang()
+ {
+ $currentLang = $this->getCurrentLang();
+ $isLangInGet = $this->getLang();
+
+ if($isLangInGet) {
+ return $isLangInGet;
+ } else {
+ return $currentLang;
+ }
+ }
+
+ /**
+ * Присвает значения свойствам, если запись на нужном языке найдена, или возвращает false в ином случае.
+ * @param type $page array
+ * @return boolean
+ */
+ public function getPageContent($page){
+ global $k2;
+
+ $pageDataArray = array();
+ $lang = $this->getContentLang();
+
+ if(trim($page) <> ''){
+
+ $sqlQuery = "SELECT * FROM k2content
+ WHERE (command = '".$page."')
+ AND (lang = '".$lang."')
+ LIMIT 1";
+
+ foreach ($k2->db->query($sqlQuery) as $row) {
+ array_push($pageDataArray, $row);
+ }
+
+ if(!empty($pageDataArray)){
+
+ $this->pageTitle = $pageDataArray[0]['title'];
+ $this->pageDescription = $pageDataArray[0]['descript'];
+ $this->pageKeywords = $pageDataArray[0]['keywords'];
+ $this->pageHeader = $pageDataArray[0]['h1'];
+ $this->pageShortDescription = $pageDataArray[0]['short_description'];
+ $this->pageContent = $pageDataArray[0]['content'];
+
+ return true;
+
+ } else {
+ return false;
+ }
+ } else {
+ return false; // Страница не найдена!
+ }
+ }
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/depricate/k2slider.php b/k2shop/k2shop/app/depricate/k2slider.php
new file mode 100644
index 0000000..a3c91db
--- /dev/null
+++ b/k2shop/k2shop/app/depricate/k2slider.php
@@ -0,0 +1,314 @@
+
+
';
+
+ // Шаблон кнопки в слайде
+ public $slideButton = '';
+
+ // Шаблон левой управляющей стрелки слайдера
+ public $leftSliderControl = '';
+ // Шаблон правой управляющей стрелки слайдера
+ public $rightSliderControl = '';
+
+ public function generateSliderId($length = self::SLIDER_ID_LENGTH){
+
+ $chars = 'abdefhiknrstyzABDEFGHKNQRSTYZ23456789';
+ $numChars = strlen($chars);
+ $string = '';
+ for ($i = 0; $i < $length; $i++) {
+
+ $string .= substr($chars, rand(1, $numChars) - 1, 1);
+ }
+
+ return $string;
+ }
+
+
+ /**
+ * Парсит имя слайдера, полученное из тега {slider} для определения идентификатора
+ * и шаблона.
+ * @param type $sliderName
+ * @return type array - [0]- dbIdentificator (идентификатор) [1] - template (шаблон)
+ */
+ public function sliderDataParcer($sliderName){
+
+ $sliderInitData = explode("-", $sliderName);
+
+ return $sliderInitData;
+ }
+
+
+ /**
+ * Задает параметры слайдера и возвращает их в виде массива
+ * @return type array
+ */
+ public function getSliderParams(){
+ global $k2;
+
+// $sliderName = $this->sliderName;
+// $sliderInitData = [];
+//
+// // Если имя слайдера не указано, задаем значения по умолчанию
+// if($sliderName == '') {
+// $sliderInitData['dbIdentificator'] = 'main_slider'; // Идентификатор слайдера для получения данных из БД
+// $sliderInitData['template'] = 'slider'; // Шаблон слайдера в папке k2shop/usr/cfg/k2slider-slider.php
+// } else {
+// // Получаем параметры слайдера из тега {slider}
+// $sliderInitData['dbIdentificator'] = $this->sliderDataParcer($sliderName)[0];
+// $sliderInitData['template'] = $this->sliderDataParcer($sliderName)[1];
+// }
+
+ $sliderName = $this->sliderName;
+ $sliderInitData = [];
+
+ // Если имя слайдера не указано, задаем значения по умолчанию
+ if($sliderName == '') {
+ $sliderInitData['dbIdentificator'] = 'main_slider'; // Идентификатор слайдера для получения данных из БД
+ $sliderInitData['template'] = 'slider'; // Шаблон слайдера в папке k2shop/usr/cfg/k2slider-slider.php
+ } else {
+ // Получаем параметры слайдера из тега {slider}
+ $sliderInitData['dbIdentificator'] = $this->sliderDataParcer($sliderName)[0];
+ $sliderInitData['template'] = $this->sliderDataParcer($sliderName)[1];
+ }
+
+ return $sliderInitData;
+ }
+
+
+ /**
+ * Получает всю информацию о слайдере из БД по его идентификатору.
+ * @return array - массив данных о слайдах для слайдера с указанным именем
+ */
+ public function getSlides() {
+ global $k2;
+
+ $sliderDbIdentificator = $this->getSliderParams()['dbIdentificator']; // Получаем идентификатор слайдера для запроса к БД
+
+ $sliderData = []; // Массив с данными слайдов для нужного слайдера
+
+ $sqlQuery = 'SELECT s.image, s.content, s.link, s.sort_order
+ FROM k2slider AS s
+ WHERE slider_name ="'.$sliderDbIdentificator.' "
+ ORDER BY s.sort_order';
+
+
+ foreach ($k2->db->query($sqlQuery) as $row) {
+ array_push($sliderData, $row);
+ }
+
+ return $sliderData;
+ }
+
+
+ /**
+ * Формирует секцию индикаторов для переключения слайдов
+ * @param type $slidesArray - массив с данными о слайдах
+ * @return type string - HTML код внешнего вида индикаторов слайдера
+ */
+ public function getSliderIndicatiors($slidesArray){
+ global $k2;
+
+ $rez = '';
+
+ $slidesNumber = count($slidesArray); // Получаем количество слайдов для заданного слайдера
+
+ for( $i = 0; $i <= $slidesNumber-1; $i++) {
+
+ if( $i == 0 ) {
+ $rez .= $this->sliderIndicator;
+ $rez = str_replace('{slideNum}', $i, $rez);
+ $rez = str_replace('{indicatorClass}', $this->activeIndicatorClass, $rez);
+ } else {
+ $rez .= $this->sliderIndicator;
+ $rez = str_replace('{slideNum}', $i, $rez);
+ $rez = str_replace('{indicatorClass}', '', $rez);
+ }
+
+ }
+
+ return $rez;
+
+ }
+
+
+ /**
+ * Генерирует слайды из БД
+ * @param type $slidesArray - массив информации о слайдах
+ * @return type string HTML код слайдов
+ */
+ public function getSliderItems($slidesArray) {
+ global $k2;
+
+ $rez='';
+
+ foreach ($slidesArray as $key => $slide) {
+
+ if( $key == 0 ) {
+ $rez.= $this->sliderItem;
+ $rez = str_replace('{activeSlide}', $this->activeSlideClass, $rez);
+ $rez = str_replace('{slideContent}', $slide['content'], $rez);
+ $rez = str_replace('{slideButton}', $this->slideButton, $rez);
+ $rez = str_replace('{buttonLink}', $slide['link'], $rez);
+ $rez = str_replace('{slideImage}', $this->slideImage, $rez);
+ $rez = str_replace('{imageSrc}', $slide['image'], $rez);
+ $rez = str_replace('{imageAdditionalClass}', $this->imageAdditionalClass, $rez);
+
+ } else {
+ $rez.= $this->sliderItem;
+ $rez = str_replace('{activeSlide}','' , $rez);
+ $rez = str_replace('{slideContent}', $slide['content'], $rez);
+ $rez = str_replace('{slideButton}', $this->slideButton, $rez);
+ $rez = str_replace('{buttonLink}', $slide['link'], $rez);
+ $rez = str_replace('{slideImage}', $this->slideImage, $rez);
+ $rez = str_replace('{imageSrc}', $slide['image'], $rez);
+ $rez = str_replace('{imageAdditionalClass}', $this->imageAdditionalClass, $rez);
+ }
+ }
+ return $rez;
+ }
+
+
+ /**
+ * Генерирует управляющие стрелки слайдера
+ * @return string код управляющих стрелок слайдера
+ */
+ public function getSliderControls() {
+ global $k2;
+
+ $rez = $this->leftSliderControl.$this->rightSliderControl;
+
+ return $rez;
+ }
+
+
+ /**
+ * Переназначает свойства, отвечающие за внешний вид слайдера из шаблона, если таковой имеется в папке
+ */
+ public function sliderTemplateInit() {
+ global $k2;
+
+ $sliderTemplate = $this->getSliderParams()['template'];
+
+ $templateFileName = 'k2slider-'.$sliderTemplate.'.php'; // Формируем название файла шаблона
+ $templateFileUrl = $k2->rootdir.'/k2shop/usr/'.$k2->curtemplate.'/cfg/'.$templateFileName; // Формируем URL местонахождение файла
+
+ if (file_exists($templateFileUrl)) {
+
+ return $templateFileUrl;
+ } else {
+ return false;
+ }
+ }
+
+
+ /**
+ * Формирует и отдает HTML код слайдера
+ * @return type string HTML код слайдера
+ */
+ public function getSliderContent(){
+ global $k2;
+
+ $this->sliderTemplateInit();
+
+ $rez = $this->sliderContent;
+
+
+ // Выводим слайдер только на главной странице, если showOnlyOnMainPage = true
+ if( $this->showOnlyOnMainPage ) {
+
+ if( !(($_SERVER['REQUEST_URI'] == '/') || ($_SERVER['REQUEST_URI'] == '/index.php')) ) {
+ $rez = '';
+ }
+
+ }
+
+ $slidesArray = $this->getSlides();
+
+ $rez = str_replace('{sliderIndicators}', $this->getSliderIndicatiors($slidesArray), $rez);
+ $rez = str_replace('{sliderItems}', $this->getSliderItems($slidesArray), $rez);
+ $rez = str_replace('{sliderControls}', $this->getSliderControls(), $rez);
+ $rez = str_replace('{sliderId}', $this->generateSliderId(), $rez);
+
+ return $rez;
+ }
+
+ // Возвращаем контент
+ function content(){
+ if( $this->sliderTemplateInit() ) {
+ // Подключаем указанный шаблон
+ require_once $this->sliderTemplateInit();
+ }
+
+ $rez = $this->getSliderContent(); // Выводим слайдер
+
+ return $rez;
+ }
+
+
+}
\ No newline at end of file
diff --git a/k2shop/k2shop/app/lng/k2menu/en.csv b/k2shop/k2shop/app/lng/k2menu/en.csv
new file mode 100644
index 0000000..9159207
--- /dev/null
+++ b/k2shop/k2shop/app/lng/k2menu/en.csv
@@ -0,0 +1,17 @@
+name| value
+lnOrders| Orders
+lnTotalInfo| Total Information
+lnChangePassw| Change Password
+lnExit| Exit
+lnCabinet| Cabinet
+lnDrivers| Drivers
+lnCars| Cars
+lnTarifs| Tarifs
+lnPlaning| Planing
+lnTransfers| Transfers
+lnEmployees| Employees
+lnDiscounts| Discounts
+lnMutualSettlements| Mutual Settlements
+lnWorkingConditions| Working Conditions
+lnAccounting| Accounting
+lnDeposits| Deposits
\ No newline at end of file
diff --git a/k2shop/k2shop/app/lng/k2menu/ru.csv b/k2shop/k2shop/app/lng/k2menu/ru.csv
new file mode 100644
index 0000000..afdf40e
--- /dev/null
+++ b/k2shop/k2shop/app/lng/k2menu/ru.csv
@@ -0,0 +1,17 @@
+name|value
+lnOrders| Заказы
+lnTotalInfo| Общие данные
+lnChangePassw| Поменять пароль
+lnExit| Выход
+lnCabinet| Кабинет
+lnDrivers| Водители
+lnCars| Автомобили
+lnTarifs| Тарифы
+lnPlaning| Планинг
+lnTransfers| Трансферы
+lnEmployees| Сотрудники
+lnDiscounts| Скидки
+lnMutualSettlements| Взаиморасчёты
+lnWorkingConditions| Условия работы
+lnAccounting| Бухгалтерия
+lnDeposits| Депозиты
diff --git a/k2shop/k2shop/app/lng/k2messages/en.csv b/k2shop/k2shop/app/lng/k2messages/en.csv
new file mode 100644
index 0000000..6598a73
--- /dev/null
+++ b/k2shop/k2shop/app/lng/k2messages/en.csv
@@ -0,0 +1,2 @@
+name| value
+lnReedMessage| Please read message
diff --git a/k2shop/k2shop/app/lng/k2messages/ru.csv b/k2shop/k2shop/app/lng/k2messages/ru.csv
new file mode 100644
index 0000000..30834f0
--- /dev/null
+++ b/k2shop/k2shop/app/lng/k2messages/ru.csv
@@ -0,0 +1,2 @@
+name|value
+lnReedMessage| Пожалуйста прочитайте сообщение
\ No newline at end of file
diff --git a/k2shop/k2shop/app/lng/k2messages/ua.csv b/k2shop/k2shop/app/lng/k2messages/ua.csv
new file mode 100644
index 0000000..49f5701
--- /dev/null
+++ b/k2shop/k2shop/app/lng/k2messages/ua.csv
@@ -0,0 +1,2 @@
+name| value
+lnReedMessage| Будь ласка прочитайте повідомлення
\ No newline at end of file